diff --git a/README.md b/README.md
index 8894a6b3..61c3090d 100644
--- a/README.md
+++ b/README.md
@@ -6,5 +6,5 @@ This branch contains the pre-built frontend assets for Claude Relay Service.
These files are automatically generated by the CI/CD pipeline.
-Version: 1.1.262
-Build Date: 2026-01-22 07:19:11 UTC
+Version: 1.1.263
+Build Date: 2026-01-22 13:58:01 UTC
diff --git a/assets/AccountUsageRecordsView-BOIWIhGk.js b/assets/AccountUsageRecordsView-BOIWIhGk.js
deleted file mode 100644
index d6de0614..00000000
--- a/assets/AccountUsageRecordsView-BOIWIhGk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BUfCkBQO.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-R8HMg95E.js";import{c as W,s as j}from"./index-B3t2NHq9.js";import{f as x,R as me}from"./RecordDetailModal-CIaCpUK_.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(`
-`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default};
diff --git a/assets/AccountUsageRecordsView-CAVEOn9q.js b/assets/AccountUsageRecordsView-CAVEOn9q.js
new file mode 100644
index 00000000..c93a4ec3
--- /dev/null
+++ b/assets/AccountUsageRecordsView-CAVEOn9q.js
@@ -0,0 +1,2 @@
+import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BSjV1f9S.js";import{b as G}from"./vendor-Dr8jvgFu.js";import{c as D,aX as ge,r as h,_ as O,o as J,q as xe,x as p,z as e,R as g,P as o,u as c,J as w,O as K,Q as $,ac as U,aU as ye,y as i,I as Q}from"./vue-vendor-DV7DYXbz.js";import{c as P,f as x,b0 as X,s as j}from"./index-BahP9Xx9.js";import{R as me}from"./RecordDetailModal-iWzEw88d.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},be={class:"text-xs text-gray-500 dark:text-gray-400"},he={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ie={key:1},Ce={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ue={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ae={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ee={key:1},Fe={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ne={key:1,class:"space-y-4"},Be={class:"hidden overflow-x-auto md:block"},Ye={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},lt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},rt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=D(()=>N.params.accountId),C=D(()=>N.query.platform),A=h(!1),S=h(!1),V=h([]),B=h([]),Y=h([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:C.value||""}),E=h(!1),F=h(null),W=D(()=>R.name||R.id||f.value),M=D(()=>{const l={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||C.value||"unknown";return l[t]||"未知渠道"}),q=D(()=>!s.dateRange||s.dateRange.length!==2?"":`${P(s.dateRange[0])} ~ ${P(s.dateRange[1])}`),T=l=>{const t=typeof l=="number"?l:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},H=l=>{const t={page:l,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=G(s.dateRange[0]).toISOString(),t.endDate=G(s.dateRange[1]).toISOString()),C.value&&(t.platform=C.value),t},ee=l=>{var m,k,_,a,v;V.value=l.records||[];const t=l.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const r=l.filters||{};if(r.model!==void 0&&(s.model=r.model||""),r.apiKeyId!==void 0&&(s.apiKeyId=r.apiKeyId||""),r.sortOrder&&(s.sortOrder=r.sortOrder),r.startDate&&r.endDate){const b=[r.startDate,r.endDate],d=s.dateRange||[];(d[0]!==b[0]||d[1]!==b[1])&&(s.dateRange=b)}const u=l.summary||{};y.totalRequests=u.totalRequests||0,y.totalTokens=u.totalTokens||0,y.totalCost=u.totalCost||0,y.avgCost=u.avgCost||0,R.id=((m=l.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=l.accountInfo)==null?void 0:k.name)||"",R.platform=((_=l.accountInfo)==null?void 0:_.platform)||C.value||"",B.value=((a=l.availableFilters)==null?void 0:a.models)||[],Y.value=((v=l.availableFilters)==null?void 0:v.apiKeys)||[]},I=async(l=n.currentPage)=>{A.value=!0;try{const t=await X(f.value,H(l));ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{A.value=!1}},te=l=>{n.currentPage=l,I(l)},ae=l=>{n.pageSize=l,n.currentPage=1,I(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,I(1)},L=l=>{F.value=l,E.value=!0},oe=()=>{E.value=!1,F.value=null},le=()=>{Z.push("/accounts")},re=async()=>{var l;if(!S.value){S.value=!0;try{const t=[];let r=1,u=1;const m=50;for(;r<=u&&r<=m;){const z=(await X(f.value,{...H(r),pageSize:200})).data||{};t.push(...z.records||[]),u=((l=z.pagination)==null?void 0:l.totalPages)||1,r+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[P(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||T(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(`
+`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),b=document.createElement("a");b.href=v,b.download=`account-${f.value}-usage-records.csv`,b.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,I(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,I(1)},{deep:!0}),xe(()=>{I()}),(l,t)=>{const r=de,u=ue,m=ie,k=ce,_=pe;return i(),p("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:le}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,o(W.value),1),e("p",be,"ID: "+o(f.value),1),e("p",he,"渠道:"+o(M.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),p("span",Re,o(q.value),1)):(i(),p("span",Ie,"显示近 5000 条记录"))])]),e("div",Ce,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,o(c(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,o(c(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,o(T(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,o(T(y.avgCost)),1)])]),e("div",$e,[e("div",Ue,[g(r,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),p($,null,U(B.value,a=>(i(),Q(u,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),p($,null,U(Y.value,a=>(i(),Q(u,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[g(u,{label:"时间降序",value:"desc"}),g(u,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),K(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:S.value,type:"primary",onClick:re},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),K(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[A.value?(i(),p("div",Ae,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),K(" 加载中... ",-1)]))):(i(),p("div",Ee,[V.value.length===0?(i(),p("div",Fe,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),p("div",Ne,[e("div",Be,[e("table",Ye,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(i(!0),p($,null,U(V.value,a=>(i(),p("tr",{key:a.timestamp+a.model},[e("td",qe,o(c(P)(a.timestamp)),1),e("td",He,[e("div",Le,[e("span",Ge,o(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+o(a.apiKeyId),1)])]),e("td",Qe,o(a.model),1),e("td",Xe,o(c(x)(a.inputTokens)),1),e("td",Ze,o(c(x)(a.outputTokens)),1),e("td",We,o(c(x)(a.cacheCreateTokens))+" / "+o(c(x)(a.cacheReadTokens)),1),e("td",et,o(c(x)(a.totalTokens)),1),e("td",tt,o(a.costFormatted||T(a.cost)),1),e("td",at,[g(k,{size:"small",onClick:v=>L(a)},{default:w(()=>t[14]||(t[14]=[K("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),p($,null,U(V.value,a=>(i(),p("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",lt,o(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",rt," ID: "+o(a.apiKeyId)+" · "+o(c(P)(a.timestamp)),1),e("p",nt," 渠道:"+o(M.value),1)]),g(k,{size:"small",onClick:v=>L(a)},{default:w(()=>t[16]||(t[16]=[K("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+o(a.model),1),e("div",null,"总 Token:"+o(c(x)(a.totalTokens)),1),e("div",null,"输入:"+o(c(x)(a.inputTokens)),1),e("div",null,"输出:"+o(c(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+o(c(x)(a.cacheCreateTokens))+" / "+o(c(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+o(a.costFormatted||T(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+o(n.totalRecords)+" 条记录 ",1),g(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),g(me,{record:F.value,show:E.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default};
diff --git a/assets/AccountsView-C9_86Dy1.css b/assets/AccountsView-C9_86Dy1.css
deleted file mode 100644
index fee9bdb0..00000000
--- a/assets/AccountsView-C9_86Dy1.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes fadeIn-824201c5{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-824201c5]{animation:fadeIn-824201c5 .3s ease-out}.loading-spinner[data-v-2a966370]{width:20px;height:20px;border:2px solid #e5e7eb;border-top:2px solid #14b8a6;border-radius:50%;animation:spin-2a966370 1s linear infinite}@keyframes spin-2a966370{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-spinner[data-v-f40122f9]{border-top-color:transparent;border-radius:9999px;animation:spin-f40122f9 .8s linear infinite}@keyframes spin-f40122f9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fadeIn-f19e4a71{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-f19e4a71]{animation:fadeIn-f19e4a71 .2s ease-out}.loading-spinner[data-v-f19e4a71]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-f19e4a71 .8s linear infinite;display:inline-block}@keyframes spin-f19e4a71{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-v-13083b1f] .balance-script-dialog{max-height:90vh;display:flex;flex-direction:column}[data-v-13083b1f] .balance-script-dialog .el-dialog__body{flex:1 1 auto;min-height:0;overflow:auto}[data-v-13083b1f] .balance-script-dialog .el-dialog__footer{border-top:1px solid rgba(229,231,235,.7)}.input-text[data-v-13083b1f]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-text[data-v-13083b1f]:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.input-text[data-v-13083b1f]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.input-text[data-v-13083b1f]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1))}.accounts-container[data-v-9813ec02]{min-height:calc(100vh - 300px)}.loading-spinner[data-v-9813ec02]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-9813ec02 1s linear infinite}@keyframes spin-9813ec02{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-wrapper[data-v-9813ec02]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.dark .table-wrapper[data-v-9813ec02]{border-color:#ffffff1a}.table-container[data-v-9813ec02]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-9813ec02]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-9813ec02]::-webkit-scrollbar{height:8px}.table-container[data-v-9813ec02]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-9813ec02]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-9813ec02]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-9813ec02]{transition:all .2s ease}.table-row[data-v-9813ec02]:hover{background-color:#00000005}.dark .table-row[data-v-9813ec02]:hover{background-color:#ffffff05}.table-container thead .checkbox-column[data-v-9813ec02],.table-container thead .name-column[data-v-9813ec02]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-9813ec02],.dark .table-container thead .name-column[data-v-9813ec02]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container thead .operations-column[data-v-9813ec02]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-9813ec02]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-9813ec02],.table-container tbody tr:nth-child(odd) .name-column[data-v-9813ec02]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-9813ec02],.table-container tbody tr:nth-child(2n) .name-column[data-v-9813ec02]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-9813ec02]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-9813ec02]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-9813ec02],.table-container tbody tr:hover .name-column[data-v-9813ec02]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:hover .name-column[data-v-9813ec02]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-9813ec02]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-9813ec02]{box-shadow:8px 0 12px -8px #1e293b73}.table-container tbody tr:nth-child(odd) .operations-column[data-v-9813ec02]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-9813ec02]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-9813ec02]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-9813ec02]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-9813ec02]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-9813ec02]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-9813ec02]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-9813ec02]{box-shadow:-8px 0 12px -8px #1e293b73}
diff --git a/assets/AccountsView-CWWlCm8X.css b/assets/AccountsView-CWWlCm8X.css
new file mode 100644
index 00000000..b24853b4
--- /dev/null
+++ b/assets/AccountsView-CWWlCm8X.css
@@ -0,0 +1 @@
+@keyframes fadeIn-31bfe83b{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-31bfe83b]{animation:fadeIn-31bfe83b .3s ease-out}.loading-spinner[data-v-3b48d107]{width:20px;height:20px;border:2px solid #e5e7eb;border-top:2px solid #14b8a6;border-radius:50%;animation:spin-3b48d107 1s linear infinite}@keyframes spin-3b48d107{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-spinner[data-v-c29b5f70]{border-top-color:transparent;border-radius:9999px;animation:spin-c29b5f70 .8s linear infinite}@keyframes spin-c29b5f70{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fadeIn-f19e4a71{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-f19e4a71]{animation:fadeIn-f19e4a71 .2s ease-out}.loading-spinner[data-v-f19e4a71]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-f19e4a71 .8s linear infinite;display:inline-block}@keyframes spin-f19e4a71{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-v-5e76f743] .balance-script-dialog{max-height:90vh;display:flex;flex-direction:column}[data-v-5e76f743] .balance-script-dialog .el-dialog__body{flex:1 1 auto;min-height:0;overflow:auto}[data-v-5e76f743] .balance-script-dialog .el-dialog__footer{border-top:1px solid rgba(229,231,235,.7)}.input-text[data-v-5e76f743]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-text[data-v-5e76f743]:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.input-text[data-v-5e76f743]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.input-text[data-v-5e76f743]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1))}.accounts-container[data-v-f3c6543e]{min-height:calc(100vh - 300px)}.loading-spinner[data-v-f3c6543e]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-f3c6543e 1s linear infinite}@keyframes spin-f3c6543e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-wrapper[data-v-f3c6543e]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.dark .table-wrapper[data-v-f3c6543e]{border-color:#ffffff1a}.table-container[data-v-f3c6543e]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-f3c6543e]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-f3c6543e]::-webkit-scrollbar{height:8px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-track{background:var(--bg-gradient-mid)}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb{background:var(--bg-gradient-end)}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.table-container tbody tr:hover>td[data-v-f3c6543e]{background-color:rgba(var(--primary-rgb),.06)!important}.dark .table-container tbody tr:hover>td[data-v-f3c6543e]{background-color:rgba(var(--primary-rgb),.16)!important}.table-container tbody tr:nth-child(odd)>td[data-v-f3c6543e]{background-color:#fff}.table-container tbody tr:nth-child(2n)>td[data-v-f3c6543e]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd)>td[data-v-f3c6543e]{background-color:var(--bg-gradient-start)}.dark .table-container tbody tr:nth-child(2n)>td[data-v-f3c6543e]{background-color:var(--bg-gradient-mid)}.table-container thead .checkbox-column[data-v-f3c6543e],.table-container thead .name-column[data-v-f3c6543e]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-f3c6543e],.dark .table-container thead .name-column[data-v-f3c6543e]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container thead .operations-column[data-v-f3c6543e]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-f3c6543e]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .name-column[data-v-f3c6543e]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-f3c6543e]{box-shadow:8px 0 12px -8px #1e293b73}.table-container tbody .operations-column[data-v-f3c6543e]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-f3c6543e]{box-shadow:-8px 0 12px -8px #1e293b73}
diff --git a/assets/AccountsView-G6_okn5O.js b/assets/AccountsView-G6_okn5O.js
deleted file mode 100644
index 3238e8f9..00000000
--- a/assets/AccountsView-G6_okn5O.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import{b as Kr,e as br,f as Sr}from"./element-plus-BUfCkBQO.js";import{r as $,aP as Mr,o as $e,V as Ya,x as n,y as o,z as e,L as c,K as b,al as ze,aT as Ot,O as x,aq as z,aa as Dr,P as u,aV as Ja,aY as va,C as I,c as se,Z as Pr,an as _e,Q as Ce,q as aa,I as Ye,ac as We,a5 as Kt,R as Ee,B as He,u as st,aX as jr,aU as Lr,D as ar,_ as vr,J as nt,Y as _t}from"./vue-vendor-R8HMg95E.js";import{c as G,s as P,_ as ra,a as Vr,A as ka}from"./index-B3t2NHq9.js";import{C as kr}from"./ConfirmModal-BAFPIqcc.js";import{C as zr}from"./chart-yFHxLHpB.js";import{C as Qa,_ as Rr}from"./ActionDropdown-4ngn0-GS.js";import"./vendor-Dr8jvgFu.js";const Ha=$(!1),pr=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Rt=$(null);function hr(){return{showConfirmModal:Ha,confirmOptions:pr,showConfirm:(N,K,V="继续",U="取消")=>new Promise(C=>{pr.value={title:N,message:K,confirmText:V,cancelText:U},Rt.value=C,Ha.value=!0}),handleConfirm:()=>{Ha.value=!1,Rt.value&&(Rt.value(!0),Rt.value=null)},handleCancel:()=>{Ha.value=!1,Rt.value&&(Rt.value(!1),Rt.value=null)}}}const wr=Mr("accounts",()=>{const H=$([]),Pe=$([]),p=$([]),N=$([]),K=$([]),V=$([]),U=$([]),C=$([]),v=$(!1),k=$(null),j=$(""),oe=$("asc"),Z=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-accounts");if(w.success)H.value=w.data||[];else throw new Error(w.message||"获取Claude账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},pe=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-console-accounts");if(w.success)Pe.value=w.data||[];else throw new Error(w.message||"获取Claude Console账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},J=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/bedrock-accounts");if(w.success)p.value=w.data||[];else throw new Error(w.message||"获取Bedrock账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},W=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/gemini-accounts");if(w.success)N.value=w.data||[];else throw new Error(w.message||"获取Gemini账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},O=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-accounts");if(w.success)K.value=w.data||[];else throw new Error(w.message||"获取OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},y=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/azure-openai-accounts");if(w.success)V.value=w.data||[];else throw new Error(w.message||"获取Azure OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},g=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-responses-accounts");if(w.success)U.value=w.data||[];else throw new Error(w.message||"获取OpenAI-Responses账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/droid-accounts");if(w.success)C.value=w.data||[];else throw new Error(w.message||"获取Droid账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:Pe,bedrockAccounts:p,geminiAccounts:N,openaiAccounts:K,azureOpenaiAccounts:V,openaiResponsesAccounts:U,droidAccounts:C,loading:v,error:k,sortBy:j,sortOrder:oe,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:pe,fetchBedrockAccounts:J,fetchGeminiAccounts:W,fetchOpenAIAccounts:O,fetchAzureOpenAIAccounts:y,fetchOpenAIResponsesAccounts:g,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),pe(),J(),W(),O(),y(),g(),D()])}catch(w){throw k.value=w.message,w}finally{v.value=!1}},createClaudeAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-accounts",w);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-console-accounts",w);if(m.success)return await pe(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/bedrock-accounts",w);if(m.success)return await J(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-accounts",w);if(m.success)return await O(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/droid-accounts",w);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/droid-accounts/${w}`,m);if(E.success)return await D(),E.data;throw new Error(E.message||"更新Droid账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},createAzureOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/azure-openai-accounts",w);if(m.success)return await y(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-responses-accounts",w);if(m.success)return await g(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-api-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-accounts/${w}`,m);if(E.success)return await Z(),E;throw new Error(E.message||"更新Claude账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateClaudeConsoleAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-console-accounts/${w}`,m);if(E.success)return await pe(),E;throw new Error(E.message||"更新Claude Console账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateBedrockAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/bedrock-accounts/${w}`,m);if(E.success)return await J(),E;throw new Error(E.message||"更新Bedrock账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-accounts/${w}`,m);if(E.success)return await O(),E;throw new Error(E.message||"更新OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateAzureOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/azure-openai-accounts/${w}`,m);if(E.success)return await y(),E;throw new Error(E.message||"更新Azure OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIResponsesAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-responses-accounts/${w}`,m);if(E.success)return await g(),E;throw new Error(E.message||"更新OpenAI-Responses账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiApiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-api-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini API账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},toggleAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}/toggle`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}/toggle`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}/toggle`:w==="gemini"?E=`/admin/gemini-accounts/${m}/toggle`:w==="openai"?E=`/admin/openai-accounts/${m}/toggle`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}/toggle`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}/toggle`:E=`/admin/openai-accounts/${m}/toggle`;const Qe=await G.put(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},deleteAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}`:w==="gemini"?E=`/admin/gemini-accounts/${m}`:w==="openai"?E=`/admin/openai-accounts/${m}`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}`:E=`/admin/openai-accounts/${m}`;const Qe=await G.delete(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"删除失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},refreshClaudeToken:async w=>{v.value=!0,k.value=null;try{const m=await G.post(`/admin/claude-accounts/${w}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-setup-token-url",w);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-setup-token-code",w);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/oauth-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/setup-token-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async w=>{try{const m=await G.post("/admin/gemini-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async w=>{try{const m=await G.post("/admin/gemini-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async w=>{try{const m=await G.post("/admin/openai-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async w=>{try{const m=await G.post("/admin/openai-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async w=>{k.value=null;try{const m=await G.post("/admin/droid-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async w=>{k.value=null;try{return await G.post("/admin/droid-accounts/exchange-code",w)}catch(m){throw k.value=m.message,m}},sortAccounts:w=>{j.value===w?oe.value=oe.value==="asc"?"desc":"asc":(j.value=w,oe.value="asc")},reset:()=>{H.value=[],Pe.value=[],p.value=[],N.value=[],K.value=[],V.value=[],U.value=[],C.value=[],v.value=!1,k.value=null,j.value="",oe.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Wr={class:"relative"},Fr={key:0,class:"mt-1 text-xs text-red-500"},Br={key:1,class:"mt-1 text-xs text-green-500"},Gr={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$({...p.modelValue}),V=$(!!(K.value.username||K.value.password)),U=$(!1),C=$(""),v=$(""),k=$(!1);$e(()=>p.modelValue,O=>{JSON.stringify(O)!==JSON.stringify(K.value)&&(K.value={...O},V.value=!!(O.username||O.password))},{deep:!0}),$e(()=>K.value.enabled,()=>{oe()}),$e(()=>K.value.type,()=>{oe()}),$e(()=>K.value.host,()=>{oe()}),$e(()=>K.value.port,()=>{oe()}),$e(()=>K.value.username,()=>{oe()}),$e(()=>K.value.password,()=>{oe()}),$e(V,O=>{O||(K.value.username="",K.value.password="",oe())});let j=null;function oe(){j&&clearTimeout(j),j=setTimeout(()=>{const O={...K.value};V.value||(O.username="",O.password=""),N("update:modelValue",O)},100)}function Z(){if(v.value="",k.value=!1,!!C.value)try{const O=C.value.split("#")[0].trim();if(!O)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,g=O.match(y);if(!g){const we=/^([^:]+):(\d+)$/,Ke=O.match(we);if(Ke){K.value.type="socks5",K.value.host=Ke[1],K.value.port=Ke[2],K.value.username="",K.value.password="",V.value=!1,k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ce,B,_,Q]=g;K.value.type=D.toLowerCase(),K.value.host=_,K.value.port=Q,ce&&B?(K.value.username=decodeURIComponent(ce),K.value.password=decodeURIComponent(B),V.value=!0):(K.value.username="",K.value.password="",V.value=!1),k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function pe(){C.value="",v.value="",k.value=!1}function J(){setTimeout(()=>{Z()},0)}function W(){const O=C.value.trim();O.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(O)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(O))&&Z():/^[^:]+:\d{2,5}$/.test(O)&&Z()}return Ya(()=>{j&&clearTimeout(j)}),(O,y)=>(o(),n("div",Or,[e("div",Er,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=g=>K.value.enabled=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,K.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),K.value.enabled?(o(),n("div",qr,[y[22]||(y[22]=Ot('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[x(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Wr,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=g=>C.value=g),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:W,onKeyup:Dr(Z,["enter"]),onPaste:J},null,544),[[z,C.value]]),C.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:pe},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):c("",!0)]),v.value?(o(),n("p",Fr,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(v.value),1)])):k.value?(o(),n("p",Br,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),x(" 代理配置已自动填充 ",-1)]))):c("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=g=>K.value.type=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ja,K.value.type]])]),e("div",Gr,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=g=>K.value.host=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[z,K.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=g=>K.value.port=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[z,K.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=g=>V.value=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,V.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),V.value?(o(),n("div",Jr,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=g=>K.value.username=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[z,K.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=g=>K.value.password=g),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:U.value?"text":"password"},null,8,Zr),[[va,K.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=g=>U.value=!U.value)},[e("i",{class:I(U.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):c("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),x("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):c("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},gs={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},ps={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Ts={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Us={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},Ps={class:"space-y-3"},js={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Vs={class:"flex items-start gap-4"},zs={class:"flex-1"},Rs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ws={class:"flex items-start gap-3"},Fs={class:"flex-1"},Bs=["disabled"],Gs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],gl={key:0,class:"fas fa-link mr-2"},pl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Tl={class:"flex items-start gap-3"},Il={class:"flex-1"},Ul=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Pl={class:"flex items-center gap-2"},jl=["value"],Ll={class:"space-y-2"},Vl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},zl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Rl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=wr(),U=$(!1),C=$(!1),v=$(""),k=$(""),j=$(!1),oe=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=$(""),pe=$(""),J=$(""),W=$(""),O=$(0);let y=null;const g=$("manual"),D=$(""),ce=$(!1),B=$(""),_=$(!1),Q=$({current:0,total:0}),we=se(()=>D.value.split(`
-`).map(de=>de.trim()).filter(de=>de.length>0).length),Ke=se(()=>N.platform==="droid"?!!Z.value:v.value&&k.value.trim()),F=se(()=>{if(!O.value||O.value<=0)return"00:00";const de=Math.floor(O.value/60),a=O.value%60;return`${de.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`}),ee=de=>{if(S(),!de||de<=0){O.value=0;return}O.value=Math.floor(de),y=setInterval(()=>{O.value<=1?(O.value=0,S()):O.value-=1},1e3)},S=()=>{y&&(clearInterval(y),y=null)};$e(k,de=>{if(N.platform==="droid"||!de||typeof de!="string")return;const a=de.trim();if(!a)return;if(a.startsWith("http://")||a.startsWith("https://"))if(a.startsWith("http://localhost:45462")||a.startsWith("http://localhost:1455"))try{const Ge=new URL(a).searchParams.get("code");Ge?(k.value=Ge,P("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(Ae){console.error("Failed to parse URL:",Ae),P("链接格式错误,请检查是否为完整的 URL","error")}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"||N.platform==="openai")try{const Ge=new URL(a).searchParams.get("code");Ge&&(k.value=Ge,P("成功提取授权码!","success"))}catch{}else P("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const h=async()=>{var de;S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",j.value=!1,U.value=!0;try{const a=(de=N.proxy)!=null&&de.enabled?{proxy:{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}}:{};if(N.platform==="claude"){const te=await V.generateClaudeAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"){const te=await V.generateGeminiAuthUrl({...a,oauthProvider:oe.value});v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="openai"){const te=await V.generateOpenAIAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="droid"){const te=await V.generateDroidAuthUrl(a);v.value=te.verificationUriComplete||te.verificationUri,J.value=te.verificationUri,W.value=te.verificationUriComplete||te.verificationUri,pe.value=te.userCode,ee(te.expiresIn||300),Z.value=te.sessionId}}catch(a){P(a.message||"生成授权链接失败","error")}finally{U.value=!1}},fe=()=>{S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",h()},le=async()=>{if(!v.value){P("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(v.value),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}catch{const a=document.createElement("input");a.value=v.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}},je=async()=>{if(!pe.value){P("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(pe.value),P("验证码已复制","success")}catch{const a=document.createElement("input");a.value=pe.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),P("验证码已复制","success")}},Y=()=>{W.value?window.open(W.value,"_blank","noopener"):J.value&&window.open(J.value,"_blank","noopener")},T=async()=>{var de;if(Ke.value){C.value=!0;try{let a={};N.platform==="claude"?a={sessionId:Z.value,callbackUrl:k.value.trim()}:N.platform==="gemini"||N.platform==="gemini-antigravity"?a={code:k.value.trim(),sessionId:Z.value,oauthProvider:oe.value}:N.platform==="openai"?a={code:k.value.trim(),sessionId:Z.value}:N.platform==="droid"&&(a={sessionId:Z.value}),(de=N.proxy)!=null&&de.enabled&&(a.proxy={type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null});let te;if(N.platform==="claude")te=await V.exchangeClaudeCode(a);else if(N.platform==="gemini"||N.platform==="gemini-antigravity")te=await V.exchangeGeminiCode(a),te&&(te.oauthProvider=oe.value);else if(N.platform==="openai")te=await V.exchangeOpenAICode(a);else if(N.platform==="droid"){const Ae=await V.exchangeDroidCode(a);if(!Ae.success){if(Ae.pending){const Ge=Ae.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";P(Ge,"info"),typeof Ae.expiresIn=="number"&&Ae.expiresIn>=0&&ee(Ae.expiresIn);return}throw new Error(Ae.message||"授权失败,请重试")}te=Ae.data,S()}K("success",te)}catch(a){P(a.message||"授权失败,请检查授权码是否正确","error")}finally{C.value=!1}}};Pr(()=>{S()});const q=async()=>{var Ge;const de=D.value.split(`
-`).map(De=>De.trim()).filter(De=>De.length>0);if(de.length===0){B.value="请输入至少一个 sessionKey";return}ce.value=!0,B.value="",Q.value={current:0,total:de.length};const a=(Ge=N.proxy)!=null&&Ge.enabled?{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}:null,te=[],Ae=[];for(let De=0;De0?K("success",te):ce.value=!1,Ae.length>0&&te.length===0?B.value="全部授权失败,请检查 sessionKey 是否有效":Ae.length>0&&(B.value=`${Ae.length} 个授权失败`)},be=()=>{D.value="",B.value="",ce.value=!1,Q.value={current:0,total:0}},ge=()=>{be(),v.value="",k.value="",Z.value=""};return Pe({resetCookieAuth:be}),(de,a)=>(o(),n("div",Xr,[H.platform==="claude"?(o(),n("div",es,[e("div",ts,[e("div",as,[a[29]||(a[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",rs,[a[28]||(a[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ss,[a[10]||(a[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",ls,[e("label",os,[b(e("input",{"onUpdate:modelValue":a[0]||(a[0]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:ge},null,544),[[_e,g.value]]),a[8]||(a[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",ns,[b(e("input",{"onUpdate:modelValue":a[1]||(a[1]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:ge},null,544),[[_e,g.value]]),a[9]||(a[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),g.value==="cookie"?(o(),n("div",is,[e("div",ds,[a[17]||(a[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",us,[e("label",gs,[a[12]||(a[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),a[13]||(a[13]=x(" sessionKey ",-1)),we.value>1?(o(),n("span",ps,u(we.value)+" 个 ",1)):c("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:a[2]||(a[2]=te=>_.value=!_.value)},a[11]||(a[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":a[3]||(a[3]=te=>D.value=te),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
-sk-ant-sid01-xxxxx...
-sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[z,D.value]]),we.value>1?(o(),n("p",cs,[a[14]||(a[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(we.value)+" 个账户 ",1)])):c("",!0)]),_.value?(o(),n("div",ys,a[15]||(a[15]=[Ot('如何获取 sessionKey
- 在浏览器中登录 claude.ai
- 按 F12 打开开发者工具
- 切换到 Application(应用)标签页
- 在左侧找到 Cookies → https://claude.ai
- 找到键为 sessionKey 的那一行
- 复制其 Value(值)列的内容
sessionKey 通常以 sk-ant-sid01- 开头
',3)]))):c("",!0),B.value?(o(),n("div",ms,[e("p",xs,[a[16]||(a[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(B.value),1)])])):c("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:ce.value||!D.value.trim(),type:"button",onClick:q},[ce.value?(o(),n("div",bs)):(o(),n("i",vs)),ce.value&&Q.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(Q.value.current)+"/"+u(Q.value.total)+"... ",1)],64)):ce.value?(o(),n(Ce,{key:3},[x(" 正在授权... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,fs)])])):(o(),n("div",ks,[a[27]||(a[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",hs,[e("div",ws,[e("div",$s,[a[20]||(a[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",As,[a[19]||(a[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Us,[e("div",_s,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ks),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:fe},a[18]||(a[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Is)):(o(),n("i",Ts)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Cs))])])]),a[26]||(a[26]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Ss,[e("div",Ms,[a[25]||(a[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ds,[a[23]||(a[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),a[24]||(a[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[x(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),x(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Ps,[e("div",null,[a[21]||(a[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[4]||(a[4]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[22]||(a[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):H.platform==="gemini"||H.platform==="gemini-antigravity"?(o(),n("div",js,[e("div",Ls,[e("div",Vs,[a[43]||(a[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",zs,[a[41]||(a[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),a[42]||(a[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",Rs,[e("p",Os,[a[30]||(a[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a[31]||(a[31]=x(" 授权类型:",-1)),e("span",Es,u(H.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",Ns,[e("div",qs,[e("div",Ws,[a[34]||(a[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Fs,[a[33]||(a[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Hs,[e("div",Js,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ys),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:fe},a[32]||(a[32]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Qs)):(o(),n("i",Gs)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Bs))])])]),a[40]||(a[40]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Zs,[e("div",Xs,[a[39]||(a[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",el,[a[37]||(a[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),a[38]||(a[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",tl,[e("div",null,[a[35]||(a[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[5]||(a[5]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[36]||(a[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),x(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):H.platform==="openai"?(o(),n("div",al,[e("div",rl,[e("div",sl,[a[55]||(a[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ll,[a[53]||(a[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),a[54]||(a[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",ol,[e("div",nl,[e("div",il,[a[46]||(a[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",dl,[a[45]||(a[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",cl,[e("div",yl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,ml),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:fe},a[44]||(a[44]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",pl)):(o(),n("i",gl)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,ul))])])]),a[52]||(a[52]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",xl,[e("div",fl,[a[51]||(a[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",bl,[a[49]||(a[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),a[50]||(a[50]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[x(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),x(" 时: ")],-1)),e("div",vl,[e("div",null,[a[47]||(a[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),x("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[6]||(a[6]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
-方式2:仅复制 code 参数的值
-系统会自动识别并提取所需信息`,rows:"3"},null,512),[[z,k.value]])]),a[48]||(a[48]=Ot('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):H.platform==="droid"?(o(),n("div",kl,[e("div",hl,[e("div",wl,[a[67]||(a[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",$l,[a[65]||(a[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),a[66]||(a[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Al,[e("div",Cl,[e("div",Tl,[a[63]||(a[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Il,[a[62]||(a[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Sl,[e("div",Ml,[a[58]||(a[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Dl,[e("div",Pl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,jl),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Y},a[56]||(a[56]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),x(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:fe},a[57]||(a[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),x("重新生成 ",-1)]))])])]),e("div",Ll,[a[60]||(a[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Vl,[e("span",zl,u(pe.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:je},a[59]||(a[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),x("复制 ",-1)]))])]),e("div",Rl,[e("span",null,[a[61]||(a[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),x(" 剩余有效期:"+u(F.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Kl)):(o(),n("i",_l)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Ul))])])]),a[64]||(a[64]=Ot(' 2
在浏览器中打开链接并完成授权
在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。
3
完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。
若提示授权仍在等待确认,请稍候片刻后系统会自动重试。
',2))])])])])])):c("",!0),e("div",Ol,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:a[7]||(a[7]=te=>de.$emit("back"))}," 上一步 "),H.platform==="claude"&&g.value==="cookie"?c("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ke.value||C.value,type:"button",onClick:T},[C.value?(o(),n("div",Nl)):c("",!0),x(" "+u(C.value?"验证中...":"完成授权"),1)],8,El))])]))}},Wl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Fl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},Bl={class:"mb-4 flex items-center justify-between sm:mb-6"},Gl={class:"mb-6"},Ql={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Hl={class:"space-y-4"},Jl={class:"flex gap-4"},Yl={class:"flex cursor-pointer items-center"},Zl={class:"flex cursor-pointer items-center"},Xl={class:"flex cursor-pointer items-center"},eo={class:"flex cursor-pointer items-center"},to={class:"flex gap-3"},ao=["disabled"],ro={key:0,class:"loading-spinner mr-2"},so={class:"space-y-4"},lo={key:0,class:"py-8 text-center"},oo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},no={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},io={class:"mb-3 flex items-start justify-between"},uo={class:"flex-1"},go={class:"font-semibold text-gray-900"},po={class:"mt-1 text-sm text-gray-500"},co={class:"ml-4 flex items-center gap-2"},yo={class:"flex items-center justify-between text-sm text-gray-600"},mo={class:"flex items-center gap-4"},xo={class:"flex items-center gap-2"},fo=["onClick"],bo=["disabled","onClick"],vo={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ko={class:"modal-content w-full max-w-lg p-4 sm:p-6"},ho={class:"space-y-4"},wo={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},$o={class:"flex gap-3 pt-4"},Ao=["disabled"],Co={key:0,class:"loading-spinner mr-2"},To={__name:"GroupManagementModal",emits:["close","refresh"],setup(H,{emit:Pe}){const p=Pe,N=$(!0),K=$(!1),V=$([]),U=$(!1),C=$(!1),v=$({name:"",platform:"claude",description:""}),k=$(!1),j=$(!1),oe=$(null),Z=$({name:"",platform:"",description:""}),pe=B=>B?new Date(B).toLocaleDateString("zh-CN"):"-",J=async()=>{K.value=!0;try{const B=await G.get("/admin/account-groups");V.value=B.data||[]}catch{P("加载分组列表失败","error")}finally{K.value=!1}},W=async()=>{var B,_;if(!v.value.name||!v.value.platform){P("请填写必填项","error");return}C.value=!0;try{await G.post("/admin/account-groups",{name:v.value.name,platform:v.value.platform,description:v.value.description}),P("分组创建成功","success"),O(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"创建分组失败","error")}finally{C.value=!1}},O=()=>{U.value=!1,v.value={name:"",platform:"claude",description:""}},y=B=>{oe.value=B,Z.value={name:B.name,platform:B.platform,description:B.description||""},k.value=!0},g=async()=>{var B,_;if(!Z.value.name){P("请填写分组名称","error");return}j.value=!0;try{await G.put(`/admin/account-groups/${oe.value.id}`,{name:Z.value.name,description:Z.value.description}),P("分组更新成功","success"),D(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"更新分组失败","error")}finally{j.value=!1}},D=()=>{k.value=!1,oe.value=null,Z.value={name:"",platform:"",description:""}},ce=async B=>{var _,Q;if(B.memberCount>0){P("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${B.name}" 吗?`))try{await G.delete(`/admin/account-groups/${B.id}`),P("分组删除成功","success"),await J(),p("refresh")}catch(we){P(((Q=(_=we.response)==null?void 0:_.data)==null?void 0:Q.error)||"删除分组失败","error")}};return aa(()=>{J()}),(B,_)=>(o(),Ye(Kt,{to:"body"},[N.value?(o(),n("div",Wl,[e("div",Fl,[e("div",Bl,[_[11]||(_[11]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:_[0]||(_[0]=Q=>B.$emit("close"))},_[10]||(_[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Gl,[e("button",{class:"btn btn-primary px-4 py-2",onClick:_[1]||(_[1]=Q=>U.value=!0)},_[12]||(_[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 创建新分组 ",-1)]))]),U.value?(o(),n("div",Ql,[_[20]||(_[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Hl,[e("div",null,[_[13]||(_[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[2]||(_[2]=Q=>v.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,v.value.name]])]),e("div",null,[_[18]||(_[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Jl,[e("label",Yl,[b(e("input",{"onUpdate:modelValue":_[3]||(_[3]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"claude"},null,512),[[_e,v.value.platform]]),_[14]||(_[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",Zl,[b(e("input",{"onUpdate:modelValue":_[4]||(_[4]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"gemini"},null,512),[[_e,v.value.platform]]),_[15]||(_[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Xl,[b(e("input",{"onUpdate:modelValue":_[5]||(_[5]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"openai"},null,512),[[_e,v.value.platform]]),_[16]||(_[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",eo,[b(e("input",{"onUpdate:modelValue":_[6]||(_[6]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"droid"},null,512),[[_e,v.value.platform]]),_[17]||(_[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[_[19]||(_[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":_[7]||(_[7]=Q=>v.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,v.value.description]])]),e("div",to,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!v.value.name||!v.value.platform||C.value,onClick:W},[C.value?(o(),n("div",ro)):c("",!0),x(" "+u(C.value?"创建中...":"创建"),1)],8,ao),e("button",{class:"btn btn-secondary px-4 py-2",onClick:O},"取消")])])])):c("",!0),e("div",so,[K.value?(o(),n("div",lo,_[21]||(_[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):V.value.length===0?(o(),n("div",oo,_[22]||(_[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(o(),n("div",no,[(o(!0),n(Ce,null,We(V.value,Q=>(o(),n("div",{key:Q.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",io,[e("div",uo,[e("h4",go,u(Q.name),1),e("p",po,u(Q.description||"暂无描述"),1)]),e("div",co,[e("span",{class:I(["rounded-full px-2 py-1 text-xs font-medium",Q.platform==="claude"?"bg-purple-100 text-purple-700":Q.platform==="gemini"?"bg-blue-100 text-blue-700":Q.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(Q.platform==="claude"?"Claude":Q.platform==="gemini"?"Gemini":Q.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",yo,[e("div",mo,[e("span",null,[_[23]||(_[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),x(" "+u(Q.memberCount||0)+" 个成员 ",1)]),e("span",null,[_[24]||(_[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),x(" "+u(pe(Q.createdAt)),1)])]),e("div",xo,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:we=>y(Q)},_[25]||(_[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,fo),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:Q.memberCount>0,title:"删除",onClick:we=>ce(Q)},_[26]||(_[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,bo)])])]))),128))]))])])])):c("",!0),k.value?(o(),n("div",vo,[e("div",ko,[e("div",{class:"mb-4 flex items-center justify-between"},[_[28]||(_[28]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:D},_[27]||(_[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",ho,[e("div",null,[_[29]||(_[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[8]||(_[8]=Q=>Z.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,Z.value.name]])]),e("div",null,[_[31]||(_[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",wo,[x(u(Z.value.platform==="claude"?"Claude":Z.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),_[30]||(_[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[_[32]||(_[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":_[9]||(_[9]=Q=>Z.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,Z.value.description]])]),e("div",$o,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!Z.value.name||j.value,onClick:g},[j.value?(o(),n("div",Co)):c("",!0),x(" "+u(j.value?"更新中...":"更新"),1)],8,Ao),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:D},"取消")])])])])):c("",!0)]))}},Io={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Uo={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},Ko={class:"flex items-center gap-2 sm:gap-3"},So={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Mo={class:"flex items-center gap-2"},Do=["disabled"],Po={key:0,class:"py-8 text-center"},jo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},Lo={key:2},Vo={class:"mb-4 space-y-3"},zo={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},Ro={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Oo={class:"flex items-center gap-2"},Eo={class:"flex gap-1"},No={class:"flex flex-1 items-center gap-2 lg:max-w-md"},qo={class:"relative flex-1"},Wo={class:"flex gap-1"},Fo={class:"flex flex-wrap items-center justify-between gap-2"},Bo={class:"flex flex-wrap items-center gap-2"},Go=["disabled"],Qo=["disabled"],Ho=["disabled"],Jo=["disabled"],Yo={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},Zo={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},Xo={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},en={key:0,class:"absolute -left-2 -top-2 z-10"},tn=["title"],an={class:"flex flex-col gap-3"},rn={class:"flex items-start justify-between gap-2"},sn=["title"],ln={class:"flex items-center gap-1"},on=["onClick"],nn=["disabled","onClick"],dn={key:0,class:"loading-spinner-sm"},un={key:1,class:"fas fa-redo"},gn=["disabled","onClick"],pn={key:0,class:"loading-spinner-sm"},cn={key:1,class:"fas fa-trash"},yn={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},mn={key:0},xn={key:0,class:"mt-4 flex items-center justify-between"},fn={class:"text-sm text-gray-600 dark:text-gray-400"},bn={class:"flex items-center gap-2"},vn=["disabled"],kn=["disabled"],hn={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},wn=["disabled"],$n=["disabled"],An={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=$(!1),U=$(null),C=$(null),v=$([]),k=$(1),j=$(15),oe=$(!1),Z=$("all"),pe=$(""),J=$("fuzzy"),W=$(!1),O=Y=>!Y||Y.length<12?Y:`${Y.substring(0,8)}...${Y.substring(Y.length-4)}`,y=se(()=>{let Y=v.value;if(Z.value!=="all"&&(Y=Y.filter(T=>T.status===Z.value)),pe.value.trim()){const T=pe.value.trim();Y=Y.filter(q=>{const be=q.key;return J.value==="exact"?be===T:be.toLowerCase().includes(T.toLowerCase())})}return Y}),g=se(()=>y.value.length),D=se(()=>Math.ceil(g.value/j.value)),ce=se(()=>{const Y=(k.value-1)*j.value,T=Y+j.value;return y.value.slice(Y,T)}),B=se(()=>v.value.filter(Y=>Y.status==="active").length),_=se(()=>v.value.filter(Y=>Y.status==="error").length),Q=async()=>{V.value=!0;try{const T=(await G.get(`/admin/droid-accounts/${p.accountId}`)).data;let q=[];if(Array.isArray(T.apiKeys))q=T.apiKeys;else if(typeof T.apiKeys=="string")try{q=JSON.parse(T.apiKeys)}catch(ge){console.error("Failed to parse apiKeys:",ge)}const be=q.map(ge=>typeof ge=="string"?{key:ge,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ge=="object"&&ge!==null?{key:ge.key||ge.apiKey||"",usageCount:ge.usageCount||ge.count||0,status:ge.status||"active",lastUsedAt:ge.lastUsedAt||ge.lastUsed||null,errorMessage:ge.errorMessage||""}:{key:String(ge),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});v.value=be.sort((ge,de)=>ge.lastUsedAt&&de.lastUsedAt?new Date(de.lastUsedAt)-new Date(ge.lastUsedAt):ge.lastUsedAt&&!de.lastUsedAt?-1:!ge.lastUsedAt&&de.lastUsedAt?1:(de.usageCount||0)-(ge.usageCount||0))}catch(Y){console.error("Failed to load API keys:",Y),P("加载 API Key 失败","error")}finally{V.value=!1,k.value=1}},we=async Y=>{var T,q;if(confirm(`确定要删除 API Key "${O(Y.key)}" 吗?`)){U.value=Y.key;try{const be={removeApiKeys:[Y.key],apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 已删除","success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete API key:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"删除 API Key 失败","error")}finally{U.value=null}}},Ke=async Y=>{var T,q;if(confirm(`确定要重置 API Key "${O(Y.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){C.value=Y.key;try{const be={apiKeys:[{key:Y.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 状态已重置","success"),await Q(),N("refresh")}catch(be){console.error("Failed to reset API key status:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"重置 API Key 状态失败","error")}finally{C.value=null}}},F=async()=>{var T,q;const Y=v.value.filter(be=>be.status==="error");if(Y.length===0){P("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${Y.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){W.value=!0;try{const ge={removeApiKeys:Y.map(de=>de.key),apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,ge),P(`成功删除 ${Y.length} 个异常 API Key`,"success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete error API keys:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"批量删除失败","error")}finally{W.value=!1}}},ee=async()=>{var Y,T;if(v.value.length===0){P("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${v.value.length} 个 API Key 吗?此操作不可恢复!
-
-请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){W.value=!0;try{const q=v.value.map(ge=>ge.key),be={removeApiKeys:q,apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P(`成功删除所有 ${q.length} 个 API Key`,"success"),await Q(),N("refresh")}catch(q){console.error("Failed to delete all API keys:",q),P(((T=(Y=q.response)==null?void 0:Y.data)==null?void 0:T.error)||"批量删除失败","error")}finally{W.value=!1}}},S=Y=>{let T=[],q="";if(Y==="error"?(T=v.value.filter(te=>te.status==="error"),q=`error_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(T=v.value,q=`all_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`),T.length===0){P("没有可导出的 API Key","warning");return}const be=T.map(te=>te.key).join(`
-`),ge=new Blob([be],{type:"text/plain;charset=utf-8"}),de=URL.createObjectURL(ge),a=document.createElement("a");a.href=de,a.download=q,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(de),P(`成功导出 ${T.length} 个 API Key`,"success")},h=async Y=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(Y);return}if(typeof document>"u")throw new Error("clipboard unavailable");const q=document.createElement("textarea");q.value=Y,q.setAttribute("readonly",""),q.style.position="fixed",q.style.opacity="0",q.style.pointerEvents="none",document.body.appendChild(q),q.select();try{const be=document.execCommand("copy");if(document.body.removeChild(q),!be)throw new Error("execCommand failed")}catch(be){throw document.body.removeChild(q),be}},fe=async Y=>{try{await h(Y),P("API Key 已复制","success")}catch(T){console.error("Failed to copy:",T),P("复制失败,请手动复制","error")}},le=async()=>{if(!(!v.value.length||oe.value)){oe.value=!0;try{const Y=v.value.map(T=>T.key).join(`
-`);await h(Y),P(`已复制 ${v.value.length} 条 API Key`,"success")}catch(Y){console.error("Failed to copy all keys:",Y),P("复制全部 API Key 失败,请手动复制","error")}finally{oe.value=!1}}},je=Y=>{if(!Y)return"-";try{return new Date(Y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return aa(()=>{Q()}),(Y,T)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Io,[e("div",Uo,[e("div",_o,[e("div",Ko,[T[14]||(T[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[T[13]||(T[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",So,u(H.accountName),1)])]),e("div",Mo,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:V.value||v.value.length===0||oe.value,onClick:le},[e("i",{class:I(["text-sm sm:text-base",oe.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),T[15]||(T[15]=e("span",null,"复制全部 Key",-1))],8,Do),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:T[0]||(T[0]=q=>Y.$emit("close"))},T[16]||(T[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),V.value?(o(),n("div",Po,T[17]||(T[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):c("",!0),!V.value&&v.value.length===0?(o(),n("div",jo,T[18]||(T[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):c("",!0),!V.value&&v.value.length>0?(o(),n("div",Lo,[e("div",Vo,[e("div",zo,[e("div",Ro,[e("div",Oo,[T[21]||(T[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),T[22]||(T[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",Eo,[e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[1]||(T[1]=q=>Z.value="all")}," 全部 ("+u(v.value.length)+") ",3),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[2]||(T[2]=q=>Z.value="active")},[T[19]||(T[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),x(" 正常 ("+u(B.value)+") ",1)],2),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[3]||(T[3]=q=>Z.value="error")},[T[20]||(T[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),x(" 异常 ("+u(_.value)+") ",1)],2)])]),e("div",No,[e("div",qo,[b(e("input",{"onUpdate:modelValue":T[4]||(T[4]=q=>pe.value=q),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[z,pe.value]]),T[23]||(T[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",Wo,[e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",J.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:T[5]||(T[5]=q=>J.value="fuzzy")},T[24]||(T[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),x(" 模糊 ",-1)]),2),e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",J.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:T[6]||(T[6]=q=>J.value="exact")},T[25]||(T[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),x(" 精确 ",-1)]),2)])])]),T[35]||(T[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",Fo,[e("div",Bo,[T[30]||(T[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:_.value===0||W.value,title:"删除所有异常状态的 API Key",onClick:F},T[26]||(T[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),x(" 删除异常 ",-1)]),8,Go),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:v.value.length===0||W.value,title:"删除所有 API Key",onClick:ee},T[27]||(T[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),x(" 删除全部 ",-1)]),8,Qo),T[31]||(T[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:_.value===0,title:"导出所有异常状态的 API Key",onClick:T[7]||(T[7]=q=>S("error"))},T[28]||(T[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),x(" 导出异常 ",-1)]),8,Ho),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:v.value.length===0,title:"导出所有 API Key",onClick:T[8]||(T[8]=q=>S("all"))},T[29]||(T[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),x(" 导出全部 ",-1)]),8,Jo)]),e("div",Yo,[T[34]||(T[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",Zo,[T[32]||(T[32]=x(" 显示 ",-1)),e("strong",null,u(y.value.length),1),T[33]||(T[33]=x(" 个 ",-1))])])])])]),e("div",Xo,[(o(!0),n(Ce,null,We(ce.value,(q,be)=>(o(),n("div",{key:be,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(q.status==="error"||q.status==="disabled")&&q.errorMessage?(o(),n("div",en,[e("span",{class:I(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[q.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${q.errorMessage}`},u(q.errorMessage),11,tn)])):c("",!0),e("div",an,[e("div",rn,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:q.key},u(O(q.key)),9,sn),e("div",ln,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:ge=>fe(q.key)},T[36]||(T[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,on),q.status==="error"||q.status==="disabled"?(o(),n("button",{key:0,class:I(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[q.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:C.value===q.key,title:"重置状态",onClick:ge=>Ke(q)},[C.value===q.key?(o(),n("div",dn)):(o(),n("i",un))],10,nn)):c("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:U.value===q.key,onClick:ge=>we(q)},[U.value===q.key?(o(),n("div",pn)):(o(),n("i",cn))],8,gn)])]),e("div",yn,[e("div",null,[e("span",{class:I([q.status==="active"?"text-green-600 dark:text-green-400":q.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:I(["mr-1",[q.status==="active"?"fas fa-check-circle":q.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),x(" "+u(q.status==="active"?"正常":q.status==="error"?"异常":q.status==="disabled"?"禁用":q.status||"未知"),1)],2)]),e("div",null,[e("span",null,[T[37]||(T[37]=x("使用: ",-1)),e("strong",null,u(q.usageCount||0),1),T[38]||(T[38]=x("次",-1))])]),q.lastUsedAt?(o(),n("div",mn,[e("span",null,u(je(q.lastUsedAt)),1)])):c("",!0)])])]))),128))]),D.value>1?(o(),n("div",xn,[e("div",fn," 显示 "+u((k.value-1)*j.value+1)+"-"+u(Math.min(k.value*j.value,g.value))+" 项,共 "+u(g.value)+" 项 ",1),e("div",bn,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===1,onClick:T[9]||(T[9]=q=>k.value=1)},T[39]||(T[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,vn),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===1,onClick:T[10]||(T[10]=q=>k.value--)},T[40]||(T[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,kn),e("span",hn,u(k.value)+" / "+u(D.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===D.value,onClick:T[11]||(T[11]=q=>k.value++)},T[41]||(T[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,wn),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===D.value,onClick:T[12]||(T[12]=q=>k.value=D.value)},T[42]||(T[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,$n)])])):c("",!0)])):c("",!0)])])):c("",!0)]))}},Cn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Tn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},In={class:"mb-4 flex items-center justify-between sm:mb-6"},Un={class:"flex items-center gap-2 sm:gap-3"},_n={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Kn={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Sn={class:"flex items-center space-x-2 sm:space-x-4"},Mn={class:"flex items-center"},Dn={class:"flex items-center"},Pn={key:1},jn={class:"space-y-6"},Ln={key:0},Vn={class:"space-y-3"},zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},Rn={class:"p-3"},On={class:"flex items-center justify-between"},En={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},Nn={class:"p-3"},qn={class:"flex items-center justify-between"},Wn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},Fn={class:"p-3"},Bn={class:"flex items-center justify-between"},Gn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Qn={class:"p-3"},Hn={class:"flex items-center justify-between"},Jn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Yn={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},Xn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},ei={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ti={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},ai={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},ri={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},si={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},li={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},oi={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},ni={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ii={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},di={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},ui={key:1},gi={class:"flex flex-wrap gap-4"},pi={class:"flex cursor-pointer items-center"},ci={class:"text-sm text-gray-700 dark:text-gray-300"},yi={key:0},mi={key:0,class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},fi={key:1,class:"flex cursor-pointer items-center"},bi={key:0,class:"mt-1 text-xs text-red-500"},vi={class:"flex gap-4"},ki={class:"flex cursor-pointer items-center"},hi={class:"flex cursor-pointer items-center"},wi={class:"flex cursor-pointer items-center"},$i={key:2},Ai={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ci={key:0,class:"mt-3"},Ti=["min"],Ii={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ui={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},_i={key:3},Ki={class:"flex gap-2"},Si={class:"flex-1"},Mi={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Di={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Pi=["value"],ji={class:"text-sm text-gray-700 dark:text-gray-200"},Li={key:4},Vi={key:5,class:"space-y-4"},zi={key:0,class:"flex gap-4"},Ri={class:"flex cursor-pointer items-center"},Oi={class:"flex cursor-pointer items-center"},Ei={key:1,class:"flex gap-4"},Ni={class:"flex items-center opacity-60"},qi={class:"flex items-center opacity-60"},Wi={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},Fi={class:"flex items-start gap-2"},Bi={class:"text-xs text-blue-700 dark:text-blue-300"},Gi={key:0,class:"font-medium"},Qi={key:1,class:"font-medium"},Hi={key:2,class:"mt-1 text-xs italic"},Ji={key:0},Yi={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Zi=["placeholder","required"],Xi={key:0,class:"mt-1 text-xs text-red-500"},ed={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},td={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},ad=["placeholder","required"],rd={key:0,class:"mt-1 text-xs text-red-500"},sd={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ld=["placeholder"],od={key:1},nd={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},id=["placeholder","required"],dd={key:0,class:"mt-1 text-xs text-red-500"},ud={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},gd={key:0,class:"mt-1 text-xs text-red-500"},pd={key:6,class:"space-y-4"},cd={key:0,class:"mt-1 text-xs text-red-500"},yd={key:0,class:"mt-1 text-xs text-red-500"},md={key:0,class:"mt-1 text-xs text-red-500"},xd={class:"flex flex-wrap gap-2"},fd=["value"],bd={class:"text-sm text-gray-700 dark:text-gray-300"},vd={key:7},kd={class:"mb-3"},hd={class:"inline-flex cursor-pointer items-center"},wd={key:0},$d={key:8,class:"space-y-4"},Ad={key:0,class:"mt-1 text-xs text-red-500"},Cd={key:0,class:"mt-1 text-xs text-red-500"},Td={class:"grid grid-cols-2 gap-4"},Id={class:"mb-4 flex gap-2"},Ud={key:0},_d={class:"mb-3 grid grid-cols-2 gap-2"},Kd=["value"],Sd={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Md={class:"text-xs text-gray-500 dark:text-gray-400"},Dd={key:0},Pd={key:1},jd={class:"mb-3 space-y-2"},Ld=["onUpdate:modelValue"],Vd=["onUpdate:modelValue"],zd=["onClick"],Rd={class:"mt-3 flex flex-wrap gap-2"},Od={class:"mb-3"},Ed={class:"inline-flex cursor-pointer items-center"},Nd={key:0},qd={key:0},Wd={class:"inline-flex cursor-pointer items-center"},Fd={key:9,class:"space-y-4"},Bd={class:"relative"},Gd=["type"],Qd={key:10,class:"space-y-4"},Hd={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},Jd={class:"relative"},Yd=["type"],Zd={key:11},Xd={class:"flex gap-4"},e0={class:"flex cursor-pointer items-center"},t0={class:"flex cursor-pointer items-center"},a0={key:12,class:"mt-4"},r0={class:"flex items-start"},s0={key:13,class:"mt-4"},l0={class:"flex items-start"},o0={key:14,class:"mt-4"},n0={class:"flex items-start"},i0={key:15,class:"mt-4"},d0={class:"flex items-start"},u0={class:"ml-3"},g0={key:0,class:"mt-1"},p0={class:"flex items-center justify-between"},c0={class:"text-xs text-green-600 dark:text-green-400"},y0=["disabled"],m0={key:0,class:"fas fa-trash-alt mr-1"},x0={key:1,class:"loading-spinner mr-1"},f0={key:1,class:"mt-1"},b0={key:16,class:"mt-4"},v0={class:"flex items-start"},k0={class:"ml-3 flex-1"},h0={key:0,class:"mt-3"},w0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},$0={class:"flex items-center gap-2"},A0={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},C0={class:"text-blue-600 dark:text-blue-400"},T0={class:"text-gray-500 dark:text-gray-500"},I0={class:"text-blue-600 dark:text-blue-400"},U0={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},_0={class:"mb-4 flex items-start gap-3"},K0={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},S0={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},M0={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},D0={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},P0={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},j0={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},L0={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},V0={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},z0={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},R0={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},O0={key:5,class:"text-xs text-red-600 dark:text-red-400"},E0={key:0},N0={key:1},q0={key:0,class:"mt-1 text-xs text-red-500"},W0={key:2},F0={key:0,class:"mt-1 text-xs text-red-500"},B0={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},G0={key:3},Q0={key:4},H0={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},J0={key:0,class:"mt-1 text-xs text-red-500"},Y0={class:"flex gap-3 pt-4"},Z0=["disabled"],X0=["disabled"],eu={key:0,class:"loading-spinner mr-2"},tu={key:3,class:"space-y-6"},au={key:0},ru={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},su={class:"flex items-start gap-4"},lu={class:"flex-1"},ou={class:"mb-4"},nu={class:"flex flex-wrap gap-4"},iu={class:"flex cursor-pointer items-center"},du={class:"flex cursor-pointer items-center"},uu={key:0,class:"space-y-4"},gu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},pu={class:"flex items-start gap-3"},cu={class:"flex-1"},yu=["disabled"],mu={key:0,class:"fas fa-link mr-2"},xu={key:1,class:"loading-spinner mr-2"},fu={key:1,class:"space-y-3"},bu={class:"flex items-center gap-2"},vu=["value"],ku={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},hu={class:"flex items-start gap-3"},wu={class:"flex-1"},$u={class:"space-y-3"},Au={key:1,class:"space-y-4"},Cu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Tu={class:"space-y-4"},Iu={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Uu={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},_u={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Ku={key:1,class:"mt-1 text-xs text-red-500"},Su={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Mu=["disabled"],Du={key:0,class:"loading-spinner mr-2"},Pu={key:1,class:"fas fa-magic mr-2"},ju={class:"flex gap-3 pt-4"},Lu=["disabled"],Vu={key:0,class:"loading-spinner mr-2"},zu={key:4,class:"space-y-6"},Ru={class:"flex gap-4"},Ou={class:"flex cursor-pointer items-center"},Eu={class:"flex cursor-pointer items-center"},Nu={class:"flex cursor-pointer items-center"},qu={key:0},Wu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Fu={key:0,class:"mt-3"},Bu=["min"],Gu={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Qu={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Hu={key:1},Ju={class:"flex gap-2"},Yu={class:"flex-1"},Zu={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Xu={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},eg=["value"],tg={class:"text-sm text-gray-700 dark:text-gray-200"},ag={key:2},rg={key:3},sg={class:"flex gap-4"},lg={class:"flex cursor-pointer items-center"},og={class:"flex cursor-pointer items-center"},ng={key:4,class:"mt-4"},ig={class:"flex items-start"},dg={key:5,class:"mt-4"},ug={class:"flex items-start"},gg={key:6,class:"mt-4"},pg={class:"flex items-start"},cg={key:7,class:"mt-4"},yg={class:"flex items-start"},mg={class:"ml-3"},xg={key:0,class:"mt-1"},fg={class:"flex items-center justify-between"},bg={class:"text-xs text-green-600 dark:text-green-400"},vg=["disabled"],kg={key:0,class:"fas fa-trash-alt mr-1"},hg={key:1,class:"loading-spinner mr-1"},wg={key:1,class:"mt-1"},$g={key:8,class:"mt-4"},Ag={class:"flex items-start"},Cg={class:"ml-3 flex-1"},Tg={key:0,class:"mt-3"},Ig={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ug={class:"flex items-center gap-2"},_g={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Kg={class:"text-blue-600 dark:text-blue-400"},Sg={class:"text-gray-500 dark:text-gray-500"},Mg={class:"text-blue-600 dark:text-blue-400"},Dg={key:9,class:"space-y-4"},Pg={class:"grid grid-cols-2 gap-4"},jg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Lg={class:"mb-2 flex items-center justify-between"},Vg={class:"text-sm text-gray-500 dark:text-gray-400"},zg={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Rg={class:"mt-2 flex items-center justify-between text-xs"},Og={class:"text-gray-500 dark:text-gray-400"},Eg={class:"text-gray-500 dark:text-gray-400"},Ng={class:"mb-4 flex gap-2"},qg={key:0},Wg={class:"mb-3 grid grid-cols-2 gap-2"},Fg=["value"],Bg={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Gg={class:"text-xs text-gray-500 dark:text-gray-400"},Qg={key:0},Hg={key:1},Jg={class:"mb-3 space-y-2"},Yg=["onUpdate:modelValue"],Zg=["onUpdate:modelValue"],Xg=["onClick"],ep={class:"mt-3 flex flex-wrap gap-2"},tp={class:"mb-3"},ap={class:"inline-flex cursor-pointer items-center"},rp={key:0},sp={key:1},lp={class:"inline-flex cursor-pointer items-center"},op={key:10,class:"space-y-4"},np={class:"relative"},ip=["type"],dp={class:"grid grid-cols-2 gap-4"},up={key:11,class:"space-y-4"},gp={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},pp={class:"relative"},cp=["type"],yp={key:12,class:"space-y-4"},mp={class:"mb-3"},xp={class:"inline-flex cursor-pointer items-center"},fp={key:0},bp={key:13,class:"space-y-4"},vp={key:0,class:"mt-1 text-xs text-red-500"},kp={key:0,class:"mt-1 text-xs text-red-500"},hp={key:0,class:"mt-1 text-xs text-red-500"},wp={class:"flex flex-wrap gap-2"},$p=["value"],Ap={class:"text-sm text-gray-700 dark:text-gray-300"},Cp={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Tp={class:"mb-4 flex items-start gap-3"},Ip={class:"flex-1"},Up={class:"mb-2 flex items-center justify-between"},_p={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Kp={class:"space-y-4"},Sp={key:0,class:"mt-1 text-xs text-red-500"},Mp={class:"space-y-2"},Dp={class:"flex items-center justify-between"},Pp={class:"text-xs text-purple-600 dark:text-purple-300"},jp={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Lp=["onClick"],Vp={class:"text-xs text-purple-700 dark:text-purple-300"},zp={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Rp={class:"space-y-4"},Op={key:16},Ep={class:"flex gap-3 pt-4"},Np=["disabled"],qp={key:0,class:"loading-spinner mr-2"},Wp={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(H,{emit:Pe}){var Qt,na,Ia,tt,Ua,_a,ia,Ka,rt,Sa,Ht,Tt,Ma,zt,da,Da,ua,Pa,ja,La,Va,za,ga,Jt,pa,ca,Ra,ft,bt,Oa,ya,Yt,ma,Ea,xa,Zt,Na,fa;const p=H,N=Pe,K=wr(),{showConfirmModal:V,confirmOptions:U,showConfirm:C,handleConfirm:v,handleCancel:k}=hr(),j=se(()=>!!p.account),oe=$(!0),Z=$(null),pe=$(1),J=$(!1),W=$(!1),O=$(!1),y=$(!1),g=$(""),D=$(""),ce=$(!1),B=$(""),_=$("manual"),Q=$(""),we=$(!1),Ke=$(""),F=$(!1),ee=$({current:0,total:0}),S=se(()=>Q.value.split(`
-`).map(d=>d.trim()).filter(d=>d.length>0).length),h=$(""),fe=$(!1),le=$(""),je=$(!1),Y=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",T=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),q=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ve=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ye=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ve,username:ye,password:me}},be=d=>{const t=q(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:T()},ge=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ve=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ve||null,password:i||null}},de=()=>{var d;return be((d=p.account)==null?void 0:d.proxy)},a=$({platform:((Qt=p.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=p.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((na=p.account)==null?void 0:na.name)||"",description:((Ia=p.account)==null?void 0:Ia.description)||"",accountType:((tt=p.account)==null?void 0:tt.accountType)||"shared",authenticationMethod:((Ua=p.account)==null?void 0:Ua.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((_a=p.account)==null?void 0:_a.autoStopOnWarning)||!1,useUnifiedUserAgent:((ia=p.account)==null?void 0:ia.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ka=p.account)==null?void 0:Ka.useUnifiedClientId)||!1,unifiedClientId:((rt=p.account)==null?void 0:rt.unifiedClientId)||"",serialQueueEnabled:(((Sa=p.account)==null?void 0:Sa.maxConcurrency)||0)>0,interceptWarmup:((Ht=p.account)==null?void 0:Ht.interceptWarmup)===!0||((Tt=p.account)==null?void 0:Tt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Ma=p.account)==null?void 0:Ma.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:de(),apiUrl:((zt=p.account)==null?void 0:zt.apiUrl)||"",apiKey:((da=p.account)==null?void 0:da.apiKey)||"",priority:((Da=p.account)==null?void 0:Da.priority)||50,endpointType:((ua=p.account)==null?void 0:ua.endpointType)||"anthropic",baseApi:((Pa=p.account)==null?void 0:Pa.baseApi)||"",baseUrl:((ja=p.account)==null?void 0:ja.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((La=p.account)==null?void 0:La.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=p.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Va=p.account)==null?void 0:Va.userAgent)||"",enableRateLimit:p.account?p.account.rateLimitDuration>0:!0,disableAutoProtection:((za=p.account)==null?void 0:za.disableAutoProtection)===!0,dailyQuota:((ga=p.account)==null?void 0:ga.dailyQuota)||0,dailyUsage:((Jt=p.account)==null?void 0:Jt.dailyUsage)||0,quotaResetTime:((pa=p.account)==null?void 0:pa.quotaResetTime)||"00:00",maxConcurrentTasks:((ca=p.account)==null?void 0:ca.maxConcurrentTasks)||0,credentialType:((Ra=p.account)==null?void 0:Ra.credentialType)||"access_key",accessKeyId:((ft=p.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((bt=p.account)==null?void 0:bt.secretAccessKey)||"",region:((Oa=p.account)==null?void 0:Oa.region)||"",sessionToken:((ya=p.account)==null?void 0:ya.sessionToken)||"",bearerToken:((Yt=p.account)==null?void 0:Yt.bearerToken)||"",defaultModel:((ma=p.account)==null?void 0:ma.defaultModel)||"",smallFastModel:((Ea=p.account)==null?void 0:Ea.smallFastModel)||"",azureEndpoint:((xa=p.account)==null?void 0:xa.azureEndpoint)||"",apiVersion:((Zt=p.account)==null?void 0:Zt.apiVersion)||"",deploymentName:((Na=p.account)==null?void 0:Na.deploymentName)||"",expireDuration:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?new Date(p.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((fa=p.account)==null?void 0:fa.expiresAt)||null}),te=$("whitelist"),Ae=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Ge=[{value:"claude-opus-4-5-20251101",label:"Claude Opus 4.5",color:"blue"},{value:"claude-sonnet-4-20250514",label:"Claude Sonnet 4",color:"blue"},{value:"claude-sonnet-4-5-20250929",label:"Claude Sonnet 4.5",color:"indigo"},{value:"claude-3-5-haiku-20241022",label:"Claude 3.5 Haiku",color:"green"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5",color:"emerald"},{value:"claude-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"},{value:"deepseek-chat",label:"DeepSeek Chat",color:"cyan"},{value:"Qwen",label:"Qwen",color:"orange"},{value:"Kimi",label:"Kimi",color:"pink"},{value:"GLM",label:"GLM",color:"teal"}],De=$([]),at=()=>{var d;if((d=p.account)!=null&&d.supportedModels)if(typeof p.account.supportedModels=="object"&&!Array.isArray(p.account.supportedModels)){const t=Object.entries(p.account.supportedModels);t.every(([ve,i])=>ve===i)?(te.value="whitelist",Ae.value=t.map(([ve])=>ve),De.value=t.map(([ve,i])=>({from:ve,to:i}))):(te.value="mapping",De.value=t.map(([ve,i])=>({from:ve,to:i})))}else Array.isArray(p.account.supportedModels)&&(te.value="whitelist",Ae.value=p.account.supportedModels,De.value=p.account.supportedModels.map(t=>({from:t,to:t})))},lt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ve=>ve.trim()).filter(ve=>ve.length>0);return t.length===0?[]:Array.from(new Set(t))},Xe=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],St=se(()=>{const d=Math.max(Xe.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/Xe.length;return{width:`${t}%`,left:`${d*t}%`}}),Mt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:Xe[0].label}),Dt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:Xe[0].description}),M=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),ht=se(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),pt=se(()=>g.value&&D.value.trim()),vt=()=>{var d;return!j.value||!((d=p.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=se(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:vt()/a.value.dailyQuota*100),Pt=se(()=>{if(!p.account||p.account.platform!=="droid")return 0;let d=0;if(Array.isArray(p.account.apiKeys))d=p.account.apiKeys.length;else if(typeof p.account.apiKeys=="string")try{const ie=JSON.parse(p.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=p.account.apiKeyCount??p.account.apiKeysCount??p.account.api_key_count??d;return Number(t)||0}),w=se(()=>{var t,ie,ve;if(!j.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=p.account)==null?void 0:t.authenticationMethod)||((ie=p.account)==null?void 0:ie.authMethod)||((ve=p.account)==null?void 0:ve.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),m=async()=>{var d;if(!(!j.value||!((d=p.account)!=null&&d.id)))try{const t=await G.get(`/admin/claude-console-accounts/${p.account.id}/usage`);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},E=d=>{le.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Qe=async()=>{if(M.value.name="",!ht.value){(!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&pe.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
-
-如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
-如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(pe.value=2)},it=async()=>{O.value=!0;try{const d=ge(a.value.proxy),t=d?{proxy:d}:{},ie=await K.generateClaudeSetupTokenUrl(t);g.value=ie.authUrl,B.value=ie.sessionId}catch(d){P(d.message||"生成Setup Token授权链接失败","error")}finally{O.value=!1}},yt=()=>{g.value="",D.value="",it()},Et=async()=>{try{await navigator.clipboard.writeText(g.value),ce.value=!0,P("链接已复制","success"),setTimeout(()=>{ce.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=g.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(ce.value=!0,P("链接已复制","success")):P("复制失败,请手动复制","error")}catch{P("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{ce.value=!1},2e3)}},Nt=async()=>{if(pt.value){y.value=!0;try{const d={sessionId:B.value,callbackUrl:D.value.trim()},t=ge(a.value.proxy);t&&(d.proxy=t);const ie=await K.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),await $t(ie)}catch(d){P(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{y.value=!1}}},kt=async()=>{const d=Q.value.split(`
-`).map(ye=>ye.trim()).filter(ye=>ye.length>0);if(d.length===0){Ke.value="请输入至少一个 sessionKey";return}we.value=!0,Ke.value="",ee.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=ge(a.value.proxy),ve=[],i=[];for(let ye=0;ye0)try{await $t(ve)}finally{we.value=!1}else we.value=!1;i.length>0&&ve.length===0?Ke.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Ke.value=`${i.length} 个授权失败`)},jt=()=>{Q.value="",Ke.value="",F.value=!1,ee.value={current:0,total:0}},Lt=()=>{_.value==="manual"?jt():(g.value="",D.value="",B.value="")},wt=(d,t,ie)=>{var me,Ne;const ve=ge(a.value.proxy),i=d.claudeAiOauth||d,ye={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ve,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const Be={},Re=i.extInfo;Re!=null&&Re.org_uuid&&(Be.org_uuid=Re.org_uuid),Re!=null&&Re.account_uuid&&(Be.account_uuid=Re.account_uuid),Re||((me=i.organization)!=null&&me.uuid&&(Be.org_uuid=i.organization.uuid),(Ne=i.account)!=null&&Ne.uuid&&(Be.account_uuid=i.account.uuid)),Object.keys(Be).length>0&&(ye.extInfo=Be)}return ye},$t=async d=>{var t,ie,ve,i,ye,me,Ne,Be,Re;J.value=!0;try{const L=a.value.platform;if(L==="claude"&&Array.isArray(d)){const Le=d,qe=Le.length>1,Me=a.value.name,Je=[],Ze=[];for(let ot=0;ot0){const ot=qe?`成功创建 ${Je.length}/${Le.length} 个账户`:"账户创建成功";P(ot,"success"),N("success",Je[0])}Ze.length>0&&P(`${Ze.length} 个账户创建失败`,"error");return}const R=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt());const Ie=ge(a.value.proxy),X={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Ie};if(L==="claude"){const Le=R.claudeAiOauth||R;if(X.claudeAiOauth=Le,Le){const qe={},Me=Le.extInfo;if(Me&&typeof Me=="object"&&(Me.org_uuid&&(qe.org_uuid=Me.org_uuid),Me.account_uuid&&(qe.account_uuid=Me.account_uuid)),!Me){const Je=(t=Le.organization)==null?void 0:t.uuid,Ze=(ie=Le.account)==null?void 0:ie.uuid;Je&&(qe.org_uuid=Je),Ze&&(qe.account_uuid=Ze)}Object.keys(qe).length>0&&(X.extInfo=qe)}X.priority=a.value.priority||50,X.autoStopOnWarning=a.value.autoStopOnWarning||!1,X.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,X.useUnifiedClientId=a.value.useUnifiedClientId||!1,X.unifiedClientId=a.value.unifiedClientId||"",X.maxConcurrency=a.value.serialQueueEnabled?1:0,X.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(L==="gemini"||L==="gemini-antigravity")X.geminiOauth=R.tokens||R,X.oauthProvider=L==="gemini-antigravity"?"antigravity":R.oauthProvider||"gemini-cli",a.value.projectId&&(X.projectId=a.value.projectId),X.priority=a.value.priority||50;else if(L==="openai")X.openaiOauth=R.tokens||R,X.accountInfo=R.accountInfo,X.priority=a.value.priority||50;else if(L==="droid"){const Le=R.tokens||R||{},qe={accessToken:Le.accessToken||Le.access_token||"",refreshToken:Le.refreshToken||Le.refresh_token||"",expiresAt:Le.expiresAt||Le.expires_at||"",expiresIn:Le.expiresIn||Le.expires_in||null,tokenType:Le.tokenType||Le.token_type||"Bearer",organizationId:Le.organizationId||Le.organization_id||"",authenticationMethod:Le.authenticationMethod||Le.authentication_method||""};if(!qe.refreshToken){J.value=!1,P("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(X.refreshToken=qe.refreshToken,X.accessToken=qe.accessToken,X.expiresAt=qe.expiresAt,qe.expiresIn!==null&&qe.expiresIn!==void 0&&(X.expiresIn=qe.expiresIn),X.priority=a.value.priority||50,X.endpointType=a.value.endpointType||"anthropic",X.platform="droid",X.tokenType=qe.tokenType,X.authenticationMethod=qe.authenticationMethod,qe.organizationId&&(X.organizationId=qe.organizationId),Le.user){const Me=Le.user,Je=[];typeof Me.first_name=="string"&&Me.first_name.trim()&&Je.push(Me.first_name.trim()),typeof Me.last_name=="string"&&Me.last_name.trim()&&Je.push(Me.last_name.trim());const Ze=Je.join(" ").trim()||(typeof Me.name=="string"?Me.name.trim():"")||(typeof Me.display_name=="string"?Me.display_name.trim():"");typeof Me.email=="string"&&Me.email.trim()&&(X.ownerEmail=Me.email.trim()),Ze?(X.ownerName=Ze,X.ownerDisplayName=Ze):X.ownerEmail&&(X.ownerName=X.ownerName||X.ownerEmail,X.ownerDisplayName=X.ownerDisplayName||X.ownerEmail),typeof Me.id=="string"&&Me.id.trim()&&(X.userId=Me.id.trim())}}let Se;L==="claude"?Se=await K.createClaudeAccount(X):L==="gemini"?Se=await K.createGeminiAccount(X):L==="openai"?Se=await K.createOpenAIAccount(X):L==="droid"?Se=await K.createDroidAccount(X):Se=await K.createGeminiAccount(X),N("success",Se)}catch(L){const R=((i=(ve=L.response)==null?void 0:ve.data)==null?void 0:i.error)||L.message||"账户创建失败",Ie=((me=(ye=L.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",X=((Be=(Ne=L.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let Se=R;Ie&&(Se+=`
-${Ie}`),X&&X.error_description?Se+=`
-详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
-详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1,(Re=Z.value)==null||Re.resetCookieAuth()}},qt=async()=>{var t,ie,ve,i,ye,me,Ne,Be;M.value.name="",M.value.accessToken="",M.value.refreshToken="",M.value.apiUrl="",M.value.apiKey="",M.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(M.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?j.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(M.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(M.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(j.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(M.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(M.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(M.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(M.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(M.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(M.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):lt(a.value.apiKeysInput).length===0&&(M.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(P("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){J.value=!0;try{const Re=ge(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Re};if(a.value.platform==="claude"){const Ie=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),L.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+Ie,scopes:[]},L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const Ie=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ie},a.value.projectId&&(L.projectId=a.value.projectId),L.priority=a.value.priority||50}else if(a.value.platform==="openai"){const Ie=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor(Ie/1e3)},L.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0,L.priority=a.value.priority||50}else if(a.value.platform==="droid")if(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic",L.platform="droid",a.value.addType==="apikey"){const Ie=lt(a.value.apiKeysInput);L.apiKeys=Ie,L.authenticationMethod="api_key",L.isActive=!0,L.schedulable=!0}else{const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();L.accessToken=Ie,L.refreshToken=X,L.expiresAt=Se,L.expiresIn=8*60*60,L.tokenType="Bearer",L.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(L.apiUrl=a.value.apiUrl,L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=sa()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup),L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(L.baseApi=a.value.baseApi,L.apiKey=a.value.apiKey,L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.rateLimitDuration=60,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(L.oauthProvider="antigravity",L.priority=a.value.priority||50):a.value.platform==="gemini-api"?(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(L.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?L.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(L.bearerToken=a.value.bearerToken),L.region=a.value.region,L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiKey=a.value.apiKey,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,L.isActive=a.value.isActive!==!1,L.schedulable=a.value.schedulable!==!1);let R;if(a.value.platform==="claude")R=await K.createClaudeAccount(L);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")R=await K.createClaudeConsoleAccount(L);else if(a.value.platform==="droid")R=await K.createDroidAccount(L);else if(a.value.platform==="openai-responses")R=await K.createOpenAIResponsesAccount(L);else if(a.value.platform==="bedrock")R=await K.createBedrockAccount(L);else if(a.value.platform==="openai")R=await K.createOpenAIAccount(L);else if(a.value.platform==="azure_openai")R=await K.createAzureOpenAIAccount(L);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")R=await K.createGeminiAccount(L);else if(a.value.platform==="gemini-api")R=await K.createGeminiApiAccount(L);else throw new Error(`不支持的平台: ${a.value.platform}`);N("success",R)}catch(Re){const L=((i=(ve=Re.response)==null?void 0:ve.data)==null?void 0:i.error)||Re.message||"账户创建失败",R=((me=(ye=Re.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",Ie=((Be=(Ne=Re.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let X=L;R&&(X+=`
-${R}`),Ie&&Ie.error_description?X+=`
-详细信息: ${Ie.error_description}`:Ie&&Ie.error&&Ie.error.message&&(X+=`
-详细信息: ${Ie.error.message}`),P(X,"error","",8e3)}finally{J.value=!1}}},dt=async()=>{var d,t,ie,ve,i,ye,me,Ne,Be,Re;if(M.value.name="",M.value.apiKeys="",M.value.baseUrl="",!a.value.name||a.value.name.trim()===""){M.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const L=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!L){M.value.baseUrl="请填写 API 基础地址";return}if(!L.endsWith("/models")){M.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
-
-如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
-如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){J.value=!0;try{const L=ge(a.value.proxy),R={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:L};if(a.value.accessToken||a.value.refreshToken){const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(p.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;R.claudeAiOauth={accessToken:Ie||"",refreshToken:X||"",expiresAt:Date.now()+Se,scopes:p.account.scopes||[]}}else if(p.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;R.geminiOauth={access_token:Ie||"",refresh_token:X||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(p.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;R.openaiOauth={idToken:"",accessToken:Ie||"",refreshToken:X||"",expires_in:Math.floor(Se/1e3)},X&&X!==p.account.refreshToken&&(R.needsImmediateRefresh=!0,R.requireRefreshSuccess=!0)}else p.account.platform==="droid"&&(Ie&&(R.accessToken=Ie),X&&(R.refreshToken=X))}if(p.account.platform==="droid"){const Ie=((ve=a.value.apiKeysInput)==null?void 0:ve.trim())||"",X=a.value.apiKeyUpdateMode||"append";if(X==="delete"){if(!Ie){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}R.removeApiKeys=Se,R.apiKeyUpdateMode="delete"}else{if(Ie){const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请至少填写一个 API Key",J.value=!1;return}R.apiKeys=Se}else X==="replace"&&(R.apiKeys=[]);(X!=="append"||Ie)&&(R.apiKeyUpdateMode=X)}w.value&&(R.authenticationMethod="api_key")}if(p.account.platform==="gemini"&&(R.projectId=a.value.projectId||""),p.account.platform==="droid"&&(R.priority=a.value.priority||50,R.endpointType=a.value.endpointType||"anthropic"),p.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),R.priority=a.value.priority||50,R.autoStopOnWarning=a.value.autoStopOnWarning||!1,R.interceptWarmup=a.value.interceptWarmup||!1,R.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,R.useUnifiedClientId=a.value.useUnifiedClientId||!1,R.unifiedClientId=a.value.unifiedClientId||"",R.maxConcurrency=a.value.serialQueueEnabled?1:0,R.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),p.account.platform==="openai"&&(R.priority=a.value.priority||50),p.account.platform==="gemini"&&(R.priority=a.value.priority||50),p.account.platform==="claude-console"&&(R.apiUrl=a.value.apiUrl,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=sa()||{},R.userAgent=a.value.userAgent||null,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,R.disableAutoProtection=!!a.value.disableAutoProtection,R.interceptWarmup=!!a.value.interceptWarmup,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00",R.maxConcurrentTasks=a.value.maxConcurrentTasks||0),p.account.platform==="openai-responses"&&(R.baseApi=a.value.baseApi,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.userAgent=a.value.userAgent||"",R.priority=a.value.priority||50,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00"),p.account.platform==="bedrock"&&(a.value.credentialType&&(R.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(R.awsCredentials={},a.value.accessKeyId&&(R.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(R.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(R.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(R.bearerToken=a.value.bearerToken),a.value.region&&(R.region=a.value.region),R.defaultModel=a.value.defaultModel||null,R.smallFastModel=a.value.smallFastModel||null,R.priority=a.value.priority||50,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),p.account.platform==="azure_openai"&&(R.azureEndpoint=a.value.azureEndpoint,R.apiVersion=a.value.apiVersion||"2024-02-01",R.deploymentName=a.value.deploymentName,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],R.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey)),p.account.platform==="gemini-api"&&(R.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),p.account.platform==="claude")await K.updateClaudeAccount(p.account.id,R);else if(p.account.platform==="claude-console")await K.updateClaudeConsoleAccount(p.account.id,R);else if(p.account.platform==="openai-responses")await K.updateOpenAIResponsesAccount(p.account.id,R);else if(p.account.platform==="bedrock")await K.updateBedrockAccount(p.account.id,R);else if(p.account.platform==="openai")await K.updateOpenAIAccount(p.account.id,R);else if(p.account.platform==="azure_openai")await K.updateAzureOpenAIAccount(p.account.id,R);else if(p.account.platform==="gemini")await K.updateGeminiAccount(p.account.id,R);else if(p.account.platform==="gemini-api")await K.updateGeminiApiAccount(p.account.id,R);else if(p.account.platform==="droid")await K.updateDroidAccount(p.account.id,R);else throw new Error(`不支持的平台: ${p.account.platform}`);N("success")}catch(L){const R=((ye=(i=L.response)==null?void 0:i.data)==null?void 0:ye.error)||L.message||"账户更新失败",Ie=((Ne=(me=L.response)==null?void 0:me.data)==null?void 0:Ne.suggestion)||"",X=((Re=(Be=L.response)==null?void 0:Be.data)==null?void 0:Re.errorDetails)||null;let Se=R;Ie&&(Se+=`
-${Ie}`),X&&X.error_description?Se+=`
-详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
-详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1}}};$e(()=>a.value.name,()=>{var d;M.value.name&&((d=a.value.name)!=null&&d.trim())&&(M.value.name="")}),$e(()=>a.value.accessToken,()=>{var d;M.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(M.value.accessToken="")}),$e(()=>a.value.refreshToken,()=>{var d;M.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(M.value.refreshToken="")}),$e(()=>a.value.apiUrl,()=>{var d;M.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(M.value.apiUrl="")}),$e(()=>a.value.apiKey,()=>{var d;M.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(M.value.apiKey="")}),$e(()=>a.value.azureEndpoint,()=>{var d;M.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(M.value.azureEndpoint="")}),$e(()=>a.value.deploymentName,()=>{var d;M.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(M.value.deploymentName="")});const et=$([]),Wt=$(!1),At=$(!1),Ft=se(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),et.value.filter(t=>t.platform===d)}),Bt=async()=>{Wt.value=!0;try{const d=await G.get("/admin/account-groups");et.value=d.data||[]}catch{P("加载分组列表失败","error"),et.value=[]}finally{Wt.value=!1}},Gt=async()=>{await Bt(),P("分组列表已刷新","success")},Vt=()=>{At.value=!0},ha=async()=>{await Bt()},wa=async()=>{var t;if(!((t=p.account)!=null&&t.id))return;const d=[typeof K.fetchDroidAccounts=="function"?K.fetchDroidAccounts:null,typeof K.fetchAllAccounts=="function"?K.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ve){console.error("刷新账户列表失败:",ve)}};$e(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),$e(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),$e(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",M.value.accessToken="",M.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",M.value.apiKeys="",j.value||(a.value.authenticationMethod="")))}),$e(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&M.value.apiKeys&&(M.value.apiKeys="")}),$e(()=>a.value.apiKeysInput,d=>{if(!M.value.apiKeys)return;const t=lt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){M.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(M.value.apiKeys="");return}ie==="delete"&&t.length>0&&(M.value.apiKeys="")}),$e(D,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(D.value=i,P("成功提取授权码!","success")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{P("链接格式错误,请检查是否为完整的 URL","error")}else P("请粘贴以 http://localhost:45462 开头的链接","error")}),$e(()=>a.value.platform,d=>{j.value||N("platform-changed",d)}),$e(()=>a.value.accountType,d=>{d==="group"&&et.value.length===0&&Bt()}),$e(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",At.value=!0)});const $a=()=>{De.value.push({from:"",to:""})},mt=d=>{De.value.splice(d,1)},Ve=(d,t)=>{if(De.value.some(ve=>ve.from===d)){P(`模型 ${d} 的映射已存在`,"info");return}De.value.push({from:d,to:t}),P(`已添加映射: ${d} → ${t}`,"success")},sa=()=>{const d={};return te.value==="whitelist"?Ae.value.forEach(t=>{d[t]=t}):De.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};$e(()=>p.account,d=>{if(d){at();const t=be(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ve=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let ye="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?ye=me.accountType:me.hasClaudeMax?ye="claude_max":me.hasClaudePro?ye="claude_pro":ye="claude_free"}a.value={platform:d.platform,addType:ve,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:ye,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&m(),d.accountType==="group"&&Bt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Ne=>{Ne&&Ne.id&&me.push(Ne.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const Ne=et.value.map(async Be=>{try{((await G.get(`/admin/account-groups/${Be.id}/members`)).data||[]).some(R=>R.id===d.id)&&(me.push(Be.id),a.value.groupId||(a.value.groupId=Be.id))}catch{}});await Promise.all(Ne)}a.value.groupIds=me})}},{immediate:!0});const ut=async()=>{try{const d=await G.get("/admin/claude-code-version");d.success&&d.userAgent?h.value=d.userAgent:h.value=""}catch{h.value=""}},Ct=async()=>{fe.value=!0;try{(await G.post("/admin/claude-code-version/clear")).success?(h.value="",P("统一User-Agent缓存已清除","success")):P("清除缓存失败","error")}catch(d){P("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{fe.value=!1}},xt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},la=()=>{a.value.unifiedClientId=xt(),P("已生成新的客户端标识","success")},Aa=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=xt()))},Ca=se(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),gt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ve,i]=ie,ye=parseInt(ve);i==="d"&&d.setDate(d.getDate()+ye),a.value.expiresAt=d.toISOString()}},oa=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ta=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return aa(()=>{var d;le.value=Y(a.value.platform),j.value&&at(),ut(),j.value&&((d=p.account)==null?void 0:d.platform)==="claude-console"&&m()}),$e(()=>a.value.platform,d=>{d==="claude"&&ut()}),(d,t)=>{var ie,ve;return o(),Ye(Kt,{to:"body"},[oe.value?(o(),n("div",Cn,[e("div",Tn,[e("div",In,[e("div",Un,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",_n,u(j.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!j.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Kn,[e("div",Sn,[e("div",Mn,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",pe.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Dn,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",pe.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):c("",!0),pe.value===1&&!j.value?(o(),n("div",Pn,[e("div",jn,[j.value?c("",!0):(o(),n("div",Ln,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Vn,[e("div",zn,[e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>E("claude"))},[e("div",Rn,[e("div",On,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),le.value==="claude"?(o(),n("div",En,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>E("openai"))},[e("div",Nn,[e("div",qn,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),le.value==="openai"?(o(),n("div",Wn,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>E("gemini"))},[e("div",Fn,[e("div",Bn,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),le.value==="gemini"?(o(),n("div",Gn,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>E("droid"))},[e("div",Qn,[e("div",Hn,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),le.value==="droid"?(o(),n("div",Jn,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),le.value?(o(),n("div",Yn,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",Zn,[le.value==="claude"?(o(),n(Ce,{key:0},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[_e,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",Xn,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[_e,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",ei,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[_e,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",ti,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[_e,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",ai,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="openai"?(o(),n(Ce,{key:1},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[_e,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",ri,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[_e,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",si,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[_e,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",li,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="gemini"?(o(),n(Ce,{key:2},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[_e,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",oi,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[_e,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",ni,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[_e,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",ii,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="droid"?(o(),n("label",{key:3,class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[_e,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",di,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)):c("",!0)])])):c("",!0)])])),!j.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",ui,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",gi,[e("label",pi,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[_e,a.value.addType]]),e("span",ci,[t[216]||(t[216]=x(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",yi," (用量可视化)")):c("",!0)])]),a.value.platform==="claude"?(o(),n("label",mi,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[_e,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):c("",!0),e("label",xi,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[_e,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",fi,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[_e,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):c("",!0)])])):c("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,a.value.name]]),M.value.name?(o(),n("p",bi,u(M.value.name),1)):c("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",vi,[e("label",ki,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hi,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",wi,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!j.value&&a.value.platform!=="gemini-api"?(o(),n("div",$i,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ai,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Ci,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Ti),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Ii,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Ui,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):c("",!0),a.value.accountType==="group"?(o(),n("div",_i,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ki,[e("div",Si,[e("div",Mi,[Ft.value.length===0?(o(),n("div",Di," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=ye=>a.value.groupIds=ye),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Pi),[[ze,a.value.groupIds]]),e("span",ji,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Vt},t[233]||(t[233]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Li,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[x(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[x(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",Vi,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),j.value?(o(),n("div",Ei,[e("label",Ni,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",qi,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])):(o(),n("div",zi,[e("label",Ri,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",Oi,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])),e("div",Wi,[e("div",Fi,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",Bi,[a.value.credentialType==="access_key"?(o(),n("p",Gi," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",Qi," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),j.value?(o(),n("p",Hi," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):c("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",Ji,[e("div",null,[e("label",Yi,"AWS 访问密钥 ID "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.value.accessKeyId=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.accessKeyId}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!j.value,type:"text"},null,10,Zi),[[z,a.value.accessKeyId]]),M.value.accessKeyId?(o(),n("p",Xi,u(M.value.accessKeyId),1)):c("",!0),j.value?(o(),n("p",ed," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):c("",!0)]),e("div",null,[e("label",td,"AWS 秘密访问密钥 "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.secretAccessKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.secretAccessKey}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!j.value,type:"password"},null,10,ad),[[z,a.value.secretAccessKey]]),M.value.secretAccessKey?(o(),n("p",rd,u(M.value.secretAccessKey),1)):c("",!0),j.value?(o(),n("p",sd," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):c("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:j.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,ld),[[z,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):c("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",od,[e("label",nd,"Bearer Token "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.bearerToken}]),placeholder:j.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!j.value,type:"password"},null,10,id),[[z,a.value.bearerToken]]),M.value.bearerToken?(o(),n("p",dd,u(M.value.bearerToken),1)):c("",!0),j.value?(o(),n("p",ud," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):c("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[x(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):c("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[z,a.value.region]]),M.value.region?(o(),n("p",gd,u(M.value.region),1)):c("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):c("",!0),a.value.platform==="azure_openai"&&!j.value?(o(),n("div",pd,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",cd,u(M.value.azureEndpoint),1)):c("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",yd,u(M.value.deploymentName),1)):c("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",md,u(M.value.apiKey),1)):c("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",xd,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,fd),[[ze,a.value.supportedModels]]),e("span",bd,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):c("",!0),a.value.platform==="bedrock"&&!j.value?(o(),n("div",vd,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",kd,[e("label",hd,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",wd,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)])])):c("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!j.value?(o(),n("div",$d,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[z,a.value.apiUrl]]),M.value.apiUrl?(o(),n("p",Ad,u(M.value.apiUrl),1)):c("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",Cd,u(M.value.apiKey),1)):c("",!0)]),e("div",Td,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Id,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>te.value="whitelist")},t[276]||(t[276]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>te.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",Ud,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",_d,[(o(),n(Ce,null,We(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Kd),[[ze,Ae.value]]),e("span",Sd,u(i.label),1)],2)),64))]),e("p",Md,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Dd,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Pd,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",jd,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ld),[[z,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Vd),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>mt(ye)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,zd)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:$a},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Rd,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>Ve("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Od,[e("label",Ed,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Nd,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",qd,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",Wd,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"&&!j.value?(o(),n("div",Fd,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[z,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Bd,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:W.value?"text":"password"},null,8,Gd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]])])):c("",!0),a.value.platform==="gemini-api"&&!j.value?(o(),n("div",Qd,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",Hd,u(M.value.baseUrl),1)):c("",!0),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[302]||(t[302]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[303]||(t[303]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Jd,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:W.value?"text":"password"},null,8,Yd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",Zd,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Xd,[e("label",e0,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",t0,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",a0,[e("label",r0,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",o0,[e("label",n0,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",i0,[e("label",d0,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",u0,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),h.value?(o(),n("div",g0,[e("div",p0,[e("p",c0," 💡 当前统一版本:"+u(h.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",x0)):(o(),n("i",m0)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,y0)])])):(o(),n("div",f0,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",b0,[e("label",v0,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",k0,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",h0,[e("div",w0,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",$0,[e("code",A0,[e("span",C0,u(a.value.unifiedClientId.substring(0,8)),1),e("span",T0,u(a.value.unifiedClientId.substring(8,56)),1),e("span",I0,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",U0,[e("div",_0,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",K0," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",S0," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",M0," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",D0," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):c("",!0),e("div",P0,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),x(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",j0,t[323]||(t[323]=[x(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),x(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",L0,t[324]||(t[324]=[x(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),x(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",V0," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",z0," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):c("",!0)]),a.value.platform!=="droid"?(o(),n("p",R0," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",O0," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",E0,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[z,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",N0,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[z,a.value.accessToken]]),M.value.accessToken?(o(),n("p",q0,u(M.value.accessToken),1)):c("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",W0,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[z,a.value.refreshToken]]),M.value.refreshToken?(o(),n("p",F0,u(M.value.refreshToken),1)):c("",!0),e("p",B0,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(Ce,{key:0},[x(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(Ce,{key:1},[x(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",G0,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[z,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",Q0,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0)])):c("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",H0,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",J0,u(M.value.apiKeys),1)):c("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),x("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Y0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:Qe}," 下一步 ",8,Z0)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:qt},[J.value?(o(),n("div",eu)):c("",!0),x(" "+u(J.value?"创建中...":"创建"),1)],8,X0))])])])):c("",!0),pe.value===2&&a.value.addType==="oauth"?(o(),Ye(ql,{key:2,ref_key:"oauthFlowRef",ref:Z,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>pe.value=1),onSuccess:$t},null,8,["platform","proxy"])):c("",!0),pe.value===2&&a.value.addType==="setup-token"?(o(),n("div",tu,[a.value.platform==="claude"?(o(),n("div",au,[e("div",ru,[e("div",su,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",lu,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",ou,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",nu,[e("label",iu,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[_e,_.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),x("手动授权 ")],-1))]),e("label",du,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[_e,_.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),x("Cookie 自动授权 ")],-1))])])]),_.value==="manual"?(o(),n("div",uu,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",gu,[e("div",pu,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",cu,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),g.value?(o(),n("div",fu,[e("div",bu,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:g.value},null,8,vu),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Et},[e("i",{class:I(ce.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:yt},t[345]||(t[345]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:O.value,onClick:it},[O.value?(o(),n("div",xu)):(o(),n("i",mu)),x(" "+u(O.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,yu))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),x("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",ku,[e("div",hu,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",wu,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",$u,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>D.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[z,D.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):c("",!0),_.value==="cookie"?(o(),n("div",Au,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Cu,[e("div",Tu,[e("div",null,[e("label",Iu,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=x("sessionKey ",-1)),S.value>1?(o(),n("span",Uu,u(S.value)+" 个 ",1)):c("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>Q.value=i),class:I(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Ke.value}]),placeholder:`每行一个 sessionKey,例如:
-sk-ant-sid01-xxxxx...
-sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[z,Q.value]]),S.value>1?(o(),n("p",_u,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(S.value)+" 个账户 ",1)])):c("",!0),Ke.value?(o(),n("p",Ku,u(Ke.value),1)):c("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>F.value=!F.value)},[e("i",{class:I(F.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=x(" 如何获取 sessionKey? ",-1))]),F.value?(o(),n("div",Su,t[359]||(t[359]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[x("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[x("2. 按 "),e("strong",null,"F12"),x(" 打开开发者工具")]),e("li",null,[x("3. 切换到 "),e("strong",null,'"Application"'),x(" (应用) 标签页")]),e("li",null,[x(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),x(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[x("5. 找到键为 "),e("strong",null,'"sessionKey"'),x(" 的那一行")]),e("li",null,[x("6. 复制其 "),e("strong",null,'"Value"'),x(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):c("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:we.value||!Q.value.trim(),type:"button",onClick:kt},[we.value?(o(),n("div",Du)):(o(),n("i",Pu)),we.value&&ee.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(ee.value.current)+"/"+u(ee.value.total)+"... ",1)],64)):we.value?(o(),n(Ce,{key:3},[x(" 授权中... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,Mu)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),x("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):c("",!0)])])])])):c("",!0),e("div",ju,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>pe.value=1)}," 上一步 "),_.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!pt.value||y.value,type:"button",onClick:Nt},[y.value?(o(),n("div",Vu)):c("",!0),x(" "+u(y.value?"验证中...":"完成授权"),1)],8,Lu)):c("",!0)])])):c("",!0),j.value?(o(),n("div",zu,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[z,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ru,[e("label",Ou,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Eu,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Nu,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),j.value?c("",!0):(o(),n("div",qu,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Wu,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Fu,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Bu),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Gu,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Qu,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",Hu,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ju,[e("div",Yu,[e("div",Zu,[Ft.value.length===0?(o(),n("div",Xu," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=ye=>a.value.groupIds=ye),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,eg),[[ze,a.value.groupIds]]),e("span",tg,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Vt},t[376]||(t[376]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",ag,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",rg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",sg,[e("label",lg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",og,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",ng,[e("label",ig,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",dg,[e("label",ug,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",gg,[e("label",pg,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",cg,[e("label",yg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),h.value?(o(),n("div",xg,[e("div",fg,[e("p",bg," 💡 当前统一版本:"+u(h.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",hg)):(o(),n("i",kg)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,vg)])])):(o(),n("div",wg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",$g,[e("label",Ag,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",Cg,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Tg,[e("div",Ig,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",Ug,[e("code",_g,[e("span",Kg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Sg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Mg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Dg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[z,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Pg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),j.value&&a.value.dailyQuota>0?(o(),n("div",jg,[e("div",Lg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Vg," $"+u(vt().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",zg,[e("div",{class:I(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:He({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",Rg,[e("span",Og," 剩余: $"+u(Math.max(0,a.value.dailyQuota-vt()).toFixed(2)),1),e("span",Eg,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):c("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Ng,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>te.value="whitelist")},t[407]||(t[407]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>te.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",qg,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Wg,[(o(),n(Ce,null,We(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Fg),[[ze,Ae.value]]),e("span",Bg,u(i.label),1)],2)),64))]),e("p",Gg,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Qg,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Hg,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Jg,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,Yg),[[z,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,Zg),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>mt(ye)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Xg)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:$a},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",ep,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>Ve("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>Ve("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>Ve("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",tp,[e("label",ap,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",rp,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",sp,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",lp,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"?(o(),n("div",op,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[z,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",np,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,ip),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",dp,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[z,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):c("",!0),a.value.platform==="gemini-api"?(o(),n("div",up,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",gp,u(M.value.baseUrl),1)):c("",!0),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[436]||(t[436]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[437]||(t[437]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",pp,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,cp),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",yp,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[z,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[z,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",mp,[e("label",xp,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",fp,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)])])):c("",!0),a.value.platform==="azure_openai"?(o(),n("div",bp,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",vp,u(M.value.azureEndpoint),1)):c("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",kp,u(M.value.deploymentName),1)):c("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",hp,u(M.value.apiKey),1)):c("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",wp,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,$p),[[ze,a.value.supportedModels]]),e("span",Ap,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):c("",!0),j.value&&w.value?(o(),n("div",Cp,[e("div",Tp,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Ip,[e("div",Up,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>je.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",_p,[t[466]||(t[466]=x(" 当前已保存 ",-1)),e("strong",null,u(Pt.value),1),t[467]||(t[467]=x(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Kp,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",Sp,u(M.value.apiKeys),1)):c("",!0)]),e("div",Mp,[e("div",Dp,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Pp,u(Mt.value),1)]),e("div",jp,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:He(St.value)},null,4),(o(),n(Ce,null,We(Xe,i=>e("button",{key:i.value,class:I(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:ye=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Lp)),64))]),e("p",Vp,u(Dt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),x("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):c("",!0),!(j.value&&w.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",zp,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",Rp,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.refreshToken]])])])])):c("",!0),a.value.platform==="droid"?(o(),n("div",Op,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Ep,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:dt},[J.value?(o(),n("div",qp)):c("",!0),x(" "+u(J.value?"更新中...":"更新"),1)],8,Np)])])):c("",!0)])])):c("",!0),Ee(kr,{"cancel-text":st(U).cancelText,"confirm-text":st(U).confirmText,message:st(U).message,show:st(V),title:st(U).title,onCancel:st(k),onConfirm:st(v)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),At.value?(o(),Ye(To,{key:1,onClose:t[169]||(t[169]=i=>At.value=!1),onRefresh:ha})):c("",!0),je.value?(o(),Ye(An,{key:2,"account-id":(ie=p.account)==null?void 0:ie.id,"account-name":(ve=p.account)==null?void 0:ve.name,onClose:t[170]||(t[170]=i=>je.value=!1),onRefresh:wa},null,8,["account-id","account-name"])):c("",!0)])}}},cr=ra(Wp,[["__scopeId","data-v-824201c5"]]),Fp={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Bp={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},Gp={class:"mb-4 flex items-center justify-between sm:mb-6"},Qp={class:"flex items-center gap-2 sm:gap-3"},Hp={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Jp={class:"space-y-6"},Yp={key:0,class:"mt-1 text-xs text-red-500"},Zp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Xp={key:0,class:"mt-1 text-xs text-red-500"},ec={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},tc=["placeholder","required"],ac={key:0,class:"mt-1 text-xs text-red-500"},rc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sc={class:"mb-3"},lc={class:"inline-flex cursor-pointer items-center"},oc={key:0},nc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ic={class:"mb-3 space-y-2"},dc=["onUpdate:modelValue"],uc=["onUpdate:modelValue"],gc=["onClick"],pc={class:"mt-2 flex gap-3"},cc=["disabled"],yc={key:0,class:"loading-spinner mr-2"},mc={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=se(()=>!!p.account),U=$(!1),C=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),v=$(!0),k=$({}),j=$([]),oe=()=>{const y={};for(const g of j.value){const D=(g.from||"").trim(),ce=(g.to||"").trim();D&&ce&&(y[D]=ce)}return y},Z=()=>{j.value.push({from:"",to:""})},pe=y=>{j.value.splice(y,1)},J=()=>{const y={};return(!C.value.name||C.value.name.trim().length===0)&&(y.name="名称不能为空"),(!C.value.apiUrl||C.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!V.value&&(!C.value.apiKey||C.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),k.value=y,Object.keys(y).length===0},W=async()=>{if(J()){U.value=!0;try{if(V.value){const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,priority:C.value.priority,userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00",proxy:C.value.proxy||null,supportedModels:oe()};C.value.apiKey&&C.value.apiKey.trim().length>0&&(y.apiKey=C.value.apiKey);const g=await G.put(`/admin/ccr-accounts/${p.account.id}`,y);g.success?N("success"):P(g.message||"保存失败","error")}else{const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,apiKey:C.value.apiKey,priority:Number(C.value.priority||50),supportedModels:oe(),userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,proxy:C.value.proxy,accountType:"shared",dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00"},g=await G.post("/admin/ccr-accounts",y);g.success?N("success"):P(g.message||"创建失败","error")}}catch(y){P(y.message||"请求失败","error")}finally{U.value=!1}}},O=()=>{if(!p.account)return;const y=p.account;C.value.name=y.name||"",C.value.description=y.description||"",C.value.apiUrl=y.apiUrl||"",C.value.priority=Number(y.priority||50),C.value.userAgent=y.userAgent||"",C.value.rateLimitDuration=Number(y.rateLimitDuration||60),C.value.dailyQuota=Number(y.dailyQuota||0),C.value.quotaResetTime=y.quotaResetTime||"00:00",C.value.proxy=y.proxy||null,v.value=C.value.rateLimitDuration>0,j.value=[];const g=y.supportedModels||{};if(g&&typeof g=="object")for(const D of Object.keys(g))j.value.push({from:D,to:g[D]})};return aa(()=>{V.value&&O()}),$e(()=>p.account,()=>{V.value&&O()}),(y,g)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Fp,[e("div",Bp,[e("div",Gp,[e("div",Qp,[g[13]||(g[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",Hp,u(V.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:g[0]||(g[0]=D=>y.$emit("close"))},g[14]||(g[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Jp,[e("div",null,[g[15]||(g[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=D=>C.value.name=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,C.value.name]]),k.value.name?(o(),n("p",Yp,u(k.value.name),1)):c("",!0)]),e("div",null,[g[16]||(g[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":g[2]||(g[2]=D=>C.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,C.value.description]])]),e("div",Zp,[e("div",null,[g[17]||(g[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>C.value.apiUrl=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[z,C.value.apiUrl]]),k.value.apiUrl?(o(),n("p",Xp,u(k.value.apiUrl),1)):c("",!0)]),e("div",null,[e("label",ec,"API Key "+u(V.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=D=>C.value.apiKey=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiKey}]),placeholder:V.value?"留空表示不更新":"必填",required:!V.value,type:"password"},null,10,tc),[[z,C.value.apiKey]]),k.value.apiKey?(o(),n("p",ac,u(k.value.apiKey),1)):c("",!0)])]),e("div",rc,[e("div",null,[g[18]||(g[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=D=>C.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[z,C.value.priority,void 0,{number:!0}]]),g[19]||(g[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[g[20]||(g[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":g[6]||(g[6]=D=>C.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,C.value.userAgent]])])]),e("div",null,[g[24]||(g[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",sc,[e("label",lc,[b(e("input",{"onUpdate:modelValue":g[7]||(g[7]=D=>v.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,v.value]]),g[21]||(g[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),v.value?(o(),n("div",oc,[g[22]||(g[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[8]||(g[8]=D=>C.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,C.value.rateLimitDuration,void 0,{number:!0}]]),g[23]||(g[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),e("div",nc,[e("div",null,[g[25]||(g[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":g[9]||(g[9]=D=>C.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,C.value.dailyQuota,void 0,{number:!0}]]),g[26]||(g[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[g[27]||(g[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":g[10]||(g[10]=D=>C.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,C.value.quotaResetTime]]),g[28]||(g[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[g[32]||(g[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),g[33]||(g[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",ic,[(o(!0),n(Ce,null,We(j.value,(D,ce)=>(o(),n("div",{key:ce,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":B=>D.from=B,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,dc),[[z,D.from]]),g[30]||(g[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":B=>D.to=B,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,uc),[[z,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:B=>pe(ce)},g[29]||(g[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,gc)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:Z},g[31]||(g[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)]))]),e("div",null,[Ee(rr,{modelValue:C.value.proxy,"onUpdate:modelValue":g[11]||(g[11]=D=>C.value.proxy=D)},null,8,["modelValue"])]),e("div",pc,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[12]||(g[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:U.value,type:"button",onClick:W},[U.value?(o(),n("div",yc)):c("",!0),x(" "+u(U.value?V.value?"保存中...":"创建中...":V.value?"保存":"创建"),1)],8,cc)])])])])):c("",!0)]))}},yr=ra(mc,[["__scopeId","data-v-2a966370"]]),xc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},fc={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},bc={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},vc={class:"flex flex-1 items-start gap-3"},kc={class:"space-y-1"},hc={class:"flex flex-wrap items-center gap-2"},wc={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},$c={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},Ac={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},Cc={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Tc={key:0},Ic={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},Uc={key:0,class:"flex h-[50vh] items-center justify-center"},_c={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Kc={class:"flex items-start justify-between"},Sc={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Mc={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Dc={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Pc={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},jc={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Lc={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},Vc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},zc={class:"flex items-center justify-between"},Rc={class:"font-semibold text-gray-900 dark:text-gray-100"},Oc={class:"mt-2 flex items-center justify-between"},Ec={class:"font-semibold text-gray-900 dark:text-gray-100"},Nc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},qc={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},Wc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},Fc={class:"flex items-center justify-between"},Bc={class:"font-semibold text-gray-900 dark:text-gray-100"},Gc={class:"mt-2 flex items-center justify-between"},Qc={class:"font-semibold text-gray-900 dark:text-gray-100"},Hc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Jc={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},Yc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},Zc={class:"flex items-center justify-between"},Xc={class:"font-semibold text-gray-900 dark:text-gray-100"},ey={class:"mt-2 flex items-center justify-between"},ty={class:"font-semibold text-gray-900 dark:text-gray-100"},ay={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ry={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},sy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},ly={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},oy={class:"flex items-center justify-between"},ny={class:"font-semibold text-gray-900 dark:text-gray-100"},iy={class:"flex items-center justify-between"},dy={class:"font-semibold text-gray-900 dark:text-gray-100"},uy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},gy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},py={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},cy={class:"flex items-center justify-between"},yy={class:"font-semibold text-gray-900 dark:text-gray-100"},my={class:"flex items-center justify-between"},xy={class:"font-semibold text-gray-900 dark:text-gray-100"},fy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},by={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},vy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},ky={class:"flex items-center justify-between"},hy={class:"font-semibold text-gray-900 dark:text-gray-100"},wy={class:"flex items-center justify-between"},$y={class:"font-semibold text-gray-900 dark:text-gray-100"},Ay={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Cy={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Ty={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Iy={class:"text-xs text-gray-400 dark:text-gray-500"},Uy={class:"h-[260px] sm:h-[300px]"},_y={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(H,{emit:Pe}){const p=H,N=Pe,K=Vr(),{isDarkMode:V}=jr(K),U=Lr(),C=$(null);let v=null;const k={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},j=se(()=>{var S;return k[(S=p.account)==null?void 0:S.platform]||"未知平台"}),oe=se(()=>{var S;return(S=p.account)!=null&&S.accountType?p.account.accountType==="dedicated"?"专属":p.account.accountType==="group"?"分组":"共享":"共享"}),Z=se(()=>({text:V.value?"#e5e7eb":"#374151",grid:V.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),pe=se(()=>{var S;return((S=p.summary)==null?void 0:S.totalTokens)||0}),J=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.inputTokens)||0}),W=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.outputTokens)||0}),O=S=>{const h=Number(S||0);return h>=1e6?`${(h/1e6).toFixed(2)}M`:h>=1e3?`${(h/1e3).toFixed(2)}K`:h.toLocaleString()},y=S=>{const h=Number(S||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},g=S=>Math.round((Number(S)||0)*100)/100,D=S=>{if(!S)return"-";const h=new Date(S);if(Number.isNaN(h.getTime())){const je=S.split("-");return je.length===3?`${je[1]}-${je[2]}`:S}const fe=String(h.getMonth()+1).padStart(2,"0"),le=String(h.getDate()).padStart(2,"0");return`${fe}-${le}`},ce=S=>{if(!S)return"暂无";const h=new Date(S);return Number.isNaN(h.getTime())?S:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},B=(S,h)=>{if(!S)return 0;const fe=p.history.find(le=>le.date===S);return fe&&fe[h]||0},_=se(()=>{var S,h;return p.generatedAt||((S=p.summary)==null?void 0:S.generatedAt)||((h=p.summary)==null?void 0:h.generated_at)||""}),Q=se(()=>{var S,h,fe,le,je,Y,T,q;return[{key:"totalCost",label:"30天总费用",value:((S=p.summary)==null?void 0:S.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:O(((h=p.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((fe=p.summary)==null?void 0:fe.avgDailyCostFormatted)||y(((le=p.summary)==null?void 0:le.avgDailyCost)||0),subtitle:(je=p.summary)!=null&&je.actualDaysUsed&&((Y=p.summary)==null?void 0:Y.actualDaysUsed)<((T=p.summary)==null?void 0:T.days)?`基于 ${p.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:O(g(((q=p.summary)==null?void 0:q.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),we=async()=>{if(await ar(),!p.show||!C.value)return;if(v&&v.destroy(),!p.history||p.history.length===0){v=null;return}const S=p.history.map(le=>le.label),h=p.history.map(le=>le.cost||0),fe=p.history.map(le=>le.requests||0);v=new zr(C.value,{type:"line",data:{labels:S,datasets:[{label:"费用 (USD)",data:h,borderColor:Z.value.cost,backgroundColor:Z.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:fe,borderColor:Z.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:Z.value.text}},tooltip:{callbacks:{label(le){return le.dataset.label==="费用 (USD)"?`${le.dataset.label}: ${y(le.parsed.y)}`:`${le.dataset.label}: ${O(le.parsed.y)} 次`}}}},scales:{x:{ticks:{color:Z.value.text},grid:{color:Z.value.grid}},y:{position:"left",ticks:{color:Z.value.text,callback:le=>y(le)},grid:{color:Z.value.grid}},y1:{position:"right",ticks:{color:Z.value.text,callback:le=>O(le)},grid:{drawOnChartArea:!1}}}}})},Ke=()=>{v&&(v.destroy(),v=null)},F=()=>{Ke(),N("close")},ee=()=>{var S;(S=p.account)!=null&&S.id&&U.push({path:`/accounts/${p.account.id}/usage-records`,query:{platform:p.account.platform||p.account.accountType}})};return $e(()=>p.show,S=>{S&&!p.loading?we():S||Ke()}),$e(()=>p.loading,S=>{!S&&p.show&&we()}),$e(()=>p.history,()=>{p.show&&!p.loading&&we()},{deep:!0}),$e(V,()=>{p.show&&!p.loading&&we()}),Ya(()=>{Ke()}),(S,h)=>{var fe,le,je,Y,T,q,be,ge,de,a,te,Ae,Ge,De,at,lt,Xe,St,Mt,Dt,M,ht,pt,vt,ct,Pt,w,m,E,Qe,it,yt,Et,Nt,kt,jt,Lt,wt,$t,qt,dt;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",xc,[e("div",{class:"absolute inset-0",onClick:F}),e("div",fc,[e("div",bc,[e("div",vc,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",kc,[e("div",hc,[e("h3",wc,u(((fe=H.account)==null?void 0:fe.name)||((le=H.account)==null?void 0:le.email)||"账号使用详情"),1),(je=H.account)!=null&&je.platform?(o(),n("span",$c,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),x(u(j.value),1)])):c("",!0),(Y=H.account)!=null&&Y.accountType?(o(),n("span",Ac,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),x(u(oe.value),1)])):c("",!0)]),e("p",Cc,[x(" 近 "+u(((T=H.summary)==null?void 0:T.days)||30)+" 天内的费用与请求趋势 ",1),(q=H.summary)!=null&&q.actualDaysUsed&&((be=H.summary)==null?void 0:be.actualDaysUsed)<((ge=H.summary)==null?void 0:ge.days)?(o(),n("span",Tc," (日均基于实际使用 "+u(H.summary.actualDaysUsed)+" 天) ",1)):c("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:ee},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),x(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:F},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Ic,[H.loading?(o(),n("div",Uc,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(Ce,{key:1},[e("div",_c,[(o(!0),n(Ce,null,We(Q.value,et=>(o(),n("div",{key:et.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Kc,[e("div",null,[e("p",Sc,u(et.label),1),e("p",Mc,u(et.value),1),e("p",Dc,u(et.subtitle),1)]),e("div",Pc,[e("i",{class:I(["fas",et.icon,et.iconClass])},null,2)])])]))),128))]),e("div",jc,[e("div",Lc,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),x(" 今日概览 ")],-1)),e("div",Vc,[e("div",zc,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",Rc,u(((a=(de=H.summary)==null?void 0:de.today)==null?void 0:a.costFormatted)||"$0.000000"),1)]),e("div",Oc,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",Ec,u(O(((Ae=(te=H.summary)==null?void 0:te.today)==null?void 0:Ae.requests)||0)),1)]),e("div",Nc,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(O(((De=(Ge=H.summary)==null?void 0:Ge.today)==null?void 0:De.tokens)||0)),1)])])]),e("div",qc,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),x(" 最高费用日 ")],-1)),e("div",Wc,[e("div",Fc,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",Bc,u(D((lt=(at=H.summary)==null?void 0:at.highestCostDay)==null?void 0:lt.date)),1)]),e("div",Gc,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",Qc,u(((St=(Xe=H.summary)==null?void 0:Xe.highestCostDay)==null?void 0:St.formattedCost)||"$0.000000"),1)]),e("div",Hc,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(O(B((Dt=(Mt=H.summary)==null?void 0:Mt.highestCostDay)==null?void 0:Dt.date,"requests"))),1)])])]),e("div",Jc,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),x(" 最高请求日 ")],-1)),e("div",Yc,[e("div",Zc,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",Xc,u(D((ht=(M=H.summary)==null?void 0:M.highestRequestDay)==null?void 0:ht.date)),1)]),e("div",ey,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",ty,u(O(((vt=(pt=H.summary)==null?void 0:pt.highestRequestDay)==null?void 0:vt.requests)||0)),1)]),e("div",ay,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(y(B((Pt=(ct=H.summary)==null?void 0:ct.highestRequestDay)==null?void 0:Pt.date,"cost"))),1)])])])]),e("div",ry,[e("div",sy,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),x(" 累计 Token ")],-1)),e("div",ly,[e("div",oy,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",ny,u(O(pe.value)),1)]),e("div",iy,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",dy,u(O(Math.round(((w=H.summary)==null?void 0:w.avgDailyTokens)||0))),1)]),e("div",uy,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(O(J.value))+" / "+u(O(W.value)),1)])])]),e("div",gy,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),x(" 平均速率 ")],-1)),e("div",py,[e("div",cy,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",yy,u(((E=(m=H.overview)==null?void 0:m.averages)==null?void 0:E.rpm)??0),1)]),e("div",my,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",xy,u(((it=(Qe=H.overview)==null?void 0:Qe.averages)==null?void 0:it.tpm)??0),1)]),e("div",fy,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(O(Math.round((((Et=(yt=H.overview)==null?void 0:yt.averages)==null?void 0:Et.dailyRequests)||0)*100)/100))+" / "+u(O(Math.round((((kt=(Nt=H.overview)==null?void 0:Nt.averages)==null?void 0:kt.dailyTokens)||0)*100)/100)),1)])])]),e("div",by,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),x(" 最近统计 ")],-1)),e("div",vy,[e("div",ky,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",hy,u(O(((Lt=(jt=H.overview)==null?void 0:jt.daily)==null?void 0:Lt.requests)||0)),1)]),e("div",wy,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",$y,u(O((($t=(wt=H.overview)==null?void 0:wt.daily)==null?void 0:$t.allTokens)||0)),1)]),e("div",Ay,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(y(((dt=(qt=H.overview)==null?void 0:qt.daily)==null?void 0:dt.cost)||0)),1)])])])]),e("div",Cy,[e("div",Ty,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),x(" 30天费用与请求趋势 ")],-1)),e("span",Iy," 最新更新时间:"+u(ce(_.value)),1)]),e("div",Uy,[e("canvas",{ref_key:"chartCanvas",ref:C,class:"h-full w-full"},null,512)])])],64))])])])):c("",!0)])}}},Ky=ra(_y,[["__scopeId","data-v-f40122f9"]]),Sy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},My={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Dy={class:"mb-6 flex items-center justify-between"},Py={class:"flex items-center gap-3"},jy={class:"text-sm text-gray-600 dark:text-gray-400"},Ly={class:"space-y-6"},Vy={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},zy={class:"flex items-center justify-between"},Ry={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Oy={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ey={class:"mb-3 grid grid-cols-3 gap-2"},Ny=["onClick"],qy={key:0,class:"animate-fadeIn"},Wy=["min"],Fy={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},By={class:"flex items-center justify-between"},Gy={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Qy={class:"flex gap-3 pt-2"},Hy=["disabled"],Jy={key:0,class:"loading-spinner mr-2"},Yy={key:1,class:"fas fa-save mr-2"},Zy={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(!1),U=vr({expireDuration:"",customExpireDate:"",expiresAt:null}),C=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],v=se(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});$e(()=>N.show,y=>{y&&k()}),$e(()=>{var y;return(y=N.account)==null?void 0:y.id},y=>{y&&N.show&&k()});const k=()=>{V.value=!1,N.account.expiresAt?(U.expireDuration="custom",U.customExpireDate=new Date(N.account.expiresAt).toISOString().slice(0,16),U.expiresAt=N.account.expiresAt):(U.expireDuration="",U.customExpireDate="",U.expiresAt=null)},j=y=>{if(U.expireDuration=y,!y){U.expiresAt=null;return}if(y==="custom")return;const g=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,ce,B]=D,_=parseInt(ce);switch(B){case"d":g.setDate(g.getDate()+_);break;case"h":g.setHours(g.getHours()+_);break;case"m":g.setMonth(g.getMonth()+_);break;case"y":g.setFullYear(g.getFullYear()+_);break}U.expiresAt=g.toISOString()}},oe=()=>{if(U.customExpireDate)try{const[y,g]=U.customExpireDate.split("T"),[D,ce,B]=y.split("-").map(Number),[_,Q]=g.split(":").map(Number),we=new Date(D,ce-1,B,_,Q,0,0);if(isNaN(we.getTime())){console.error("Invalid date:",U.customExpireDate);return}U.expiresAt=we.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},Z=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",pe=y=>y?new Date(y){if(!y)return null;const g=new Date,ce=new Date(y)-g,B=Math.ceil(ce/(1e3*60*60*24));return ce<0?{text:"已过期",class:"text-red-600"}:B<=7?{text:`${B} 天后过期`,class:"text-orange-600"}:B<=30?{text:`${B} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(B/30)} 个月后过期`,class:"text-green-600"}},W=()=>{V.value=!0,K("save",{accountId:N.account.id,expiresAt:U.expiresAt})};return Pe({resetSaving:()=>{V.value=!1}}),(y,g)=>(o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Sy,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:g[0]||(g[0]=D=>y.$emit("close"))}),e("div",My,[e("div",Dy,[e("div",Py,[g[6]||(g[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[g[5]||(g[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",jy,' 为 "'+u(H.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:g[1]||(g[1]=D=>y.$emit("close"))},g[7]||(g[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ly,[e("div",Vy,[e("div",zy,[e("div",null,[g[10]||(g[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Ry,[H.account.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(H.account.expiresAt))+" ",1),J(H.account.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(H.account.expiresAt).class])}," ("+u(J(H.account.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[8]||(g[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),g[9]||(g[9]=x(" 永不过期 ",-1))],64))])]),e("div",Oy,[e("i",{class:I(["fas fa-hourglass-half text-lg",H.account.expiresAt&&pe(H.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[g[12]||(g[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ey,[(o(),n(Ce,null,We(C,D=>e("button",{key:D.value,class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:ce=>j(D.value)},u(D.label),11,Ny)),64)),e("button",{class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:g[2]||(g[2]=D=>j("custom"))},g[11]||(g[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),x(" 自定义 ",-1)]),2)])]),U.expireDuration==="custom"?(o(),n("div",qy,[g[13]||(g[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>U.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:v.value,type:"datetime-local",onChange:oe},null,40,Wy),[[z,U.customExpireDate]]),g[14]||(g[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):c("",!0),U.expiresAt!==H.account.expiresAt?(o(),n("div",Fy,[e("div",By,[e("div",null,[g[17]||(g[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),x(" 新的到期时间 ")],-1)),e("p",Gy,[U.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(U.expiresAt))+" ",1),J(U.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(U.expiresAt).class])}," ("+u(J(U.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[15]||(g[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),g[16]||(g[16]=x(" 永不过期 ",-1))],64))])]),g[18]||(g[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):c("",!0),e("div",Qy,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:g[4]||(g[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:V.value||U.expiresAt===H.account.expiresAt,onClick:W},[V.value?(o(),n("div",Jy)):(o(),n("i",Yy)),x(" "+u(V.value?"保存中...":"保存更改"),1)],8,Hy)])])])])):c("",!0)]))}},Xy=ra(Zy,[["__scopeId","data-v-f19e4a71"]]),em={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},tm={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},am={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},rm={class:"flex items-center gap-3"},sm={class:"text-xs text-gray-500 dark:text-gray-400"},lm=["disabled"],om={class:"px-5 py-4"},nm={class:"mb-4 space-y-2"},im={class:"flex items-center justify-between text-sm"},dm={key:0,class:"flex items-center justify-between text-sm"},um={class:"flex items-center justify-between text-sm"},gm={class:"font-medium text-gray-700 dark:text-gray-300"},pm={class:"flex items-center gap-3"},cm={class:"text-xs text-gray-500 dark:text-gray-400"},ym={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},mm={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},xm={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},fm={class:"max-h-40 overflow-y-auto p-3"},bm={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},vm={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},km={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},hm={key:2,class:"text-sm text-red-600 dark:text-red-400"},wm={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},$m={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Am=["disabled"],Cm=["disabled"],Tm={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$("idle"),V=$(""),U=$(""),C=$(0),v=$(null),k=$(null),j=$("claude-sonnet-4-5-20250929"),oe=se(()=>{if(!p.account)return"未知";const S=p.account.platform;return S==="claude"?"Claude OAuth":S==="claude-console"?"Claude Console":S==="bedrock"?"AWS Bedrock":S}),Z=se(()=>{if(!p.account)return"fas fa-question";const S=p.account.platform;return S==="claude"||S==="claude-console"||S==="bedrock"?"fas fa-brain":"fas fa-robot"}),pe=se(()=>{if(!p.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.platform;return S==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":S==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":S==="bedrock"?"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),J=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"Access Key":S==="bearer_token"?"Bearer Token":"Unknown"}),W=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"fas fa-key":S==="bearer_token"?"fas fa-ticket":"fas fa-question"}),O=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.credentialType;return S==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":S==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=se(()=>{switch(K.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),g=se(()=>{switch(K.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return U.value||"无法连接到 Claude API";default:return""}}),D=se(()=>{switch(K.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),ce=se(()=>{switch(K.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),B=se(()=>{switch(K.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),_=se(()=>{switch(K.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=se(()=>{switch(K.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function we(){if(!p.account)return"";const S=p.account.platform;return S==="claude"?`${ka}/admin/claude-accounts/${p.account.id}/test`:S==="claude-console"?`${ka}/admin/claude-console-accounts/${p.account.id}/test`:S==="bedrock"?`${ka}/admin/bedrock-accounts/${p.account.id}/test`:""}async function Ke(){if(!p.account)return;K.value="testing",V.value="",U.value="",C.value=0,v.value=Date.now(),k.value&&k.value.close();const S=we();if(!S){K.value="error",U.value="不支持的账户类型";return}try{const h=localStorage.getItem("authToken"),fe=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:h?`Bearer ${h}`:""},body:JSON.stringify({model:j.value})});if(!fe.ok){const T=await fe.json().catch(()=>({}));throw new Error(T.message||`HTTP ${fe.status}`)}const le=fe.body.getReader(),je=new TextDecoder;let Y=!1;for(;!Y;){const{done:T,value:q}=await le.read();if(T){Y=!0;continue}const ge=je.decode(q).split(`
-`);for(const de of ge)if(de.startsWith("data: "))try{const a=JSON.parse(de.substring(6));F(a)}catch{}}}catch(h){K.value="error",U.value=h.message||"连接失败",C.value=Date.now()-v.value}}function F(S){switch(S.type){case"test_start":break;case"content":V.value+=S.text;break;case"message_stop":break;case"test_complete":C.value=Date.now()-v.value,S.success?K.value="success":(K.value="error",U.value=S.error||"测试失败");break;case"error":K.value="error",U.value=S.error||"未知错误",C.value=Date.now()-v.value;break}}function ee(){K.value!=="testing"&&(k.value&&(k.value.close(),k.value=null),K.value="idle",V.value="",U.value="",C.value=0,N("close"))}return $e(()=>p.show,S=>{var h;S&&(K.value="idle",V.value="",U.value="",C.value=0,((h=p.account)==null?void 0:h.platform)==="bedrock"?p.account.credentialType==="bearer_token"?j.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":j.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":j.value="claude-sonnet-4-5-20250929")}),Ya(()=>{k.value&&k.value.close()}),(S,h)=>{var fe,le;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",em,[e("div",{class:"absolute inset-0",onClick:ee}),e("div",tm,[e("div",am,[e("div",rm,[e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",K.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":K.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:I(["fas",K.value==="idle"?"fa-vial":K.value==="testing"?"fa-spinner fa-spin":K.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[h[0]||(h[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",sm,u(((fe=H.account)==null?void 0:fe.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:K.value==="testing",onClick:ee},h[1]||(h[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,lm)]),e("div",om,[e("div",nm,[e("div",im,[h[2]||(h[2]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",pe.value])},[e("i",{class:I(Z.value)},null,2),x(" "+u(oe.value),1)],2)]),((le=p.account)==null?void 0:le.platform)==="bedrock"?(o(),n("div",dm,[h[3]||(h[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"账号类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",O.value])},[e("i",{class:I(W.value)},null,2),x(" "+u(J.value),1)],2)])):c("",!0),e("div",um,[h[4]||(h[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",gm,u(j.value),1)])]),e("div",{class:I(["mb-4 rounded-xl border p-4 transition-all duration-300",D.value])},[e("div",pm,[e("div",{class:I(["flex h-8 w-8 items-center justify-center rounded-lg",ce.value])},[e("i",{class:I(["fas text-sm",B.value,_.value])},null,2)],2),e("div",null,[e("p",{class:I(["font-medium",Q.value])},u(y.value),3),e("p",cm,u(g.value),1)])])],2),K.value!=="idle"?(o(),n("div",ym,[e("div",mm,[h[5]||(h[5]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),V.value?(o(),n("span",xm,u(V.value.length)+" 字符 ",1)):c("",!0)]),e("div",fm,[V.value?(o(),n("p",bm,[x(u(V.value)+" ",1),K.value==="testing"?(o(),n("span",vm)):c("",!0)])):K.value==="testing"?(o(),n("p",km,h[6]||(h[6]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),x(" 等待响应中... ",-1)]))):K.value==="error"&&U.value?(o(),n("p",hm,u(U.value),1)):c("",!0)])])):c("",!0),C.value>0?(o(),n("div",wm,[h[7]||(h[7]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((C.value/1e3).toFixed(2))+" 秒",1)])):c("",!0)]),e("div",$m,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:K.value==="testing",onClick:ee}," 关闭 ",8,Am),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",K.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:K.value==="testing",onClick:Ke},[e("i",{class:I(["fas",K.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),x(" "+u(K.value==="testing"?"测试中...":K.value==="idle"?"开始测试":"重新测试"),1)],10,Cm)])])])):c("",!0)])}}},Im={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Um={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},_m={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Km={class:"flex items-center gap-3"},Sm={class:"text-xs text-gray-500 dark:text-gray-400"},Mm=["disabled"],Dm={class:"px-5 py-4"},Pm={key:0,class:"flex items-center justify-center py-8"},jm={class:"mb-5 flex items-center justify-between"},Lm={class:"mb-5"},Vm=["disabled"],zm={class:"mb-5"},Rm={class:"flex flex-wrap gap-2"},Om=["disabled","onClick"],Em={class:"mb-5"},Nm=["disabled"],qm={class:"mt-2 flex flex-wrap gap-2"},Wm=["disabled","onClick"],Fm={key:0,class:"mb-4"},Bm={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Gm={class:"flex items-center gap-2"},Qm={class:"text-gray-600 dark:text-gray-400"},Hm={key:0,class:"text-gray-500 dark:text-gray-500"},Jm=["title"],Ym={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},Zm={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Xm=["disabled"],ex=["disabled"],tx={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),C=$([]),v=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],k=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function j(J){return J?new Date(J).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function oe(){var J,W;if(p.account){K.value=!0;try{const O=localStorage.getItem("authToken"),y=p.account.platform;let g="";if(y==="claude")g=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{K.value=!1;return}const D=await fetch(g,{headers:{Authorization:O?`Bearer ${O}`:""}});if(D.ok){const _=await D.json();_.success&&((J=_.data)!=null&&J.config)&&(U.value={enabled:_.data.config.enabled||!1,cronExpression:_.data.config.cronExpression||"0 8 * * *",model:_.data.config.model||"claude-sonnet-4-5-20250929"})}const ce=g.replace("/test-config","/test-history"),B=await fetch(ce,{headers:{Authorization:O?`Bearer ${O}`:""}});if(B.ok){const _=await B.json();_.success&&((W=_.data)!=null&&W.history)&&(C.value=_.data.history)}}catch(O){P("加载配置失败: "+O.message,"error")}finally{K.value=!1}}}async function Z(){if(p.account){V.value=!0;try{const J=localStorage.getItem("authToken"),W=p.account.platform;let O="";if(W==="claude")O=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{V.value=!1;return}const y=await fetch(O,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:J?`Bearer ${J}`:""},body:JSON.stringify({enabled:U.value.enabled,cronExpression:U.value.cronExpression,model:U.value.model})});if(y.ok)P("配置已保存","success"),N("saved"),pe();else{const g=await y.json().catch(()=>({}));P(g.message||"保存失败","error")}}catch(J){P("保存失败: "+J.message,"error")}finally{V.value=!1}}}function pe(){V.value||N("close")}return $e(()=>p.show,J=>{J&&(U.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},C.value=[],oe())}),(J,W)=>{var O;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Im,[e("div",{class:"absolute inset-0",onClick:pe}),e("div",Um,[e("div",_m,[e("div",Km,[W[4]||(W[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[W[3]||(W[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Sm,u(((O=H.account)==null?void 0:O.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:V.value,onClick:pe},W[5]||(W[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Mm)]),e("div",Dm,[K.value?(o(),n("div",Pm,W[6]||(W[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(Ce,{key:1},[e("div",jm,[W[7]||(W[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:I(["relative h-6 w-11 rounded-full transition-colors duration-200",U.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:W[0]||(W[0]=y=>U.value.enabled=!U.value.enabled)},[e("span",{class:I(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",U.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",Lm,[W[8]||(W[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":W[1]||(W[1]=y=>U.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,Vm),[[z,U.value.cronExpression]]),W[9]||(W[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",zm,[W[10]||(W[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",Rm,[(o(),n(Ce,null,We(v,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.cronExpression=y.value},u(y.label),11,Om)),64))])]),e("div",Em,[W[11]||(W[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":W[2]||(W[2]=y=>U.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,Nm),[[z,U.value.model]]),e("div",qm,[(o(),n(Ce,null,We(k,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.model=y.value},u(y.label),11,Wm)),64))])]),C.value.length>0?(o(),n("div",Fm,[W[12]||(W[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",Bm,[(o(!0),n(Ce,null,We(C.value,(y,g)=>(o(),n("div",{key:g,class:"flex items-center justify-between text-xs"},[e("div",Gm,[e("i",{class:I(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",Qm,u(j(y.timestamp)),1)]),y.latencyMs?(o(),n("span",Hm,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,Jm)):c("",!0)]))),128))])])):(o(),n("div",Ym,W[13]||(W[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",Zm,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:V.value,onClick:pe}," 取消 ",8,Xm),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",V.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:V.value||K.value,onClick:Z},[e("i",{class:I(["fas",V.value?"fa-spinner fa-spin":"fa-save"])},null,2),x(" "+u(V.value?"保存中...":"保存配置"),1)],10,ex)])])])):c("",!0)])}}},ax={class:"min-w-[200px] space-y-1"},rx={key:0,class:"flex items-center gap-2"},sx={key:1,class:"flex items-center gap-2"},lx={class:"text-xs text-red-600 dark:text-red-400"},ox=["disabled"],nx={key:2,class:"space-y-1"},ix={key:0,class:"text-xs text-red-500"},dx={class:"flex items-center justify-between gap-2"},ux={class:"flex items-center gap-2"},gx={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},px=["disabled","title"],cx={key:1,class:"space-y-2"},yx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},mx={class:"space-y-1"},xx=["title"],fx={class:"flex w-[94px] flex-col gap-0.5"},bx={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},vx={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},kx={key:0,class:"text-gray-400 dark:text-gray-400"},hx={key:2,class:"space-y-1"},wx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},$x={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ax={class:"flex items-center justify-between text-xs"},Cx={class:"text-gray-500 dark:text-gray-400"},Tx={key:0,class:"text-gray-400 dark:text-gray-500"},Ix={key:3,class:"flex items-center gap-2"},Ux={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},_x={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},mr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(N.initialBalance),U=$(!1),C=$(!1),v=$(null),k=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":F==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":F==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":F==="local"}}),j=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{api:"API",cache:"缓存",local:"本地"}[F]||"未知"}),oe=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.quota;return!F||F.unlimited||typeof F.percentage!="number"||!Number.isFinite(F.percentage)?null:{used:F.used??0,remaining:F.remaining??0,percentage:F.percentage,resetAt:F.resetAt||null}}),Z=se(()=>{var F,ee;return((ee=(F=V.value)==null?void 0:F.quota)==null?void 0:ee.type)==="antigravity"}),pe=se(()=>{var le,je;if(!Z.value)return[];const F=(je=(le=V.value)==null?void 0:le.quota)==null?void 0:je.buckets,ee=Array.isArray(F)?F:[],S=new Map(ee.map(Y=>[Y==null?void 0:Y.category,Y])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],fe={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(Y=>{var ge,de;const T=S.get(Y)||null,q=T==null?void 0:T.remaining,be=Number.isFinite(Number(q))?Math.max(0,Math.min(100,Number(q))):null;return{category:Y,remainingPercent:be,remainingText:be===null?"—":`${Math.round(be)}%`,resetAt:(T==null?void 0:T.resetAt)||null,dotClass:((ge=fe[Y])==null?void 0:ge.dotClass)||"bg-gray-400",barClass:((de=fe[Y])==null?void 0:de.barClass)||"bg-gray-400"}})}),J=se(()=>{var ee;const F=((ee=oe.value)==null?void 0:ee.percentage)||0;return F>=90?"bg-red-500 dark:bg-red-600":F>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),W=se(()=>{if(N.queryMode==="api"||N.queryMode==="auto")return!0;const F=V.value;return!F||F.scriptEnabled===!1?!1:!!F.scriptConfigured}),O=se(()=>{var F;return C.value?"刷新中...":W.value?Z.value?"刷新配额(调用 Antigravity API)":"刷新余额(调用脚本配置的余额 API)":((F=V.value)==null?void 0:F.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=se(()=>{var ee,S,h,fe;if((S=(ee=V.value)==null?void 0:ee.balance)!=null&&S.formattedAmount)return V.value.balance.formattedAmount;const F=Number(((fe=(h=V.value)==null?void 0:h.statistics)==null?void 0:fe.dailyCost)||0);return`今日成本 ${Q(F)}`}),g=async()=>{if(N.autoLoad&&!(!N.accountId||!N.platform)){U.value=!0,v.value=null;try{const F=await G.get(`/admin/accounts/${N.accountId}/balance`,{params:{platform:N.platform,queryApi:N.queryMode==="api"?!0:N.queryMode==="auto"?"auto":!1}});F!=null&&F.success?V.value=F.data:v.value=(F==null?void 0:F.error)||"加载失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{U.value=!1}}},D=async()=>{if(!(!N.accountId||!N.platform)&&!C.value&&W.value){C.value=!0,v.value=null;try{const F=await G.post(`/admin/accounts/${N.accountId}/balance/refresh`,{platform:N.platform});F!=null&&F.success?(V.value=F.data,K("refreshed",F.data)):v.value=(F==null?void 0:F.error)||"刷新失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{C.value=!1}}},ce=async()=>{await g()},B=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?ee.toLocaleString("zh-CN",{maximumFractionDigits:2}):"N/A"},_=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?Z.value?`${Math.round(ee)}%`:B(ee):"N/A"},Q=F=>{const ee=Number(F);return Number.isFinite(ee)?ee>=1?`$${ee.toFixed(2)}`:ee>=.01?`$${ee.toFixed(3)}`:`$${ee.toFixed(6)}`:"$0.00"},we=F=>{const ee=new Date(F),S=new Date,h=ee.getTime()-S.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const fe=Math.floor(h/(1e3*60)),le=Math.floor(fe/60),je=fe%60;return le>=24?`${Math.floor(le/24)}天后`:`${le}小时${je}分钟`},Ke=F=>{const ee=new Date(F);return Number.isNaN(ee.getTime())?"未知":ee.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return $e(()=>N.initialBalance,F=>{F&&(V.value=F)}),aa(()=>{N.initialBalance||g()}),Pe({refresh:D,reload:ce}),(F,ee)=>{var S;return o(),n("div",ax,[U.value?(o(),n("div",rx,ee[0]||(ee[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):v.value?(o(),n("div",sx,[ee[1]||(ee[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",lx,u(v.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:C.value,onClick:ce}," 重试 ",8,ox)])):V.value?(o(),n("div",nx,[V.value.status==="error"&&V.value.error?(o(),n("div",ix,u(V.value.error),1)):c("",!0),e("div",dx,[e("div",ux,[e("i",{class:I(["fas",V.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",gx,u(y.value),1),e("span",{class:I(["rounded px-1.5 py-0.5 text-xs",k.value])},u(j.value),3)]),H.hideRefresh?c("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:C.value||!W.value,title:O.value,onClick:D},[e("i",{class:I(["fas fa-sync-alt",{"fa-spin":C.value}])},null,2)],8,px))]),oe.value&&Z.value?(o(),n("div",cx,[e("div",yx,[ee[2]||(ee[2]=e("span",null,"剩余",-1)),e("span",null,u(_(oe.value.remaining)),1)]),e("div",mx,[(o(!0),n(Ce,null,We(pe.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:I(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,xx),e("div",fx,[e("div",bx,[e("div",{class:I(["h-1.5 rounded-full transition-all",h.barClass]),style:He({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",vx,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",kx,u(we(h.resetAt)),1)):c("",!0)])])]))),128))])])):oe.value?(o(),n("div",hx,[e("div",wx,[e("span",null,"已用: "+u(_(oe.value.used)),1),e("span",null,"剩余: "+u(_(oe.value.remaining)),1)]),e("div",$x,[e("div",{class:I(["h-1.5 rounded-full transition-all",J.value]),style:He({width:`${Math.min(100,oe.value.percentage)}%`})},null,6)]),e("div",Ax,[e("span",Cx,u(oe.value.percentage.toFixed(1))+"% 已使用 ",1),oe.value.resetAt?(o(),n("span",Tx," 重置: "+u(we(oe.value.resetAt)),1)):c("",!0)])])):(S=V.value.quota)!=null&&S.unlimited?(o(),n("div",Ix,ee[3]||(ee[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):c("",!0),V.value.cacheExpiresAt&&V.value.source==="cache"?(o(),n("div",Ux," 缓存至: "+u(Ke(V.value.cacheExpiresAt)),1)):c("",!0)])):(o(),n("div",_x,"暂无余额数据"))])}}},Kx={class:"space-y-4"},Sx={class:"grid gap-3 md:grid-cols-2"},Mx={class:"space-y-2"},Dx={class:"space-y-2"},Px={class:"space-y-2"},jx={class:"space-y-2"},Lx={class:"space-y-2"},Vx={class:"space-y-2"},zx={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},Rx={class:"flex items-center justify-between"},Ox={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},Ex={key:0},Nx={key:1,class:"text-red-500"},qx={class:"text-xs text-gray-500 dark:text-gray-400"},Wx={class:"mt-1 whitespace-pre-wrap break-all"},Fx={class:"text-xs text-gray-500 dark:text-gray-400"},Bx={class:"mt-1 whitespace-pre-wrap break-all"},Gx={class:"flex items-center gap-2"},xr=`({
- request: {
- url: "{{baseUrl}}/api/user/self",
- method: "GET",
- headers: {
- "Content-Type": "application/json",
- "Authorization": "Bearer {{apiKey}}",
- "New-Api-User": "{{extra}}"
- }
- },
- extractor: function (response) {
- if (response && response.success && response.data) {
- const quota = response.data.quota || 0;
- const used = response.data.used_quota || 0;
- return {
- planName: response.data.group || "默认套餐",
- remaining: quota / 500000,
- used: used / 500000,
- total: (quota + used) / 500000,
- unit: "USD"
- };
- }
- return {
- isValid: false,
- invalidMessage: (response && response.message) || "查询失败"
- };
- }
-})`,Qx={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$(null),C=vr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),v=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:xr}),k=()=>N("close"),j=()=>{Object.assign(C,v()),U.value=null,K.value=!1,V.value=!1},oe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform)))try{const D=await G.get(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`);D!=null&&D.success&&D.data&&Object.assign(C,D.data)}catch{P("加载脚本配置失败","error")}},Z=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){K.value=!0;try{await G.put(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`,{...C}),P("已保存","success"),N("saved")}catch(D){P(D.message||"保存失败","error")}finally{K.value=!1}}},pe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){V.value=!0,U.value=null;try{const D=await G.post(`/admin/accounts/${p.account.id}/balance/script/test?platform=${p.account.platform}`,{...C});D!=null&&D.success?(U.value=D.data,P("测试完成","success")):P((D==null?void 0:D.error)||"测试失败","error")}catch(D){P(D.message||"测试失败","error")}finally{V.value=!1}}},J=()=>{C.scriptBody=xr},W=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),O=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return $e(()=>p.show,y=>{y&&(j(),oe())}),(y,g)=>{var B;const D=Kr,ce=br;return o(),Ye(ce,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":H.show,title:`配置余额脚本 - ${((B=H.account)==null?void 0:B.name)||""}`,top:"5vh",width:"720px",onClose:k},{footer:nt(()=>[e("div",Gx,[Ee(D,{loading:V.value,onClick:pe},{default:nt(()=>g[20]||(g[20]=[x("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ee(D,{loading:K.value,type:"primary",onClick:Z},{default:nt(()=>g[21]||(g[21]=[x("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ee(D,{onClick:k},{default:nt(()=>g[22]||(g[22]=[x("取消",-1)])),_:1,__:[22]})])]),default:nt(()=>{var _,Q,we,Ke,F,ee;return[e("div",Kx,[e("div",Sx,[e("div",Mx,[g[7]||(g[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=S=>C.apiKey=S),class:"input-text",placeholder:"access token / key"},null,512),[[z,C.apiKey]])]),e("div",Dx,[g[8]||(g[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址(baseUrl)",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=S=>C.baseUrl=S),class:"input-text",placeholder:"https://api.example.com"},null,512),[[z,C.baseUrl]])]),e("div",Px,[g[9]||(g[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token(可选)",-1)),b(e("input",{"onUpdate:modelValue":g[2]||(g[2]=S=>C.token=S),class:"input-text",placeholder:"Bearer token"},null,512),[[z,C.token]])]),e("div",jx,[g[10]||(g[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=S=>C.extra=S),class:"input-text",placeholder:"用户ID等"},null,512),[[z,C.extra]])]),e("div",Lx,[g[11]||(g[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=S=>C.timeoutSeconds=S),class:"input-text",min:"1",type:"number"},null,512),[[z,C.timeoutSeconds,void 0,{number:!0}]])]),e("div",Vx,[g[12]||(g[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=S=>C.autoIntervalMinutes=S),class:"input-text",min:"0",type:"number"},null,512),[[z,C.autoIntervalMinutes,void 0,{number:!0}]]),g[13]||(g[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),g[14]||(g[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[g[15]||(g[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:J}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=S=>C.scriptBody=S),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[z,C.scriptBody]]),g[16]||(g[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回:isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),U.value?(o(),n("div",zx,[e("div",Rx,[g[17]||(g[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:I(["rounded px-2 py-0.5 text-xs",((_=U.value.mapped)==null?void 0:_.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((Q=U.value.mapped)==null?void 0:Q.status)||"unknown"),3)]),e("div",Ox,[e("div",null,"余额: "+u(W((we=U.value.mapped)==null?void 0:we.balance)),1),e("div",null,"单位: "+u(((Ke=U.value.mapped)==null?void 0:Ke.currency)||"—"),1),(F=U.value.mapped)!=null&&F.planName?(o(),n("div",Ex,"套餐: "+u(U.value.mapped.planName),1)):c("",!0),(ee=U.value.mapped)!=null&&ee.errorMessage?(o(),n("div",Nx," 错误: "+u(U.value.mapped.errorMessage),1)):c("",!0)]),e("details",qx,[g[18]||(g[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",Wx,u(O(U.value.extracted)),1)]),e("details",Fx,[g[19]||(g[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",Bx,u(O(U.value.response)),1)])])):c("",!0)])]}),_:1},8,["model-value","title"])}}},Hx=ra(Qx,[["__scopeId","data-v-13083b1f"]]),Jx={class:"accounts-container"},Yx={class:"card p-4 sm:p-6"},Zx={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Xx={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},ef={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},tf={class:"group relative min-w-[160px]"},af={class:"group relative min-w-[140px]"},rf={class:"group relative min-w-[160px]"},sf={class:"group relative min-w-[120px]"},lf={class:"group relative min-w-[200px]"},of={class:"relative flex items-center"},nf={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},df={class:"relative"},uf={class:"relative"},gf=["disabled"],pf={class:"relative"},cf=["disabled"],yf={class:"relative"},mf={key:0,class:"py-12 text-center"},xf={key:1,class:"py-12 text-center"},ff={key:2,class:"table-wrapper hidden md:block"},bf={class:"w-full"},vf={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},kf={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},hf={class:"flex items-center"},wf=["indeterminate"],$f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Af={key:1,class:"fas fa-sort ml-1 text-gray-400"},Cf={key:1,class:"fas fa-sort ml-1 text-gray-400"},Tf={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},If={class:"flex items-center gap-2"},Uf={key:1,class:"fas fa-sort ml-1 text-gray-400"},_f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Kf={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Sf={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Mf={class:"flex items-center"},Df=["value"],Pf={class:"flex items-center"},jf={class:"min-w-0"},Lf={class:"flex items-center gap-2"},Vf=["title"],zf={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Rf={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Of={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Ef={key:0,class:"my-2 flex flex-wrap items-center gap-2"},Nf=["title"],qf=["title"],Wf={class:"px-3 py-4"},Ff={class:"flex items-center gap-1"},Bf={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},Gf={class:"text-xs font-medium text-yellow-700"},Qf={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},Hf={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},Jf={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},Yf={class:"text-xs font-medium text-gray-950"},Zf={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},Xf={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},eb={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},tb={class:"text-xs font-semibold text-indigo-800"},ab={class:"text-xs font-medium text-indigo-700"},rb={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},sb={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},lb={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},ob={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},nb={key:10,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},ib={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},db={class:"flex flex-col gap-1"},ub={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},gb={key:0},pb={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},cb=["title"],yb={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},mb={class:"whitespace-nowrap px-3 py-4 text-sm"},xb={key:0,class:"space-y-1"},fb={class:"flex items-center gap-2"},bb={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},vb={class:"flex items-center gap-2"},kb={class:"text-xs text-gray-600 dark:text-gray-300"},hb={class:"flex items-center gap-2"},wb={class:"text-xs text-gray-600 dark:text-gray-300"},$b={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Ab={key:1,class:"text-xs text-gray-400"},Cb={class:"whitespace-nowrap px-3 py-4"},Tb={class:"mt-1 text-xs"},Ib=["onClick"],Ub={class:"whitespace-nowrap px-3 py-4"},_b={key:0,class:"space-y-2"},Kb={key:0,class:"space-y-2"},Sb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Mb={class:"flex items-center gap-2"},Db={class:"flex-1"},Pb={class:"flex items-center gap-2"},jb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Lb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Vb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},zb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Rb={class:"flex items-center gap-2"},Ob={class:"flex-1"},Eb={class:"flex items-center gap-2"},Nb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},qb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Wb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Fb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Bb={class:"flex items-center gap-2"},Gb={class:"flex-1"},Qb={class:"flex items-center gap-2"},Hb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Jb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Yb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Zb={key:1,class:"space-y-2"},Xb={key:0,class:"flex items-center gap-3 text-xs"},ev={class:"flex items-center gap-1"},tv={class:"font-medium text-gray-900 dark:text-gray-100"},av={class:"flex items-center gap-1"},rv={class:"font-medium text-gray-900 dark:text-gray-100"},sv={class:"flex items-center gap-2"},lv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},ov={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},nv={class:"text-xs text-gray-600 dark:text-gray-400"},iv={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},dv={key:2,class:"text-xs text-gray-400"},uv={key:1,class:"space-y-3"},gv={class:"flex items-center justify-between text-xs"},pv={class:"font-medium text-gray-700 dark:text-gray-200"},cv={class:"flex items-center gap-2"},yv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},mv={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},xv={class:"text-xs text-gray-600 dark:text-gray-400"},fv={class:"ml-2 text-gray-400"},bv={key:1,class:"text-sm text-gray-400"},vv={class:"space-y-1"},kv={class:"flex items-center justify-between text-xs"},hv={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},wv={key:0,class:"flex items-center gap-2"},$v={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Av={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},Cv={key:2,class:"space-y-2"},Tv={key:0,class:"space-y-2"},Iv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Uv={class:"flex items-center gap-2"},_v={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Kv={class:"flex-1"},Sv={class:"flex items-center gap-2"},Mv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Dv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Pv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Lv={class:"flex items-center gap-2"},Vv={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},zv={class:"flex-1"},Rv={class:"flex items-center gap-2"},Ov={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ev={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Nv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-sm text-gray-400"},Wv={key:3,class:"text-sm text-gray-400"},Fv={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Bv={class:"whitespace-nowrap px-3 py-4"},Gv={key:0,class:"flex items-center gap-2"},Qv={class:"h-2 w-16 rounded-full bg-gray-200"},Hv={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Jv={key:1,class:"text-sm text-gray-400"},Yv={class:"px-3 py-4 text-sm text-gray-600"},Zv=["title"],Xv={key:1,class:"text-gray-400"},e1={class:"whitespace-nowrap px-3 py-4"},t1={class:"flex flex-col gap-1"},a1={key:0},r1=["onClick"],s1=["onClick"],l1=["onClick"],o1=["onClick"],n1={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},i1={key:0,class:"flex items-center gap-1"},d1=["disabled","title","onClick"],u1=["disabled","title","onClick"],g1={class:"ml-1"},p1=["onClick"],c1=["onClick"],y1=["onClick"],m1=["onClick"],x1=["onClick"],f1={key:1,class:"flex items-center gap-1"},b1=["disabled","title","onClick"],v1={class:"ml-1"},k1=["onClick"],h1={key:3,class:"space-y-3 md:hidden"},w1={class:"mb-3 flex items-start justify-between"},$1={class:"flex items-center gap-3"},A1=["value"],C1={class:"text-sm font-semibold text-gray-900"},T1={class:"mt-0.5 flex items-center gap-2"},I1={class:"text-xs text-gray-500 dark:text-gray-400"},U1={class:"text-xs text-gray-500 dark:text-gray-400"},_1={class:"mb-3 grid grid-cols-2 gap-3"},K1={class:"space-y-1"},S1={class:"flex items-center gap-1.5"},M1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},D1={class:"flex items-center gap-1.5"},P1={class:"text-xs text-gray-600 dark:text-gray-400"},j1={class:"flex items-center gap-1.5"},L1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={key:0,class:"space-y-1"},z1={class:"flex items-center gap-1.5"},R1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},O1={class:"flex items-center gap-1.5"},E1={class:"text-xs text-gray-600 dark:text-gray-400"},N1={key:1,class:"text-sm font-semibold text-gray-400"},q1={class:"mb-3"},W1={class:"mt-1 text-xs"},F1=["onClick"],B1={class:"mb-3 space-y-2"},G1={key:0,class:"space-y-2"},Q1={key:0,class:"space-y-2"},H1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},J1={class:"flex items-center gap-2"},Y1={class:"flex-1"},Z1={class:"flex items-center gap-2"},X1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ek={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},tk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ak={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},rk={class:"flex items-center gap-2"},sk={class:"flex-1"},lk={class:"flex items-center gap-2"},ok={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ik={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},uk={class:"flex items-center gap-2"},gk={class:"flex-1"},pk={class:"flex items-center gap-2"},ck={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},yk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},mk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xk={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},fk={class:"flex items-center justify-between text-xs"},bk={class:"flex items-center gap-1"},vk={class:"font-medium text-gray-700 dark:text-gray-200"},kk={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},hk={class:"flex items-center justify-between text-xs"},wk={class:"text-gray-500 dark:text-gray-400"},$k={key:0,class:"font-medium text-indigo-600"},Ak={key:1,class:"text-gray-500"},Ck={key:2,class:"text-xs text-gray-400"},Tk={key:1,class:"space-y-2"},Ik={key:0,class:"space-y-2"},Uk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},_k={class:"flex items-center gap-2"},Kk={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Sk={class:"flex-1"},Mk={class:"flex items-center gap-2"},Dk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Pk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},jk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Lk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Vk={class:"flex items-center gap-2"},zk={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},Rk={class:"flex-1"},Ok={class:"flex items-center gap-2"},Ek={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},qk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Wk={key:1,class:"text-xs text-gray-400"},Fk={class:"flex items-center justify-between text-xs"},Bk={class:"text-gray-700 dark:text-gray-200"},Gk={key:2,class:"flex items-center justify-between text-xs"},Qk={class:"text-gray-700 dark:text-gray-200"},Hk={class:"flex items-center justify-between text-xs"},Jk={class:"font-medium text-gray-700 dark:text-gray-200"},Yk={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Zk=["disabled","onClick"],Xk=["onClick"],e2=["onClick"],t2=["onClick"],a2=["onClick"],r2=["onClick"],s2={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},l2={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},o2={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},n2={class:"flex items-center gap-2"},i2=["value"],d2={class:"flex items-center gap-2"},u2=["disabled"],g2={class:"flex items-center gap-1"},p2={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},c2=["onClick"],y2={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},m2=["disabled"],x2={class:"space-y-4"},f2={class:"overflow-x-auto"},b2={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},v2={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},k2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},h2={class:"text-green-600 dark:text-green-400"},w2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},$2={class:"text-yellow-600 dark:text-yellow-400"},A2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},C2={class:"text-orange-600 dark:text-orange-400"},T2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},I2={class:"text-orange-600 dark:text-orange-400"},U2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},_2={class:"text-orange-600 dark:text-orange-400"},K2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},S2={class:"text-orange-600 dark:text-orange-400"},M2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},D2={class:"text-orange-600 dark:text-orange-400"},P2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},j2={class:"text-red-600 dark:text-red-400"},L2={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},V2={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},R2={class:"text-green-600 dark:text-green-400"},O2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},E2={class:"text-yellow-600 dark:text-yellow-400"},N2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},q2={class:"text-orange-600 dark:text-orange-400"},W2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},F2={class:"text-orange-600 dark:text-orange-400"},B2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G2={class:"text-orange-600 dark:text-orange-400"},Q2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},H2={class:"text-orange-600 dark:text-orange-400"},J2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Y2={class:"text-orange-600 dark:text-orange-400"},Z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},X2={class:"text-red-600 dark:text-red-400"},e3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},fr="accountsPageSize",t3={__name:"AccountsView",setup(H){const{showConfirmModal:Pe,confirmOptions:p,showConfirm:N,handleConfirm:K,handleCancel:V}=hr(),U=$([]),C=$(!1),v=$(!1),k=$("name"),j=$("asc"),oe=$([]),Z=$({}),pe=$([]),J=$("all"),W=$("all"),O=$("all"),y=$(""),g=()=>{const r=localStorage.getItem(fr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},D=[10,20,50,100],ce=$(g()),B=$(1),_=$([]),Q=$(!1),we=$(!1),Ke=$(!1),F=$(!1),ee=$(!1),S=$(null),h=$([]),fe=$({}),le=$({}),je=$(""),Y=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],T=$(null),q=$(null),be=$(!1),ge=$(null),de=$(!1),a=$(null),te=$(!1),Ae=$(null),Ge=$(!1),De=$(!1),at=$(!1),lt=$(!1),Xe=$(!1),St=$(new Map),Mt=$([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),Dt=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],M={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},ht={claude:r=>G.get("/admin/claude-accounts",{params:r}),"claude-console":r=>G.get("/admin/claude-console-accounts",{params:r}),bedrock:r=>G.get("/admin/bedrock-accounts",{params:r}),gemini:r=>G.get("/admin/gemini-accounts",{params:r}),openai:r=>G.get("/admin/openai-accounts",{params:r}),azure_openai:r=>G.get("/admin/azure-openai-accounts",{params:r}),"openai-responses":r=>G.get("/admin/openai-responses-accounts",{params:r}),ccr:r=>G.get("/admin/ccr-accounts",{params:r}),droid:r=>G.get("/admin/droid-accounts",{params:r}),"gemini-api":r=>G.get("/admin/gemini-api-accounts",{params:r})},pt=Object.keys(ht),vt=r=>r==="all"?pt:M[r]?M[r]:pt.includes(r)?[r]:pt,ct=se(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return Dt.forEach(s=>{var f;r.push({...s,indent:0,isGroup:!0}),(f=s.children)==null||f.forEach(A=>{r.push({...A,indent:1,parent:s.value})})}),r}),Pt=$([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),w=se(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return pe.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),m=se(()=>Ke.value),E=$(!1),Qe=$(null),it=$(!1),yt=$(null),Et=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(A=>{if(typeof A=="string"){const l=A.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(A=>{if(A&&typeof A.name=="string"){const l=A.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([A,l])=>{if(typeof l=="string"){const ae=A.toLowerCase();if(ae.includes("name")||ae.includes("email")){const Te=l.trim();Te&&s.add(Te)}}}),Array.from(s)},Nt=(r,s)=>s?Et(r).some(f=>f.toLowerCase().includes(s)):!0,kt=r=>!!r&&Y.includes(r.platform),jt=r=>{var f;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((f=r.rateLimitStatus)==null?void 0:f.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return jt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>fa(r)}),kt(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>wt(r)}),dt(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>et(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>At(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},wt=async r=>{if(!kt(r)){P("该账户类型暂不支持查看详情","warning");return}S.value=r,F.value=!0,ee.value=!0,h.value=[],fe.value={},le.value={},je.value="";try{const s=await G.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(s.success){const f=s.data||{};h.value=f.history||[],fe.value=f.summary||{},le.value=f.overview||{},je.value=f.generatedAt||""}else P(s.error||"加载账号使用详情失败","error")}catch{P("加载账号使用详情失败","error")}finally{ee.value=!1}},$t=()=>{F.value=!1,ee.value=!1,S.value=null},qt=["claude","claude-console","bedrock"],dt=r=>!!r&&qt.includes(r.platform),et=r=>{if(!dt(r)){P("该账户类型暂不支持测试","warning");return}ge.value=r,be.value=!0},Wt=()=>{be.value=!1,ge.value=null},At=r=>{if(!dt(r)){P("该账户类型暂不支持定时测试","warning");return}a.value=r,de.value=!0},Ft=()=>{de.value=!1,a.value=null},Bt=()=>{P("定时测试配置已保存","success")},Gt=$(!1),Vt=$(null),ha=r=>{Vt.value=r,Gt.value=!0},wa=()=>{Gt.value=!1,Vt.value=null},$a=async()=>{P("余额脚本已保存","success");const r=Vt.value;if(wa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await G.get(`/admin/accounts/${r.id}/balance`,{params:{platform:r.platform,queryApi:!1}});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},mt=se(()=>{let r=U.value;const s=y.value.trim();if(s){const A=s.toLowerCase();r=r.filter(l=>Nt(l,A))}return O.value!=="all"&&(r=r.filter(A=>{const l=ft(A),ae=A.status==="blocked"||A.status==="unauthorized";return O.value==="rateLimited"?A.isActive&&l:O.value==="normal"?A.isActive&&!l&&!ae&&A.schedulable!==!1:O.value==="unschedulable"?A.isActive&&!l&&!ae&&A.schedulable===!1:O.value==="other"?!l&&(!A.isActive||ae):!0})),k.value?[...r].sort((A,l)=>{var xe,Ue,re,he,ke,ne,ue,Oe,Fe,nr,ir,dr;let ae=A[k.value],Te=l[k.value];if(k.value==="dailyTokens"?(ae=((Ue=(xe=A.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0,Te=((he=(re=l.usage)==null?void 0:re.daily)==null?void 0:he.allTokens)||0):k.value==="dailyRequests"?(ae=((ne=(ke=A.usage)==null?void 0:ke.daily)==null?void 0:ne.requests)||0,Te=((Oe=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:Oe.requests)||0):k.value==="totalTokens"&&(ae=((nr=(Fe=A.usage)==null?void 0:Fe.total)==null?void 0:nr.allTokens)||0,Te=((dr=(ir=l.usage)==null?void 0:ir.total)==null?void 0:dr.allTokens)||0),k.value==="lastUsed"&&(ae=A.lastUsedAt?new Date(A.lastUsedAt).getTime():0,Te=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),k.value==="status"&&(ae=A.isActive?1:0,Te=l.isActive?1:0),k.value==="rateLimitTime"){const er=ft(A),tr=ft(l),ur=er?bt(A):0,gr=tr?bt(l):0;return!er&&tr?-1:er&&!tr?1:urgr?1:0}return aeTe?j.value==="asc"?1:-1:0}):r}),Ve=se(()=>{const r=mt.value.length;return Math.ceil(r/ce.value)||0}),sa=se(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const f=U.value.filter(ne=>ne.platform===s.value),A=f.filter(ne=>ft(ne)),l=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable!==!1}).length,ae=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable===!1}).length,Te=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&(!ne.isActive||Oe)}).length,xe=A.filter(ne=>{const ue=bt(ne);return ue>0&&ue<=60}).length,Ue=A.filter(ne=>{const ue=bt(ne);return ue>60&&ue<=300}).length,re=A.filter(ne=>{const ue=bt(ne);return ue>300&&ue<=720}).length,he=A.filter(ne=>{const ue=bt(ne);return ue>720&&ue<=1440}).length,ke=A.filter(ne=>bt(ne)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:ae,rateLimit0_1h:xe,rateLimit1_5h:Ue,rateLimit5_12h:re,rateLimit12_24h:he,rateLimitOver24h:ke,other:Te,total:f.length}}).filter(s=>s.total>0)),ut=se(()=>sa.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),Ct=se(()=>{const r=Ve.value,s=B.value,f=[];if(r<=7)for(let A=1;A<=r;A++)f.push(A);else{let A=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(A=r-4);for(let ae=A;ae<=l;ae++)f.push(ae)}return f}),xt=se(()=>{const r=Ct.value;return r.length===0?!1:r[0]>1}),la=se(()=>{const r=Ct.value;return r.length===0?!1:r[r.length-1]{const r=Ct.value;return r.length===0?!1:xt.value&&r[0]>2}),Ca=se(()=>{const r=Ct.value;return r.length===0?!1:la.value&&r[r.length-1]{const r=(B.value-1)*ce.value,s=r+ce.value;return mt.value.slice(r,s)}),oa=se(()=>{const r=gt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const f=s==null?void 0:s.balanceInfo;return(f==null?void 0:f.scriptEnabled)!==!1&&!!(f!=null&&f.scriptConfigured)})}),Ta=se(()=>C.value?"正在加载账户...":v.value?"刷新中...":oa.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{U.value=U.value.map(f=>f.id!==r?f:{...f,balanceInfo:s})},na=(r,s)=>{const f=(s==null?void 0:s.message)||"余额查询失败";P(f,"error")},Ia=async()=>{if(v.value)return;const r=gt.value;if(!r||r.length===0)return;const s=r.filter(A=>{const l=A==null?void 0:A.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){P("当前页没有配置余额脚本的账户","warning");return}const f=r.length-s.length;v.value=!0;try{const A=await Promise.all(s.map(async Ue=>{try{const re=await G.post(`/admin/accounts/${Ue.id}/balance/refresh`,{platform:Ue.platform});return{id:Ue.id,success:!!(re!=null&&re.success),data:(re==null?void 0:re.data)||null}}catch(re){return{id:Ue.id,success:!1,error:(re==null?void 0:re.message)||"刷新失败"}}})),l=A.reduce((Ue,re)=>(re.success&&re.data&&(Ue[re.id]=re.data),Ue),{}),ae=A.filter(Ue=>Ue.success).length,Te=A.length-ae,xe=f>0?`,跳过 ${f} 个未配置脚本`:"";Object.keys(l).length>0&&(U.value=U.value.map(Ue=>{const re=l[Ue.id];return re?{...Ue,balanceInfo:re}:Ue})),Te===0?P(`成功刷新 ${ae} 个账户余额${xe}`,"success"):P(`刷新完成:${ae} 成功,${Te} 失败${xe}`,"warning")}finally{v.value=!1}},tt=()=>{const r=gt.value.map(A=>A.id),s=r.filter(A=>_.value.includes(A)).length,f=r.length;s===0?(Q.value=!1,we.value=!1):s===f?(Q.value=!0,we.value=!1):(Q.value=!1,we.value=!0)},Ua=()=>{if(Q.value)gt.value.forEach(r=>{_.value.includes(r.id)||_.value.push(r.id)});else{const r=new Set(gt.value.map(s=>s.id));_.value=_.value.filter(s=>!r.has(s))}tt()},_a=()=>{Ke.value=!Ke.value,Ke.value?tt():(_.value=[],Q.value=!1,we.value=!1)},ia=()=>{const r=new Set(U.value.map(s=>s.id));_.value=_.value.filter(s=>r.has(s)),tt()},Ka=async()=>{const r=U.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const A=(await Promise.all(s.map(async l=>{try{const ae=await G.get(`/admin/accounts/balance/platform/${l}`,{params:{queryApi:!1}});return{platform:l,success:!!(ae!=null&&ae.success),data:(ae==null?void 0:ae.data)||[]}}catch(ae){return console.debug(`Failed to load balance cache for ${l}:`,ae),{platform:l,success:!1,data:[]}}}))).reduce((l,ae)=>(ae.success&&(Array.isArray(ae.data)?ae.data:[]).forEach(xe=>{var re;const Ue=(re=xe==null?void 0:xe.data)==null?void 0:re.accountId;Ue&&(l[Ue]=xe.data)}),l),{});Object.keys(A).length!==0&&(U.value=U.value.map(l=>({...l,balanceInfo:A[l.id]||l.balanceInfo||null})))},rt=async(r=!1)=>{C.value=!0;try{const s={};W.value!=="all"&&!M[W.value]&&(s.platform=W.value),J.value!=="all"&&(s.groupId=J.value);const f=vt(W.value);await Promise.all([ua(r),ja(r)]);const A=await Promise.all(f.map(async re=>{const he=ht[re];if(!he)return{platform:re,success:!0,data:[]};try{const ke=await he(s);return{platform:re,success:ke==null?void 0:ke.success,data:ke==null?void 0:ke.data}}catch(ke){return console.debug(`Failed to load ${re} accounts:`,ke),{platform:re,success:!1,data:[]}}})),l=[],ae=Z.value||{};let Te=[];const xe=(re,he)=>{const ke=Array.isArray(he)?he:[];if(ke.length!==0)switch(re){case"claude":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude",boundApiKeysCount:Oe}});l.push(...ne);break}case"claude-console":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeConsoleAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude-console",boundApiKeysCount:Oe}});l.push(...ne);break}case"bedrock":{const ne=ke.map(ue=>({...ue,platform:"bedrock",boundApiKeysCount:0}));l.push(...ne);break}case"gemini":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"gemini",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.openaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"azure_openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.azureOpenaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"azure_openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai-responses":{Te=ke;break}case"ccr":{const ne=ke.map(ue=>({...ue,platform:"ccr",boundApiKeysCount:0}));l.push(...ne);break}case"droid":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.droidAccountId)==null?void 0:Fe[ue.id])||ue.boundApiKeysCount||0;return{...ue,platform:"droid",boundApiKeysCount:Oe}});l.push(...ne);break}case"gemini-api":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[`api:${ue.id}`])||0;return{...ue,platform:"gemini-api",boundApiKeysCount:Oe}});l.push(...ne);break}default:break}};if(A.forEach(({platform:re,success:he,data:ke})=>{he&&xe(re,ke||[])}),Te.length>0){let re={};try{const ke=await G.get("/admin/openai-responses-accounts/auto-recovery-configs");ke.success&&Array.isArray(ke.data)&&(re=ke.data.reduce((ne,ue)=>(ue!=null&&ue.accountId&&(ne[ue.accountId]=ue),ne),{}))}catch(ke){console.debug("Failed to load auto-recovery configs:",ke)}const he=Te.map(ke=>{var Oe;const ne=((Oe=ae.openaiAccountId)==null?void 0:Oe[`responses:${ke.id}`])||0,ue=re[ke.id]||ke.autoRecoveryConfig||null;return{...ke,platform:"openai-responses",boundApiKeysCount:ne,autoRecoveryConfig:ue}});l.push(...he)}let Ue=l;J.value!=="all"&&(J.value==="ungrouped"?Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0):Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0?!1:re.groupInfos.some(he=>he.id===J.value))),Ue=Ue.map(re=>{const he=ga(re.proxyConfig||re.proxy);return{...re,proxyConfig:he||null}}),U.value=Ue,ia(),Ue.some(re=>re.platform==="claude")&&Sa().catch(re=>{console.debug("Claude usage loading failed:",re)}),Ka().catch(re=>{console.debug("Balance cache loading failed:",re)})}catch{P("加载账户失败","error")}finally{C.value=!1}},Sa=async()=>{try{const r=await G.get("/admin/claude-accounts/usage");if(r.success&&r.data){const s=r.data;U.value=U.value.map(f=>f.platform==="claude"&&s[f.id]?{...f,claudeUsage:s[f.id]}:f)}}catch(r){console.debug("Failed to load Claude usage data:",r)}};let Ht="name";const Tt=r=>{r&&(k.value===r?j.value=j.value==="asc"?"desc":"asc":(k.value=r,j.value="asc"),Ht=r)},Ma=r=>{r===Ht?j.value=j.value==="asc"?"desc":"asc":j.value="asc",Ht=r},zt=r=>{if(r==null)return"0";const s=Number(r);return s>=1e6?(s/1e6).toFixed(2):s>=1e3?(s/1e6).toFixed(4):(s/1e6).toFixed(6)},da=r=>{if(!r)return"从未使用";const s=new Date(r),A=new Date-s;return A<6e4?"刚刚":A<36e5?`${Math.floor(A/6e4)} 分钟前`:A<864e5?`${Math.floor(A/36e5)} 小时前`:A<6048e5?`${Math.floor(A/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Da=()=>{y.value="",B.value=1},ua=async(r=!1)=>{if(!(!r&&at.value))try{const s=await G.get("/admin/accounts/binding-counts");s.success&&(Z.value=s.data||{},at.value=!0)}catch{Z.value={}}},Pa=async(r=!1)=>{var s;if(!(!r&&De.value))try{const f=await G.get("/admin/api-keys");f.success&&(oe.value=((s=f.data)==null?void 0:s.items)||f.data||[],De.value=!0)}catch{}},ja=async(r=!1)=>{if(!(!r&<.value))try{const s=await G.get("/admin/account-groups");s.success&&(pe.value=s.data||[],lt.value=!0)}catch{}},La=()=>{De.value=!1,at.value=!1,lt.value=!1,Xe.value=!1,St.value.clear()},Va=()=>{B.value=1,rt()},za=()=>{B.value=1,rt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const f=s.proxy&&typeof s.proxy=="object"?s.proxy:s,A=typeof f.host=="string"?f.host.trim():f.host!==void 0&&f.host!==null?String(f.host).trim():"",l=f.port!==void 0&&f.port!==null?String(f.port).trim():"";if(!A||!l)return null;const ae=typeof f.type=="string"&&f.type.trim()?f.type.trim():"socks5",Te=typeof f.username=="string"?f.username:f.username!==void 0&&f.username!==null?String(f.username):"",xe=typeof f.password=="string"?f.password:f.password!==void 0&&f.password!==null?String(f.password):"";return{type:ae,host:A,port:l,username:Te,password:xe}}const Jt=r=>{const s=ga(r);if(!s)return null;const f=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let A=s.host;A.length>15&&(A=A.substring(0,12)+"...");let l=`${f}://${A}:${s.port}`;return s.username&&(l=`${f}://***@${A}:${s.port}`),l},pa=(r,s)=>{if(!r||!s)return"--";const f=new Date(r),A=new Date(s),l=f.getHours().toString().padStart(2,"0"),ae=f.getMinutes().toString().padStart(2,"0"),Te=A.getHours().toString().padStart(2,"0"),xe=A.getMinutes().toString().padStart(2,"0");return`${l}:${ae} - ${Te}:${xe}`},ca=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),f=r%60;return s>0?`${s}小时${f}分钟`:`${f}分钟`},Ra=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),f=r%1440,A=Math.floor(f/60),l=f%60;return s>0?A>0?`${s}天${A}小时`:`${s}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:`${l}分钟`},ft=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,bt=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const f=new Date(s.rateLimitResetAt).getTime()-Date.now();return f>0?Math.ceil(f/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),A=new Date(r.rateLimitUntil).getTime()-s;return A>0?Math.ceil(A/6e4):0}return 0},Oa=()=>{Qe.value=null,E.value=!0},ya=()=>{E.value=!1,Qe.value=null},Yt=r=>{yt.value=r,it.value=!0},ma=r=>!r||!r.id?[]:oe.value.filter(s=>{const f=r.id;return s.claudeAccountId===f||s.claudeConsoleAccountId===f||s.geminiAccountId===f||s.openaiAccountId===f||s.azureOpenaiAccountId===f||s.openaiAccountId===`responses:${f}`||s.geminiAccountId===`api:${f}`}),Ea=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},xa=async r=>{var f,A;const s=Ea(r);if(!s)return{success:!1,message:"不支持的账户类型"};try{const l=await G.delete(s);return l.success?{success:!0,data:l}:{success:!1,message:l.message||"删除失败"}}catch(l){return{success:!1,message:((A=(f=l.response)==null?void 0:f.data)==null?void 0:A.message)||l.message||"删除失败"}}},Zt=async r=>{const f=ma(r).length;let A=`确定要删除账户 "${r.name}" 吗?`;if(f>0&&(A+=`
-
-⚠️ 注意:此账号有 ${f} 个 API Key 绑定。`,A+=`
-删除后,这些 API Key 将自动切换为共享池模式。`),A+=`
-
-此操作不可恢复。`,!await N("删除账户",A,"删除","取消"))return;const ae=await xa(r);if(ae.success){const Te=ae.data;let xe="账户已成功删除";(Te==null?void 0:Te.unboundKeys)>0&&(xe+=`,${Te.unboundKeys} 个 API Key 已切换为共享池模式`),P(xe,"success"),_.value=_.value.filter(Ue=>Ue!==r.id),tt(),Xe.value=!1,De.value=!1,at.value=!1,rt(),Pa(!0),ua(!0)}else P(ae.message||"删除失败","error")},Na=async()=>{var re;if(_.value.length===0){P("请先选择要删除的账户","warning");return}const r=new Map(U.value.map(he=>[he.id,he])),s=_.value.map(he=>r.get(he)).filter(he=>!!he);if(s.length===0){P("选中的账户已不存在","warning"),_.value=[],tt();return}let f=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const A=s.map(he=>({account:he,boundKeys:ma(he)})).filter(he=>he.boundKeys.length>0);if(A.length>0&&(f+=`
-
-⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,A.forEach(({account:he,boundKeys:ke})=>{const ne=he.name||he.email||he.accountName||he.id;f+=`
-- ${ne}: ${ke.length} 个`}),f+=`
-删除后,这些 API Key 将切换为共享池模式。`),f+=`
-
-请再次确认是否继续。`,!await N("批量删除账户",f,"删除","取消"))return;let ae=0,Te=0,xe=0;const Ue=[];for(const he of s){const ke=await xa(he);ke.success?(ae+=1,xe+=((re=ke.data)==null?void 0:re.unboundKeys)||0):(Te+=1,Ue.push({name:he.name||he.email||he.accountName||he.id,message:ke.message||"删除失败"}))}if(ae>0){let he=`成功删除 ${ae} 个账户`;xe>0&&(he+=`,${xe} 个 API Key 已切换为共享池模式`),P(he,Te>0?"warning":"success"),_.value=[],Q.value=!1,we.value=!1,Xe.value=!1,De.value=!1,await rt(!0)}if(Te>0){const he=Ue.map(ke=>`${ke.name}: ${ke.message}`).join(`
-`);P(`有 ${Te} 个账户删除失败:
-${he}`,ae>0?"warning":"error")}tt()},fa=async r=>{if(r.isResetting)return;let s=!1;if(window.showConfirm?s=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):s=confirm("确定要重置此账户的所有异常状态吗?"),!!s)try{r.isResetting=!0;let f="";if(r.platform==="openai")f=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")f=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")f=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")f=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")f=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")f=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")f=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")f=`/admin/gemini-accounts/${r.id}/reset-status`;else{P("不支持的账户类型","error"),r.isResetting=!1;return}const A=await G.post(f);A.success?(P("账户状态已重置","success"),rt(!0)):P(A.message||"状态重置失败","error")}catch{P("状态重置失败","error")}finally{r.isResetting=!1}},d=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{P("该账户类型暂不支持调度控制","warning");return}const f=await G.put(s);f.success?(r.schedulable=f.schedulable,P(f.schedulable?"已启用调度":"已禁用调度","success")):P(f.message||"操作失败","error")}catch{P("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},t=()=>{E.value=!1,P("账户创建成功","success"),La(),rt()},ie=()=>{it.value=!1,P("账户更新成功","success"),Xe.value=!1,rt()},ve=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",i=()=>"OAuth",ye=()=>"OAuth",me=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const f=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof f=="string"&&f.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Ne=r=>me(r)==="API Key",Be=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(f=>f.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const f=JSON.parse(r.apiKeys);if(Array.isArray(f))return f.filter(A=>A.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const f of s){const A=Number(f);if(Number.isFinite(A)&&A>=0)return A}return 0},Re=r=>{const s=Be(r),f="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[f,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[f,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},L=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},R=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},Ie=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",X=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",Se=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Le=r=>da(r),qe=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const A=String(r).toLowerCase();return A==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":A==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Je=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ze=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,ot=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},It=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return f>0?A>0?`${f}天${A}小时`:`${f}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},Xt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,f=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,A=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return f!==null&&(A!==null&&A<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=Xt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},ta=r=>{const s=Xt(r);return s===null?"--":`${s.toFixed(1)}%`},Ut=r=>{const s=Xt(r);return s===null?"0%":`${s}%`},qa=r=>r==="secondary"?"周限":"5h",Wa=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),ae=s%60;return f>0?A>0?`${f}天${A}小时`:`${f}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${ae}秒`},Fa=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?0:s/f*100},$r=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const f=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,f/s*100)},Ar=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Cr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const f=Number((r==null?void 0:r.activeTaskCount)||0);return f>=s?"text-red-600 dark:text-red-400":f>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Tr=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?"0.00":Math.max(0,f-s).toFixed(2)},sr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Fa(r.usage.daily.cost):"0.0000";$e(y,()=>{B.value=1,tt()}),$e(ce,r=>{localStorage.setItem(fr,r.toString()),tt()}),$e(()=>mt.value.length,()=>{B.value>Ve.value&&(B.value=Ve.value||1),tt()}),$e(B,()=>{tt()}),$e(gt,()=>{tt(),ar(()=>{ba()})}),$e(U,()=>{ia()});const lr=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Ir=r=>r?new Date(r){if(!r)return!1;const s=new Date,A=(new Date(r)-s)/(1e3*60*60*24);return A>0&&A<=7},Ba=r=>{T.value=r},or=()=>{T.value=null},_r=async({accountId:r,expiresAt:s})=>{try{const f=U.value.find(ae=>ae.id===r);if(!f){P("未找到账户","error");return}let A="";switch(f.platform){case"claude":case"claude-oauth":A=`/admin/claude-accounts/${r}`;break;case"gemini":A=`/admin/gemini-accounts/${r}`;break;case"claude-console":A=`/admin/claude-console-accounts/${r}`;break;case"bedrock":A=`/admin/bedrock-accounts/${r}`;break;case"ccr":A=`/admin/ccr-accounts/${r}`;break;case"openai":A=`/admin/openai-accounts/${r}`;break;case"droid":A=`/admin/droid-accounts/${r}`;break;case"azure_openai":A=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":A=`/admin/openai-responses-accounts/${r}`;break;default:P(`不支持的平台类型: ${f.platform}`,"error");return}const l=await G.put(A,{expiresAt:s||null});l.success?(P("账户到期时间已更新","success"),f.expiresAt=s||null,or()):(P(l.message||"更新失败","error"),q.value&&q.value.resetSaving())}catch(f){console.error("更新账户过期时间失败:",f),P("更新失败","error"),q.value&&q.value.resetSaving()}},ba=()=>{Ae.value&&(Ge.value=Ae.value.scrollWidth>Ae.value.clientWidth)};let Ga=null;return aa(()=>{rt(!0),ar(()=>{Ae.value&&(Ga=new ResizeObserver(()=>{ba()}),Ga.observe(Ae.value),ba())}),window.addEventListener("resize",ba)}),Ya(()=>{Ga&&Ga.disconnect(),window.removeEventListener("resize",ba)}),(r,s)=>{const f=Sr,A=br;return o(),n("div",Jx,[e("div",Yx,[e("div",Zx,[s[42]||(s[42]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",Xx,[e("div",ef,[e("div",tf,[s[27]||(s[27]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:k.value,"onUpdate:modelValue":s[0]||(s[0]=l=>k.value=l),icon:j.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Mt.value,placeholder:"选择排序",onChange:Ma},null,8,["modelValue","icon","options"])]),e("div",af,[s[28]||(s[28]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:W.value,"onUpdate:modelValue":s[1]||(s[1]=l=>W.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Va},null,8,["modelValue","options"])]),e("div",rf,[s[29]||(s[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:J.value,"onUpdate:modelValue":s[2]||(s[2]=l=>J.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:w.value,placeholder:"选择分组",onChange:za},null,8,["modelValue","options"])]),e("div",sf,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:O.value,"onUpdate:modelValue":s[3]||(s[3]=l=>O.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Pt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",lf,[s[33]||(s[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",of,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>y.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[z,y.value]]),s[32]||(s[32]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),y.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Da},s[31]||(s[31]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):c("",!0)])])]),e("div",nf,[e("div",df,[Ee(f,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>te.value=!0)},s[34]||(s[34]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",uf,[Ee(f,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value,onClick:[s[6]||(s[6]=_t(l=>rt(!0),["ctrl","exact"])),s[7]||(s[7]=_t(l=>rt(!1),["exact"])),s[8]||(s[8]=_t(l=>rt(!0),["meta","exact"]))]},[s[35]||(s[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:I(["fas relative text-green-500",C.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[36]||(s[36]=e("span",{class:"relative"},"刷新",-1))],8,gf)]),_:1})]),e("div",pf,[Ee(f,{content:Ta.value,effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value||v.value||!oa.value,onClick:Ia},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:I(["fas relative text-blue-500",v.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新余额",-1))],8,cf)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:_a},[e("i",{class:I(Ke.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Ke.value?"取消选择":"选择"),1)]),_.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Na},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[40]||(s[40]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",yf,"删除选中 ("+u(_.value.length)+")",1)])):c("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:_t(Oa,["stop"])},s[41]||(s[41]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),C.value?(o(),n("div",mf,s[43]||(s[43]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):mt.value.length===0?(o(),n("div",xf,s[44]||(s[44]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",ff,[e("div",{ref_key:"tableContainerRef",ref:Ae,class:"table-container"},[e("table",bf,[e("thead",vf,[e("tr",null,[m.value?(o(),n("th",kf,[e("div",hf,[b(e("input",{"onUpdate:modelValue":s[9]||(s[9]=l=>Q.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:we.value,type:"checkbox",onChange:Ua},null,40,wf),[[ze,Q.value]])])])):c("",!0),e("th",{class:I(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",m.value?"left-[50px]":"left-0"]),onClick:s[10]||(s[10]=l=>Tt("name"))},[s[45]||(s[45]=x(" 名称 ",-1)),k.value==="name"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",$f))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[11]||(s[11]=l=>Tt("platform"))},[s[46]||(s[46]=x(" 平台/类型 ",-1)),k.value==="platform"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Af))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Tt("status"))},[s[47]||(s[47]=x(" 状态 ",-1)),k.value==="status"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Cf))]),s[53]||(s[53]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[54]||(s[54]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Tf,[e("div",If,[s[50]||(s[50]=e("span",null,"会话窗口",-1)),Ee(f,{placement:"top"},{content:nt(()=>s[48]||(s[48]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:nt(()=>[s[49]||(s[49]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[49]})])]),s[55]||(s[55]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Tt("priority"))},[s[51]||(s[51]=x(" 优先级 ",-1)),k.value==="priority"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Uf))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Tt("expiresAt"))},[s[52]||(s[52]=x(" 到期时间 ",-1)),k.value==="expiresAt"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",_f))]),e("th",{class:I(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",Ge.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Kf,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te;return o(),n("tr",{key:l.id,class:"table-row"},[m.value?(o(),n("td",Sf,[e("div",Mf,[b(e("input",{"onUpdate:modelValue":s[15]||(s[15]=xe=>_.value=xe),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,Df),[[ze,_.value]])])])):c("",!0),e("td",{class:I(["name-column sticky z-10 px-3 py-4",m.value?"left-[50px]":"left-0"])},[e("div",Pf,[s[61]||(s[61]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",jf,[e("div",Lf,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,Vf),l.accountType==="dedicated"?(o(),n("span",zf,s[57]||(s[57]=[e("i",{class:"fas fa-lock mr-1"},null,-1),x("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",Rf,s[58]||(s[58]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),x("分组调度 ",-1)]))):(o(),n("span",Of,s[59]||(s[59]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),x("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",Ef,[(o(!0),n(Ce,null,We(l.groupInfos,xe=>(o(),n("span",{key:xe.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${xe.name}`},[s[60]||(s[60]=e("i",{class:"fas fa-folder mr-1"},null,-1)),x(u(xe.name),1)],8,Nf))),128))])):c("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,qf)])])],2),e("td",Wf,[e("div",Ff,[l.platform==="gemini"?(o(),n("div",Bf,[s[62]||(s[62]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[63]||(s[63]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[64]||(s[64]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Gf,u(i()),1)])):l.platform==="claude-console"?(o(),n("div",Qf,s[65]||(s[65]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",Hf,s[66]||(s[66]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",Jf,[s[67]||(s[67]=e("div",{class:"fa-openai"},null,-1)),s[68]||(s[68]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[69]||(s[69]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Yf,u(ye()),1)])):l.platform==="azure_openai"?(o(),n("div",Zf,s[70]||(s[70]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",Xf,s[71]||(s[71]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",eb,[s[72]||(s[72]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",tb,u(L(l)),1),s[73]||(s[73]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",ab,u(ve(l)),1)])):l.platform==="ccr"?(o(),n("div",rb,s[74]||(s[74]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",sb,[s[76]||(s[76]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[77]||(s[77]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[78]||(s[78]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",lb,u(me(l)),1),Ne(l)?(o(),n("span",{key:0,class:I(Re(l))},[s[75]||(s[75]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(Be(l)),1)],2)):c("",!0)])):l.platform==="gemini-api"?(o(),n("div",ob,s[79]||(s[79]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",nb,s[80]||(s[80]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",ib,[e("div",db,[e("span",{class:I(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:I(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),x(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",ub,[s[81]||(s[81]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[82]||(s[82]=x(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",gb,"("+u(Ra(l.rateLimitStatus.minutesRemaining))+")",1)):c("",!0)])):c("",!0),l.schedulable===!1?(o(),n("span",pb,[s[84]||(s[84]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[85]||(s[85]=x(" 不可调度 ",-1)),R(l)?(o(),Ye(f,{key:0,content:R(l),effect:"dark",placement:"top"},{default:nt(()=>s[83]||(s[83]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[83]},1032,["content"])):c("",!0)])):c("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,cb)):c("",!0),l.accountType==="dedicated"?(o(),n("span",yb," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):c("",!0)])]),e("td",mb,[l.usage&&l.usage.daily?(o(),n("div",xb,[e("div",fb,[s[86]||(s[86]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",bb,u(l.usage.daily.requests||0)+" 次",1)]),e("div",vb,[s[87]||(s[87]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",kb,u(zt(l.usage.daily.allTokens||0))+"M",1)]),e("div",hb,[s[88]||(s[88]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",wb,"$"+u(sr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",$b," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):c("",!0)])):(o(),n("div",Ab,"暂无数据"))]),e("td",Cb,[Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:xe=>na(l.id,xe),onRefreshed:xe=>Qt(l.id,xe)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Tb,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:xe=>ha(l)}," 配置余额脚本 ",8,Ib))])]),e("td",Ub,[l.platform==="claude"?(o(),n("div",_b,[Me(l)&&l.claudeUsage?(o(),n("div",Kb,[e("div",Sb,[e("div",Mb,[s[89]||(s[89]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Db,[e("div",Pb,[e("div",jb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",Lb,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",Vb," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",zb,[e("div",Rb,[s[90]||(s[90]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",Ob,[e("div",Eb,[e("div",Nb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",qb,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",Wb," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",Fb,[e("div",Bb,[s[91]||(s[91]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",Gb,[e("div",Qb,[e("div",Hb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Jb,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Yb," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",Zb,[l.usage&&l.usage.sessionWindow?(o(),n("div",Xb,[e("div",ev,[s[92]||(s[92]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",tv,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",av,[s[93]||(s[93]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",rv," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):c("",!0),e("div",sv,[e("div",lv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",ov,u(l.sessionWindow.progress)+"% ",1)]),e("div",nv,[e("div",null,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",iv," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):c("",!0)])])):(o(),n("div",dv,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",uv,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(Ce,{key:0},[e("div",gv,[s[94]||(s[94]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",pv,u(Za(l).toFixed(1))+"% ",1)]),e("div",cv,[e("div",yv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",$r(Za(l))]),style:He({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",mv," $"+u(Fa(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",xv,[x(" 剩余 $"+u(Tr(l))+" ",1),e("span",fv,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",bv,s[95]||(s[95]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",vv,[e("div",kv,[s[96]||(s[96]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",hv,u(Xa(l).toFixed(0))+"% ",1)):c("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",wv,[e("div",$v,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Ar(Xa(l))]),style:He({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:I(["min-w-[48px] text-xs font-medium",Cr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",Av,s[97]||(s[97]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",Cv,[l.codexUsage?(o(),n("div",Tv,[e("div",Iv,[e("div",Uv,[e("span",_v,u(qa("primary")),1),e("div",Kv,[e("div",Sv,[e("div",Mv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Dv,u(ta(l.codexUsage.primary)),1)])])]),e("div",Pv," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",jv,[e("div",Lv,[e("span",Vv,u(qa("secondary")),1),e("div",zv,[e("div",Rv,[e("div",Ov,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Ev,u(ta(l.codexUsage.secondary)),1)])])]),e("div",Nv," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):(o(),n("div",qv,s[98]||(s[98]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",Wv,s[99]||(s[99]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Fv,u(da(l.lastUsedAt)),1),e("td",Bv,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",Gv,[e("div",Qv,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:He({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Hv,u(l.priority||50),1)])):(o(),n("div",Jv,s[100]||(s[100]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Yv,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,Zv)):(o(),n("div",Xv,"无代理"))]),e("td",e1,[e("div",t1,[l.expiresAt?(o(),n("span",a1,[Ir(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},s[101]||(s[101]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),x(" 已过期 ",-1)]),8,r1)):Ur(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},[s[102]||(s[102]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),x(" "+u(lr(l.expiresAt)),1)],8,s1)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},u(lr(l.expiresAt)),9,l1))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},s[103]||(s[103]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),x(" 永不过期 ",-1)]),8,o1))])]),e("td",n1,[Ge.value?(o(),n("div",f1,[e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",v1,u(l.schedulable?"调度":"停用"),1)],10,b1),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[110]||(s[110]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,k1),Ee(Rr,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",i1,[jt(l)?(o(),n("button",{key:0,class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:xe=>fa(l)},[e("i",{class:I(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[104]||(s[104]=e("span",{class:"ml-1"},"重置状态",-1))],10,d1)):c("",!0),e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",g1,u(l.schedulable?"调度":"停用"),1)],10,u1),kt(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:xe=>wt(l)},s[105]||(s[105]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,p1)):c("",!0),dt(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:xe=>et(l)},s[106]||(s[106]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,c1)):c("",!0),dt(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:xe=>At(l)},s[107]||(s[107]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,y1)):c("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[108]||(s[108]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,m1),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:xe=>Zt(l)},s[109]||(s[109]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,x1)]))])])}),128))])])],512)])),!C.value&&mt.value.length>0?(o(),n("div",h1,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te,xe,Ue;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",w1,[e("div",$1,[m.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[16]||(s[16]=re=>_.value=re),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,A1)),[[ze,_.value]]):c("",!0),e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:I(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",C1,u(l.name||l.email),1),e("div",T1,[e("span",I1,u(l.platform),1),s[111]||(s[111]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",U1,u(l.type),1)])])]),e("span",{class:I(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",X(l)])},[e("div",{class:I(["mr-1.5 h-1.5 w-1.5 rounded-full",Se(l)])},null,2),x(" "+u(Ie(l)),1)],2)]),e("div",_1,[e("div",null,[s[115]||(s[115]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",K1,[e("div",S1,[s[112]||(s[112]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",M1,u(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.requests)||0)+" 次 ",1)]),e("div",D1,[s[113]||(s[113]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",P1,u(zt(((Ue=(xe=l.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0))+"M ",1)]),e("div",j1,[s[114]||(s[114]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",L1," $"+u(sr(l)),1)])])]),e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",V1,[e("div",z1,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",R1,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",O1,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",E1," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",N1,"-"))])]),e("div",q1,[s[119]||(s[119]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:re=>na(l.id,re),onRefreshed:re=>Qt(l.id,re)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",W1,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:re=>ha(l)}," 配置余额脚本 ",8,F1))])]),e("div",B1,[l.platform==="claude"?(o(),n("div",G1,[Me(l)&&l.claudeUsage?(o(),n("div",Q1,[e("div",H1,[e("div",J1,[s[120]||(s[120]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Y1,[e("div",Z1,[e("div",X1,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",ek,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",tk," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",ak,[e("div",rk,[s[121]||(s[121]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",sk,[e("div",lk,[e("div",ok,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",nk,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",ik," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",dk,[e("div",uk,[s[122]||(s[122]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",gk,[e("div",pk,[e("div",ck,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",yk,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",mk," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",xk,[e("div",fk,[e("div",bk,[s[124]||(s[124]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ee(f,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:nt(()=>s[123]||(s[123]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[123]})]),e("span",vk,u(l.sessionWindow.progress)+"% ",1)]),e("div",kk,[e("div",{class:I(["h-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",hk,[e("span",wk,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",$k," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):(o(),n("span",Ak," 已结束 "))])])):(o(),n("div",Ck,"暂无统计"))])):l.platform==="openai"?(o(),n("div",Tk,[l.codexUsage?(o(),n("div",Ik,[e("div",Uk,[e("div",_k,[e("span",Kk,u(qa("primary")),1),e("div",Sk,[e("div",Mk,[e("div",Dk,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Pk,u(ta(l.codexUsage.primary)),1)])])]),e("div",jk," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",Lk,[e("div",Vk,[e("span",zk,u(qa("secondary")),1),e("div",Rk,[e("div",Ok,[e("div",Ek,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Nk,u(ta(l.codexUsage.secondary)),1)])])]),e("div",qk," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):c("",!0),l.codexUsage?c("",!0):(o(),n("div",Wk,"暂无统计"))])):c("",!0),e("div",Fk,[s[125]||(s[125]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Bk,u(l.lastUsedAt?Le(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",Gk,[s[126]||(s[126]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Qk,u(l.proxyConfig.type.toUpperCase()),1)])):c("",!0),e("div",Hk,[s[127]||(s[127]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",Jk,u(l.priority||50),1)])]),e("div",Yk,[e("button",{class:I(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:re=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),x(" "+u(l.schedulable?"暂停":"启用"),1)],10,Zk),kt(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:re=>wt(l)},s[128]||(s[128]=[e("i",{class:"fas fa-chart-line"},null,-1),x(" 详情 ",-1)]),8,Xk)):c("",!0),dt(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:re=>et(l)},s[129]||(s[129]=[e("i",{class:"fas fa-vial"},null,-1),x(" 测试 ",-1)]),8,e2)):c("",!0),dt(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:re=>At(l)},s[130]||(s[130]=[e("i",{class:"fas fa-clock"},null,-1),x(" 定时 ",-1)]),8,t2)):c("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:re=>Yt(l)},s[131]||(s[131]=[e("i",{class:"fas fa-edit mr-1"},null,-1),x(" 编辑 ",-1)]),8,a2),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:re=>Zt(l)},s[132]||(s[132]=[e("i",{class:"fas fa-trash"},null,-1)]),8,r2)])])}),128))])):c("",!0)]),!C.value&&mt.value.length>0?(o(),n("div",s2,[e("div",l2,[e("span",o2," 共 "+u(mt.value.length)+" 条记录 ",1),e("div",n2,[s[133]||(s[133]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[17]||(s[17]=l=>ce.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[18]||(s[18]=l=>B.value=1)},[(o(),n(Ce,null,We(D,l=>e("option",{key:l,value:l},u(l),9,i2)),64))],544),[[Ja,ce.value]]),s[134]||(s[134]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",d2,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:B.value===1,onClick:s[19]||(s[19]=l=>B.value--)},s[135]||(s[135]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,u2),e("div",g2,[xt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[20]||(s[20]=l=>B.value=1)}," 1 ")):c("",!0),Aa.value?(o(),n("span",p2," ... ")):c("",!0),(o(!0),n(Ce,null,We(Ct.value,l=>(o(),n("button",{key:l,class:I(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===B.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:ae=>B.value=l},u(l),11,c2))),128)),Ca.value?(o(),n("span",y2," ... ")):c("",!0),la.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>B.value=Ve.value)},u(Ve.value),1)):c("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:B.value===Ve.value||Ve.value===0,onClick:s[22]||(s[22]=l=>B.value++)},s[136]||(s[136]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,m2)])])):c("",!0),E.value&&(!Qe.value||Qe.value!=="ccr")?(o(),Ye(cr,{key:1,onClose:ya,onPlatformChanged:s[23]||(s[23]=l=>Qe.value=l),onSuccess:t})):E.value&&Qe.value==="ccr"?(o(),Ye(yr,{key:2,onClose:ya,onSuccess:t})):c("",!0),it.value&&yt.value&&yt.value.platform==="ccr"?(o(),Ye(yr,{key:3,account:yt.value,onClose:s[24]||(s[24]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):it.value?(o(),Ye(cr,{key:4,account:yt.value,onClose:s[25]||(s[25]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):c("",!0),Ee(kr,{"cancel-text":st(p).cancelText,"confirm-text":st(p).confirmText,message:st(p).message,show:st(Pe),title:st(p).title,onCancel:st(V),onConfirm:st(K)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),F.value?(o(),Ye(Ky,{key:5,account:S.value||{},"generated-at":je.value,history:h.value,loading:ee.value,overview:le.value,show:F.value,summary:fe.value,onClose:$t},null,8,["account","generated-at","history","loading","overview","show","summary"])):c("",!0),Ee(Xy,{ref_key:"expiryEditModalRef",ref:q,account:T.value||{id:null,expiresAt:null,name:""},show:!!T.value,onClose:or,onSave:_r},null,8,["account","show"]),Ee(Tm,{account:ge.value,show:be.value,onClose:Wt},null,8,["account","show"]),Ee(tx,{account:a.value,show:de.value,onClose:Ft,onSaved:Bt},null,8,["account","show"]),Ee(Hx,{account:Vt.value,show:Gt.value,onClose:wa,onSaved:$a},null,8,["account","show"]),Ee(A,{modelValue:te.value,"onUpdate:modelValue":s[26]||(s[26]=l=>te.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:nt(()=>[e("div",x2,[e("div",f2,[e("table",b2,[s[138]||(s[138]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(Ce,null,We(sa.value,l=>(o(),n("tr",{key:l.platform},[e("td",v2,u(l.platformLabel),1),e("td",k2,[e("span",h2,u(l.normal),1)]),e("td",w2,[e("span",$2,u(l.unschedulable),1)]),e("td",A2,[e("span",C2,u(l.rateLimit0_1h),1)]),e("td",T2,[e("span",I2,u(l.rateLimit1_5h),1)]),e("td",U2,[e("span",_2,u(l.rateLimit5_12h),1)]),e("td",K2,[e("span",S2,u(l.rateLimit12_24h),1)]),e("td",M2,[e("span",D2,u(l.rateLimitOver24h),1)]),e("td",P2,[e("span",j2,u(l.other),1)]),e("td",L2,u(l.total),1)]))),128)),e("tr",V2,[s[137]||(s[137]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",z2,[e("span",R2,u(ut.value.normal),1)]),e("td",O2,[e("span",E2,u(ut.value.unschedulable),1)]),e("td",N2,[e("span",q2,u(ut.value.rateLimit0_1h),1)]),e("td",W2,[e("span",F2,u(ut.value.rateLimit1_5h),1)]),e("td",B2,[e("span",G2,u(ut.value.rateLimit5_12h),1)]),e("td",Q2,[e("span",H2,u(ut.value.rateLimit12_24h),1)]),e("td",J2,[e("span",Y2,u(ut.value.rateLimitOver24h),1)]),e("td",Z2,[e("span",X2,u(ut.value.other),1)]),e("td",e3,u(ut.value.total),1)])])])]),s[139]||(s[139]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"])])}}},d3=ra(t3,[["__scopeId","data-v-9813ec02"]]);export{d3 as default};
diff --git a/assets/AccountsView-mqqu5LbU.js b/assets/AccountsView-mqqu5LbU.js
new file mode 100644
index 00000000..4407fd85
--- /dev/null
+++ b/assets/AccountsView-mqqu5LbU.js
@@ -0,0 +1,71 @@
+import{b as qr,e as kr,f as Wr}from"./element-plus-BSjV1f9S.js";import{aP as Br,r as v,o as ve,V as Ha,x as n,y as o,z as e,L as m,K as b,al as je,aT as Et,O as f,aq as j,aa as Gr,P as u,aV as wa,aW as ka,C as $,c as Z,Z as Fr,an as Ie,Q as ke,q as ra,I as Xe,R as Ve,ac as Ne,u as Ye,a5 as Mt,B as Ze,aY as Qr,aU as Hr,D as ar,_ as hr,J as ot,Y as vt}from"./vue-vendor-DV7DYXbz.js";import{a4 as Jr,C as wr,D as $r,I as Ar,E as Cr,G as Tr,a5 as Ir,H as Ur,J as _r,a6 as Yr,a7 as Zr,a8 as Xr,a9 as es,aa as ts,ab as as,ac as rs,ad as ss,ae as ls,af as os,ag as ns,ah as is,ai as ds,aj as us,ak as ps,al as gs,am as cs,an as ha,ao as Kr,ap as ys,aq as Sr,ar as ms,as as xs,at as fs,au as bs,av as vs,aw as ks,ax as hs,ay as ws,az as $s,aA as As,aB as Cs,aC as Ts,s as V,c as Is,K as sr,aD as Us,aE as _s,aF as Ks,aG as Ss,_ as sa,aH as Ms,aI as Ds,aJ as Ps,aK as js,aL as Vs,aM as zs,aN as Ls,a as Rs,f as Je,aO as kt,aP as Mr,aQ as Dr,aR as Os,aS as Es,aT as Ns,F as qs,aU as Ws,aV as Bs,aW as Gs,aX as Fs,Z as cr,aY as Qs,aZ as Hs,a_ as Js,t as Ys,a$ as Zs}from"./index-BahP9Xx9.js";import{C as Ja}from"./ConfirmModal-C2rCOkXI.js";import{C as Xs}from"./chart-yFHxLHpB.js";import{C as Qa,_ as el}from"./ActionDropdown-GADQlLlI.js";import"./vendor-Dr8jvgFu.js";const yr={claude:{endpoint:"claude-accounts",stateKey:"claudeAccounts"},"claude-console":{endpoint:"claude-console-accounts",stateKey:"claudeConsoleAccounts"},bedrock:{endpoint:"bedrock-accounts",stateKey:"bedrockAccounts"},gemini:{endpoint:"gemini-accounts",stateKey:"geminiAccounts"},openai:{endpoint:"openai-accounts",stateKey:"openaiAccounts"},azure_openai:{endpoint:"azure-openai-accounts",stateKey:"azureOpenaiAccounts"},"openai-responses":{endpoint:"openai-responses-accounts",stateKey:"openaiResponsesAccounts"},droid:{endpoint:"droid-accounts",stateKey:"droidAccounts"}},Pr=Br("accounts",()=>{const F=v([]),_e=v([]),c=v([]),z=v([]),A=v([]),_=v([]),T=v([]),k=v([]),P=v(!1),O=v(null),Y=v(""),M=v("asc"),se={claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k},ge=async(B,q)=>{P.value=!0;const Ee=await B();Ee.success?q.value=Ee.data||[]:O.value=Ee.message,P.value=!1},N=async(B,q,...Ee)=>{P.value=!0;const We=await B(...Ee);return We.success?await q():O.value=We.message,P.value=!1,We},E=()=>ge(wr,F),R=()=>ge($r,_e),y=()=>ge(Ar,c),p=()=>ge(Cr,z),D=()=>ge(Tr,A),de=()=>ge(Ir,_),le=()=>ge(Ur,T),ae=()=>ge(_r,k);return{claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k,loading:P,error:O,sortBy:Y,sortOrder:M,fetchClaudeAccounts:E,fetchClaudeConsoleAccounts:R,fetchBedrockAccounts:y,fetchGeminiAccounts:p,fetchOpenAIAccounts:D,fetchAzureOpenAIAccounts:de,fetchOpenAIResponsesAccounts:le,fetchDroidAccounts:ae,fetchAllAccounts:async()=>{P.value=!0,await Promise.all([E(),R(),y(),p(),D(),de(),le(),ae()]),P.value=!1},createClaudeAccount:B=>N(Yr,E,B),createClaudeConsoleAccount:B=>N(Zr,R,B),createBedrockAccount:B=>N(Xr,y,B),createGeminiAccount:B=>N(es,p,B),createOpenAIAccount:B=>N(ts,D,B),createDroidAccount:B=>N(as,ae,B),updateDroidAccount:(B,q)=>N(ha,ae,B,q),createAzureOpenAIAccount:B=>N(rs,de,B),createOpenAIResponsesAccount:B=>N(ss,le,B),createGeminiApiAccount:B=>N(ls,p,B),updateClaudeAccount:(B,q)=>N(os,E,B,q),updateClaudeConsoleAccount:(B,q)=>N(ns,R,B,q),updateBedrockAccount:(B,q)=>N(is,y,B,q),updateGeminiAccount:(B,q)=>N(ds,p,B,q),updateOpenAIAccount:(B,q)=>N(us,D,B,q),updateAzureOpenAIAccount:(B,q)=>N(ps,de,B,q),updateOpenAIResponsesAccount:(B,q)=>N(gs,le,B,q),updateGeminiApiAccount:(B,q)=>N(cs,p,B,q),toggleAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Kr(`/admin/${Ee.endpoint}/${q}/toggle`);return We.success?await ge(ys[`get${Ee.stateKey.charAt(0).toUpperCase()+Ee.stateKey.slice(1).replace("Accounts","")}AccountsApi`],se[Ee.stateKey]):O.value=We.message,P.value=!1,We},deleteAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Sr(`/admin/${Ee.endpoint}/${q}`);return We.success?await{claude:E,"claude-console":R,bedrock:y,gemini:p,openai:D,azure_openai:de,"openai-responses":le,droid:ae}[B]():O.value=We.message,P.value=!1,We},refreshClaudeToken:async B=>{P.value=!0;const q=await ms(B);return q.success?await E():O.value=q.message,P.value=!1,q},generateClaudeAuthUrl:async B=>{const q=await xs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeCode:async B=>{const q=await fs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateClaudeSetupTokenUrl:async B=>{const q=await bs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeSetupTokenCode:async B=>{const q=await vs(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthWithCookie:async B=>{const q=await ks(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthSetupTokenWithCookie:async B=>{const q=await hs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateGeminiAuthUrl:async B=>{const q=await ws(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeGeminiCode:async B=>{const q=await $s(B);return q.success||(O.value=q.message),q.success?q.data:null},generateOpenAIAuthUrl:async B=>{const q=await As(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeOpenAICode:async B=>{const q=await Cs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateDroidAuthUrl:async B=>{const q=await Ts(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeDroidCode:B=>Jr(B),sortAccounts:B=>{Y.value===B?M.value=M.value==="asc"?"desc":"asc":(Y.value=B,M.value="asc")},reset:()=>{F.value=[],_e.value=[],c.value=[],z.value=[],A.value=[],_.value=[],T.value=[],k.value=[],P.value=!1,O.value=null,Y.value="",M.value="asc"}}}),tl={class:"space-y-4"},al={class:"flex items-center justify-between"},rl={class:"flex cursor-pointer items-center"},sl={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},ll={class:"relative"},ol={key:0,class:"mt-1 text-xs text-red-500"},nl={key:1,class:"mt-1 text-xs text-green-500"},il={class:"grid grid-cols-2 gap-4"},dl={class:"space-y-4"},ul={class:"flex items-center"},pl={key:0,class:"grid grid-cols-2 gap-4"},gl={class:"relative"},cl=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(F,{emit:_e}){const c=F,z=_e,A=v({...c.modelValue}),_=v(!!(A.value.username||A.value.password)),T=v(!1),k=v(""),P=v(""),O=v(!1);ve(()=>c.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(A.value)&&(A.value={...R},_.value=!!(R.username||R.password))},{deep:!0}),ve(()=>A.value.enabled,()=>{M()}),ve(()=>A.value.type,()=>{M()}),ve(()=>A.value.host,()=>{M()}),ve(()=>A.value.port,()=>{M()}),ve(()=>A.value.username,()=>{M()}),ve(()=>A.value.password,()=>{M()}),ve(_,R=>{R||(A.value.username="",A.value.password="",M())});let Y=null;function M(){Y&&clearTimeout(Y),Y=setTimeout(()=>{const R={...A.value};_.value||(R.username="",R.password=""),z("update:modelValue",R)},100)}function se(){if(P.value="",O.value=!1,!!k.value)try{const R=k.value.split("#")[0].trim();if(!R)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(y);if(!p){const he=/^([^:]+):(\d+)$/,W=R.match(he);if(W){A.value.type="socks5",A.value.host=W[1],A.value.port=W[2],A.value.username="",A.value.password="",_.value=!1,O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3);return}P.value="无效的代理URL格式,请检查输入";return}const[,D,de,le,ae,oe]=p;A.value.type=D.toLowerCase(),A.value.host=ae,A.value.port=oe,de&&le?(A.value.username=decodeURIComponent(de),A.value.password=decodeURIComponent(le),_.value=!0):(A.value.username="",A.value.password="",_.value=!1),O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3)}catch{P.value="解析失败,请检查URL格式"}}function ge(){k.value="",P.value="",O.value=!1}function N(){setTimeout(()=>{se()},0)}function E(){const R=k.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&se():/^[^:]+:\d{2,5}$/.test(R)&&se()}return Ha(()=>{Y&&clearTimeout(Y)}),(R,y)=>(o(),n("div",tl,[e("div",al,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",rl,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=p=>A.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,A.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),A.value.enabled?(o(),n("div",sl,[y[22]||(y[22]=Et('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",ll,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=p=>k.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:E,onKeyup:Gr(se,["enter"]),onPaste:N},null,544),[[j,k.value]]),k.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:ge},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):m("",!0)]),P.value?(o(),n("p",ol,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(P.value),1)])):O.value?(o(),n("p",nl,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):m("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=p=>A.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[wa,A.value.type]])]),e("div",il,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=p=>A.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[j,A.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=p=>A.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[j,A.value.port]])])]),e("div",dl,[e("div",ul,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=p=>_.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,_.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),_.value?(o(),n("div",pl,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=p=>A.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[j,A.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",gl,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=p=>A.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:T.value?"text":"password"},null,8,cl),[[ka,A.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=p=>T.value=!T.value)},[e("i",{class:$(T.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):m("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):m("",!0)]))}},yl={class:"space-y-6"},ml={key:0},xl={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},fl={class:"flex items-start gap-4"},bl={class:"flex-1"},vl={class:"mb-4"},kl={class:"flex gap-4"},hl={class:"flex cursor-pointer items-center gap-2"},wl={class:"flex cursor-pointer items-center gap-2"},$l={key:0,class:"space-y-4"},Al={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Cl={class:"mb-4"},Tl={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Il={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Ul={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},_l={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},Kl={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},Sl={class:"text-sm text-red-600 dark:text-red-400"},Ml=["disabled"],Dl={key:0,class:"loading-spinner mr-2"},Pl={key:1,class:"fas fa-magic mr-2"},jl={key:1},Vl={class:"space-y-4"},zl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ll={class:"flex items-start gap-3"},Rl={class:"flex-1"},Ol=["disabled"],El={key:0,class:"fas fa-link mr-2"},Nl={key:1,class:"loading-spinner mr-2"},ql={key:1,class:"space-y-3"},Wl={class:"flex items-center gap-2"},Bl=["value"],Gl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Fl={class:"flex items-start gap-3"},Ql={class:"flex-1"},Hl={class:"space-y-3"},Jl={key:1},Yl={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Zl={class:"flex items-start gap-4"},Xl={class:"flex-1"},eo={class:"mb-4"},to={class:"text-sm text-green-800 dark:text-green-300"},ao={class:"font-semibold"},ro={class:"space-y-4"},so={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},lo={class:"flex items-start gap-3"},oo={class:"flex-1"},no=["disabled"],io={key:0,class:"fas fa-link mr-2"},uo={key:1,class:"loading-spinner mr-2"},po={key:1,class:"space-y-3"},go={class:"flex items-center gap-2"},co=["value"],yo={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},mo={class:"flex items-start gap-3"},xo={class:"flex-1"},fo={class:"space-y-3"},bo={key:2},vo={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},ko={class:"flex items-start gap-4"},ho={class:"flex-1"},wo={class:"space-y-4"},$o={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ao={class:"flex items-start gap-3"},Co={class:"flex-1"},To=["disabled"],Io={key:0,class:"fas fa-link mr-2"},Uo={key:1,class:"loading-spinner mr-2"},_o={key:1,class:"space-y-3"},Ko={class:"flex items-center gap-2"},So=["value"],Mo={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Do={class:"flex items-start gap-3"},Po={class:"flex-1"},jo={class:"space-y-3"},Vo={key:3},zo={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Lo={class:"flex items-start gap-4"},Ro={class:"flex-1"},Oo={class:"space-y-4"},Eo={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},No={class:"flex items-start gap-3"},qo={class:"flex-1"},Wo=["disabled"],Bo={key:0,class:"fas fa-link mr-2"},Go={key:1,class:"loading-spinner mr-2"},Fo={key:1,class:"space-y-4"},Qo={class:"space-y-2"},Ho={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Jo={class:"flex items-center gap-2"},Yo=["value"],Zo={class:"space-y-2"},Xo={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},en={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},tn={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},an={class:"flex gap-3 pt-4"},rn=["disabled"],sn={key:0,class:"loading-spinner mr-2"},ln={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=Pr(),T=v(!1),k=v(!1),P=v(""),O=v(""),Y=v(!1),M=Z(()=>z.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),se=v(""),ge=v(""),N=v(""),E=v(""),R=v(0);let y=null;const p=v("manual"),D=v(""),de=v(!1),le=v(""),ae=v(!1),oe=v({current:0,total:0}),he=Z(()=>D.value.split(`
+`).map(xe=>xe.trim()).filter(xe=>xe.length>0).length),W=Z(()=>z.platform==="droid"?!!se.value:P.value&&O.value.trim()),Q=Z(()=>{if(!R.value||R.value<=0)return"00:00";const xe=Math.floor(R.value/60),g=R.value%60;return`${xe.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`}),H=xe=>{if(h(),!xe||xe<=0){R.value=0;return}R.value=Math.floor(xe),y=setInterval(()=>{R.value<=1?(R.value=0,h()):R.value-=1},1e3)},h=()=>{y&&(clearInterval(y),y=null)};ve(O,xe=>{if(z.platform==="droid"||!xe||typeof xe!="string")return;const g=xe.trim();if(!g)return;if(g.startsWith("http://")||g.startsWith("https://"))if(g.startsWith("http://localhost:45462")||g.startsWith("http://localhost:1455"))try{const re=new URL(g).searchParams.get("code");re?(O.value=re,V("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(U){console.error("Failed to parse URL:",U),V("链接格式错误,请检查是否为完整的 URL","error")}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"||z.platform==="openai")try{const re=new URL(g).searchParams.get("code");re&&(O.value=re,V("成功提取授权码!","success"))}catch{}else V("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const X=async()=>{var xe;h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",Y.value=!1,T.value=!0;try{const g=(xe=z.proxy)!=null&&xe.enabled?{proxy:{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}}:{};if(z.platform==="claude"){const a=await _.generateClaudeAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"){const a=await _.generateGeminiAuthUrl({...g,oauthProvider:M.value});P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="openai"){const a=await _.generateOpenAIAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="droid"){const a=await _.generateDroidAuthUrl(g);P.value=a.verificationUriComplete||a.verificationUri,N.value=a.verificationUri,E.value=a.verificationUriComplete||a.verificationUri,ge.value=a.userCode,H(a.expiresIn||300),se.value=a.sessionId}}catch(g){V(g.message||"生成授权链接失败","error")}finally{T.value=!1}},C=()=>{h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",X()},G=async()=>{if(!P.value){V("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(P.value),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}catch{const g=document.createElement("input");g.value=P.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}},K=async()=>{if(!ge.value){V("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(ge.value),V("验证码已复制","success")}catch{const g=document.createElement("input");g.value=ge.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),V("验证码已复制","success")}},Ce=()=>{E.value?window.open(E.value,"_blank","noopener"):N.value&&window.open(N.value,"_blank","noopener")},ze=async()=>{var xe;if(W.value){k.value=!0;try{let g={};z.platform==="claude"?g={sessionId:se.value,callbackUrl:O.value.trim()}:z.platform==="gemini"||z.platform==="gemini-antigravity"?g={code:O.value.trim(),sessionId:se.value,oauthProvider:M.value}:z.platform==="openai"?g={code:O.value.trim(),sessionId:se.value}:z.platform==="droid"&&(g={sessionId:se.value}),(xe=z.proxy)!=null&&xe.enabled&&(g.proxy={type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null});let a;if(z.platform==="claude")a=await _.exchangeClaudeCode(g);else if(z.platform==="gemini"||z.platform==="gemini-antigravity")a=await _.exchangeGeminiCode(g),a&&(a.oauthProvider=M.value);else if(z.platform==="openai")a=await _.exchangeOpenAICode(g);else if(z.platform==="droid"){const U=await _.exchangeDroidCode(g);if(!U.success){if(U.pending){const re=U.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";V(re,"info"),typeof U.expiresIn=="number"&&U.expiresIn>=0&&H(U.expiresIn);return}throw new Error(U.message||"授权失败,请重试")}a=U.data,h()}A("success",a)}catch(g){V(g.message||"授权失败,请检查授权码是否正确","error")}finally{k.value=!1}}};Fr(()=>{h()});const Ke=async()=>{var re;const xe=D.value.split(`
+`).map(ne=>ne.trim()).filter(ne=>ne.length>0);if(xe.length===0){le.value="请输入至少一个 sessionKey";return}de.value=!0,le.value="",oe.value={current:0,total:xe.length};const g=(re=z.proxy)!=null&&re.enabled?{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}:null,a=[],U=[];for(let ne=0;ne0?A("success",a):de.value=!1,U.length>0&&a.length===0?le.value="全部授权失败,请检查 sessionKey 是否有效":U.length>0&&(le.value=`${U.length} 个授权失败`)},Fe=()=>{D.value="",le.value="",de.value=!1,oe.value={current:0,total:0}},Qe=()=>{Fe(),P.value="",O.value="",se.value=""};return _e({resetCookieAuth:Fe}),(xe,g)=>(o(),n("div",yl,[F.platform==="claude"?(o(),n("div",ml,[e("div",xl,[e("div",fl,[g[29]||(g[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",bl,[g[28]||(g[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",vl,[g[10]||(g[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",kl,[e("label",hl,[b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:Qe},null,544),[[Ie,p.value]]),g[8]||(g[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",wl,[b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:Qe},null,544),[[Ie,p.value]]),g[9]||(g[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),p.value==="cookie"?(o(),n("div",$l,[e("div",Al,[g[17]||(g[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",Cl,[e("label",Tl,[g[12]||(g[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),g[13]||(g[13]=f(" sessionKey ",-1)),he.value>1?(o(),n("span",Il,u(he.value)+" 个 ",1)):m("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:g[2]||(g[2]=a=>ae.value=!ae.value)},g[11]||(g[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":g[3]||(g[3]=a=>D.value=a),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
+sk-ant-sid01-xxxxx...
+sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[j,D.value]]),he.value>1?(o(),n("p",Ul,[g[14]||(g[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(he.value)+" 个账户 ",1)])):m("",!0)]),ae.value?(o(),n("div",_l,g[15]||(g[15]=[Et('如何获取 sessionKey
- 在浏览器中登录 claude.ai
- 按 F12 打开开发者工具
- 切换到 Application(应用)标签页
- 在左侧找到 Cookies → https://claude.ai
- 找到键为 sessionKey 的那一行
- 复制其 Value(值)列的内容
sessionKey 通常以 sk-ant-sid01- 开头
',3)]))):m("",!0),le.value?(o(),n("div",Kl,[e("p",Sl,[g[16]||(g[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(le.value),1)])])):m("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:de.value||!D.value.trim(),type:"button",onClick:Ke},[de.value?(o(),n("div",Dl)):(o(),n("i",Pl)),de.value&&oe.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(oe.value.current)+"/"+u(oe.value.total)+"... ",1)],64)):de.value?(o(),n(ke,{key:3},[f(" 正在授权... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Ml)])])):(o(),n("div",jl,[g[27]||(g[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Vl,[e("div",zl,[e("div",Ll,[g[20]||(g[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Rl,[g[19]||(g[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",ql,[e("div",Wl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Bl),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:C},g[18]||(g[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Nl)):(o(),n("i",El)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Ol))])])]),g[26]||(g[26]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Gl,[e("div",Fl,[g[25]||(g[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ql,[g[23]||(g[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),g[24]||(g[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[f(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),f(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Hl,[e("div",null,[g[21]||(g[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[4]||(g[4]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[22]||(g[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):F.platform==="gemini"||F.platform==="gemini-antigravity"?(o(),n("div",Jl,[e("div",Yl,[e("div",Zl,[g[43]||(g[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Xl,[g[41]||(g[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),g[42]||(g[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",eo,[e("p",to,[g[30]||(g[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),g[31]||(g[31]=f(" 授权类型:",-1)),e("span",ao,u(F.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",ro,[e("div",so,[e("div",lo,[g[34]||(g[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",oo,[g[33]||(g[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",po,[e("div",go,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,co),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:C},g[32]||(g[32]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",uo)):(o(),n("i",io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,no))])])]),g[40]||(g[40]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",yo,[e("div",mo,[g[39]||(g[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",xo,[g[37]||(g[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),g[38]||(g[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",fo,[e("div",null,[g[35]||(g[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[5]||(g[5]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[36]||(g[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),f(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):F.platform==="openai"?(o(),n("div",bo,[e("div",vo,[e("div",ko,[g[55]||(g[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ho,[g[53]||(g[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),g[54]||(g[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",wo,[e("div",$o,[e("div",Ao,[g[46]||(g[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Co,[g[45]||(g[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",_o,[e("div",Ko,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,So),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:C},g[44]||(g[44]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Uo)):(o(),n("i",Io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,To))])])]),g[52]||(g[52]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Mo,[e("div",Do,[g[51]||(g[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Po,[g[49]||(g[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),g[50]||(g[50]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[f(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),f(" 时: ")],-1)),e("div",jo,[e("div",null,[g[47]||(g[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),f("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
+方式2:仅复制 code 参数的值
+系统会自动识别并提取所需信息`,rows:"3"},null,512),[[j,O.value]])]),g[48]||(g[48]=Et('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):F.platform==="droid"?(o(),n("div",Vo,[e("div",zo,[e("div",Lo,[g[67]||(g[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Ro,[g[65]||(g[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),g[66]||(g[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Oo,[e("div",Eo,[e("div",No,[g[63]||(g[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",qo,[g[62]||(g[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",Fo,[e("div",Qo,[g[58]||(g[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Ho,[e("div",Jo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Yo),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Ce},g[56]||(g[56]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),f(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:C},g[57]||(g[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),f("重新生成 ",-1)]))])])]),e("div",Zo,[g[60]||(g[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Xo,[e("span",en,u(ge.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:K},g[59]||(g[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),f("复制 ",-1)]))])]),e("div",tn,[e("span",null,[g[61]||(g[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),f(" 剩余有效期:"+u(Q.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Go)):(o(),n("i",Bo)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Wo))])])]),g[64]||(g[64]=Et(' 2
在浏览器中打开链接并完成授权
在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。
3
完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。
若提示授权仍在等待确认,请稍候片刻后系统会自动重试。
',2))])])])])])):m("",!0),e("div",an,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[7]||(g[7]=a=>xe.$emit("back"))}," 上一步 "),F.platform==="claude"&&p.value==="cookie"?m("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!W.value||k.value,type:"button",onClick:ze},[k.value?(o(),n("div",sn)):m("",!0),f(" "+u(k.value?"验证中...":"完成授权"),1)],8,rn))])]))}},on={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},nn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},dn={class:"mb-4 flex items-center justify-between sm:mb-6"},un={class:"mb-4 flex flex-wrap gap-2"},pn=["onClick"],gn={class:"ml-1 text-xs opacity-70"},cn={class:"space-y-4"},yn={key:0,class:"py-8 text-center"},mn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},xn={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},fn={class:"mb-3 flex items-start justify-between"},bn={class:"flex-1"},vn={class:"font-semibold text-gray-900"},kn={class:"mt-1 text-sm text-gray-500"},hn={class:"ml-4 flex items-center gap-2"},wn={class:"flex items-center justify-between text-sm text-gray-600"},$n={class:"flex items-center gap-4"},An={class:"flex items-center gap-2"},Cn=["onClick"],Tn=["disabled","onClick"],In={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Un={class:"modal-content w-full max-w-lg p-4 sm:p-6"},_n={class:"space-y-4"},Kn={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Sn={class:"flex gap-3 pt-4"},Mn=["disabled"],Dn={key:0,class:"loading-spinner mr-2"},Pn={key:2,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},jn={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Vn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},Ln={class:"flex cursor-pointer items-center"},Rn={class:"flex cursor-pointer items-center"},On={class:"flex cursor-pointer items-center"},En={class:"flex cursor-pointer items-center"},Nn={class:"flex gap-3 pt-4"},qn=["disabled"],Wn={key:0,class:"loading-spinner mr-2"},jr={__name:"GroupManagementModal",emits:["close","refresh"],setup(F,{emit:_e}){const c=_e,z=v(!0),A=v(!1),_=v([]),T=v("all"),k=[{key:"all",label:"全部",color:"gray"},{key:"claude",label:"Claude",color:"purple"},{key:"gemini",label:"Gemini",color:"blue"},{key:"openai",label:"OpenAI",color:"gray"},{key:"droid",label:"Droid",color:"cyan"}],P=Z(()=>{const X={all:_.value.length};return k.slice(1).forEach(C=>{X[C.key]=_.value.filter(G=>G.platform===C.key).length}),X}),O=Z(()=>T.value==="all"?_.value:_.value.filter(X=>X.platform===T.value)),Y=v(!1),M=v(null),se=v(!1),ge=v(!1),N=v({name:"",platform:"claude",description:""}),E=v(!1),R=v(!1),y=v(null),p=v({name:"",platform:"",description:""}),D=async()=>{A.value=!0;try{const X=await sr();_.value=X.data||[]}catch{V("加载分组列表失败","error")}finally{A.value=!1}},de=async()=>{var X,C;if(!N.value.name||!N.value.platform){V("请填写必填项","error");return}ge.value=!0;try{await _s({name:N.value.name,platform:N.value.platform,description:N.value.description}),V("分组创建成功","success"),ae(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"创建分组失败","error")}finally{ge.value=!1}},le=()=>{N.value.platform=T.value!=="all"?T.value:"claude",se.value=!0},ae=()=>{se.value=!1,N.value={name:"",platform:"claude",description:""}},oe=X=>{y.value=X,p.value={name:X.name,platform:X.platform,description:X.description||""},E.value=!0},he=async()=>{var X,C;if(!p.value.name){V("请填写分组名称","error");return}R.value=!0;try{await Us(y.value.id,{name:p.value.name,description:p.value.description}),V("分组更新成功","success"),W(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"更新分组失败","error")}finally{R.value=!1}},W=()=>{E.value=!1,y.value=null,p.value={name:"",platform:"",description:""}},Q=X=>{if(X.memberCount>0){V("分组内还有成员,无法删除","error");return}M.value=X,Y.value=!0},H=async()=>{var X,C;if(M.value)try{await Ks(M.value.id),V("分组删除成功","success"),h(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"删除分组失败","error")}},h=()=>{Y.value=!1,M.value=null};return ra(()=>{D()}),(X,C)=>{var G;return o(),Xe(Mt,{to:"body"},[z.value?(o(),n("div",on,[e("div",nn,[e("div",dn,[C[10]||(C[10]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 账户分组管理 ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:C[0]||(C[0]=K=>X.$emit("close"))},C[9]||(C[9]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",un,[(o(),n(ke,null,Ne(k,K=>e("button",{key:K.key,class:$(["rounded-lg px-3 py-1.5 text-sm font-medium transition-all",T.value===K.key?K.key==="claude"?"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300":K.key==="gemini"?"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300":K.key==="droid"?"bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-200":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700"]),onClick:Ce=>T.value=K.key},[f(u(K.label)+" ",1),e("span",gn,"("+u(P.value[K.key])+")",1)],10,pn)),64))]),e("div",{class:"mb-6"},[e("button",{class:"btn btn-primary px-4 py-2",onClick:le},C[11]||(C[11]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 创建新分组 ",-1)]))]),e("div",cn,[A.value?(o(),n("div",yn,C[12]||(C[12]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):O.value.length===0?(o(),n("div",mn,C[13]||(C[13]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无分组",-1)]))):(o(),n("div",xn,[(o(!0),n(ke,null,Ne(O.value,K=>(o(),n("div",{key:K.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",fn,[e("div",bn,[e("h4",vn,u(K.name),1),e("p",kn,u(K.description||"暂无描述"),1)]),e("div",hn,[e("span",{class:$(["rounded-full px-2 py-1 text-xs font-medium",K.platform==="claude"?"bg-purple-100 text-purple-700":K.platform==="gemini"?"bg-blue-100 text-blue-700":K.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(K.platform==="claude"?"Claude":K.platform==="gemini"?"Gemini":K.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",wn,[e("div",$n,[e("span",null,[C[14]||(C[14]=e("i",{class:"fas fa-users mr-1"},null,-1)),f(" "+u(K.memberCount||0)+" 个成员 ",1)]),e("span",null,[C[15]||(C[15]=e("i",{class:"fas fa-clock mr-1"},null,-1)),f(" "+u(Ye(Is)(K.createdAt)),1)])]),e("div",An,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:Ce=>oe(K)},C[16]||(C[16]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Cn),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:K.memberCount>0,title:"删除",onClick:Ce=>Q(K)},C[17]||(C[17]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Tn)])])]))),128))]))])])])):m("",!0),E.value?(o(),n("div",In,[e("div",Un,[e("div",{class:"mb-4 flex items-center justify-between"},[C[19]||(C[19]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:W},C[18]||(C[18]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",_n,[e("div",null,[C[20]||(C[20]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[1]||(C[1]=K=>p.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,p.value.name]])]),e("div",null,[C[22]||(C[22]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Kn,[f(u(p.value.platform==="claude"?"Claude":p.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),C[21]||(C[21]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[C[23]||(C[23]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[2]||(C[2]=K=>p.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,p.value.description]])]),e("div",Sn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!p.value.name||R.value,onClick:he},[R.value?(o(),n("div",Dn)):m("",!0),f(" "+u(R.value?"更新中...":"更新"),1)],8,Mn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:W},"取消")])])])])):m("",!0),se.value?(o(),n("div",Pn,[e("div",jn,[e("div",{class:"mb-4 flex items-center justify-between"},[C[25]||(C[25]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建新分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:ae},C[24]||(C[24]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Vn,[e("div",null,[C[26]||(C[26]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[3]||(C[3]=K=>N.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,N.value.name]])]),e("div",null,[C[31]||(C[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"平台类型 *",-1)),e("div",zn,[e("label",Ln,[b(e("input",{"onUpdate:modelValue":C[4]||(C[4]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,N.value.platform]]),C[27]||(C[27]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Rn,[b(e("input",{"onUpdate:modelValue":C[5]||(C[5]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,N.value.platform]]),C[28]||(C[28]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",On,[b(e("input",{"onUpdate:modelValue":C[6]||(C[6]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,N.value.platform]]),C[29]||(C[29]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",En,[b(e("input",{"onUpdate:modelValue":C[7]||(C[7]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,N.value.platform]]),C[30]||(C[30]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])])]),e("div",null,[C[32]||(C[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[8]||(C[8]=K=>N.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,N.value.description]])]),e("div",Nn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!N.value.name||!N.value.platform||ge.value,onClick:de},[ge.value?(o(),n("div",Wn)):m("",!0),f(" "+u(ge.value?"创建中...":"创建"),1)],8,qn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:ae},"取消")])])])])):m("",!0),Ve(Ja,{"cancel-text":"取消","confirm-text":"确认删除",message:`确定要删除分组 "${(G=M.value)==null?void 0:G.name}" 吗?此操作不可撤销。`,show:Y.value,title:"确认删除",type:"danger",onCancel:h,onConfirm:H},null,8,["message","show"])])}}},Bn={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Gn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},Fn={class:"mb-4 flex items-center justify-between sm:mb-6"},Qn={class:"flex items-center gap-2 sm:gap-3"},Hn={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Jn={class:"flex items-center gap-2"},Yn=["disabled"],Zn={key:0,class:"py-8 text-center"},Xn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},ei={key:2},ti={class:"mb-4 space-y-3"},ai={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},ri={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},si={class:"flex items-center gap-2"},li={class:"flex gap-1"},oi={class:"flex flex-1 items-center gap-2 lg:max-w-md"},ni={class:"relative flex-1"},ii={class:"flex gap-1"},di={class:"flex flex-wrap items-center justify-between gap-2"},ui={class:"flex flex-wrap items-center gap-2"},pi=["disabled"],gi=["disabled"],ci=["disabled"],yi=["disabled"],mi={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},xi={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},fi={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},bi={key:0,class:"absolute -left-2 -top-2 z-10"},vi=["title"],ki={class:"flex flex-col gap-3"},hi={class:"flex items-start justify-between gap-2"},wi=["title"],$i={class:"flex items-center gap-1"},Ai=["onClick"],Ci=["disabled","onClick"],Ti={key:0,class:"loading-spinner-sm"},Ii={key:1,class:"fas fa-redo"},Ui=["disabled","onClick"],_i={key:0,class:"loading-spinner-sm"},Ki={key:1,class:"fas fa-trash"},Si={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Mi={key:0},Di={key:0,class:"mt-4 flex items-center justify-between"},Pi={class:"text-sm text-gray-600 dark:text-gray-400"},ji={class:"flex items-center gap-2"},Vi=["disabled"],zi=["disabled"],Li={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},Ri=["disabled"],Oi=["disabled"],Ei={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=v(!1),T=v(null),k=v(null),P=v([]),O=v(1),Y=v(15),M=v(!1),se=v("all"),ge=v(""),N=v("fuzzy"),E=v(!1),R=v(!1),y=v({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),p=v(null),D=(g,a,U="确认",re="取消",ne="primary")=>new Promise(Re=>{y.value={title:g,message:a,confirmText:U,cancelText:re,type:ne},p.value=Re,R.value=!0}),de=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!0)},le=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!1)},ae=g=>!g||g.length<12?g:`${g.substring(0,8)}...${g.substring(g.length-4)}`,oe=Z(()=>{let g=P.value;if(se.value!=="all"&&(g=g.filter(a=>a.status===se.value)),ge.value.trim()){const a=ge.value.trim();g=g.filter(U=>{const re=U.key;return N.value==="exact"?re===a:re.toLowerCase().includes(a.toLowerCase())})}return g}),he=Z(()=>oe.value.length),W=Z(()=>Math.ceil(he.value/Y.value)),Q=Z(()=>{const g=(O.value-1)*Y.value,a=g+Y.value;return oe.value.slice(g,a)}),H=Z(()=>P.value.filter(g=>g.status==="active").length),h=Z(()=>P.value.filter(g=>g.status==="error").length),X=async()=>{_.value=!0;try{const a=(await Ss(c.accountId)).data;let U=[];if(Array.isArray(a.apiKeys))U=a.apiKeys;else if(typeof a.apiKeys=="string")try{U=JSON.parse(a.apiKeys)}catch(ne){console.error("Failed to parse apiKeys:",ne)}const re=U.map(ne=>typeof ne=="string"?{key:ne,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ne=="object"&&ne!==null?{key:ne.key||ne.apiKey||"",usageCount:ne.usageCount||ne.count||0,status:ne.status||"active",lastUsedAt:ne.lastUsedAt||ne.lastUsed||null,errorMessage:ne.errorMessage||""}:{key:String(ne),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});P.value=re.sort((ne,Re)=>ne.lastUsedAt&&Re.lastUsedAt?new Date(Re.lastUsedAt)-new Date(ne.lastUsedAt):ne.lastUsedAt&&!Re.lastUsedAt?-1:!ne.lastUsedAt&&Re.lastUsedAt?1:(Re.usageCount||0)-(ne.usageCount||0))}catch(g){console.error("Failed to load API keys:",g),V("加载 API Key 失败","error")}finally{_.value=!1,O.value=1}},C=async g=>{var a,U;if(await D("删除 API Key",`确定要删除 API Key "${ae(g.key)}" 吗?`,"删除","取消","danger")){T.value=g.key;try{const re={removeApiKeys:[g.key],apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V("API Key 已删除","success"),await X(),z("refresh")}catch(re){console.error("Failed to delete API key:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"删除 API Key 失败","error")}finally{T.value=null}}},G=async g=>{var a,U;if(await D("重置状态",`确定要重置 API Key "${ae(g.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`,"重置","取消","warning")){k.value=g.key;try{const re={apiKeys:[{key:g.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await ha(c.accountId,re),V("API Key 状态已重置","success"),await X(),z("refresh")}catch(re){console.error("Failed to reset API key status:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"重置 API Key 状态失败","error")}finally{k.value=null}}},K=async()=>{var a,U;const g=P.value.filter(re=>re.status==="error");if(g.length===0){V("没有异常状态的 API Key","warning");return}if(await D("删除异常 API Key",`确定要删除所有 ${g.length} 个异常状态的 API Key 吗?此操作不可恢复!`,"删除","取消","danger")){E.value=!0;try{const ne={removeApiKeys:g.map(Re=>Re.key),apiKeyUpdateMode:"delete"};await ha(c.accountId,ne),V(`成功删除 ${g.length} 个异常 API Key`,"success"),await X(),z("refresh")}catch(re){console.error("Failed to delete error API keys:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"批量删除失败","error")}finally{E.value=!1}}},Ce=async()=>{var g,a;if(P.value.length===0){V("没有可删除的 API Key","warning");return}if(await D("删除全部 API Key",`确定要删除所有 ${P.value.length} 个 API Key 吗?此操作不可恢复!
+
+请再次确认:这将删除该账户下的所有 API Key。`,"删除","取消","danger")&&await D("最后确认","真的要删除所有 API Key 吗?","确认删除","取消","danger")){E.value=!0;try{const U=P.value.map(ne=>ne.key),re={removeApiKeys:U,apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V(`成功删除所有 ${U.length} 个 API Key`,"success"),await X(),z("refresh")}catch(U){console.error("Failed to delete all API keys:",U),V(((a=(g=U.response)==null?void 0:g.data)==null?void 0:a.error)||"批量删除失败","error")}finally{E.value=!1}}},ze=g=>{let a=[],U="";if(g==="error"?(a=P.value.filter(st=>st.status==="error"),U=`error_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(a=P.value,U=`all_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`),a.length===0){V("没有可导出的 API Key","warning");return}const re=a.map(st=>st.key).join(`
+`),ne=new Blob([re],{type:"text/plain;charset=utf-8"}),Re=URL.createObjectURL(ne),Oe=document.createElement("a");Oe.href=Re,Oe.download=U,document.body.appendChild(Oe),Oe.click(),document.body.removeChild(Oe),URL.revokeObjectURL(Re),V(`成功导出 ${a.length} 个 API Key`,"success")},Ke=async g=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(g);return}if(typeof document>"u")throw new Error("clipboard unavailable");const U=document.createElement("textarea");U.value=g,U.setAttribute("readonly",""),U.style.position="fixed",U.style.opacity="0",U.style.pointerEvents="none",document.body.appendChild(U),U.select();try{const re=document.execCommand("copy");if(document.body.removeChild(U),!re)throw new Error("execCommand failed")}catch(re){throw document.body.removeChild(U),re}},Fe=async g=>{try{await Ke(g),V("API Key 已复制","success")}catch(a){console.error("Failed to copy:",a),V("复制失败,请手动复制","error")}},Qe=async()=>{if(!(!P.value.length||M.value)){M.value=!0;try{const g=P.value.map(a=>a.key).join(`
+`);await Ke(g),V(`已复制 ${P.value.length} 条 API Key`,"success")}catch(g){console.error("Failed to copy all keys:",g),V("复制全部 API Key 失败,请手动复制","error")}finally{M.value=!1}}},xe=g=>{if(!g)return"-";try{return new Date(g).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return ra(()=>{X()}),(g,a)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",Bn,[e("div",Gn,[e("div",Fn,[e("div",Qn,[a[14]||(a[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[a[13]||(a[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",Hn,u(F.accountName),1)])]),e("div",Jn,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:_.value||P.value.length===0||M.value,onClick:Qe},[e("i",{class:$(["text-sm sm:text-base",M.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),a[15]||(a[15]=e("span",null,"复制全部 Key",-1))],8,Yn),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:a[0]||(a[0]=U=>g.$emit("close"))},a[16]||(a[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),_.value?(o(),n("div",Zn,a[17]||(a[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):m("",!0),!_.value&&P.value.length===0?(o(),n("div",Xn,a[18]||(a[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):m("",!0),!_.value&&P.value.length>0?(o(),n("div",ei,[e("div",ti,[e("div",ai,[e("div",ri,[e("div",si,[a[21]||(a[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),a[22]||(a[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",li,[e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[1]||(a[1]=U=>se.value="all")}," 全部 ("+u(P.value.length)+") ",3),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[2]||(a[2]=U=>se.value="active")},[a[19]||(a[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),f(" 正常 ("+u(H.value)+") ",1)],2),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[3]||(a[3]=U=>se.value="error")},[a[20]||(a[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),f(" 异常 ("+u(h.value)+") ",1)],2)])]),e("div",oi,[e("div",ni,[b(e("input",{"onUpdate:modelValue":a[4]||(a[4]=U=>ge.value=U),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[j,ge.value]]),a[23]||(a[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",ii,[e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:a[5]||(a[5]=U=>N.value="fuzzy")},a[24]||(a[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),f(" 模糊 ",-1)]),2),e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:a[6]||(a[6]=U=>N.value="exact")},a[25]||(a[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),f(" 精确 ",-1)]),2)])])]),a[35]||(a[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",di,[e("div",ui,[a[30]||(a[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0||E.value,title:"删除所有异常状态的 API Key",onClick:K},a[26]||(a[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),f(" 删除异常 ",-1)]),8,pi),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0||E.value,title:"删除所有 API Key",onClick:Ce},a[27]||(a[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),f(" 删除全部 ",-1)]),8,gi),a[31]||(a[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0,title:"导出所有异常状态的 API Key",onClick:a[7]||(a[7]=U=>ze("error"))},a[28]||(a[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),f(" 导出异常 ",-1)]),8,ci),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0,title:"导出所有 API Key",onClick:a[8]||(a[8]=U=>ze("all"))},a[29]||(a[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),f(" 导出全部 ",-1)]),8,yi)]),e("div",mi,[a[34]||(a[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",xi,[a[32]||(a[32]=f(" 显示 ",-1)),e("strong",null,u(oe.value.length),1),a[33]||(a[33]=f(" 个 ",-1))])])])])]),e("div",fi,[(o(!0),n(ke,null,Ne(Q.value,(U,re)=>(o(),n("div",{key:re,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(U.status==="error"||U.status==="disabled")&&U.errorMessage?(o(),n("div",bi,[e("span",{class:$(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[U.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${U.errorMessage}`},u(U.errorMessage),11,vi)])):m("",!0),e("div",ki,[e("div",hi,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:U.key},u(ae(U.key)),9,wi),e("div",$i,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:ne=>Fe(U.key)},a[36]||(a[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,Ai),U.status==="error"||U.status==="disabled"?(o(),n("button",{key:0,class:$(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[U.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:k.value===U.key,title:"重置状态",onClick:ne=>G(U)},[k.value===U.key?(o(),n("div",Ti)):(o(),n("i",Ii))],10,Ci)):m("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:T.value===U.key,onClick:ne=>C(U)},[T.value===U.key?(o(),n("div",_i)):(o(),n("i",Ki))],8,Ui)])]),e("div",Si,[e("div",null,[e("span",{class:$([U.status==="active"?"text-green-600 dark:text-green-400":U.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:$(["mr-1",[U.status==="active"?"fas fa-check-circle":U.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),f(" "+u(U.status==="active"?"正常":U.status==="error"?"异常":U.status==="disabled"?"禁用":U.status||"未知"),1)],2)]),e("div",null,[e("span",null,[a[37]||(a[37]=f("使用: ",-1)),e("strong",null,u(U.usageCount||0),1),a[38]||(a[38]=f("次",-1))])]),U.lastUsedAt?(o(),n("div",Mi,[e("span",null,u(xe(U.lastUsedAt)),1)])):m("",!0)])])]))),128))]),W.value>1?(o(),n("div",Di,[e("div",Pi," 显示 "+u((O.value-1)*Y.value+1)+"-"+u(Math.min(O.value*Y.value,he.value))+" 项,共 "+u(he.value)+" 项 ",1),e("div",ji,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[9]||(a[9]=U=>O.value=1)},a[39]||(a[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Vi),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[10]||(a[10]=U=>O.value--)},a[40]||(a[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,zi),e("span",Li,u(O.value)+" / "+u(W.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[11]||(a[11]=U=>O.value++)},a[41]||(a[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,Ri),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[12]||(a[12]=U=>O.value=W.value)},a[42]||(a[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,Oi)])])):m("",!0)])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":y.value.cancelText,"confirm-text":y.value.confirmText,message:y.value.message,show:R.value,title:y.value.title,type:y.value.type,onCancel:le,onConfirm:de},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Ni={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},qi={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},Wi={class:"mb-4 flex items-center justify-between sm:mb-6"},Bi={class:"flex items-center gap-2 sm:gap-3"},Gi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Fi={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Qi={class:"flex items-center space-x-2 sm:space-x-4"},Hi={class:"flex items-center"},Ji={class:"flex items-center"},Yi={key:1},Zi={class:"space-y-6"},Xi={key:0},ed={class:"space-y-3"},td={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},ad={class:"p-3"},rd={class:"flex items-center justify-between"},sd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},ld={class:"p-3"},od={class:"flex items-center justify-between"},nd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},id={class:"p-3"},dd={class:"flex items-center justify-between"},ud={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},pd={class:"p-3"},gd={class:"flex items-center justify-between"},cd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},yd={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},md={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},xd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},fd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},bd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},vd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},kd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},hd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},wd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},$d={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Ad={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},Cd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},Td={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Id={key:1},Ud={class:"flex flex-wrap gap-4"},_d={class:"flex cursor-pointer items-center"},Kd={class:"text-sm text-gray-700 dark:text-gray-300"},Sd={key:0},Md={key:0,class:"flex cursor-pointer items-center"},Dd={class:"flex cursor-pointer items-center"},Pd={key:1,class:"flex cursor-pointer items-center"},jd={key:0,class:"mt-1 text-xs text-red-500"},Vd={class:"flex gap-4"},zd={class:"flex cursor-pointer items-center"},Ld={class:"flex cursor-pointer items-center"},Rd={class:"flex cursor-pointer items-center"},Od={key:2},Ed={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Nd={key:0,class:"mt-3"},qd=["min"],Wd={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Bd={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Gd={key:3},Fd={class:"flex gap-2"},Qd={class:"flex-1"},Hd={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Jd={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Yd=["value"],Zd={class:"text-sm text-gray-700 dark:text-gray-200"},Xd={key:4},e0={key:5,class:"space-y-4"},t0={key:0,class:"flex gap-4"},a0={class:"flex cursor-pointer items-center"},r0={class:"flex cursor-pointer items-center"},s0={key:1,class:"flex gap-4"},l0={class:"flex items-center opacity-60"},o0={class:"flex items-center opacity-60"},n0={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},i0={class:"flex items-start gap-2"},d0={class:"text-xs text-blue-700 dark:text-blue-300"},u0={key:0,class:"font-medium"},p0={key:1,class:"font-medium"},g0={key:2,class:"mt-1 text-xs italic"},c0={key:0},y0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},m0=["placeholder","required"],x0={key:0,class:"mt-1 text-xs text-red-500"},f0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},b0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},v0=["placeholder","required"],k0={key:0,class:"mt-1 text-xs text-red-500"},h0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},w0=["placeholder"],$0={key:1},A0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},C0=["placeholder","required"],T0={key:0,class:"mt-1 text-xs text-red-500"},I0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},U0={key:0,class:"mt-1 text-xs text-red-500"},_0={key:6,class:"space-y-4"},K0={key:0,class:"mt-1 text-xs text-red-500"},S0={key:0,class:"mt-1 text-xs text-red-500"},M0={key:0,class:"mt-1 text-xs text-red-500"},D0={class:"flex flex-wrap gap-2"},P0=["value"],j0={class:"text-sm text-gray-700 dark:text-gray-300"},V0={key:7},z0={class:"mb-3"},L0={class:"inline-flex cursor-pointer items-center"},R0={key:0},O0={key:8,class:"space-y-4"},E0={key:0,class:"mt-1 text-xs text-red-500"},N0={key:0,class:"mt-1 text-xs text-red-500"},q0={class:"grid grid-cols-2 gap-4"},W0={class:"mb-4 flex gap-2"},B0={key:0},G0={class:"mb-3 grid grid-cols-2 gap-2"},F0=["value"],Q0={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},H0={class:"text-xs text-gray-500 dark:text-gray-400"},J0={key:0},Y0={key:1},Z0={class:"mb-3 space-y-2"},X0=["onUpdate:modelValue"],eu=["onUpdate:modelValue"],tu=["onClick"],au={class:"mt-3 flex flex-wrap gap-2"},ru={class:"mb-3"},su={class:"inline-flex cursor-pointer items-center"},lu={key:0},ou={key:0},nu={class:"inline-flex cursor-pointer items-center"},iu={key:9,class:"space-y-4"},du={class:"relative"},uu=["type"],pu={key:10,class:"space-y-4"},gu={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},cu={class:"relative"},yu=["type"],mu={key:11},xu={class:"flex gap-4"},fu={class:"flex cursor-pointer items-center"},bu={class:"flex cursor-pointer items-center"},vu={key:12,class:"mt-4"},ku={class:"flex items-start"},hu={key:13,class:"mt-4"},wu={class:"flex items-start"},$u={key:14,class:"mt-4"},Au={class:"flex items-start"},Cu={key:15,class:"mt-4"},Tu={class:"flex items-start"},Iu={class:"ml-3"},Uu={key:0,class:"mt-1"},_u={class:"flex items-center justify-between"},Ku={class:"text-xs text-green-600 dark:text-green-400"},Su=["disabled"],Mu={key:0,class:"fas fa-trash-alt mr-1"},Du={key:1,class:"loading-spinner mr-1"},Pu={key:1,class:"mt-1"},ju={key:16,class:"mt-4"},Vu={class:"flex items-start"},zu={class:"ml-3 flex-1"},Lu={key:0,class:"mt-3"},Ru={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ou={class:"flex items-center gap-2"},Eu={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Nu={class:"text-blue-600 dark:text-blue-400"},qu={class:"text-gray-500 dark:text-gray-500"},Wu={class:"text-blue-600 dark:text-blue-400"},Bu={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Gu={class:"mb-4 flex items-start gap-3"},Fu={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Qu={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Hu={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ju={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Yu={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},Zu={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Xu={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},ep={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},tp={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},ap={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},rp={key:5,class:"text-xs text-red-600 dark:text-red-400"},sp={key:0},lp={key:1},op={key:0,class:"mt-1 text-xs text-red-500"},np={key:2},ip={key:0,class:"mt-1 text-xs text-red-500"},dp={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},up={key:3},pp={key:4},gp={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},cp={key:0,class:"mt-1 text-xs text-red-500"},yp={class:"flex gap-3 pt-4"},mp=["disabled"],xp=["disabled"],fp={key:0,class:"loading-spinner mr-2"},bp={key:3,class:"space-y-6"},vp={key:0},kp={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},hp={class:"flex items-start gap-4"},wp={class:"flex-1"},$p={class:"mb-4"},Ap={class:"flex flex-wrap gap-4"},Cp={class:"flex cursor-pointer items-center"},Tp={class:"flex cursor-pointer items-center"},Ip={key:0,class:"space-y-4"},Up={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},_p={class:"flex items-start gap-3"},Kp={class:"flex-1"},Sp=["disabled"],Mp={key:0,class:"fas fa-link mr-2"},Dp={key:1,class:"loading-spinner mr-2"},Pp={key:1,class:"space-y-3"},jp={class:"flex items-center gap-2"},Vp=["value"],zp={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Lp={class:"flex items-start gap-3"},Rp={class:"flex-1"},Op={class:"space-y-3"},Ep={key:1,class:"space-y-4"},Np={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},qp={class:"space-y-4"},Wp={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Bp={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Gp={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Fp={key:1,class:"mt-1 text-xs text-red-500"},Qp={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Hp=["disabled"],Jp={key:0,class:"loading-spinner mr-2"},Yp={key:1,class:"fas fa-magic mr-2"},Zp={class:"flex gap-3 pt-4"},Xp=["disabled"],eg={key:0,class:"loading-spinner mr-2"},tg={key:4,class:"space-y-6"},ag={class:"flex gap-4"},rg={class:"flex cursor-pointer items-center"},sg={class:"flex cursor-pointer items-center"},lg={class:"flex cursor-pointer items-center"},og={key:0},ng={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},ig={key:0,class:"mt-3"},dg=["min"],ug={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},pg={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},gg={key:1},cg={class:"flex gap-2"},yg={class:"flex-1"},mg={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},xg={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},fg=["value"],bg={class:"text-sm text-gray-700 dark:text-gray-200"},vg={key:2},kg={key:3},hg={class:"flex gap-4"},wg={class:"flex cursor-pointer items-center"},$g={class:"flex cursor-pointer items-center"},Ag={key:4,class:"mt-4"},Cg={class:"flex items-start"},Tg={key:5,class:"mt-4"},Ig={class:"flex items-start"},Ug={key:6,class:"mt-4"},_g={class:"flex items-start"},Kg={key:7,class:"mt-4"},Sg={class:"flex items-start"},Mg={class:"ml-3"},Dg={key:0,class:"mt-1"},Pg={class:"flex items-center justify-between"},jg={class:"text-xs text-green-600 dark:text-green-400"},Vg=["disabled"],zg={key:0,class:"fas fa-trash-alt mr-1"},Lg={key:1,class:"loading-spinner mr-1"},Rg={key:1,class:"mt-1"},Og={key:8,class:"mt-4"},Eg={class:"flex items-start"},Ng={class:"ml-3 flex-1"},qg={key:0,class:"mt-3"},Wg={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Bg={class:"flex items-center gap-2"},Gg={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Fg={class:"text-blue-600 dark:text-blue-400"},Qg={class:"text-gray-500 dark:text-gray-500"},Hg={class:"text-blue-600 dark:text-blue-400"},Jg={key:9,class:"space-y-4"},Yg={class:"grid grid-cols-2 gap-4"},Zg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Xg={class:"mb-2 flex items-center justify-between"},ec={class:"text-sm text-gray-500 dark:text-gray-400"},tc={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ac={class:"mt-2 flex items-center justify-between text-xs"},rc={class:"text-gray-500 dark:text-gray-400"},sc={class:"text-gray-500 dark:text-gray-400"},lc={class:"mb-4 flex gap-2"},oc={key:0},nc={class:"mb-3 grid grid-cols-2 gap-2"},ic=["value"],dc={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},uc={class:"text-xs text-gray-500 dark:text-gray-400"},pc={key:0},gc={key:1},cc={class:"mb-3 space-y-2"},yc=["onUpdate:modelValue"],mc=["onUpdate:modelValue"],xc=["onClick"],fc={class:"mt-3 flex flex-wrap gap-2"},bc={class:"mb-3"},vc={class:"inline-flex cursor-pointer items-center"},kc={key:0},hc={key:1},wc={class:"inline-flex cursor-pointer items-center"},$c={key:10,class:"space-y-4"},Ac={class:"relative"},Cc=["type"],Tc={class:"grid grid-cols-2 gap-4"},Ic={key:11,class:"space-y-4"},Uc={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},_c={class:"relative"},Kc=["type"],Sc={key:12,class:"space-y-4"},Mc={class:"mb-3"},Dc={class:"inline-flex cursor-pointer items-center"},Pc={key:0},jc={key:13,class:"space-y-4"},Vc={key:0,class:"mt-1 text-xs text-red-500"},zc={key:0,class:"mt-1 text-xs text-red-500"},Lc={key:0,class:"mt-1 text-xs text-red-500"},Rc={class:"flex flex-wrap gap-2"},Oc=["value"],Ec={class:"text-sm text-gray-700 dark:text-gray-300"},Nc={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},qc={class:"mb-4 flex items-start gap-3"},Wc={class:"flex-1"},Bc={class:"mb-2 flex items-center justify-between"},Gc={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Fc={class:"space-y-4"},Qc={key:0,class:"mt-1 text-xs text-red-500"},Hc={class:"space-y-2"},Jc={class:"flex items-center justify-between"},Yc={class:"text-xs text-purple-600 dark:text-purple-300"},Zc={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Xc=["onClick"],ey={class:"text-xs text-purple-700 dark:text-purple-300"},ty={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},ay={class:"space-y-4"},ry={key:16},sy={class:"flex gap-3 pt-4"},ly=["disabled"],oy={key:0,class:"loading-spinner mr-2"},ny={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(F,{emit:_e}){var Qt,ia,_a,rt,Ka,Sa,da,Ma,lt,Da,Ht,Kt,Pa,ja,Va,ua,za,pa,La,Ra,Oa,ga,Jt,ca,ya,Ea,xt,ft,Na,ma,Yt,xa,qa,fa,Zt,Wa,ba,Xt;const c=F,z=_e,A=Pr(),_=v(!1),T=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let k=null;const P=(d,t,ie="继续",ye="取消")=>new Promise(i=>{T.value={title:d,message:t,confirmText:ie,cancelText:ye},k=i,_.value=!0}),O=()=>{_.value=!1,k==null||k(!0),k=null},Y=()=>{_.value=!1,k==null||k(!1),k=null},M=Z(()=>!!c.account),se=v(!0),ge=v(null),N=v(1),E=v(!1),R=v(!1),y=v(!1),p=v(!1),D=v(""),de=v(""),le=v(!1),ae=v(""),oe=v("manual"),he=v(""),W=v(!1),Q=v(""),H=v(!1),h=v({current:0,total:0}),X=Z(()=>he.value.split(`
+`).map(d=>d.trim()).filter(d=>d.length>0).length),C=v(""),G=v(!1),K=v(""),Ce=v(!1),ze=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",Ke=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),Fe=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ye=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",pe=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ye,username:pe,password:me}},Qe=d=>{const t=Fe(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:Ke()},xe=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ye=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ye||null,password:i||null}},g=()=>{var d;return Qe((d=c.account)==null?void 0:d.proxy)},a=v({platform:((Qt=c.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=c.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((ia=c.account)==null?void 0:ia.name)||"",description:((_a=c.account)==null?void 0:_a.description)||"",accountType:((rt=c.account)==null?void 0:rt.accountType)||"shared",authenticationMethod:((Ka=c.account)==null?void 0:Ka.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((Sa=c.account)==null?void 0:Sa.autoStopOnWarning)||!1,useUnifiedUserAgent:((da=c.account)==null?void 0:da.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ma=c.account)==null?void 0:Ma.useUnifiedClientId)||!1,unifiedClientId:((lt=c.account)==null?void 0:lt.unifiedClientId)||"",serialQueueEnabled:(((Da=c.account)==null?void 0:Da.maxConcurrency)||0)>0,interceptWarmup:((Ht=c.account)==null?void 0:Ht.interceptWarmup)===!0||((Kt=c.account)==null?void 0:Kt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Pa=c.account)==null?void 0:Pa.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:g(),apiUrl:((ja=c.account)==null?void 0:ja.apiUrl)||"",apiKey:((Va=c.account)==null?void 0:Va.apiKey)||"",priority:((ua=c.account)==null?void 0:ua.priority)||50,endpointType:((za=c.account)==null?void 0:za.endpointType)||"anthropic",baseApi:((pa=c.account)==null?void 0:pa.baseApi)||"",baseUrl:((La=c.account)==null?void 0:La.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((Ra=c.account)==null?void 0:Ra.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=c.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Oa=c.account)==null?void 0:Oa.userAgent)||"",enableRateLimit:c.account?c.account.rateLimitDuration>0:!0,disableAutoProtection:((ga=c.account)==null?void 0:ga.disableAutoProtection)===!0,dailyQuota:((Jt=c.account)==null?void 0:Jt.dailyQuota)||0,dailyUsage:((ca=c.account)==null?void 0:ca.dailyUsage)||0,quotaResetTime:((ya=c.account)==null?void 0:ya.quotaResetTime)||"00:00",maxConcurrentTasks:((Ea=c.account)==null?void 0:Ea.maxConcurrentTasks)||0,credentialType:((xt=c.account)==null?void 0:xt.credentialType)||"access_key",accessKeyId:((ft=c.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((Na=c.account)==null?void 0:Na.secretAccessKey)||"",region:((ma=c.account)==null?void 0:ma.region)||"",sessionToken:((Yt=c.account)==null?void 0:Yt.sessionToken)||"",bearerToken:((xa=c.account)==null?void 0:xa.bearerToken)||"",defaultModel:((qa=c.account)==null?void 0:qa.defaultModel)||"",smallFastModel:((fa=c.account)==null?void 0:fa.smallFastModel)||"",azureEndpoint:((Zt=c.account)==null?void 0:Zt.azureEndpoint)||"",apiVersion:((Wa=c.account)==null?void 0:Wa.apiVersion)||"",deploymentName:((ba=c.account)==null?void 0:ba.deploymentName)||"",expireDuration:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?new Date(c.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((Xt=c.account)==null?void 0:Xt.expiresAt)||null}),U=v("whitelist"),re=v(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),ne=v([]),Re=async()=>{var d;try{const t=await Ms();t.success&&((d=t.data)!=null&&d.all)&&(ne.value=t.data.all)}catch(t){console.error("Failed to load models:",t)}},Oe=v([]),st=()=>{var d;if((d=c.account)!=null&&d.supportedModels)if(typeof c.account.supportedModels=="object"&&!Array.isArray(c.account.supportedModels)){const t=Object.entries(c.account.supportedModels);t.every(([ye,i])=>ye===i)?(U.value="whitelist",re.value=t.map(([ye])=>ye),Oe.value=t.map(([ye,i])=>({from:ye,to:i}))):(U.value="mapping",Oe.value=t.map(([ye,i])=>({from:ye,to:i})))}else Array.isArray(c.account.supportedModels)&&(U.value="whitelist",re.value=c.account.supportedModels,Oe.value=c.account.supportedModels.map(t=>({from:t,to:t})))},nt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ye=>ye.trim()).filter(ye=>ye.length>0);return t.length===0?[]:Array.from(new Set(t))},at=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],Dt=Z(()=>{const d=Math.max(at.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/at.length;return{width:`${t}%`,left:`${d*t}%`}}),Pt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:at[0].label}),jt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:at[0].description}),I=v({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),Tt=Z(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),gt=Z(()=>D.value&&de.value.trim()),ht=()=>{var d;return!M.value||!((d=c.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=Z(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:ht()/a.value.dailyQuota*100),Vt=Z(()=>{if(!c.account||c.account.platform!=="droid")return 0;let d=0;if(Array.isArray(c.account.apiKeys))d=c.account.apiKeys.length;else if(typeof c.account.apiKeys=="string")try{const ie=JSON.parse(c.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=c.account.apiKeyCount??c.account.apiKeysCount??c.account.api_key_count??d;return Number(t)||0}),wt=Z(()=>{var t,ie,ye;if(!M.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=c.account)==null?void 0:t.authenticationMethod)||((ie=c.account)==null?void 0:ie.authMethod)||((ye=c.account)==null?void 0:ye.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),B=async()=>{var d;if(!(!M.value||!((d=c.account)!=null&&d.id)))try{const t=await Ps(c.account.id);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},q=d=>{K.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Ee=async()=>{if(I.value.name="",!Tt.value){(!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&N.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
+
+如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
+如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(N.value=2)},We=async()=>{y.value=!0;try{const d=xe(a.value.proxy),t=d?{proxy:d}:{},ie=await A.generateClaudeSetupTokenUrl(t);D.value=ie.authUrl,ae.value=ie.sessionId}catch(d){V(d.message||"生成Setup Token授权链接失败","error")}finally{y.value=!1}},ut=()=>{D.value="",de.value="",We()},Nt=async()=>{try{await navigator.clipboard.writeText(D.value),le.value=!0,V("链接已复制","success"),setTimeout(()=>{le.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=D.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(le.value=!0,V("链接已复制","success")):V("复制失败,请手动复制","error")}catch{V("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{le.value=!1},2e3)}},qt=async()=>{if(gt.value){p.value=!0;try{const d={sessionId:ae.value,callbackUrl:de.value.trim()},t=xe(a.value.proxy);t&&(d.proxy=t);const ie=await A.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),await it(ie)}catch(d){V(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{p.value=!1}}},$t=async()=>{const d=he.value.split(`
+`).map(pe=>pe.trim()).filter(pe=>pe.length>0);if(d.length===0){Q.value="请输入至少一个 sessionKey";return}W.value=!0,Q.value="",h.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=xe(a.value.proxy),ye=[],i=[];for(let pe=0;pe0)try{await it(ye)}finally{W.value=!1}else W.value=!1;i.length>0&&ye.length===0?Q.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Q.value=`${i.length} 个授权失败`)},zt=()=>{he.value="",Q.value="",H.value=!1,h.value={current:0,total:0}},Lt=()=>{oe.value==="manual"?zt():(D.value="",de.value="",ae.value="")},It=(d,t,ie)=>{var me,qe;const ye=xe(a.value.proxy),i=d.claudeAiOauth||d,pe={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ye,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const He={},Le=i.extInfo;Le!=null&&Le.org_uuid&&(He.org_uuid=Le.org_uuid),Le!=null&&Le.account_uuid&&(He.account_uuid=Le.account_uuid),Le||((me=i.organization)!=null&&me.uuid&&(He.org_uuid=i.organization.uuid),(qe=i.account)!=null&&qe.uuid&&(He.account_uuid=i.account.uuid)),Object.keys(He).length>0&&(pe.extInfo=He)}return pe},it=async d=>{var t,ie,ye,i,pe,me,qe,He,Le;E.value=!0;try{const S=a.value.platform;if(S==="claude"&&Array.isArray(d)){const Me=d,Pe=Me.length>1,Ue=a.value.name,et=[],tt=[];for(let bt=0;bt0){const bt=Pe?`成功创建 ${et.length}/${Me.length} 个账户`:"账户创建成功";V(bt,"success"),z("success",et[0])}tt.length>0&&V(`${tt.length} 个账户创建失败`,"error");return}const L=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt());const $e=xe(a.value.proxy),J={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:$e};if(S==="claude"){const Me=L.claudeAiOauth||L;if(J.claudeAiOauth=Me,Me){const Pe={},Ue=Me.extInfo;if(Ue&&typeof Ue=="object"&&(Ue.org_uuid&&(Pe.org_uuid=Ue.org_uuid),Ue.account_uuid&&(Pe.account_uuid=Ue.account_uuid)),!Ue){const et=(t=Me.organization)==null?void 0:t.uuid,tt=(ie=Me.account)==null?void 0:ie.uuid;et&&(Pe.org_uuid=et),tt&&(Pe.account_uuid=tt)}Object.keys(Pe).length>0&&(J.extInfo=Pe)}J.priority=a.value.priority||50,J.autoStopOnWarning=a.value.autoStopOnWarning||!1,J.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,J.useUnifiedClientId=a.value.useUnifiedClientId||!1,J.unifiedClientId=a.value.unifiedClientId||"",J.maxConcurrency=a.value.serialQueueEnabled?1:0,J.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(S==="gemini"||S==="gemini-antigravity")J.geminiOauth=L.tokens||L,J.oauthProvider=S==="gemini-antigravity"?"antigravity":L.oauthProvider||"gemini-cli",a.value.projectId&&(J.projectId=a.value.projectId),J.priority=a.value.priority||50;else if(S==="openai")J.openaiOauth=L.tokens||L,J.accountInfo=L.accountInfo,J.priority=a.value.priority||50;else if(S==="droid"){const Me=L.tokens||L||{},Pe={accessToken:Me.accessToken||Me.access_token||"",refreshToken:Me.refreshToken||Me.refresh_token||"",expiresAt:Me.expiresAt||Me.expires_at||"",expiresIn:Me.expiresIn||Me.expires_in||null,tokenType:Me.tokenType||Me.token_type||"Bearer",organizationId:Me.organizationId||Me.organization_id||"",authenticationMethod:Me.authenticationMethod||Me.authentication_method||""};if(!Pe.refreshToken){E.value=!1,V("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(J.refreshToken=Pe.refreshToken,J.accessToken=Pe.accessToken,J.expiresAt=Pe.expiresAt,Pe.expiresIn!==null&&Pe.expiresIn!==void 0&&(J.expiresIn=Pe.expiresIn),J.priority=a.value.priority||50,J.endpointType=a.value.endpointType||"anthropic",J.platform="droid",J.tokenType=Pe.tokenType,J.authenticationMethod=Pe.authenticationMethod,Pe.organizationId&&(J.organizationId=Pe.organizationId),Me.user){const Ue=Me.user,et=[];typeof Ue.first_name=="string"&&Ue.first_name.trim()&&et.push(Ue.first_name.trim()),typeof Ue.last_name=="string"&&Ue.last_name.trim()&&et.push(Ue.last_name.trim());const tt=et.join(" ").trim()||(typeof Ue.name=="string"?Ue.name.trim():"")||(typeof Ue.display_name=="string"?Ue.display_name.trim():"");typeof Ue.email=="string"&&Ue.email.trim()&&(J.ownerEmail=Ue.email.trim()),tt?(J.ownerName=tt,J.ownerDisplayName=tt):J.ownerEmail&&(J.ownerName=J.ownerName||J.ownerEmail,J.ownerDisplayName=J.ownerDisplayName||J.ownerEmail),typeof Ue.id=="string"&&Ue.id.trim()&&(J.userId=Ue.id.trim())}}let Se;S==="claude"?Se=await A.createClaudeAccount(J):S==="gemini"?Se=await A.createGeminiAccount(J):S==="openai"?Se=await A.createOpenAIAccount(J):S==="droid"?Se=await A.createDroidAccount(J):Se=await A.createGeminiAccount(J),z("success",Se)}catch(S){const L=((i=(ye=S.response)==null?void 0:ye.data)==null?void 0:i.error)||S.message||"账户创建失败",$e=((me=(pe=S.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",J=((He=(qe=S.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let Se=L;$e&&(Se+=`
+${$e}`),J&&J.error_description?Se+=`
+详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
+详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1,(Le=ge.value)==null||Le.resetCookieAuth()}},Ya=async()=>{var t,ie,ye,i,pe,me,qe,He;I.value.name="",I.value.accessToken="",I.value.refreshToken="",I.value.apiUrl="",I.value.apiKey="",I.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(I.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?M.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(I.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(I.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(M.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(I.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(I.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(I.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(I.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(I.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(I.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):nt(a.value.apiKeysInput).length===0&&(I.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(V("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){E.value=!0;try{const Le=xe(a.value.proxy),S={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Le};if(a.value.platform==="claude"){const $e=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),S.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+$e,scopes:[]},S.priority=a.value.priority||50,S.autoStopOnWarning=a.value.autoStopOnWarning||!1,S.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,S.useUnifiedClientId=a.value.useUnifiedClientId||!1,S.unifiedClientId=a.value.unifiedClientId||"",S.maxConcurrency=a.value.serialQueueEnabled?1:0,S.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const $e=a.value.refreshToken?6e5:31536e6;S.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+$e},a.value.projectId&&(S.projectId=a.value.projectId),S.priority=a.value.priority||50}else if(a.value.platform==="openai"){const $e=a.value.refreshToken?6e5:31536e6;S.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor($e/1e3)},S.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},S.needsImmediateRefresh=!0,S.requireRefreshSuccess=!0,S.priority=a.value.priority||50}else if(a.value.platform==="droid")if(S.priority=a.value.priority||50,S.endpointType=a.value.endpointType||"anthropic",S.platform="droid",a.value.addType==="apikey"){const $e=nt(a.value.apiKeysInput);S.apiKeys=$e,S.authenticationMethod="api_key",S.isActive=!0,S.schedulable=!0}else{const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();S.accessToken=$e,S.refreshToken=J,S.expiresAt=Se,S.expiresIn=8*60*60,S.tokenType="Bearer",S.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(S.apiUrl=a.value.apiUrl,S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=la()||{},S.userAgent=a.value.userAgent||null,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(S.disableAutoProtection=!!a.value.disableAutoProtection,S.interceptWarmup=!!a.value.interceptWarmup),S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00",S.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(S.baseApi=a.value.baseApi,S.apiKey=a.value.apiKey,S.userAgent=a.value.userAgent||"",S.priority=a.value.priority||50,S.rateLimitDuration=60,S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(S.oauthProvider="antigravity",S.priority=a.value.priority||50):a.value.platform==="gemini-api"?(S.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(S.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?S.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(S.bearerToken=a.value.bearerToken),S.region=a.value.region,S.defaultModel=a.value.defaultModel||null,S.smallFastModel=a.value.smallFastModel||null,S.priority=a.value.priority||50,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(S.azureEndpoint=a.value.azureEndpoint,S.apiKey=a.value.apiKey,S.apiVersion=a.value.apiVersion||"2024-02-01",S.deploymentName=a.value.deploymentName,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],S.priority=a.value.priority||50,S.isActive=a.value.isActive!==!1,S.schedulable=a.value.schedulable!==!1);let L;if(a.value.platform==="claude")L=await A.createClaudeAccount(S);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")L=await A.createClaudeConsoleAccount(S);else if(a.value.platform==="droid")L=await A.createDroidAccount(S);else if(a.value.platform==="openai-responses")L=await A.createOpenAIResponsesAccount(S);else if(a.value.platform==="bedrock")L=await A.createBedrockAccount(S);else if(a.value.platform==="openai")L=await A.createOpenAIAccount(S);else if(a.value.platform==="azure_openai")L=await A.createAzureOpenAIAccount(S);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")L=await A.createGeminiAccount(S);else if(a.value.platform==="gemini-api")L=await A.createGeminiApiAccount(S);else throw new Error(`不支持的平台: ${a.value.platform}`);z("success",L)}catch(Le){const S=((i=(ye=Le.response)==null?void 0:ye.data)==null?void 0:i.error)||Le.message||"账户创建失败",L=((me=(pe=Le.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",$e=((He=(qe=Le.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let J=S;L&&(J+=`
+${L}`),$e&&$e.error_description?J+=`
+详细信息: ${$e.error_description}`:$e&&$e.error&&$e.error.message&&(J+=`
+详细信息: ${$e.error.message}`),V(J,"error","",8e3)}finally{E.value=!1}}},At=async()=>{var d,t,ie,ye,i,pe,me,qe,He,Le;if(I.value.name="",I.value.apiKeys="",I.value.baseUrl="",!a.value.name||a.value.name.trim()===""){I.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const S=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!S){I.value.baseUrl="请填写 API 基础地址";return}if(!S.endsWith("/models")){I.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
+
+如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
+如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){E.value=!0;try{const S=xe(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:S};if(a.value.accessToken||a.value.refreshToken){const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(c.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;L.claudeAiOauth={accessToken:$e||"",refreshToken:J||"",expiresAt:Date.now()+Se,scopes:c.account.scopes||[]}}else if(c.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:$e||"",refresh_token:J||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(c.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:$e||"",refreshToken:J||"",expires_in:Math.floor(Se/1e3)},J&&J!==c.account.refreshToken&&(L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0)}else c.account.platform==="droid"&&($e&&(L.accessToken=$e),J&&(L.refreshToken=J))}if(c.account.platform==="droid"){const $e=((ye=a.value.apiKeysInput)==null?void 0:ye.trim())||"",J=a.value.apiKeyUpdateMode||"append";if(J==="delete"){if(!$e){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}const Se=nt($e);if(Se.length===0){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}L.removeApiKeys=Se,L.apiKeyUpdateMode="delete"}else{if($e){const Se=nt($e);if(Se.length===0){I.value.apiKeys="请至少填写一个 API Key",E.value=!1;return}L.apiKeys=Se}else J==="replace"&&(L.apiKeys=[]);(J!=="append"||$e)&&(L.apiKeyUpdateMode=J)}wt.value&&(L.authenticationMethod="api_key")}if(c.account.platform==="gemini"&&(L.projectId=a.value.projectId||""),c.account.platform==="droid"&&(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic"),c.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.interceptWarmup=a.value.interceptWarmup||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),c.account.platform==="openai"&&(L.priority=a.value.priority||50),c.account.platform==="gemini"&&(L.priority=a.value.priority||50),c.account.platform==="claude-console"&&(L.apiUrl=a.value.apiUrl,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=la()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0),c.account.platform==="openai-responses"&&(L.baseApi=a.value.baseApi,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"),c.account.platform==="bedrock"&&(a.value.credentialType&&(L.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(L.awsCredentials={},a.value.accessKeyId&&(L.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(L.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(L.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(L.bearerToken=a.value.bearerToken),a.value.region&&(L.region=a.value.region),L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),c.account.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey)),c.account.platform==="gemini-api"&&(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),c.account.platform==="claude")await A.updateClaudeAccount(c.account.id,L);else if(c.account.platform==="claude-console")await A.updateClaudeConsoleAccount(c.account.id,L);else if(c.account.platform==="openai-responses")await A.updateOpenAIResponsesAccount(c.account.id,L);else if(c.account.platform==="bedrock")await A.updateBedrockAccount(c.account.id,L);else if(c.account.platform==="openai")await A.updateOpenAIAccount(c.account.id,L);else if(c.account.platform==="azure_openai")await A.updateAzureOpenAIAccount(c.account.id,L);else if(c.account.platform==="gemini")await A.updateGeminiAccount(c.account.id,L);else if(c.account.platform==="gemini-api")await A.updateGeminiApiAccount(c.account.id,L);else if(c.account.platform==="droid")await A.updateDroidAccount(c.account.id,L);else throw new Error(`不支持的平台: ${c.account.platform}`);z("success")}catch(S){const L=((pe=(i=S.response)==null?void 0:i.data)==null?void 0:pe.error)||S.message||"账户更新失败",$e=((qe=(me=S.response)==null?void 0:me.data)==null?void 0:qe.suggestion)||"",J=((Le=(He=S.response)==null?void 0:He.data)==null?void 0:Le.errorDetails)||null;let Se=L;$e&&(Se+=`
+${$e}`),J&&J.error_description?Se+=`
+详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
+详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1}}};ve(()=>a.value.name,()=>{var d;I.value.name&&((d=a.value.name)!=null&&d.trim())&&(I.value.name="")}),ve(()=>a.value.accessToken,()=>{var d;I.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(I.value.accessToken="")}),ve(()=>a.value.refreshToken,()=>{var d;I.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(I.value.refreshToken="")}),ve(()=>a.value.apiUrl,()=>{var d;I.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(I.value.apiUrl="")}),ve(()=>a.value.apiKey,()=>{var d;I.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(I.value.apiKey="")}),ve(()=>a.value.azureEndpoint,()=>{var d;I.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(I.value.azureEndpoint="")}),ve(()=>a.value.deploymentName,()=>{var d;I.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(I.value.deploymentName="")});const Ct=v([]),Wt=v(!1),Ut=v(!1),Bt=Z(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),Ct.value.filter(t=>t.platform===d)}),Gt=async()=>{Wt.value=!0;try{const d=await sr();Ct.value=d.data||[]}catch{V("加载分组列表失败","error"),Ct.value=[]}finally{Wt.value=!1}},Ft=async()=>{await Gt(),V("分组列表已刷新","success")},Rt=()=>{Ut.value=!0},$a=async()=>{await Gt()},Aa=async()=>{var t;if(!((t=c.account)!=null&&t.id))return;const d=[typeof A.fetchDroidAccounts=="function"?A.fetchDroidAccounts:null,typeof A.fetchAllAccounts=="function"?A.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ye){console.error("刷新账户列表失败:",ye)}};ve(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),ve(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),ve(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",I.value.accessToken="",I.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",I.value.apiKeys="",M.value||(a.value.authenticationMethod="")))}),ve(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&I.value.apiKeys&&(I.value.apiKeys="")}),ve(()=>a.value.apiKeysInput,d=>{if(!I.value.apiKeys)return;const t=nt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){I.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(I.value.apiKeys="");return}ie==="delete"&&t.length>0&&(I.value.apiKeys="")}),ve(de,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(de.value=i,V("成功提取授权码!","success")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{V("链接格式错误,请检查是否为完整的 URL","error")}else V("请粘贴以 http://localhost:45462 开头的链接","error")}),ve(()=>a.value.platform,d=>{M.value||z("platform-changed",d)}),ve(()=>a.value.accountType,d=>{d==="group"&&Ct.value.length===0&&Gt()}),ve(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",Ut.value=!0)});const Ca=()=>{Oe.value.push({from:"",to:""})},yt=d=>{Oe.value.splice(d,1)},De=(d,t)=>{if(Oe.value.some(ye=>ye.from===d)){V(`模型 ${d} 的映射已存在`,"info");return}Oe.value.push({from:d,to:t}),V(`已添加映射: ${d} → ${t}`,"success")},la=()=>{const d={};return U.value==="whitelist"?re.value.forEach(t=>{d[t]=t}):Oe.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ve(()=>c.account,d=>{if(d){st();const t=Qe(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ye=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let pe="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?pe=me.accountType:me.hasClaudeMax?pe="claude_max":me.hasClaudePro?pe="claude_pro":pe="claude_free"}a.value={platform:d.platform,addType:ye,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:pe,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&B(),d.accountType==="group"&&Gt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(qe=>{qe&&qe.id&&me.push(qe.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const qe=Ct.value.map(async He=>{try{((await Vs(He.id)).data||[]).some(L=>L.id===d.id)&&(me.push(He.id),a.value.groupId||(a.value.groupId=He.id))}catch{}});await Promise.all(qe)}a.value.groupIds=me})}},{immediate:!0});const dt=async()=>{try{const d=await Ds();d.success&&d.userAgent?C.value=d.userAgent:C.value=""}catch{C.value=""}},_t=async()=>{G.value=!0;try{(await js()).success?(C.value="",V("统一User-Agent缓存已清除","success")):V("清除缓存失败","error")}catch(d){V("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{G.value=!1}},mt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},oa=()=>{a.value.unifiedClientId=mt(),V("已生成新的客户端标识","success")},Ta=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=mt()))},Ia=Z(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),pt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ye,i]=ie,pe=parseInt(ye);i==="d"&&d.setDate(d.getDate()+pe),a.value.expiresAt=d.toISOString()}},na=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ua=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return ra(()=>{var d;K.value=ze(a.value.platform),M.value&&st(),Re(),dt(),M.value&&((d=c.account)==null?void 0:d.platform)==="claude-console"&&B()}),ve(()=>a.value.platform,d=>{d==="claude"&&dt()}),(d,t)=>{var ie,ye;return o(),Xe(Mt,{to:"body"},[se.value?(o(),n("div",Ni,[e("div",qi,[e("div",Wi,[e("div",Bi,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",Gi,u(M.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!M.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Fi,[e("div",Qi,[e("div",Hi,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Ji,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):m("",!0),N.value===1&&!M.value?(o(),n("div",Yi,[e("div",Zi,[M.value?m("",!0):(o(),n("div",Xi,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",ed,[e("div",td,[e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>q("claude"))},[e("div",ad,[e("div",rd,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),K.value==="claude"?(o(),n("div",sd,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>q("openai"))},[e("div",ld,[e("div",od,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),K.value==="openai"?(o(),n("div",nd,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>q("gemini"))},[e("div",id,[e("div",dd,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),K.value==="gemini"?(o(),n("div",ud,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>q("droid"))},[e("div",pd,[e("div",gd,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),K.value==="droid"?(o(),n("div",cd,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),K.value?(o(),n("div",yd,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",md,[K.value==="claude"?(o(),n(ke,{key:0},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Ie,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",xd,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Ie,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",fd,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Ie,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",bd,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Ie,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",vd,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="openai"?(o(),n(ke,{key:1},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Ie,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",kd,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Ie,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",hd,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Ie,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",wd,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="gemini"?(o(),n(ke,{key:2},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Ie,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",$d,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[Ie,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",Ad,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Ie,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",Cd,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="droid"?(o(),n("label",{key:3,class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Ie,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",Td,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)):m("",!0)])])):m("",!0)])])),!M.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",Id,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Ud,[e("label",_d,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[Ie,a.value.addType]]),e("span",Kd,[t[216]||(t[216]=f(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",Sd," (用量可视化)")):m("",!0)])]),a.value.platform==="claude"?(o(),n("label",Md,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[Ie,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):m("",!0),e("label",Dd,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[Ie,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",Pd,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[Ie,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):m("",!0)])])):m("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,a.value.name]]),I.value.name?(o(),n("p",jd,u(I.value.name),1)):m("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Vd,[e("label",zd,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Ld,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Rd,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!M.value&&a.value.platform!=="gemini-api"?(o(),n("div",Od,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ed,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Nd,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,qd),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",Wd,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Bd,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):m("",!0),a.value.accountType==="group"?(o(),n("div",Gd,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Fd,[e("div",Qd,[e("div",Hd,[Bt.value.length===0?(o(),n("div",Jd," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Yd),[[je,a.value.groupIds]]),e("span",Zd,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[233]||(t[233]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Xd,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[f(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[f(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),f(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),f("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",e0,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),M.value?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",o0,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])):(o(),n("div",t0,[e("label",a0,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",r0,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])),e("div",n0,[e("div",i0,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",d0,[a.value.credentialType==="access_key"?(o(),n("p",u0," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",p0," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),M.value?(o(),n("p",g0," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):m("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",c0,[e("div",null,[e("label",y0,"AWS 访问密钥 ID "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.value.accessKeyId=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessKeyId}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!M.value,type:"text"},null,10,m0),[[j,a.value.accessKeyId]]),I.value.accessKeyId?(o(),n("p",x0,u(I.value.accessKeyId),1)):m("",!0),M.value?(o(),n("p",f0," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):m("",!0)]),e("div",null,[e("label",b0,"AWS 秘密访问密钥 "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.secretAccessKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.secretAccessKey}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!M.value,type:"password"},null,10,v0),[[j,a.value.secretAccessKey]]),I.value.secretAccessKey?(o(),n("p",k0,u(I.value.secretAccessKey),1)):m("",!0),M.value?(o(),n("p",h0," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):m("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:M.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,w0),[[j,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):m("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",$0,[e("label",A0,"Bearer Token "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.bearerToken}]),placeholder:M.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!M.value,type:"password"},null,10,C0),[[j,a.value.bearerToken]]),I.value.bearerToken?(o(),n("p",T0,u(I.value.bearerToken),1)):m("",!0),M.value?(o(),n("p",I0," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):m("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[f(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):m("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[j,a.value.region]]),I.value.region?(o(),n("p",U0,u(I.value.region),1)):m("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):m("",!0),a.value.platform==="azure_openai"&&!M.value?(o(),n("div",_0,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",K0,u(I.value.azureEndpoint),1)):m("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",S0,u(I.value.deploymentName),1)):m("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",M0,u(I.value.apiKey),1)):m("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",D0,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,P0),[[je,a.value.supportedModels]]),e("span",j0,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):m("",!0),a.value.platform==="bedrock"&&!M.value?(o(),n("div",V0,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",z0,[e("label",L0,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",R0,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)])])):m("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!M.value?(o(),n("div",O0,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[j,a.value.apiUrl]]),I.value.apiUrl?(o(),n("p",E0,u(I.value.apiUrl),1)):m("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",N0,u(I.value.apiKey),1)):m("",!0)]),e("div",q0,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",W0,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>U.value="whitelist")},t[276]||(t[276]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>U.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",B0,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",G0,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,F0),[[je,re.value]]),e("span",Q0,u(i.label),1)],2))),128))]),e("p",H0,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",J0,"(支持所有模型)")):m("",!0)])])):(o(),n("div",Y0,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Z0,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,X0),[[j,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,eu),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,tu)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:Ca},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",au,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>De("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",ru,[e("label",su,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",lu,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",ou,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",nu,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"&&!M.value?(o(),n("div",iu,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[j,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",du,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:R.value?"text":"password"},null,8,uu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]])])):m("",!0),a.value.platform==="gemini-api"&&!M.value?(o(),n("div",pu,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",gu,u(I.value.baseUrl),1)):m("",!0),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[302]||(t[302]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[303]||(t[303]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",cu,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:R.value?"text":"password"},null,8,yu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",mu,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",xu,[e("label",fu,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",bu,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",vu,[e("label",ku,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",hu,[e("label",wu,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",$u,[e("label",Au,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Cu,[e("label",Tu,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Iu,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Uu,[e("div",_u,[e("p",Ku," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Du)):(o(),n("i",Mu)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Su)])])):(o(),n("div",Pu,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",ju,[e("label",Vu,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",zu,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Lu,[e("div",Ru,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Ou,[e("code",Eu,[e("span",Nu,u(a.value.unifiedClientId.substring(0,8)),1),e("span",qu,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Wu,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",Bu,[e("div",Gu,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",Fu," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Qu," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",Hu," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",Ju," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):m("",!0),e("div",Yu,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),f(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",Zu,t[323]||(t[323]=[f(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),f(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Xu,t[324]||(t[324]=[f(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),f(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",ep," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",tp," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):m("",!0)]),a.value.platform!=="droid"?(o(),n("p",ap," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",rp," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",sp,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[j,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",lp,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[j,a.value.accessToken]]),I.value.accessToken?(o(),n("p",op,u(I.value.accessToken),1)):m("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",np,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[j,a.value.refreshToken]]),I.value.refreshToken?(o(),n("p",ip,u(I.value.refreshToken),1)):m("",!0),e("p",dp,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(ke,{key:0},[f(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(ke,{key:1},[f(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",up,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[j,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",pp,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0)])):m("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",gp,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",cp,u(I.value.apiKeys),1)):m("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),f("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",yp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ee}," 下一步 ",8,mp)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ya},[E.value?(o(),n("div",fp)):m("",!0),f(" "+u(E.value?"创建中...":"创建"),1)],8,xp))])])])):m("",!0),N.value===2&&a.value.addType==="oauth"?(o(),Xe(ln,{key:2,ref_key:"oauthFlowRef",ref:ge,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>N.value=1),onSuccess:it},null,8,["platform","proxy"])):m("",!0),N.value===2&&a.value.addType==="setup-token"?(o(),n("div",bp,[a.value.platform==="claude"?(o(),n("div",vp,[e("div",kp,[e("div",hp,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",wp,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",$p,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",Ap,[e("label",Cp,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[Ie,oe.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),f("手动授权 ")],-1))]),e("label",Tp,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[Ie,oe.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),f("Cookie 自动授权 ")],-1))])])]),oe.value==="manual"?(o(),n("div",Ip,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Up,[e("div",_p,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Kp,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),D.value?(o(),n("div",Pp,[e("div",jp,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:D.value},null,8,Vp),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Nt},[e("i",{class:$(le.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:ut},t[345]||(t[345]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:y.value,onClick:We},[y.value?(o(),n("div",Dp)):(o(),n("i",Mp)),f(" "+u(y.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,Sp))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),f("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",zp,[e("div",Lp,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Rp,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",Op,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>de.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[j,de.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):m("",!0),oe.value==="cookie"?(o(),n("div",Ep,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Np,[e("div",qp,[e("div",null,[e("label",Wp,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=f("sessionKey ",-1)),X.value>1?(o(),n("span",Bp,u(X.value)+" 个 ",1)):m("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>he.value=i),class:$(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value}]),placeholder:`每行一个 sessionKey,例如:
+sk-ant-sid01-xxxxx...
+sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[j,he.value]]),X.value>1?(o(),n("p",Gp,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(X.value)+" 个账户 ",1)])):m("",!0),Q.value?(o(),n("p",Fp,u(Q.value),1)):m("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>H.value=!H.value)},[e("i",{class:$(H.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=f(" 如何获取 sessionKey? ",-1))]),H.value?(o(),n("div",Qp,t[359]||(t[359]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[f("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[f("2. 按 "),e("strong",null,"F12"),f(" 打开开发者工具")]),e("li",null,[f("3. 切换到 "),e("strong",null,'"Application"'),f(" (应用) 标签页")]),e("li",null,[f(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),f(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[f("5. 找到键为 "),e("strong",null,'"sessionKey"'),f(" 的那一行")]),e("li",null,[f("6. 复制其 "),e("strong",null,'"Value"'),f(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):m("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:W.value||!he.value.trim(),type:"button",onClick:$t},[W.value?(o(),n("div",Jp)):(o(),n("i",Yp)),W.value&&h.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(h.value.current)+"/"+u(h.value.total)+"... ",1)],64)):W.value?(o(),n(ke,{key:3},[f(" 授权中... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Hp)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),f("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):m("",!0)])])])])):m("",!0),e("div",Zp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>N.value=1)}," 上一步 "),oe.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!gt.value||p.value,type:"button",onClick:qt},[p.value?(o(),n("div",eg)):m("",!0),f(" "+u(p.value?"验证中...":"完成授权"),1)],8,Xp)):m("",!0)])])):m("",!0),M.value?(o(),n("div",tg,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[j,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",ag,[e("label",rg,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",sg,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",lg,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),M.value?m("",!0):(o(),n("div",og,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",ng,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",ig,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,dg),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",ug,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",pg,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",gg,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",cg,[e("div",yg,[e("div",mg,[Bt.value.length===0?(o(),n("div",xg," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,fg),[[je,a.value.groupIds]]),e("span",bg,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[376]||(t[376]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",vg,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",kg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",hg,[e("label",wg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",$g,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",Ag,[e("label",Cg,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Tg,[e("label",Ig,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",Ug,[e("label",_g,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Kg,[e("label",Sg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Dg,[e("div",Pg,[e("p",jg," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Lg)):(o(),n("i",zg)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Vg)])])):(o(),n("div",Rg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Og,[e("label",Eg,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",Ng,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",qg,[e("div",Wg,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Bg,[e("code",Gg,[e("span",Fg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Qg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Hg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Jg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[j,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Yg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),M.value&&a.value.dailyQuota>0?(o(),n("div",Zg,[e("div",Xg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",ec," $"+u(ht().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",tc,[e("div",{class:$(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:Ze({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",ac,[e("span",rc," 剩余: $"+u(Math.max(0,a.value.dailyQuota-ht()).toFixed(2)),1),e("span",sc,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):m("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",lc,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>U.value="whitelist")},t[407]||(t[407]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>U.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",oc,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",nc,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,ic),[[je,re.value]]),e("span",dc,u(i.label),1)],2))),128))]),e("p",uc,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",pc,"(支持所有模型)")):m("",!0)])])):(o(),n("div",gc,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",cc,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,yc),[[j,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,mc),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,xc)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:Ca},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",fc,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>De("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>De("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>De("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",bc,[e("label",vc,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",kc,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",hc,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",wc,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"?(o(),n("div",$c,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[j,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",Ac,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Cc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Tc,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[j,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):m("",!0),a.value.platform==="gemini-api"?(o(),n("div",Ic,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",Uc,u(I.value.baseUrl),1)):m("",!0),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[436]||(t[436]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[437]||(t[437]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",_c,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Kc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",Sc,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[j,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[j,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Mc,[e("label",Dc,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Pc,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)])])):m("",!0),a.value.platform==="azure_openai"?(o(),n("div",jc,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",Vc,u(I.value.azureEndpoint),1)):m("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",zc,u(I.value.deploymentName),1)):m("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",Lc,u(I.value.apiKey),1)):m("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Rc,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Oc),[[je,a.value.supportedModels]]),e("span",Ec,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):m("",!0),M.value&&wt.value?(o(),n("div",Nc,[e("div",qc,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Wc,[e("div",Bc,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>Ce.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",Gc,[t[466]||(t[466]=f(" 当前已保存 ",-1)),e("strong",null,u(Vt.value),1),t[467]||(t[467]=f(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Fc,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",Qc,u(I.value.apiKeys),1)):m("",!0)]),e("div",Hc,[e("div",Jc,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Yc,u(Pt.value),1)]),e("div",Zc,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:Ze(Dt.value)},null,4),(o(),n(ke,null,Ne(at,i=>e("button",{key:i.value,class:$(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:pe=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Xc)),64))]),e("p",ey,u(jt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),f("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):m("",!0),!(M.value&&wt.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",ty,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",ay,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.refreshToken]])])])])):m("",!0),a.value.platform==="droid"?(o(),n("div",ry,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",sy,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:At},[E.value?(o(),n("div",oy)):m("",!0),f(" "+u(E.value?"更新中...":"更新"),1)],8,ly)])])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":T.value.cancelText,"confirm-text":T.value.confirmText,message:T.value.message,show:_.value,title:T.value.title,onCancel:Y,onConfirm:O},null,8,["cancel-text","confirm-text","message","show","title"]),Ut.value?(o(),Xe(jr,{key:1,onClose:t[169]||(t[169]=i=>Ut.value=!1),onRefresh:$a})):m("",!0),Ce.value?(o(),Xe(Ei,{key:2,"account-id":(ie=c.account)==null?void 0:ie.id,"account-name":(ye=c.account)==null?void 0:ye.name,onClose:t[170]||(t[170]=i=>Ce.value=!1),onRefresh:Aa},null,8,["account-id","account-name"])):m("",!0)])}}},mr=sa(ny,[["__scopeId","data-v-31bfe83b"]]),iy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},dy={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},uy={class:"mb-4 flex items-center justify-between sm:mb-6"},py={class:"flex items-center gap-2 sm:gap-3"},gy={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},cy={class:"space-y-6"},yy={key:0,class:"mt-1 text-xs text-red-500"},my={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},xy={key:0,class:"mt-1 text-xs text-red-500"},fy={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},by=["placeholder","required"],vy={key:0,class:"mt-1 text-xs text-red-500"},ky={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},hy={class:"mb-3"},wy={class:"inline-flex cursor-pointer items-center"},$y={key:0},Ay={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Cy={class:"mb-3 space-y-2"},Ty=["onUpdate:modelValue"],Iy=["onUpdate:modelValue"],Uy=["onClick"],_y={class:"mt-2 flex gap-3"},Ky=["disabled"],Sy={key:0,class:"loading-spinner mr-2"},My={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=Z(()=>!!c.account),T=v(!1),k=v({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),P=v(!0),O=v({}),Y=v([]),M=()=>{const y={};for(const p of Y.value){const D=(p.from||"").trim(),de=(p.to||"").trim();D&&de&&(y[D]=de)}return y},se=()=>{Y.value.push({from:"",to:""})},ge=y=>{Y.value.splice(y,1)},N=()=>{const y={};return(!k.value.name||k.value.name.trim().length===0)&&(y.name="名称不能为空"),(!k.value.apiUrl||k.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!_.value&&(!k.value.apiKey||k.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),O.value=y,Object.keys(y).length===0},E=async()=>{if(N()){T.value=!0;try{if(_.value){const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,priority:k.value.priority,userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00",proxy:k.value.proxy||null,supportedModels:M()};k.value.apiKey&&k.value.apiKey.trim().length>0&&(y.apiKey=k.value.apiKey);const p=await zs(c.account.id,y);p.success?z("success"):V(p.message||"保存失败","error")}else{const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,apiKey:k.value.apiKey,priority:Number(k.value.priority||50),supportedModels:M(),userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,proxy:k.value.proxy,accountType:"shared",dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00"},p=await Ls(y);p.success?z("success"):V(p.message||"创建失败","error")}}catch(y){V(y.message||"请求失败","error")}finally{T.value=!1}}},R=()=>{if(!c.account)return;const y=c.account;k.value.name=y.name||"",k.value.description=y.description||"",k.value.apiUrl=y.apiUrl||"",k.value.priority=Number(y.priority||50),k.value.userAgent=y.userAgent||"",k.value.rateLimitDuration=Number(y.rateLimitDuration||60),k.value.dailyQuota=Number(y.dailyQuota||0),k.value.quotaResetTime=y.quotaResetTime||"00:00",k.value.proxy=y.proxy||null,P.value=k.value.rateLimitDuration>0,Y.value=[];const p=y.supportedModels||{};if(p&&typeof p=="object")for(const D of Object.keys(p))Y.value.push({from:D,to:p[D]})};return ra(()=>{_.value&&R()}),ve(()=>c.account,()=>{_.value&&R()}),(y,p)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",iy,[e("div",dy,[e("div",uy,[e("div",py,[p[13]||(p[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",gy,u(_.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[0]||(p[0]=D=>y.$emit("close"))},p[14]||(p[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",cy,[e("div",null,[p[15]||(p[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=D=>k.value.name=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,k.value.name]]),O.value.name?(o(),n("p",yy,u(O.value.name),1)):m("",!0)]),e("div",null,[p[16]||(p[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=D=>k.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,k.value.description]])]),e("div",my,[e("div",null,[p[17]||(p[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>k.value.apiUrl=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[j,k.value.apiUrl]]),O.value.apiUrl?(o(),n("p",xy,u(O.value.apiUrl),1)):m("",!0)]),e("div",null,[e("label",fy,"API Key "+u(_.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=D=>k.value.apiKey=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiKey}]),placeholder:_.value?"留空表示不更新":"必填",required:!_.value,type:"password"},null,10,by),[[j,k.value.apiKey]]),O.value.apiKey?(o(),n("p",vy,u(O.value.apiKey),1)):m("",!0)])]),e("div",ky,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=D=>k.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[j,k.value.priority,void 0,{number:!0}]]),p[19]||(p[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[p[20]||(p[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":p[6]||(p[6]=D=>k.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,k.value.userAgent]])])]),e("div",null,[p[24]||(p[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",hy,[e("label",wy,[b(e("input",{"onUpdate:modelValue":p[7]||(p[7]=D=>P.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,P.value]]),p[21]||(p[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),P.value?(o(),n("div",$y,[p[22]||(p[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[8]||(p[8]=D=>k.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,k.value.rateLimitDuration,void 0,{number:!0}]]),p[23]||(p[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),e("div",Ay,[e("div",null,[p[25]||(p[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":p[9]||(p[9]=D=>k.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,k.value.dailyQuota,void 0,{number:!0}]]),p[26]||(p[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[p[27]||(p[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":p[10]||(p[10]=D=>k.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,k.value.quotaResetTime]]),p[28]||(p[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[p[32]||(p[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),p[33]||(p[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Cy,[(o(!0),n(ke,null,Ne(Y.value,(D,de)=>(o(),n("div",{key:de,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":le=>D.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ty),[[j,D.from]]),p[30]||(p[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":le=>D.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Iy),[[j,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>ge(de)},p[29]||(p[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Uy)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:se},p[31]||(p[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)]))]),e("div",null,[Ve(rr,{modelValue:k.value.proxy,"onUpdate:modelValue":p[11]||(p[11]=D=>k.value.proxy=D)},null,8,["modelValue"])]),e("div",_y,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:p[12]||(p[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:T.value,type:"button",onClick:E},[T.value?(o(),n("div",Sy)):m("",!0),f(" "+u(T.value?_.value?"保存中...":"创建中...":_.value?"保存":"创建"),1)],8,Ky)])])])])):m("",!0)]))}},xr=sa(My,[["__scopeId","data-v-3b48d107"]]),Dy={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Py={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},jy={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},Vy={class:"flex flex-1 items-start gap-3"},zy={class:"space-y-1"},Ly={class:"flex flex-wrap items-center gap-2"},Ry={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},Oy={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},Ey={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},Ny={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},qy={key:0},Wy={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},By={key:0,class:"flex h-[50vh] items-center justify-center"},Gy={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Fy={class:"flex items-start justify-between"},Qy={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Hy={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Jy={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Yy={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},Zy={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Xy={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},em={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},tm={class:"flex items-center justify-between"},am={class:"font-semibold text-gray-900 dark:text-gray-100"},rm={class:"mt-2 flex items-center justify-between"},sm={class:"font-semibold text-gray-900 dark:text-gray-100"},lm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},om={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},nm={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},im={class:"flex items-center justify-between"},dm={class:"font-semibold text-gray-900 dark:text-gray-100"},um={class:"mt-2 flex items-center justify-between"},pm={class:"font-semibold text-gray-900 dark:text-gray-100"},gm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},cm={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},ym={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},mm={class:"flex items-center justify-between"},xm={class:"font-semibold text-gray-900 dark:text-gray-100"},fm={class:"mt-2 flex items-center justify-between"},bm={class:"font-semibold text-gray-900 dark:text-gray-100"},vm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},km={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},hm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},wm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},$m={class:"flex items-center justify-between"},Am={class:"font-semibold text-gray-900 dark:text-gray-100"},Cm={class:"flex items-center justify-between"},Tm={class:"font-semibold text-gray-900 dark:text-gray-100"},Im={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Um={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},_m={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Km={class:"flex items-center justify-between"},Sm={class:"font-semibold text-gray-900 dark:text-gray-100"},Mm={class:"flex items-center justify-between"},Dm={class:"font-semibold text-gray-900 dark:text-gray-100"},Pm={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},jm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Vm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},zm={class:"flex items-center justify-between"},Lm={class:"font-semibold text-gray-900 dark:text-gray-100"},Rm={class:"flex items-center justify-between"},Om={class:"font-semibold text-gray-900 dark:text-gray-100"},Em={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Nm={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},qm={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Wm={class:"text-xs text-gray-400 dark:text-gray-500"},Bm={class:"h-[260px] sm:h-[300px]"},Gm={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=Rs(),{isDarkMode:_}=Qr(A),T=Hr(),k=v(null);let P=null;const O={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},Y=Z(()=>{var H;return O[(H=c.account)==null?void 0:H.platform]||"未知平台"}),M=Z(()=>{var H;return(H=c.account)!=null&&H.accountType?c.account.accountType==="dedicated"?"专属":c.account.accountType==="group"?"分组":"共享":"共享"}),se=Z(()=>({text:_.value?"#e5e7eb":"#374151",grid:_.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ge=Z(()=>{var H;return((H=c.summary)==null?void 0:H.totalTokens)||0}),N=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.inputTokens)||0}),E=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.outputTokens)||0}),R=H=>{const h=Number(H||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},y=H=>Math.round((Number(H)||0)*100)/100,p=H=>{if(!H)return"-";const h=new Date(H);if(Number.isNaN(h.getTime())){const G=H.split("-");return G.length===3?`${G[1]}-${G[2]}`:H}const X=String(h.getMonth()+1).padStart(2,"0"),C=String(h.getDate()).padStart(2,"0");return`${X}-${C}`},D=H=>{if(!H)return"暂无";const h=new Date(H);return Number.isNaN(h.getTime())?H:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},de=(H,h)=>{if(!H)return 0;const X=c.history.find(C=>C.date===H);return X&&X[h]||0},le=Z(()=>{var H,h;return c.generatedAt||((H=c.summary)==null?void 0:H.generatedAt)||((h=c.summary)==null?void 0:h.generated_at)||""}),ae=Z(()=>{var H,h,X,C,G,K,Ce,ze;return[{key:"totalCost",label:"30天总费用",value:((H=c.summary)==null?void 0:H.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:Je(((h=c.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((X=c.summary)==null?void 0:X.avgDailyCostFormatted)||R(((C=c.summary)==null?void 0:C.avgDailyCost)||0),subtitle:(G=c.summary)!=null&&G.actualDaysUsed&&((K=c.summary)==null?void 0:K.actualDaysUsed)<((Ce=c.summary)==null?void 0:Ce.days)?`基于 ${c.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:Je(y(((ze=c.summary)==null?void 0:ze.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),oe=async()=>{if(await ar(),!c.show||!k.value)return;if(P&&P.destroy(),!c.history||c.history.length===0){P=null;return}const H=c.history.map(C=>C.label),h=c.history.map(C=>C.cost||0),X=c.history.map(C=>C.requests||0);P=new Xs(k.value,{type:"line",data:{labels:H,datasets:[{label:"费用 (USD)",data:h,borderColor:se.value.cost,backgroundColor:se.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:X,borderColor:se.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:se.value.text}},tooltip:{callbacks:{label(C){return C.dataset.label==="费用 (USD)"?`${C.dataset.label}: ${R(C.parsed.y)}`:`${C.dataset.label}: ${Je(C.parsed.y)} 次`}}}},scales:{x:{ticks:{color:se.value.text},grid:{color:se.value.grid}},y:{position:"left",ticks:{color:se.value.text,callback:C=>R(C)},grid:{color:se.value.grid}},y1:{position:"right",ticks:{color:se.value.text,callback:C=>Je(C)},grid:{drawOnChartArea:!1}}}}})},he=()=>{P&&(P.destroy(),P=null)},W=()=>{he(),z("close")},Q=()=>{var H;(H=c.account)!=null&&H.id&&T.push({path:`/accounts/${c.account.id}/usage-records`,query:{platform:c.account.platform||c.account.accountType}})};return ve(()=>c.show,H=>{H&&!c.loading?oe():H||he()}),ve(()=>c.loading,H=>{!H&&c.show&&oe()}),ve(()=>c.history,()=>{c.show&&!c.loading&&oe()},{deep:!0}),ve(_,()=>{c.show&&!c.loading&&oe()}),Ha(()=>{he()}),(H,h)=>{var X,C,G,K,Ce,ze,Ke,Fe,Qe,xe,g,a,U,re,ne,Re,Oe,st,nt,at,Dt,Pt,jt,I,Tt,gt,ht,ct,Vt,wt,B,q,Ee,We,ut,Nt,qt,$t,zt,Lt,It;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Dy,[e("div",{class:"absolute inset-0",onClick:W}),e("div",Py,[e("div",jy,[e("div",Vy,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",zy,[e("div",Ly,[e("h3",Ry,u(((X=F.account)==null?void 0:X.name)||((C=F.account)==null?void 0:C.email)||"账号使用详情"),1),(G=F.account)!=null&&G.platform?(o(),n("span",Oy,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),f(u(Y.value),1)])):m("",!0),(K=F.account)!=null&&K.accountType?(o(),n("span",Ey,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),f(u(M.value),1)])):m("",!0)]),e("p",Ny,[f(" 近 "+u(((Ce=F.summary)==null?void 0:Ce.days)||30)+" 天内的费用与请求趋势 ",1),(ze=F.summary)!=null&&ze.actualDaysUsed&&((Ke=F.summary)==null?void 0:Ke.actualDaysUsed)<((Fe=F.summary)==null?void 0:Fe.days)?(o(),n("span",qy," (日均基于实际使用 "+u(F.summary.actualDaysUsed)+" 天) ",1)):m("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:Q},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),f(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:W},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Wy,[F.loading?(o(),n("div",By,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(ke,{key:1},[e("div",Gy,[(o(!0),n(ke,null,Ne(ae.value,it=>(o(),n("div",{key:it.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Fy,[e("div",null,[e("p",Qy,u(it.label),1),e("p",Hy,u(it.value),1),e("p",Jy,u(it.subtitle),1)]),e("div",Yy,[e("i",{class:$(["fas",it.icon,it.iconClass])},null,2)])])]))),128))]),e("div",Zy,[e("div",Xy,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),f(" 今日概览 ")],-1)),e("div",em,[e("div",tm,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",am,u(((xe=(Qe=F.summary)==null?void 0:Qe.today)==null?void 0:xe.costFormatted)||"$0.000000"),1)]),e("div",rm,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",sm,u(Ye(Je)(((a=(g=F.summary)==null?void 0:g.today)==null?void 0:a.requests)||0)),1)]),e("div",lm,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(Ye(Je)(((re=(U=F.summary)==null?void 0:U.today)==null?void 0:re.tokens)||0)),1)])])]),e("div",om,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),f(" 最高费用日 ")],-1)),e("div",nm,[e("div",im,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",dm,u(p((Re=(ne=F.summary)==null?void 0:ne.highestCostDay)==null?void 0:Re.date)),1)]),e("div",um,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",pm,u(((st=(Oe=F.summary)==null?void 0:Oe.highestCostDay)==null?void 0:st.formattedCost)||"$0.000000"),1)]),e("div",gm,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(Ye(Je)(de((at=(nt=F.summary)==null?void 0:nt.highestCostDay)==null?void 0:at.date,"requests"))),1)])])]),e("div",cm,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),f(" 最高请求日 ")],-1)),e("div",ym,[e("div",mm,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",xm,u(p((Pt=(Dt=F.summary)==null?void 0:Dt.highestRequestDay)==null?void 0:Pt.date)),1)]),e("div",fm,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",bm,u(Ye(Je)(((I=(jt=F.summary)==null?void 0:jt.highestRequestDay)==null?void 0:I.requests)||0)),1)]),e("div",vm,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(R(de((gt=(Tt=F.summary)==null?void 0:Tt.highestRequestDay)==null?void 0:gt.date,"cost"))),1)])])])]),e("div",km,[e("div",hm,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),f(" 累计 Token ")],-1)),e("div",wm,[e("div",$m,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",Am,u(Ye(Je)(ge.value)),1)]),e("div",Cm,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",Tm,u(Ye(Je)(Math.round(((ht=F.summary)==null?void 0:ht.avgDailyTokens)||0))),1)]),e("div",Im,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(Ye(Je)(N.value))+" / "+u(Ye(Je)(E.value)),1)])])]),e("div",Um,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),f(" 平均速率 ")],-1)),e("div",_m,[e("div",Km,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",Sm,u(((Vt=(ct=F.overview)==null?void 0:ct.averages)==null?void 0:Vt.rpm)??0),1)]),e("div",Mm,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",Dm,u(((B=(wt=F.overview)==null?void 0:wt.averages)==null?void 0:B.tpm)??0),1)]),e("div",Pm,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(Ye(Je)(Math.round((((Ee=(q=F.overview)==null?void 0:q.averages)==null?void 0:Ee.dailyRequests)||0)*100)/100))+" / "+u(Ye(Je)(Math.round((((ut=(We=F.overview)==null?void 0:We.averages)==null?void 0:ut.dailyTokens)||0)*100)/100)),1)])])]),e("div",jm,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),f(" 最近统计 ")],-1)),e("div",Vm,[e("div",zm,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",Lm,u(Ye(Je)(((qt=(Nt=F.overview)==null?void 0:Nt.daily)==null?void 0:qt.requests)||0)),1)]),e("div",Rm,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",Om,u(Ye(Je)(((zt=($t=F.overview)==null?void 0:$t.daily)==null?void 0:zt.allTokens)||0)),1)]),e("div",Em,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(R(((It=(Lt=F.overview)==null?void 0:Lt.daily)==null?void 0:It.cost)||0)),1)])])])]),e("div",Nm,[e("div",qm,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),f(" 30天费用与请求趋势 ")],-1)),e("span",Wm," 最新更新时间:"+u(D(le.value)),1)]),e("div",Bm,[e("canvas",{ref_key:"chartCanvas",ref:k,class:"h-full w-full"},null,512)])])],64))])])])):m("",!0)])}}},Fm=sa(Gm,[["__scopeId","data-v-c29b5f70"]]),Qm={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hm={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Jm={class:"mb-6 flex items-center justify-between"},Ym={class:"flex items-center gap-3"},Zm={class:"text-sm text-gray-600 dark:text-gray-400"},Xm={class:"space-y-6"},ex={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},tx={class:"flex items-center justify-between"},ax={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},rx={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},sx={class:"mb-3 grid grid-cols-3 gap-2"},lx=["onClick"],ox={key:0,class:"animate-fadeIn"},nx=["min"],ix={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},dx={class:"flex items-center justify-between"},ux={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},px={class:"flex gap-3 pt-2"},gx=["disabled"],cx={key:0,class:"loading-spinner mr-2"},yx={key:1,class:"fas fa-save mr-2"},mx={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(!1),T=hr({expireDuration:"",customExpireDate:"",expiresAt:null}),k=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],P=Z(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});ve(()=>z.show,y=>{y&&O()}),ve(()=>{var y;return(y=z.account)==null?void 0:y.id},y=>{y&&z.show&&O()});const O=()=>{_.value=!1,z.account.expiresAt?(T.expireDuration="custom",T.customExpireDate=new Date(z.account.expiresAt).toISOString().slice(0,16),T.expiresAt=z.account.expiresAt):(T.expireDuration="",T.customExpireDate="",T.expiresAt=null)},Y=y=>{if(T.expireDuration=y,!y){T.expiresAt=null;return}if(y==="custom")return;const p=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,de,le]=D,ae=parseInt(de);switch(le){case"d":p.setDate(p.getDate()+ae);break;case"h":p.setHours(p.getHours()+ae);break;case"m":p.setMonth(p.getMonth()+ae);break;case"y":p.setFullYear(p.getFullYear()+ae);break}T.expiresAt=p.toISOString()}},M=()=>{if(T.customExpireDate)try{const[y,p]=T.customExpireDate.split("T"),[D,de,le]=y.split("-").map(Number),[ae,oe]=p.split(":").map(Number),he=new Date(D,de-1,le,ae,oe,0,0);if(isNaN(he.getTime())){console.error("Invalid date:",T.customExpireDate);return}T.expiresAt=he.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},se=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ge=y=>y?new Date(y){if(!y)return null;const p=new Date,de=new Date(y)-p,le=Math.ceil(de/(1e3*60*60*24));return de<0?{text:"已过期",class:"text-red-600"}:le<=7?{text:`${le} 天后过期`,class:"text-orange-600"}:le<=30?{text:`${le} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(le/30)} 个月后过期`,class:"text-green-600"}},E=()=>{_.value=!0,A("save",{accountId:z.account.id,expiresAt:T.expiresAt})};return _e({resetSaving:()=>{_.value=!1}}),(y,p)=>(o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Qm,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:p[0]||(p[0]=D=>y.$emit("close"))}),e("div",Hm,[e("div",Jm,[e("div",Ym,[p[6]||(p[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[p[5]||(p[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",Zm,' 为 "'+u(F.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[1]||(p[1]=D=>y.$emit("close"))},p[7]||(p[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Xm,[e("div",ex,[e("div",tx,[e("div",null,[p[10]||(p[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",ax,[F.account.expiresAt?(o(),n(ke,{key:0},[f(u(se(F.account.expiresAt))+" ",1),N(F.account.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(F.account.expiresAt).class])}," ("+u(N(F.account.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[8]||(p[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),p[9]||(p[9]=f(" 永不过期 ",-1))],64))])]),e("div",rx,[e("i",{class:$(["fas fa-hourglass-half text-lg",F.account.expiresAt&&ge(F.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[p[12]||(p[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",sx,[(o(),n(ke,null,Ne(k,D=>e("button",{key:D.value,class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:de=>Y(D.value)},u(D.label),11,lx)),64)),e("button",{class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:p[2]||(p[2]=D=>Y("custom"))},p[11]||(p[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),f(" 自定义 ",-1)]),2)])]),T.expireDuration==="custom"?(o(),n("div",ox,[p[13]||(p[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>T.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:P.value,type:"datetime-local",onChange:M},null,40,nx),[[j,T.customExpireDate]]),p[14]||(p[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):m("",!0),T.expiresAt!==F.account.expiresAt?(o(),n("div",ix,[e("div",dx,[e("div",null,[p[17]||(p[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),f(" 新的到期时间 ")],-1)),e("p",ux,[T.expiresAt?(o(),n(ke,{key:0},[f(u(se(T.expiresAt))+" ",1),N(T.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(T.expiresAt).class])}," ("+u(N(T.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[15]||(p[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),p[16]||(p[16]=f(" 永不过期 ",-1))],64))])]),p[18]||(p[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):m("",!0),e("div",px,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:p[4]||(p[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:_.value||T.expiresAt===F.account.expiresAt,onClick:E},[_.value?(o(),n("div",cx)):(o(),n("i",yx)),f(" "+u(_.value?"保存中...":"保存更改"),1)],8,gx)])])])])):m("",!0)]))}},xx=sa(mx,[["__scopeId","data-v-f19e4a71"]]),fx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},bx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},vx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},kx={class:"flex items-center gap-3"},hx={class:"text-xs text-gray-500 dark:text-gray-400"},wx=["disabled"],$x={class:"px-5 py-4"},Ax={class:"mb-4 space-y-2"},Cx={class:"flex items-center justify-between text-sm"},Tx={key:0,class:"flex items-center justify-between text-sm"},Ix={class:"flex items-center justify-between text-sm"},Ux=["disabled"],_x=["value"],Kx={class:"flex items-center gap-3"},Sx={class:"text-xs text-gray-500 dark:text-gray-400"},Mx={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Dx={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Px={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},jx={class:"max-h-40 overflow-y-auto p-3"},Vx={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},zx={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Lx={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Rx={key:2,class:"text-sm text-red-600 dark:text-red-400"},Ox={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Ex={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Nx=["disabled"],qx=["disabled"],Wx={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=v("idle"),_=v(""),T=v(""),k=v(0),P=v(null),O=v(null),Y=v(""),M=Z(()=>{if(!c.account)return[];const G=c.account.platform;return{claude:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],"claude-console":["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],bedrock:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],gemini:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"],"openai-responses":["gpt-4o-mini","gpt-4o","o3-mini"],"azure-openai":[c.account.deploymentName||"gpt-4o-mini"],droid:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],ccr:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"]}[G]||[]}),se=Z(()=>{if(!c.account)return"";const G=c.account.platform;return{claude:"claude-sonnet-4-5-20250929","claude-console":"claude-sonnet-4-5-20250929",bedrock:"claude-sonnet-4-5-20250929",gemini:"gemini-2.5-flash","openai-responses":"gpt-4o-mini","azure-openai":c.account.deploymentName||"gpt-4o-mini",droid:"claude-sonnet-4-20250514",ccr:"claude-sonnet-4-20250514"}[G]||""});ve(()=>c.account,()=>{Y.value=se.value},{immediate:!0});const ge=Z(()=>c.account?["claude","claude-console"].includes(c.account.platform):!1),N=Z(()=>{if(!c.account)return"未知";const G=c.account.platform;return{claude:"Claude OAuth","claude-console":"Claude Console",bedrock:"AWS Bedrock",gemini:"Gemini","openai-responses":"OpenAI Responses","azure-openai":"Azure OpenAI",droid:"Droid",ccr:"CCR"}[G]||G}),E=Z(()=>{if(!c.account)return"fas fa-question";const G=c.account.platform;return{claude:"fas fa-brain","claude-console":"fas fa-brain",bedrock:"fab fa-aws",gemini:"fas fa-gem","openai-responses":"fas fa-code","azure-openai":"fab fa-microsoft",droid:"fas fa-robot",ccr:"fas fa-key"}[G]||"fas fa-robot"}),R=Z(()=>{if(!c.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.platform;return{claude:"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300","claude-console":"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300",bedrock:"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300",gemini:"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300","openai-responses":"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300","azure-openai":"bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",droid:"bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300",ccr:"bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300"}[G]||"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"Access Key":G==="bearer_token"?"Bearer Token":"Unknown"}),p=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"fas fa-key":G==="bearer_token"?"fas fa-ticket":"fas fa-question"}),D=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.credentialType;return G==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":G==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),de=Z(()=>{switch(A.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),le=Z(()=>{const G=N.value||"API";switch(A.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return`账户可以正常访问 ${G}`;case"error":return T.value||`无法连接到 ${G}`;default:return""}}),ae=Z(()=>{switch(A.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),oe=Z(()=>{switch(A.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),he=Z(()=>{switch(A.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),W=Z(()=>{switch(A.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=Z(()=>{switch(A.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function H(){if(!c.account)return"";const G=c.account.platform;return{claude:`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test`,"claude-console":`${kt.apiPrefix}/admin/claude-console-accounts/${c.account.id}/test`,bedrock:`${kt.apiPrefix}/admin/bedrock-accounts/${c.account.id}/test`,gemini:`${kt.apiPrefix}/admin/gemini-accounts/${c.account.id}/test`,"openai-responses":`${kt.apiPrefix}/admin/openai-responses-accounts/${c.account.id}/test`,"azure-openai":`${kt.apiPrefix}/admin/azure-openai-accounts/${c.account.id}/test`,droid:`${kt.apiPrefix}/admin/droid-accounts/${c.account.id}/test`,ccr:`${kt.apiPrefix}/admin/ccr-accounts/${c.account.id}/test`}[G]||""}async function h(){var K;if(!c.account)return;A.value="testing",_.value="",T.value="",k.value=0,P.value=Date.now(),O.value&&O.value.close();const G=H();if(!G){A.value="error",T.value="不支持的账户类型";return}try{const Ce=localStorage.getItem("authToken"),ze=await fetch(G,{method:"POST",headers:{"Content-Type":"application/json",Authorization:Ce?`Bearer ${Ce}`:""},body:JSON.stringify({model:Y.value})});if(!ze.ok){const Ke=await ze.json().catch(()=>({}));throw new Error(Ke.message||`HTTP ${ze.status}`)}if(ge.value){const Ke=ze.body.getReader(),Fe=new TextDecoder;let Qe=!1;for(;!Qe;){const{done:xe,value:g}=await Ke.read();if(xe){Qe=!0;continue}const U=Fe.decode(g).split(`
+`);for(const re of U)if(re.startsWith("data: "))try{const ne=JSON.parse(re.substring(6));X(ne)}catch{}}}else{const Ke=await ze.json();k.value=Date.now()-P.value,Ke.success?(A.value="success",_.value=((K=Ke.data)==null?void 0:K.responseText)||"Test passed"):(A.value="error",T.value=Ke.message||"Test failed")}}catch(Ce){A.value="error",T.value=Ce.message||"连接失败",k.value=Date.now()-P.value}}function X(G){switch(G.type){case"test_start":break;case"content":_.value+=G.text;break;case"message_stop":break;case"test_complete":k.value=Date.now()-P.value,G.success?A.value="success":(A.value="error",T.value=G.error||"测试失败");break;case"error":A.value="error",T.value=G.error||"未知错误",k.value=Date.now()-P.value;break}}function C(){A.value!=="testing"&&(O.value&&(O.value.close(),O.value=null),A.value="idle",_.value="",T.value="",k.value=0,z("close"))}return ve(()=>c.show,G=>{var K;G&&(A.value="idle",_.value="",T.value="",k.value=0,((K=c.account)==null?void 0:K.platform)==="bedrock"?c.account.credentialType==="bearer_token"?Y.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":Y.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":Y.value="claude-sonnet-4-5-20250929")}),Ha(()=>{O.value&&O.value.close()}),(G,K)=>{var Ce,ze;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",fx,[e("div",{class:"absolute inset-0",onClick:C}),e("div",bx,[e("div",vx,[e("div",kx,[e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",A.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":A.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:$(["fas",A.value==="idle"?"fa-vial":A.value==="testing"?"fa-spinner fa-spin":A.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[K[1]||(K[1]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",hx,u(((Ce=F.account)==null?void 0:Ce.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:A.value==="testing",onClick:C},K[2]||(K[2]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,wx)]),e("div",$x,[e("div",Ax,[e("div",Cx,[K[3]||(K[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",R.value])},[e("i",{class:$(E.value)},null,2),f(" "+u(N.value),1)],2)]),((ze=c.account)==null?void 0:ze.platform)==="bedrock"?(o(),n("div",Tx,[K[4]||(K[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"账号类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",D.value])},[e("i",{class:$(p.value)},null,2),f(" "+u(y.value),1)],2)])):m("",!0),e("div",Ix,[K[5]||(K[5]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),b(e("select",{"onUpdate:modelValue":K[0]||(K[0]=Ke=>Y.value=Ke),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-xs font-medium text-gray-700 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300",disabled:A.value==="testing"},[(o(!0),n(ke,null,Ne(M.value,Ke=>(o(),n("option",{key:Ke,value:Ke},u(Ke),9,_x))),128))],8,Ux),[[wa,Y.value]])])]),e("div",{class:$(["mb-4 rounded-xl border p-4 transition-all duration-300",ae.value])},[e("div",Kx,[e("div",{class:$(["flex h-8 w-8 items-center justify-center rounded-lg",oe.value])},[e("i",{class:$(["fas text-sm",he.value,W.value])},null,2)],2),e("div",null,[e("p",{class:$(["font-medium",Q.value])},u(de.value),3),e("p",Sx,u(le.value),1)])])],2),A.value!=="idle"?(o(),n("div",Mx,[e("div",Dx,[K[6]||(K[6]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),_.value?(o(),n("span",Px,u(_.value.length)+" 字符 ",1)):m("",!0)]),e("div",jx,[_.value?(o(),n("p",Vx,[f(u(_.value)+" ",1),A.value==="testing"?(o(),n("span",zx)):m("",!0)])):A.value==="testing"?(o(),n("p",Lx,K[7]||(K[7]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),f(" 等待响应中... ",-1)]))):A.value==="error"&&T.value?(o(),n("p",Rx,u(T.value),1)):m("",!0)])])):m("",!0),k.value>0?(o(),n("div",Ox,[K[8]||(K[8]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((k.value/1e3).toFixed(2))+" 秒",1)])):m("",!0)]),e("div",Ex,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:A.value==="testing",onClick:C}," 关闭 ",8,Nx),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",A.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:A.value==="testing",onClick:h},[e("i",{class:$(["fas",A.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),f(" "+u(A.value==="testing"?"测试中...":A.value==="idle"?"开始测试":"重新测试"),1)],10,qx)])])])):m("",!0)])}}},Bx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Gx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Fx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Qx={class:"flex items-center gap-3"},Hx={class:"text-xs text-gray-500 dark:text-gray-400"},Jx=["disabled"],Yx={class:"px-5 py-4"},Zx={key:0,class:"flex items-center justify-center py-8"},Xx={class:"mb-5 flex items-center justify-between"},ef={class:"mb-5"},tf=["disabled"],af={class:"mb-5"},rf={class:"flex flex-wrap gap-2"},sf=["disabled","onClick"],lf={class:"mb-5"},of=["disabled"],nf={class:"mt-2 flex flex-wrap gap-2"},df=["disabled","onClick"],uf={key:0,class:"mb-4"},pf={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},gf={class:"flex items-center gap-2"},cf={class:"text-gray-600 dark:text-gray-400"},yf={key:0,class:"text-gray-500 dark:text-gray-500"},mf=["title"],xf={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},ff={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},bf=["disabled"],vf=["disabled"],kf={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),k=v([]),P=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],O=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function Y(N){return N?new Date(N).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function M(){var N,E;if(c.account){A.value=!0;try{const R=localStorage.getItem("authToken"),y=c.account.platform;let p="";if(y==="claude")p=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{A.value=!1;return}const D=await fetch(p,{headers:{Authorization:R?`Bearer ${R}`:""}});if(D.ok){const ae=await D.json();ae.success&&((N=ae.data)!=null&&N.config)&&(T.value={enabled:ae.data.config.enabled||!1,cronExpression:ae.data.config.cronExpression||"0 8 * * *",model:ae.data.config.model||"claude-sonnet-4-5-20250929"})}const de=p.replace("/test-config","/test-history"),le=await fetch(de,{headers:{Authorization:R?`Bearer ${R}`:""}});if(le.ok){const ae=await le.json();ae.success&&((E=ae.data)!=null&&E.history)&&(k.value=ae.data.history)}}catch(R){V("加载配置失败: "+R.message,"error")}finally{A.value=!1}}}async function se(){if(c.account){_.value=!0;try{const N=localStorage.getItem("authToken"),E=c.account.platform;let R="";if(E==="claude")R=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{_.value=!1;return}const y=await fetch(R,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:N?`Bearer ${N}`:""},body:JSON.stringify({enabled:T.value.enabled,cronExpression:T.value.cronExpression,model:T.value.model})});if(y.ok)V("配置已保存","success"),z("saved"),ge();else{const p=await y.json().catch(()=>({}));V(p.message||"保存失败","error")}}catch(N){V("保存失败: "+N.message,"error")}finally{_.value=!1}}}function ge(){_.value||z("close")}return ve(()=>c.show,N=>{N&&(T.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},k.value=[],M())}),(N,E)=>{var R;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Bx,[e("div",{class:"absolute inset-0",onClick:ge}),e("div",Gx,[e("div",Fx,[e("div",Qx,[E[4]||(E[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[E[3]||(E[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Hx,u(((R=F.account)==null?void 0:R.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:_.value,onClick:ge},E[5]||(E[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Jx)]),e("div",Yx,[A.value?(o(),n("div",Zx,E[6]||(E[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(ke,{key:1},[e("div",Xx,[E[7]||(E[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:$(["relative h-6 w-11 rounded-full transition-colors duration-200",T.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:E[0]||(E[0]=y=>T.value.enabled=!T.value.enabled)},[e("span",{class:$(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",T.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",ef,[E[8]||(E[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":E[1]||(E[1]=y=>T.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,tf),[[j,T.value.cronExpression]]),E[9]||(E[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",af,[E[10]||(E[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",rf,[(o(),n(ke,null,Ne(P,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.cronExpression=y.value},u(y.label),11,sf)),64))])]),e("div",lf,[E[11]||(E[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":E[2]||(E[2]=y=>T.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,of),[[j,T.value.model]]),e("div",nf,[(o(),n(ke,null,Ne(O,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.model=y.value},u(y.label),11,df)),64))])]),k.value.length>0?(o(),n("div",uf,[E[12]||(E[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",pf,[(o(!0),n(ke,null,Ne(k.value,(y,p)=>(o(),n("div",{key:p,class:"flex items-center justify-between text-xs"},[e("div",gf,[e("i",{class:$(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",cf,u(Y(y.timestamp)),1)]),y.latencyMs?(o(),n("span",yf,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,mf)):m("",!0)]))),128))])])):(o(),n("div",xf,E[13]||(E[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",ff,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:_.value,onClick:ge}," 取消 ",8,bf),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",_.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:_.value||A.value,onClick:se},[e("i",{class:$(["fas",_.value?"fa-spinner fa-spin":"fa-save"])},null,2),f(" "+u(_.value?"保存中...":"保存配置"),1)],10,vf)])])])):m("",!0)])}}},hf={class:"min-w-[200px] space-y-1"},wf={key:0,class:"flex items-center gap-2"},$f={key:1,class:"flex items-center gap-2"},Af={class:"text-xs text-red-600 dark:text-red-400"},Cf=["disabled"],Tf={key:2,class:"space-y-1"},If={key:0,class:"text-xs text-red-500"},Uf={class:"flex items-center justify-between gap-2"},_f={class:"flex items-center gap-2"},Kf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Sf=["disabled","title"],Mf={key:1,class:"space-y-2"},Df={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Pf={class:"space-y-1"},jf=["title"],Vf={class:"flex w-[94px] flex-col gap-0.5"},zf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},Lf={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},Rf={key:0,class:"text-gray-400 dark:text-gray-400"},Of={key:2,class:"space-y-1"},Ef={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Nf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},qf={class:"flex items-center justify-between text-xs"},Wf={class:"text-gray-500 dark:text-gray-400"},Bf={key:0,class:"text-gray-400 dark:text-gray-500"},Gf={key:3,class:"flex items-center gap-2"},Ff={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},Qf={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},fr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(z.initialBalance),T=v(!1),k=v(!1),P=v(null),O=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":W==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":W==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":W==="local"}}),Y=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{api:"API",cache:"缓存",local:"本地"}[W]||"未知"}),M=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.quota;return!W||W.unlimited||typeof W.percentage!="number"||!Number.isFinite(W.percentage)?null:{used:W.used??0,remaining:W.remaining??0,percentage:W.percentage,resetAt:W.resetAt||null}}),se=Z(()=>{var W,Q;return((Q=(W=_.value)==null?void 0:W.quota)==null?void 0:Q.type)==="antigravity"}),ge=Z(()=>{var C,G;if(!se.value)return[];const W=(G=(C=_.value)==null?void 0:C.quota)==null?void 0:G.buckets,Q=Array.isArray(W)?W:[],H=new Map(Q.map(K=>[K==null?void 0:K.category,K])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],X={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(K=>{var Fe,Qe;const Ce=H.get(K)||null,ze=Ce==null?void 0:Ce.remaining,Ke=Number.isFinite(Number(ze))?Math.max(0,Math.min(100,Number(ze))):null;return{category:K,remainingPercent:Ke,remainingText:Ke===null?"—":`${Math.round(Ke)}%`,resetAt:(Ce==null?void 0:Ce.resetAt)||null,dotClass:((Fe=X[K])==null?void 0:Fe.dotClass)||"bg-gray-400",barClass:((Qe=X[K])==null?void 0:Qe.barClass)||"bg-gray-400"}})}),N=Z(()=>{var Q;const W=((Q=M.value)==null?void 0:Q.percentage)||0;return W>=90?"bg-red-500 dark:bg-red-600":W>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),E=Z(()=>{if(z.queryMode==="api"||z.queryMode==="auto")return!0;const W=_.value;return!W||W.scriptEnabled===!1?!1:!!W.scriptConfigured}),R=Z(()=>{var W;return k.value?"刷新中...":E.value?se.value?"刷新配额(调用 Antigravity API)":"刷新余额(调用脚本配置的余额 API)":((W=_.value)==null?void 0:W.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=Z(()=>{var Q,H,h,X;if((H=(Q=_.value)==null?void 0:Q.balance)!=null&&H.formattedAmount)return _.value.balance.formattedAmount;const W=Number(((X=(h=_.value)==null?void 0:h.statistics)==null?void 0:X.dailyCost)||0);return`今日成本 ${ae(W)}`}),p=async()=>{if(!z.autoLoad||!z.accountId||!z.platform)return;T.value=!0,P.value=null;const W={platform:z.platform,queryApi:z.queryMode==="api"?!0:z.queryMode==="auto"?"auto":!1},Q=await Mr(z.accountId,W);Q!=null&&Q.success?_.value=Q.data:P.value=(Q==null?void 0:Q.error)||"加载失败",T.value=!1},D=async()=>{if(!z.accountId||!z.platform||k.value||!E.value)return;k.value=!0,P.value=null;const W=await Dr(z.accountId,{platform:z.platform});W!=null&&W.success?(_.value=W.data,A("refreshed",W.data)):P.value=(W==null?void 0:W.error)||"刷新失败",k.value=!1},de=async()=>{await p()},le=W=>{if(W===1/0)return"∞";const Q=Number(W);return Number.isFinite(Q)?se.value?`${Math.round(Q)}%`:Je(Q):"N/A"},ae=W=>{const Q=Number(W);return Number.isFinite(Q)?Q>=1?`$${Q.toFixed(2)}`:Q>=.01?`$${Q.toFixed(3)}`:`$${Q.toFixed(6)}`:"$0.00"},oe=W=>{const Q=new Date(W),H=new Date,h=Q.getTime()-H.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const X=Math.floor(h/(1e3*60)),C=Math.floor(X/60),G=X%60;return C>=24?`${Math.floor(C/24)}天后`:`${C}小时${G}分钟`},he=W=>{const Q=new Date(W);return Number.isNaN(Q.getTime())?"未知":Q.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return ve(()=>z.initialBalance,W=>{W&&(_.value=W)}),ra(()=>{z.initialBalance||p()}),_e({refresh:D,reload:de}),(W,Q)=>{var H;return o(),n("div",hf,[T.value?(o(),n("div",wf,Q[0]||(Q[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):P.value?(o(),n("div",$f,[Q[1]||(Q[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",Af,u(P.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:k.value,onClick:de}," 重试 ",8,Cf)])):_.value?(o(),n("div",Tf,[_.value.status==="error"&&_.value.error?(o(),n("div",If,u(_.value.error),1)):m("",!0),e("div",Uf,[e("div",_f,[e("i",{class:$(["fas",_.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",Kf,u(y.value),1),e("span",{class:$(["rounded px-1.5 py-0.5 text-xs",O.value])},u(Y.value),3)]),F.hideRefresh?m("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:k.value||!E.value,title:R.value,onClick:D},[e("i",{class:$(["fas fa-sync-alt",{"fa-spin":k.value}])},null,2)],8,Sf))]),M.value&&se.value?(o(),n("div",Mf,[e("div",Df,[Q[2]||(Q[2]=e("span",null,"剩余",-1)),e("span",null,u(le(M.value.remaining)),1)]),e("div",Pf,[(o(!0),n(ke,null,Ne(ge.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:$(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,jf),e("div",Vf,[e("div",zf,[e("div",{class:$(["h-1.5 rounded-full transition-all",h.barClass]),style:Ze({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",Lf,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",Rf,u(oe(h.resetAt)),1)):m("",!0)])])]))),128))])])):M.value?(o(),n("div",Of,[e("div",Ef,[e("span",null,"已用: "+u(le(M.value.used)),1),e("span",null,"剩余: "+u(le(M.value.remaining)),1)]),e("div",Nf,[e("div",{class:$(["h-1.5 rounded-full transition-all",N.value]),style:Ze({width:`${Math.min(100,M.value.percentage)}%`})},null,6)]),e("div",qf,[e("span",Wf,u(M.value.percentage.toFixed(1))+"% 已使用 ",1),M.value.resetAt?(o(),n("span",Bf," 重置: "+u(oe(M.value.resetAt)),1)):m("",!0)])])):(H=_.value.quota)!=null&&H.unlimited?(o(),n("div",Gf,Q[3]||(Q[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):m("",!0),_.value.cacheExpiresAt&&_.value.source==="cache"?(o(),n("div",Ff," 缓存至: "+u(he(_.value.cacheExpiresAt)),1)):m("",!0)])):(o(),n("div",Qf,"暂无余额数据"))])}}},Hf={class:"space-y-4"},Jf={class:"grid gap-3 md:grid-cols-2"},Yf={class:"space-y-2"},Zf={class:"space-y-2"},Xf={class:"space-y-2"},eb={class:"space-y-2"},tb={class:"space-y-2"},ab={class:"space-y-2"},rb={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},sb={class:"flex items-center justify-between"},lb={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},ob={key:0},nb={key:1,class:"text-red-500"},ib={class:"text-xs text-gray-500 dark:text-gray-400"},db={class:"mt-1 whitespace-pre-wrap break-all"},ub={class:"text-xs text-gray-500 dark:text-gray-400"},pb={class:"mt-1 whitespace-pre-wrap break-all"},gb={class:"flex items-center gap-2"},br=`({
+ request: {
+ url: "{{baseUrl}}/api/user/self",
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": "Bearer {{apiKey}}",
+ "New-Api-User": "{{extra}}"
+ }
+ },
+ extractor: function (response) {
+ if (response && response.success && response.data) {
+ const quota = response.data.quota || 0;
+ const used = response.data.used_quota || 0;
+ return {
+ planName: response.data.group || "默认套餐",
+ remaining: quota / 500000,
+ used: used / 500000,
+ total: (quota + used) / 500000,
+ unit: "USD"
+ };
+ }
+ return {
+ isValid: false,
+ invalidMessage: (response && response.message) || "查询失败"
+ };
+ }
+})`,cb={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v(null),k=hr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),P=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:br}),O=()=>z("close"),Y=()=>{Object.assign(k,P()),T.value=null,A.value=!1,_.value=!1},M=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;const y=await Ns(c.account.id,c.account.platform);y!=null&&y.success&&y.data&&Object.assign(k,y.data)},se=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;A.value=!0;const y=await Es(c.account.id,c.account.platform,{...k});y!=null&&y.success?(V("已保存","success"),z("saved")):V((y==null?void 0:y.message)||"保存失败","error"),A.value=!1},ge=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;_.value=!0,T.value=null;const y=await Os(c.account.id,c.account.platform,{...k});y!=null&&y.success?(T.value=y.data,V("测试完成","success")):V((y==null?void 0:y.error)||"测试失败","error"),_.value=!1},N=()=>{k.scriptBody=br},E=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),R=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return ve(()=>c.show,y=>{y&&(Y(),M())}),(y,p)=>{var le;const D=qr,de=kr;return o(),Xe(de,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":F.show,title:`配置余额脚本 - ${((le=F.account)==null?void 0:le.name)||""}`,top:"5vh",width:"720px",onClose:O},{footer:ot(()=>[e("div",gb,[Ve(D,{loading:_.value,onClick:ge},{default:ot(()=>p[20]||(p[20]=[f("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ve(D,{loading:A.value,type:"primary",onClick:se},{default:ot(()=>p[21]||(p[21]=[f("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ve(D,{onClick:O},{default:ot(()=>p[22]||(p[22]=[f("取消",-1)])),_:1,__:[22]})])]),default:ot(()=>{var ae,oe,he,W,Q,H;return[e("div",Hf,[e("div",Jf,[e("div",Yf,[p[7]||(p[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":p[0]||(p[0]=h=>k.apiKey=h),class:"input-text",placeholder:"access token / key"},null,512),[[j,k.apiKey]])]),e("div",Zf,[p[8]||(p[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址(baseUrl)",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=h=>k.baseUrl=h),class:"input-text",placeholder:"https://api.example.com"},null,512),[[j,k.baseUrl]])]),e("div",Xf,[p[9]||(p[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token(可选)",-1)),b(e("input",{"onUpdate:modelValue":p[2]||(p[2]=h=>k.token=h),class:"input-text",placeholder:"Bearer token"},null,512),[[j,k.token]])]),e("div",eb,[p[10]||(p[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=h=>k.extra=h),class:"input-text",placeholder:"用户ID等"},null,512),[[j,k.extra]])]),e("div",tb,[p[11]||(p[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=h=>k.timeoutSeconds=h),class:"input-text",min:"1",type:"number"},null,512),[[j,k.timeoutSeconds,void 0,{number:!0}]])]),e("div",ab,[p[12]||(p[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=h=>k.autoIntervalMinutes=h),class:"input-text",min:"0",type:"number"},null,512),[[j,k.autoIntervalMinutes,void 0,{number:!0}]]),p[13]||(p[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),p[14]||(p[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[p[15]||(p[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:N}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":p[6]||(p[6]=h=>k.scriptBody=h),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[j,k.scriptBody]]),p[16]||(p[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回:isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),T.value?(o(),n("div",rb,[e("div",sb,[p[17]||(p[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:$(["rounded px-2 py-0.5 text-xs",((ae=T.value.mapped)==null?void 0:ae.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((oe=T.value.mapped)==null?void 0:oe.status)||"unknown"),3)]),e("div",lb,[e("div",null,"余额: "+u(E((he=T.value.mapped)==null?void 0:he.balance)),1),e("div",null,"单位: "+u(((W=T.value.mapped)==null?void 0:W.currency)||"—"),1),(Q=T.value.mapped)!=null&&Q.planName?(o(),n("div",ob,"套餐: "+u(T.value.mapped.planName),1)):m("",!0),(H=T.value.mapped)!=null&&H.errorMessage?(o(),n("div",nb," 错误: "+u(T.value.mapped.errorMessage),1)):m("",!0)]),e("details",ib,[p[18]||(p[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",db,u(R(T.value.extracted)),1)]),e("details",ub,[p[19]||(p[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",pb,u(R(T.value.response)),1)])])):m("",!0)])]}),_:1},8,["model-value","title"])}}},yb=sa(cb,[["__scopeId","data-v-5e76f743"]]),mb={class:"accounts-container"},xb={class:"card p-4 sm:p-6"},fb={class:"mb-4 flex flex-col gap-4 sm:mb-6"},bb={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},vb={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},kb={class:"group relative min-w-[160px]"},hb={class:"group relative min-w-[140px]"},wb={class:"group relative min-w-[160px]"},$b={class:"group relative min-w-[120px]"},Ab={class:"group relative min-w-[200px]"},Cb={class:"relative flex items-center"},Tb={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Ib={class:"relative"},Ub={class:"relative"},_b=["disabled"],Kb={class:"relative"},Sb=["disabled"],Mb={class:"relative"},Db={class:"relative"},Pb={key:0,class:"py-12 text-center"},jb={key:1,class:"py-12 text-center"},Vb={key:2,class:"table-wrapper hidden md:block"},zb={class:"w-full"},Lb={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Rb={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Ob={class:"flex items-center"},Eb=["indeterminate"],Nb={key:1,class:"fas fa-sort ml-1 text-gray-400"},qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Wb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Bb={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Gb={class:"flex items-center gap-2"},Fb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Hb={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Jb={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Yb={class:"flex items-center"},Zb=["value"],Xb={class:"flex items-center"},ev={class:"min-w-0"},tv={class:"flex items-center gap-2"},av=["onClick"],rv={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},sv={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},lv={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},ov={key:0,class:"my-2 flex flex-wrap items-center gap-2"},nv=["title"],iv=["title"],dv={class:"px-3 py-4"},uv={class:"flex items-center gap-1"},pv={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},gv={class:"text-xs font-medium text-yellow-700"},cv={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},yv={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},mv={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},xv={class:"text-xs font-medium text-gray-950"},fv={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},bv={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},vv={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},kv={class:"text-xs font-semibold text-indigo-800"},hv={class:"text-xs font-medium text-indigo-700"},wv={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},$v={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},Av={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Cv={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},Tv={key:10,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},Iv={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},Uv={class:"flex flex-col gap-1"},_v={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Kv={key:0},Sv={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Mv=["title"],Dv={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Pv={class:"whitespace-nowrap px-3 py-4 text-sm"},jv={key:0,class:"space-y-1"},Vv={class:"flex items-center gap-2"},zv={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Lv={class:"flex items-center gap-2"},Rv={class:"text-xs text-gray-600 dark:text-gray-300"},Ov={class:"flex items-center gap-2"},Ev={class:"text-xs text-gray-600 dark:text-gray-300"},Nv={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-xs text-gray-400"},Wv={class:"whitespace-nowrap px-3 py-4"},Bv={class:"mt-1 text-xs"},Gv=["onClick"],Fv={class:"whitespace-nowrap px-3 py-4"},Qv={key:0,class:"space-y-2"},Hv={key:0,class:"space-y-2"},Jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Yv={class:"flex items-center gap-2"},Zv={class:"flex-1"},Xv={class:"flex items-center gap-2"},e1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},t1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},a1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},r1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},s1={class:"flex items-center gap-2"},l1={class:"flex-1"},o1={class:"flex items-center gap-2"},n1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},i1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},d1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},u1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},p1={class:"flex items-center gap-2"},g1={class:"flex-1"},c1={class:"flex items-center gap-2"},y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},m1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},x1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},f1={key:1,class:"space-y-2"},b1={key:0,class:"flex items-center gap-3 text-xs"},v1={class:"flex items-center gap-1"},k1={class:"font-medium text-gray-900 dark:text-gray-100"},h1={class:"flex items-center gap-1"},w1={class:"font-medium text-gray-900 dark:text-gray-100"},$1={class:"flex items-center gap-2"},A1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},C1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},T1={class:"text-xs text-gray-600 dark:text-gray-400"},I1={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},U1={key:2,class:"text-xs text-gray-400"},_1={key:1,class:"space-y-3"},K1={class:"flex items-center justify-between text-xs"},S1={class:"font-medium text-gray-700 dark:text-gray-200"},M1={class:"flex items-center gap-2"},D1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},P1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},j1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={class:"ml-2 text-gray-400"},z1={key:1,class:"text-sm text-gray-400"},L1={class:"space-y-1"},R1={class:"flex items-center justify-between text-xs"},O1={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},E1={key:0,class:"flex items-center gap-2"},N1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},q1={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},W1={key:2,class:"space-y-2"},B1={key:0,class:"space-y-2"},G1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},F1={class:"flex items-center gap-2"},Q1={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},H1={class:"flex-1"},J1={class:"flex items-center gap-2"},Y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Z1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},X1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ek={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},tk={class:"flex items-center gap-2"},ak={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},rk={class:"flex-1"},sk={class:"flex items-center gap-2"},lk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ok={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},nk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ik={key:1,class:"text-sm text-gray-400"},dk={key:3,class:"text-sm text-gray-400"},uk={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},pk={class:"whitespace-nowrap px-3 py-4"},gk={key:0,class:"flex items-center gap-2"},ck={class:"h-2 w-16 rounded-full bg-gray-200"},yk={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},mk={key:1,class:"text-sm text-gray-400"},xk={class:"px-3 py-4 text-sm text-gray-600"},fk=["title"],bk={key:1,class:"text-gray-400"},vk={class:"whitespace-nowrap px-3 py-4"},kk={class:"flex flex-col gap-1"},hk={key:0},wk=["onClick"],$k=["onClick"],Ak=["onClick"],Ck=["onClick"],Tk={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},Ik={key:0,class:"flex items-center gap-1"},Uk=["disabled","title","onClick"],_k=["disabled","title","onClick"],Kk={class:"ml-1"},Sk=["onClick"],Mk=["onClick"],Dk=["onClick"],Pk=["onClick"],jk=["onClick"],Vk={key:1,class:"flex items-center gap-1"},zk=["disabled","title","onClick"],Lk={class:"ml-1"},Rk=["onClick"],Ok={key:3,class:"space-y-3 md:hidden"},Ek={class:"mb-3 flex items-start justify-between"},Nk={class:"flex items-center gap-3"},qk=["value"],Wk=["onClick"],Bk={class:"mt-0.5 flex items-center gap-2"},Gk={class:"text-xs text-gray-500 dark:text-gray-400"},Fk={class:"text-xs text-gray-500 dark:text-gray-400"},Qk={class:"mb-3 grid grid-cols-2 gap-3"},Hk={class:"space-y-1"},Jk={class:"flex items-center gap-1.5"},Yk={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Zk={class:"flex items-center gap-1.5"},Xk={class:"text-xs text-gray-600 dark:text-gray-400"},e2={class:"flex items-center gap-1.5"},t2={class:"text-xs text-gray-600 dark:text-gray-400"},a2={key:0,class:"space-y-1"},r2={class:"flex items-center gap-1.5"},s2={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},l2={class:"flex items-center gap-1.5"},o2={class:"text-xs text-gray-600 dark:text-gray-400"},n2={key:1,class:"text-sm font-semibold text-gray-400"},i2={class:"mb-3"},d2={class:"mt-1 text-xs"},u2=["onClick"],p2={class:"mb-3 space-y-2"},g2={key:0,class:"space-y-2"},c2={key:0,class:"space-y-2"},y2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},m2={class:"flex items-center gap-2"},x2={class:"flex-1"},f2={class:"flex items-center gap-2"},b2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},v2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},k2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},h2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},w2={class:"flex items-center gap-2"},$2={class:"flex-1"},A2={class:"flex items-center gap-2"},C2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},T2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},I2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},U2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},_2={class:"flex items-center gap-2"},K2={class:"flex-1"},S2={class:"flex items-center gap-2"},M2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},D2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},P2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},j2={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},V2={class:"flex items-center justify-between text-xs"},z2={class:"flex items-center gap-1"},L2={class:"font-medium text-gray-700 dark:text-gray-200"},R2={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},O2={class:"flex items-center justify-between text-xs"},E2={class:"text-gray-500 dark:text-gray-400"},N2={key:0,class:"font-medium text-indigo-600"},q2={key:1,class:"text-gray-500"},W2={key:2,class:"text-xs text-gray-400"},B2={key:1,class:"space-y-2"},G2={key:0,class:"space-y-2"},F2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Q2={class:"flex items-center gap-2"},H2={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},J2={class:"flex-1"},Y2={class:"flex items-center gap-2"},Z2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},X2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},e3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},t3={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},a3={class:"flex items-center gap-2"},r3={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},s3={class:"flex-1"},l3={class:"flex items-center gap-2"},o3={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},n3={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},i3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},d3={key:1,class:"text-xs text-gray-400"},u3={class:"flex items-center justify-between text-xs"},p3={class:"text-gray-700 dark:text-gray-200"},g3={key:2,class:"flex items-center justify-between text-xs"},c3={class:"text-gray-700 dark:text-gray-200"},y3={class:"flex items-center justify-between text-xs"},m3={class:"font-medium text-gray-700 dark:text-gray-200"},x3={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},f3=["disabled","onClick"],b3=["onClick"],v3=["onClick"],k3=["onClick"],h3=["onClick"],w3=["onClick"],$3={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},A3={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},C3={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},T3={class:"flex items-center gap-2"},I3=["value"],U3={class:"flex items-center gap-2"},_3=["disabled"],K3={class:"flex items-center gap-1"},S3={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},M3=["onClick"],D3={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},P3=["disabled"],j3={class:"space-y-4"},V3={class:"overflow-x-auto"},z3={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},L3={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},R3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},O3={class:"text-green-600 dark:text-green-400"},E3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},N3={class:"text-yellow-600 dark:text-yellow-400"},q3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},W3={class:"text-orange-600 dark:text-orange-400"},B3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G3={class:"text-orange-600 dark:text-orange-400"},F3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Q3={class:"text-orange-600 dark:text-orange-400"},H3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},J3={class:"text-orange-600 dark:text-orange-400"},Y3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Z3={class:"text-orange-600 dark:text-orange-400"},X3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},e5={class:"text-red-600 dark:text-red-400"},t5={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},a5={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},r5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},s5={class:"text-green-600 dark:text-green-400"},l5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},o5={class:"text-yellow-600 dark:text-yellow-400"},n5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},i5={class:"text-orange-600 dark:text-orange-400"},d5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},u5={class:"text-orange-600 dark:text-orange-400"},p5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},g5={class:"text-orange-600 dark:text-orange-400"},c5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},y5={class:"text-orange-600 dark:text-orange-400"},m5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},x5={class:"text-orange-600 dark:text-orange-400"},f5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},b5={class:"text-red-600 dark:text-red-400"},v5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},vr="accountsPageSize",k5={__name:"AccountsView",setup(F){const _e=v(!1),c=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let z=null;const A=(r,s,x="继续",w="取消")=>new Promise(l=>{c.value={title:r,message:s,confirmText:x,cancelText:w},z=l,_e.value=!0}),_=()=>{_e.value=!1,z==null||z(!0),z=null},T=()=>{_e.value=!1,z==null||z(!1),z=null},k=v([]),P=v(!1),O=v(!1),Y=v("name"),M=v("asc"),se=v([]),ge=v({}),N=v([]),E=v("all"),R=v("all"),y=v("all"),p=v(""),D=()=>{const r=localStorage.getItem(vr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},de=[10,20,50,100],le=v(D()),ae=v(1),oe=v([]),he=v(!1),W=v(!1),Q=v(!1),H=v(!1),h=v(!1),X=v(null),C=v([]),G=v({}),K=v({}),Ce=v(""),ze=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],Ke=v(null),Fe=v(null),Qe=v(!1),xe=v(null),g=v(!1),a=v(null),U=v(!1),re=v(!1),ne=v(null),Re=v(!1),Oe=v(!1),st=v(!1),nt=v(!1),at=v(!1),Dt=v(new Map),Pt=v([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),jt=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],I={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},Tt={claude:()=>wr(),"claude-console":()=>$r(),bedrock:()=>Ar(),gemini:()=>Cr(),openai:()=>Tr(),azure_openai:()=>Ir(),"openai-responses":()=>Ur(),ccr:()=>Ws(),droid:()=>_r(),"gemini-api":()=>qs()},gt=Object.keys(Tt),ht=r=>r==="all"?gt:I[r]?I[r]:gt.includes(r)?[r]:gt,ct=Z(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return jt.forEach(s=>{var x;r.push({...s,indent:0,isGroup:!0}),(x=s.children)==null||x.forEach(w=>{r.push({...w,indent:1,parent:s.value})})}),r}),Vt=v([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),wt=Z(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return N.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),B=Z(()=>Q.value),q=v(!1),Ee=v(null),We=v(!1),ut=v(null),Nt=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(w=>{if(typeof w=="string"){const l=w.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(w=>{if(w&&typeof w.name=="string"){const l=w.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([w,l])=>{if(typeof l=="string"){const te=w.toLowerCase();if(te.includes("name")||te.includes("email")){const we=l.trim();we&&s.add(we)}}}),Array.from(s)},qt=(r,s)=>s?Nt(r).some(x=>x.toLowerCase().includes(s)):!0,$t=r=>!!r&&ze.includes(r.platform),zt=r=>{var x;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((x=r.rateLimitStatus)==null?void 0:x.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return zt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>ba(r)}),$t(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>It(r)}),At(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>Ct(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>Ut(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},It=async r=>{if(!$t(r)){V("该账户类型暂不支持查看详情","warning");return}X.value=r,H.value=!0,h.value=!0,C.value=[],G.value={},K.value={},Ce.value="";const s=await Js(r.id,r.platform,30);if(s.success){const x=s.data||{};C.value=x.history||[],G.value=x.summary||{},K.value=x.overview||{},Ce.value=x.generatedAt||""}else V(s.error||"加载账号使用详情失败","error");h.value=!1},it=()=>{H.value=!1,h.value=!1,X.value=null},Ya=["claude","claude-console","bedrock","gemini","openai-responses","azure-openai","droid","ccr"],At=r=>!!r&&Ya.includes(r.platform),Ct=r=>{if(!At(r)){V("该账户类型暂不支持测试","warning");return}xe.value=r,Qe.value=!0},Wt=()=>{Qe.value=!1,xe.value=null},Ut=r=>{if(!At(r)){V("该账户类型暂不支持定时测试","warning");return}a.value=r,g.value=!0},Bt=()=>{g.value=!1,a.value=null},Gt=()=>{V("定时测试配置已保存","success")},Ft=v(!1),Rt=v(null),$a=r=>{Rt.value=r,Ft.value=!0},Aa=()=>{Ft.value=!1,Rt.value=null},Ca=async()=>{V("余额脚本已保存","success");const r=Rt.value;if(Aa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await Mr(r.id,{platform:r.platform,queryApi:!1});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},yt=Z(()=>{let r=k.value;const s=p.value.trim();if(s){const w=s.toLowerCase();r=r.filter(l=>qt(l,w))}return y.value!=="all"&&(r=r.filter(w=>{const l=xt(w),te=w.status==="blocked"||w.status==="unauthorized";return y.value==="rateLimited"?w.isActive&&l:y.value==="normal"?w.isActive&&!l&&!te&&w.schedulable!==!1:y.value==="unschedulable"?w.isActive&&!l&&!te&&w.schedulable===!1:y.value==="other"?!l&&(!w.isActive||te):!0})),Y.value?[...r].sort((w,l)=>{var ce,Te,ee,fe,Ae,ue,be,Ge,Be,ir,dr,ur;let te=w[Y.value],we=l[Y.value];if(Y.value==="dailyTokens"?(te=((Te=(ce=w.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0,we=((fe=(ee=l.usage)==null?void 0:ee.daily)==null?void 0:fe.allTokens)||0):Y.value==="dailyRequests"?(te=((ue=(Ae=w.usage)==null?void 0:Ae.daily)==null?void 0:ue.requests)||0,we=((Ge=(be=l.usage)==null?void 0:be.daily)==null?void 0:Ge.requests)||0):Y.value==="totalTokens"&&(te=((ir=(Be=w.usage)==null?void 0:Be.total)==null?void 0:ir.allTokens)||0,we=((ur=(dr=l.usage)==null?void 0:dr.total)==null?void 0:ur.allTokens)||0),Y.value==="lastUsed"&&(te=w.lastUsedAt?new Date(w.lastUsedAt).getTime():0,we=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),Y.value==="status"&&(te=w.isActive?1:0,we=l.isActive?1:0),Y.value==="rateLimitTime"){const er=xt(w),tr=xt(l),pr=er?ft(w):0,gr=tr?ft(l):0;return!er&&tr?-1:er&&!tr?1:prgr?1:0}return tewe?M.value==="asc"?1:-1:0}):r}),De=Z(()=>{const r=yt.value.length;return Math.ceil(r/le.value)||0}),la=Z(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const x=k.value.filter(ue=>ue.platform===s.value),w=x.filter(ue=>xt(ue)),l=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable!==!1}).length,te=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable===!1}).length,we=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&(!ue.isActive||Ge)}).length,ce=w.filter(ue=>{const be=ft(ue);return be>0&&be<=60}).length,Te=w.filter(ue=>{const be=ft(ue);return be>60&&be<=300}).length,ee=w.filter(ue=>{const be=ft(ue);return be>300&&be<=720}).length,fe=w.filter(ue=>{const be=ft(ue);return be>720&&be<=1440}).length,Ae=w.filter(ue=>ft(ue)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:te,rateLimit0_1h:ce,rateLimit1_5h:Te,rateLimit5_12h:ee,rateLimit12_24h:fe,rateLimitOver24h:Ae,other:we,total:x.length}}).filter(s=>s.total>0)),dt=Z(()=>la.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),_t=Z(()=>{const r=De.value,s=ae.value,x=[];if(r<=7)for(let w=1;w<=r;w++)x.push(w);else{let w=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(w=r-4);for(let te=w;te<=l;te++)x.push(te)}return x}),mt=Z(()=>{const r=_t.value;return r.length===0?!1:r[0]>1}),oa=Z(()=>{const r=_t.value;return r.length===0?!1:r[r.length-1]{const r=_t.value;return r.length===0?!1:mt.value&&r[0]>2}),Ia=Z(()=>{const r=_t.value;return r.length===0?!1:oa.value&&r[r.length-1]{const r=(ae.value-1)*le.value,s=r+le.value;return yt.value.slice(r,s)}),na=Z(()=>{const r=pt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const x=s==null?void 0:s.balanceInfo;return(x==null?void 0:x.scriptEnabled)!==!1&&!!(x!=null&&x.scriptConfigured)})}),Ua=Z(()=>P.value?"正在加载账户...":O.value?"刷新中...":na.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{k.value=k.value.map(x=>x.id!==r?x:{...x,balanceInfo:s})},ia=(r,s)=>{const x=(s==null?void 0:s.message)||"余额查询失败";V(x,"error")},_a=async()=>{if(O.value)return;const r=pt.value;if(!r||r.length===0)return;const s=r.filter(w=>{const l=w==null?void 0:w.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){V("当前页没有配置余额脚本的账户","warning");return}const x=r.length-s.length;O.value=!0;try{const w=await Promise.all(s.map(async Te=>{try{const ee=await Dr(Te.id,{platform:Te.platform});return{id:Te.id,success:!!(ee!=null&&ee.success),data:(ee==null?void 0:ee.data)||null}}catch(ee){return{id:Te.id,success:!1,error:(ee==null?void 0:ee.message)||"刷新失败"}}})),l=w.reduce((Te,ee)=>(ee.success&&ee.data&&(Te[ee.id]=ee.data),Te),{}),te=w.filter(Te=>Te.success).length,we=w.length-te,ce=x>0?`,跳过 ${x} 个未配置脚本`:"";Object.keys(l).length>0&&(k.value=k.value.map(Te=>{const ee=l[Te.id];return ee?{...Te,balanceInfo:ee}:Te})),we===0?V(`成功刷新 ${te} 个账户余额${ce}`,"success"):V(`刷新完成:${te} 成功,${we} 失败${ce}`,"warning")}finally{O.value=!1}},rt=()=>{const r=pt.value.map(w=>w.id),s=r.filter(w=>oe.value.includes(w)).length,x=r.length;s===0?(he.value=!1,W.value=!1):s===x?(he.value=!0,W.value=!1):(he.value=!1,W.value=!0)},Ka=()=>{if(he.value)pt.value.forEach(r=>{oe.value.includes(r.id)||oe.value.push(r.id)});else{const r=new Set(pt.value.map(s=>s.id));oe.value=oe.value.filter(s=>!r.has(s))}rt()},Sa=()=>{Q.value=!Q.value,Q.value?rt():(oe.value=[],he.value=!1,W.value=!1)},da=()=>{const r=new Set(k.value.map(s=>s.id));oe.value=oe.value.filter(s=>r.has(s)),rt()},Ma=async()=>{const r=k.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const w=(await Promise.all(s.map(async l=>{try{const te=await Fs(l,{queryApi:!1});return{platform:l,success:!!(te!=null&&te.success),data:(te==null?void 0:te.data)||[]}}catch(te){return console.debug(`Failed to load balance cache for ${l}:`,te),{platform:l,success:!1,data:[]}}}))).reduce((l,te)=>(te.success&&(Array.isArray(te.data)?te.data:[]).forEach(ce=>{var ee;const Te=(ee=ce==null?void 0:ce.data)==null?void 0:ee.accountId;Te&&(l[Te]=ce.data)}),l),{});Object.keys(w).length!==0&&(k.value=k.value.map(l=>({...l,balanceInfo:w[l.id]||l.balanceInfo||null})))},lt=async(r=!1)=>{P.value=!0;try{const s={};R.value!=="all"&&!I[R.value]&&(s.platform=R.value),E.value!=="all"&&(s.groupId=E.value);const x=ht(R.value);await Promise.all([ua(r),pa(r)]);const w=await Promise.all(x.map(async ee=>{const fe=Tt[ee];if(!fe)return{platform:ee,success:!0,data:[]};try{const Ae=await fe(s);return{platform:ee,success:Ae==null?void 0:Ae.success,data:Ae==null?void 0:Ae.data}}catch(Ae){return console.debug(`Failed to load ${ee} accounts:`,Ae),{platform:ee,success:!1,data:[]}}})),l=[],te=ge.value||{};let we=[];const ce=(ee,fe)=>{const Ae=Array.isArray(fe)?fe:[];if(Ae.length!==0)switch(ee){case"claude":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude",boundApiKeysCount:Ge}});l.push(...ue);break}case"claude-console":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeConsoleAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude-console",boundApiKeysCount:Ge}});l.push(...ue);break}case"bedrock":{const ue=Ae.map(be=>({...be,platform:"bedrock",boundApiKeysCount:0}));l.push(...ue);break}case"gemini":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"gemini",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.openaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"azure_openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.azureOpenaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"azure_openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai-responses":{we=Ae;break}case"ccr":{const ue=Ae.map(be=>({...be,platform:"ccr",boundApiKeysCount:0}));l.push(...ue);break}case"droid":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.droidAccountId)==null?void 0:Be[be.id])||be.boundApiKeysCount||0;return{...be,platform:"droid",boundApiKeysCount:Ge}});l.push(...ue);break}case"gemini-api":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[`api:${be.id}`])||0;return{...be,platform:"gemini-api",boundApiKeysCount:Ge}});l.push(...ue);break}default:break}};if(w.forEach(({platform:ee,success:fe,data:Ae})=>{fe&&ce(ee,Ae||[])}),we.length>0){const ee=we.map(fe=>{var ue;const Ae=((ue=te.openaiAccountId)==null?void 0:ue[`responses:${fe.id}`])||0;return{...fe,platform:"openai-responses",boundApiKeysCount:Ae}});l.push(...ee)}let Te=l;E.value!=="all"&&(E.value==="ungrouped"?Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0):Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0?!1:ee.groupInfos.some(fe=>fe.id===E.value))),Te=Te.map(ee=>{const fe=ga(ee.proxyConfig||ee.proxy);return{...ee,proxyConfig:fe||null}}),k.value=Te,da(),Te.some(ee=>ee.platform==="claude")&&Da().catch(ee=>{console.debug("Claude usage loading failed:",ee)}),Ma().catch(ee=>{console.debug("Balance cache loading failed:",ee)})}catch{V("加载账户失败","error")}finally{P.value=!1}},Da=async()=>{const r=await Gs();if(r.success&&r.data){const s=r.data;k.value=k.value.map(x=>x.platform==="claude"&&s[x.id]?{...x,claudeUsage:s[x.id]}:x)}};let Ht="name";const Kt=r=>{r&&(Y.value===r?M.value=M.value==="asc"?"desc":"asc":(Y.value=r,M.value="asc"),Ht=r)},Pa=r=>{r===Ht?M.value=M.value==="asc"?"desc":"asc":M.value="asc",Ht=r},ja=r=>{if(!r)return"从未使用";const s=new Date(r),w=new Date-s;return w<6e4?"刚刚":w<36e5?`${Math.floor(w/6e4)} 分钟前`:w<864e5?`${Math.floor(w/36e5)} 小时前`:w<6048e5?`${Math.floor(w/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Va=()=>{p.value="",ae.value=1},ua=async(r=!1)=>{if(!r&&st.value)return;const s=await Bs();s.success&&(ge.value=s.data||{},st.value=!0)},za=async(r=!1)=>{var x;if(!r&&Oe.value)return;const s=await Ys();s.success&&(se.value=((x=s.data)==null?void 0:x.items)||s.data||[],Oe.value=!0)},pa=async(r=!1)=>{if(!r&&nt.value)return;const s=await sr();s.success&&(N.value=s.data||[],nt.value=!0)},La=()=>{Oe.value=!1,st.value=!1,nt.value=!1,at.value=!1,Dt.value.clear()},Ra=()=>{ae.value=1,lt()},Oa=()=>{ae.value=1,lt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const x=s.proxy&&typeof s.proxy=="object"?s.proxy:s,w=typeof x.host=="string"?x.host.trim():x.host!==void 0&&x.host!==null?String(x.host).trim():"",l=x.port!==void 0&&x.port!==null?String(x.port).trim():"";if(!w||!l)return null;const te=typeof x.type=="string"&&x.type.trim()?x.type.trim():"socks5",we=typeof x.username=="string"?x.username:x.username!==void 0&&x.username!==null?String(x.username):"",ce=typeof x.password=="string"?x.password:x.password!==void 0&&x.password!==null?String(x.password):"";return{type:te,host:w,port:l,username:we,password:ce}}const Jt=r=>{const s=ga(r);if(!s)return null;const x=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let w=s.host;w.length>15&&(w=w.substring(0,12)+"...");let l=`${x}://${w}:${s.port}`;return s.username&&(l=`${x}://***@${w}:${s.port}`),l},ca=(r,s)=>{if(!r||!s)return"--";const x=new Date(r),w=new Date(s),l=x.getHours().toString().padStart(2,"0"),te=x.getMinutes().toString().padStart(2,"0"),we=w.getHours().toString().padStart(2,"0"),ce=w.getMinutes().toString().padStart(2,"0");return`${l}:${te} - ${we}:${ce}`},ya=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),x=r%60;return s>0?`${s}小时${x}分钟`:`${x}分钟`},Ea=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),x=r%1440,w=Math.floor(x/60),l=x%60;return s>0?w>0?`${s}天${w}小时`:`${s}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:`${l}分钟`},xt=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,ft=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const x=new Date(s.rateLimitResetAt).getTime()-Date.now();return x>0?Math.ceil(x/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),w=new Date(r.rateLimitUntil).getTime()-s;return w>0?Math.ceil(w/6e4):0}return 0},Na=()=>{Ee.value=null,q.value=!0},ma=()=>{q.value=!1,Ee.value=null},Yt=r=>{ut.value=r,We.value=!0},xa=r=>!r||!r.id?[]:se.value.filter(s=>{const x=r.id;return s.claudeAccountId===x||s.claudeConsoleAccountId===x||s.geminiAccountId===x||s.openaiAccountId===x||s.azureOpenaiAccountId===x||s.openaiAccountId===`responses:${x}`||s.geminiAccountId===`api:${x}`}),qa=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},fa=async r=>{const s=qa(r);if(!s)return{success:!1,message:"不支持的账户类型"};const x=await Sr(s);return x.success?{success:!0,data:x}:{success:!1,message:x.message||"删除失败"}},Zt=async r=>{const x=xa(r).length;let w=`确定要删除账户 "${r.name}" 吗?`;if(x>0&&(w+=`
+
+⚠️ 注意:此账号有 ${x} 个 API Key 绑定。`,w+=`
+删除后,这些 API Key 将自动切换为共享池模式。`),w+=`
+
+此操作不可恢复。`,!await A("删除账户",w,"删除","取消"))return;const te=await fa(r);if(te.success){const we=te.data;let ce="账户已成功删除";(we==null?void 0:we.unboundKeys)>0&&(ce+=`,${we.unboundKeys} 个 API Key 已切换为共享池模式`),V(ce,"success"),oe.value=oe.value.filter(Te=>Te!==r.id),rt(),at.value=!1,Oe.value=!1,st.value=!1,lt(),za(!0),ua(!0)}else V(te.message||"删除失败","error")},Wa=async()=>{var ee;if(oe.value.length===0){V("请先选择要删除的账户","warning");return}const r=new Map(k.value.map(fe=>[fe.id,fe])),s=oe.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(s.length===0){V("选中的账户已不存在","warning"),oe.value=[],rt();return}let x=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const w=s.map(fe=>({account:fe,boundKeys:xa(fe)})).filter(fe=>fe.boundKeys.length>0);if(w.length>0&&(x+=`
+
+⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,w.forEach(({account:fe,boundKeys:Ae})=>{const ue=fe.name||fe.email||fe.accountName||fe.id;x+=`
+- ${ue}: ${Ae.length} 个`}),x+=`
+删除后,这些 API Key 将切换为共享池模式。`),x+=`
+
+请再次确认是否继续。`,!await A("批量删除账户",x,"删除","取消"))return;let te=0,we=0,ce=0;const Te=[];for(const fe of s){const Ae=await fa(fe);Ae.success?(te+=1,ce+=((ee=Ae.data)==null?void 0:ee.unboundKeys)||0):(we+=1,Te.push({name:fe.name||fe.email||fe.accountName||fe.id,message:Ae.message||"删除失败"}))}if(te>0){let fe=`成功删除 ${te} 个账户`;ce>0&&(fe+=`,${ce} 个 API Key 已切换为共享池模式`),V(fe,we>0?"warning":"success"),oe.value=[],he.value=!1,W.value=!1,at.value=!1,Oe.value=!1,await lt(!0)}if(we>0){const fe=Te.map(Ae=>`${Ae.name}: ${Ae.message}`).join(`
+`);V(`有 ${we} 个账户删除失败:
+${fe}`,te>0?"warning":"error")}rt()},ba=async r=>{if(!(r.isResetting||!await A("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消")))try{r.isResetting=!0;let x="";if(r.platform==="openai")x=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")x=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")x=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")x=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")x=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")x=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")x=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")x=`/admin/gemini-accounts/${r.id}/reset-status`;else{V("不支持的账户类型","error"),r.isResetting=!1;return}const w=await Hs(x);w.success?(V("账户状态已重置","success"),lt(!0)):V(w.message||"状态重置失败","error"),r.isResetting=!1}catch(x){V(x.message||"状态重置失败","error"),r.isResetting=!1}},Xt=async r=>{if(r.isTogglingSchedulable)return;r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{V("该账户类型暂不支持调度控制","warning"),r.isTogglingSchedulable=!1;return}const x=await Kr(s);x.success?(r.schedulable=x.schedulable,V(x.schedulable?"已启用调度":"已禁用调度","success")):V(x.message||"操作失败","error"),r.isTogglingSchedulable=!1},d=()=>{q.value=!1,V("账户创建成功","success"),La(),lt()},t=()=>{We.value=!1,V("账户更新成功","success"),at.value=!1,lt()},ie=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",ye=()=>"OAuth",i=()=>"OAuth",pe=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const x=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof x=="string"&&x.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},me=r=>pe(r)==="API Key",qe=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(x=>x.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const x=JSON.parse(r.apiKeys);if(Array.isArray(x))return x.filter(w=>w.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const x of s){const w=Number(x);if(Number.isFinite(w)&&w>=0)return w}return 0},He=r=>{const s=qe(r),x="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[x,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[x,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},Le=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},S=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},L=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",$e=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",J=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Se=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const w=String(r).toLowerCase();return w==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":w==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Pe=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ue=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,et=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},tt=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},bt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,x=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,w=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return x!==null&&(w!==null&&w<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=bt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},Ot=r=>{const s=bt(r);return s===null?"--":`${s.toFixed(1)}%`},ta=r=>{const s=bt(r);return s===null?"0%":`${s}%`},aa=r=>r==="secondary"?"周限":"5h",St=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),te=s%60;return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${te}秒`},Ba=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?0:s/x*100},Vr=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const x=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,x/s*100)},zr=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Lr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const x=Number((r==null?void 0:r.activeTaskCount)||0);return x>=s?"text-red-600 dark:text-red-400":x>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Rr=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?"0.00":Math.max(0,x-s).toFixed(2)},lr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Ba(r.usage.daily.cost):"0.0000";ve(p,()=>{ae.value=1,rt()}),ve(le,r=>{localStorage.setItem(vr,r.toString()),rt()}),ve(()=>yt.value.length,()=>{ae.value>De.value&&(ae.value=De.value||1),rt()}),ve(ae,()=>{rt()}),ve(pt,()=>{rt(),ar(()=>{va()})}),ve(k,()=>{da()});const or=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Or=r=>r?new Date(r){if(!r)return!1;const s=new Date,w=(new Date(r)-s)/(1e3*60*60*24);return w>0&&w<=7},Ga=r=>{Ke.value=r},nr=()=>{Ke.value=null},Nr=async({accountId:r,expiresAt:s})=>{try{const x=k.value.find(te=>te.id===r);if(!x){V("未找到账户","error");return}let w="";switch(x.platform){case"claude":case"claude-oauth":w=`/admin/claude-accounts/${r}`;break;case"gemini":w=`/admin/gemini-accounts/${r}`;break;case"claude-console":w=`/admin/claude-console-accounts/${r}`;break;case"bedrock":w=`/admin/bedrock-accounts/${r}`;break;case"ccr":w=`/admin/ccr-accounts/${r}`;break;case"openai":w=`/admin/openai-accounts/${r}`;break;case"droid":w=`/admin/droid-accounts/${r}`;break;case"azure_openai":w=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":w=`/admin/openai-responses-accounts/${r}`;break;default:V(`不支持的平台类型: ${x.platform}`,"error");return}const l=await Zs(w,{expiresAt:s||null});l.success?(V("账户到期时间已更新","success"),x.expiresAt=s||null,nr()):(V(l.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving())}catch(x){V(x.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving()}},va=()=>{ne.value&&(Re.value=ne.value.scrollWidth>ne.value.clientWidth)};let Fa=null;return ra(()=>{lt(!0),ar(()=>{ne.value&&(Fa=new ResizeObserver(()=>{va()}),Fa.observe(ne.value),va())}),window.addEventListener("resize",va)}),Ha(()=>{Fa&&Fa.disconnect(),window.removeEventListener("resize",va)}),(r,s)=>{const x=Wr,w=kr;return o(),n("div",mb,[e("div",xb,[e("div",fb,[s[45]||(s[45]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",bb,[e("div",vb,[e("div",kb,[s[29]||(s[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:Y.value,"onUpdate:modelValue":s[0]||(s[0]=l=>Y.value=l),icon:M.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Pt.value,placeholder:"选择排序",onChange:Pa},null,8,["modelValue","icon","options"])]),e("div",hb,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:R.value,"onUpdate:modelValue":s[1]||(s[1]=l=>R.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Ra},null,8,["modelValue","options"])]),e("div",wb,[s[31]||(s[31]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:E.value,"onUpdate:modelValue":s[2]||(s[2]=l=>E.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:wt.value,placeholder:"选择分组",onChange:Oa},null,8,["modelValue","options"])]),e("div",$b,[s[32]||(s[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:y.value,"onUpdate:modelValue":s[3]||(s[3]=l=>y.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Vt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",Ab,[s[35]||(s[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Cb,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>p.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[j,p.value]]),s[34]||(s[34]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),p.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Va},s[33]||(s[33]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):m("",!0)])])]),e("div",Tb,[e("div",Ib,[Ve(x,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>U.value=!0)},s[36]||(s[36]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",Ub,[Ve(x,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value,onClick:[s[6]||(s[6]=vt(l=>lt(!0),["ctrl","exact"])),s[7]||(s[7]=vt(l=>lt(!1),["exact"])),s[8]||(s[8]=vt(l=>lt(!0),["meta","exact"]))]},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-green-500",P.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新",-1))],8,_b)]),_:1})]),e("div",Kb,[Ve(x,{content:Ua.value,effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value||O.value||!na.value,onClick:_a},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-blue-500",O.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[40]||(s[40]=e("span",{class:"relative"},"刷新余额",-1))],8,Sb)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Sa},[e("i",{class:$(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Q.value?"取消选择":"选择"),1)]),e("div",Mb,[Ve(x,{content:"管理账户分组",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[9]||(s[9]=l=>re.value=!0)},s[41]||(s[41]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-layer-group relative text-purple-500"},null,-1),e("span",{class:"relative"},"分组",-1)]))]),_:1})]),oe.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Wa},[s[42]||(s[42]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[43]||(s[43]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Db,"删除选中 ("+u(oe.value.length)+")",1)])):m("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:vt(Na,["stop"])},s[44]||(s[44]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),P.value?(o(),n("div",Pb,s[46]||(s[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):yt.value.length===0?(o(),n("div",jb,s[47]||(s[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",Vb,[e("div",{ref_key:"tableContainerRef",ref:ne,class:"table-container"},[e("table",zb,[e("thead",Lb,[e("tr",null,[B.value?(o(),n("th",Rb,[e("div",Ob,[b(e("input",{"onUpdate:modelValue":s[10]||(s[10]=l=>he.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:W.value,type:"checkbox",onChange:Ka},null,40,Eb),[[je,he.value]])])])):m("",!0),e("th",{class:$(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",B.value?"left-[50px]":"left-0"]),onClick:s[11]||(s[11]=l=>Kt("name"))},[s[48]||(s[48]=f(" 名称 ",-1)),Y.value==="name"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Nb))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Kt("platform"))},[s[49]||(s[49]=f(" 平台/类型 ",-1)),Y.value==="platform"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",qb))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Kt("status"))},[s[50]||(s[50]=f(" 状态 ",-1)),Y.value==="status"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Wb))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[57]||(s[57]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Bb,[e("div",Gb,[s[53]||(s[53]=e("span",null,"会话窗口",-1)),Ve(x,{placement:"top"},{content:ot(()=>s[51]||(s[51]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:ot(()=>[s[52]||(s[52]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[52]})])]),s[58]||(s[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Kt("priority"))},[s[54]||(s[54]=f(" 优先级 ",-1)),Y.value==="priority"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Fb))]),s[59]||(s[59]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[15]||(s[15]=l=>Kt("expiresAt"))},[s[55]||(s[55]=f(" 到期时间 ",-1)),Y.value==="expiresAt"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Qb))]),e("th",{class:$(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",Re.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Hb,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we;return o(),n("tr",{key:l.id,class:"table-row"},[B.value?(o(),n("td",Jb,[e("div",Yb,[b(e("input",{"onUpdate:modelValue":s[16]||(s[16]=ce=>oe.value=ce),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,Zb),[[je,oe.value]])])])):m("",!0),e("td",{class:$(["name-column sticky z-10 px-3 py-4",B.value?"left-[50px]":"left-0"])},[e("div",Xb,[s[64]||(s[64]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",ev,[e("div",tv,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ce=>Ye(cr)(l.name),["stop"])},u(l.name),9,av),l.accountType==="dedicated"?(o(),n("span",rv,s[60]||(s[60]=[e("i",{class:"fas fa-lock mr-1"},null,-1),f("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",sv,s[61]||(s[61]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),f("分组调度 ",-1)]))):(o(),n("span",lv,s[62]||(s[62]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),f("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",ov,[(o(!0),n(ke,null,Ne(l.groupInfos,ce=>(o(),n("span",{key:ce.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${ce.name}`},[s[63]||(s[63]=e("i",{class:"fas fa-folder mr-1"},null,-1)),f(u(ce.name),1)],8,nv))),128))])):m("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,iv)])])],2),e("td",dv,[e("div",uv,[l.platform==="gemini"?(o(),n("div",pv,[s[65]||(s[65]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[66]||(s[66]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[67]||(s[67]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",gv,u(ye()),1)])):l.platform==="claude-console"?(o(),n("div",cv,s[68]||(s[68]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",yv,s[69]||(s[69]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",mv,[s[70]||(s[70]=e("div",{class:"fa-openai"},null,-1)),s[71]||(s[71]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[72]||(s[72]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",xv,u(i()),1)])):l.platform==="azure_openai"?(o(),n("div",fv,s[73]||(s[73]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",bv,s[74]||(s[74]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",vv,[s[75]||(s[75]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",kv,u(Le(l)),1),s[76]||(s[76]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",hv,u(ie(l)),1)])):l.platform==="ccr"?(o(),n("div",wv,s[77]||(s[77]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",$v,[s[79]||(s[79]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[80]||(s[80]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[81]||(s[81]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Av,u(pe(l)),1),me(l)?(o(),n("span",{key:0,class:$(He(l))},[s[78]||(s[78]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(qe(l)),1)],2)):m("",!0)])):l.platform==="gemini-api"?(o(),n("div",Cv,s[82]||(s[82]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",Tv,s[83]||(s[83]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",Iv,[e("div",Uv,[e("span",{class:$(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:$(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),f(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",_v,[s[84]||(s[84]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[85]||(s[85]=f(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",Kv,"("+u(Ea(l.rateLimitStatus.minutesRemaining))+")",1)):m("",!0)])):m("",!0),l.schedulable===!1?(o(),n("span",Sv,[s[87]||(s[87]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[88]||(s[88]=f(" 不可调度 ",-1)),S(l)?(o(),Xe(x,{key:0,content:S(l),effect:"dark",placement:"top"},{default:ot(()=>s[86]||(s[86]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[86]},1032,["content"])):m("",!0)])):m("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,Mv)):m("",!0),l.accountType==="dedicated"?(o(),n("span",Dv," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):m("",!0)])]),e("td",Pv,[l.usage&&l.usage.daily?(o(),n("div",jv,[e("div",Vv,[s[89]||(s[89]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",zv,u(l.usage.daily.requests||0)+" 次",1)]),e("div",Lv,[s[90]||(s[90]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Rv,u(Ye(Je)(l.usage.daily.allTokens||0)),1)]),e("div",Ov,[s[91]||(s[91]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Ev,"$"+u(lr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",Nv," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):m("",!0)])):(o(),n("div",qv,"暂无数据"))]),e("td",Wv,[Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ce=>ia(l.id,ce),onRefreshed:ce=>Qt(l.id,ce)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Bv,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ce=>$a(l)}," 配置余额脚本 ",8,Gv))])]),e("td",Fv,[l.platform==="claude"?(o(),n("div",Qv,[Me(l)&&l.claudeUsage?(o(),n("div",Hv,[e("div",Jv,[e("div",Yv,[s[92]||(s[92]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Zv,[e("div",Xv,[e("div",e1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",t1,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",a1," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",r1,[e("div",s1,[s[93]||(s[93]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",l1,[e("div",o1,[e("div",n1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",i1,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",d1," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",u1,[e("div",p1,[s[94]||(s[94]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",g1,[e("div",c1,[e("div",y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",m1,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",x1," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",f1,[l.usage&&l.usage.sessionWindow?(o(),n("div",b1,[e("div",v1,[s[95]||(s[95]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",k1,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",h1,[s[96]||(s[96]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",w1," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):m("",!0),e("div",$1,[e("div",A1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",C1,u(l.sessionWindow.progress)+"% ",1)]),e("div",T1,[e("div",null,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",I1," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):m("",!0)])])):(o(),n("div",U1,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",_1,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(ke,{key:0},[e("div",K1,[s[97]||(s[97]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",S1,u(Za(l).toFixed(1))+"% ",1)]),e("div",M1,[e("div",D1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Vr(Za(l))]),style:Ze({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",P1," $"+u(Ba(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",j1,[f(" 剩余 $"+u(Rr(l))+" ",1),e("span",V1,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",z1,s[98]||(s[98]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",L1,[e("div",R1,[s[99]||(s[99]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",O1,u(Xa(l).toFixed(0))+"% ",1)):m("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",E1,[e("div",N1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",zr(Xa(l))]),style:Ze({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:$(["min-w-[48px] text-xs font-medium",Lr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",q1,s[100]||(s[100]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",W1,[l.codexUsage?(o(),n("div",B1,[e("div",G1,[e("div",F1,[e("span",Q1,u(aa("primary")),1),e("div",H1,[e("div",J1,[e("div",Y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",Z1,u(Ot(l.codexUsage.primary)),1)])])]),e("div",X1," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",ek,[e("div",tk,[e("span",ak,u(aa("secondary")),1),e("div",rk,[e("div",sk,[e("div",lk,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",ok,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",nk," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):(o(),n("div",ik,s[101]||(s[101]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",dk,s[102]||(s[102]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",uk,u(ja(l.lastUsedAt)),1),e("td",pk,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",gk,[e("div",ck,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Ze({width:101-(l.priority||50)+"%"})},null,4)]),e("span",yk,u(l.priority||50),1)])):(o(),n("div",mk,s[103]||(s[103]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",xk,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,fk)):(o(),n("div",bk,"无代理"))]),e("td",vk,[e("div",kk,[l.expiresAt?(o(),n("span",hk,[Or(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[104]||(s[104]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),f(" 已过期 ",-1)]),8,wk)):Er(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},[s[105]||(s[105]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),f(" "+u(or(l.expiresAt)),1)],8,$k)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},u(or(l.expiresAt)),9,Ak))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[106]||(s[106]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),f(" 永不过期 ",-1)]),8,Ck))])]),e("td",Tk,[Re.value?(o(),n("div",Vk,[e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Lk,u(l.schedulable?"调度":"停用"),1)],10,zk),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[113]||(s[113]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Rk),Ve(el,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",Ik,[zt(l)?(o(),n("button",{key:0,class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:ce=>ba(l)},[e("i",{class:$(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[107]||(s[107]=e("span",{class:"ml-1"},"重置状态",-1))],10,Uk)):m("",!0),e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Kk,u(l.schedulable?"调度":"停用"),1)],10,_k),$t(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:ce=>It(l)},s[108]||(s[108]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Sk)):m("",!0),At(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:ce=>Ct(l)},s[109]||(s[109]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,Mk)):m("",!0),At(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:ce=>Ut(l)},s[110]||(s[110]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,Dk)):m("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[111]||(s[111]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Pk),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:ce=>Zt(l)},s[112]||(s[112]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,jk)]))])])}),128))])])],512)])),!P.value&&yt.value.length>0?(o(),n("div",Ok,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we,ce,Te;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ek,[e("div",Nk,[B.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[17]||(s[17]=ee=>oe.value=ee),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,qk)),[[je,oe.value]]):m("",!0),e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:$(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ee=>Ye(cr)(l.name||l.email),["stop"])},u(l.name||l.email),9,Wk),e("div",Bk,[e("span",Gk,u(l.platform),1),s[114]||(s[114]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Fk,u(l.type),1)])])]),e("span",{class:$(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",$e(l)])},[e("div",{class:$(["mr-1.5 h-1.5 w-1.5 rounded-full",J(l)])},null,2),f(" "+u(L(l)),1)],2)]),e("div",Qk,[e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Hk,[e("div",Jk,[s[115]||(s[115]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Yk,u(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.requests)||0)+" 次 ",1)]),e("div",Zk,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Xk,u(Ye(Je)(((Te=(ce=l.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0)),1)]),e("div",e2,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",t2," $"+u(lr(l)),1)])])]),e("div",null,[s[121]||(s[121]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",a2,[e("div",r2,[s[119]||(s[119]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",s2,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",l2,[s[120]||(s[120]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",o2," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",n2,"-"))])]),e("div",i2,[s[122]||(s[122]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ee=>ia(l.id,ee),onRefreshed:ee=>Qt(l.id,ee)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",d2,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ee=>$a(l)}," 配置余额脚本 ",8,u2))])]),e("div",p2,[l.platform==="claude"?(o(),n("div",g2,[Me(l)&&l.claudeUsage?(o(),n("div",c2,[e("div",y2,[e("div",m2,[s[123]||(s[123]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",x2,[e("div",f2,[e("div",b2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",v2,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",k2," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",h2,[e("div",w2,[s[124]||(s[124]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",$2,[e("div",A2,[e("div",C2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",T2,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",I2," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",U2,[e("div",_2,[s[125]||(s[125]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",K2,[e("div",S2,[e("div",M2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",D2,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",P2," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",j2,[e("div",V2,[e("div",z2,[s[127]||(s[127]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ve(x,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:ot(()=>s[126]||(s[126]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[126]})]),e("span",L2,u(l.sessionWindow.progress)+"% ",1)]),e("div",R2,[e("div",{class:$(["h-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",O2,[e("span",E2,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",N2," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):(o(),n("span",q2," 已结束 "))])])):(o(),n("div",W2,"暂无统计"))])):l.platform==="openai"?(o(),n("div",B2,[l.codexUsage?(o(),n("div",G2,[e("div",F2,[e("div",Q2,[e("span",H2,u(aa("primary")),1),e("div",J2,[e("div",Y2,[e("div",Z2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",X2,u(Ot(l.codexUsage.primary)),1)])])]),e("div",e3," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",t3,[e("div",a3,[e("span",r3,u(aa("secondary")),1),e("div",s3,[e("div",l3,[e("div",o3,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",n3,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",i3," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):m("",!0),l.codexUsage?m("",!0):(o(),n("div",d3,"暂无统计"))])):m("",!0),e("div",u3,[s[128]||(s[128]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",p3,u(l.lastUsedAt?Ye(Qs)(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",g3,[s[129]||(s[129]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",c3,u(l.proxyConfig.type.toUpperCase()),1)])):m("",!0),e("div",y3,[s[130]||(s[130]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",m3,u(l.priority||50),1)])]),e("div",x3,[e("button",{class:$(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:ee=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),f(" "+u(l.schedulable?"暂停":"启用"),1)],10,f3),$t(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:ee=>It(l)},s[131]||(s[131]=[e("i",{class:"fas fa-chart-line"},null,-1),f(" 详情 ",-1)]),8,b3)):m("",!0),At(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:ee=>Ct(l)},s[132]||(s[132]=[e("i",{class:"fas fa-vial"},null,-1),f(" 测试 ",-1)]),8,v3)):m("",!0),At(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:ee=>Ut(l)},s[133]||(s[133]=[e("i",{class:"fas fa-clock"},null,-1),f(" 定时 ",-1)]),8,k3)):m("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:ee=>Yt(l)},s[134]||(s[134]=[e("i",{class:"fas fa-edit mr-1"},null,-1),f(" 编辑 ",-1)]),8,h3),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:ee=>Zt(l)},s[135]||(s[135]=[e("i",{class:"fas fa-trash"},null,-1)]),8,w3)])])}),128))])):m("",!0)]),!P.value&&yt.value.length>0?(o(),n("div",$3,[e("div",A3,[e("span",C3," 共 "+u(yt.value.length)+" 条记录 ",1),e("div",T3,[s[136]||(s[136]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[18]||(s[18]=l=>le.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[19]||(s[19]=l=>ae.value=1)},[(o(),n(ke,null,Ne(de,l=>e("option",{key:l,value:l},u(l),9,I3)),64))],544),[[wa,le.value]]),s[137]||(s[137]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",U3,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===1,onClick:s[20]||(s[20]=l=>ae.value--)},s[138]||(s[138]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,_3),e("div",K3,[mt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>ae.value=1)}," 1 ")):m("",!0),Ta.value?(o(),n("span",S3," ... ")):m("",!0),(o(!0),n(ke,null,Ne(_t.value,l=>(o(),n("button",{key:l,class:$(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===ae.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:te=>ae.value=l},u(l),11,M3))),128)),Ia.value?(o(),n("span",D3," ... ")):m("",!0),oa.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[22]||(s[22]=l=>ae.value=De.value)},u(De.value),1)):m("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===De.value||De.value===0,onClick:s[23]||(s[23]=l=>ae.value++)},s[139]||(s[139]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,P3)])])):m("",!0),q.value&&(!Ee.value||Ee.value!=="ccr")?(o(),Xe(mr,{key:1,onClose:ma,onPlatformChanged:s[24]||(s[24]=l=>Ee.value=l),onSuccess:d})):q.value&&Ee.value==="ccr"?(o(),Xe(xr,{key:2,onClose:ma,onSuccess:d})):m("",!0),We.value&&ut.value&&ut.value.platform==="ccr"?(o(),Xe(xr,{key:3,account:ut.value,onClose:s[25]||(s[25]=l=>We.value=!1),onSuccess:t},null,8,["account"])):We.value?(o(),Xe(mr,{key:4,account:ut.value,onClose:s[26]||(s[26]=l=>We.value=!1),onSuccess:t},null,8,["account"])):m("",!0),Ve(Ja,{"cancel-text":c.value.cancelText,"confirm-text":c.value.confirmText,message:c.value.message,show:_e.value,title:c.value.title,onCancel:T,onConfirm:_},null,8,["cancel-text","confirm-text","message","show","title"]),H.value?(o(),Xe(Fm,{key:5,account:X.value||{},"generated-at":Ce.value,history:C.value,loading:h.value,overview:K.value,show:H.value,summary:G.value,onClose:it},null,8,["account","generated-at","history","loading","overview","show","summary"])):m("",!0),Ve(xx,{ref_key:"expiryEditModalRef",ref:Fe,account:Ke.value||{id:null,expiresAt:null,name:""},show:!!Ke.value,onClose:nr,onSave:Nr},null,8,["account","show"]),Ve(Wx,{account:xe.value,show:Qe.value,onClose:Wt},null,8,["account","show"]),Ve(kf,{account:a.value,show:g.value,onClose:Bt,onSaved:Gt},null,8,["account","show"]),Ve(yb,{account:Rt.value,show:Ft.value,onClose:Aa,onSaved:Ca},null,8,["account","show"]),Ve(w,{modelValue:U.value,"onUpdate:modelValue":s[27]||(s[27]=l=>U.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:ot(()=>[e("div",j3,[e("div",V3,[e("table",z3,[s[141]||(s[141]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(ke,null,Ne(la.value,l=>(o(),n("tr",{key:l.platform},[e("td",L3,u(l.platformLabel),1),e("td",R3,[e("span",O3,u(l.normal),1)]),e("td",E3,[e("span",N3,u(l.unschedulable),1)]),e("td",q3,[e("span",W3,u(l.rateLimit0_1h),1)]),e("td",B3,[e("span",G3,u(l.rateLimit1_5h),1)]),e("td",F3,[e("span",Q3,u(l.rateLimit5_12h),1)]),e("td",H3,[e("span",J3,u(l.rateLimit12_24h),1)]),e("td",Y3,[e("span",Z3,u(l.rateLimitOver24h),1)]),e("td",X3,[e("span",e5,u(l.other),1)]),e("td",t5,u(l.total),1)]))),128)),e("tr",a5,[s[140]||(s[140]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",r5,[e("span",s5,u(dt.value.normal),1)]),e("td",l5,[e("span",o5,u(dt.value.unschedulable),1)]),e("td",n5,[e("span",i5,u(dt.value.rateLimit0_1h),1)]),e("td",d5,[e("span",u5,u(dt.value.rateLimit1_5h),1)]),e("td",p5,[e("span",g5,u(dt.value.rateLimit5_12h),1)]),e("td",c5,[e("span",y5,u(dt.value.rateLimit12_24h),1)]),e("td",m5,[e("span",x5,u(dt.value.rateLimitOver24h),1)]),e("td",f5,[e("span",b5,u(dt.value.other),1)]),e("td",v5,u(dt.value.total),1)])])])]),s[142]||(s[142]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"]),re.value?(o(),Xe(jr,{key:6,onClose:s[28]||(s[28]=l=>re.value=!1),onRefresh:pa})):m("",!0)])}}},U5=sa(k5,[["__scopeId","data-v-f3c6543e"]]);export{U5 as default};
diff --git a/web/admin-spa/dist/assets/ActionDropdown-4ngn0-GS.js b/assets/ActionDropdown-GADQlLlI.js
similarity index 98%
rename from web/admin-spa/dist/assets/ActionDropdown-4ngn0-GS.js
rename to assets/ActionDropdown-GADQlLlI.js
index 8eb0f86a..aef3e0e2 100644
--- a/web/admin-spa/dist/assets/ActionDropdown-4ngn0-GS.js
+++ b/assets/ActionDropdown-GADQlLlI.js
@@ -1 +1 @@
-import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-B3t2NHq9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
+import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-DV7DYXbz.js";import{_ as J}from"./index-BahP9Xx9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
diff --git a/assets/ApiKeyUsageRecordsView-B36TikZ_.js b/assets/ApiKeyUsageRecordsView-B36TikZ_.js
deleted file mode 100644
index ab056744..00000000
--- a/assets/ApiKeyUsageRecordsView-B36TikZ_.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BUfCkBQO.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as ue,r as b,_ as z,o as L,q as ge,x as i,z as e,R as g,P as r,u as p,J as h,O as I,Q as $,ac as O,aU as pe,y as d,I as A}from"./vue-vendor-R8HMg95E.js";import{c as J,s as Y}from"./index-B3t2NHq9.js";import{f as x,R as xe}from"./RecordDetailModal-CIaCpUK_.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ue(),W=pe(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[T(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||C(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(`
-`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ge(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(p(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(p(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[g(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[g(c,{label:"时间降序",value:"desc"}),g(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(p(x)(a.inputTokens)),1),e("td",Qe,r(p(x)(a.outputTokens)),1),e("td",We,r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("td",Ze,r(p(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(p(x)(a.totalTokens)),1),e("div",null,"输入:"+r(p(x)(a.inputTokens)),1),e("div",null,"输出:"+r(p(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),g(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),g(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default};
diff --git a/assets/ApiKeyUsageRecordsView-DEBCoJV1.js b/assets/ApiKeyUsageRecordsView-DEBCoJV1.js
new file mode 100644
index 00000000..d34e476a
--- /dev/null
+++ b/assets/ApiKeyUsageRecordsView-DEBCoJV1.js
@@ -0,0 +1,2 @@
+import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BSjV1f9S.js";import{b as A}from"./vendor-Dr8jvgFu.js";import{c as F,aX as ge,r as b,_ as z,o as H,q as ue,x as c,z as e,R as p,P as o,u as i,J as h,O as C,Q as $,ac as O,aU as pe,y as d,I as L}from"./vue-vendor-DV7DYXbz.js";import{c as I,f as x,a3 as J,s as N}from"./index-BahP9Xx9.js";import{R as xe}from"./RecordDetailModal-iWzEw88d.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ne={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ue={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ye={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Ke={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Me={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"flex flex-col"},Ae={class:"font-semibold"},He={class:"text-xs text-gray-500 dark:text-gray-400"},Le={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},We={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ge(),X=pe(),_=F(()=>Q.params.keyId),U=b(!1),S=b(!1),D=b([]),Y=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=F(()=>P.name||P.id||_.value),K=F(()=>!s.dateRange||s.dateRange.length!==2?"":`${I(s.dateRange[0])} ~ ${I(s.dateRange[1])}`),T=r=>{const t=typeof r=="number"?r:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},M=r=>{const t={page:r,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=A(s.dateRange[0]).toISOString(),t.endDate=A(s.dateRange[1]).toISOString()),t},G=r=>{var m,k,v,a;D.value=r.records||[];const t=r.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=r.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const g=r.summary||{};y.totalRequests=g.totalRequests||0,y.totalTokens=g.totalTokens||0,y.totalCost=g.totalCost||0,y.avgCost=g.avgCost||0,P.id=((m=r.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=r.apiKeyInfo)==null?void 0:k.name)||"",Y.value=((v=r.availableFilters)==null?void 0:v.models)||[],B.value=((a=r.availableFilters)==null?void 0:a.accounts)||[]},w=async(r=n.currentPage)=>{U.value=!0;try{const t=await J(_.value,M(r));G(t.data||{})}catch(t){N(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{U.value=!1}},W=r=>{n.currentPage=r,w(r)},ee=r=>{n.pageSize=r,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=r=>{E.value=r,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{X.push("/api-keys")},oe=async()=>{var r;if(!S.value){S.value=!0;try{const t=[];let l=1,g=1;const m=50;for(;l<=g&&l<=m;){const V=(await J(_.value,{...M(l),pageSize:200})).data||{};t.push(...V.records||[]),g=((r=V.pagination)==null?void 0:r.totalPages)||1,l+=1}if(t.length===0){N("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[I(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||T(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(`
+`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),N("导出 CSV 成功","success")}catch(t){N(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return H(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),H(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ue(()=>{w()}),(r,t)=>{const l=le,g=ce,m=ne,k=de,v=ie;return d(),c("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,o(Z.value),1),e("p",_e,"ID: "+o(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),K.value?(d(),c("span",be,o(K.value),1)):(d(),c("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,o(i(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,o(i(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",De,o(T(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,o(T(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[p(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),p(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),c($,null,O(Y.value,a=>(d(),L(g,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),p(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),c($,null,O(B.value,a=>(d(),L(g,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),p(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[p(g,{label:"时间降序",value:"desc"}),p(g,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),p(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),C(" 重置 ",-1)])),_:1,__:[10]}),p(k,{loading:S.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),C(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[U.value?(d(),c("div",Ne,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),C(" 加载中... ",-1)]))):(d(),c("div",Ue,[D.value.length===0?(d(),c("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),c("div",Ee,[e("div",Fe,[e("table",Ye,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(d(!0),c($,null,O(D.value,a=>(d(),c("tr",{key:a.timestamp+a.model},[e("td",Ke,o(i(I)(a.timestamp)),1),e("td",Me,[e("div",qe,[e("span",Ae,o(a.accountName||"未知账户"),1),e("span",He,o(a.accountTypeName||"未知渠道"),1)])]),e("td",Le,o(a.model),1),e("td",Je,o(i(x)(a.inputTokens)),1),e("td",Qe,o(i(x)(a.outputTokens)),1),e("td",Xe,o(i(x)(a.cacheCreateTokens))+" / "+o(i(x)(a.cacheReadTokens)),1),e("td",Ze,o(i(x)(a.totalTokens)),1),e("td",Ge,o(a.costFormatted||T(a.cost)),1),e("td",We,[p(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[C("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),c($,null,O(D.value,a=>(d(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,o(a.accountName||"未知账户"),1),e("p",st,o(i(I)(a.timestamp)),1)]),p(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[C("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+o(a.model),1),e("div",null,"总 Token:"+o(i(x)(a.totalTokens)),1),e("div",null,"输入:"+o(i(x)(a.inputTokens)),1),e("div",null,"输出:"+o(i(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+o(i(x)(a.cacheCreateTokens))+" / "+o(i(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+o(a.costFormatted||T(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+o(n.totalRecords)+" 条记录 ",1),p(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:W,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),p(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default};
diff --git a/assets/ApiKeysView-DZf3x888.js b/assets/ApiKeysView-DZf3x888.js
new file mode 100644
index 00000000..6d3bda45
--- /dev/null
+++ b/assets/ApiKeysView-DZf3x888.js
@@ -0,0 +1,20 @@
+import{E as Sa}from"./element-plus-BSjV1f9S.js";import{aP as Es,r as A,c as j,q as wt,V as Os,o as Re,x as n,y as o,z as e,I as he,C as F,P as u,R as ne,J as js,L as $,B as Rt,K as _,aq as le,Q as re,ac as ge,u as Ae,T as Gs,a5 as Oe,D as Ma,_ as ut,Y as $e,an as De,O as K,aa as tt,al as Ie,aV as kt,f as bt,aU as Ua}from"./vue-vendor-DV7DYXbz.js";import{r as Ra,t as Va,v as zs,w as Vt,x as Pa,y as qs,z as Ea,A as Oa,_ as st,c as Pe,s as R,B as ja,C as Pt,D as Et,E as Ot,F as jt,G as Gt,H as zt,I as qt,J as Ft,K as Bt,L as Ga,M as za,f as vt,N as qa,O as Fa,P as Ba,Q as Wa,u as Na,R as Ha,S as Ya,T as Qa,U as Ja,V as Xa,W as Za,X as er,Y as tr,Z as rs,$ as sr,a0 as ar,a1 as rr,a2 as or}from"./index-BahP9Xx9.js";import{Q as et}from"./vendor-Dr8jvgFu.js";import{C as at}from"./ConfirmModal-C2rCOkXI.js";import{_ as lr}from"./WindowCountdown-Cz478C_V.js";import{C as Ut,_ as nr}from"./ActionDropdown-GADQlLlI.js";const Fs=Es("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0;const h=await Ra();return h.success?this.supportedClients=h.data||[]:this.error=h.message,this.loading=!1,this.supportedClients}}}),ls=Es("apiKeys",()=>{const h=A([]),J=A(!1),c=A(null),P=A("all"),Y=A(""),I=A("asc"),z=async()=>{J.value=!0;const G=await Va();G.success?h.value=G.data||[]:c.value=G.message,J.value=!1},S=async G=>{J.value=!0;const ee=await zs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},W=async(G,ee)=>{J.value=!0;const te=await Vt(G,ee);return te.success?await z():c.value=te.message,J.value=!1,te};return{apiKeys:h,loading:J,error:c,statsTimeRange:P,sortBy:Y,sortOrder:I,fetchApiKeys:z,createApiKey:S,updateApiKey:W,toggleApiKey:async G=>{J.value=!0;const ee=await Pa(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},renewApiKey:(G,ee)=>W(G,ee),deleteApiKey:async G=>{J.value=!0;const ee=await qs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},fetchApiKeyStats:async(G,ee="all")=>{const te=await Ea(G,{timeRange:ee});return te.success?te.stats:null},fetchTags:async()=>{const G=await Oa();return G.success?G.data||[]:[]},sortApiKeys:G=>{Y.value===G?I.value=I.value==="asc"?"desc":"asc":(Y.value=G,I.value="asc")},reset:()=>{h.value=[],J.value=!1,c.value=null,P.value="all",Y.value="",I.value="asc"}}}),ir={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},dr={class:"relative"},ur={class:"custom-scrollbar flex-1 overflow-y-auto"},cr={key:0,class:"border-b border-gray-200 dark:border-gray-600"},gr=["onClick"],pr={class:"text-gray-700 dark:text-gray-300"},mr={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},xr={class:"text-gray-700 dark:text-gray-300"},yr={key:1},fr=["onClick"],br={class:"flex items-center justify-between"},vr={class:"text-gray-700 dark:text-gray-300"},kr={class:"text-xs text-gray-500 dark:text-gray-400"},wr={key:2},hr={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ar=["onClick"],Cr={class:"flex items-center justify-between"},$r={class:"text-gray-700 dark:text-gray-300"},Ir={class:"text-xs text-gray-400 dark:text-gray-500"},Kr={key:3},Lr=["onClick"],Dr={class:"flex items-center justify-between"},Tr={class:"text-gray-700 dark:text-gray-300"},_r={class:"text-xs text-gray-400 dark:text-gray-500"},Sr={key:4},Mr=["onClick"],Ur={class:"flex items-center justify-between"},Rr={class:"text-gray-700 dark:text-gray-300"},Vr={class:"text-xs text-gray-400 dark:text-gray-500"},Pr={key:5},Er=["onClick"],Or={class:"flex items-center justify-between"},jr={class:"text-gray-700 dark:text-gray-300"},Gr={class:"text-xs text-gray-400 dark:text-gray-500"},zr={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},qr={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:h=>["claude","gemini","openai","bedrock","droid"].includes(h)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(""),z=A(null),S=A(null),W=A({}),X=A(null),Q=A(""),v=j(()=>c.specialOptions||[]),L=j(()=>{const d=v.value.find(b=>b.value===c.modelValue);if(d)return d.label;if(!c.modelValue)return c.defaultOptionText;if(c.modelValue.startsWith("group:")){const b=c.modelValue.substring(6),oe=c.groups.find(xe=>xe.id===b);return oe?`${oe.name} (${oe.memberCount||0} 个成员)`:""}if(c.modelValue.startsWith("console:")){const b=c.modelValue.substring(8),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="claude-console");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("responses:")){const b=c.modelValue.substring(10),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="openai-responses");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("api:")){const b=c.modelValue.substring(4),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="gemini-api");return oe?`${oe.name} (${f(oe)})`:""}const p=c.accounts.find(b=>b.id===c.modelValue);return p?`${p.name} (${f(p)})`:""}),f=d=>{if(!d)return"未知";if(!(d.isActive==="true"||d.isActive===!0))switch(d.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return d.status==="rate_limited"?"限流中":"正常"},M=j(()=>[...c.accounts].sort((d,p)=>{const b=new Date(d.createdAt||0);return new Date(p.createdAt||0)-b})),se=j(()=>{let d=c.groups.filter(p=>p.platform?p.platform===c.platform:!0);if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),G=j(()=>{let d=[];if(c.platform==="claude"?d=M.value.filter(p=>p.platform==="claude-oauth"):c.platform==="openai"?d=M.value.filter(p=>p.platform==="openai"):c.platform==="droid"?d=M.value.filter(p=>p.platform==="droid"):c.platform==="gemini"?d=M.value.filter(p=>p.platform==="gemini"):d=M.value.filter(p=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(p.platform)),I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),ee=j(()=>{if(c.platform!=="claude")return[];let d=M.value.filter(p=>p.platform==="claude-console");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),te=j(()=>{if(c.platform!=="openai")return[];let d=M.value.filter(p=>p.platform==="openai-responses");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),H=j(()=>{if(c.platform!=="gemini")return[];let d=M.value.filter(p=>p.platform==="gemini-api");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),C=j(()=>se.value.length>0||G.value.length>0||ee.value.length>0||te.value.length>0||H.value.length>0),T=()=>{if(!Y.value||!S.value||!X.value)return;const d=X.value;if(!d)return;const p=d.getBoundingClientRect(),b=window.innerHeight,oe=window.innerWidth,xe=b-p.bottom,Te=p.top,Ce=8,N=xe-Ce,i=Te-Ce;let k=!1,ie=N;Q.value==="above"&&i>=150?(k=!0,ie=i):Q.value==="below"&&N>=150?(k=!1,ie=N):i>N&&N<200&&(k=!0,ie=i),Q.value=k?"above":"below";let ae=p.left;const E=p.width;ae+E>oe-Ce&&(ae=oe-E-Ce),ae{if(!Y.value&&X.value){const d=X.value.getBoundingClientRect(),b=window.innerHeight-d.bottom,oe=8;W.value={position:"fixed",left:`${d.left}px`,width:`${d.width}px`,maxHeight:`${Math.min(b-oe,400)}px`,top:`${d.bottom}px`}}Y.value=!Y.value,Y.value&&Ma(()=>{var d;T(),(d=z.value)==null||d.focus()})},Z=d=>{P("update:modelValue",d||""),Y.value=!1,I.value=""},V=()=>{},D=()=>{var d;I.value="",(d=z.value)==null||d.focus()},U=d=>{var p,b;!((p=X.value)!=null&&p.contains(d.target))&&!((b=S.value)!=null&&b.contains(d.target))&&(Y.value=!1)},x=()=>{Y.value&&T()};return wt(()=>{document.addEventListener("click",U),window.addEventListener("scroll",x,!0),window.addEventListener("resize",T)}),Os(()=>{document.removeEventListener("click",U),window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",T)}),Re(Y,d=>{d||(I.value="",Q.value="")}),(d,p)=>(o(),n("div",{ref_key:"triggerRef",ref:X,class:"relative"},[e("div",{class:F(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":h.disabled}]),onClick:p[0]||(p[0]=b=>!h.disabled&&a())},[e("span",{class:F(h.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},u(L.value),3),e("i",{class:F(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":Y.value}])},null,2)],2),(o(),he(Oe,{to:"body"},[ne(Gs,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:js(()=>[Y.value?(o(),n("div",{key:0,ref_key:"dropdownRef",ref:S,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Rt(W.value)},[e("div",ir,[e("div",dr,[_(e("input",{ref_key:"searchInput",ref:z,"onUpdate:modelValue":p[1]||(p[1]=b=>I.value=b),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:V},null,544),[[le,I.value]]),p[4]||(p[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),I.value?(o(),n("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:D},p[3]||(p[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):$("",!0)])]),e("div",ur,[v.value.length>0?(o(),n("div",cr,[(o(!0),n(re,null,ge(v.value,b=>(o(),n("div",{key:`special-${b.value}`,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===b.value}]),onClick:oe=>Z(b.value)},[e("span",pr,u(b.label),1),b.description?(o(),n("span",mr,u(b.description),1)):$("",!0)],10,gr))),128))])):$("",!0),e("div",{class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!h.modelValue}]),onClick:p[2]||(p[2]=b=>Z(null))},[e("span",xr,u(h.defaultOptionText),1)],2),se.value.length>0?(o(),n("div",yr,[p[5]||(p[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(o(!0),n(re,null,ge(se.value,b=>(o(),n("div",{key:`group:${b.id}`,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`group:${b.id}`}]),onClick:oe=>Z(`group:${b.id}`)},[e("div",br,[e("span",vr,u(b.name),1),e("span",kr,u(b.memberCount||0)+" 个成员",1)])],10,fr))),128))])):$("",!0),G.value.length>0?(o(),n("div",wr,[e("div",hr,u(h.platform==="claude"?"Claude OAuth 专属账号":h.platform==="openai"?"OpenAI 专属账号":h.platform==="droid"?"Droid 专属账号":h.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(o(!0),n(re,null,ge(G.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===b.id}]),onClick:oe=>Z(b.id)},[e("div",Cr,[e("div",null,[e("span",$r,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Ir,u(Ae(Pe)(b.createdAt)),1)])],10,Ar))),128))])):$("",!0),h.platform==="claude"&&ee.value.length>0?(o(),n("div",Kr,[p[6]||(p[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(o(!0),n(re,null,ge(ee.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`console:${b.id}`}]),onClick:oe=>Z(`console:${b.id}`)},[e("div",Dr,[e("div",null,[e("span",Tr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",_r,u(Ae(Pe)(b.createdAt)),1)])],10,Lr))),128))])):$("",!0),h.platform==="openai"&&te.value.length>0?(o(),n("div",Sr,[p[7]||(p[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(o(!0),n(re,null,ge(te.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`responses:${b.id}`}]),onClick:oe=>Z(`responses:${b.id}`)},[e("div",Ur,[e("div",null,[e("span",Rr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Vr,u(Ae(Pe)(b.createdAt)),1)])],10,Mr))),128))])):$("",!0),h.platform==="gemini"&&H.value.length>0?(o(),n("div",Pr,[p[8]||(p[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(o(!0),n(re,null,ge(H.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`api:${b.id}`}]),onClick:oe=>Z(`api:${b.id}`)},[e("div",Or,[e("div",null,[e("span",jr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Gr,u(Ae(Pe)(b.createdAt)),1)])],10,Er))),128))])):$("",!0),I.value&&!C.value?(o(),n("div",zr,p[9]||(p[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):$("",!0)])],4)):$("",!0)]),_:1})]))],512))}},_e=st(qr,[["__scopeId","data-v-15b77cd6"]]),Fr={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Br={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},Wr={class:"mb-4 flex items-center justify-between"},Nr={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},Hr={class:"flex items-center gap-3 sm:gap-4"},Yr={class:"flex cursor-pointer items-center"},Qr={class:"flex cursor-pointer items-center"},Jr={key:0,class:"mt-3"},Xr={class:"flex items-center gap-4"},Zr={class:"flex-1"},eo={class:"flex items-center gap-2"},to={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},so=["placeholder"],ao={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ro={class:"space-y-4"},oo={key:0},lo={class:"flex flex-wrap gap-2"},no=["onClick"],io={key:1},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={class:"flex gap-2"},po=["onKeypress"],mo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},xo={class:"space-y-2"},yo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},fo={class:"space-y-2"},bo={class:"flex gap-2"},vo={class:"space-y-2"},ko={class:"flex gap-2"},wo={class:"space-y-2"},ho={class:"flex gap-2"},Ao={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Co={class:"flex items-center justify-between"},$o={class:"flex items-center gap-2"},Io={key:0,class:"mt-3 space-y-2"},Ko={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},Lo=["onUpdate:modelValue"],Do={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},To={class:"flex items-center gap-4"},_o={class:"flex cursor-pointer items-center"},So={class:"flex cursor-pointer items-center"},Mo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Uo={key:0},Ro={key:1},Vo={key:0},Po={key:0,class:"mt-3"},Eo=["min"],Oo={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},jo={key:1},Go={class:"flex items-center gap-2"},zo=["max","placeholder"],qo={class:"mt-2 flex flex-wrap gap-2"},Fo=["onClick"],Bo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Wo={class:"flex flex-wrap gap-4"},No={class:"flex cursor-pointer items-center"},Ho={class:"flex cursor-pointer items-center"},Yo={class:"flex cursor-pointer items-center"},Qo={class:"flex cursor-pointer items-center"},Jo={class:"mb-2 flex items-center justify-between"},Xo=["disabled"],Zo={class:"grid grid-cols-1 gap-3"},el={class:"mb-2 flex items-center"},tl={key:0,class:"space-y-3"},sl={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},al=["onClick"],rl={key:0,class:"text-sm text-gray-400"},ol={class:"space-y-3"},ll={class:"flex flex-wrap gap-2"},nl=["onClick"],il={key:0,class:"text-sm italic text-gray-400"},dl={class:"flex gap-2"},ul=["onKeydown"],cl={class:"mb-2 flex items-center"},gl={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},pl={class:"space-y-1"},ml=["id","value"],xl=["for"],yl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},fl={class:"block text-xs text-gray-500 dark:text-gray-400"},bl={class:"flex gap-3 pt-2"},vl=["disabled"],kl={key:0,class:"loading-spinner mr-2"},wl={key:1,class:"fas fa-plus mr-2"},hl={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(E,l,y="确认",de="取消",Ue="primary")=>new Promise(Se=>{X.value={title:E,message:l,confirmText:y,cancelText:de,type:Ue},Q.value=Se,W.value=!0}),L=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!0)},f=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A({name:""}),G=A(""),ee=A([]),te=j(()=>ee.value.filter(E=>!a.tags.includes(E))),H=A([]),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({createType:"single",batchCount:10,name:"",description:"",serviceRates:{},rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]}),Z=()=>{};wt(async()=>{if(H.value=await Y.loadSupportedClients(),ee.value=await I.fetchTags(),c.accounts){const E=(c.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),l=[];c.accounts.openai&&c.accounts.openai.forEach(y=>{l.push({...y,platform:y.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(y=>{l.push({...y,platform:y.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:E,openai:l,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}});const V=async()=>{var E,l;S.value=!0;try{const[y,de,Ue,Se,Be,ye,Qe,ce,Ve]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ze=[];y.success&&((E=y.data)==null||E.forEach(pe=>{ze.push({...pe,platform:"claude-oauth",isDedicated:pe.accountType==="dedicated"})})),de.success&&((l=de.data)==null||l.forEach(pe=>{ze.push({...pe,platform:"claude-console",isDedicated:pe.accountType==="dedicated"})})),M.value.claude=ze;const We=[];Ue.success&&(Ue.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini",isDedicated:pe.accountType==="dedicated"})}),Se.success&&(Se.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini-api",isDedicated:pe.accountType==="dedicated"})}),M.value.gemini=We;const Ne=[];if(Be.success&&(Be.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai",isDedicated:pe.accountType==="dedicated"})}),ye.success&&(ye.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai-responses",isDedicated:pe.accountType==="dedicated"})}),M.value.openai=Ne,Qe.success&&(M.value.bedrock=(Qe.data||[]).map(pe=>({...pe,isDedicated:pe.accountType==="dedicated"}))),ce.success&&(M.value.droid=(ce.data||[]).map(pe=>({...pe,platform:"droid",isDedicated:pe.accountType==="dedicated"}))),Ve.success){const pe=Ve.data||[];M.value.claudeGroups=pe.filter(Ee=>Ee.platform==="claude"),M.value.geminiGroups=pe.filter(Ee=>Ee.platform==="gemini"),M.value.openaiGroups=pe.filter(Ee=>Ee.platform==="openai"),M.value.droidGroups=pe.filter(Ee=>Ee.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},D=j(()=>{const E=new Date;return E.setMinutes(E.getMinutes()+1),E.toISOString().slice(0,16)}),U=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const E=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,de,Ue]=y,Se=parseInt(de);switch(Ue){case"d":E.setDate(E.getDate()+Se);break;case"h":E.setHours(E.getHours()+Se);break;case"m":E.setMonth(E.getMonth()+Se);break;case"y":E.setFullYear(E.getFullYear()+Se);break}a.expiresAt=E.toISOString()}},x=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},d=E=>new Date(E).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),p=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},b=E=>{a.restrictedModels.splice(E,1)},oe=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),xe=j(()=>oe.value.filter(E=>!a.restrictedModels.includes(E))),Te=E=>{a.restrictedModels.includes(E)||a.restrictedModels.push(E)},Ce=()=>{if(G.value&&G.value.trim()){const E=G.value.trim();a.tags.includes(E)||a.tags.push(E),G.value=""}},N=E=>{a.tags.includes(E)||a.tags.push(E)},i=E=>{a.tags.splice(E,1)},k=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],ie=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},ae=async()=>{if(se.value.name="",!a.name||!a.name.trim()){se.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){R("批量创建数量必须在 2-500 之间","error");return}if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
+
+是否继续?`,"继续创建","返回修改","warning"))){z.value=!0;try{const E={};if(C.value)for(const[y,de]of Object.entries(a.serviceRates))de!=null&&de!==""&&(E[y]=de);const l={description:a.description||void 0,serviceRates:E,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(l.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete l.claudeAccountId):(l.claudeAccountId=a.claudeAccountId,delete l.claudeConsoleAccountId)),a.geminiAccountId&&(l.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(l.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(l.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(l.droidAccountId=a.droidAccountId),a.createType==="single"){const y={...l,name:a.name},de=await zs(y);de.success?(R("API Key 创建成功","success"),P("success",de.data),P("close")):R(de.message||"创建失败","error")}else{const y={...l,createType:"batch",baseName:a.name,count:a.batchCount},de=await ja(y);de.success?(R(`成功创建 ${de.data.length} 个 API Key`,"success"),P("batch-success",de.data),P("close")):R(de.message||"批量创建失败","error")}}catch{R("创建失败","error")}finally{z.value=!1}}};return(E,l)=>(o(),he(Oe,{to:"body"},[e("div",Fr,[e("div",Br,[e("div",Wr,[l[49]||(l[49]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=y=>E.$emit("close"))},l[48]||(l[48]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:$e(ae,["prevent"])},[e("div",Nr,[e("div",{class:F(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[l[52]||(l[52]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",Hr,[e("label",Yr,[_(e("input",{"onUpdate:modelValue":l[1]||(l[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[De,a.createType]]),l[50]||(l[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),K(" 单个创建 ")],-1))]),e("label",Qr,[_(e("input",{"onUpdate:modelValue":l[2]||(l[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[De,a.createType]]),l[51]||(l[51]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),K(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(o(),n("div",Jr,[e("div",Xr,[e("div",Zr,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",eo,[_(e("input",{"onUpdate:modelValue":l[3]||(l[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[le,a.batchCount,void 0,{number:!0}]]),l[53]||(l[53]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",to,[l[55]||(l[55]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+u(a.name||"MyKey")+"_1, "+u(a.name||"MyKey")+"_2 ...",1)])])):$("",!0)]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[K("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":l[4]||(l[4]=y=>a.name=y),class:F(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":se.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:l[5]||(l[5]=y=>se.value.name="")},null,42,so),[[le,a.name]])]),se.value.name?(o(),n("p",ao,u(se.value.name),1)):$("",!0)]),e("div",null,[l[64]||(l[64]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",ro,[a.tags.length>0?(o(),n("div",oo,[l[58]||(l[58]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",lo,[(o(!0),n(re,null,ge(a.tags,(y,de)=>(o(),n("span",{key:"selected-"+de,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[K(u(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:Ue=>i(de)},l[57]||(l[57]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,no)]))),128))])])):$("",!0),te.value.length>0?(o(),n("div",io,[l[60]||(l[60]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",uo,[(o(!0),n(re,null,ge(te.value,y=>(o(),n("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:de=>N(y)},[l[59]||(l[59]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(y),1)],8,co))),128))])])):$("",!0),e("div",null,[l[62]||(l[62]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",go,[_(e("input",{"onUpdate:modelValue":l[6]||(l[6]=y=>G.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(Ce,["prevent"]),["enter"])},null,40,po),[[le,G.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ce},l[61]||(l[61]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[63]||(l[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",mo,[l[72]||(l[72]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",xo,[e("div",yo,[e("div",null,[l[65]||(l[65]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":l[7]||(l[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitWindow]]),l[66]||(l[66]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[67]||(l[67]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":l[8]||(l[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitRequests]]),l[68]||(l[68]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[69]||(l[69]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":l[9]||(l[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[le,a.rateLimitCost]]),l[70]||(l[70]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[71]||(l[71]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",fo,[e("div",bo,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[11]||(l[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[12]||(l[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[13]||(l[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[14]||(l[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.dailyCostLimit]]),l[73]||(l[73]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[76]||(l[76]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",vo,[e("div",ko,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[16]||(l[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[17]||(l[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[18]||(l[18]=y=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[19]||(l[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.totalCostLimit]]),l[75]||(l[75]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",wo,[e("div",ho,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[21]||(l[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[22]||(l[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[23]||(l[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[24]||(l[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.weeklyOpusCostLimit]]),l[77]||(l[77]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),_(e("input",{"onUpdate:modelValue":l[25]||(l[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[le,a.concurrencyLimit]]),l[80]||(l[80]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),_(e("textarea",{"onUpdate:modelValue":l[26]||(l[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[le,a.description]])]),e("div",Ao,[e("div",Co,[e("div",$o,[_(e("input",{id:"enableServiceRates","onUpdate:modelValue":l[27]||(l[27]=y=>C.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),l[82]||(l[82]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableServiceRates"}," 自定义服务倍率 ",-1))]),l[83]||(l[83]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Io,[(o(),n(re,null,ge(T,y=>e("div",{key:y.key,class:"flex items-center gap-2"},[e("span",Ko,u(y.label),1),_(e("input",{"onUpdate:modelValue":de=>a.serviceRates[y.key]=de,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,Lo),[[le,a.serviceRates[y.key],void 0,{number:!0}]]),l[84]||(l[84]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[l[92]||(l[92]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Do,[e("div",To,[e("label",_o,[_(e("input",{"onUpdate:modelValue":l[28]||(l[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[De,a.expirationMode]]),l[85]||(l[85]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",So,[_(e("input",{"onUpdate:modelValue":l[29]||(l[29]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[De,a.expirationMode]]),l[86]||(l[86]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Mo,[a.expirationMode==="fixed"?(o(),n("span",Uo,l[87]||(l[87]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(o(),n("span",Ro,l[88]||(l[88]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(o(),n("div",Vo,[_(e("select",{"onUpdate:modelValue":l[30]||(l[30]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:U},l[89]||(l[89]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[kt,a.expireDuration]]),a.expireDuration==="custom"?(o(),n("div",Po,[_(e("input",{"onUpdate:modelValue":l[31]||(l[31]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:D.value,type:"datetime-local",onChange:x},null,40,Eo),[[le,a.customExpireDate]])])):$("",!0),a.expiresAt?(o(),n("p",Oo," 将于 "+u(d(a.expiresAt))+" 过期 ",1)):$("",!0)])):(o(),n("div",jo,[e("div",Go,[_(e("input",{"onUpdate:modelValue":l[32]||(l[32]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,zo),[[le,a.activationDays,void 0,{number:!0}]]),_(e("select",{"onUpdate:modelValue":l[33]||(l[33]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:ie},l[90]||(l[90]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[kt,a.activationUnit]])]),e("div",qo,[(o(!0),n(re,null,ge(k(),y=>(o(),n("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:de=>a.activationDays=y.value},u(y.label),9,Fo))),128))]),e("p",Bo,[l[91]||(l[91]=e("i",{class:"fas fa-clock mr-1"},null,-1)),K(" Key 将在首次使用后激活,激活后 "+u(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+u(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[l[97]||(l[97]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Wo,[e("label",No,[_(e("input",{"onUpdate:modelValue":l[34]||(l[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),l[93]||(l[93]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Ho,[_(e("input",{"onUpdate:modelValue":l[35]||(l[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),l[94]||(l[94]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Yo,[_(e("input",{"onUpdate:modelValue":l[36]||(l[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),l[95]||(l[95]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Qo,[_(e("input",{"onUpdate:modelValue":l[37]||(l[37]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid",onChange:Z},null,544),[[Ie,a.permissions]]),l[96]||(l[96]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[98]||(l[98]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",Jo,[l[99]||(l[99]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:S.value,title:"刷新账号列表",type:"button",onClick:V},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,Xo)]),e("div",Zo,[e("div",null,[l[100]||(l[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[38]||(l[38]=y=>a.claudeAccountId=y),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[101]||(l[101]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[39]||(l[39]=y=>a.geminiAccountId=y),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[102]||(l[102]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[40]||(l[40]=y=>a.openaiAccountId=y),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[103]||(l[103]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[41]||(l[41]=y=>a.bedrockAccountId=y),accounts:M.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[104]||(l[104]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[42]||(l[42]=y=>a.droidAccountId=y),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[105]||(l[105]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",el,[_(e("input",{id:"enableModelRestriction","onUpdate:modelValue":l[43]||(l[43]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ie,a.enableModelRestriction]]),l[106]||(l[106]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",tl,[e("div",null,[l[109]||(l[109]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",sl,[(o(!0),n(re,null,ge(a.restrictedModels,(y,de)=>(o(),n("span",{key:de,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[K(u(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:Ue=>b(de)},l[107]||(l[107]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,al)]))),128)),a.restrictedModels.length===0?(o(),n("span",rl," 暂无限制的模型 ")):$("",!0)]),e("div",ol,[e("div",ll,[(o(!0),n(re,null,ge(xe.value,y=>(o(),n("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:de=>Te(y)},u(y),9,nl))),128)),xe.value.length===0?(o(),n("span",il," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",dl,[_(e("input",{"onUpdate:modelValue":l[44]||(l[44]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:tt($e(p,["prevent"]),["enter"])},null,40,ul),[[le,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:p},l[108]||(l[108]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[110]||(l[110]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",cl,[_(e("input",{id:"enableClientRestriction","onUpdate:modelValue":l[45]||(l[45]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ie,a.enableClientRestriction]]),l[111]||(l[111]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",gl,[e("div",null,[l[112]||(l[112]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",pl,[(o(!0),n(re,null,ge(H.value,y=>(o(),n("div",{key:y.id,class:"flex items-start"},[_(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":l[46]||(l[46]=de=>a.allowedClients=de),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,ml),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",yl,u(y.name),1),e("span",fl,u(y.description),1)],8,xl)]))),128))])])])):$("",!0)]),e("div",bl,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[47]||(l[47]=y=>E.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",kl)):(o(),n("i",wl)),K(" "+u(z.value?"创建中...":"创建"),1)],8,vl)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Al={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Cl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},$l={class:"mb-4 flex items-center justify-between sm:mb-6"},Il={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Kl={class:"flex items-center justify-between"},Ll={class:"flex items-center gap-2"},Dl={key:0,class:"mt-3 space-y-2"},Tl={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},_l=["onUpdate:modelValue"],Sl=["value"],Ml={key:0,class:"text-gray-500"},Ul={class:"space-y-4"},Rl={key:0},Vl={class:"flex flex-wrap gap-2"},Pl=["onClick"],El={key:1},Ol={class:"flex flex-wrap gap-2"},jl=["onClick"],Gl={class:"flex gap-2"},zl=["onKeypress"],ql={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Fl={class:"space-y-2"},Bl={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wl={class:"space-y-3"},Nl={class:"flex gap-2"},Hl={class:"space-y-3"},Yl={class:"flex gap-2"},Ql={class:"space-y-3"},Jl={class:"flex gap-2"},Xl={class:"mb-3 flex items-center"},Zl={class:"flex flex-wrap gap-4"},en={class:"flex cursor-pointer items-center"},tn={class:"flex cursor-pointer items-center"},sn={class:"flex cursor-pointer items-center"},an={class:"flex cursor-pointer items-center"},rn={class:"mb-3 flex items-center justify-between"},on=["disabled"],ln={class:"grid grid-cols-1 gap-3"},nn={class:"mb-3 flex items-center"},dn={key:0,class:"space-y-3"},un={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},cn=["onClick"],gn={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},pn={class:"space-y-3"},mn={class:"flex flex-wrap gap-2"},xn=["onClick"],yn={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},fn={class:"flex gap-2"},bn=["onKeydown"],vn={class:"mb-3 flex items-center"},kn={key:0,class:"space-y-3"},wn={class:"space-y-2"},hn=["id","value"],An=["for"],Cn={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},$n={class:"block text-xs text-gray-500 dark:text-gray-400"},In={class:"flex gap-3 pt-4"},Kn=["disabled"],Ln={key:0,class:"loading-spinner mr-2"},Dn={key:1,class:"fas fa-save mr-2"},Tn={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(N,i,k="确认",ie="取消",ae="primary")=>new Promise(E=>{X.value={title:N,message:i,confirmText:k,cancelText:ie,type:ae},Q.value=E,W.value=!0}),L=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!0)},f=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A([]),G=A([]),ee=A(""),te=A([]),H=j(()=>te.value.filter(N=>!a.tags.includes(N))),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({name:"",serviceRates:{},tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),Z=()=>{},V=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},D=N=>{a.restrictedModels.splice(N,1)},U=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),x=j(()=>U.value.filter(N=>!a.restrictedModels.includes(N))),d=N=>{a.restrictedModels.includes(N)||a.restrictedModels.push(N)},p=()=>{if(ee.value&&ee.value.trim()){const N=ee.value.trim();a.tags.includes(N)||a.tags.push(N),ee.value=""}},b=N=>{a.tags.includes(N)||a.tags.push(N)},oe=N=>{a.tags.splice(N,1)},xe=async()=>{if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
+
+是否继续?`,"继续保存","返回修改","warning"))){z.value=!0;try{const N={};if(C.value)for(const[ie,ae]of Object.entries(a.serviceRates))ae!=null&&ae!==""&&(N[ie]=ae);const i={name:a.name,serviceRates:N,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):0,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):0,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):0,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,permissions:a.permissions,tags:a.tags};a.claudeAccountId?a.claudeAccountId.startsWith("console:")?(i.claudeConsoleAccountId=a.claudeAccountId.substring(8),i.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),i.claudeAccountId=a.claudeAccountId,i.claudeConsoleAccountId=null):(i.claudeAccountId=null,i.claudeConsoleAccountId=null),a.geminiAccountId?i.geminiAccountId=a.geminiAccountId:i.geminiAccountId=null,a.openaiAccountId?i.openaiAccountId=a.openaiAccountId:i.openaiAccountId=null,a.bedrockAccountId?i.bedrockAccountId=a.bedrockAccountId:i.bedrockAccountId=null,a.droidAccountId?i.droidAccountId=a.droidAccountId:i.droidAccountId=null,i.enableModelRestriction=a.enableModelRestriction,i.restrictedModels=a.restrictedModels,i.enableClientRestriction=a.enableClientRestriction,i.allowedClients=a.allowedClients,i.isActive=a.isActive,a.ownerId!==void 0&&(i.ownerId=a.ownerId);const k=await Vt(c.apiKey.id,i);k.success?(P("success"),P("close")):R(k.message||"更新失败","error")}catch{R("更新失败","error")}finally{z.value=!1}}},Te=async()=>{var N,i;S.value=!0;try{const[k,ie,ae,E,l,y,de,Ue,Se]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),Be=[];k.success&&((N=k.data)==null||N.forEach(ce=>{Be.push({...ce,platform:"claude-oauth",isDedicated:ce.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(ce=>{Be.push({...ce,platform:"claude-console",isDedicated:ce.accountType==="dedicated"})})),M.value.claude=Be;const ye=[];ae.success&&(ae.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini",isDedicated:ce.accountType==="dedicated"})}),E.success&&(E.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini-api",isDedicated:ce.accountType==="dedicated"})}),M.value.gemini=ye;const Qe=[];if(l.success&&(l.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai",isDedicated:ce.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai-responses",isDedicated:ce.accountType==="dedicated"})}),M.value.openai=Qe,de.success&&(M.value.bedrock=(de.data||[]).map(ce=>({...ce,isDedicated:ce.accountType==="dedicated"}))),Ue.success&&(M.value.droid=(Ue.data||[]).map(ce=>({...ce,platform:"droid",isDedicated:ce.accountType==="dedicated"}))),Se.success){const ce=Se.data||[];M.value.claudeGroups=ce.filter(Ve=>Ve.platform==="claude"),M.value.geminiGroups=ce.filter(Ve=>Ve.platform==="gemini"),M.value.openaiGroups=ce.filter(Ve=>Ve.platform==="openai"),M.value.droidGroups=ce.filter(Ve=>Ve.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},Ce=async()=>{try{const N=await Ga();N.success&&(G.value=N.data||[])}catch{G.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return wt(async()=>{try{const[k,ie]=await Promise.all([Y.loadSupportedClients(),I.fetchTags(),Ce()]);se.value=k||[],te.value=ie||[]}catch{se.value=[],te.value=[]}if(c.accounts){const k=(c.accounts.gemini||[]).map(ae=>({...ae,platform:ae.platform||"gemini"})),ie=[];c.accounts.openai&&c.accounts.openai.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:k,openai:ie,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(ae=>({...ae,platform:ae.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}a.name=c.apiKey.name,a.serviceRates=c.apiKey.serviceRates||{},C.value=Object.keys(a.serviceRates).length>0,a.tokenLimit=c.apiKey.tokenLimit||"",a.rateLimitCost=c.apiKey.rateLimitCost||"",c.apiKey.tokenLimit>0&&c.apiKey.rateLimitCost,a.rateLimitWindow=c.apiKey.rateLimitWindow||"",a.rateLimitRequests=c.apiKey.rateLimitRequests||"",a.concurrencyLimit=c.apiKey.concurrencyLimit||"",a.dailyCostLimit=c.apiKey.dailyCostLimit||"",a.totalCostLimit=c.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=c.apiKey.weeklyOpusCostLimit||"";const N=["claude","gemini","openai","droid"];let i=c.apiKey.permissions;if(typeof i=="string")if(i==="all"||i==="")i=[];else if(i.startsWith("["))try{i=JSON.parse(i)}catch{i=N.includes(i)?[i]:[]}else i.includes(",")?i=i.split(",").map(k=>k.trim()).filter(k=>N.includes(k)):N.includes(i)?i=[i]:i=[];Array.isArray(i)?a.permissions=i.filter(k=>N.includes(k)):a.permissions=[],c.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${c.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=c.apiKey.claudeAccountId||"",a.geminiAccountId=c.apiKey.geminiAccountId||"",a.openaiAccountId=c.apiKey.openaiAccountId||"",a.bedrockAccountId=c.apiKey.bedrockAccountId||"",a.droidAccountId=c.apiKey.droidAccountId||"",a.restrictedModels=c.apiKey.restrictedModels||[],a.allowedClients=c.apiKey.allowedClients||[],a.tags=c.apiKey.tags||[],a.enableModelRestriction=c.apiKey.enableModelRestriction===!0||c.apiKey.enableModelRestriction==="true",a.enableClientRestriction=c.apiKey.enableClientRestriction===!0||c.apiKey.enableClientRestriction==="true",a.isActive=c.apiKey.isActive===void 0||c.apiKey.isActive===!0||c.apiKey.isActive==="true",a.ownerId=c.apiKey.userId||"admin"}),(N,i)=>(o(),he(Oe,{to:"body"},[e("div",Al,[e("div",Cl,[e("div",$l,[i[40]||(i[40]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=k=>N.$emit("close"))},i[39]||(i[39]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(xe,["prevent"])},[e("div",null,[i[41]||(i[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":i[1]||(i[1]=k=>a.name=k),class:"form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",maxlength:"100",placeholder:"请输入API Key名称",required:"",type:"text"},null,512),[[le,a.name]])]),i[42]||(i[42]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",Il,[e("div",Kl,[e("div",Ll,[_(e("input",{id:"editEnableServiceRates","onUpdate:modelValue":i[2]||(i[2]=k=>C.value=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),i[43]||(i[43]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableServiceRates"}," 自定义服务倍率 ",-1))]),i[44]||(i[44]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Dl,[(o(),n(re,null,ge(T,k=>e("div",{key:k.key,class:"flex items-center gap-2"},[e("span",Tl,u(k.label),1),_(e("input",{"onUpdate:modelValue":ie=>a.serviceRates[k.key]=ie,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,_l),[[le,a.serviceRates[k.key],void 0,{number:!0}]]),i[45]||(i[45]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[i[46]||(i[46]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"所有者",-1)),_(e("select",{"onUpdate:modelValue":i[3]||(i[3]=k=>a.ownerId=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(o(!0),n(re,null,ge(G.value,k=>(o(),n("option",{key:k.id,value:k.id},[K(u(k.displayName)+" ("+u(k.username)+") ",1),k.role==="admin"?(o(),n("span",Ml,"- 管理员")):$("",!0)],8,Sl))),128))],512),[[kt,a.ownerId]]),i[47]||(i[47]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制 ",-1))]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"标签",-1)),e("div",Ul,[a.tags.length>0?(o(),n("div",Rl,[i[49]||(i[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Vl,[(o(!0),n(re,null,ge(a.tags,(k,ie)=>(o(),n("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[K(u(k)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:ae=>oe(ie)},i[48]||(i[48]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Pl)]))),128))])])):$("",!0),H.value.length>0?(o(),n("div",El,[i[51]||(i[51]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Ol,[(o(!0),n(re,null,ge(H.value,k=>(o(),n("button",{key:"available-"+k,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>b(k)},[i[50]||(i[50]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(k),1)],8,jl))),128))])])):$("",!0),e("div",null,[i[53]||(i[53]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Gl,[_(e("input",{"onUpdate:modelValue":i[4]||(i[4]=k=>ee.value=k),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(p,["prevent"]),["enter"])},null,40,zl),[[le,ee.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:p},i[52]||(i[52]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[54]||(i[54]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",ql,[i[63]||(i[63]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",Fl,[e("div",Bl,[e("div",null,[i[56]||(i[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":i[5]||(i[5]=k=>a.rateLimitWindow=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitWindow]]),i[57]||(i[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[58]||(i[58]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":i[6]||(i[6]=k=>a.rateLimitRequests=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitRequests]]),i[59]||(i[59]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[60]||(i[60]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":i[7]||(i[7]=k=>a.rateLimitCost=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[le,a.rateLimitCost]]),i[61]||(i[61]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[62]||(i[62]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[65]||(i[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wl,[e("div",Nl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[8]||(i[8]=k=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[9]||(i[9]=k=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=k=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=k=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[12]||(i[12]=k=>a.dailyCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.dailyCostLimit]]),i[64]||(i[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[67]||(i[67]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Hl,[e("div",Yl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=k=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[14]||(i[14]=k=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=k=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=k=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[17]||(i[17]=k=>a.totalCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.totalCostLimit]]),i[66]||(i[66]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[69]||(i[69]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",Ql,[e("div",Jl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=k=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[19]||(i[19]=k=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=k=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=k=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[22]||(i[22]=k=>a.weeklyOpusCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.weeklyOpusCostLimit]]),i[68]||(i[68]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[i[70]||(i[70]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":i[23]||(i[23]=k=>a.concurrencyLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[le,a.concurrencyLimit]]),i[71]||(i[71]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Xl,[_(e("input",{id:"editIsActive","onUpdate:modelValue":i[24]||(i[24]=k=>a.isActive=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.isActive]]),i[72]||(i[72]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),i[73]||(i[73]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Zl,[e("label",en,[_(e("input",{"onUpdate:modelValue":i[25]||(i[25]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),i[74]||(i[74]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",tn,[_(e("input",{"onUpdate:modelValue":i[26]||(i[26]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),i[75]||(i[75]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",sn,[_(e("input",{"onUpdate:modelValue":i[27]||(i[27]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),i[76]||(i[76]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",an,[_(e("input",{"onUpdate:modelValue":i[28]||(i[28]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid",onChange:Z},null,544),[[Ie,a.permissions]]),i[77]||(i[77]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",rn,[i[80]||(i[80]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:S.value,title:"刷新账号列表",type:"button",onClick:Te},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,on)]),e("div",ln,[e("div",null,[i[81]||(i[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[29]||(i[29]=k=>a.claudeAccountId=k),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[82]||(i[82]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[30]||(i[30]=k=>a.geminiAccountId=k),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[83]||(i[83]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[31]||(i[31]=k=>a.openaiAccountId=k),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[84]||(i[84]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[32]||(i[32]=k=>a.bedrockAccountId=k),accounts:M.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[85]||(i[85]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[33]||(i[33]=k=>a.droidAccountId=k),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[86]||(i[86]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",nn,[_(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":i[34]||(i[34]=k=>a.enableModelRestriction=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.enableModelRestriction]]),i[87]||(i[87]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",dn,[e("div",null,[i[90]||(i[90]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",un,[(o(!0),n(re,null,ge(a.restrictedModels,(k,ie)=>(o(),n("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800 dark:bg-red-900/30 dark:text-red-400"},[K(u(k)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",type:"button",onClick:ae=>D(ie)},i[88]||(i[88]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,cn)]))),128)),a.restrictedModels.length===0?(o(),n("span",gn," 暂无限制的模型 ")):$("",!0)]),e("div",pn,[e("div",mn,[(o(!0),n(re,null,ge(x.value,k=>(o(),n("button",{key:k,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 sm:text-sm",type:"button",onClick:ie=>d(k)},u(k),9,xn))),128)),x.value.length===0?(o(),n("span",yn," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",fn,[_(e("input",{"onUpdate:modelValue":i[35]||(i[35]=k=>a.modelInput=k),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:tt($e(V,["prevent"]),["enter"])},null,40,bn),[[le,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:V},i[89]||(i[89]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[91]||(i[91]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",vn,[_(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":i[36]||(i[36]=k=>a.enableClientRestriction=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.enableClientRestriction]]),i[92]||(i[92]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",kn,[e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),i[94]||(i[94]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",wn,[(o(!0),n(re,null,ge(se.value,k=>(o(),n("div",{key:k.id,class:"flex items-start"},[_(e("input",{id:`edit_client_${k.id}`,"onUpdate:modelValue":i[37]||(i[37]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:k.id},null,8,hn),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${k.id}`},[e("span",Cn,u(k.name),1),e("span",$n,u(k.description),1)],8,An)]))),128))])])])):$("",!0)]),e("div",In,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[38]||(i[38]=k=>N.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",Ln)):(o(),n("i",Dn)),K(" "+u(z.value?"保存中...":"保存修改"),1)],8,Kn)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_n={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Sn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Mn={class:"mb-6 flex items-center justify-between"},Un={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rn={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Vn={class:"flex items-start gap-3"},Pn={class:"text-sm text-gray-700"},En={class:"mt-1 text-xs text-gray-600"},On={key:0,class:"mt-3"},jn=["min"],Gn={key:1,class:"mt-2 text-xs text-gray-500"},zn={class:"flex gap-3 pt-4"},qn=["disabled"],Fn={key:0,class:"loading-spinner mr-2"},Bn={key:1,class:"fas fa-clock mr-2"},Wn={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=ut({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),z=j(()=>{const v=new Date;return c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>v?new Date(c.apiKey.expiresAt).toISOString().slice(0,16):(v.setMinutes(v.getMinutes()+1),v.toISOString().slice(0,16))}),S=v=>new Date(v).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),W=()=>{if(!I.renewDuration){I.newExpiresAt=null;return}if(I.renewDuration==="permanent"){I.newExpiresAt=null;return}if(I.renewDuration==="custom")return;const v=c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>new Date?new Date(c.apiKey.expiresAt):new Date,f=I.renewDuration.match(/(\d+)([dhmy])/);if(f){const[,M,se]=f,G=parseInt(M);switch(se){case"d":v.setDate(v.getDate()+G);break;case"h":v.setHours(v.getHours()+G);break;case"m":v.setMonth(v.getMonth()+G);break;case"y":v.setFullYear(v.getFullYear()+G);break}I.newExpiresAt=v.toISOString()}},X=()=>{I.customExpireDate&&(I.newExpiresAt=new Date(I.customExpireDate).toISOString())},Q=async()=>{Y.value=!0;try{const v={expiresAt:I.renewDuration==="permanent"?null:I.newExpiresAt},L=await Vt(c.apiKey.id,v);L.success?(R("API Key 续期成功","success"),P("success"),P("close")):R(L.message||"续期失败","error")}catch{R("续期失败","error")}finally{Y.value=!1}};return W(),(v,L)=>(o(),he(Oe,{to:"body"},[e("div",_n,[e("div",Sn,[e("div",Mn,[L[5]||(L[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:L[0]||(L[0]=f=>v.$emit("close"))},L[4]||(L[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Un,[e("div",Rn,[e("div",Vn,[L[7]||(L[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[L[6]||(L[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pn,u(h.apiKey.name),1),e("p",En," 当前过期时间:"+u(h.apiKey.expiresAt?S(h.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[L[9]||(L[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),_(e("select",{"onUpdate:modelValue":L[1]||(L[1]=f=>I.renewDuration=f),class:"form-input w-full",onChange:W},L[8]||(L[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[kt,I.renewDuration]]),I.renewDuration==="custom"?(o(),n("div",On,[_(e("input",{"onUpdate:modelValue":L[2]||(L[2]=f=>I.customExpireDate=f),class:"form-input w-full",min:z.value,type:"datetime-local",onChange:X},null,40,jn),[[le,I.customExpireDate]])])):$("",!0),I.newExpiresAt?(o(),n("p",Gn," 新的过期时间:"+u(S(I.newExpiresAt)),1)):$("",!0)])]),e("div",zn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:L[3]||(L[3]=f=>v.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value||!I.renewDuration,type:"button",onClick:Q},[Y.value?(o(),n("div",Fn)):(o(),n("i",Bn)),K(" "+u(Y.value?"续期中...":"确认续期"),1)],8,qn)])])])]))}},Nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yn={class:"mb-6 space-y-4"},Qn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jn={class:"font-medium text-gray-900 dark:text-gray-100"},Xn={key:0},Zn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},ei={class:"text-gray-700 dark:text-gray-300"},ti={class:"relative"},si={class:"flex min-h-[60px] items-center break-all rounded-lg border border-gray-700 bg-gray-900 p-4 pr-14 font-mono text-sm text-white dark:border-gray-600 dark:bg-gray-900"},ai={class:"absolute right-3 top-3"},ri=["title"],oi={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(C,T,a="确认",Z="取消",V="primary")=>new Promise(D=>{z.value={title:C,message:T,confirmText:a,cancelText:Z,type:V},S.value=D,I.value=!0}),X=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!0)},Q=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!1)},v=()=>{if(typeof window<"u"){const C=window.location.protocol,T=window.location.host;let a=C+"//"+T;const Z=window.location.href,V=Z.indexOf("/",8);return V!==-1&&(a=Z.substring(0,V)),a}return""},L=j(()=>v()+"/api"),f=()=>{Y.value=!Y.value},M=()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";return C?Y.value||C.length<=12?C:C.substring(0,8)+"●".repeat(Math.max(0,C.length-12))+C.substring(C.length-4):""},se=async(C,T)=>{try{await navigator.clipboard.writeText(C),R(T,"success")}catch{const Z=document.createElement("textarea");Z.value=C,document.body.appendChild(Z),Z.select();try{document.execCommand("copy"),R(T,"success")}catch{R("复制失败,请手动复制","error")}finally{document.body.removeChild(Z)}}},G=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}const T=`export ANTHROPIC_BASE_URL="${L.value}"
+export ANTHROPIC_AUTH_TOKEN="${C}"`;await se(T,"配置信息已复制到剪贴板")},ee=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}await se(C,"API Key 已复制")},te=async()=>{await W("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
+
+确定要关闭吗?`,"确定关闭","取消","warning")&&P("close")},H=async()=>{await W("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。
+
+建议您先复制API Key再关闭。`,"仍然关闭","返回复制","warning")&&P("close")};return(C,T)=>(o(),he(Oe,{to:"body"},[e("div",Nn,[e("div",Hn,[e("div",{class:"mb-6 flex items-center justify-between"},[T[1]||(T[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:H},T[0]||(T[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),T[9]||(T[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Yn,[e("div",null,[T[2]||(T[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Qn,[e("span",Jn,u(h.apiKey.name),1)])]),h.apiKey.description?(o(),n("div",Xn,[T[3]||(T[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zn,[e("span",ei,u(h.apiKey.description||"无描述"),1)])])):$("",!0),e("div",null,[T[4]||(T[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",ti,[e("div",si,u(M()),1),e("div",ai,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:Y.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:f},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,ri)])]),T[5]||(T[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:ee},T[6]||(T[6]=[e("i",{class:"fas fa-key"},null,-1),K(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:G},T[7]||(T[7]=[e("i",{class:"fas fa-copy"},null,-1),K(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:te},T[8]||(T[8]=[e("i",{class:"fas fa-check-circle"},null,-1),K(" 我已保存 ",-1)]))])])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},li=st(oi,[["__scopeId","data-v-42e73733"]]),ni={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ii={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},di={class:"mb-6 flex items-center justify-between"},ui={class:"flex items-center gap-3"},ci={class:"text-sm text-gray-600"},gi={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},pi={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},mi={class:"flex items-center justify-between"},xi={class:"mt-1 text-2xl font-bold text-blue-900"},yi={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},fi={class:"flex items-center justify-between"},bi={class:"mt-1 truncate text-lg font-bold text-green-900"},vi={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},ki={class:"flex items-center justify-between"},wi={class:"mt-1 text-lg font-bold text-purple-900"},hi={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Ai={class:"flex items-center justify-between"},Ci={class:"mt-1 text-lg font-bold text-orange-900"},$i={class:"mb-6"},Ii={class:"mb-3 flex items-center justify-between"},Ki={class:"flex items-center gap-2"},Li={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},Di={class:"font-mono text-xs text-gray-300"},Ti={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(H,C,T="确认",a="取消",Z="primary")=>new Promise(V=>{z.value={title:H,message:C,confirmText:T,cancelText:a,type:Z},S.value=V,I.value=!0}),X=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!0)},Q=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!1)},v=j(()=>{if(c.apiKeys.length>0){const H=c.apiKeys[0],C=H.name.match(/^(.+)_\d+$/);return C?C[1]:H.name}return""}),L=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[H]||H},f=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].expiresAt;if(!H)return"永不过期";const C=new Date(H),a=Math.ceil((C-new Date)/(1e3*60*60*24));return a<=7?`${a}天`:a<=30?`${Math.ceil(a/7)}周`:a<=365?`${Math.ceil(a/30)}个月`:`${Math.ceil(a/365)}年`},M=()=>{Y.value=!Y.value},se=()=>{const C=c.apiKeys.slice(0,10).map(T=>`${T.name}: ${T.apiKey||T.key||""}`);return c.apiKeys.length>10&&C.push(`... 还有 ${c.apiKeys.length-10} 个 API Key`),C.join(`
+`)},G=()=>{const H=c.apiKeys.map(V=>`${V.name}: ${V.apiKey||V.key||""}`).join(`
+`),C=new Blob([H],{type:"text/plain;charset=utf-8"}),T=URL.createObjectURL(C),a=document.createElement("a");a.href=T;const Z=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);a.download=`api-keys-${v.value}-${Z}.txt`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(T),R("API Keys 文件已下载","success")},ee=async()=>{await W("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
+
+确定要关闭吗?`,"确定关闭","返回下载","warning")&&P("close")},te=async()=>{await W("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。
+
+强烈建议您先下载保存。`,"仍然关闭","返回下载","warning")&&P("close")};return(H,C)=>(o(),he(Oe,{to:"body"},[e("div",ni,[e("div",ii,[e("div",di,[e("div",ui,[C[1]||(C[1]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-layer-group text-lg text-white"})],-1)),e("div",null,[C[0]||(C[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",ci,"成功创建 "+u(h.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:te},C[2]||(C[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),C[14]||(C[14]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900"},"重要提醒"),e("p",{class:"text-sm text-amber-800"}," 这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。 ")])])],-1)),e("div",gi,[e("div",pi,[e("div",mi,[e("div",null,[C[3]||(C[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",xi,u(h.apiKeys.length),1)]),C[4]||(C[4]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500 bg-opacity-20"},[e("i",{class:"fas fa-key text-blue-600"})],-1))])]),e("div",yi,[e("div",fi,[e("div",null,[C[5]||(C[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",bi,u(v.value),1)]),C[6]||(C[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-green-500 bg-opacity-20"},[e("i",{class:"fas fa-tag text-green-600"})],-1))])]),e("div",vi,[e("div",ki,[e("div",null,[C[7]||(C[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",wi,u(L()),1)]),C[8]||(C[8]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-purple-500 bg-opacity-20"},[e("i",{class:"fas fa-shield-alt text-purple-600"})],-1))])]),e("div",hi,[e("div",Ai,[e("div",null,[C[9]||(C[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",Ci,u(f()),1)]),C[10]||(C[10]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-orange-500 bg-opacity-20"},[e("i",{class:"fas fa-clock text-orange-600"})],-1))])])]),e("div",$i,[e("div",Ii,[C[12]||(C[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ki,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:M},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye"])},null,2),K(" "+u(Y.value?"隐藏":"显示")+"预览 ",1)]),C[11]||(C[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),Y.value?(o(),n("div",Li,[e("pre",Di,u(se()),1)])):$("",!0)]),e("div",{class:"flex gap-3"},[e("button",{class:"btn btn-primary flex flex-1 items-center justify-center gap-2 px-6 py-3 font-semibold",onClick:G},C[13]||(C[13]=[e("i",{class:"fas fa-download"},null,-1),K(" 下载所有 API Keys ",-1)])),e("button",{class:"rounded-xl border border-gray-300 bg-gray-200 px-6 py-3 font-semibold text-gray-800 transition-colors hover:bg-gray-300",onClick:ee}," 我已保存 ")]),C[15]||(C[15]=e("div",{class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"flex items-start text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 flex-shrink-0"}),e("span",null," 下载的文件格式为文本文件(.txt),每行包含一个 API Key。 请将文件保存在安全的位置,避免泄露。 ")])],-1))])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_i=st(Ti,[["__scopeId","data-v-fa69edb5"]]),Si={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Mi={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Ui={class:"mb-4 flex items-center justify-between sm:mb-6"},Ri={class:"flex items-center gap-2 sm:gap-3"},Vi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Pi={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},Ei={class:"flex items-start gap-3"},Oi={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},ji={class:"space-y-4"},Gi={class:"flex flex-wrap gap-4"},zi={class:"flex cursor-pointer items-center"},qi={class:"flex cursor-pointer items-center"},Fi={class:"flex cursor-pointer items-center"},Bi={class:"flex cursor-pointer items-center"},Wi={key:0,class:"space-y-3"},Ni={key:0},Hi={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Yi={class:"flex flex-wrap gap-2"},Qi=["onClick"],Ji={key:1},Xi={class:"flex flex-wrap gap-2"},Zi=["onClick"],ed={class:"flex gap-2"},td=["onKeypress"],sd={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ad={class:"space-y-2"},rd={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},od={class:"mb-3 flex items-center gap-4"},ld={class:"flex gap-4"},nd={class:"flex cursor-pointer items-center"},id={class:"flex cursor-pointer items-center"},dd={class:"flex cursor-pointer items-center"},ud={class:"flex flex-wrap gap-4"},cd={class:"flex cursor-pointer items-center"},gd={class:"flex cursor-pointer items-center"},pd={class:"flex cursor-pointer items-center"},md={class:"flex cursor-pointer items-center"},xd={class:"flex cursor-pointer items-center"},yd={class:"flex cursor-pointer items-center"},fd={class:"mb-3 flex items-center justify-between"},bd=["disabled"],vd={class:"grid grid-cols-1 gap-3"},kd={class:"flex gap-3 pt-4"},wd=["disabled"],hd={key:0,class:"loading-spinner mr-2"},Ad={key:1,class:"fas fa-save mr-2"},os="__KEEP_ORIGINAL__",Cd={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=ls(),I=A(!1),z=A(!1),S=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),W=A(""),X=A([]),Q=A("none"),v=j(()=>c.selectedKeys.length),L=j(()=>X.value.filter(x=>!f.tags.includes(x))),f=ut({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),M=[{value:os,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],se=x=>j({get:()=>f[x]===""?os:f[x],set:d=>{!d||d===os?f[x]="":f[x]=d}}),G=se("claudeAccountId"),ee=se("geminiAccountId"),te=se("openaiAccountId"),H=se("bedrockAccountId"),C=se("droidAccountId"),T=x=>!f.permissions||f.permissions==="all"||Array.isArray(f.permissions)&&f.permissions.length===0?!0:Array.isArray(f.permissions)?f.permissions.includes(x):f.permissions===x,a=()=>{if(W.value&&W.value.trim()){const x=W.value.trim();f.tags.includes(x)||f.tags.push(x),W.value=""}},Z=x=>{f.tags.includes(x)||f.tags.push(x)},V=x=>{f.tags.splice(x,1)},D=async()=>{var x,d;z.value=!0;try{const[p,b,oe,xe,Te,Ce,N,i,k]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ie=[];p.success&&((x=p.data)==null||x.forEach(l=>{ie.push({...l,platform:"claude-oauth",isDedicated:l.accountType==="dedicated"})})),b.success&&((d=b.data)==null||d.forEach(l=>{ie.push({...l,platform:"claude-console",isDedicated:l.accountType==="dedicated"})})),S.value.claude=ie;const ae=[];oe.success&&(oe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini",isDedicated:l.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini-api",isDedicated:l.accountType==="dedicated"})}),S.value.gemini=ae;const E=[];if(Te.success&&(Te.data||[]).forEach(l=>{E.push({...l,platform:"openai",isDedicated:l.accountType==="dedicated"})}),Ce.success&&(Ce.data||[]).forEach(l=>{E.push({...l,platform:"openai-responses",isDedicated:l.accountType==="dedicated"})}),S.value.openai=E,N.success&&(S.value.bedrock=(N.data||[]).map(l=>({...l,isDedicated:l.accountType==="dedicated"}))),i.success&&(S.value.droid=(i.data||[]).map(l=>({...l,platform:"droid",isDedicated:l.accountType==="dedicated"}))),k.success){const l=k.data||[];S.value.claudeGroups=l.filter(y=>y.platform==="claude"),S.value.geminiGroups=l.filter(y=>y.platform==="gemini"),S.value.openaiGroups=l.filter(y=>y.platform==="openai"),S.value.droidGroups=l.filter(y=>y.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{z.value=!1}},U=async()=>{I.value=!0;try{const x={};f.rateLimitCost!==""&&f.rateLimitCost!==null&&(x.rateLimitCost=parseFloat(f.rateLimitCost)),f.rateLimitWindow!==""&&f.rateLimitWindow!==null&&(x.rateLimitWindow=parseInt(f.rateLimitWindow)),f.rateLimitRequests!==""&&f.rateLimitRequests!==null&&(x.rateLimitRequests=parseInt(f.rateLimitRequests)),f.concurrencyLimit!==""&&f.concurrencyLimit!==null&&(x.concurrencyLimit=parseInt(f.concurrencyLimit)),f.dailyCostLimit!==""&&f.dailyCostLimit!==null&&(x.dailyCostLimit=parseFloat(f.dailyCostLimit)),f.totalCostLimit!==""&&f.totalCostLimit!==null&&(x.totalCostLimit=parseFloat(f.totalCostLimit)),f.weeklyOpusCostLimit!==""&&f.weeklyOpusCostLimit!==null&&(x.weeklyOpusCostLimit=parseFloat(f.weeklyOpusCostLimit)),f.permissions!==""&&(x.permissions=f.permissions),f.claudeAccountId!==""&&(f.claudeAccountId==="SHARED_POOL"?(x.claudeAccountId=null,x.claudeConsoleAccountId=null):f.claudeAccountId.startsWith("console:")?(x.claudeConsoleAccountId=f.claudeAccountId.substring(8),x.claudeAccountId=null):(f.claudeAccountId.startsWith("group:"),x.claudeAccountId=f.claudeAccountId,x.claudeConsoleAccountId=null)),f.geminiAccountId!==""&&(f.geminiAccountId==="SHARED_POOL"?x.geminiAccountId=null:x.geminiAccountId=f.geminiAccountId),f.openaiAccountId!==""&&(f.openaiAccountId==="SHARED_POOL"?x.openaiAccountId=null:x.openaiAccountId=f.openaiAccountId),f.bedrockAccountId!==""&&(f.bedrockAccountId==="SHARED_POOL"?x.bedrockAccountId=null:x.bedrockAccountId=f.bedrockAccountId),f.droidAccountId!==""&&(f.droidAccountId==="SHARED_POOL"?x.droidAccountId=null:x.droidAccountId=f.droidAccountId),f.isActive!==null&&(x.isActive=f.isActive),Q.value!=="none"&&(x.tags=f.tags,x.tagOperation=Q.value);const d=await za({keyIds:c.selectedKeys,updates:x});if(d.success){const{successCount:p,failedCount:b,errors:oe}=d.data;if(p>0){if(R(`成功批量编辑 ${p} 个 API Keys`,"success"),b>0){const xe=oe.map(Te=>`${Te.keyId}: ${Te.error}`).join(`
+`);R(`${b} 个编辑失败:
+${xe}`,"warning")}}else R("所有 API Keys 编辑失败","error");P("success"),P("close")}else R(d.message||"批量编辑失败","error")}catch(x){R("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",x)}finally{I.value=!1}};return wt(async()=>{if(X.value=await Y.fetchTags(),c.accounts){const x=(c.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),d=[];c.accounts.openai&&c.accounts.openai.forEach(p=>{d.push({...p,platform:p.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(p=>{d.push({...p,platform:p.platform||"openai-responses"})}),S.value={claude:c.accounts.claude||[],gemini:x,openai:d,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}}),(x,d)=>(o(),he(Oe,{to:"body"},[e("div",Si,[e("div",Mi,[e("div",Ui,[e("div",Ri,[d[28]||(d[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vi," 批量编辑 API Keys ("+u(v.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:d[0]||(d[0]=p=>x.$emit("close"))},d[29]||(d[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(U,["prevent"])},[e("div",Pi,[e("div",Ei,[d[31]||(d[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[d[30]||(d[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",Oi," 以下设置将应用到所选的 "+u(v.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[d[41]||(d[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",ji,[e("div",Gi,[e("label",zi,[_(e("input",{"onUpdate:modelValue":d[1]||(d[1]=p=>Q.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[De,Q.value]]),d[32]||(d[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",qi,[_(e("input",{"onUpdate:modelValue":d[2]||(d[2]=p=>Q.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[De,Q.value]]),d[33]||(d[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Fi,[_(e("input",{"onUpdate:modelValue":d[3]||(d[3]=p=>Q.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[De,Q.value]]),d[34]||(d[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bi,[_(e("input",{"onUpdate:modelValue":d[4]||(d[4]=p=>Q.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[De,Q.value]]),d[35]||(d[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),Q.value!=="none"?(o(),n("div",Wi,[f.tags.length>0?(o(),n("div",Ni,[e("div",Hi,u(Q.value==="replace"?"新标签列表:":Q.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Yi,[(o(!0),n(re,null,ge(f.tags,(p,b)=>(o(),n("span",{key:"selected-"+b,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[K(u(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:oe=>V(b)},d[36]||(d[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Qi)]))),128))])])):$("",!0),L.value.length>0?(o(),n("div",Ji,[d[38]||(d[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Xi,[(o(!0),n(re,null,ge(L.value,p=>(o(),n("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:b=>Z(p)},[d[37]||(d[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(p),1)],8,Zi))),128))])])):$("",!0),e("div",null,[d[40]||(d[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ed,[_(e("input",{"onUpdate:modelValue":d[5]||(d[5]=p=>W.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(a,["prevent"]),["enter"])},null,40,td),[[le,W.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:a},d[39]||(d[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):$("",!0)])]),e("div",sd,[d[45]||(d[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ad,[e("div",rd,[e("div",null,[d[42]||(d[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),_(e("input",{"onUpdate:modelValue":d[6]||(d[6]=p=>f.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[le,f.rateLimitWindow]])]),e("div",null,[d[43]||(d[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":d[7]||(d[7]=p=>f.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[le,f.rateLimitRequests]])]),e("div",null,[d[44]||(d[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":d[8]||(d[8]=p=>f.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[le,f.rateLimitCost]])])])])]),e("div",null,[d[46]||(d[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[9]||(d[9]=p=>f.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.dailyCostLimit]])]),e("div",null,[d[47]||(d[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[10]||(d[10]=p=>f.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.totalCostLimit]])]),e("div",null,[d[48]||(d[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Claude 模型周费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[11]||(d[11]=p=>f.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.weeklyOpusCostLimit]]),d[49]||(d[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效 ",-1))]),e("div",null,[d[50]||(d[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":d[12]||(d[12]=p=>f.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[le,f.concurrencyLimit]])]),e("div",null,[e("div",od,[d[54]||(d[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ld,[e("label",nd,[_(e("input",{"onUpdate:modelValue":d[13]||(d[13]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[De,f.isActive]]),d[51]||(d[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",id,[_(e("input",{"onUpdate:modelValue":d[14]||(d[14]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[De,f.isActive]]),d[52]||(d[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",dd,[_(e("input",{"onUpdate:modelValue":d[15]||(d[15]=p=>f.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[De,f.isActive]]),d[53]||(d[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[d[61]||(d[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ud,[e("label",cd,[_(e("input",{"onUpdate:modelValue":d[16]||(d[16]=p=>f.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[De,f.permissions]]),d[55]||(d[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",gd,[_(e("input",{"onUpdate:modelValue":d[17]||(d[17]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[De,f.permissions]]),d[56]||(d[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",pd,[_(e("input",{"onUpdate:modelValue":d[18]||(d[18]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[De,f.permissions]]),d[57]||(d[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",md,[_(e("input",{"onUpdate:modelValue":d[19]||(d[19]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[De,f.permissions]]),d[58]||(d[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",xd,[_(e("input",{"onUpdate:modelValue":d[20]||(d[20]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[De,f.permissions]]),d[59]||(d[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",yd,[_(e("input",{"onUpdate:modelValue":d[21]||(d[21]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[De,f.permissions]]),d[60]||(d[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",fd,[d[62]||(d[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:z.value,title:"刷新账号列表",type:"button",onClick:D},[e("i",{class:F(["fas",z.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(z.value?"刷新中...":"刷新账号"),1)],8,bd)]),e("div",vd,[e("div",null,[d[63]||(d[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:Ae(G),"onUpdate:modelValue":d[22]||(d[22]=p=>bt(G)?G.value=p:null),accounts:S.value.claude,"default-option-text":"请选择Claude账号",disabled:!T("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[64]||(d[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:Ae(ee),"onUpdate:modelValue":d[23]||(d[23]=p=>bt(ee)?ee.value=p:null),accounts:S.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!T("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[65]||(d[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:Ae(te),"onUpdate:modelValue":d[24]||(d[24]=p=>bt(te)?te.value=p:null),accounts:S.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!T("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[66]||(d[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:Ae(H),"onUpdate:modelValue":d[25]||(d[25]=p=>bt(H)?H.value=p:null),accounts:S.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!T("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":M},null,8,["modelValue","accounts","disabled"])]),e("div",null,[d[67]||(d[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:Ae(C),"onUpdate:modelValue":d[26]||(d[26]=p=>bt(C)?C.value=p:null),accounts:S.value.droid,"default-option-text":"请选择Droid账号",disabled:!T("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":M},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",kd,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:d[27]||(d[27]=p=>x.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:I.value,type:"submit"},[I.value?(o(),n("div",hd)):(o(),n("i",Ad)),K(" "+u(I.value?"保存中...":"批量保存"),1)],8,wd)])],32)])])]))}},$d={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Id={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Kd={class:"mb-6 flex items-center justify-between"},Ld={class:"flex items-center gap-3"},Dd={class:"text-sm text-gray-600 dark:text-gray-400"},Td={class:"space-y-6"},_d={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Sd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Ud={class:"ml-2 text-xs font-normal text-gray-600"},Rd={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Vd={key:0,class:"mb-4"},Pd={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ed={class:"mb-3 grid grid-cols-3 gap-2"},Od=["onClick"],jd={key:1,class:"animate-fadeIn"},Gd=["min"],zd={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},qd={class:"flex items-center justify-between"},Fd={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Bd={class:"flex gap-3 pt-2"},Wd=["disabled"],Nd={key:0,class:"loading-spinner mr-2"},Hd={key:1,class:"fas fa-save mr-2"},Yd={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(h,{expose:J,emit:c}){const P=h,Y=c,I=A(!1),z=A(!1),S=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),W=A(null),X=(V,D,U="确认",x="取消",d="primary")=>new Promise(p=>{S.value={title:V,message:D,confirmText:U,cancelText:x,type:d},W.value=p,z.value=!0}),Q=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!0)},v=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!1)},L=ut({expireDuration:"",customExpireDate:"",expiresAt:null}),f=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],M=j(()=>{const V=new Date;return V.setMinutes(V.getMinutes()+1),V.toISOString().slice(0,16)});Re(()=>P.show,V=>{V&&se()}),Re(()=>{var V;return(V=P.apiKey)==null?void 0:V.id},V=>{V&&P.show&&se()});const se=()=>{I.value=!1,P.apiKey.expiresAt?(L.expireDuration="custom",L.customExpireDate=new Date(P.apiKey.expiresAt).toISOString().slice(0,16),L.expiresAt=P.apiKey.expiresAt):(L.expireDuration="",L.customExpireDate="",L.expiresAt=null)},G=V=>{if(L.expireDuration=V,!V){L.expiresAt=null;return}if(V==="custom")return;const D=new Date,U=V.match(/(\d+)([dhmy])/);if(U){const[,x,d]=U,p=parseInt(x);switch(d){case"d":D.setDate(D.getDate()+p);break;case"h":D.setHours(D.getHours()+p);break;case"m":D.setMonth(D.getMonth()+p);break;case"y":D.setFullYear(D.getFullYear()+p);break}L.expiresAt=D.toISOString()}},ee=()=>{L.customExpireDate&&(L.expiresAt=new Date(L.customExpireDate).toISOString())},te=V=>V?new Date(V).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",H=V=>V?new Date(V){if(!V)return null;const D=new Date,x=new Date(V)-D,d=Math.ceil(x/(1e3*60*60*24));return x<0?{text:"已过期",class:"text-red-600"}:d<=7?{text:`${d} 天后过期`,class:"text-orange-600"}:d<=30?{text:`${d} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(d/30)} 个月后过期`,class:"text-green-600"}},T=()=>{I.value=!0,Y("save",{keyId:P.apiKey.id,expiresAt:L.expiresAt})},a=async()=>{await X("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${P.apiKey.activationDays||(P.apiKey.activationUnit==="hours"?24:30)} ${P.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消","warning")&&(I.value=!0,Y("save",{keyId:P.apiKey.id,activateNow:!0}))};return J({resetSaving:()=>{I.value=!1}}),(V,D)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",$d,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:D[0]||(D[0]=U=>V.$emit("close"))}),e("div",Id,[e("div",Kd,[e("div",Ld,[D[6]||(D[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[D[5]||(D[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Dd,' 为 "'+u(h.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:D[1]||(D[1]=U=>V.$emit("close"))},D[7]||(D[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Td,[e("div",_d,[e("div",Sd,[e("div",null,[D[12]||(D[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Md,[h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n(re,{key:0},[D[8]||(D[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),D[9]||(D[9]=K(" 未激活 ",-1)),e("span",Ud," (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):h.apiKey.expiresAt?(o(),n(re,{key:1},[K(u(te(h.apiKey.expiresAt))+" ",1),C(h.apiKey.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(h.apiKey.expiresAt).class])}," ("+u(C(h.apiKey.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:2},[D[10]||(D[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),D[11]||(D[11]=K(" 永不过期 ",-1))],64))])]),e("div",Rd,[e("i",{class:F(["fas fa-hourglass-half text-lg",h.apiKey.expiresAt&&H(h.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n("div",Vd,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:a},[D[13]||(D[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),K(" 立即激活 (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Pd,[D[14]||(D[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),K(" 点击立即激活此 API Key,激活后将在 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):$("",!0),e("div",null,[D[16]||(D[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ed,[(o(),n(re,null,ge(f,U=>e("button",{key:U.value,class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.expireDuration===U.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:x=>G(U.value)},u(U.label),11,Od)),64)),e("button",{class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:D[2]||(D[2]=U=>G("custom"))},D[15]||(D[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),K(" 自定义 ",-1)]),2)])]),L.expireDuration==="custom"?(o(),n("div",jd,[D[17]||(D[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),_(e("input",{"onUpdate:modelValue":D[3]||(D[3]=U=>L.customExpireDate=U),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:M.value,type:"datetime-local",onChange:ee},null,40,Gd),[[le,L.customExpireDate]]),D[18]||(D[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):$("",!0),L.expiresAt!==h.apiKey.expiresAt?(o(),n("div",zd,[e("div",qd,[e("div",null,[D[21]||(D[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),K(" 新的过期时间 ")],-1)),e("p",Fd,[L.expiresAt?(o(),n(re,{key:0},[K(u(te(L.expiresAt))+" ",1),C(L.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(L.expiresAt).class])}," ("+u(C(L.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:1},[D[19]||(D[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),D[20]||(D[20]=K(" 永不过期 ",-1))],64))])]),D[22]||(D[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):$("",!0),e("div",Bd,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:D[4]||(D[4]=U=>V.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:I.value||L.expiresAt===h.apiKey.expiresAt,onClick:T},[I.value?(o(),n("div",Nd)):(o(),n("i",Hd)),K(" "+u(I.value?"保存中...":"保存更改"),1)],8,Wd)])])])])):$("",!0),ne(at,{"cancel-text":S.value.cancelText,"confirm-text":S.value.confirmText,message:S.value.message,show:z.value,title:S.value.title,type:S.value.type,onCancel:v,onConfirm:Q},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Qd=st(Yd,[["__scopeId","data-v-20d23095"]]),Jd={class:"w-full"},Xd={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},Zd={key:1,class:"space-y-1.5"},e0={class:"flex items-center justify-between text-[11px] font-medium"},t0={class:"text-gray-700 dark:text-gray-200"},s0={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},a0={class:"relative z-10 flex h-full items-center justify-between px-3"},r0={class:"flex items-center gap-1.5"},o0={class:"flex items-center gap-1.5"},l0={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},n0={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:h=>["daily","opus","window","total"].includes(h)},variant:{type:String,default:"full",validator:h=>["full","compact"].includes(h)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(h){const J=h,c=j(()=>J.variant==="compact"),P=j(()=>{if(!J.limit||J.limit<=0)return 0;const L=J.current/J.limit*100;return Math.min(L,100)}),Y=j(()=>{switch(J.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),I=j(()=>{switch(J.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),z=j(()=>{const L=P.value;return J.type==="daily"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":J.type==="opus"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":J.type==="window"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":J.type==="total"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),S=j(()=>{const L=P.value;if(L>=95)return"bg-rose-500 dark:bg-rose-400";if(L>=80)return"bg-amber-400 dark:bg-amber-300";switch(J.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-gray-400 dark:bg-gray-500"}}),W=j(()=>{const L=P.value;if(L>=95)return"text-rose-600 dark:text-rose-300";if(L>=80)return"text-amber-600 dark:text-amber-300";switch(J.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),X=j(()=>{const L=P.value;let f="";if(L>=90)f="text-red-700 dark:text-red-400";else if(L>=70)f="text-orange-700 dark:text-orange-400";else switch(J.type){case"daily":f="text-green-700 dark:text-green-400";break;case"opus":f="text-purple-700 dark:text-purple-400";break;case"window":f="text-blue-700 dark:text-blue-400";break;default:f="text-gray-600 dark:text-gray-400"}let M="";switch(J.type){case"daily":M="fas fa-calendar-day";break;case"opus":M="fas fa-gem";break;case"window":M="fas fa-clock";break;case"total":M="fas fa-wallet";break;default:M="fas fa-infinity"}return`${M} ${f}`}),Q=j(()=>{if(P.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(J.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),v=j(()=>{const L=P.value;if(L>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(L>=90)return"text-red-700 dark:text-red-300";if(L>=70)return"text-orange-700 dark:text-orange-300";switch(J.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(L,f)=>(o(),n("div",Jd,[!h.limit||h.limit<=0?(o(),n("div",Xd,f[0]||(f[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):c.value?(o(),n("div",Zd,[e("div",e0,[e("div",{class:F(["flex items-center gap-1.5",W.value])},[e("i",{class:F(["text-[11px]",X.value])},null,2),e("span",null,u(h.label),1)],2),e("span",t0,"$"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),1)]),e("div",s0,[e("div",{class:F(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",S.value]),style:Rt({width:P.value+"%"})},null,6)])])):(o(),n("div",{key:2,class:F(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",Y.value])},[e("div",{class:F(["absolute inset-0",I.value])},null,2),e("div",{class:F(["absolute inset-0 h-full transition-all duration-500 ease-out",z.value]),style:Rt({width:P.value+"%"})},null,6),f[1]||(f[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",a0,[e("div",r0,[e("i",{class:F(["text-xs",X.value])},null,2),e("span",{class:F(["text-xs font-semibold",Q.value])},u(h.label),3)]),e("div",o0,[e("span",{class:F(["text-xs font-bold tabular-nums",v.value])}," $"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),3)])]),h.showShine&&P.value>0?(o(),n("div",l0)):$("",!0)],2))]))}},Fe=st(n0,[["__scopeId","data-v-1393272b"]]),i0={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},d0={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},u0={class:"mb-4 flex items-center justify-between sm:mb-6"},c0={class:"flex items-center gap-2 sm:gap-3"},g0={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},p0={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},m0={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},x0={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},y0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},f0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},b0={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},v0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},k0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},w0={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},h0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},A0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},C0={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},$0={class:"space-y-1 text-sm"},I0={class:"flex justify-between"},K0={class:"font-semibold text-gray-900 dark:text-gray-100"},L0={class:"flex justify-between"},D0={class:"font-semibold text-gray-900 dark:text-gray-100"},T0={class:"mb-6"},_0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},S0={class:"flex items-center justify-between"},M0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},U0={class:"flex items-center justify-between"},R0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},V0={key:0,class:"flex items-center justify-between"},P0={class:"text-sm font-semibold text-purple-600"},E0={key:1,class:"flex items-center justify-between"},O0={class:"text-sm font-semibold text-purple-600"},j0={key:0,class:"mb-6"},G0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},z0={key:0,class:"space-y-1.5"},q0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},F0={key:1,class:"space-y-1.5"},B0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},W0={key:2,class:"space-y-1.5"},N0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},H0={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Y0={class:"font-semibold text-purple-600 dark:text-purple-300"},Q0={key:4,class:"space-y-2"},J0={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(h,{emit:J}){const c=h,P=J,Y=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.requests)||0}),I=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.requests)||0}),z=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.tokens)||0}),S=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.tokens)||0}),W=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cost)||0}),X=j(()=>c.apiKey.dailyCost||0),Q=j(()=>c.apiKey.totalCostLimit||0),v=j(()=>c.apiKey.weeklyOpusCost||0),L=j(()=>c.apiKey.weeklyOpusCostLimit||0),f=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.inputTokens)||0}),M=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.outputTokens)||0}),se=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheCreateTokens)||0}),G=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheReadTokens)||0}),ee=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.rpm)||0}),te=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.tpm)||0}),H=j(()=>c.apiKey.dailyCostLimit>0||c.apiKey.totalCostLimit>0||c.apiKey.concurrencyLimit>0||c.apiKey.weeklyOpusCostLimit>0||c.apiKey.rateLimitWindow>0||c.apiKey.tokenLimit>0),C=j(()=>!c.apiKey.dailyCostLimit||c.apiKey.dailyCostLimit===0?0:X.value/c.apiKey.dailyCostLimit*100),T=j(()=>!Q.value||Q.value===0?0:W.value/Q.value*100),a=j(()=>!L.value||L.value===0?0:v.value/L.value*100),Z=U=>U>=1e6?(U/1e6).toFixed(1)+"M":U>=1e3?(U/1e3).toFixed(1)+"K":U.toString(),V=()=>{P("close")},D=()=>{var U;P("open-timeline",(U=c.apiKey)==null?void 0:U.id)};return(U,x)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",i0,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:V}),e("div",d0,[e("div",u0,[e("div",c0,[x[0]||(x[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",g0," 使用统计详情 - "+u(h.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:V},x[1]||(x[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",p0,[e("div",m0,[e("div",x0,[x[2]||(x[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",y0,u(Ae(vt)(Y.value)),1),e("div",f0," 今日: "+u(Ae(vt)(I.value))+" 次 ",1)]),e("div",b0,[x[3]||(x[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",v0,u(Z(z.value)),1),e("div",k0," 今日: "+u(Z(S.value)),1)]),e("div",w0,[x[4]||(x[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",h0," $"+u(W.value.toFixed(4)),1),e("div",A0," 今日: $"+u(X.value.toFixed(4)),1)]),e("div",C0,[x[7]||(x[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",$0,[e("div",I0,[x[5]||(x[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",K0,u(ee.value),1)]),e("div",L0,[x[6]||(x[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",D0,u(te.value),1)])])])]),e("div",T0,[x[12]||(x[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),K(" Token 使用分布 ")],-1)),e("div",_0,[e("div",S0,[x[8]||(x[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",M0,u(Z(f.value)),1)]),e("div",U0,[x[9]||(x[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",R0,u(Z(M.value)),1)]),se.value>0?(o(),n("div",V0,[x[10]||(x[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",P0,u(Z(se.value)),1)])):$("",!0),G.value>0?(o(),n("div",E0,[x[11]||(x[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",O0,u(Z(G.value)),1)])):$("",!0)])]),H.value?(o(),n("div",j0,[x[15]||(x[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),K(" 限制设置 ")],-1)),e("div",G0,[h.apiKey.dailyCostLimit>0?(o(),n("div",z0,[ne(Fe,{current:X.value,label:"每日费用限制",limit:h.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",q0," 已使用 "+u(Math.min(C.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.weeklyOpusCostLimit>0?(o(),n("div",F0,[ne(Fe,{current:v.value,label:"Opus 周费用限制",limit:h.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",B0," 已使用 "+u(Math.min(a.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.totalCostLimit>0?(o(),n("div",W0,[ne(Fe,{current:W.value,label:"总费用限制",limit:h.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",N0," 已使用 "+u(Math.min(T.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.concurrencyLimit>0?(o(),n("div",H0,[x[13]||(x[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Y0,u(h.apiKey.currentConcurrency||0)+" / "+u(h.apiKey.concurrencyLimit),1)])):$("",!0),h.apiKey.rateLimitWindow>0?(o(),n("div",Q0,[x[14]||(x[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),K(" 时间窗口限制 ")],-1)),ne(lr,{"cost-limit":h.apiKey.rateLimitCost,"current-cost":h.apiKey.currentWindowCost,"current-requests":h.apiKey.currentWindowRequests,"current-tokens":h.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":h.apiKey.rateLimitWindow,"request-limit":h.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":h.apiKey.tokenLimit,"window-end-time":h.apiKey.windowEndTime,"window-remaining-seconds":h.apiKey.windowRemainingSeconds,"window-start-time":h.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):$("",!0)])])):$("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:D}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:V}," 关闭 ")])])])):$("",!0)]))}},X0={class:"max-h-[60vh] overflow-y-auto px-6 py-4"},Z0={class:"mb-4 flex gap-2"},eu=["disabled"],tu={key:0,class:"fas fa-spinner fa-spin mr-1"},su={key:1,class:"fas fa-plus mr-1"},au={key:0,class:"py-8 text-center"},ru={key:1,class:"py-8 text-center"},ou={key:2,class:"space-y-2"},lu={class:"flex items-center gap-3"},nu={class:"font-medium text-gray-700 dark:text-gray-200"},iu={class:"rounded-full bg-purple-100 px-2 py-0.5 text-xs text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},du={class:"flex gap-1"},uu=["disabled","onClick"],cu=["disabled","onClick"],gu={class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800"},pu={class:"mb-4"},mu={class:"flex justify-end gap-3"},xu=["disabled"],yu={key:0,class:"fas fa-spinner fa-spin mr-1"},fu={__name:"TagManagementModal",props:{show:{type:Boolean,default:!1}},emits:["close","updated"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A(!1),S=A([]),W=A(""),X=A(!1),Q=A(!1),v=A(null),L=A(null),f=A(""),M=async()=>{Y.value=!0;const T=await Ba();Y.value=!1,T.success&&(S.value=T.data)},se=async()=>{if(!W.value.trim())return;z.value=!0;const T=await qa(W.value.trim());z.value=!1,T.success?(R("标签创建成功","success"),W.value="",M(),P("updated")):R(T.error||"创建失败","error")},G=T=>{v.value=T,X.value=!0},ee=async()=>{if(!v.value)return;X.value=!1,I.value=!0;const T=v.value.name,a=await Wa(T);I.value=!1,a.success?(R(`标签「${T}」已删除`,"success"),S.value=S.value.filter(Z=>Z.name!==T),v.value=null,P("updated")):R(a.error||"删除失败","error")},te=T=>{L.value=T,f.value=T.name,Q.value=!0},H=async()=>{if(!L.value||!f.value.trim())return;I.value=!0;const T=L.value.name,a=await Fa(T,f.value.trim());I.value=!1,a.success?(R("标签已重命名","success"),Q.value=!1,L.value=null,M(),P("updated")):R(a.error||"重命名失败","error")},C=()=>{v.value=null,P("close")};return Re(()=>c.show,T=>{T&&(v.value=null,W.value="",M())}),(T,a)=>{var Z,V;return o(),n(re,null,[(o(),he(Oe,{to:"body"},[ne(Gs,{name:"modal"},{default:js(()=>[h.show?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:$e(C,["self"])},[e("div",{class:"w-full max-w-lg rounded-2xl bg-white shadow-2xl dark:bg-gray-800",onClick:a[1]||(a[1]=$e(()=>{},["stop"]))},[e("div",{class:"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},[a[7]||(a[7]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},[e("i",{class:"fas fa-tags mr-2 text-purple-500"}),K(" 标签管理 ")],-1)),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:C},a[6]||(a[6]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",X0,[e("div",Z0,[_(e("input",{"onUpdate:modelValue":a[0]||(a[0]=D=>W.value=D),class:"flex-1 rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none focus:ring-1 focus:ring-purple-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"输入新标签名称",type:"text",onKeyup:tt(se,["enter"])},null,544),[[le,W.value]]),e("button",{class:"rounded-lg bg-purple-500 px-4 py-2 text-sm font-medium text-white hover:bg-purple-600 disabled:opacity-50",disabled:!W.value.trim()||z.value||I.value,onClick:se},[z.value?(o(),n("i",tu)):(o(),n("i",su)),a[8]||(a[8]=K(" 新增 ",-1))],8,eu)]),Y.value?(o(),n("div",au,a[9]||(a[9]=[e("i",{class:"fas fa-spinner fa-spin text-2xl text-gray-400"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):S.value.length===0?(o(),n("div",ru,a[10]||(a[10]=[e("i",{class:"fas fa-tag text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"暂无标签",-1)]))):(o(),n("div",ou,[(o(!0),n(re,null,ge(S.value,D=>(o(),n("div",{key:D.name,class:"flex items-center justify-between rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-700/50"},[e("div",lu,[a[11]||(a[11]=e("i",{class:"fas fa-tag text-purple-500"},null,-1)),e("span",nu,u(D.name),1),e("span",iu,u(D.count)+" 个 Key ",1)]),e("div",du,[e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-blue-100 hover:text-blue-600 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",disabled:I.value,title:"重命名",onClick:U=>te(D)},a[12]||(a[12]=[e("i",{class:"fas fa-edit"},null,-1)]),8,uu),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-red-100 hover:text-red-600 dark:hover:bg-red-900/30 dark:hover:text-red-400",disabled:I.value,title:"删除标签",onClick:U=>G(D)},a[13]||(a[13]=[e("i",{class:"fas fa-trash"},null,-1)]),8,cu)])]))),128))]))]),e("div",{class:"flex justify-end border-t border-gray-200 px-6 py-4 dark:border-gray-700"},[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:C}," 关闭 ")])])])):$("",!0)]),_:1})])),ne(at,{"cancel-text":"取消","confirm-text":"确定删除",message:`此操作将从 ${((Z=v.value)==null?void 0:Z.count)||0} 个 API Key 中移除该标签,不可恢复。`,show:X.value,title:`删除标签「${((V=v.value)==null?void 0:V.name)||""}」`,type:"danger",onCancel:a[2]||(a[2]=D=>X.value=!1),onConfirm:ee},null,8,["message","show","title"]),(o(),he(Oe,{to:"body"},[Q.value?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:a[5]||(a[5]=$e(D=>Q.value=!1,["self"]))},[e("div",gu,[a[16]||(a[16]=e("h3",{class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},"重命名标签",-1)),e("div",pu,[a[14]||(a[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 新名称 ",-1)),_(e("input",{"onUpdate:modelValue":a[3]||(a[3]=D=>f.value=D),class:"w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"请输入新标签名称",type:"text",onKeyup:tt(H,["enter"])},null,544),[[le,f.value]])]),e("div",mu,[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[4]||(a[4]=D=>Q.value=!1)}," 取消 "),e("button",{class:"rounded-lg bg-blue-500 px-4 py-2 text-sm font-medium text-white hover:bg-blue-600 disabled:opacity-50",disabled:!f.value.trim()||I.value,onClick:H},[I.value?(o(),n("i",yu)):$("",!0),a[15]||(a[15]=K(" 确定 ",-1))],8,xu)])])])):$("",!0)]))],64)}}},bu=st(fu,[["__scopeId","data-v-8e455166"]]),vu={class:"tab-content"},ku={class:"card p-4 sm:p-6"},wu={class:"mb-4 flex flex-col gap-4 sm:mb-6"},hu={class:"border-b border-gray-200 dark:border-gray-700"},Au={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},Cu={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},$u={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},Iu={key:0,class:"tab-panel"},Ku={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Lu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Du={class:"group relative min-w-[140px]"},Tu={key:0,class:"flex items-center"},_u={class:"group relative min-w-[140px]"},Su={class:"relative"},Mu={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},Uu={class:"group relative min-w-[140px]"},Ru={class:"relative"},Vu={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},Pu={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},Eu={class:"sm:w-44"},Ou={class:"group relative flex-1"},ju={class:"relative flex items-center"},Gu=["placeholder"],zu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},qu=["disabled"],Fu={class:"relative"},Bu={class:"relative"},Wu={key:0,class:"py-12 text-center"},Nu={key:1,class:"py-12 text-center"},Hu={key:2,class:"table-wrapper hidden md:block"},Yu={class:"table-container"},Qu={class:"w-full"},Ju={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Xu={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Zu={class:"flex items-center"},ec=["indeterminate"],tc={key:1,class:"fas fa-sort ml-1 text-gray-400"},sc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ac=["title"],rc={key:1,class:"fas fa-sort ml-1 text-gray-400"},oc={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},lc={key:1,class:"fas fa-sort ml-1 text-gray-400"},nc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ic={key:1,class:"fas fa-sort ml-1 text-gray-400"},dc={class:F(["table-row","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:shadow-sm"])},uc={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},cc={class:"flex items-center"},gc=["value"],pc={class:"min-w-0"},mc=["onClick"],xc={key:0,class:"mt-1 text-xs text-red-600"},yc={class:"px-3 py-3"},fc={class:"space-y-1"},bc={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},vc={key:0,class:"flex items-center gap-1 text-xs"},kc={class:"truncate text-gray-600 dark:text-gray-400"},wc={key:1,class:"flex items-center gap-1 text-xs"},hc={class:"truncate text-gray-600 dark:text-gray-400"},Ac={key:2,class:"flex items-center gap-1 text-xs"},Cc={class:"truncate text-gray-600 dark:text-gray-400"},$c={key:3,class:"flex items-center gap-1 text-xs"},Ic={class:"truncate text-gray-600 dark:text-gray-400"},Kc={key:4,class:"flex items-center gap-1 text-xs"},Lc={class:"truncate text-gray-600 dark:text-gray-400"},Dc={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Tc={class:"px-3 py-3"},_c={class:"flex flex-wrap gap-1"},Sc={key:0,class:"text-xs text-gray-400"},Mc={class:"whitespace-nowrap px-3 py-3"},Uc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Rc={key:0,class:"flex items-center justify-end"},Vc={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},Pc={key:2,class:"text-gray-400"},Ec={class:"px-2 py-2",style:{"font-size":"12px"}},Oc={class:"flex flex-col gap-2"},jc={key:0,class:"space-y-2"},Gc={key:2,class:"space-y-1.5"},zc={class:"flex items-center justify-between text-[10px]"},qc={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Fc={class:"font-medium"},Bc={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Wc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Nc={key:0,class:"flex items-center justify-end"},Hc={key:1,class:"flex items-center justify-end gap-1"},Yc={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Qc={key:2,class:"text-gray-400"},Jc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xc={key:0,class:"flex items-center justify-end"},Zc={key:1,class:"flex items-center justify-end gap-1"},eg={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},tg={key:2,class:"text-gray-400"},sg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ag={class:"flex flex-col leading-tight"},rg=["title"],og={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lg={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ng=["title"],ig={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dg={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ug={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},cg={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},gg={class:"inline-flex items-center gap-1.5"},pg={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},mg={key:1},xg=["onClick"],yg=["onClick"],fg=["onClick"],bg=["onClick"],vg={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},kg={class:"hidden gap-1 2xl:flex"},wg=["onClick"],hg=["onClick"],Ag=["onClick"],Cg=["onClick"],$g=["title","onClick"],Ig={class:"ml-1"},Kg=["onClick"],Lg={class:"flex items-center gap-1 2xl:hidden"},Dg=["onClick"],Tg=["onClick"],_g={key:0},Sg={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},Mg={key:0,class:"py-4 text-center"},Ug={class:"space-y-4"},Rg={class:"mb-4 flex items-center justify-between"},Vg={class:"flex items-center gap-2"},Pg={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Eg={class:"flex items-center gap-1"},Og={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},jg=["onClick"],Gg={key:0,class:"py-8 text-center"},zg={class:"mb-3 flex items-center justify-center gap-2"},qg=["onClick"],Fg={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Bg={class:"mb-3 flex items-start justify-between"},Wg={class:"flex-1"},Ng={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Hg={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},Yg={class:"mb-3 space-y-2"},Qg={class:"flex items-center justify-between text-sm"},Jg={class:"font-semibold text-gray-900 dark:text-gray-100"},Xg={class:"flex items-center justify-between text-sm"},Zg={class:"font-semibold text-green-600"},ep={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},tp={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},sp={class:"font-medium"},ap={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},rp={class:"font-medium"},op={key:0,class:"flex items-center justify-between text-xs text-purple-600"},lp={class:"font-medium"},np={key:1,class:"flex items-center justify-between text-xs text-purple-600"},ip={class:"font-medium"},dp={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},up={class:"mt-1 text-right"},cp={class:"text-xs font-medium text-indigo-600"},gp={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},pp={class:"flex items-center justify-between text-sm"},mp={class:"flex gap-4 text-xs"},xp={class:"text-gray-600 dark:text-gray-400"},yp={class:"font-semibold text-gray-800 dark:text-gray-200"},fp={class:"text-gray-600 dark:text-gray-400"},bp={class:"font-semibold text-gray-800 dark:text-gray-200"},vp={key:3,class:"space-y-3 md:hidden"},kp={class:"mb-3 flex items-start justify-between"},wp={class:"flex items-center gap-3"},hp=["value"],Ap=["onClick"],Cp={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},$p={class:"mb-3 space-y-1.5"},Ip={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},Kp={class:"text-gray-600 dark:text-gray-400"},Lp={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},Dp={class:"text-gray-600 dark:text-gray-400"},Tp={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},_p={class:"text-gray-600 dark:text-gray-400"},Sp={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},Mp={class:"text-gray-600 dark:text-gray-400"},Up={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},Rp={class:"text-gray-600 dark:text-gray-400"},Vp={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Pp={key:6,class:"text-xs text-red-600"},Ep={class:"mb-3 space-y-2"},Op={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},jp={class:"mb-2 flex items-center justify-between"},Gp={class:"text-xs text-gray-600 dark:text-gray-400"},zp=["onClick"],qp={class:"grid grid-cols-2 gap-3"},Fp={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Bp={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Wp={key:2,class:"text-sm font-semibold text-gray-400"},Np={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Hp={key:1,class:"text-sm font-semibold text-green-600"},Yp={key:2,class:"text-sm font-semibold text-gray-400"},Qp={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Jp={class:"flex items-center justify-between"},Xp={class:"font-medium text-gray-700 dark:text-gray-300"},Zp={class:"mt-1 flex items-center justify-between"},em={key:0,class:"text-gray-400 dark:text-gray-500"},tm=["title"],sm={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},am={key:2,class:"text-gray-400 dark:text-gray-500"},rm={class:"space-y-2"},om={key:0,class:"space-y-2"},lm={key:2,class:"space-y-2"},nm={class:"flex items-center justify-between text-xs"},im={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},dm={class:"font-medium"},um={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},cm={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},gm={class:"mb-1 flex justify-between"},pm={class:"flex items-center justify-between"},mm={class:"flex items-center gap-1"},xm=["onClick"],ym={key:0,class:"mb-3 flex flex-wrap gap-1"},fm={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},bm=["onClick"],vm=["onClick"],km=["onClick"],wm=["onClick"],hm=["onClick"],Am={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Cm={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},$m={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Im={class:"flex items-center gap-2"},Km=["value"],Lm={class:"flex items-center gap-2"},Dm=["disabled"],Tm={class:"flex items-center gap-1"},_m={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Sm=["onClick"],Mm={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Um=["disabled"],Rm={key:1,class:"tab-panel"},Vm={key:0,class:"py-12 text-center"},Pm={key:1,class:"py-12 text-center"},Em={key:2},Om={class:"mb-4 flex justify-end"},jm={class:"table-wrapper"},Gm={class:"table-container"},zm={class:"w-full"},qm={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Fm={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Bm={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Wm={class:"name-column sticky left-0 z-10 px-3 py-3"},Nm={class:"flex items-center"},Hm={class:"min-w-0"},Ym=["onClick"],Qm={class:"px-3 py-3"},Jm={class:"space-y-1"},Xm={key:0,class:"flex items-center gap-1 text-xs"},Zm={key:1,class:"flex items-center gap-1 text-xs"},ex={key:2,class:"flex items-center gap-1 text-xs"},tx={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},sx={key:0,class:"px-3 py-3"},ax={class:"text-xs"},rx={key:0,class:"text-blue-600"},ox={key:1,class:"text-green-600"},lx={key:2,class:"text-gray-500 dark:text-gray-400"},nx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ix={class:"px-3 py-3"},dx={class:"text-xs"},ux={key:0,class:"text-blue-600"},cx={key:1,class:"text-green-600"},gx={key:2,class:"text-gray-500 dark:text-gray-400"},px={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},mx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},xx={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},yx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},fx={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},bx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},vx={class:"flex items-center justify-end gap-1"},kx={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},wx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},hx={class:"flex flex-col leading-tight"},Ax=["title"],Cx={key:1,class:"text-gray-400",style:{"font-size":"13px"}},$x={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Ix=["title"],Kx={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Lx={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Dx={class:"operations-column operations-cell px-3 py-3"},Tx={class:"flex items-center gap-2"},_x=["onClick"],Sx=["onClick"],Ps=16,Mx={__name:"ApiKeysView",setup(h){const J=Ua(),c=Na(),P=A([]),Y=j(()=>{var s;return((s=c.oemSettings)==null?void 0:s.ldapEnabled)||!1}),I=A([]),z=A(!1),S=A(!1),W=A(!1),X=A(!1),Q=A("today"),v=ut({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),L=j(()=>W.value),f=()=>{W.value=!W.value,W.value||(I.value=[],z.value=!1,S.value=!1)},M=j(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),se=A("active"),G=A([]),ee=A(!1),te=A("createdAt"),H=A("desc"),C=A({}),T=A({}),a=A({page:1,pageSize:20,total:0,totalPages:0}),Z=A(new Map),V=A(new Set),D=A(new Map),U=A(new Set),x=A({}),d=A({}),p=A([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),b=A({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),oe=A(!1),xe=A(!1),Te=A(null),Ce=A(null),N=A(!1),i=A(null),k=A(""),ie=A([]),ae=A([]),E=A([]),l=A(""),y=A("apiKey"),de=j(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),Ue=j(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return ie.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Se=j(()=>E.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),Be=j(()=>k.value?P.value.filter(s=>s.tags&&s.tags.includes(k.value)).length:0),ye=A(1),ce=A((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),Ve=[10,20,50,100],ze=A(!1),We=A(!1),Ne=A(!1),pe=A(!1),Ee=A(!1),ht=A(!1),Wt=A(!1),ns=A(null),is=A(null),ds=A(null),us=A([]),At=A(!1),rt=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Je=A(null),ot=(s,t,m="确认",r="取消",w="primary")=>new Promise(q=>{rt.value={title:s,message:t,confirmText:m,cancelText:r,type:w},Je.value=q,At.value=!0}),Bs=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!0)},Ws=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!1)},Ct=j(()=>P.value),Xe=j(()=>a.value.totalPages||0),ct=j(()=>{const s=[],t=ye.value,m=Xe.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),w=Math.min(m,t+2);t<=3?w=5:t>=m-2&&(r=m-4);for(let q=r;q<=w;q++)s.push(q)}return s}),cs=j(()=>{const s=ct.value;return s.length===0?!1:s[0]>1}),gs=j(()=>{const s=ct.value;return s.length===0?!1:s[s.length-1]{const s=ct.value;return s.length===0?!1:cs.value&&s[0]>2}),Hs=j(()=>{const s=ct.value;return s.length===0?!1:gs.value&&s[s.length-1]P.value),$t=async(s=!1)=>{var t,m;if(!(xe.value&&!s)){oe.value=!0;try{const[r,w,q,B,O,me,fe,g,ke]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),we=[];r.success&&((t=r.data)==null||t.forEach(ue=>{we.push({...ue,platform:"claude-oauth",isDedicated:ue.accountType==="dedicated"})})),w.success&&((m=w.data)==null||m.forEach(ue=>{we.push({...ue,platform:"claude-console",isDedicated:ue.accountType==="dedicated"})})),b.value.claude=we;const Le=[];if(q.success&&(q.data||[]).forEach(ue=>{Le.push({...ue,platform:"gemini",isDedicated:ue.accountType==="dedicated"})}),B.success&&(b.value.geminiApi=(B.data||[]).map(ue=>({...ue,platform:"gemini-api",isDedicated:ue.accountType==="dedicated"})),b.value.geminiApi.forEach(ue=>{Le.push(ue)})),b.value.gemini=Le,O.success&&(b.value.openai=(O.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),me.success&&(b.value.openaiResponses=(me.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),fe.success&&(b.value.bedrock=(fe.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),g.success&&(b.value.droid=(g.data||[]).map(ue=>({...ue,platform:"droid",isDedicated:ue.accountType==="dedicated"}))),ke.success){const ue=ke.data||[];b.value.claudeGroups=ue.filter(be=>be.platform==="claude"),b.value.geminiGroups=ue.filter(be=>be.platform==="gemini"),b.value.openaiGroups=ue.filter(be=>be.platform==="openai"),b.value.droidGroups=ue.filter(be=>be.platform==="droid")}xe.value=!0}catch{}finally{oe.value=!1}}},Ys=async()=>{try{const s=await Qa();s.success&&(E.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},Ke=async(s=!0)=>{var t,m,r;X.value=!0;try{s&&(Z.value.clear(),D.value.clear());const w=new URLSearchParams;w.set("page",ye.value.toString()),w.set("pageSize",ce.value.toString()),w.set("searchMode",y.value),l.value&&w.set("search",l.value),k.value&&w.set("tag",k.value),ae.value.length>0&&w.set("models",ae.value.join(","));const B=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(te.value)?te.value:"createdAt";w.set("sortBy",B),w.set("sortOrder",H.value),B==="cost"&&(v.type==="custom"&&v.customStart&&v.customEnd?(w.set("costTimeRange","custom"),w.set("costStartDate",v.customStart),w.set("costEndDate",v.customEnd)):w.set("costTimeRange",v.preset||"7days")),v.type==="custom"&&v.customStart&&v.customEnd?(w.set("startDate",v.customStart),w.set("endDate",v.customEnd),w.set("timeRange","custom")):v.preset==="all"?w.set("timeRange","all"):w.set("timeRange",v.preset);const O=await Ya(w.toString());O.success&&(P.value=((t=O.data)==null?void 0:t.items)||[],(m=O.data)!=null&&m.pagination&&(a.value=O.data.pagination,ye.value>a.value.totalPages&&a.value.totalPages>0&&(ye.value=a.value.totalPages)),(r=O.data)!=null&&r.availableTags&&(ie.value=O.data.availableTags),Qs(),Js())}catch{R("加载 API Keys 失败","error")}finally{X.value=!1}},Qs=async()=>{const s=P.value;if(!s||s.length===0)return;let t=v.preset,m=null,r=null;v.type==="custom"&&v.customStart&&v.customEnd&&(t="custom",m=v.customStart,r=v.customEnd);const w=s.filter(B=>{const O=Z.value.get(B.id);return!O||O.timeRange!==t||t==="custom"&&(O.startDate!==m||O.endDate!==r)});if(w.length===0)return;const q=w.map(B=>B.id);q.forEach(B=>V.value.add(B));try{const B={keyIds:q,timeRange:t};t==="custom"&&(B.startDate=m,B.endDate=r);const O=await er(B);if(O.success&&O.data)for(const[me,fe]of Object.entries(O.data))Z.value.set(me,{stats:fe,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(B){console.error("加载统计数据失败:",B)}finally{q.forEach(B=>V.value.delete(B))}},ve=s=>{const t=Z.value.get(s);return(t==null?void 0:t.stats)||null},Ze=s=>V.value.has(s),Js=async()=>{const s=P.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||D.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>U.value.add(r));try{const r=await tr({keyIds:m});if(r.success&&r.data)for(const[w,q]of Object.entries(r.data))D.value.set(w,q)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>U.value.delete(r))}},Xs=s=>D.value.get(s)||null,It=s=>U.value.has(s),Kt=async()=>{se.value="deleted",ee.value=!0;try{const s=await Ja();s.success&&(G.value=s.apiKeys||[])}catch{R("加载已删除的 API Keys 失败","error")}finally{ee.value=!1}},nt=s=>{if(s==="cost"){if(!Lt.value){R("费用排序索引正在更新中,请稍后重试","warning");return}v.type==="custom"&&R("正在计算费用排序,可能需要几秒钟...","info")}te.value===s?H.value=H.value==="asc"?"desc":"asc":(te.value=s,H.value=s==="cost"?"desc":"asc")},Lt=j(()=>{if(v.type==="custom")return!0;const s=v.preset,t=T.value[s];return(t==null?void 0:t.status)==="ready"}),Zs=j(()=>{if(v.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=v.preset,t=T.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let it=null;const ps=async()=>{try{const s=await Ha();s.success&&(T.value=s.data||{},ea())}catch(s){console.error("Failed to fetch cost sort status:",s)}},ea=()=>{it&&clearTimeout(it);const t=Object.values(T.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;it=setTimeout(ps,t)},Me=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),gt=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const O=s.substring(6),me=b.value.claudeGroups.find(we=>we.id===O);if(me)return`分组-${me.name}`;const fe=b.value.geminiGroups.find(we=>we.id===O);if(fe)return`分组-${fe.name}`;const g=b.value.openaiGroups.find(we=>we.id===O);if(g)return`分组-${g.name}`;const ke=b.value.droidGroups.find(we=>we.id===O);return ke?`分组-${ke.name}`:`分组-${O.substring(0,8)}`}const t=b.value.claude.find(O=>O.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const O=s.replace("api:",""),me=b.value.gemini.find(fe=>fe.id===O&&fe.platform==="gemini-api");return me?`${me.name}`:`${O.substring(0,8)}`}const m=b.value.gemini.find(O=>O.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const O=s.replace("responses:",""),me=b.value.openaiResponses.find(fe=>fe.id===O);return me?`${me.name}`:`${O.substring(0,8)}`}const r=b.value.openai.find(O=>O.id===s);if(r)return`${r.name}`;const w=b.value.openaiResponses.find(O=>O.id===s);if(w)return`${w.name}`;const q=b.value.bedrock.find(O=>O.id===s);if(q)return`${q.name}`;const B=b.value.droid.find(O=>O.id===s);return B?`${B.name}`:`${s.substring(0,8)}`},ta=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),ms=s=>{if(s.claudeAccountId){const t=gt(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=b.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=b.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},xs=s=>{if(s.geminiAccountId){const t=gt(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),w=b.value.gemini.find(q=>q.id===r&&q.platform==="gemini-api");return w?w.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=b.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ys=s=>{if(s.openaiAccountId){const t=gt(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=b.value.openaiResponses.find(w=>w.id===r)}else m=b.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},fs=s=>{if(s.bedrockAccountId){const t=gt(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=b.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},bs=s=>{if(s.droidAccountId){const t=gt(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=b.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},pt=s=>s?new Date(s)!s||pt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,vs=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",ks=async s=>{C.value[s]?C.value[s]=!1:(C.value[s]=!0,d.value[s]||As(s),await Dt(s,!0))},Dt=async(s,t=!1)=>{if(!t&&x.value[s]&&x.value[s].length>0)return;const m=He(s);try{const r={};m.customStart&&m.customEnd?(r.startDate=m.customStart,r.endDate=m.customEnd,r.period="custom"):r.period=m.preset==="today"||m.preset==="7days"?"daily":"monthly";const w=await rr(s,r);w.success&&(x.value[s]=w.data||[])}catch{R("加载模型统计失败","error"),x.value[s]=[]}},ws=(s,t)=>{const m=t.reduce((r,w)=>r+(w.allTokens||0),0);return m===0?0:Math.round(s/m*100)},sa=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",aa=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.requests)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.requests)||0}},ra=s=>{if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(v.preset==="today")return s.dailyCost||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},oa=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.tokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.tokens)||0}},la=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.inputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.inputTokens)||0}},na=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.outputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.outputTokens)||0}},ia=s=>{if(!x.value[s.id])return ra(s);const t=x.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const w=r.formatted.total.replace("$","").replace(",",""),q=parseFloat(w);isNaN(q)||(m+=q)}}),m},da=s=>{if(hs(s),te.value==="cost"){if(s==="custom")return;const t=T.value[s];(!t||t.status!=="ready")&&(te.value="createdAt",H.value="desc",R("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},hs=s=>{if(v.preset=s,s==="custom"){if(v.type="custom",!v.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=w=>w.getFullYear()+"-"+String(w.getMonth()+1).padStart(2,"0")+"-"+String(w.getDate()).padStart(2,"0")+" 00:00:00";v.customRange=[r(m),r(t)],v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")v.type="preset",v.customStart=null,v.customEnd=null;else{v.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}Ke()},ua=s=>{s&&s.length===2?(v.type="custom",v.preset="custom",v.customRange=s,v.customStart=s[0].split(" ")[0],v.customEnd=s[1].split(" ")[0],Ke()):s===null&&hs("today")},As=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),d.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},He=s=>(d.value[s]||As(s),d.value[s]),Cs=(s,t)=>{const m=He(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(w=>w.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const w=new Date,q=new Date(w);q.setDate(w.getDate()-6);const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)],m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0]}}else{const w=new Date,q=new Date(w);q.setDate(w.getDate()-(r.days-1)),m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0];const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)]}Dt(t,!0)},ca=(s,t)=>{const m=He(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],Dt(s,!0)):t===null&&Cs("7days",s)},$s=s=>s>new Date,ga=s=>{const t=He(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,Dt(s,!0),R("已重置筛选条件并刷新数据","info")},pa=()=>{ze.value=!0,xe.value||$t()},Nt=s=>{ns.value=s,We.value=!0,xe.value||$t()},Ht=s=>{is.value=s,Ne.value=!0},ma=s=>{ze.value=!1,ds.value=s,pe.value=!0,Ke()},xa=s=>{ze.value=!1,us.value=s,Ee.value=!0,Ke()},ya=()=>{if(I.value.length===0){R("请先选择要编辑的 API Keys","warning");return}ht.value=!0,xe.value||$t()},fa=()=>{ht.value=!1,I.value=[],je(),Ke()},ba=()=>{We.value=!1,R("API Key 更新成功","success"),Ke()},va=()=>{Ne.value=!1,R("API Key 续期成功","success"),Ke()},ka=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Nt(s)}];return s.expiresAt&&(pt(s.expiresAt)||mt(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>Ht(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Yt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Qt(s.id)}),t},Yt=async s=>{let t=!0;if(s.isActive&&(t=await ot("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消","warning")),!!t)try{const m=await Vt(s.id,{isActive:!s.isActive});if(m.success){R(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=P.value.find(w=>w.id===s.id);r&&(r.isActive=!s.isActive)}else R(m.message||"操作失败","error")}catch{R("操作失败","error")}},Qt=async s=>{if(await ot("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消","danger"))try{const m=await qs(s);if(m.success){R("API Key 已删除","success");const r=I.value.indexOf(s);r>-1&&I.value.splice(r,1),je(),Ke()}else R(m.message||"删除失败","error")}catch{R("删除失败","error")}},wa=async s=>{var m,r;if(await ot("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消","primary"))try{const w=await sr(s);w.success?(R("API Key 已成功恢复","success"),await Kt(),await Ke()):R(w.error||"恢复失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ha=async s=>{var m,r;if(await ot("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消","danger"))try{const w=await ar(s);w.success?(R("API Key 已彻底删除","success"),Kt()):R(w.error||"彻底删除失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},Aa=async()=>{var m,r;const s=G.value.length;if(s===0){R("没有需要清空的 API Keys","info");return}if(await ot("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消","danger"))try{const w=await Za();w.success?(R(w.message||"已清空所有已删除的 API Keys","success"),w.details&&w.details.failedCount>0&&R(`${w.details.failedCount} 个清空失败`,"warning"),Kt()):R(w.error||"清空失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},Ca=async()=>{const s=I.value.length;if(s===0){R("请先选择要删除的 API Keys","warning");return}if(!await ot("批量删除 API Keys",`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`,"确定删除","取消","danger"))return;const m=[...I.value];try{const r=await Xa({keyIds:m});if(r.success){const{successCount:w,failedCount:q,errors:B}=r.data;if(w>0){if(R(`成功删除 ${w} 个 API Keys`,"success"),q>0){const O=B.map(me=>`${me.keyId}: ${me.error}`).join(`
+`);R(`${q} 个删除失败:
+${O}`,"warning")}}else R("所有 API Keys 删除失败","error");I.value=[],je(),Ke()}else R(r.message||"批量删除失败","error")}catch{R("批量删除失败","error")}},$a=()=>{if(z.value)lt.value.forEach(s=>{I.value.includes(s.id)||I.value.push(s.id)});else{const s=new Set(lt.value.map(t=>t.id));I.value=I.value.filter(t=>!s.has(t))}je()},je=()=>{const s=lt.value.length,t=lt.value.filter(m=>I.value.includes(m.id)).length;t===0?(z.value=!1,S.value=!1):t===s?(z.value=!0,S.value=!1):(z.value=!1,S.value=!0)},xt=s=>{Te.value=s},Is=()=>{Te.value=null},Ia=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await or(s,{expiresAt:t||null,activateNow:m||!1});if(r.success){R(m?"API Key已激活":"过期时间已更新","success");const w=P.value.find(q=>q.id===s);w&&(m&&r.updates?(w.isActivated=!0,w.activatedAt=r.updates.activatedAt,w.expiresAt=r.updates.expiresAt):(w.expiresAt=t||null,t&&!w.isActivated&&(w.isActivated=!0))),Is()}else R(r.message||"更新失败","error"),Ce.value&&Ce.value.resetSaving()}catch{R("更新失败","error"),Ce.value&&Ce.value.resetSaving()}},Ks=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},Tt=s=>{var r,w,q,B,O,me,fe,g,ke,we,Le,ue,be,Mt,qe;const t=ve(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((q=(w=s.usage)==null?void 0:w.total)==null?void 0:q.requests)??0,tokens:(t==null?void 0:t.tokens)??((O=(B=s.usage)==null?void 0:B.total)==null?void 0:O.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((fe=(me=s.usage)==null?void 0:me.total)==null?void 0:fe.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((ke=(g=s.usage)==null?void 0:g.total)==null?void 0:ke.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((Le=(we=s.usage)==null?void 0:we.total)==null?void 0:Le.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((be=(ue=s.usage)==null?void 0:ue.total)==null?void 0:be.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((qe=(Mt=s.usage)==null?void 0:Mt.total)==null?void 0:qe.cacheReadTokens)??0}}};i.value=m,N.value=!0},Ka=s=>{var m;const t=s||((m=i.value)==null?void 0:m.id);t&&(N.value=!1,J.push(`/api-keys/${t}/usage-records`))},Jt=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Xt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},La=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Ls=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},_t=s=>{if(!s)return null;const t=Xs(s.id);return t!==null?t:s.lastUsage||null},Zt=s=>{if(It(s==null?void 0:s.id))return!1;const t=_t(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},es=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const w=La.test(t),q=!m||m===t,B=Ls(r);return w&&q&&(!r||r==="unknown"||B==="other")},Da=s=>s?es(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",yt=s=>Da(_t(s)),ts=s=>{const t=yt(s);return t.length>Ps?`${t.slice(0,Ps)}...`:t},St=s=>{const t=_t(s);if(es(t))return Xt.deleted;const m=(t==null?void 0:t.accountCategory)||Ls(t==null?void 0:t.accountType);return Xt[m]||Xt.other},ss=s=>{const t=_t(s);return es(t)},Ta=()=>{l.value="",ye.value=1},_a=()=>{try{const s=Ct.value.map(g=>{var Ds,Ts,_s,Ss,Ms,Us,Rs,Vs;const ke=aa(g),we=ia(g),Le=oa(g),ue=la(g),be=na(g),Mt={ID:g.id||"",名称:g.name||"",描述:g.description||"",状态:g.isActive?"启用":"禁用",API密钥:g.apiKey||"",过期模式:g.expirationMode==="activation"?"首次使用后激活":g.expirationMode==="fixed"?"固定时间":"无",激活期限:g.activationDays||"",激活单位:g.activationUnit==="hours"?"小时":g.activationUnit==="days"?"天":"",已激活:g.isActivated?"是":"否",激活时间:g.activatedAt?Pe(g.activatedAt):"",过期时间:g.expiresAt?Pe(g.expiresAt):"",服务权限:(()=>{const Ge=g.permissions;return!Ge||Ge==="all"?"全部服务":Array.isArray(Ge)?Ge.length===0?"全部服务":Ge.join(", "):Ge})(),令牌限制:g.tokenLimit==="0"||g.tokenLimit===0?"无限制":g.tokenLimit||"",并发限制:g.concurrencyLimit==="0"||g.concurrencyLimit===0?"无限制":g.concurrencyLimit||"","速率窗口(分钟)":g.rateLimitWindow==="0"||g.rateLimitWindow===0?"无限制":g.rateLimitWindow||"",速率请求限制:g.rateLimitRequests==="0"||g.rateLimitRequests===0?"无限制":g.rateLimitRequests||"","日费用限制($)":g.dailyCostLimit==="0"||g.dailyCostLimit===0?"无限制":`$${g.dailyCostLimit}`||"","总费用限制($)":g.totalCostLimit==="0"||g.totalCostLimit===0?"无限制":`$${g.totalCostLimit}`||"",Claude专属账户:g.claudeAccountId||"",Claude控制台账户:g.claudeConsoleAccountId||"",Gemini专属账户:g.geminiAccountId||"",OpenAI专属账户:g.openaiAccountId||"","Azure OpenAI专属账户":g.azureOpenaiAccountId||"",Bedrock专属账户:g.bedrockAccountId||"",Droid专属账户:g.droidAccountId||"",启用模型限制:g.enableModelRestriction?"是":"否",限制的模型:g.restrictedModels&&g.restrictedModels.length>0?g.restrictedModels.join("; "):"",启用客户端限制:g.enableClientRestriction?"是":"否",允许的客户端:g.allowedClients&&g.allowedClients.length>0?g.allowedClients.join("; "):"",创建时间:g.createdAt?Pe(g.createdAt):"",创建者:g.createdBy||"",用户ID:g.userId||"",用户名:g.userUsername||"",标签:g.tags&&g.tags.length>0?g.tags.join(", "):"无",请求总数:ke,"总费用($)":we.toFixed(2),Token数:Me(Le),输入Token:Me(ue),输出Token:Me(be),最后使用时间:g.lastUsedAt?Pe(g.lastUsedAt):"从未使用",最后使用账号:yt(g),最后使用类型:St(g)},qe={};let dt=null;return v.preset==="today"?dt=(Ts=(Ds=g.usage)==null?void 0:Ds.daily)==null?void 0:Ts.models:v.preset==="7days"?dt=(Ss=(_s=g.usage)==null?void 0:_s.weekly)==null?void 0:Ss.models:v.preset==="30days"?dt=(Us=(Ms=g.usage)==null?void 0:Ms.monthly)==null?void 0:Us.models:v.preset==="all"&&(dt=(Vs=(Rs=g.usage)==null?void 0:Rs.total)==null?void 0:Vs.models),dt&&Object.entries(dt).forEach(([Ge,ft])=>{let Ye=Ge;Ge.includes(":")&&(Ye=Ge.split(":").pop()),Ye=Ye.replace(/[:/]/g,"_"),qe[`${Ye}_请求数`]=ft.requests||0,qe[`${Ye}_费用($)`]=(ft.cost||0).toFixed(2),qe[`${Ye}_Token`]=Me(ft.totalTokens||0),qe[`${Ye}_输入Token`]=Me(ft.inputTokens||0),qe[`${Ye}_输出Token`]=Me(ft.outputTokens||0)}),{...Mt,...qe}}),t=et.utils.book_new(),m=et.utils.json_to_sheet(s),r=et.utils.decode_range(m["!ref"]),w=Object.keys(s[0]||{}),q=w.map(g=>g==="ID"?{wch:40}:g==="名称"?{wch:25}:g==="描述"?{wch:30}:g==="API密钥"?{wch:45}:g==="标签"?{wch:20}:g.includes("时间")?{wch:20}:g.includes("限制")?{wch:15}:g.includes("费用")?{wch:15}:g.includes("Token")?{wch:15}:g.includes("请求")?{wch:12}:g.includes("账户")?{wch:30}:g.includes("权限")||g.includes("模型")||g.includes("客户端")?{wch:20}:g.includes("激活")||g.includes("过期")?{wch:18}:{wch:15});m["!cols"]=q;for(let g=r.s.c;g<=r.e.c;++g){const ke=et.utils.encode_cell({r:0,c:g});if(!m[ke])continue;const we=w[g],Le=we&&we.includes("_");m[ke].s={fill:{fgColor:{rgb:Le?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let g=1;g<=r.e.r;++g)for(let ke=r.s.c;ke<=r.e.c;++ke){const we=et.utils.encode_cell({r:g,c:ke});if(!m[we])continue;const Le=w[ke],ue=m[we].v,be={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};g%2===0&&(be.fill={fgColor:{rgb:"F2F2F2"}}),Le==="名称"?be.alignment={horizontal:"left",vertical:"center"}:Le==="标签"?(be.alignment={horizontal:"left",vertical:"center"},ue==="无"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le==="最后使用时间"?(be.alignment={horizontal:"right",vertical:"center"},ue==="从未使用"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le&&Le.includes("费用")?(be.alignment={horizontal:"right",vertical:"center"},be.font={...be.font,color:{rgb:"0066CC"},bold:!0}):Le&&(Le.includes("Token")||Le.includes("请求"))&&(be.alignment={horizontal:"right",vertical:"center"}),m[we].s=be}et.utils.book_append_sheet(t,m,"用量统计");const B=new Date,O=B.getFullYear()+String(B.getMonth()+1).padStart(2,"0")+String(B.getDate()).padStart(2,"0")+"_"+String(B.getHours()).padStart(2,"0")+String(B.getMinutes()).padStart(2,"0")+String(B.getSeconds()).padStart(2,"0");let me="";v.type==="preset"?me={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[v.preset]||v.preset:me="自定义时间";const fe=`API_Keys_用量统计_${me}_${O}.xlsx`;et.writeFile(t,fe),R(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{R("导出失败,请重试","error")}};Re([k,Q],()=>{ye.value=1,I.value=[],je()});let as=null;return Re(l,()=>{as&&clearTimeout(as),as=setTimeout(()=>{ye.value=1,Ke(!1)},300)}),Re(y,()=>{ye.value=1,Ke(!1)}),Re(k,()=>{ye.value=1,Ke(!1)}),Re(ae,()=>{ye.value=1,Ke(!1)}),Re([te,H],()=>{Ke(!1)}),Re([ye,ce],([s,t],[m,r])=>{(s!==m||t!==r)&&Ke(!1),je()}),Re(ce,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Re(P,()=>{const s=new Set(P.value.map(t=>t.id));I.value=I.value.filter(t=>s.has(t)),je()}),wt(async()=>{ps(),await Promise.all([Ke(),Ys()]),je(),$t()}),Os(()=>{it&&(clearTimeout(it),it=null)}),(s,t)=>{const m=Sa;return o(),n("div",vu,[e("div",ku,[e("div",wu,[t[159]||(t[159]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",hu,[e("nav",Au,[e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>se.value="active")},[t[32]||(t[32]=K(" 活跃 API Keys ",-1)),P.value.length>0?(o(),n("span",Cu,u(P.value.length),1)):$("",!0)],2),e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:Kt},[t[33]||(t[33]=K(" 已删除 API Keys ",-1)),G.value.length>0?(o(),n("span",$u,u(G.value.length),1)):$("",!0)],2)])]),se.value==="active"?(o(),n("div",Iu,[e("div",Ku,[e("div",Lu,[e("div",Du,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ne(Ut,{modelValue:v.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>v.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:M.value,placeholder:"选择时间范围",onChange:da},null,8,["modelValue","options"])]),v.type==="custom"?(o(),n("div",Tu,[ne(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":v.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":ua},null,8,["default-time","model-value"])])):$("",!0),e("div",_u,[t[35]||(t[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Su,[ne(Ut,{modelValue:k.value,"onUpdate:modelValue":t[2]||(t[2]=r=>k.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:Ue.value,placeholder:"所有标签"},null,8,["modelValue","options"]),k.value?(o(),n("span",Mu,u(Be.value),1)):$("",!0)])]),e("div",Uu,[t[36]||(t[36]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Ru,[ne(Ut,{modelValue:ae.value,"onUpdate:modelValue":t[3]||(t[3]=r=>ae.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Se.value,placeholder:"所有模型"},null,8,["modelValue","options"]),ae.value.length>0?(o(),n("span",Vu,u(ae.value.length),1)):$("",!0)])]),e("div",Pu,[e("div",Eu,[ne(Ut,{modelValue:y.value,"onUpdate:modelValue":t[4]||(t[4]=r=>y.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:de.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",Ou,[t[39]||(t[39]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",ju,[_(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>l.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:y.value==="bindingAccount"?"搜索所属账号...":Y.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,Gu),[[le,l.value]]),t[38]||(t[38]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),l.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Ta},t[37]||(t[37]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):$("",!0)])])])]),e("div",zu,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:X.value,onClick:t[6]||(t[6]=r=>Ke())},[t[40]||(t[40]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:F(["fas relative text-green-500",X.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[41]||(t[41]=e("span",{class:"relative"},"刷新",-1))],8,qu),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:f},[e("i",{class:F(W.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(W.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:_a},t[42]||(t[42]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:t[7]||(t[7]=r=>Wt.value=!0)},t[43]||(t[43]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-tags relative text-purple-500"},null,-1),e("span",{class:"relative"},"管理标签",-1)])),I.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>ya())},[t[44]||(t[44]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[45]||(t[45]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",Fu,"编辑选中 ("+u(I.value.length)+")",1)])):$("",!0),I.value.length>0?(o(),n("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[9]||(t[9]=r=>Ca())},[t[46]||(t[46]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[47]||(t[47]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Bu,"删除选中 ("+u(I.value.length)+")",1)])):$("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:$e(pa,["stop"])},t[48]||(t[48]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),X.value?(o(),n("div",Wu,t[49]||(t[49]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):P.value.length===0?(o(),n("div",Nu,t[50]||(t[50]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(o(),n("div",Hu,[e("div",Yu,[e("table",Qu,[e("thead",Ju,[e("tr",null,[L.value?(o(),n("th",Xu,[e("div",Zu,[_(e("input",{"onUpdate:modelValue":t[10]||(t[10]=r=>z.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:$a},null,40,ec),[[Ie,z.value]])])])):$("",!0),e("th",{class:F(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",L.value?"left-[50px]":"left-0"]),onClick:t[11]||(t[11]=r=>nt("name"))},[t[51]||(t[51]=K(" 名称 ",-1)),te.value==="name"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",tc))],2),t[57]||(t[57]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[12]||(t[12]=r=>nt("status"))},[t[52]||(t[52]=K(" 状态 ",-1)),te.value==="status"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",sc))]),e("th",{class:F(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":Lt.value,"cursor-not-allowed opacity-60":!Lt.value}]),title:Zs.value,onClick:t[13]||(t[13]=r=>nt("cost"))},[t[53]||(t[53]=K(" 费用 ",-1)),te.value==="cost"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):Lt.value?(o(),n("i",rc)):(o(),n("i",oc))],10,ac),t[59]||(t[59]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[60]||(t[60]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[61]||(t[61]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>nt("lastUsedAt"))},[t[54]||(t[54]=K(" 最后使用 ",-1)),te.value==="lastUsedAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",lc))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>nt("createdAt"))},[t[55]||(t[55]=K(" 创建时间 ",-1)),te.value==="createdAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",nc))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[16]||(t[16]=r=>nt("expiresAt"))},[t[56]||(t[56]=K(" 过期时间 ",-1)),te.value==="expiresAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",ic))]),t[62]||(t[62]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n(re,{key:r.id},[e("tr",dc,[L.value?(o(),n("td",uc,[e("div",cc,[_(e("input",{"onUpdate:modelValue":t[17]||(t[17]=g=>I.value=g),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,gc),[[Ie,I.value]])])])):$("",!0),e("td",{class:F(["name-column sticky z-10 px-3 py-3",L.value?"left-[50px]":"left-0"])},[e("div",pc,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,mc),Y.value&&r.ownerDisplayName?(o(),n("div",xc,[t[63]||(t[63]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)])],2),e("td",yc,[e("div",fc,[oe.value&&ta(r)?(o(),n("div",bc,t[64]||(t[64]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):(o(),n(re,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",vc,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),K(" Claude ")],-1)),e("span",kc,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",wc,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Gemini ")],-1)),e("span",hc,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Ac,[t[67]||(t[67]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),K(" OpenAI ")],-1)),e("span",Cc,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",$c,[t[68]||(t[68]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),K(" Bedrock ")],-1)),e("span",Ic,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Kc,[t[69]||(t[69]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Droid ")],-1)),e("span",Lc,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Dc,t[70]||(t[70]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)]))):$("",!0)],64))])]),e("td",Tc,[e("div",_c,[(o(!0),n(re,null,ge(r.tags||[],g=>(o(),n("span",{key:g,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(g),1))),128)),!r.tags||r.tags.length===0?(o(),n("span",Sc,"无标签")):$("",!0)])]),e("td",Mc,[e("span",{class:F(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:F(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"禁用"),1)],2)]),e("td",Uc,[Ze(r.id)?(o(),n("div",Rc,t[71]||(t[71]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("span",Vc,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("span",Pc,"-"))]),e("td",Ec,[e("div",Oc,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",jc,t[72]||(t[72]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(o(),n("div",Gc,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zc,[e("div",qc,[t[73]||(t[73]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Fc,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",Bc,t[74]||(t[74]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Wc,[Ze(r.id)?(o(),n("div",Nc,t[75]||(t[75]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("div",Hc,[e("span",Yc,u(Me(ve(r.id).tokens||0)),1)])):(o(),n("span",Qc,"-"))]),e("td",Jc,[Ze(r.id)?(o(),n("div",Xc,t[76]||(t[76]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("div",Zc,[e("span",eg,u(Ae(vt)(ve(r.id).requests||0)),1),t[77]||(t[77]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(o(),n("span",tg,"-"))]),e("td",sg,[e("div",ag,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,rg)):(o(),n("span",og,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",lg,t[78]||(t[78]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",ig," ("+u(St(r))+") ",1))],8,ng)):(o(),n("span",dg," 暂无使用账号 "))])]),e("td",ug,u(new Date(r.createdAt).toLocaleDateString()),1),e("td",cg,[e("div",gg,[r.expirationMode==="activation"&&!r.isActivated?(o(),n("span",pg,[t[79]||(t[79]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),K(" 未激活 ( "+u(r.activationDays||(r.activationUnit==="hours"?24:30))+u(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(o(),n("span",mg,[pt(r.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},t[80]||(t[80]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),K(" 已过期 ",-1)]),8,xg)):mt(r.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},[t[81]||(t[81]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),K(" "+u(vs(r.expiresAt)),1)],8,yg)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},u(vs(r.expiresAt)),9,fg))])):(o(),n("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},t[82]||(t[82]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),K(" 永不过期 ",-1)]),8,bg))])]),e("td",vg,[e("div",kg,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:g=>Tt(r)},t[83]||(t[83]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,wg),r&&r.id?(o(),n("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:g=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[84]||(t[84]=e("span",{class:"ml-1"},"模型",-1))],8,hg)):$("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:g=>Nt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Ag),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:g=>Ht(r)},t[86]||(t[86]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,Cg)):$("",!0),e("button",{class:F([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:g=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",Ig,u(r.isActive?"禁用":"激活"),1)],10,$g),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:g=>Qt(r.id)},t[87]||(t[87]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Kg)]),e("div",Lg,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:g=>Tt(r)},t[88]||(t[88]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,Dg),r&&r.id?(o(),n("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:g=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,Tg)):$("",!0),ne(nr,{actions:ka(r)},null,8,["actions"])])])]),r&&r.id&&C.value[r.id]?(o(),n("tr",_g,[e("td",Sg,[x.value[r.id]?$("",!0):(o(),n("div",Mg,t[89]||(t[89]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",Ug,[e("div",Rg,[t[90]||(t[90]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),K(" 模型使用分布 ")],-1)),e("div",Vg,[x.value[r.id]&&x.value[r.id].length>0?(o(),n("span",Pg,u(x.value[r.id].length)+" 个模型 ",1)):$("",!0),e("div",Eg,[e("div",Og,[(o(!0),n(re,null,ge(He(r.id).presetOptions,g=>(o(),n("button",{key:g.value,class:F(["rounded px-2 py-1 text-xs font-medium transition-colors",He(r.id).preset===g.value&&He(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:ke=>Cs(g.value,r.id)},u(g.label),11,jg))),128))]),ne(m,{class:"api-key-date-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":He(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":g=>ca(r.id,g)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),x.value[r.id]&&x.value[r.id].length===0?(o(),n("div",Gg,[e("div",zg,[t[92]||(t[92]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[93]||(t[93]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:g=>ga(r.id)},t[91]||(t[91]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,qg)]),t[94]||(t[94]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",Fg,[(o(!0),n(re,null,ge(x.value[r.id],g=>(o(),n("div",{key:g.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Bg,[e("div",Wg,[e("span",Ng,u(g.model),1),e("span",Hg,u(g.requests)+" 次请求",1)])]),e("div",Yg,[e("div",Qg,[t[95]||(t[95]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),K(" 总Token: ")],-1)),e("span",Jg,u(Me(g.allTokens)),1)]),e("div",Xg,[t[96]||(t[96]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),K(" 费用: ")],-1)),e("span",Zg,u(sa(g)),1)]),e("div",ep,[e("div",tp,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),K(" 输入: ")],-1)),e("span",sp,u(Me(g.inputTokens)),1)]),e("div",ap,[t[98]||(t[98]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),K(" 输出: ")],-1)),e("span",rp,u(Me(g.outputTokens)),1)]),g.cacheCreateTokens>0?(o(),n("div",op,[t[99]||(t[99]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),K(" 缓存创建: ")],-1)),e("span",lp,u(Me(g.cacheCreateTokens)),1)])):$("",!0),g.cacheReadTokens>0?(o(),n("div",np,[t[100]||(t[100]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),K(" 缓存读取: ")],-1)),e("span",ip,u(Me(g.cacheReadTokens)),1)])):$("",!0)])]),e("div",dp,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Rt({width:ws(g.allTokens,x.value[r.id])+"%"})},null,4)]),e("div",up,[e("span",cp,u(ws(g.allTokens,x.value[r.id]))+"% ",1)])]))),128))])):$("",!0),x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",gp,[e("div",pp,[t[103]||(t[103]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),K(" 总计统计 ")],-1)),e("div",mp,[e("span",xp,[t[101]||(t[101]=K(" 总请求: ",-1)),e("span",yp,u(x.value[r.id].reduce((g,ke)=>g+ke.requests,0)),1)]),e("span",fp,[t[102]||(t[102]=K(" 总Token: ",-1)),e("span",bp,u(Me(x.value[r.id].reduce((g,ke)=>g+ke.allTokens,0))),1)])])])])):$("",!0)])])])):$("",!0)],64)}),128))])])])])),!X.value&&Ct.value.length>0?(o(),n("div",vp,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",kp,[e("div",wp,[L.value?_((o(),n("input",{key:0,"onUpdate:modelValue":t[18]||(t[18]=g=>I.value=g),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,hp)),[[Ie,I.value]]):$("",!0),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ap),e("p",Cp,u(r.id),1)])]),e("span",{class:F(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:F(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"已停用"),1)],2)]),e("div",$p,[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",Ip,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),K(" Claude ")],-1)),e("span",Kp,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",Lp,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),K(" Gemini ")],-1)),e("span",Dp,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Tp,[t[106]||(t[106]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),K(" OpenAI ")],-1)),e("span",_p,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",Sp,[t[107]||(t[107]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),K(" Bedrock ")],-1)),e("span",Mp,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Up,[t[108]||(t[108]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),K(" Droid ")],-1)),e("span",Rp,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Vp,t[109]||(t[109]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 使用共享池 ",-1)]))):$("",!0),Y.value&&r.ownerDisplayName?(o(),n("div",Pp,[t[110]||(t[110]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)]),e("div",Ep,[e("div",Op,[e("div",jp,[e("span",Gp,u(v.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:g=>Tt(r)},t[111]||(t[111]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),K("详情 ",-1)]),8,zp)]),e("div",qp,[e("div",null,[Ze(r.id)?(o(),n("div",Fp)):ve(r.id)?(o(),n("p",Bp,u(Ae(vt)(ve(r.id).requests||0))+" 次 ",1)):(o(),n("p",Wp,"-")),t[112]||(t[112]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[Ze(r.id)?(o(),n("div",Np)):ve(r.id)?(o(),n("p",Hp,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("p",Yp,"-")),t[113]||(t[113]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Qp,[e("div",Jp,[t[114]||(t[114]=e("span",null,"最后使用",-1)),e("span",Xp,u(r.lastUsedAt?Jt(r.lastUsedAt):"从未使用"),1)]),e("div",Zp,[t[116]||(t[116]=e("span",null,"账号",-1)),r.lastUsedAt&&It(r.id)?(o(),n("span",em,t[115]||(t[115]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",sm," ("+u(St(r))+") ",1))],8,tm)):(o(),n("span",am,"暂无使用账号"))])])]),e("div",rm,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",om,t[117]||(t[117]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(o(),n("div",lm,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",nm,[e("div",im,[t[118]||(t[118]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",dm,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",um,t[119]||(t[119]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",cm,[e("div",gm,[t[120]||(t[120]=e("span",null,"创建时间",-1)),e("span",null,u(Ae(Pe)(r.createdAt)),1)]),e("div",pm,[t[122]||(t[122]=e("span",null,"过期时间",-1)),e("div",mm,[e("span",{class:F(mt(r.expiresAt)?"font-semibold text-orange-600":"")},u(r.expiresAt?Ae(Pe)(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:$e(g=>xt(r),["stop"])},t[121]||(t[121]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,xm)])])]),r.tags&&r.tags.length>0?(o(),n("div",ym,[(o(!0),n(re,null,ge(r.tags,g=>(o(),n("span",{key:g,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(g),1))),128))])):$("",!0),e("div",fm,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:g=>Tt(r)},t[123]||(t[123]=[e("i",{class:"fas fa-chart-line"},null,-1),K(" 查看详情 ",-1)]),8,bm),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:g=>Nt(r)},t[124]||(t[124]=[e("i",{class:"fas fa-edit mr-1"},null,-1),K(" 编辑 ",-1)]),8,vm),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:g=>Ht(r)},t[125]||(t[125]=[e("i",{class:"fas fa-clock mr-1"},null,-1),K(" 续期 ",-1)]),8,km)):$("",!0),e("button",{class:F([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:g=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),K(" "+u(r.isActive?"禁用":"激活"),1)],10,wm),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:g=>Qt(r.id)},t[126]||(t[126]=[e("i",{class:"fas fa-trash"},null,-1)]),8,hm)])])}),128))])):$("",!0),Ct.value.length>0?(o(),n("div",Am,[e("div",Cm,[e("span",$m," 共 "+u(Ct.value.length)+" 条记录 ",1),e("div",Im,[t[127]||(t[127]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),_(e("select",{"onUpdate:modelValue":t[19]||(t[19]=r=>ce.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(o(),n(re,null,ge(Ve,r=>e("option",{key:r,value:r},u(r),9,Km)),64))],512),[[kt,ce.value]]),t[128]||(t[128]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Lm,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ye.value===1,onClick:t[20]||(t[20]=r=>ye.value--)},t[129]||(t[129]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,Dm),e("div",Tm,[cs.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ye.value=1)}," 1 ")):$("",!0),Ns.value?(o(),n("span",_m,"...")):$("",!0),(o(!0),n(re,null,ge(ct.value,r=>(o(),n("button",{key:r,class:F(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ye.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:w=>ye.value=r},u(r),11,Sm))),128)),Hs.value?(o(),n("span",Mm,"...")):$("",!0),gs.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[22]||(t[22]=r=>ye.value=Xe.value)},u(Xe.value),1)):$("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ye.value===Xe.value||Xe.value===0,onClick:t[23]||(t[23]=r=>ye.value++)},t[130]||(t[130]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Um)])])):$("",!0)])):se.value==="deleted"?(o(),n("div",Rm,[ee.value?(o(),n("div",Vm,t[131]||(t[131]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):G.value.length===0?(o(),n("div",Pm,t[132]||(t[132]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(o(),n("div",Em,[e("div",Om,[G.value.length>0?(o(),n("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:Aa},[t[133]||(t[133]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),K(" 清空所有已删除 ("+u(G.value.length)+") ",1)])):$("",!0)]),e("div",jm,[e("div",Gm,[e("table",zm,[e("thead",qm,[e("tr",null,[t[134]||(t[134]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),Y.value?(o(),n("th",Fm," 创建者 ")):$("",!0),t[136]||(t[136]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[140]||(t[140]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[141]||(t[141]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[142]||(t[142]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[143]||(t[143]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Bm,[(o(!0),n(re,null,ge(G.value,r=>{var w,q,B,O,me,fe;return o(),n("tr",{key:r.id,class:"table-row"},[e("td",Wm,[e("div",Nm,[t[144]||(t[144]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Hm,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ym)])])]),e("td",Qm,[e("div",Jm,[r.claudeAccountId?(o(),n("div",Xm,t[145]||(t[145]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(o(),n("div",Zm,t[146]||(t[146]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),K(" Claude Console ")],-1)]))):r.geminiAccountId?(o(),n("div",ex,t[147]||(t[147]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),K(" Gemini ")],-1)]))):(o(),n("div",tx,t[148]||(t[148]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)])))])]),Y.value?(o(),n("td",sx,[e("div",ax,[r.createdBy==="admin"?(o(),n("span",rx,t[149]||(t[149]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),K(" 管理员 ",-1)]))):r.userUsername?(o(),n("span",ox,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.userUsername),1)])):(o(),n("span",lx,t[151]||(t[151]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),K(" 未知 ",-1)])))])])):$("",!0),e("td",nx,u(Ae(Pe)(r.createdAt)),1),e("td",ix,[e("div",dx,[r.deletedByType==="admin"?(o(),n("span",ux,[t[152]||(t[152]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):r.deletedByType==="user"?(o(),n("span",cx,[t[153]||(t[153]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):(o(),n("span",gx,[t[154]||(t[154]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)]))])]),e("td",px,u(Ae(Pe)(r.deletedAt)),1),e("td",mx,[e("span",xx," $"+u((((q=(w=r.usage)==null?void 0:w.total)==null?void 0:q.cost)||0).toFixed(2)),1)]),e("td",yx,[e("span",fx,u(Me(((O=(B=r.usage)==null?void 0:B.total)==null?void 0:O.tokens)||0)),1)]),e("td",bx,[e("div",vx,[e("span",kx,u(Ae(vt)(((fe=(me=r.usage)==null?void 0:me.total)==null?void 0:fe.requests)||0)),1),t[155]||(t[155]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",wx,[e("div",hx,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,Ax)):(o(),n("span",Cx,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",$x,t[156]||(t[156]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",Kx," ("+u(St(r))+") ",1))],8,Ix)):(o(),n("span",Lx," 暂无使用账号 "))])]),e("td",Dx,[e("div",Tx,[r.canRestore?(o(),n("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:g=>wa(r.id)},t[157]||(t[157]=[e("i",{class:"fas fa-undo mr-1"},null,-1),K(" 恢复 ",-1)]),8,_x)):$("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:g=>ha(r.id)},t[158]||(t[158]=[e("i",{class:"fas fa-times mr-1"},null,-1),K(" 彻底删除 ",-1)]),8,Sx)])])])}),128))])])])])]))])):$("",!0)])]),ze.value?(o(),he(hl,{key:0,accounts:b.value,onBatchSuccess:xa,onClose:t[24]||(t[24]=r=>ze.value=!1),onSuccess:ma},null,8,["accounts"])):$("",!0),We.value?(o(),he(Tn,{key:1,accounts:b.value,"api-key":ns.value,onClose:t[25]||(t[25]=r=>We.value=!1),onSuccess:ba},null,8,["accounts","api-key"])):$("",!0),Ne.value?(o(),he(Wn,{key:2,"api-key":is.value,onClose:t[26]||(t[26]=r=>Ne.value=!1),onSuccess:va},null,8,["api-key"])):$("",!0),pe.value?(o(),he(li,{key:3,"api-key":ds.value,onClose:t[27]||(t[27]=r=>pe.value=!1)},null,8,["api-key"])):$("",!0),Ee.value?(o(),he(_i,{key:4,"api-keys":us.value,onClose:t[28]||(t[28]=r=>Ee.value=!1)},null,8,["api-keys"])):$("",!0),ht.value?(o(),he(Cd,{key:5,accounts:b.value,"selected-keys":I.value,onClose:t[29]||(t[29]=r=>ht.value=!1),onSuccess:fa},null,8,["accounts","selected-keys"])):$("",!0),ne(Qd,{ref_key:"expiryEditModalRef",ref:Ce,"api-key":Te.value||{id:null,expiresAt:null,name:""},show:!!Te.value,onClose:Is,onSave:Ia},null,8,["api-key","show"]),ne(J0,{"api-key":i.value||{},show:N.value,onClose:t[30]||(t[30]=r=>N.value=!1),onOpenTimeline:Ka},null,8,["api-key","show"]),ne(bu,{show:Wt.value,onClose:t[31]||(t[31]=r=>Wt.value=!1),onUpdated:Ke},null,8,["show"]),ne(at,{"cancel-text":rt.value.cancelText,"confirm-text":rt.value.confirmText,message:rt.value.message,show:At.value,title:rt.value.title,type:rt.value.type,onCancel:Ws,onConfirm:Bs},null,8,["cancel-text","confirm-text","message","show","title","type"])])}}},Gx=st(Mx,[["__scopeId","data-v-4ed7ad31"]]);export{Gx as default};
diff --git a/assets/ApiKeysView-M9vmNqGR.css b/assets/ApiKeysView-M9vmNqGR.css
new file mode 100644
index 00000000..2949c381
--- /dev/null
+++ b/assets/ApiKeysView-M9vmNqGR.css
@@ -0,0 +1 @@
+.custom-scrollbar[data-v-15b77cd6]{scrollbar-width:thin;scrollbar-color:#cbd5e0 #f7fafc}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-track{background:#f7fafc}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-thumb{background-color:#cbd5e0;border-radius:3px}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-thumb:hover{background-color:#a0aec0}pre[data-v-42e73733],pre[data-v-fa69edb5]{white-space:pre-wrap;word-wrap:break-word}@keyframes fadeIn-20d23095{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-20d23095]{animation:fadeIn-20d23095 .2s ease-out}.loading-spinner[data-v-20d23095]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-20d23095 .8s linear infinite;display:inline-block}@keyframes spin-20d23095{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shine-1393272b{0%{transform:translate(-100%)}to{transform:translate(200%)}}.tabular-nums[data-v-1393272b]{font-variant-numeric:tabular-nums}.modal-enter-active[data-v-8e455166],.modal-leave-active[data-v-8e455166]{transition:opacity .2s ease}.modal-enter-from[data-v-8e455166],.modal-leave-to[data-v-8e455166]{opacity:0}.tab-content[data-v-4ed7ad31]{min-height:calc(100vh - 300px)}.table-wrapper[data-v-4ed7ad31]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05);width:100%;position:relative}.dark .table-wrapper[data-v-4ed7ad31]{border-color:#ffffff1a}.table-container[data-v-4ed7ad31]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-4ed7ad31]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-4ed7ad31]::-webkit-scrollbar{height:8px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-track{background:var(--bg-gradient-mid)}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb{background:var(--bg-gradient-end)}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.table-container tbody tr:hover>td[data-v-4ed7ad31]{background-color:rgba(var(--primary-rgb),.06)!important}.dark .table-container tbody tr:hover>td[data-v-4ed7ad31]{background-color:rgba(var(--primary-rgb),.16)!important}.table-container tbody tr:nth-child(odd)>td[data-v-4ed7ad31]{background-color:#fff}.table-container tbody tr:nth-child(2n)>td[data-v-4ed7ad31]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd)>td[data-v-4ed7ad31]{background-color:var(--bg-gradient-start)}.dark .table-container tbody tr:nth-child(2n)>td[data-v-4ed7ad31]{background-color:var(--bg-gradient-mid)}.operations-column[data-v-4ed7ad31]{position:sticky;right:0;z-index:12}.table-container thead .operations-column[data-v-4ed7ad31]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-4ed7ad31]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .operations-column[data-v-4ed7ad31]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-4ed7ad31]{box-shadow:-8px 0 12px -8px #1e293b73}.checkbox-column[data-v-4ed7ad31],.name-column[data-v-4ed7ad31]{position:sticky;z-index:12}.table-container thead .checkbox-column[data-v-4ed7ad31],.table-container thead .name-column[data-v-4ed7ad31]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-4ed7ad31],.dark .table-container thead .name-column[data-v-4ed7ad31]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .name-column[data-v-4ed7ad31]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-4ed7ad31]{box-shadow:8px 0 12px -8px #1e293b73}.loading-spinner[data-v-4ed7ad31]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-4ed7ad31 1s linear infinite}@keyframes spin-4ed7ad31{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.api-key-date-picker[data-v-4ed7ad31] .el-input__inner{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.api-key-date-picker[data-v-4ed7ad31] .el-input__inner:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.api-key-date-picker[data-v-4ed7ad31] .el-range-separator{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper{height:38px;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__inner{height:100%;padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__inner:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__prefix,.custom-date-range-picker[data-v-4ed7ad31] .el-input__suffix{display:flex;align-items:center}.custom-date-range-picker[data-v-4ed7ad31] .el-range-separator{margin-left:.5rem;margin-right:.5rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}
diff --git a/assets/ApiKeysView-PDywvTD3.js b/assets/ApiKeysView-PDywvTD3.js
deleted file mode 100644
index 114375f4..00000000
--- a/assets/ApiKeysView-PDywvTD3.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import{E as ua}from"./element-plus-BUfCkBQO.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as $t,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as $e,f as lt,u as nt,aU as ma}from"./vue-vendor-R8HMg95E.js";import{c as E,_ as Se,s as V,u as xa}from"./index-B3t2NHq9.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-DF7xS2EZ.js";import{C as Ct,_ as fa}from"./ActionDropdown-4ngn0-GS.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),C=async()=>{N.value=!0,g.value=null;try{const _=await E.get("/admin/api-keys");if(_.success)k.value=_.data||[];else throw new Error(_.message||"获取API Keys失败")}catch(_){throw g.value=_.message,_}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:C,createApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",_);if(q.success)return await C(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await C(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${_}/toggle`);if(q.success)return await C(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await C(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${_}`);if(q.success)return await C(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(_,q="all")=>{try{const K=await E.get(`/admin/api-keys/${_}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const _=await E.get("/admin/api-keys/tags");if(_.success)return _.data||[];throw new Error(_.message||"获取标签失败")}catch(_){return console.error("获取标签失败:",_),[]}},sortApiKeys:_=>{j.value===_?L.value=L.value==="asc"?"desc":"asc":(j.value=_,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},Ca={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},$a={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),C=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),_=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),$=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||_.value.length>0||q.value.length>0||K.value.length>0||$.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=C.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},T=()=>{var p;L.value="",(p=C.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:$t(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:C,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:T},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",Ca,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",$a,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),_.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(_.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&$.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe($.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Cr={class:"space-y-2"},$r={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],Co={key:0,class:"loading-spinner mr-2"},$o={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),C=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},_=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},$=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},T=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-
-是否继续?`,"继续创建","返回修改"):u=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-是否继续?`),!u)return}C.value=!0;try{const u={description:a.description||void 0,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(u.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete u.claudeAccountId):(u.claudeAccountId=a.claudeAccountId,delete u.claudeConsoleAccountId)),a.geminiAccountId&&(u.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(u.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(u.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(u.droidAccountId=a.droidAccountId),a.createType==="single"){const i={...u,name:a.name},y=await E.post("/admin/api-keys",i);y.success?(V("API Key 创建成功","success"),F("success",y.data),F("close")):V(y.message||"创建失败","error")}else{const i={...u,createType:"batch",baseName:a.name,count:a.batchCount},y=await E.post("/admin/api-keys/batch",i);y.success?(V(`成功创建 ${y.data.length} 个 API Key`,"success"),F("batch-success",y.data),F("close")):V(y.message||"批量创建失败","error")}}catch{V("创建失败","error")}finally{C.value=!1}};return(u,i)=>(n(),we(Ee,{to:"body"},[e("div",er,[e("div",tr,[e("div",sr,[i[48]||(i[48]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=y=>u.$emit("close"))},i[47]||(i[47]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:_e(A,["prevent"])},[e("div",ar,[e("div",{class:O(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[i[51]||(i[51]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",rr,[e("label",or,[D(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[Ie,a.createType]]),i[49]||(i[49]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),h(" 单个创建 ")],-1))]),e("label",lr,[D(e("input",{"onUpdate:modelValue":i[2]||(i[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[Ie,a.createType]]),i[50]||(i[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),h(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(n(),d("div",nr,[e("div",ir,[e("div",dr,[i[53]||(i[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ur,[D(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[te,a.batchCount,void 0,{number:!0}]]),i[52]||(i[52]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",cr,[i[54]||(i[54]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(a.name||"MyKey")+"_1, "+c(a.name||"MyKey")+"_2 ...",1)])])):w("",!0)]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[h("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>a.name=y),class:O(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:i[5]||(i[5]=y=>Q.value.name="")},null,42,gr),[[te,a.name]])]),Q.value.name?(n(),d("p",pr,c(Q.value.name),1)):w("",!0)]),e("div",null,[i[63]||(i[63]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",mr,[a.tags.length>0?(n(),d("div",xr,[i[57]||(i[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",yr,[(n(!0),d(Z,null,oe(a.tags,(y,ie)=>(n(),d("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:me=>l(ie)},i[56]||(i[56]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,fr)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",br,[i[59]||(i[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",vr,[(n(!0),d(Z,null,oe(f.value,y=>(n(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>T(y)},[i[58]||(i[58]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(y),1)],8,kr))),128))])])):w("",!0),e("div",null,[i[61]||(i[61]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",wr,[D(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>H.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(Ke,["prevent"]),["enter"])},null,40,hr),[[te,H.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ke},i[60]||(i[60]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[62]||(i[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ar,[i[71]||(i[71]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",Cr,[e("div",$r,[e("div",null,[i[64]||(i[64]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),i[65]||(i[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[66]||(i[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":i[8]||(i[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),i[67]||(i[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[68]||(i[68]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":i[9]||(i[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),i[69]||(i[69]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[70]||(i[70]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[73]||(i[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Ir,[e("div",Kr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[12]||(i[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[14]||(i[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),i[72]||(i[72]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[75]||(i[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Lr,[e("div",Dr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[17]||(i[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=y=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[19]||(i[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),i[74]||(i[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[77]||(i[77]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",_r,[e("div",Tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[22]||(i[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[23]||(i[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[24]||(i[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),i[76]||(i[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),D(e("input",{"onUpdate:modelValue":i[25]||(i[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[i[80]||(i[80]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),D(e("textarea",{"onUpdate:modelValue":i[26]||(i[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[te,a.description]])]),e("div",null,[i[88]||(i[88]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Sr,[e("div",Ur,[e("label",Rr,[D(e("input",{"onUpdate:modelValue":i[27]||(i[27]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[Ie,a.expirationMode]]),i[81]||(i[81]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Mr,[D(e("input",{"onUpdate:modelValue":i[28]||(i[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[Ie,a.expirationMode]]),i[82]||(i[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Pr,[a.expirationMode==="fixed"?(n(),d("span",Vr,i[83]||(i[83]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(n(),d("span",Er,i[84]||(i[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(n(),d("div",Or,[D(e("select",{"onUpdate:modelValue":i[29]||(i[29]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:q},i[85]||(i[85]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[dt,a.expireDuration]]),a.expireDuration==="custom"?(n(),d("div",jr,[D(e("input",{"onUpdate:modelValue":i[30]||(i[30]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:_.value,type:"datetime-local",onChange:K},null,40,Gr),[[te,a.customExpireDate]])])):w("",!0),a.expiresAt?(n(),d("p",zr," 将于 "+c($(a.expiresAt))+" 过期 ",1)):w("",!0)])):(n(),d("div",qr,[e("div",Fr,[D(e("input",{"onUpdate:modelValue":i[31]||(i[31]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,Wr),[[te,a.activationDays,void 0,{number:!0}]]),D(e("select",{"onUpdate:modelValue":i[32]||(i[32]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:p},i[86]||(i[86]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[dt,a.activationUnit]])]),e("div",Br,[(n(!0),d(Z,null,oe(o(),y=>(n(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ie=>a.activationDays=y.value},c(y.label),9,Nr))),128))]),e("p",Hr,[i[87]||(i[87]=e("i",{class:"fas fa-clock mr-1"},null,-1)),h(" Key 将在首次使用后激活,激活后 "+c(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+c(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Yr,[e("label",Qr,[D(e("input",{"onUpdate:modelValue":i[33]||(i[33]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[$e,a.permissions]]),i[89]||(i[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Jr,[D(e("input",{"onUpdate:modelValue":i[34]||(i[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[$e,a.permissions]]),i[90]||(i[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Xr,[D(e("input",{"onUpdate:modelValue":i[35]||(i[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[$e,a.permissions]]),i[91]||(i[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Zr,[D(e("input",{"onUpdate:modelValue":i[36]||(i[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[$e,a.permissions]]),i[92]||(i[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[94]||(i[94]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",eo,[i[95]||(i[95]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:z},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,to)]),e("div",so,[e("div",null,[i[96]||(i[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[37]||(i[37]=y=>a.claudeAccountId=y),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[97]||(i[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[38]||(i[38]=y=>a.geminiAccountId=y),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[98]||(i[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[39]||(i[39]=y=>a.openaiAccountId=y),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[99]||(i[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[40]||(i[40]=y=>a.bedrockAccountId=y),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[100]||(i[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[41]||(i[41]=y=>a.droidAccountId=y),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[101]||(i[101]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",ao,[D(e("input",{id:"enableModelRestriction","onUpdate:modelValue":i[42]||(i[42]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[$e,a.enableModelRestriction]]),i[102]||(i[102]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",ro,[e("div",null,[i[105]||(i[105]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",oo,[(n(!0),d(Z,null,oe(a.restrictedModels,(y,ie)=>(n(),d("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[h(c(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:me=>le(ie)},i[103]||(i[103]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,lo)]))),128)),a.restrictedModels.length===0?(n(),d("span",no," 暂无限制的模型 ")):w("",!0)]),e("div",io,[e("div",uo,[(n(!0),d(Z,null,oe(fe.value,y=>(n(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ie=>pe(y)},c(y),9,co))),128)),fe.value.length===0?(n(),d("span",go," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",po,[D(e("input",{"onUpdate:modelValue":i[43]||(i[43]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(X,["prevent"]),["enter"])},null,40,mo),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:X},i[104]||(i[104]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[106]||(i[106]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",xo,[D(e("input",{id:"enableClientRestriction","onUpdate:modelValue":i[44]||(i[44]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[$e,a.enableClientRestriction]]),i[107]||(i[107]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",yo,[e("div",null,[i[108]||(i[108]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",fo,[(n(!0),d(Z,null,oe(x.value,y=>(n(),d("div",{key:y.id,class:"flex items-start"},[D(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":i[45]||(i[45]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,bo),[[$e,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",ko,c(y.name),1),e("span",wo,c(y.description),1)],8,vo)]))),128))])])])):w("",!0)]),e("div",ho,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[46]||(i[46]=y=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:C.value,type:"submit"},[C.value?(n(),d("div",Co)):(n(),d("i",$o)),h(" "+c(C.value?"创建中...":"创建"),1)],8,Ao)])],32)])])]))}},Ko=Se(Io,[["__scopeId","data-v-8a33ec2e"]]),Lo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Do={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},To=["value"],So={key:0,class:"text-gray-500"},Uo={class:"space-y-4"},Ro={key:0},Mo={class:"flex flex-wrap gap-2"},Po=["onClick"],Vo={key:1},Eo={class:"flex flex-wrap gap-2"},Oo=["onClick"],jo={class:"flex gap-2"},Go=["onKeypress"],zo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},qo={class:"space-y-2"},Fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wo={class:"space-y-3"},Bo={class:"flex gap-2"},No={class:"space-y-3"},Ho={class:"flex gap-2"},Yo={class:"space-y-3"},Qo={class:"flex gap-2"},Jo={class:"mb-3 flex items-center"},Xo={class:"flex flex-wrap gap-4"},Zo={class:"flex cursor-pointer items-center"},el={class:"flex cursor-pointer items-center"},tl={class:"flex cursor-pointer items-center"},sl={class:"flex cursor-pointer items-center"},al={class:"mb-3 flex items-center justify-between"},rl=["disabled"],ol={class:"grid grid-cols-1 gap-3"},ll={class:"mb-3 flex items-center"},nl={key:0,class:"space-y-3"},il={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},dl=["onClick"],ul={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},cl={class:"space-y-3"},gl={class:"flex flex-wrap gap-2"},pl=["onClick"],ml={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},xl={class:"flex gap-2"},yl=["onKeydown"],fl={class:"mb-3 flex items-center"},bl={key:0,class:"space-y-3"},vl={class:"space-y-2"},kl=["id","value"],wl=["for"],hl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Al={class:"block text-xs text-gray-500 dark:text-gray-400"},Cl={class:"flex gap-3 pt-4"},$l=["disabled"],Il={key:0,class:"loading-spinner mr-2"},Kl={key:1,class:"fas fa-save mr-2"},Ll={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),C=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I([]),H=I([]),B=I(""),f=I([]),x=R(()=>f.value.filter(T=>!a.tags.includes(T))),a=Ye({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),z=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},_=T=>{a.restrictedModels.splice(T,1)},q=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=R(()=>q.value.filter(T=>!a.restrictedModels.includes(T))),$=T=>{a.restrictedModels.includes(T)||a.restrictedModels.push(T)},X=()=>{if(B.value&&B.value.trim()){const T=B.value.trim();a.tags.includes(T)||a.tags.push(T),B.value=""}},le=T=>{a.tags.includes(T)||a.tags.push(T)},ue=T=>{a.tags.splice(T,1)},fe=async()=>{if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let T=!1;if(window.showConfirm?T=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-
-是否继续?`,"继续保存","返回修改"):T=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-是否继续?`),!T)return}C.value=!0;try{const T={name:a.name,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):0,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):0,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):0,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,permissions:a.permissions,tags:a.tags};a.claudeAccountId?a.claudeAccountId.startsWith("console:")?(T.claudeConsoleAccountId=a.claudeAccountId.substring(8),T.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),T.claudeAccountId=a.claudeAccountId,T.claudeConsoleAccountId=null):(T.claudeAccountId=null,T.claudeConsoleAccountId=null),a.geminiAccountId?T.geminiAccountId=a.geminiAccountId:T.geminiAccountId=null,a.openaiAccountId?T.openaiAccountId=a.openaiAccountId:T.openaiAccountId=null,a.bedrockAccountId?T.bedrockAccountId=a.bedrockAccountId:T.bedrockAccountId=null,a.droidAccountId?T.droidAccountId=a.droidAccountId:T.droidAccountId=null,T.enableModelRestriction=a.enableModelRestriction,T.restrictedModels=a.restrictedModels,T.enableClientRestriction=a.enableClientRestriction,T.allowedClients=a.allowedClients,T.isActive=a.isActive,a.ownerId!==void 0&&(T.ownerId=a.ownerId);const l=await E.put(`/admin/api-keys/${g.apiKey.id}`,T);l.success?(F("success"),F("close")):V(l.message||"更新失败","error")}catch{V("更新失败","error")}finally{C.value=!1}},pe=async()=>{var T,l;W.value=!0;try{const[o,p,A,u,i,y,ie,me,xe]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),he=[];o.success&&((T=o.data)==null||T.forEach(Y=>{he.push({...Y,platform:"claude-oauth",isDedicated:Y.accountType==="dedicated"})})),p.success&&((l=p.data)==null||l.forEach(Y=>{he.push({...Y,platform:"claude-console",isDedicated:Y.accountType==="dedicated"})})),S.value.claude=he;const ce=[];A.success&&(A.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini",isDedicated:Y.accountType==="dedicated"})}),u.success&&(u.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini-api",isDedicated:Y.accountType==="dedicated"})}),S.value.gemini=ce;const Ae=[];if(i.success&&(i.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai",isDedicated:Y.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai-responses",isDedicated:Y.accountType==="dedicated"})}),S.value.openai=Ae,ie.success&&(S.value.bedrock=(ie.data||[]).map(Y=>({...Y,isDedicated:Y.accountType==="dedicated"}))),me.success&&(S.value.droid=(me.data||[]).map(Y=>({...Y,platform:"droid",isDedicated:Y.accountType==="dedicated"}))),xe.success){const Y=xe.data||[];S.value.claudeGroups=Y.filter(J=>J.platform==="claude"),S.value.geminiGroups=Y.filter(J=>J.platform==="gemini"),S.value.openaiGroups=Y.filter(J=>J.platform==="openai"),S.value.droidGroups=Y.filter(J=>J.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},Ke=async()=>{try{const T=await E.get("/admin/users");T.success&&(H.value=T.data||[])}catch{H.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return ut(async()=>{try{const[o,p]=await Promise.all([j.loadSupportedClients(),L.fetchTags(),Ke()]);Q.value=o||[],f.value=p||[]}catch{Q.value=[],f.value=[]}if(g.accounts){const o=(g.accounts.gemini||[]).map(A=>({...A,platform:A.platform||"gemini"})),p=[];g.accounts.openai&&g.accounts.openai.forEach(A=>{p.push({...A,platform:A.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(A=>{p.push({...A,platform:A.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:o,openai:p,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(A=>({...A,platform:A.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}a.name=g.apiKey.name,a.tokenLimit=g.apiKey.tokenLimit||"",a.rateLimitCost=g.apiKey.rateLimitCost||"",g.apiKey.tokenLimit>0&&g.apiKey.rateLimitCost,a.rateLimitWindow=g.apiKey.rateLimitWindow||"",a.rateLimitRequests=g.apiKey.rateLimitRequests||"",a.concurrencyLimit=g.apiKey.concurrencyLimit||"",a.dailyCostLimit=g.apiKey.dailyCostLimit||"",a.totalCostLimit=g.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=g.apiKey.weeklyOpusCostLimit||"";const T=["claude","gemini","openai","droid"];let l=g.apiKey.permissions;if(typeof l=="string")if(l==="all"||l==="")l=[];else if(l.startsWith("["))try{l=JSON.parse(l)}catch{l=T.includes(l)?[l]:[]}else l.includes(",")?l=l.split(",").map(o=>o.trim()).filter(o=>T.includes(o)):T.includes(l)?l=[l]:l=[];Array.isArray(l)?a.permissions=l.filter(o=>T.includes(o)):a.permissions=[],g.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${g.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=g.apiKey.claudeAccountId||"",a.geminiAccountId=g.apiKey.geminiAccountId||"",a.openaiAccountId=g.apiKey.openaiAccountId||"",a.bedrockAccountId=g.apiKey.bedrockAccountId||"",a.droidAccountId=g.apiKey.droidAccountId||"",a.restrictedModels=g.apiKey.restrictedModels||[],a.allowedClients=g.apiKey.allowedClients||[],a.tags=g.apiKey.tags||[],a.enableModelRestriction=g.apiKey.enableModelRestriction===!0||g.apiKey.enableModelRestriction==="true",a.enableClientRestriction=g.apiKey.enableClientRestriction===!0||g.apiKey.enableClientRestriction==="true",a.isActive=g.apiKey.isActive===void 0||g.apiKey.isActive===!0||g.apiKey.isActive==="true",a.ownerId=g.apiKey.userId||"admin"}),(T,l)=>(n(),we(Ee,{to:"body"},[e("div",Lo,[e("div",Do,[e("div",_o,[l[39]||(l[39]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=o=>T.$emit("close"))},l[38]||(l[38]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(fe,["prevent"])},[e("div",null,[l[40]||(l[40]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>a.name=o),class:"form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",maxlength:"100",placeholder:"请输入API Key名称",required:"",type:"text"},null,512),[[te,a.name]])]),l[41]||(l[41]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",null,[l[42]||(l[42]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"所有者",-1)),D(e("select",{"onUpdate:modelValue":l[2]||(l[2]=o=>a.ownerId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(n(!0),d(Z,null,oe(H.value,o=>(n(),d("option",{key:o.id,value:o.id},[h(c(o.displayName)+" ("+c(o.username)+") ",1),o.role==="admin"?(n(),d("span",So,"- 管理员")):w("",!0)],8,To))),128))],512),[[dt,a.ownerId]]),l[43]||(l[43]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制 ",-1))]),e("div",null,[l[51]||(l[51]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"标签",-1)),e("div",Uo,[a.tags.length>0?(n(),d("div",Ro,[l[45]||(l[45]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Mo,[(n(!0),d(Z,null,oe(a.tags,(o,p)=>(n(),d("span",{key:"selected-"+p,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(o)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:A=>ue(p)},l[44]||(l[44]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Po)]))),128))])])):w("",!0),x.value.length>0?(n(),d("div",Vo,[l[47]||(l[47]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Eo,[(n(!0),d(Z,null,oe(x.value,o=>(n(),d("button",{key:"available-"+o,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:p=>le(o)},[l[46]||(l[46]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(o),1)],8,Oo))),128))])])):w("",!0),e("div",null,[l[49]||(l[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",jo,[D(e("input",{"onUpdate:modelValue":l[3]||(l[3]=o=>B.value=o),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(X,["prevent"]),["enter"])},null,40,Go),[[te,B.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:X},l[48]||(l[48]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[50]||(l[50]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",zo,[l[59]||(l[59]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",qo,[e("div",Fo,[e("div",null,[l[52]||(l[52]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":l[4]||(l[4]=o=>a.rateLimitWindow=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),l[53]||(l[53]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":l[5]||(l[5]=o=>a.rateLimitRequests=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),l[55]||(l[55]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":l[6]||(l[6]=o=>a.rateLimitCost=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),l[57]||(l[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[58]||(l[58]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[61]||(l[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wo,[e("div",Bo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[7]||(l[7]=o=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[8]||(l[8]=o=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[9]||(l[9]=o=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=o=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[11]||(l[11]=o=>a.dailyCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),l[60]||(l[60]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[63]||(l[63]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",No,[e("div",Ho,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[12]||(l[12]=o=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[13]||(l[13]=o=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[14]||(l[14]=o=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=o=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[16]||(l[16]=o=>a.totalCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),l[62]||(l[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[65]||(l[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",Yo,[e("div",Qo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[17]||(l[17]=o=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[18]||(l[18]=o=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[19]||(l[19]=o=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=o=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[21]||(l[21]=o=>a.weeklyOpusCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),l[64]||(l[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[l[66]||(l[66]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":l[22]||(l[22]=o=>a.concurrencyLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),l[67]||(l[67]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Jo,[D(e("input",{id:"editIsActive","onUpdate:modelValue":l[23]||(l[23]=o=>a.isActive=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.isActive]]),l[68]||(l[68]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),l[69]||(l[69]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Xo,[e("label",Zo,[D(e("input",{"onUpdate:modelValue":l[24]||(l[24]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[$e,a.permissions]]),l[70]||(l[70]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",el,[D(e("input",{"onUpdate:modelValue":l[25]||(l[25]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[$e,a.permissions]]),l[71]||(l[71]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",tl,[D(e("input",{"onUpdate:modelValue":l[26]||(l[26]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[$e,a.permissions]]),l[72]||(l[72]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",sl,[D(e("input",{"onUpdate:modelValue":l[27]||(l[27]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[$e,a.permissions]]),l[73]||(l[73]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[75]||(l[75]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",al,[l[76]||(l[76]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:pe},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,rl)]),e("div",ol,[e("div",null,[l[77]||(l[77]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[28]||(l[28]=o=>a.claudeAccountId=o),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[29]||(l[29]=o=>a.geminiAccountId=o),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[30]||(l[30]=o=>a.openaiAccountId=o),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[80]||(l[80]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[31]||(l[31]=o=>a.bedrockAccountId=o),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[32]||(l[32]=o=>a.droidAccountId=o),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[82]||(l[82]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",ll,[D(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":l[33]||(l[33]=o=>a.enableModelRestriction=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.enableModelRestriction]]),l[83]||(l[83]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",nl,[e("div",null,[l[86]||(l[86]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",il,[(n(!0),d(Z,null,oe(a.restrictedModels,(o,p)=>(n(),d("span",{key:p,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800 dark:bg-red-900/30 dark:text-red-400"},[h(c(o)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",type:"button",onClick:A=>_(p)},l[84]||(l[84]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,dl)]))),128)),a.restrictedModels.length===0?(n(),d("span",ul," 暂无限制的模型 ")):w("",!0)]),e("div",cl,[e("div",gl,[(n(!0),d(Z,null,oe(K.value,o=>(n(),d("button",{key:o,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 sm:text-sm",type:"button",onClick:p=>$(o)},c(o),9,pl))),128)),K.value.length===0?(n(),d("span",ml," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",xl,[D(e("input",{"onUpdate:modelValue":l[34]||(l[34]=o=>a.modelInput=o),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(z,["prevent"]),["enter"])},null,40,yl),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:z},l[85]||(l[85]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[87]||(l[87]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",fl,[D(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":l[35]||(l[35]=o=>a.enableClientRestriction=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.enableClientRestriction]]),l[88]||(l[88]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",bl,[e("div",null,[l[89]||(l[89]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),l[90]||(l[90]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",vl,[(n(!0),d(Z,null,oe(Q.value,o=>(n(),d("div",{key:o.id,class:"flex items-start"},[D(e("input",{id:`edit_client_${o.id}`,"onUpdate:modelValue":l[36]||(l[36]=p=>a.allowedClients=p),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.id},null,8,kl),[[$e,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${o.id}`},[e("span",hl,c(o.name),1),e("span",Al,c(o.description),1)],8,wl)]))),128))])])])):w("",!0)]),e("div",Cl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[37]||(l[37]=o=>T.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:C.value,type:"submit"},[C.value?(n(),d("div",Il)):(n(),d("i",Kl)),h(" "+c(C.value?"保存中...":"保存修改"),1)],8,$l)])],32)])])]))}},Dl=Se(Ll,[["__scopeId","data-v-0d72eff4"]]),_l={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Tl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Sl={class:"mb-6 flex items-center justify-between"},Ul={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rl={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Ml={class:"flex items-start gap-3"},Pl={class:"text-sm text-gray-700"},Vl={class:"mt-1 text-xs text-gray-600"},El={key:0,class:"mt-3"},Ol=["min"],jl={key:1,class:"mt-2 text-xs text-gray-500"},Gl={class:"flex gap-3 pt-4"},zl=["disabled"],ql={key:0,class:"loading-spinner mr-2"},Fl={key:1,class:"fas fa-clock mr-2"},Wl={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=Ye({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),C=R(()=>{const B=new Date;return g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>B?new Date(g.apiKey.expiresAt).toISOString().slice(0,16):(B.setMinutes(B.getMinutes()+1),B.toISOString().slice(0,16))}),W=B=>new Date(B).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),S=()=>{if(!L.renewDuration){L.newExpiresAt=null;return}if(L.renewDuration==="permanent"){L.newExpiresAt=null;return}if(L.renewDuration==="custom")return;const B=g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>new Date?new Date(g.apiKey.expiresAt):new Date,x=L.renewDuration.match(/(\d+)([dhmy])/);if(x){const[,a,z]=x,_=parseInt(a);switch(z){case"d":B.setDate(B.getDate()+_);break;case"h":B.setHours(B.getHours()+_);break;case"m":B.setMonth(B.getMonth()+_);break;case"y":B.setFullYear(B.getFullYear()+_);break}L.newExpiresAt=B.toISOString()}},Q=()=>{L.customExpireDate&&(L.newExpiresAt=new Date(L.customExpireDate).toISOString())},H=async()=>{j.value=!0;try{const B={expiresAt:L.renewDuration==="permanent"?null:L.newExpiresAt},f=await E.put(`/admin/api-keys/${g.apiKey.id}`,B);f.success?(V("API Key 续期成功","success"),F("success"),F("close")):V(f.message||"续期失败","error")}catch{V("续期失败","error")}finally{j.value=!1}};return S(),(B,f)=>(n(),we(Ee,{to:"body"},[e("div",_l,[e("div",Tl,[e("div",Sl,[f[5]||(f[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:f[0]||(f[0]=x=>B.$emit("close"))},f[4]||(f[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ul,[e("div",Rl,[e("div",Ml,[f[7]||(f[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[f[6]||(f[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pl,c(k.apiKey.name),1),e("p",Vl," 当前过期时间:"+c(k.apiKey.expiresAt?W(k.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[f[9]||(f[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),D(e("select",{"onUpdate:modelValue":f[1]||(f[1]=x=>L.renewDuration=x),class:"form-input w-full",onChange:S},f[8]||(f[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[dt,L.renewDuration]]),L.renewDuration==="custom"?(n(),d("div",El,[D(e("input",{"onUpdate:modelValue":f[2]||(f[2]=x=>L.customExpireDate=x),class:"form-input w-full",min:C.value,type:"datetime-local",onChange:Q},null,40,Ol),[[te,L.customExpireDate]])])):w("",!0),L.newExpiresAt?(n(),d("p",jl," 新的过期时间:"+c(W(L.newExpiresAt)),1)):w("",!0)])]),e("div",Gl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:f[3]||(f[3]=x=>B.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:j.value||!L.renewDuration,type:"button",onClick:H},[j.value?(n(),d("div",ql)):(n(),d("i",Fl)),h(" "+c(j.value?"续期中...":"确认续期"),1)],8,zl)])])])]))}},Bl=Se(Wl,[["__scopeId","data-v-2fba52a3"]]),Nl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yl={class:"mb-6 space-y-4"},Ql={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jl={class:"font-medium text-gray-900 dark:text-gray-100"},Xl={key:0},Zl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},en={class:"text-gray-700 dark:text-gray-300"},tn={class:"relative"},sn={class:"flex min-h-[60px] items-center break-all rounded-lg border border-gray-700 bg-gray-900 p-4 pr-14 font-mono text-sm text-white dark:border-gray-600 dark:bg-gray-900"},an={class:"absolute right-3 top-3"},rn=["title"],on={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=()=>{if(typeof window<"u"){const a=window.location.protocol,z=window.location.host;let _=a+"//"+z;const q=window.location.href,K=q.indexOf("/",8);return K!==-1&&(_=q.substring(0,K)),_}return""},C=R(()=>L()+"/api"),W=()=>{j.value=!j.value},S=()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";return a?j.value||a.length<=12?a:a.substring(0,8)+"●".repeat(Math.max(0,a.length-12))+a.substring(a.length-4):""},Q=async(a,z)=>{try{await navigator.clipboard.writeText(a),V(z,"success")}catch{const q=document.createElement("textarea");q.value=a,document.body.appendChild(q),q.select();try{document.execCommand("copy"),V(z,"success")}catch{V("复制失败,请手动复制","error")}finally{document.body.removeChild(q)}}},H=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}const z=`export ANTHROPIC_BASE_URL="${C.value}"
-export ANTHROPIC_AUTH_TOKEN="${a}"`;await Q(z,"配置信息已复制到剪贴板")},B=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}await Q(a,"API Key 已复制")},f=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
-
-确定要关闭吗?`,"确定关闭","取消")&&F("close"):confirm(`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
-
-确定要关闭吗?`)&&F("close")},x=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。
-
-建议您先复制API Key再关闭。`,"仍然关闭","返回复制")&&F("close"):confirm(`您还没有保存API Key,关闭后将无法再次查看。
-
-确定要关闭吗?`)&&F("close")};return(a,z)=>(n(),we(Ee,{to:"body"},[e("div",Nl,[e("div",Hl,[e("div",{class:"mb-6 flex items-center justify-between"},[z[1]||(z[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:x},z[0]||(z[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),z[9]||(z[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Yl,[e("div",null,[z[2]||(z[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Ql,[e("span",Jl,c(k.apiKey.name),1)])]),k.apiKey.description?(n(),d("div",Xl,[z[3]||(z[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zl,[e("span",en,c(k.apiKey.description||"无描述"),1)])])):w("",!0),e("div",null,[z[4]||(z[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",tn,[e("div",sn,c(S()),1),e("div",an,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:j.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:W},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,rn)])]),z[5]||(z[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:B},z[6]||(z[6]=[e("i",{class:"fas fa-key"},null,-1),h(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:H},z[7]||(z[7]=[e("i",{class:"fas fa-copy"},null,-1),h(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:f},z[8]||(z[8]=[e("i",{class:"fas fa-check-circle"},null,-1),h(" 我已保存 ",-1)]))])])])]))}},ln=Se(on,[["__scopeId","data-v-a3d3d870"]]),nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},dn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},un={class:"mb-6 flex items-center justify-between"},cn={class:"flex items-center gap-3"},gn={class:"text-sm text-gray-600"},pn={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},mn={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},xn={class:"flex items-center justify-between"},yn={class:"mt-1 text-2xl font-bold text-blue-900"},fn={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},bn={class:"flex items-center justify-between"},vn={class:"mt-1 truncate text-lg font-bold text-green-900"},kn={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},wn={class:"flex items-center justify-between"},hn={class:"mt-1 text-lg font-bold text-purple-900"},An={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Cn={class:"flex items-center justify-between"},$n={class:"mt-1 text-lg font-bold text-orange-900"},In={class:"mb-6"},Kn={class:"mb-3 flex items-center justify-between"},Ln={class:"flex items-center gap-2"},Dn={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},_n={class:"font-mono text-xs text-gray-300"},Tn={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=R(()=>{if(g.apiKeys.length>0){const x=g.apiKeys[0],a=x.name.match(/^(.+)_\d+$/);return a?a[1]:x.name}return""}),C=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[x]||x},W=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].expiresAt;if(!x)return"永不过期";const a=new Date(x),_=Math.ceil((a-new Date)/(1e3*60*60*24));return _<=7?`${_}天`:_<=30?`${Math.ceil(_/7)}周`:_<=365?`${Math.ceil(_/30)}个月`:`${Math.ceil(_/365)}年`},S=()=>{j.value=!j.value},Q=()=>{const a=g.apiKeys.slice(0,10).map(z=>`${z.name}: ${z.apiKey||z.key||""}`);return g.apiKeys.length>10&&a.push(`... 还有 ${g.apiKeys.length-10} 个 API Key`),a.join(`
-`)},H=()=>{const x=g.apiKeys.map(K=>`${K.name}: ${K.apiKey||K.key||""}`).join(`
-`),a=new Blob([x],{type:"text/plain;charset=utf-8"}),z=URL.createObjectURL(a),_=document.createElement("a");_.href=z;const q=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);_.download=`api-keys-${L.value}-${q}.txt`,document.body.appendChild(_),_.click(),document.body.removeChild(_),URL.revokeObjectURL(z),V("API Keys 文件已下载","success")},B=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
-
-确定要关闭吗?`,"确定关闭","返回下载")&&F("close"):confirm(`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
-
-确定要关闭吗?`)&&F("close")},f=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。
-
-强烈建议您先下载保存。`,"仍然关闭","返回下载")&&F("close"):confirm(`您还没有下载 API Keys,关闭后将无法再次查看。
-
-确定要关闭吗?`)&&F("close")};return(x,a)=>(n(),we(Ee,{to:"body"},[e("div",nn,[e("div",dn,[e("div",un,[e("div",cn,[a[1]||(a[1]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-layer-group text-lg text-white"})],-1)),e("div",null,[a[0]||(a[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",gn,"成功创建 "+c(k.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:f},a[2]||(a[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),a[14]||(a[14]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900"},"重要提醒"),e("p",{class:"text-sm text-amber-800"}," 这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。 ")])])],-1)),e("div",pn,[e("div",mn,[e("div",xn,[e("div",null,[a[3]||(a[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",yn,c(k.apiKeys.length),1)]),a[4]||(a[4]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500 bg-opacity-20"},[e("i",{class:"fas fa-key text-blue-600"})],-1))])]),e("div",fn,[e("div",bn,[e("div",null,[a[5]||(a[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",vn,c(L.value),1)]),a[6]||(a[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-green-500 bg-opacity-20"},[e("i",{class:"fas fa-tag text-green-600"})],-1))])]),e("div",kn,[e("div",wn,[e("div",null,[a[7]||(a[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",hn,c(C()),1)]),a[8]||(a[8]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-purple-500 bg-opacity-20"},[e("i",{class:"fas fa-shield-alt text-purple-600"})],-1))])]),e("div",An,[e("div",Cn,[e("div",null,[a[9]||(a[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",$n,c(W()),1)]),a[10]||(a[10]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-orange-500 bg-opacity-20"},[e("i",{class:"fas fa-clock text-orange-600"})],-1))])])]),e("div",In,[e("div",Kn,[a[12]||(a[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ln,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:S},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye"])},null,2),h(" "+c(j.value?"隐藏":"显示")+"预览 ",1)]),a[11]||(a[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),j.value?(n(),d("div",Dn,[e("pre",_n,c(Q()),1)])):w("",!0)]),e("div",{class:"flex gap-3"},[e("button",{class:"btn btn-primary flex flex-1 items-center justify-center gap-2 px-6 py-3 font-semibold",onClick:H},a[13]||(a[13]=[e("i",{class:"fas fa-download"},null,-1),h(" 下载所有 API Keys ",-1)])),e("button",{class:"rounded-xl border border-gray-300 bg-gray-200 px-6 py-3 font-semibold text-gray-800 transition-colors hover:bg-gray-300",onClick:B}," 我已保存 ")]),a[15]||(a[15]=e("div",{class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"flex items-start text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 flex-shrink-0"}),e("span",null," 下载的文件格式为文本文件(.txt),每行包含一个 API Key。 请将文件保存在安全的位置,避免泄露。 ")])],-1))])])]))}},Sn=Se(Tn,[["__scopeId","data-v-b0b904b9"]]),Un={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Rn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Mn={class:"mb-4 flex items-center justify-between sm:mb-6"},Pn={class:"flex items-center gap-2 sm:gap-3"},Vn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},En={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},On={class:"flex items-start gap-3"},jn={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},Gn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},qn={class:"flex cursor-pointer items-center"},Fn={class:"flex cursor-pointer items-center"},Wn={class:"flex cursor-pointer items-center"},Bn={class:"flex cursor-pointer items-center"},Nn={key:0,class:"space-y-3"},Hn={key:0},Yn={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Qn={class:"flex flex-wrap gap-2"},Jn=["onClick"],Xn={key:1},Zn={class:"flex flex-wrap gap-2"},ei=["onClick"],ti={class:"flex gap-2"},si=["onKeypress"],ai={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ri={class:"space-y-2"},oi={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},li={class:"mb-3 flex items-center gap-4"},ni={class:"flex gap-4"},ii={class:"flex cursor-pointer items-center"},di={class:"flex cursor-pointer items-center"},ui={class:"flex cursor-pointer items-center"},ci={class:"flex flex-wrap gap-4"},gi={class:"flex cursor-pointer items-center"},pi={class:"flex cursor-pointer items-center"},mi={class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},yi={class:"flex cursor-pointer items-center"},fi={class:"flex cursor-pointer items-center"},bi={class:"mb-3 flex items-center justify-between"},vi=["disabled"],ki={class:"grid grid-cols-1 gap-3"},wi={class:"flex gap-3 pt-4"},hi=["disabled"],Ai={key:0,class:"loading-spinner mr-2"},Ci={key:1,class:"fas fa-save mr-2"},Gt="__KEEP_ORIGINAL__",$i={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=qt(),L=I(!1),C=I(!1),W=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),S=I(""),Q=I([]),H=I("none"),B=R(()=>g.selectedKeys.length),f=R(()=>Q.value.filter(l=>!x.tags.includes(l))),x=Ye({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),a=[{value:Gt,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],z=l=>R({get:()=>x[l]===""?Gt:x[l],set:o=>{!o||o===Gt?x[l]="":x[l]=o}}),_=z("claudeAccountId"),q=z("geminiAccountId"),K=z("openaiAccountId"),$=z("bedrockAccountId"),X=z("droidAccountId"),le=l=>!x.permissions||x.permissions==="all"?!0:x.permissions===l,ue=()=>{if(S.value&&S.value.trim()){const l=S.value.trim();x.tags.includes(l)||x.tags.push(l),S.value=""}},fe=l=>{x.tags.includes(l)||x.tags.push(l)},pe=l=>{x.tags.splice(l,1)},Ke=async()=>{var l,o;C.value=!0;try{const[p,A,u,i,y,ie,me,xe,he]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),ce=[];p.success&&((l=p.data)==null||l.forEach(J=>{ce.push({...J,platform:"claude-oauth",isDedicated:J.accountType==="dedicated"})})),A.success&&((o=A.data)==null||o.forEach(J=>{ce.push({...J,platform:"claude-console",isDedicated:J.accountType==="dedicated"})})),W.value.claude=ce;const Ae=[];u.success&&(u.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini",isDedicated:J.accountType==="dedicated"})}),i.success&&(i.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini-api",isDedicated:J.accountType==="dedicated"})}),W.value.gemini=Ae;const Y=[];if(y.success&&(y.data||[]).forEach(J=>{Y.push({...J,platform:"openai",isDedicated:J.accountType==="dedicated"})}),ie.success&&(ie.data||[]).forEach(J=>{Y.push({...J,platform:"openai-responses",isDedicated:J.accountType==="dedicated"})}),W.value.openai=Y,me.success&&(W.value.bedrock=(me.data||[]).map(J=>({...J,isDedicated:J.accountType==="dedicated"}))),xe.success&&(W.value.droid=(xe.data||[]).map(J=>({...J,platform:"droid",isDedicated:J.accountType==="dedicated"}))),he.success){const J=he.data||[];W.value.claudeGroups=J.filter(be=>be.platform==="claude"),W.value.geminiGroups=J.filter(be=>be.platform==="gemini"),W.value.openaiGroups=J.filter(be=>be.platform==="openai"),W.value.droidGroups=J.filter(be=>be.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{C.value=!1}},T=async()=>{L.value=!0;try{const l={};x.rateLimitCost!==""&&x.rateLimitCost!==null&&(l.rateLimitCost=parseFloat(x.rateLimitCost)),x.rateLimitWindow!==""&&x.rateLimitWindow!==null&&(l.rateLimitWindow=parseInt(x.rateLimitWindow)),x.rateLimitRequests!==""&&x.rateLimitRequests!==null&&(l.rateLimitRequests=parseInt(x.rateLimitRequests)),x.concurrencyLimit!==""&&x.concurrencyLimit!==null&&(l.concurrencyLimit=parseInt(x.concurrencyLimit)),x.dailyCostLimit!==""&&x.dailyCostLimit!==null&&(l.dailyCostLimit=parseFloat(x.dailyCostLimit)),x.totalCostLimit!==""&&x.totalCostLimit!==null&&(l.totalCostLimit=parseFloat(x.totalCostLimit)),x.weeklyOpusCostLimit!==""&&x.weeklyOpusCostLimit!==null&&(l.weeklyOpusCostLimit=parseFloat(x.weeklyOpusCostLimit)),x.permissions!==""&&(l.permissions=x.permissions),x.claudeAccountId!==""&&(x.claudeAccountId==="SHARED_POOL"?(l.claudeAccountId=null,l.claudeConsoleAccountId=null):x.claudeAccountId.startsWith("console:")?(l.claudeConsoleAccountId=x.claudeAccountId.substring(8),l.claudeAccountId=null):(x.claudeAccountId.startsWith("group:"),l.claudeAccountId=x.claudeAccountId,l.claudeConsoleAccountId=null)),x.geminiAccountId!==""&&(x.geminiAccountId==="SHARED_POOL"?l.geminiAccountId=null:l.geminiAccountId=x.geminiAccountId),x.openaiAccountId!==""&&(x.openaiAccountId==="SHARED_POOL"?l.openaiAccountId=null:l.openaiAccountId=x.openaiAccountId),x.bedrockAccountId!==""&&(x.bedrockAccountId==="SHARED_POOL"?l.bedrockAccountId=null:l.bedrockAccountId=x.bedrockAccountId),x.droidAccountId!==""&&(x.droidAccountId==="SHARED_POOL"?l.droidAccountId=null:l.droidAccountId=x.droidAccountId),x.isActive!==null&&(l.isActive=x.isActive),H.value!=="none"&&(l.tags=x.tags,l.tagOperation=H.value);const o=await E.put("/admin/api-keys/batch",{keyIds:g.selectedKeys,updates:l});if(o.success){const{successCount:p,failedCount:A,errors:u}=o.data;if(p>0){if(V(`成功批量编辑 ${p} 个 API Keys`,"success"),A>0){const i=u.map(y=>`${y.keyId}: ${y.error}`).join(`
-`);V(`${A} 个编辑失败:
-${i}`,"warning")}}else V("所有 API Keys 编辑失败","error");F("success"),F("close")}else V(o.message||"批量编辑失败","error")}catch(l){V("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",l)}finally{L.value=!1}};return ut(async()=>{if(Q.value=await j.fetchTags(),g.accounts){const l=(g.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),o=[];g.accounts.openai&&g.accounts.openai.forEach(p=>{o.push({...p,platform:p.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(p=>{o.push({...p,platform:p.platform||"openai-responses"})}),W.value={claude:g.accounts.claude||[],gemini:l,openai:o,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}}),(l,o)=>(n(),we(Ee,{to:"body"},[e("div",Un,[e("div",Rn,[e("div",Mn,[e("div",Pn,[o[28]||(o[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vn," 批量编辑 API Keys ("+c(B.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:o[0]||(o[0]=p=>l.$emit("close"))},o[29]||(o[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(T,["prevent"])},[e("div",En,[e("div",On,[o[31]||(o[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[o[30]||(o[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",jn," 以下设置将应用到所选的 "+c(B.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",Gn,[e("div",zn,[e("label",qn,[D(e("input",{"onUpdate:modelValue":o[1]||(o[1]=p=>H.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[Ie,H.value]]),o[32]||(o[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Fn,[D(e("input",{"onUpdate:modelValue":o[2]||(o[2]=p=>H.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[Ie,H.value]]),o[33]||(o[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Wn,[D(e("input",{"onUpdate:modelValue":o[3]||(o[3]=p=>H.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[Ie,H.value]]),o[34]||(o[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bn,[D(e("input",{"onUpdate:modelValue":o[4]||(o[4]=p=>H.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[Ie,H.value]]),o[35]||(o[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),H.value!=="none"?(n(),d("div",Nn,[x.tags.length>0?(n(),d("div",Hn,[e("div",Yn,c(H.value==="replace"?"新标签列表:":H.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Qn,[(n(!0),d(Z,null,oe(x.tags,(p,A)=>(n(),d("span",{key:"selected-"+A,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[h(c(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:u=>pe(A)},o[36]||(o[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Jn)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",Xn,[o[38]||(o[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Zn,[(n(!0),d(Z,null,oe(f.value,p=>(n(),d("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:A=>fe(p)},[o[37]||(o[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(p),1)],8,ei))),128))])])):w("",!0),e("div",null,[o[40]||(o[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ti,[D(e("input",{"onUpdate:modelValue":o[5]||(o[5]=p=>S.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(ue,["prevent"]),["enter"])},null,40,si),[[te,S.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:ue},o[39]||(o[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):w("",!0)])]),e("div",ai,[o[45]||(o[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ri,[e("div",oi,[e("div",null,[o[42]||(o[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),D(e("input",{"onUpdate:modelValue":o[6]||(o[6]=p=>x.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitWindow]])]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":o[7]||(o[7]=p=>x.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitRequests]])]),e("div",null,[o[44]||(o[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":o[8]||(o[8]=p=>x.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[te,x.rateLimitCost]])])])])]),e("div",null,[o[46]||(o[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[9]||(o[9]=p=>x.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.dailyCostLimit]])]),e("div",null,[o[47]||(o[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[10]||(o[10]=p=>x.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.totalCostLimit]])]),e("div",null,[o[48]||(o[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Claude 模型周费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[11]||(o[11]=p=>x.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.weeklyOpusCostLimit]]),o[49]||(o[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效 ",-1))]),e("div",null,[o[50]||(o[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":o[12]||(o[12]=p=>x.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[te,x.concurrencyLimit]])]),e("div",null,[e("div",li,[o[54]||(o[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ni,[e("label",ii,[D(e("input",{"onUpdate:modelValue":o[13]||(o[13]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[Ie,x.isActive]]),o[51]||(o[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",di,[D(e("input",{"onUpdate:modelValue":o[14]||(o[14]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[Ie,x.isActive]]),o[52]||(o[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ui,[D(e("input",{"onUpdate:modelValue":o[15]||(o[15]=p=>x.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[Ie,x.isActive]]),o[53]||(o[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[o[61]||(o[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ci,[e("label",gi,[D(e("input",{"onUpdate:modelValue":o[16]||(o[16]=p=>x.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[Ie,x.permissions]]),o[55]||(o[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",pi,[D(e("input",{"onUpdate:modelValue":o[17]||(o[17]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[Ie,x.permissions]]),o[56]||(o[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",mi,[D(e("input",{"onUpdate:modelValue":o[18]||(o[18]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,x.permissions]]),o[57]||(o[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",xi,[D(e("input",{"onUpdate:modelValue":o[19]||(o[19]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,x.permissions]]),o[58]||(o[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",yi,[D(e("input",{"onUpdate:modelValue":o[20]||(o[20]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,x.permissions]]),o[59]||(o[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",fi,[D(e("input",{"onUpdate:modelValue":o[21]||(o[21]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,x.permissions]]),o[60]||(o[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",bi,[o[62]||(o[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:C.value,title:"刷新账号列表",type:"button",onClick:Ke},[e("i",{class:O(["fas",C.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(C.value?"刷新中...":"刷新账号"),1)],8,vi)]),e("div",ki,[e("div",null,[o[63]||(o[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:nt(_),"onUpdate:modelValue":o[22]||(o[22]=p=>lt(_)?_.value=p:null),accounts:W.value.claude,"default-option-text":"请选择Claude账号",disabled:!le("claude"),groups:W.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:nt(q),"onUpdate:modelValue":o[23]||(o[23]=p=>lt(q)?q.value=p:null),accounts:W.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!le("gemini"),groups:W.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[65]||(o[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:nt(K),"onUpdate:modelValue":o[24]||(o[24]=p=>lt(K)?K.value=p:null),accounts:W.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!le("openai"),groups:W.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:nt($),"onUpdate:modelValue":o[25]||(o[25]=p=>lt($)?$.value=p:null),accounts:W.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!le("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":a},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:nt(X),"onUpdate:modelValue":o[26]||(o[26]=p=>lt(X)?X.value=p:null),accounts:W.value.droid,"default-option-text":"请选择Droid账号",disabled:!le("droid"),groups:W.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":a},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",wi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[27]||(o[27]=p=>l.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:L.value,type:"submit"},[L.value?(n(),d("div",Ai)):(n(),d("i",Ci)),h(" "+c(L.value?"保存中...":"批量保存"),1)],8,hi)])],32)])])]))}},Ii=Se($i,[["__scopeId","data-v-e5e64131"]]),Ki={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Li={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Di={class:"mb-6 flex items-center justify-between"},_i={class:"flex items-center gap-3"},Ti={class:"text-sm text-gray-600 dark:text-gray-400"},Si={class:"space-y-6"},Ui={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Ri={class:"flex items-center justify-between"},Mi={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Pi={class:"ml-2 text-xs font-normal text-gray-600"},Vi={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ei={key:0,class:"mb-4"},Oi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ji={class:"mb-3 grid grid-cols-3 gap-2"},Gi=["onClick"],zi={key:1,class:"animate-fadeIn"},qi=["min"],Fi={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},Wi={class:"flex items-center justify-between"},Bi={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ni={class:"flex gap-3 pt-2"},Hi=["disabled"],Yi={key:0,class:"loading-spinner mr-2"},Qi={key:1,class:"fas fa-save mr-2"},Ji={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(k,{expose:N,emit:g}){const F=k,j=g,L=I(!1),C=Ye({expireDuration:"",customExpireDate:"",expiresAt:null}),W=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],S=R(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Te(()=>F.show,K=>{K&&Q()}),Te(()=>{var K;return(K=F.apiKey)==null?void 0:K.id},K=>{K&&F.show&&Q()});const Q=()=>{L.value=!1,F.apiKey.expiresAt?(C.expireDuration="custom",C.customExpireDate=new Date(F.apiKey.expiresAt).toISOString().slice(0,16),C.expiresAt=F.apiKey.expiresAt):(C.expireDuration="",C.customExpireDate="",C.expiresAt=null)},H=K=>{if(C.expireDuration=K,!K){C.expiresAt=null;return}if(K==="custom")return;const $=new Date,X=K.match(/(\d+)([dhmy])/);if(X){const[,le,ue]=X,fe=parseInt(le);switch(ue){case"d":$.setDate($.getDate()+fe);break;case"h":$.setHours($.getHours()+fe);break;case"m":$.setMonth($.getMonth()+fe);break;case"y":$.setFullYear($.getFullYear()+fe);break}C.expiresAt=$.toISOString()}},B=()=>{C.customExpireDate&&(C.expiresAt=new Date(C.customExpireDate).toISOString())},f=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",x=K=>K?new Date(K){if(!K)return null;const $=new Date,le=new Date(K)-$,ue=Math.ceil(le/(1e3*60*60*24));return le<0?{text:"已过期",class:"text-red-600"}:ue<=7?{text:`${ue} 天后过期`,class:"text-orange-600"}:ue<=30?{text:`${ue} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(ue/30)} 个月后过期`,class:"text-green-600"}},z=()=>{L.value=!0,j("save",{keyId:F.apiKey.id,expiresAt:C.expiresAt})},_=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),K&&(L.value=!0,j("save",{keyId:F.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{L.value=!1}}),(K,$)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",Ki,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:$[0]||($[0]=X=>K.$emit("close"))}),e("div",Li,[e("div",Di,[e("div",_i,[$[6]||($[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[$[5]||($[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Ti,' 为 "'+c(k.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:$[1]||($[1]=X=>K.$emit("close"))},$[7]||($[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Si,[e("div",Ui,[e("div",Ri,[e("div",null,[$[12]||($[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Mi,[k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d(Z,{key:0},[$[8]||($[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),$[9]||($[9]=h(" 未激活 ",-1)),e("span",Pi," (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):k.apiKey.expiresAt?(n(),d(Z,{key:1},[h(c(f(k.apiKey.expiresAt))+" ",1),a(k.apiKey.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(k.apiKey.expiresAt).class])}," ("+c(a(k.apiKey.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:2},[$[10]||($[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),$[11]||($[11]=h(" 永不过期 ",-1))],64))])]),e("div",Vi,[e("i",{class:O(["fas fa-hourglass-half text-lg",k.apiKey.expiresAt&&x(k.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d("div",Ei,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:_},[$[13]||($[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),h(" 立即激活 (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Oi,[$[14]||($[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),h(" 点击立即激活此 API Key,激活后将在 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):w("",!0),e("div",null,[$[16]||($[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ji,[(n(),d(Z,null,oe(W,X=>e("button",{key:X.value,class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",C.expireDuration===X.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:le=>H(X.value)},c(X.label),11,Gi)),64)),e("button",{class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",C.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:$[2]||($[2]=X=>H("custom"))},$[15]||($[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),h(" 自定义 ",-1)]),2)])]),C.expireDuration==="custom"?(n(),d("div",zi,[$[17]||($[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),D(e("input",{"onUpdate:modelValue":$[3]||($[3]=X=>C.customExpireDate=X),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:S.value,type:"datetime-local",onChange:B},null,40,qi),[[te,C.customExpireDate]]),$[18]||($[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):w("",!0),C.expiresAt!==k.apiKey.expiresAt?(n(),d("div",Fi,[e("div",Wi,[e("div",null,[$[21]||($[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),h(" 新的过期时间 ")],-1)),e("p",Bi,[C.expiresAt?(n(),d(Z,{key:0},[h(c(f(C.expiresAt))+" ",1),a(C.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(C.expiresAt).class])}," ("+c(a(C.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:1},[$[19]||($[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),$[20]||($[20]=h(" 永不过期 ",-1))],64))])]),$[22]||($[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):w("",!0),e("div",Ni,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:$[4]||($[4]=X=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:L.value||C.expiresAt===k.apiKey.expiresAt,onClick:z},[L.value?(n(),d("div",Yi)):(n(),d("i",Qi)),h(" "+c(L.value?"保存中...":"保存更改"),1)],8,Hi)])])])])):w("",!0)]))}},Xi=Se(Ji,[["__scopeId","data-v-fb30c1d3"]]),Zi={class:"w-full"},ed={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},td={key:1,class:"space-y-1.5"},sd={class:"flex items-center justify-between text-[11px] font-medium"},ad={class:"text-gray-700 dark:text-gray-200"},rd={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},od={class:"relative z-10 flex h-full items-center justify-between px-3"},ld={class:"flex items-center gap-1.5"},nd={class:"flex items-center gap-1.5"},id={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},dd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:k=>["daily","opus","window","total"].includes(k)},variant:{type:String,default:"full",validator:k=>["full","compact"].includes(k)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(k){const N=k,g=R(()=>N.variant==="compact"),F=R(()=>{if(!N.limit||N.limit<=0)return 0;const f=N.current/N.limit*100;return Math.min(f,100)}),j=R(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),L=R(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),C=R(()=>{const f=F.value;return N.type==="daily"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),W=R(()=>{const f=F.value;if(f>=95)return"bg-rose-500 dark:bg-rose-400";if(f>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),S=R(()=>{const f=F.value;if(f>=95)return"text-rose-600 dark:text-rose-300";if(f>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=R(()=>{const f=F.value;let x="";if(f>=90)x="text-red-700 dark:text-red-400";else if(f>=70)x="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":x="text-green-700 dark:text-green-400";break;case"opus":x="text-purple-700 dark:text-purple-400";break;case"window":x="text-blue-700 dark:text-blue-400";break;default:x="text-gray-600 dark:text-gray-400"}let a="";switch(N.type){case"daily":a="fas fa-calendar-day";break;case"opus":a="fas fa-gem";break;case"window":a="fas fa-clock";break;case"total":a="fas fa-wallet";break;default:a="fas fa-infinity"}return`${a} ${x}`}),H=R(()=>{if(F.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),B=R(()=>{const f=F.value;if(f>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(f>=90)return"text-red-700 dark:text-red-300";if(f>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(f,x)=>(n(),d("div",Zi,[!k.limit||k.limit<=0?(n(),d("div",ed,x[0]||(x[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):g.value?(n(),d("div",td,[e("div",sd,[e("div",{class:O(["flex items-center gap-1.5",S.value])},[e("i",{class:O(["text-[11px]",Q.value])},null,2),e("span",null,c(k.label),1)],2),e("span",ad,"$"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),1)]),e("div",rd,[e("div",{class:O(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",W.value]),style:$t({width:F.value+"%"})},null,6)])])):(n(),d("div",{key:2,class:O(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",j.value])},[e("div",{class:O(["absolute inset-0",L.value])},null,2),e("div",{class:O(["absolute inset-0 h-full transition-all duration-500 ease-out",C.value]),style:$t({width:F.value+"%"})},null,6),x[1]||(x[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",od,[e("div",ld,[e("i",{class:O(["text-xs",Q.value])},null,2),e("span",{class:O(["text-xs font-semibold",H.value])},c(k.label),3)]),e("div",nd,[e("span",{class:O(["text-xs font-bold tabular-nums",B.value])}," $"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),3)])]),k.showShine&&F.value>0?(n(),d("div",id)):w("",!0)],2))]))}},Ve=Se(dd,[["__scopeId","data-v-8a01dc56"]]),ud={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},cd={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},gd={class:"mb-4 flex items-center justify-between sm:mb-6"},pd={class:"flex items-center gap-2 sm:gap-3"},md={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},xd={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},yd={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},fd={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},bd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},vd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},kd={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},wd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},hd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ad={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},Cd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},$d={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Id={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},Kd={class:"space-y-1 text-sm"},Ld={class:"flex justify-between"},Dd={class:"font-semibold text-gray-900 dark:text-gray-100"},_d={class:"flex justify-between"},Td={class:"font-semibold text-gray-900 dark:text-gray-100"},Sd={class:"mb-6"},Ud={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Rd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Pd={class:"flex items-center justify-between"},Vd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Ed={key:0,class:"flex items-center justify-between"},Od={class:"text-sm font-semibold text-purple-600"},jd={key:1,class:"flex items-center justify-between"},Gd={class:"text-sm font-semibold text-purple-600"},zd={key:0,class:"mb-6"},qd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Fd={key:0,class:"space-y-1.5"},Wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Bd={key:1,class:"space-y-1.5"},Nd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Hd={key:2,class:"space-y-1.5"},Yd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Qd={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Jd={class:"font-semibold text-purple-600 dark:text-purple-300"},Xd={key:4,class:"space-y-2"},Zd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(k,{emit:N}){const g=k,F=N,j=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.requests)||0}),L=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.requests)||0}),C=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.tokens)||0}),W=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.tokens)||0}),S=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cost)||0}),Q=R(()=>g.apiKey.dailyCost||0),H=R(()=>g.apiKey.totalCostLimit||0),B=R(()=>g.apiKey.weeklyOpusCost||0),f=R(()=>g.apiKey.weeklyOpusCostLimit||0),x=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.inputTokens)||0}),a=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.outputTokens)||0}),z=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheCreateTokens)||0}),_=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheReadTokens)||0}),q=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.rpm)||0}),K=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.tpm)||0}),$=R(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.weeklyOpusCostLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),X=R(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:Q.value/g.apiKey.dailyCostLimit*100),le=R(()=>!H.value||H.value===0?0:S.value/H.value*100),ue=R(()=>!f.value||f.value===0?0:B.value/f.value*100),fe=l=>!l&&l!==0?"0":l.toLocaleString("zh-CN"),pe=l=>l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString(),Ke=()=>{F("close")},T=()=>{var l;F("open-timeline",(l=g.apiKey)==null?void 0:l.id)};return(l,o)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",ud,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:Ke}),e("div",cd,[e("div",gd,[e("div",pd,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",md," 使用统计详情 - "+c(k.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:Ke},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",xd,[e("div",yd,[e("div",fd,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",bd,c(fe(j.value)),1),e("div",vd," 今日: "+c(fe(L.value))+" 次 ",1)]),e("div",kd,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",wd,c(pe(C.value)),1),e("div",hd," 今日: "+c(pe(W.value)),1)]),e("div",Ad,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",Cd," $"+c(S.value.toFixed(4)),1),e("div",$d," 今日: $"+c(Q.value.toFixed(4)),1)]),e("div",Id,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",Kd,[e("div",Ld,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",Dd,c(q.value),1)]),e("div",_d,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Td,c(K.value),1)])])])]),e("div",Sd,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" Token 使用分布 ")],-1)),e("div",Ud,[e("div",Rd,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",Md,c(pe(x.value)),1)]),e("div",Pd,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",Vd,c(pe(a.value)),1)]),z.value>0?(n(),d("div",Ed,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",Od,c(pe(z.value)),1)])):w("",!0),_.value>0?(n(),d("div",jd,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",Gd,c(pe(_.value)),1)])):w("",!0)])]),$.value?(n(),d("div",zd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),h(" 限制设置 ")],-1)),e("div",qd,[k.apiKey.dailyCostLimit>0?(n(),d("div",Fd,[ae(Ve,{current:Q.value,label:"每日费用限制",limit:k.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",Wd," 已使用 "+c(Math.min(X.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.weeklyOpusCostLimit>0?(n(),d("div",Bd,[ae(Ve,{current:B.value,label:"Opus 周费用限制",limit:k.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",Nd," 已使用 "+c(Math.min(ue.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.totalCostLimit>0?(n(),d("div",Hd,[ae(Ve,{current:S.value,label:"总费用限制",limit:k.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Yd," 已使用 "+c(Math.min(le.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.concurrencyLimit>0?(n(),d("div",Qd,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Jd,c(k.apiKey.currentConcurrency||0)+" / "+c(k.apiKey.concurrencyLimit),1)])):w("",!0),k.apiKey.rateLimitWindow>0?(n(),d("div",Xd,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),h(" 时间窗口限制 ")],-1)),ae(ya,{"cost-limit":k.apiKey.rateLimitCost,"current-cost":k.apiKey.currentWindowCost,"current-requests":k.apiKey.currentWindowRequests,"current-tokens":k.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":k.apiKey.rateLimitWindow,"request-limit":k.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":k.apiKey.tokenLimit,"window-end-time":k.apiKey.windowEndTime,"window-remaining-seconds":k.apiKey.windowRemainingSeconds,"window-start-time":k.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):w("",!0)])])):w("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:T}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:Ke}," 关闭 ")])])])):w("",!0)]))}},e0=Se(Zd,[["__scopeId","data-v-e4a6a155"]]),t0={class:"tab-content"},s0={class:"card p-4 sm:p-6"},a0={class:"mb-4 flex flex-col gap-4 sm:mb-6"},r0={class:"border-b border-gray-200 dark:border-gray-700"},o0={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},l0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},n0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},i0={key:0,class:"tab-panel"},d0={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},u0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},c0={class:"group relative min-w-[140px]"},g0={key:0,class:"flex items-center"},p0={class:"group relative min-w-[140px]"},m0={class:"relative"},x0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},y0={class:"group relative min-w-[140px]"},f0={class:"relative"},b0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},v0={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},k0={class:"sm:w-44"},w0={class:"group relative flex-1"},h0={class:"relative flex items-center"},A0=["placeholder"],C0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},$0=["disabled"],I0={class:"relative"},K0={class:"relative"},L0={key:0,class:"py-12 text-center"},D0={key:1,class:"py-12 text-center"},_0={key:2,class:"table-wrapper hidden md:block"},T0={class:"table-container"},S0={class:"w-full"},U0={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},R0={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},M0={class:"flex items-center"},P0=["indeterminate"],V0={key:1,class:"fas fa-sort ml-1 text-gray-400"},E0={key:1,class:"fas fa-sort ml-1 text-gray-400"},O0=["title"],j0={key:1,class:"fas fa-sort ml-1 text-gray-400"},G0={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},z0={key:1,class:"fas fa-sort ml-1 text-gray-400"},q0={key:1,class:"fas fa-sort ml-1 text-gray-400"},F0={key:1,class:"fas fa-sort ml-1 text-gray-400"},W0={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},B0={class:"flex items-center"},N0=["value"],H0={class:"min-w-0"},Y0=["title"],Q0={key:0,class:"mt-1 text-xs text-red-600"},J0={class:"px-3 py-3"},X0={class:"space-y-1"},Z0={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},eu={key:0,class:"flex items-center gap-1 text-xs"},tu={class:"truncate text-gray-600 dark:text-gray-400"},su={key:1,class:"flex items-center gap-1 text-xs"},au={class:"truncate text-gray-600 dark:text-gray-400"},ru={key:2,class:"flex items-center gap-1 text-xs"},ou={class:"truncate text-gray-600 dark:text-gray-400"},lu={key:3,class:"flex items-center gap-1 text-xs"},nu={class:"truncate text-gray-600 dark:text-gray-400"},iu={key:4,class:"flex items-center gap-1 text-xs"},du={class:"truncate text-gray-600 dark:text-gray-400"},uu={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},cu={class:"px-3 py-3"},gu={class:"flex flex-wrap gap-1"},pu={key:0,class:"text-xs text-gray-400"},mu={class:"whitespace-nowrap px-3 py-3"},xu={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},yu={key:0,class:"flex items-center justify-end"},fu={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},bu={key:2,class:"text-gray-400"},vu={class:"px-2 py-2",style:{"font-size":"12px"}},ku={class:"flex flex-col gap-2"},wu={key:0,class:"space-y-2"},hu={key:2,class:"space-y-1.5"},Au={class:"flex items-center justify-between text-[10px]"},Cu={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},$u={class:"font-medium"},Iu={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Ku={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Lu={key:0,class:"flex items-center justify-end"},Du={key:1,class:"flex items-center justify-end gap-1"},_u={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Tu={key:2,class:"text-gray-400"},Su={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Uu={key:0,class:"flex items-center justify-end"},Ru={key:1,class:"flex items-center justify-end gap-1"},Mu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Pu={key:2,class:"text-gray-400"},Vu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Eu={class:"flex flex-col leading-tight"},Ou=["title"],ju={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Gu={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},zu=["title"],qu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Fu={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Wu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Bu={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},Nu={class:"inline-flex items-center gap-1.5"},Hu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Yu={key:1},Qu=["onClick"],Ju=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},tc={class:"hidden gap-1 2xl:flex"},sc=["onClick"],ac=["onClick"],rc=["onClick"],oc=["onClick"],lc=["title","onClick"],nc={class:"ml-1"},ic=["onClick"],dc={class:"flex items-center gap-1 2xl:hidden"},uc=["onClick"],cc=["onClick"],gc={key:0},pc={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},mc={key:0,class:"py-4 text-center"},xc={class:"space-y-4"},yc={class:"mb-4 flex items-center justify-between"},fc={class:"flex items-center gap-2"},bc={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},vc={class:"flex items-center gap-1"},kc={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},wc=["onClick"],hc={key:0,class:"py-8 text-center"},Ac={class:"mb-3 flex items-center justify-center gap-2"},Cc=["onClick"],$c={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Ic={class:"mb-3 flex items-start justify-between"},Kc={class:"flex-1"},Lc={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Dc={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},_c={class:"mb-3 space-y-2"},Tc={class:"flex items-center justify-between text-sm"},Sc={class:"font-semibold text-gray-900 dark:text-gray-100"},Uc={class:"flex items-center justify-between text-sm"},Rc={class:"font-semibold text-green-600"},Mc={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Pc={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Vc={class:"font-medium"},Ec={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Oc={class:"font-medium"},jc={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Gc={class:"font-medium"},zc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},qc={class:"font-medium"},Fc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Wc={class:"mt-1 text-right"},Bc={class:"text-xs font-medium text-indigo-600"},Nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},Hc={class:"flex items-center justify-between text-sm"},Yc={class:"flex gap-4 text-xs"},Qc={class:"text-gray-600 dark:text-gray-400"},Jc={class:"font-semibold text-gray-800 dark:text-gray-200"},Xc={class:"text-gray-600 dark:text-gray-400"},Zc={class:"font-semibold text-gray-800 dark:text-gray-200"},eg={key:3,class:"space-y-3 md:hidden"},tg={class:"mb-3 flex items-start justify-between"},sg={class:"flex items-center gap-3"},ag=["value"],rg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},og={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},lg={class:"mb-3 space-y-1.5"},ng={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},ig={class:"text-gray-600 dark:text-gray-400"},dg={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},ug={class:"text-gray-600 dark:text-gray-400"},cg={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},gg={class:"text-gray-600 dark:text-gray-400"},pg={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},mg={class:"text-gray-600 dark:text-gray-400"},xg={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},yg={class:"text-gray-600 dark:text-gray-400"},fg={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},bg={key:6,class:"text-xs text-red-600"},vg={class:"mb-3 space-y-2"},kg={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wg={class:"mb-2 flex items-center justify-between"},hg={class:"text-xs text-gray-600 dark:text-gray-400"},Ag=["onClick"],Cg={class:"grid grid-cols-2 gap-3"},$g={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Ig={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kg={key:2,class:"text-sm font-semibold text-gray-400"},Lg={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Dg={key:1,class:"text-sm font-semibold text-green-600"},_g={key:2,class:"text-sm font-semibold text-gray-400"},Tg={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Sg={class:"flex items-center justify-between"},Ug={class:"font-medium text-gray-700 dark:text-gray-300"},Rg={class:"mt-1 flex items-center justify-between"},Mg={key:0,class:"text-gray-400 dark:text-gray-500"},Pg=["title"],Vg={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Eg={key:2,class:"text-gray-400 dark:text-gray-500"},Og={class:"space-y-2"},jg={key:0,class:"space-y-2"},Gg={key:2,class:"space-y-2"},zg={class:"flex items-center justify-between text-xs"},qg={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Fg={class:"font-medium"},Wg={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Bg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ng={class:"mb-1 flex justify-between"},Hg={class:"flex items-center justify-between"},Yg={class:"flex items-center gap-1"},Qg=["onClick"],Jg={key:0,class:"mb-3 flex flex-wrap gap-1"},Xg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},Zg=["onClick"],ep=["onClick"],tp=["onClick"],sp=["onClick"],ap=["onClick"],rp={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},op={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},lp={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},np={class:"flex items-center gap-2"},ip=["value"],dp={class:"flex items-center gap-2"},up=["disabled"],cp={class:"flex items-center gap-1"},gp={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},pp=["onClick"],mp={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},xp=["disabled"],yp={key:1,class:"tab-panel"},fp={key:0,class:"py-12 text-center"},bp={key:1,class:"py-12 text-center"},vp={key:2},kp={class:"mb-4 flex justify-end"},wp={class:"table-wrapper"},hp={class:"table-container"},Ap={class:"w-full"},Cp={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},$p={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ip={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Kp={class:"name-column sticky left-0 z-10 px-3 py-3"},Lp={class:"flex items-center"},Dp={class:"min-w-0"},_p=["title"],Tp={class:"px-3 py-3"},Sp={class:"space-y-1"},Up={key:0,class:"flex items-center gap-1 text-xs"},Rp={key:1,class:"flex items-center gap-1 text-xs"},Mp={key:2,class:"flex items-center gap-1 text-xs"},Pp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vp={key:0,class:"px-3 py-3"},Ep={class:"text-xs"},Op={key:0,class:"text-blue-600"},jp={key:1,class:"text-green-600"},Gp={key:2,class:"text-gray-500 dark:text-gray-400"},zp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},qp={class:"px-3 py-3"},Fp={class:"text-xs"},Wp={key:0,class:"text-blue-600"},Bp={key:1,class:"text-green-600"},Np={key:2,class:"text-gray-500 dark:text-gray-400"},Hp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Yp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Qp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Jp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Zp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},em={class:"flex items-center justify-end gap-1"},tm={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},sm={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},am={class:"flex flex-col leading-tight"},rm=["title"],om={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lm={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},nm=["title"],im={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dm={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},um={class:"operations-column operations-cell px-3 py-3"},cm={class:"flex items-center gap-2"},gm=["onClick"],pm=["onClick"],ks=16,mm={__name:"ApiKeysView",setup(k){const N=ma(),g=zt(),F=xa(),j=I([]),L=R(()=>{var s;return((s=F.oemSettings)==null?void 0:s.ldapEnabled)||!1}),C=I([]),W=I(!1),S=I(!1),Q=I(!1),H=I(!1),B=I("today"),f=Ye({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),x=R(()=>Q.value),a=()=>{Q.value=!Q.value,Q.value||(C.value=[],W.value=!1,S.value=!1)},z=R(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),_=I("active"),q=I([]),K=I(!1),$=I("createdAt"),X=I("desc"),le=I({}),ue=I({}),fe=I({page:1,pageSize:20,total:0,totalPages:0}),pe=I(new Map),Ke=I(new Set),T=I(new Map),l=I(new Set),o=I({}),p=I({}),A=I([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),u=I({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),i=I(!1),y=I(!1),ie=I(null),me=I(null),xe=I(!1),he=I(null),ce=I(""),Ae=I([]),Y=I([]),J=I([]),be=I(""),Re=I("apiKey"),Qe=R(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),re=R(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return Ae.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Me=R(()=>J.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),As=R(()=>ce.value?j.value.filter(s=>s.tags&&s.tags.includes(ce.value)).length:0),ve=I(1),Je=I((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),Cs=[10,20,50,100],Xe=I(!1),ct=I(!1),gt=I(!1),It=I(!1),Kt=I(!1),pt=I(!1),Ft=I(null),Wt=I(null),Bt=I(null),Nt=I([]),mt=R(()=>j.value),ze=R(()=>fe.value.totalPages||0),Ze=R(()=>{const s=[],t=ve.value,m=ze.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),v=Math.min(m,t+2);t<=3?v=5:t>=m-2&&(r=m-4);for(let M=r;M<=v;M++)s.push(M)}return s}),Ht=R(()=>{const s=Ze.value;return s.length===0?!1:s[0]>1}),Yt=R(()=>{const s=Ze.value;return s.length===0?!1:s[s.length-1]{const s=Ze.value;return s.length===0?!1:Ht.value&&s[0]>2}),Is=R(()=>{const s=Ze.value;return s.length===0?!1:Yt.value&&s[s.length-1]j.value),xt=async(s=!1)=>{var t,m;if(!(y.value&&!s)){i.value=!0;try{const[r,v,M,P,U,se,ne,b,G]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),de=[];r.success&&((t=r.data)==null||t.forEach(ee=>{de.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),v.success&&((m=v.data)==null||m.forEach(ee=>{de.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),u.value.claude=de;const ke=[];if(M.success&&(M.data||[]).forEach(ee=>{ke.push({...ee,platform:"gemini",isDedicated:ee.accountType==="dedicated"})}),P.success&&(u.value.geminiApi=(P.data||[]).map(ee=>({...ee,platform:"gemini-api",isDedicated:ee.accountType==="dedicated"})),u.value.geminiApi.forEach(ee=>{ke.push(ee)})),u.value.gemini=ke,U.success&&(u.value.openai=(U.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),se.success&&(u.value.openaiResponses=(se.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ne.success&&(u.value.bedrock=(ne.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),b.success&&(u.value.droid=(b.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),G.success){const ee=G.data||[];u.value.claudeGroups=ee.filter(ge=>ge.platform==="claude"),u.value.geminiGroups=ee.filter(ge=>ge.platform==="gemini"),u.value.openaiGroups=ee.filter(ge=>ge.platform==="openai"),u.value.droidGroups=ee.filter(ge=>ge.platform==="droid")}y.value=!0}catch{}finally{i.value=!1}}},Ks=async()=>{try{const s=await E.get("/admin/api-keys/used-models");s.success&&(J.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},Ce=async(s=!0)=>{var t,m,r;H.value=!0;try{s&&(pe.value.clear(),T.value.clear());const v=new URLSearchParams;v.set("page",ve.value.toString()),v.set("pageSize",Je.value.toString()),v.set("searchMode",Re.value),be.value&&v.set("search",be.value),ce.value&&v.set("tag",ce.value),Y.value.length>0&&v.set("models",Y.value.join(","));const P=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes($.value)?$.value:"createdAt";v.set("sortBy",P),v.set("sortOrder",X.value),P==="cost"&&(f.type==="custom"&&f.customStart&&f.customEnd?(v.set("costTimeRange","custom"),v.set("costStartDate",f.customStart),v.set("costEndDate",f.customEnd)):v.set("costTimeRange",f.preset||"7days")),f.type==="custom"&&f.customStart&&f.customEnd?(v.set("startDate",f.customStart),v.set("endDate",f.customEnd),v.set("timeRange","custom")):f.preset==="all"?v.set("timeRange","all"):v.set("timeRange",f.preset);const U=await E.get(`/admin/api-keys?${v.toString()}`);U.success&&(j.value=((t=U.data)==null?void 0:t.items)||[],(m=U.data)!=null&&m.pagination&&(fe.value=U.data.pagination,ve.value>fe.value.totalPages&&fe.value.totalPages>0&&(ve.value=fe.value.totalPages)),(r=U.data)!=null&&r.availableTags&&(Ae.value=U.data.availableTags),Ls(),Ds())}catch{V("加载 API Keys 失败","error")}finally{H.value=!1}},Ls=async()=>{const s=j.value;if(!s||s.length===0)return;let t=f.preset,m=null,r=null;f.type==="custom"&&f.customStart&&f.customEnd&&(t="custom",m=f.customStart,r=f.customEnd);const v=s.filter(P=>{const U=pe.value.get(P.id);return!U||U.timeRange!==t||t==="custom"&&(U.startDate!==m||U.endDate!==r)});if(v.length===0)return;const M=v.map(P=>P.id);M.forEach(P=>Ke.value.add(P));try{const P={keyIds:M,timeRange:t};t==="custom"&&(P.startDate=m,P.endDate=r);const U=await E.post("/admin/api-keys/batch-stats",P);if(U.success&&U.data)for(const[se,ne]of Object.entries(U.data))pe.value.set(se,{stats:ne,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(P){console.error("加载统计数据失败:",P)}finally{M.forEach(P=>Ke.value.delete(P))}},ye=s=>{const t=pe.value.get(s);return(t==null?void 0:t.stats)||null},qe=s=>Ke.value.has(s),Ds=async()=>{const s=j.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||T.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>l.value.add(r));try{const r=await E.post("/admin/api-keys/batch-last-usage",{keyIds:m});if(r.success&&r.data)for(const[v,M]of Object.entries(r.data))T.value.set(v,M)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>l.value.delete(r))}},_s=s=>T.value.get(s)||null,yt=s=>l.value.has(s),ft=async()=>{_.value="deleted",K.value=!0;try{const s=await E.get("/admin/api-keys/deleted");s.success&&(q.value=s.apiKeys||[])}catch{V("加载已删除的 API Keys 失败","error")}finally{K.value=!1}},Be=s=>{if(s==="cost"){if(!bt.value){V("费用排序索引正在更新中,请稍后重试","warning");return}f.type==="custom"&&V("正在计算费用排序,可能需要几秒钟...","info")}$.value===s?X.value=X.value==="asc"?"desc":"asc":($.value=s,X.value=s==="cost"?"desc":"asc")},bt=R(()=>{if(f.type==="custom")return!0;const s=f.preset,t=ue.value[s];return(t==null?void 0:t.status)==="ready"}),Ts=R(()=>{if(f.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=f.preset,t=ue.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let Ne=null;const Qt=async()=>{try{const s=await E.get("/admin/api-keys/cost-sort-status");s.success&&(ue.value=s.data||{},Ss())}catch(s){console.error("Failed to fetch cost sort status:",s)}},Ss=()=>{Ne&&clearTimeout(Ne);const t=Object.values(ue.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;Ne=setTimeout(Qt,t)},Lt=s=>!s&&s!==0?"0":s.toLocaleString("zh-CN"),De=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),et=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const U=s.substring(6),se=u.value.claudeGroups.find(de=>de.id===U);if(se)return`分组-${se.name}`;const ne=u.value.geminiGroups.find(de=>de.id===U);if(ne)return`分组-${ne.name}`;const b=u.value.openaiGroups.find(de=>de.id===U);if(b)return`分组-${b.name}`;const G=u.value.droidGroups.find(de=>de.id===U);return G?`分组-${G.name}`:`分组-${U.substring(0,8)}`}const t=u.value.claude.find(U=>U.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const U=s.replace("api:",""),se=u.value.gemini.find(ne=>ne.id===U&&ne.platform==="gemini-api");return se?`${se.name}`:`${U.substring(0,8)}`}const m=u.value.gemini.find(U=>U.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const U=s.replace("responses:",""),se=u.value.openaiResponses.find(ne=>ne.id===U);return se?`${se.name}`:`${U.substring(0,8)}`}const r=u.value.openai.find(U=>U.id===s);if(r)return`${r.name}`;const v=u.value.openaiResponses.find(U=>U.id===s);if(v)return`${v.name}`;const M=u.value.bedrock.find(U=>U.id===s);if(M)return`${M.name}`;const P=u.value.droid.find(U=>U.id===s);return P?`${P.name}`:`${s.substring(0,8)}`},Us=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),Jt=s=>{if(s.claudeAccountId){const t=et(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=u.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=u.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},Xt=s=>{if(s.geminiAccountId){const t=et(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),v=u.value.gemini.find(M=>M.id===r&&M.platform==="gemini-api");return v?v.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=u.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Zt=s=>{if(s.openaiAccountId){const t=et(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=u.value.openaiResponses.find(v=>v.id===r)}else m=u.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},es=s=>{if(s.bedrockAccountId){const t=et(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=u.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ts=s=>{if(s.droidAccountId){const t=et(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=u.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},tt=s=>s?new Date(s)!s||tt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,ss=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",as=async s=>{le.value[s]?le.value[s]=!1:(le.value[s]=!0,p.value[s]||ls(s),await vt(s,!0))},vt=async(s,t=!1)=>{if(!t&&o.value[s]&&o.value[s].length>0)return;const m=Oe(s);try{let r=`/admin/api-keys/${s}/model-stats`;const v=new URLSearchParams;if(m.customStart&&m.customEnd)v.append("startDate",m.customStart),v.append("endDate",m.customEnd),v.append("period","custom");else{const P=m.preset==="today"||m.preset==="7days"?"daily":"monthly";v.append("period",P)}r+="?"+v.toString();const M=await E.get(r);M.success&&(o.value[s]=M.data||[])}catch{V("加载模型统计失败","error"),o.value[s]=[]}},rs=(s,t)=>{const m=t.reduce((r,v)=>r+(v.allTokens||0),0);return m===0?0:Math.round(s/m*100)},Rs=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",Ms=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.requests)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.requests)||0}},Ps=s=>{if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(f.preset==="today")return s.dailyCost||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},Vs=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.tokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.tokens)||0}},Es=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.inputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.inputTokens)||0}},Os=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.outputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.outputTokens)||0}},js=s=>{if(!o.value[s.id])return Ps(s);const t=o.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const v=r.formatted.total.replace("$","").replace(",",""),M=parseFloat(v);isNaN(M)||(m+=M)}}),m},Gs=s=>{if(os(s),$.value==="cost"){if(s==="custom")return;const t=ue.value[s];(!t||t.status!=="ready")&&($.value="createdAt",X.value="desc",V("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},os=s=>{if(f.preset=s,s==="custom"){if(f.type="custom",!f.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=v=>v.getFullYear()+"-"+String(v.getMonth()+1).padStart(2,"0")+"-"+String(v.getDate()).padStart(2,"0")+" 00:00:00";f.customRange=[r(m),r(t)],f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")f.type="preset",f.customStart=null,f.customEnd=null;else{f.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}Ce()},zs=s=>{s&&s.length===2?(f.type="custom",f.preset="custom",f.customRange=s,f.customStart=s[0].split(" ")[0],f.customEnd=s[1].split(" ")[0],Ce()):s===null&&os("today")},ls=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),p.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},Oe=s=>(p.value[s]||ls(s),p.value[s]),ns=(s,t)=>{const m=Oe(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(v=>v.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const v=new Date,M=new Date(v);M.setDate(v.getDate()-6);const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)],m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0]}}else{const v=new Date,M=new Date(v);M.setDate(v.getDate()-(r.days-1)),m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0];const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)]}vt(t,!0)},qs=(s,t)=>{const m=Oe(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],vt(s,!0)):t===null&&ns("7days",s)},is=s=>s>new Date,Fs=s=>{const t=Oe(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,vt(s,!0),V("已重置筛选条件并刷新数据","info")},Ws=()=>{Xe.value=!0,y.value||xt()},Dt=s=>{Ft.value=s,ct.value=!0,y.value||xt()},_t=s=>{Wt.value=s,gt.value=!0},Bs=s=>{Xe.value=!1,Bt.value=s,It.value=!0,Ce()},Ns=s=>{Xe.value=!1,Nt.value=s,Kt.value=!0,Ce()},Hs=()=>{if(C.value.length===0){V("请先选择要编辑的 API Keys","warning");return}pt.value=!0,y.value||xt()},Ys=()=>{pt.value=!1,C.value=[],Ue(),Ce()},Qs=()=>{ct.value=!1,V("API Key 更新成功","success"),Ce()},Js=()=>{gt.value=!1,V("API Key 续期成功","success"),Ce()},Xs=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Dt(s)}];return s.expiresAt&&(tt(s.expiresAt)||st(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>_t(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Tt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>St(s.id)}),t},Tt=async s=>{let t=!0;if(s.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const m=await E.put(`/admin/api-keys/${s.id}`,{isActive:!s.isActive});if(m.success){V(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=j.value.find(v=>v.id===s.id);r&&(r.isActive=!s.isActive)}else V(m.message||"操作失败","error")}catch{V("操作失败","error")}},St=async s=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const m=await E.delete(`/admin/api-keys/${s}`);if(m.success){V("API Key 已删除","success");const r=C.value.indexOf(s);r>-1&&C.value.splice(r,1),Ue(),Ce()}else V(m.message||"删除失败","error")}catch{V("删除失败","error")}},Zs=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const v=await E.post(`/admin/api-keys/${s}/restore`);v.success?(V("API Key 已成功恢复","success"),await ft(),await Ce()):V(v.error||"恢复失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ea=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const v=await E.delete(`/admin/api-keys/${s}/permanent`);v.success?(V("API Key 已彻底删除","success"),ft()):V(v.error||"彻底删除失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},ta=async()=>{var m,r;const s=q.value.length;if(s===0){V("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const v=await E.delete("/admin/api-keys/deleted/clear-all");v.success?(V(v.message||"已清空所有已删除的 API Keys","success"),v.details&&v.details.failedCount>0&&V(`${v.details.failedCount} 个清空失败`,"warning"),ft()):V(v.error||"清空失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},sa=async()=>{const s=C.value.length;if(s===0){V("请先选择要删除的 API Keys","warning");return}let t=!1;const m=`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",m,"确定删除","取消"):t=confirm(m),!t)return;const r=[...C.value];try{const v=await E.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(v.success){const{successCount:M,failedCount:P,errors:U}=v.data;if(M>0){if(V(`成功删除 ${M} 个 API Keys`,"success"),P>0){const se=U.map(ne=>`${ne.keyId}: ${ne.error}`).join(`
-`);V(`${P} 个删除失败:
-${se}`,"warning")}}else V("所有 API Keys 删除失败","error");C.value=[],Ue(),Ce()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{C.value.includes(s.id)||C.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));C.value=C.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>C.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,C.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,Ce(!1)},300)}),Te(Re,()=>{ve.value=1,Ce(!1)}),Te(ce,()=>{ve.value=1,Ce(!1)}),Te(Y,()=>{ve.value=1,Ce(!1)}),Te([$,X],()=>{Ce(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&Ce(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));C.value=C.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),Ce(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>_.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),_.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae(Ct,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae(Ct,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae(Ct,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae(Ct,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",C0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>Ce())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,$0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),C.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c(C.value.length)+")",1)])):w("",!0),C.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c(C.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[$e,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),$.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),$.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),$.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),$.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),$.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),$.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>C.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[$e,C.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",Cu,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",$u,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,Cc)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",$c,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:$t({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>C.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[$e,C.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",Cg,[e("div",null,[qe(r.id)?(n(),d("div",$g)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe(Cs,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),$s.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):_.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",Cp,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",$p," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":C.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},hm=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{hm as default};
diff --git a/assets/ApiKeysView-sn4JYbr5.css b/assets/ApiKeysView-sn4JYbr5.css
deleted file mode 100644
index 0790b919..00000000
--- a/assets/ApiKeysView-sn4JYbr5.css
+++ /dev/null
@@ -1 +0,0 @@
-.custom-scrollbar[data-v-32c162ec]{scrollbar-width:thin;scrollbar-color:#cbd5e0 #f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-track{background:#f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb{background-color:#cbd5e0;border-radius:3px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb:hover{background-color:#a0aec0}pre[data-v-a3d3d870],pre[data-v-b0b904b9]{white-space:pre-wrap;word-wrap:break-word}@keyframes fadeIn-fb30c1d3{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-fb30c1d3]{animation:fadeIn-fb30c1d3 .2s ease-out}.loading-spinner[data-v-fb30c1d3]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-fb30c1d3 .8s linear infinite;display:inline-block}@keyframes spin-fb30c1d3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shine-8a01dc56{0%{transform:translate(-100%)}to{transform:translate(200%)}}.tabular-nums[data-v-8a01dc56]{font-variant-numeric:tabular-nums}.tab-content[data-v-79881b9b]{min-height:calc(100vh - 300px)}.table-wrapper[data-v-79881b9b]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05);width:100%;position:relative}.dark .table-wrapper[data-v-79881b9b]{border-color:#ffffff1a}.table-container[data-v-79881b9b]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-79881b9b]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-79881b9b]::-webkit-scrollbar{height:8px}.table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-79881b9b]{transition:background-color .2s ease}.table-row[data-v-79881b9b]:hover{background-color:#00000005}.dark .table-row[data-v-79881b9b]:hover{background-color:#ffffff05}.operations-column[data-v-79881b9b]{position:sticky;right:0;z-index:12}.table-container thead .operations-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #1e293b73}.checkbox-column[data-v-79881b9b],.name-column[data-v-79881b9b]{position:sticky;z-index:12}.table-container thead .checkbox-column[data-v-79881b9b],.table-container thead .name-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-79881b9b],.dark .table-container thead .name-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #1e293b73}.loading-spinner[data-v-79881b9b]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-79881b9b 1s linear infinite}@keyframes spin-79881b9b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.api-key-date-picker[data-v-79881b9b] .el-input__inner{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-input__inner:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-range-separator{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper{height:38px;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner{height:100%;padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__prefix,.custom-date-range-picker[data-v-79881b9b] .el-input__suffix{display:flex;align-items:center}.custom-date-range-picker[data-v-79881b9b] .el-range-separator{margin-left:.5rem;margin-right:.5rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}
diff --git a/assets/ApiStatsView-ANGMgUyF.css b/assets/ApiStatsView-ANGMgUyF.css
deleted file mode 100644
index 3b2187d0..00000000
--- a/assets/ApiStatsView-ANGMgUyF.css
+++ /dev/null
@@ -1 +0,0 @@
-.api-input-wide-card[data-v-11e74200]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-11e74200]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-11e74200]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-11e74200]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-11e74200]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-11e74200]{align-items:end;gap:1rem}.wide-card-input[data-v-11e74200]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-11e74200]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-11e74200]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-11e74200]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa26,0 10px 15px -3px #0006;background:#1f2937f2;color:#f3f4f6}.btn[data-v-11e74200]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-11e74200]{padding:14px 24px;font-size:16px}.btn-primary[data-v-11e74200]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary[data-v-11e74200]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-primary[data-v-11e74200]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-11e74200]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:#1f2937cc!important;border:1px solid rgba(75,85,99,.5)!important;color:#d1d5db!important}.security-notice[data-v-11e74200]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:#1f2937e6!important;border-color:#4b556399!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-11e74200]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-11e74200]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-11e74200]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-11e74200]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:#1f2937;box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-11e74200]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:#9ca3af}.mode-switch-btn[data-v-11e74200]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-11e74200]{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 4px #667eea33}.mode-switch-btn.active[data-v-11e74200]:hover{box-shadow:0 4px 6px #667eea4d}.mode-switch-btn i[data-v-11e74200]{font-size:.875rem}.fade-enter-active[data-v-11e74200],.fade-leave-active[data-v-11e74200]{transition:all .3s ease}.fade-enter-from[data-v-11e74200],.fade-leave-to[data-v-11e74200]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-11e74200]{animation:spin-11e74200 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-11e74200{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-11e74200]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-11e74200]{justify-content:center}.api-input-wide-card[data-v-11e74200]{padding:1.25rem}.wide-card-title[data-v-11e74200]{margin-bottom:1.25rem}.wide-card-title h2[data-v-11e74200]{font-size:1.5rem}.wide-card-title p[data-v-11e74200]{font-size:.875rem}.api-input-grid[data-v-11e74200]{gap:1rem}.wide-card-input[data-v-11e74200]{padding:12px 14px;font-size:15px}.btn-query[data-v-11e74200]{padding:12px 20px;font-size:15px}.security-notice[data-v-11e74200]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-11e74200]{padding:5px 8px}.toggle-icon[data-v-11e74200]{width:18px;height:18px}.hint-text[data-v-11e74200]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-11e74200]{padding:1rem}.wide-card-title h2[data-v-11e74200]{font-size:1.25rem}.wide-card-title p[data-v-11e74200]{font-size:.8rem}.wide-card-input[data-v-11e74200]{padding:10px 12px;font-size:14px}.btn-query[data-v-11e74200]{padding:10px 16px;font-size:14px}}.card-section[data-v-b72df2cd]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;border-width:1px;border-color:#e2e8f0b3;background-color:#ffffffe6;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-section[data-v-b72df2cd]:is(.dark *){border-color:#33415599;background-color:#0f172ab3}@media (min-width: 768px){.card-section[data-v-b72df2cd]{padding:1.5rem}}.dark{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.section-header[data-v-b72df2cd]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-b72df2cd]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.header-title[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.header-title[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem}}.header-tag[data-v-b72df2cd]{margin-left:auto;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.header-tag[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.info-grid[data-v-b72df2cd]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{gap:1rem}}.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem}.info-item[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.info-item[data-v-b72df2cd]{min-height:86px}.info-label[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.metric-grid[data-v-b72df2cd]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-b72df2cd]{gap:1rem}}.metric-card[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.metric-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.metric-value[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-b72df2cd]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-b72df2cd]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.metric-label[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.account-card[data-v-b72df2cd]{border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fffc;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-b72df2cd]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.account-icon[data-v-b72df2cd]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-b72df2cd]{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.account-name[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.rate-badge[data-v-b72df2cd]{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.rate-badge[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.progress-row[data-v-b72df2cd]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-b72df2cd]{height:.375rem;flex:1 1 0%;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.progress-track[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.progress-bar[data-v-b72df2cd]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.progress-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-row[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fff9;padding:.75rem}.quota-row[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a80}.quota-header[data-v-b72df2cd]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-b72df2cd]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-b72df2cd]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]{margin-top:.25rem;font-size:11px;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.card[data-v-d9e5c1dd]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-d9e5c1dd]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-d9e5c1dd]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-21526aa3]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-21526aa3]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-21526aa3]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-39572a8e]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-39572a8e]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-39572a8e]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-b3b8dc5f]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.model-usage-item[data-v-b3b8dc5f]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-b3b8dc5f]{padding:16px}}.model-usage-item[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-b3b8dc5f]{animation:spin-b3b8dc5f 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-b3b8dc5f{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-b3b8dc5f]{padding:10px}.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr}}.gradient-bg[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2,#f093fb);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg-dark[data-v-c1f23841]{background:linear-gradient(135deg,#1e293b,#334155,#475569);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(100,116,139,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(71,85,105,.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(30,41,59,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-c1f23841]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-c1f23841]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-c1f23841]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-c1f23841],.user-login-button span[data-v-c1f23841]{position:relative;z-index:1}.admin-button-refined[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px #667eea40,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#764ba2,#667eea);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,#764ba2,#667eea);box-shadow:0 8px 20px #764ba259,inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-c1f23841]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#9333ea66;box-shadow:0 8px 20px #667eea4d,inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-c1f23841],.admin-button-refined span[data-v-c1f23841]{position:relative;z-index:1}.period-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.period-btn[data-v-c1f23841]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-c1f23841]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-c1f23841]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-c1f23841]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-c1f23841]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-c1f23841]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-c1f23841]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-c1f23841]{background:#fff;color:#764ba2;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-c1f23841]{font-size:.875rem}.tab-content[data-v-c1f23841]{animation:tabFadeIn-c1f23841 .4s ease-out}@keyframes tabFadeIn-c1f23841{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-c1f23841]{animation:fadeIn-c1f23841 .6s ease-out}@keyframes fadeIn-c1f23841{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}
diff --git a/assets/ApiStatsView-BDCKkmc6.css b/assets/ApiStatsView-BDCKkmc6.css
new file mode 100644
index 00000000..50f9baa6
--- /dev/null
+++ b/assets/ApiStatsView-BDCKkmc6.css
@@ -0,0 +1 @@
+.api-input-wide-card[data-v-411fd161]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-411fd161]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-411fd161]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-411fd161]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-411fd161]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-411fd161]{align-items:end;gap:1rem}.wide-card-input[data-v-411fd161]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-411fd161]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-411fd161]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-411fd161]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.15),0 10px 15px -3px #0006;background:var(--glass-strong-color);color:#f3f4f6}.btn[data-v-411fd161]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-411fd161]{padding:14px 24px;font-size:16px}.btn-primary[data-v-411fd161]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05)}.btn-primary[data-v-411fd161]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px rgba(var(--primary-rgb),.3),0 10px 10px -5px rgba(var(--primary-rgb),.1)}.btn-primary[data-v-411fd161]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-411fd161]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:var(--glass-strong-color)!important;border:1px solid var(--border-color)!important;color:#d1d5db!important}.security-notice[data-v-411fd161]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:var(--glass-strong-color)!important;border-color:var(--border-color)!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-411fd161]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-411fd161]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-411fd161]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-411fd161]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:var(--bg-gradient-start);box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-411fd161]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:var(--text-secondary)}.mode-switch-btn[data-v-411fd161]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-411fd161]{color:#fff;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);box-shadow:0 2px 4px rgba(var(--primary-rgb),.2)}.mode-switch-btn.active[data-v-411fd161]:hover{box-shadow:0 4px 6px rgba(var(--primary-rgb),.3)}.mode-switch-btn i[data-v-411fd161]{font-size:.875rem}.fade-enter-active[data-v-411fd161],.fade-leave-active[data-v-411fd161]{transition:all .3s ease}.fade-enter-from[data-v-411fd161],.fade-leave-to[data-v-411fd161]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-411fd161]{animation:spin-411fd161 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-411fd161{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-411fd161]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-411fd161]{justify-content:center}.api-input-wide-card[data-v-411fd161]{padding:1.25rem}.wide-card-title[data-v-411fd161]{margin-bottom:1.25rem}.wide-card-title h2[data-v-411fd161]{font-size:1.5rem}.wide-card-title p[data-v-411fd161]{font-size:.875rem}.api-input-grid[data-v-411fd161]{gap:1rem}.wide-card-input[data-v-411fd161]{padding:12px 14px;font-size:15px}.btn-query[data-v-411fd161]{padding:12px 20px;font-size:15px}.security-notice[data-v-411fd161]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-411fd161]{padding:5px 8px}.toggle-icon[data-v-411fd161]{width:18px;height:18px}.hint-text[data-v-411fd161]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-411fd161]{padding:1rem}.wide-card-title h2[data-v-411fd161]{font-size:1.25rem}.wide-card-title p[data-v-411fd161]{font-size:.8rem}.wide-card-input[data-v-411fd161]{padding:10px 12px;font-size:14px}.btn-query[data-v-411fd161]{padding:10px 16px;font-size:14px}}.card-section[data-v-99d8ab54]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 768px){.card-section[data-v-99d8ab54]{padding:1.5rem}}.card-section[data-v-99d8ab54]{background:var(--surface-color);border:1px solid var(--border-color)}.section-header[data-v-99d8ab54]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-99d8ab54]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-99d8ab54]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-99d8ab54]{font-size:1.125rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.header-title[data-v-99d8ab54]{font-size:1.25rem;line-height:1.75rem}}.header-title[data-v-99d8ab54]{color:var(--text-primary, #1e293b)}.header-tag[data-v-99d8ab54]{margin-left:auto;border-radius:9999px;padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background:rgba(var(--primary-rgb),.1);color:var(--primary-color)}.info-grid[data-v-99d8ab54]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-99d8ab54]{gap:1rem}}.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-99d8ab54]{border-radius:.75rem;padding:1rem;background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color);min-height:86px}.info-label[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;color:var(--text-secondary, #64748b)}.info-value[data-v-99d8ab54]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--text-primary, #1e293b)}.contributor-item[data-v-99d8ab54]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;background:rgba(var(--primary-rgb),.05);color:var(--text-secondary, #64748b)}.dark{background:rgba(var(--primary-rgb),.1);color:var(--text-secondary, #cbd5e1)}.metric-grid[data-v-99d8ab54]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-99d8ab54]{gap:1rem}}.metric-card[data-v-99d8ab54]{border-radius:.75rem;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color)}.metric-value[data-v-99d8ab54]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-99d8ab54]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-99d8ab54]{margin-top:.25rem;font-size:.75rem;line-height:1rem;color:var(--text-secondary, #64748b)}.dark{color:var(--text-secondary, #cbd5e1)}.account-card[data-v-99d8ab54]{border-radius:1rem;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-99d8ab54]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-99d8ab54]{background:var(--surface-color);border:1px solid var(--border-color)}.account-icon[data-v-99d8ab54]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-99d8ab54]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-99d8ab54]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-99d8ab54]{font-size:.875rem;line-height:1.25rem;font-weight:600;color:var(--text-primary, #1e293b)}.dark{color:var(--text-primary, #f1f5f9)}.account-sub[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;color:var(--text-secondary, #64748b)}.dark{color:var(--text-secondary, #94a3b8)}.rate-badge[data-v-99d8ab54]{border-radius:9999px;padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background:rgba(var(--primary-rgb),.1)}.progress-row[data-v-99d8ab54]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-99d8ab54]{height:.375rem;flex:1 1 0%;border-radius:9999px;background:rgba(var(--primary-rgb),.15)}.dark{background:rgba(var(--primary-rgb),.25)}.progress-bar[data-v-99d8ab54]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;font-weight:600;color:var(--text-secondary, #475569)}.quota-row[data-v-99d8ab54]{border-radius:.75rem;padding:.75rem;background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color)}.dark{background:rgba(var(--primary-rgb),.08)}.quota-header[data-v-99d8ab54]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-99d8ab54]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-99d8ab54]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-99d8ab54]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-99d8ab54]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-99d8ab54]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;font-weight:600;color:var(--text-secondary, #475569)}.dark{color:var(--text-secondary, #e2e8f0)}.quota-foot[data-v-99d8ab54]{margin-top:.25rem;font-size:11px;color:var(--text-tertiary, #94a3b8)}.dark{color:var(--text-tertiary, #cbd5e1)}.card[data-v-f3f6aa17]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-f3f6aa17]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-f3f6aa17]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-e03e5fe5]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-e03e5fe5]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-e03e5fe5]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-37821008]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-37821008]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-37821008]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-0571e613]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-0571e613]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-0571e613]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.model-usage-item[data-v-0571e613]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-0571e613]{padding:16px}}.model-usage-item[data-v-0571e613]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-0571e613]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-0571e613]{animation:spin-0571e613 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-0571e613{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-0571e613]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-0571e613]{padding:10px}.model-usage-item .grid[data-v-0571e613]{grid-template-columns:1fr}}.card[data-v-79d7a9ef]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-79d7a9ef]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-79d7a9ef]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.gradient-bg[data-v-8fdf3cb4],.gradient-bg-dark[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-8fdf3cb4]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--primary-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--secondary-rgb),.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-8fdf3cb4]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--primary-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--secondary-rgb),.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-8fdf3cb4]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-8fdf3cb4]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-8fdf3cb4]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-8fdf3cb4]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-8fdf3cb4]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-8fdf3cb4]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-8fdf3cb4],.user-login-button span[data-v-8fdf3cb4]{position:relative;z-index:1}.admin-button-refined[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px rgba(var(--primary-rgb),.25),inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-8fdf3cb4]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,var(--secondary-color) 0%,var(--primary-color) 100%);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-8fdf3cb4]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,var(--secondary-color) 0%,var(--primary-color) 100%);box-shadow:0 8px 20px rgba(var(--secondary-rgb),.35),inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-8fdf3cb4]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:rgba(var(--secondary-rgb),.4);box-shadow:0 8px 20px rgba(var(--primary-rgb),.3),inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-8fdf3cb4]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-8fdf3cb4],.admin-button-refined span[data-v-8fdf3cb4]{position:relative;z-index:1}.period-btn[data-v-8fdf3cb4]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05);transform:translateY(-1px)}.period-btn[data-v-8fdf3cb4]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-8fdf3cb4]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-8fdf3cb4]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-8fdf3cb4]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-8fdf3cb4]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-8fdf3cb4]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-8fdf3cb4]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-8fdf3cb4]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-8fdf3cb4]{background:#fff;color:var(--secondary-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-8fdf3cb4]{font-size:.875rem}.tab-content[data-v-8fdf3cb4]{animation:tabFadeIn-8fdf3cb4 .4s ease-out}@keyframes tabFadeIn-8fdf3cb4{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-8fdf3cb4]{animation:fadeIn-8fdf3cb4 .6s ease-out}@keyframes fadeIn-8fdf3cb4{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-8fdf3cb4],.fade-leave-active[data-v-8fdf3cb4]{transition:opacity .3s ease}.fade-enter-from[data-v-8fdf3cb4],.fade-leave-to[data-v-8fdf3cb4]{opacity:0}
diff --git a/assets/ApiStatsView-D5wlfbRX.js b/assets/ApiStatsView-D5wlfbRX.js
new file mode 100644
index 00000000..76233beb
--- /dev/null
+++ b/assets/ApiStatsView-D5wlfbRX.js
@@ -0,0 +1,6 @@
+import{aP as Oe,r as T,c as j,aY as ce,x as l,y as a,z as e,O as k,L as b,P as o,u as t,C as R,K as xe,aW as Fe,aa as $e,f as Me,aq as Se,Y as Ce,Q as X,ac as se,B as be,R as ee,q as De,o as Te,V as qe,I as ve,aV as Pe,a5 as Ue,aX as We,J as _e,T as Ve,av as ze,al as Be}from"./vue-vendor-DV7DYXbz.js";import{bf as Re,bg as Le,bh as ke,b1 as Ge,bi as He,bj as Je,bk as Qe,_ as me,f as O,Z as Ee,c as Ye,aH as Xe,aO as Ze,a as et,bl as tt,s as Ie,bm as st,bn as at}from"./index-BahP9Xx9.js";import{L as rt}from"./LogoTitle-DF7a1vCs.js";import{T as lt}from"./ThemeToggle-DROshBR1.js";import"./vendor-Dr8jvgFu.js";import{_ as nt}from"./WindowCountdown-Cz478C_V.js";import{T as ot}from"./TutorialView-Cpvhof5r.js";import"./element-plus-BSjV1f9S.js";const ge=Oe("apistats",()=>{const E=T(""),K=T(null),i=T(!1),_=T(!1),g=T(!0),v=T(""),h=T("daily"),$=T(null),M=T([]),L=T([]),w=T([]),u=T([]),x=T(null),f=T(null),c=T(null),n=T({siteName:"",siteIcon:"",siteIconData:""}),C=T(!1),P=T([]),D=T([]),U=T(null),F=T([]),Q=T([]),W=T(null),G=T({}),te=j(()=>{const y={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return C.value&&U.value?h.value==="daily"?U.value.dailyUsage||y:h.value==="monthly"?U.value.monthlyUsage||y:U.value.alltimeUsage||y:h.value==="daily"?x.value||y:h.value==="monthly"?f.value||y:c.value||y}),ne=j(()=>{if(!$.value||!te.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const y=te.value,S=$.value.limits;return{tokenUsage:S.tokenLimit>0?Math.min(y.allTokens/S.tokenLimit*100,100):0,costUsage:S.dailyCostLimit>0?Math.min(y.cost/S.dailyCostLimit*100,100):0,requestUsage:S.rateLimitRequests>0?Math.min(y.requests/S.rateLimitRequests*100,100):0}});async function oe(){if(C.value)return J();const y=E.value.trim();if(!y){v.value="请输入 API Key";return}if(y.length<10||y.length>512){v.value="API Key 格式无效:长度应在 10-512 个字符之间";return}i.value=!0,v.value="",$.value=null,M.value=[],K.value=null;try{const S=await Re(y);if(S.success){K.value=S.data.id;const I=await Le(K.value);if(I.success)$.value=I.data,G.value=I.data.serviceRates||{},await Y(),v.value="",de(),re();else throw new Error(I.message||"查询失败")}else throw new Error(S.message||"获取 API Key ID 失败")}catch(S){console.error("Query stats error:",S),v.value=S.message||"查询统计数据失败,请检查您的 API Key 是否正确",$.value=null,M.value=[],K.value=null}finally{i.value=!1}}async function Y(){K.value&&(await Promise.all([H("daily"),H("monthly")]),await Z())}async function Z(){if(K.value){_.value=!0;try{const[y,S,I]=await Promise.all([ke(K.value,"daily"),ke(K.value,"monthly"),ke(K.value,"alltime")]);L.value=y.success?y.data||[]:[],w.value=S.success?S.data||[]:[],u.value=I.success?I.data||[]:[],M.value=L.value}catch(y){console.error("Load all model stats error:",y),L.value=[],w.value=[],u.value=[],M.value=[]}finally{_.value=!1}}}async function H(y){try{const S=await ke(K.value,y);if(S.success){const I=S.data||[],V={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};I.forEach(p=>{var d;V.requests+=p.requests||0,V.inputTokens+=p.inputTokens||0,V.outputTokens+=p.outputTokens||0,V.cacheCreateTokens+=p.cacheCreateTokens||0,V.cacheReadTokens+=p.cacheReadTokens||0,V.allTokens+=p.allTokens||0,V.cost+=((d=p.costs)==null?void 0:d.total)||0}),V.formattedCost=B(V.cost),y==="daily"?x.value=V:y==="monthly"?f.value=V:y==="alltime"&&(c.value=V)}else console.warn(`Failed to load ${y} stats:`,S.message)}catch(S){console.error(`Load ${y} stats error:`,S)}}async function r(y="daily"){if(K.value){_.value=!0;try{const S=await ke(K.value,y);if(S.success)M.value=S.data||[];else throw new Error(S.message||"加载模型统计失败")}catch(S){console.error("Load model stats error:",S),M.value=[]}finally{_.value=!1}}}async function s(y){if(!(h.value===y||_.value)){if(h.value=y,C.value&&D.value.length>0){await ae(y);return}(y==="daily"&&!x.value||y==="monthly"&&!f.value||y==="alltime"&&!c.value)&&await H(y),await r(y)}}async function m(){var y,S;if(K.value){i.value=!0,v.value="",$.value=null,M.value=[];try{const I=await Le(K.value);if(I.success)$.value=I.data,G.value=I.data.serviceRates||{},console.log("API Stats - Full response:",I.data),console.log("API Stats - limits data:",I.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(y=I.data.limits)==null?void 0:y.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(S=I.data.limits)==null?void 0:S.weeklyOpusCost),await Y(),v.value="";else throw new Error(I.message||"查询失败")}catch(I){console.error("Load stats with apiId error:",I),v.value=I.message||"查询统计数据失败",$.value=null,M.value=[]}finally{i.value=!1}}}async function A(){g.value=!0;try{const y=await Ge();y&&y.success&&y.data&&(n.value={...n.value,...y.data})}catch(y){console.error("Error loading OEM settings:",y),n.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{g.value=!1}}async function N(){try{const y=await He();y&&y.success&&y.data&&(W.value=y.data)}catch(y){console.error("Error loading service rates:",y),W.value=null}}function B(y){return typeof y!="number"||y===0?"$0.000000":y>=1?"$"+y.toFixed(2):y>=.01?"$"+y.toFixed(4):"$"+y.toFixed(6)}function de(){if(K.value){const y=new URL(window.location);y.searchParams.set("apiId",K.value),window.history.pushState({},"",y)}}function re(){E.value&&localStorage.setItem("lastApiKey",E.value)}function ie(){return localStorage.getItem("lastApiKey")}async function J(){const y=ue();if(y.length===0){v.value="请输入至少一个有效的 API Key";return}i.value=!0,v.value="",U.value=null,F.value=[],Q.value=[],M.value=[],P.value=y,D.value=[],G.value={};try{const S=await Promise.allSettled(y.map(d=>Re(d))),I=[],V=[];if(S.forEach((d,z)=>{d.status==="fulfilled"&&d.value.success?(I.push(d.value.data.id),V.push(y[z])):Q.value.push(y[z])}),I.length===0)throw new Error("所有 API Key 都无效");D.value=I,P.value=V;const p=await Je(I);if(p.success)U.value=p.data.aggregated,F.value=p.data.individual,$.value=p.data.aggregated,x.value=p.data.aggregated.dailyUsage||null,f.value=p.data.aggregated.monthlyUsage||null,await ae(h.value),ye();else throw new Error(p.message||"批量查询失败")}catch(S){console.error("Batch query error:",S),v.value=S.message||"批量查询统计数据失败",U.value=null,F.value=[]}finally{i.value=!1}}async function ae(y="daily"){if(D.value.length!==0){_.value=!0;try{const S=await Qe(D.value,y);if(S.success)M.value=S.data||[];else throw new Error(S.message||"加载批量模型统计失败")}catch(S){console.error("Load batch model stats error:",S),M.value=[]}finally{_.value=!1}}}function ue(){if(!E.value)return[];const y=E.value.split(/[,\n]+/).map(I=>I.trim()).filter(I=>I.length>=10&&I.length<=512);return[...new Set(y)].slice(0,30)}function ye(){if(D.value.length>0){const y=new URL(window.location);y.searchParams.set("apiIds",D.value.join(",")),y.searchParams.set("batch","true"),window.history.pushState({},"",y)}}function fe(){E.value=""}function pe(){$.value=null,M.value=[],L.value=[],w.value=[],u.value=[],x.value=null,f.value=null,c.value=null,v.value="",h.value="daily",K.value=null,G.value={},P.value=[],D.value=[],U.value=null,F.value=[],Q.value=[]}function he(){E.value="",C.value=!1,pe()}return{apiKey:E,apiId:K,loading:i,modelStatsLoading:_,oemLoading:g,error:v,statsPeriod:h,statsData:$,modelStats:M,dailyModelStats:L,monthlyModelStats:w,alltimeModelStats:u,dailyStats:x,monthlyStats:f,alltimeStats:c,oemSettings:n,multiKeyMode:C,apiKeys:P,apiIds:D,aggregatedStats:U,individualStats:F,invalidKeys:Q,serviceRates:W,keyServiceRates:G,currentPeriodData:te,usagePercentages:ne,queryStats:oe,queryBatchStats:J,loadAllPeriodStats:Y,loadAllModelStats:Z,loadPeriodStats:H,loadModelStats:r,loadBatchModelStats:ae,switchPeriod:s,loadStatsWithApiId:m,loadOemSettings:A,loadServiceRates:N,loadApiKeyFromStorage:ie,clearData:pe,clearInput:fe,reset:he}}),it={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},dt={class:"mx-auto max-w-4xl"},ut={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},ct={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},mt={class:"button-group flex items-center gap-2"},gt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},xt={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},yt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},ft={class:"lg:col-span-3"},pt={key:0,class:"relative"},vt=["disabled","type"],bt={key:1,class:"relative"},kt=["disabled"],ht={class:"lg:col-span-1"},_t=["disabled"],wt={key:0,class:"fas fa-spinner loading-spinner"},$t={key:1,class:"fas fa-search"},Ct={class:"security-notice mt-4"},Tt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},St={__name:"ApiKeyInput",setup(E){const K=ge(),{apiKey:i,loading:_,multiKeyMode:g}=ce(K),{queryStats:v,clearInput:h}=K,$=T(!1),M=j(()=>{if(!g.value||!i.value)return[];const w=i.value.split(/[,\n]+/).map(x=>x.trim()).filter(x=>x.length>0);return[...new Set(w)].slice(0,30)}),L=j(()=>g.value?M.value.length>0:i.value&&i.value.trim().length>0);return(w,u)=>(a(),l("div",it,[u[16]||(u[16]=e("div",{class:"wide-card-title mb-6"},[e("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[e("i",{class:"fas fa-chart-line mr-3"}),k(" 使用统计查询 ")]),e("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),e("div",dt,[e("div",ut,[e("label",ct,[u[9]||(u[9]=e("i",{class:"fas fa-key mr-2"},null,-1)),k(" "+o(t(g)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),e("div",mt,[e("div",gt,[e("button",{class:R(["mode-switch-btn",{active:!t(g)}]),title:"单一模式",onClick:u[0]||(u[0]=x=>g.value=!1)},u[10]||(u[10]=[e("i",{class:"fas fa-key"},null,-1),e("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),e("button",{class:R(["mode-switch-btn",{active:t(g)}]),title:"聚合模式",onClick:u[1]||(u[1]=x=>g.value=!0)},[u[11]||(u[11]=e("i",{class:"fas fa-layer-group"},null,-1)),u[12]||(u[12]=e("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),t(g)&&M.value.length>0?(a(),l("span",xt,o(M.value.length),1)):b("",!0)],2)])])]),e("div",yt,[e("div",ft,[t(g)?(a(),l("div",bt,[xe(e("textarea",{"onUpdate:modelValue":u[5]||(u[5]=x=>Me(i)?i.value=x:null),class:"wide-card-input w-full resize-y",disabled:t(_),placeholder:`请输入您的 API Keys,支持以下格式:
+cr_xxx
+cr_yyy
+或
+cr_xxx, cr_yyy`,rows:"4",onKeyup:u[6]||(u[6]=$e(Ce((...x)=>t(v)&&t(v)(...x),["ctrl"]),["enter"]))},null,40,kt),[[Se,t(i)]]),t(i)&&!t(_)?(a(),l("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:u[7]||(u[7]=(...x)=>t(h)&&t(h)(...x))},u[13]||(u[13]=[e("i",{class:"fas fa-times-circle"},null,-1)]))):b("",!0)])):(a(),l("div",pt,[xe(e("input",{"onUpdate:modelValue":u[2]||(u[2]=x=>Me(i)?i.value=x:null),class:"wide-card-input w-full pr-10",disabled:t(_),placeholder:"请输入您的 API Key (cr_...)",type:$.value?"text":"password",onKeyup:u[3]||(u[3]=$e((...x)=>t(v)&&t(v)(...x),["enter"]))},null,40,vt),[[Fe,t(i)]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",type:"button",onClick:u[4]||(u[4]=x=>$.value=!$.value)},[e("i",{class:R($.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]))]),e("div",ht,[e("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:t(_)||!L.value,onClick:u[8]||(u[8]=(...x)=>t(v)&&t(v)(...x))},[t(_)?(a(),l("i",wt)):(a(),l("i",$t)),k(" "+o(t(_)?"查询中...":"查询统计"),1)],8,_t)])]),e("div",Ct,[u[14]||(u[14]=e("i",{class:"fas fa-shield-alt mr-2"},null,-1)),k(" "+o(t(g)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),t(g)?(a(),l("div",Tt,u[15]||(u[15]=[e("i",{class:"fas fa-lightbulb mr-2"},null,-1),e("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):b("",!0)])]))}},At=me(St,[["__scopeId","data-v-411fd161"]]),Kt={class:"space-y-4 sm:space-y-6 md:space-y-8"},Mt={class:"grid grid-cols-1 items-stretch gap-3 sm:gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Pt={class:"card-section"},Rt={class:"section-header"},Lt={class:"header-title"},It={key:0,class:"info-grid"},jt={class:"info-item"},Dt={class:"info-value"},qt={class:"info-item"},Ut={class:"info-value text-green-600 dark:text-emerald-400"},Et={key:0,class:"info-item"},Nt={class:"info-value text-red-500 dark:text-red-400"},Ot={class:"info-item"},Ft={class:"info-value"},Wt={class:"info-item"},Vt={class:"info-value"},zt={class:"info-item"},Bt={class:"info-value text-indigo-600 dark:text-indigo-300"},Gt={key:1,class:"info-item xl:col-span-2"},Ht={class:"space-y-2"},Jt={class:"truncate"},Qt={class:"font-semibold"},Yt={key:1,class:"info-grid"},Xt={class:"info-value flex items-center gap-1 break-all"},Zt={class:"info-item"},es={class:"info-item"},ts={class:"info-value"},ss={key:0,class:"info-item xl:col-span-2"},as={class:"flex flex-wrap gap-2"},rs={class:"info-item"},ls={class:"info-value break-all"},ns={class:"info-item xl:col-span-2"},os={class:"info-value"},is={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},ds={key:0,class:"text-red-500 dark:text-red-400"},us={key:1,class:"text-orange-500 dark:text-orange-400"},cs={key:2},ms={key:2,class:"text-gray-400 dark:text-gray-500"},gs={class:"card-section"},xs={class:"section-header"},ys={class:"header-tag"},fs={class:"metric-grid"},ps={class:"metric-card"},vs={class:"metric-value text-green-600 dark:text-emerald-300"},bs={class:"metric-label"},ks={class:"metric-card"},hs={class:"metric-value text-blue-600 dark:text-sky-300"},_s={class:"metric-label"},ws={class:"metric-card"},$s={class:"metric-value text-purple-600 dark:text-violet-300"},Cs={class:"metric-label"},Ts={class:"metric-card"},Ss={class:"metric-value text-amber-500 dark:text-amber-300"},As={class:"metric-label"},Ks={key:0,class:"card-section"},Ms={class:"flex items-center justify-between gap-3"},Ps={class:"flex items-center gap-3"},Rs={class:"account-name"},Ls={class:"account-sub"},Is={key:0,class:"mt-3 space-y-2"},js={class:"progress-row"},Ds={class:"progress-track"},qs={class:"progress-value"},Us={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},Es={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Ns={key:1,class:"mt-3"},Os={key:0,class:"space-y-2"},Fs={class:"quota-header"},Ws={class:"quota-percent"},Vs={class:"progress-track"},zs={class:"quota-foot"},Bs={key:1,class:"rounded-xl bg-gray-100 px-3 py-2 text-xs text-gray-500 dark:bg-gray-800 dark:text-gray-300"},Gs={__name:"StatsOverview",setup(E){const K=ge(),{statsData:i,statsPeriod:_,currentPeriodData:g,multiKeyMode:v,aggregatedStats:h,individualStats:$,invalidKeys:M}=ce(K),L=j(()=>!$.value||$.value.length===0?[]:[...$.value].sort((r,s)=>{var m,A;return(((m=s.usage)==null?void 0:m.allTokens)||0)-(((A=r.usage)==null?void 0:A.allTokens)||0)}).slice(0,3)),w=j(()=>{var r;return((r=i.value)==null?void 0:r.serviceRates)&&Object.keys(i.value.serviceRates).length>0}),u=r=>{var m;return!h.value||!h.value.usage.allTokens?0:((((m=r.usage)==null?void 0:m.allTokens)||0)/h.value.usage.allTokens*100).toFixed(1)},x=r=>r?new Date(r).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",f=r=>r?new Date(r){if(!r)return!1;const A=(new Date(r)-new Date)/(1e3*60*60*24);return A>0&&A<=7},n=r=>{const s={claude:"Claude",gemini:"Gemini",codex:"Codex",droid:"Droid",bedrock:"Bedrock",azure:"Azure",ccr:"CCR"};if(!r)return"全部服务";let m=r;if(typeof r=="string"){if(r==="all"||r==="[]")return"全部服务";try{m=JSON.parse(r)}catch{return s[r]||r}}return Array.isArray(m)&&m.length===0?"全部服务":Array.isArray(m)?m.map(A=>s[A]||A).join(", "):s[r]||r},C=j(()=>{var m,A;const r=(A=(m=i.value)==null?void 0:m.accounts)==null?void 0:A.details;if(!r)return[];const s=[];return r.claude&&r.claude.accountType==="dedicated"&&s.push({key:"claude",...r.claude}),r.openai&&r.openai.accountType==="dedicated"&&s.push({key:"openai",...r.openai}),s}),P=j(()=>{const r=C.value.length;return r<=1?"md:grid-cols-1 lg:grid-cols-1":r===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),D=r=>r?r.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",U=r=>{if(!r||r<=0)return"";const s=Math.floor(r),m=Math.floor(s/1440),A=Math.floor(s%1440/60),N=s%60;return m>0?A>0?`${m}天${A}小时`:`${m}天`:A>0?N>0?`${A}小时${N}分钟`:`${A}小时`:`${N}分钟`},F=r=>{if(!r)return{text:"状态未知",class:"text-gray-400"};if(r.isRateLimited){const s=U(r.minutesRemaining);return{text:`限流中${s?` · 剩余约 ${s}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},Q=(r,s)=>{if(!r||!s)return"暂无时间窗口信息";const m=new Date(r),A=new Date(s),N=B=>`${`${B.getHours()}`.padStart(2,"0")}:${`${B.getMinutes()}`.padStart(2,"0")}`;return`${N(m)} - ${N(A)}`},W=r=>{if(!r||r<=0)return"";const s=Math.floor(r/60),m=r%60;return s>0?`${s}小时${m}分钟`:`${m}分钟`},G=(r,s)=>{var A;if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((A=s==null?void 0:s.rateLimitStatus)!=null&&A.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const m=String(r).toLowerCase();return m==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":m==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},te=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,m=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,A=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,N=r.resetAt?Date.parse(r.resetAt):null;return m!==null&&(A!==null&&A<=0||N!==null&&!Number.isNaN(N)&&Date.now()>=N)?0:s===null?null:Math.max(0,Math.min(100,s))},ne=r=>{const s=te(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},oe=r=>{const s=te(r);return s===null?"0%":`${s}%`},Y=r=>{const s=te(r);return s===null?"--":`${s.toFixed(1)}%`},Z=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const m=Math.floor(s/86400),A=Math.floor(s%86400/3600),N=Math.floor(s%3600/60),B=s%60;return m>0?A>0?`${m}天${A}小时`:`${m}天`:A>0?N>0?`${A}小时${N}分钟`:`${A}小时`:N>0?`${N}分钟`:`${B}秒`},H=r=>r==="secondary"?"周限":"5h";return(r,s)=>(a(),l("div",Kt,[e("div",Mt,[e("div",Pt,[e("header",Rt,[e("i",{class:R(["header-icon",t(v)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),e("h3",Lt,o(t(v)?"批量查询概要":"API Key 信息"),1)]),t(v)&&t(h)?(a(),l("div",It,[e("div",jt,[s[1]||(s[1]=e("p",{class:"info-label"},"查询 Keys 数",-1)),e("p",Dt,o(t(h).totalKeys)+" 个",1)]),e("div",qt,[s[3]||(s[3]=e("p",{class:"info-label"},"有效 Keys 数",-1)),e("p",Ut,[s[2]||(s[2]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),k(o(t(h).activeKeys)+" 个 ",1)])]),t(M).length>0?(a(),l("div",Et,[s[5]||(s[5]=e("p",{class:"info-label"},"无效 Keys 数",-1)),e("p",Nt,[s[4]||(s[4]=e("i",{class:"fas fa-times-circle mr-1"},null,-1)),k(o(t(M).length)+" 个 ",1)])])):b("",!0),e("div",Ot,[s[6]||(s[6]=e("p",{class:"info-label"},"总请求数",-1)),e("p",Ft,o(t(O)(t(h).usage.requests)),1)]),e("div",Wt,[s[7]||(s[7]=e("p",{class:"info-label"},"总 Token 数",-1)),e("p",Vt,o(t(O)(t(h).usage.allTokens)),1)]),e("div",zt,[s[8]||(s[8]=e("p",{class:"info-label"},"总费用",-1)),e("p",Bt,o(t(h).usage.formattedCost),1)]),t($).length>1?(a(),l("div",Gt,[s[9]||(s[9]=e("p",{class:"info-label"},"Top 3 贡献占比",-1)),e("div",Ht,[(a(!0),l(X,null,se(L.value,m=>(a(),l("div",{key:m.apiId,class:"contributor-item"},[e("span",Jt,o(m.name),1),e("span",Qt,o(u(m))+"%",1)]))),128))])])):b("",!0)])):(a(),l("div",Yt,[e("div",{class:"info-item cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50",title:"点击复制",onClick:s[0]||(s[0]=m=>t(Ee)(t(i).name))},[s[11]||(s[11]=e("p",{class:"info-label"},"名称",-1)),e("p",Xt,[k(o(t(i).name)+" ",1),s[10]||(s[10]=e("i",{class:"fas fa-copy text-xs text-gray-400"},null,-1))])]),e("div",Zt,[s[12]||(s[12]=e("p",{class:"info-label"},"状态",-1)),e("p",{class:R(["info-value font-semibold",t(i).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[e("i",{class:R(["mr-1",t(i).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),k(" "+o(t(i).isActive?"活跃":"已停用"),1)],2)]),e("div",es,[s[13]||(s[13]=e("p",{class:"info-label"},"权限",-1)),e("p",ts,o(n(t(i).permissions)),1)]),w.value?(a(),l("div",ss,[s[14]||(s[14]=e("p",{class:"info-label"},"服务倍率",-1)),e("div",as,[(a(!0),l(X,null,se(t(i).serviceRates,(m,A)=>(a(),l("span",{key:A,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-800 dark:bg-purple-900/30 dark:text-purple-300"},o(A)+": "+o(m)+"x ",1))),128))])])):b("",!0),e("div",rs,[s[15]||(s[15]=e("p",{class:"info-label"},"创建时间",-1)),e("p",ls,o(t(Ye)(t(i).createdAt)),1)]),e("div",ns,[s[20]||(s[20]=e("p",{class:"info-label"},"过期时间",-1)),e("div",os,[t(i).expirationMode==="activation"&&!t(i).isActivated?(a(),l(X,{key:0},[s[16]||(s[16]=e("span",{class:"text-amber-600 dark:text-amber-400"},[e("i",{class:"fas fa-pause-circle mr-1"}),k("未激活 ")],-1)),e("span",is," 首次使用后 "+o(t(i).activationDays||(t(i).activationUnit==="hours"?24:30))+" "+o(t(i).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):t(i).expiresAt?(a(),l(X,{key:1},[f(t(i).expiresAt)?(a(),l("span",ds,s[17]||(s[17]=[e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),k("已过期 ",-1)]))):c(t(i).expiresAt)?(a(),l("span",us,[s[18]||(s[18]=e("i",{class:"fas fa-clock mr-1"},null,-1)),k(o(x(t(i).expiresAt)),1)])):(a(),l("span",cs,o(x(t(i).expiresAt)),1))],64)):(a(),l("span",ms,s[19]||(s[19]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),k("永不过期 ",-1)])))])])]))]),e("div",gs,[e("header",xs,[s[21]||(s[21]=e("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),s[22]||(s[22]=e("h3",{class:"header-title"},"使用统计概览",-1)),e("span",ys,o(t(_)==="daily"?"今日":"本月"),1)]),e("div",fs,[e("div",ps,[e("p",vs,o(t(O)(t(g).requests)),1),e("p",bs,o(t(_)==="daily"?"今日":"本月")+"请求数",1)]),e("div",ks,[e("p",hs,o(t(O)(t(g).allTokens)),1),e("p",_s,o(t(_)==="daily"?"今日":"本月")+"Token 数",1)]),e("div",ws,[e("p",$s,o(t(g).formattedCost||"$0.000000"),1),e("p",Cs,o(t(_)==="daily"?"今日":"本月")+"费用",1)]),e("div",Ts,[e("p",Ss,o(t(O)(t(g).inputTokens)),1),e("p",As,o(t(_)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!t(v)&&C.value.length>0?(a(),l("div",Ks,[s[24]||(s[24]=e("header",{class:"section-header"},[e("i",{class:"header-icon fas fa-plug text-indigo-500"}),e("h3",{class:"header-title"},"专属账号运行状态"),e("span",{class:"header-tag"},"实时更新")],-1)),e("div",{class:R(["grid grid-cols-1 gap-4",P.value])},[(a(!0),l(X,null,se(C.value,m=>{var A,N,B,de,re,ie;return a(),l("div",{key:m.id||m.key,class:"account-card"},[e("div",Ms,[e("div",Ps,[e("span",{class:R(["account-icon",m.platform==="claude"?"icon-claude":"icon-openai"])},[e("i",{class:R(m.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),e("div",null,[e("p",Rs,o(D(m)),1),e("p",Ls,o(m.platform==="claude"?"会话窗口":"额度窗口"),1)])]),F(m.rateLimitStatus)?(a(),l("div",{key:0,class:R(["rate-badge",F(m.rateLimitStatus).class])},[s[23]||(s[23]=e("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),k(" "+o(F(m.rateLimitStatus).text),1)],2)):b("",!0)]),m.platform==="claude"?(a(),l("div",Is,[e("div",js,[e("div",Ds,[e("div",{class:R(["progress-bar",G((A=m.sessionWindow)==null?void 0:A.sessionWindowStatus,m)]),style:be({width:`${Math.min(100,Math.max(0,((N=m.sessionWindow)==null?void 0:N.progress)||0))}%`})},null,6)]),e("span",qs,o(Math.min(100,Math.max(0,Math.round(((B=m.sessionWindow)==null?void 0:B.progress)||0))))+"% ",1)]),e("div",Us,[e("span",null,o(Q((de=m.sessionWindow)==null?void 0:de.windowStart,(re=m.sessionWindow)==null?void 0:re.windowEnd)),1),((ie=m.sessionWindow)==null?void 0:ie.remainingTime)>0?(a(),l("span",Es," 剩余 "+o(W(m.sessionWindow.remainingTime)),1)):b("",!0)])])):m.platform==="openai"?(a(),l("div",Ns,[m.codexUsage?(a(),l("div",Os,[(a(),l(X,null,se(["primary","secondary"],J=>{var ae,ue,ye,fe;return e("div",{key:`${m.key}-${J}`,class:"quota-row"},[e("div",Fs,[e("span",{class:R(["quota-tag",J==="primary"?"tag-indigo":"tag-blue"])},o(H(J)),3),e("span",Ws,o(Y((ae=m.codexUsage)==null?void 0:ae[J])),1)]),e("div",Vs,[e("div",{class:R(["progress-bar",ne((ue=m.codexUsage)==null?void 0:ue[J])]),style:be({width:oe((ye=m.codexUsage)==null?void 0:ye[J])})},null,6)]),e("div",zs," 重置剩余 "+o(Z((fe=m.codexUsage)==null?void 0:fe[J])),1)])}),64))])):(a(),l("p",Bs," 暂无额度使用数据 "))])):b("",!0)])}),128))],2)])):b("",!0)]))}},Hs=me(Gs,[["__scopeId","data-v-99d8ab54"]]),Js={class:"card p-3 sm:p-4 md:p-6"},Qs={class:"mb-2 flex flex-col text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:flex-row sm:items-center sm:text-lg md:mb-4 md:text-xl"},Ys={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Xs={class:"space-y-2 md:space-y-3"},Zs={class:"flex items-center justify-between"},ea={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},ta={class:"flex items-center justify-between"},sa={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},aa={class:"flex items-center justify-between"},ra={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},la={class:"flex items-center justify-between"},na={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},oa={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},ia={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},da={class:"text-sm md:text-base"},ua={class:"text-lg md:text-xl"},ca={__name:"TokenDistribution",setup(E){const K=ge(),{statsPeriod:i,currentPeriodData:_}=ce(K);return(g,v)=>(a(),l("div",Js,[e("h3",Qs,[v[0]||(v[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),k(" Token 使用分布 ")],-1)),e("span",Ys,"("+o(t(i)==="daily"?"今日":"本月")+")",1)]),e("div",Xs,[e("div",Zs,[v[1]||(v[1]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),k(" 输入 Token ")],-1)),e("span",ea,o(t(O)(t(_).inputTokens)),1)]),e("div",ta,[v[2]||(v[2]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),k(" 输出 Token ")],-1)),e("span",sa,o(t(O)(t(_).outputTokens)),1)]),e("div",aa,[v[3]||(v[3]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),k(" 缓存创建 Token ")],-1)),e("span",ra,o(t(O)(t(_).cacheCreateTokens)),1)]),e("div",la,[v[4]||(v[4]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),k(" 缓存读取 Token ")],-1)),e("span",na,o(t(O)(t(_).cacheReadTokens)),1)])]),e("div",oa,[e("div",ia,[e("span",da,o(t(i)==="daily"?"今日":"本月")+"总计",1),e("span",ua,o(t(O)(t(_).allTokens)),1)])])]))}},ma=me(ca,[["__scopeId","data-v-f3f6aa17"]]),ga={class:"flex h-full flex-col gap-3 sm:gap-4 md:gap-6"},xa={class:"card flex h-full flex-col p-3 sm:p-4 md:p-6"},ya={class:"mb-2 flex items-center text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:text-lg md:mb-4 md:text-xl"},fa={key:0,class:"space-y-4"},pa={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},va={class:"mb-3 flex items-center justify-between"},ba={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},ka={class:"grid grid-cols-2 gap-3"},ha={class:"text-center"},_a={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},wa={class:"text-center"},$a={class:"text-lg font-bold text-green-600"},Ca={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Ta={class:"space-y-2"},Sa={class:"flex items-center justify-between"},Aa={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Ka={class:"flex items-center justify-between"},Ma={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Pa={class:"flex items-center justify-between"},Ra={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},La={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},Ia={class:"text-red-700 dark:text-red-300"},ja={key:1,class:"space-y-4 md:space-y-5"},Da={class:"mb-2 flex items-center justify-between"},qa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Ua={key:0},Ea={key:1,class:"flex items-center gap-1"},Na={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Oa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Fa={class:"mb-2 flex items-center justify-between"},Wa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Va={key:0},za={key:1,class:"flex items-center gap-1"},Ba={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ga={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Ha={key:0},Ja={class:"mb-2 flex items-center justify-between"},Qa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Xa={key:1},Za={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},er={key:0},tr={key:1},sr={key:2},ar={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},rr={class:"flex items-center justify-between"},lr={class:"text-sm font-medium text-gray-900 md:text-base"},nr={key:0},or={key:1,class:"flex items-center gap-1"},ir={class:"flex items-center justify-between"},dr={class:"text-sm font-medium text-gray-900 md:text-base"},ur={key:0,class:"text-orange-600"},cr={key:1,class:"text-green-600"},mr={class:"space-y-2"},gr={class:"flex items-center justify-between"},xr={class:"text-sm font-medium text-gray-900 md:text-base"},yr={key:0,class:"text-orange-600"},fr={key:1,class:"text-green-600"},pr={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},vr={key:0,class:"card !overflow-visible p-4 md:p-6"},br={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},kr={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},hr={class:"break-all text-gray-800 dark:text-gray-200"},_r={__name:"LimitConfig",setup(E){const K=ge(),{statsData:i,multiKeyMode:_,aggregatedStats:g,invalidKeys:v}=ce(K),h=j(()=>{var n;const c=(n=i.value)==null?void 0:n.restrictions;return c?c.enableModelRestriction===!0&&Array.isArray(c.restrictedModels)&&c.restrictedModels.length>0:!1}),$=j(()=>{var n;const c=(n=i.value)==null?void 0:n.restrictions;return c?c.enableClientRestriction===!0&&Array.isArray(c.allowedClients)&&c.allowedClients.length>0:!1}),M=()=>{if(!i.value.limits.dailyCostLimit||i.value.limits.dailyCostLimit===0)return 0;const c=i.value.limits.currentDailyCost/i.value.limits.dailyCostLimit*100;return Math.min(c,100)},L=()=>{const c=M();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"},w=()=>{if(!i.value.limits.totalCostLimit||i.value.limits.totalCostLimit===0)return 0;const c=i.value.limits.currentTotalCost/i.value.limits.totalCostLimit*100;return Math.min(c,100)},u=()=>{const c=w();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-blue-500"},x=()=>{if(!i.value.limits.weeklyOpusCostLimit||i.value.limits.weeklyOpusCostLimit===0)return 0;const c=i.value.limits.weeklyOpusCost/i.value.limits.weeklyOpusCostLimit*100;return Math.min(c,100)},f=()=>{const c=x();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-indigo-500"};return(c,n)=>{var C;return a(),l("div",ga,[e("div",xa,[e("h3",ya,[n[0]||(n[0]=e("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),k(" "+o(t(_)?"限制配置(聚合查询模式)":"限制配置"),1)]),t(_)&&t(g)?(a(),l("div",fa,[e("div",pa,[e("div",va,[n[1]||(n[1]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),k(" API Keys 概况 ")],-1)),e("span",ba,o(t(g).activeKeys)+"/"+o(t(g).totalKeys),1)]),e("div",ka,[e("div",ha,[e("div",_a,o(t(g).totalKeys),1),n[2]||(n[2]=e("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),e("div",wa,[e("div",$a,o(t(g).activeKeys),1),n[3]||(n[3]=e("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),e("div",Ca,[n[7]||(n[7]=e("div",{class:"mb-3 flex items-center"},[e("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),e("div",Ta,[e("div",Sa,[n[4]||(n[4]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-database mr-1 text-gray-400"}),k(" 总请求数 ")],-1)),e("span",Aa,o(t(O)(t(g).usage.requests)),1)]),e("div",Ka,[n[5]||(n[5]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-yellow-500"}),k(" 总 Tokens ")],-1)),e("span",Ma,o(t(O)(t(g).usage.allTokens)),1)]),e("div",Pa,[n[6]||(n[6]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),k(" 总费用 ")],-1)),e("span",Ra,o(t(g).usage.formattedCost),1)])])]),t(v)&&t(v).length>0?(a(),l("div",La,[n[8]||(n[8]=e("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),e("span",Ia,o(t(v).length)+" 个无效的 API Key ",1)])):b("",!0),n[9]||(n[9]=e("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),k(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):b("",!0),!t(_)&&((C=t(i))!=null&&C.limits)?(a(),l("div",ja,[e("div",null,[e("div",Da,[n[11]||(n[11]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),e("span",qa,[t(i).limits.dailyCostLimit>0?(a(),l("span",Ua," $"+o(t(i).limits.currentDailyCost.toFixed(4))+" / $"+o(t(i).limits.dailyCostLimit.toFixed(2)),1)):(a(),l("span",Ea,[k(" $"+o(t(i).limits.currentDailyCost.toFixed(4))+" / ",1),n[10]||(n[10]=e("i",{class:"fas fa-infinity"},null,-1))]))])]),t(i).limits.dailyCostLimit>0?(a(),l("div",Na,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",L()]),style:be({width:M()+"%"})},null,6)])):(a(),l("div",Oa,n[12]||(n[12]=[e("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),e("div",null,[e("div",Fa,[n[14]||(n[14]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),e("span",Wa,[t(i).limits.totalCostLimit>0?(a(),l("span",Va," $"+o(t(i).limits.currentTotalCost.toFixed(4))+" / $"+o(t(i).limits.totalCostLimit.toFixed(2)),1)):(a(),l("span",za,[k(" $"+o(t(i).limits.currentTotalCost.toFixed(4))+" / ",1),n[13]||(n[13]=e("i",{class:"fas fa-infinity"},null,-1))]))])]),t(i).limits.totalCostLimit>0?(a(),l("div",Ba,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",u()]),style:be({width:w()+"%"})},null,6)])):(a(),l("div",Ga,n[15]||(n[15]=[e("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),t(i).limits.weeklyOpusCostLimit>0?(a(),l("div",Ha,[e("div",Ja,[n[16]||(n[16]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Claude 模型周费用限制",-1)),e("span",Qa," $"+o(t(i).limits.weeklyOpusCost.toFixed(4))+" / $"+o(t(i).limits.weeklyOpusCostLimit.toFixed(2)),1)]),e("div",Ya,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",f()]),style:be({width:x()+"%"})},null,6)])])):b("",!0),t(i).limits.rateLimitWindow>0&&(t(i).limits.rateLimitRequests>0||t(i).limits.tokenLimit>0||t(i).limits.rateLimitCost>0)?(a(),l("div",Xa,[ee(nt,{"cost-limit":t(i).limits.rateLimitCost,"current-cost":t(i).limits.currentWindowCost,"current-requests":t(i).limits.currentWindowRequests,"current-tokens":t(i).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":t(i).limits.rateLimitWindow,"request-limit":t(i).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":t(i).limits.tokenLimit,"window-end-time":t(i).limits.windowEndTime,"window-remaining-seconds":t(i).limits.windowRemainingSeconds,"window-start-time":t(i).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),e("div",Za,[n[17]||(n[17]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),t(i).limits.rateLimitCost>0?(a(),l("span",er,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):t(i).limits.tokenLimit>0?(a(),l("span",tr,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(a(),l("span",sr," 仅限制请求次数 "))])])):b("",!0),e("div",ar,[e("div",rr,[n[19]||(n[19]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),e("span",lr,[t(i).limits.concurrencyLimit>0?(a(),l("span",nr,o(t(i).limits.concurrencyLimit),1)):(a(),l("span",or,n[18]||(n[18]=[e("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),e("div",ir,[n[22]||(n[22]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),e("span",dr,[h.value?(a(),l("span",ur,[n[20]||(n[20]=e("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限制 "+o(t(i).restrictions.restrictedModels.length)+" 个模型 ",1)])):(a(),l("span",cr,n[21]||(n[21]=[e("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有模型 ",-1)])))])]),e("div",mr,[e("div",gr,[n[25]||(n[25]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),e("span",xr,[$.value?(a(),l("span",yr,[n[23]||(n[23]=e("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限 "+o(t(i).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(a(),l("span",fr,n[24]||(n[24]=[e("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有客户端 ",-1)])))])]),$.value?(a(),l("div",pr,[(a(!0),l(X,null,se(t(i).restrictions.allowedClients,P=>(a(),l("span",{key:P,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-gray-800 dark:text-blue-300 md:text-sm"},[n[26]||(n[26]=e("i",{class:"fas fa-id-badge"},null,-1)),k(" "+o(P),1)]))),128))])):b("",!0)])])])):b("",!0)]),h.value?(a(),l("div",vr,[n[30]||(n[30]=e("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[e("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),k(" 详细限制信息 ")],-1)),e("div",br,[n[28]||(n[28]=e("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[e("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),k(" 受限模型列表 ")],-1)),e("div",kr,[(a(!0),l(X,null,se(t(i).restrictions.restrictedModels,P=>(a(),l("div",{key:P,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[n[27]||(n[27]=e("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),e("span",hr,o(P),1)]))),128))]),n[29]||(n[29]=e("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[e("i",{class:"fas fa-info-circle mr-1"}),k(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):b("",!0)])}}},wr=me(_r,[["__scopeId","data-v-e03e5fe5"]]),$r={class:"card h-full p-4 md:p-6"},Cr={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Tr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Sr={key:0,class:"space-y-2 md:space-y-3"},Ar={class:"mb-1 flex items-center justify-between text-sm"},Kr={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Mr={class:"text-xs text-gray-600 dark:text-gray-400"},Pr={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Rr={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Lr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},Ir={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},jr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},Dr={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},qr={__name:"AggregatedStatsCard",setup(E){const K=ge(),{aggregatedStats:i,individualStats:_,statsPeriod:g,multiKeyMode:v}=ce(K),h=x=>x?g.value==="daily"?x.dailyUsage||x.usage:x.monthlyUsage||x.usage:null,$=j(()=>!_.value||_.value.length===0?[]:[..._.value].sort((x,f)=>{const c=h(x),n=h(f);return((n==null?void 0:n.cost)||0)-((c==null?void 0:c.cost)||0)}).slice(0,5)),M=j(()=>_.value?Math.max(0,_.value.length-5):0),L=j(()=>{var n,C;if(!_.value||!i.value)return 0;const x=$.value.reduce((P,D)=>{const U=h(D);return P+((U==null?void 0:U.cost)||0)},0),f=g.value==="daily"?((n=i.value.dailyUsage)==null?void 0:n.cost)||0:((C=i.value.monthlyUsage)==null?void 0:C.cost)||0;if(f===0)return 0;const c=f-x;return Math.max(0,Math.round(c/f*100))}),w=x=>{var C,P;if(!i.value)return 0;const f=g.value==="daily"?((C=i.value.dailyUsage)==null?void 0:C.cost)||0:((P=i.value.monthlyUsage)==null?void 0:P.cost)||0;if(f===0)return 0;const c=h(x),n=((c==null?void 0:c.cost)||0)/f*100;return Math.round(n)},u=x=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][x]||"bg-gray-400";return(x,f)=>(a(),l("div",$r,[e("h3",Cr,[f[0]||(f[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),k(" 使用占比 ")],-1)),e("span",Tr,"("+o(t(g)==="daily"?"今日":"本月")+")",1)]),t(i)&&t(_).length>0?(a(),l("div",Sr,[(a(!0),l(X,null,se($.value,(c,n)=>{var C,P;return a(),l("div",{key:c.apiId,class:"relative"},[e("div",Ar,[e("span",Kr,o(c.name||`Key ${n+1}`),1),e("span",Mr,o(w(c))+"% ",1)]),e("div",Pr,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",u(n)]),style:be({width:w(c)+"%"})},null,6)]),e("div",Rr,[e("span",null,o(t(O)(((C=h(c))==null?void 0:C.requests)||0))+"次",1),e("span",null,o(((P=h(c))==null?void 0:P.formattedCost)||"$0.00"),1)])])}),128)),M.value>0?(a(),l("div",Lr,[e("div",Ir,[e("span",null,"其他 "+o(M.value)+" 个Keys",1),e("span",null,o(L.value)+"%",1)])])):b("",!0)])):t(v)?(a(),l("div",Dr,f[2]||(f[2]=[e("i",{class:"fas fa-chart-pie mr-2"},null,-1),k(" 暂无数据 ",-1)]))):(a(),l("div",jr,f[1]||(f[1]=[e("div",{class:"text-center"},[e("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),e("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},Ur=me(qr,[["__scopeId","data-v-37821008"]]),Er={class:"card p-3 sm:p-4 md:p-6"},Nr={class:"mb-2 sm:mb-3 md:mb-4"},Or={class:"flex flex-col text-base font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center sm:text-lg md:text-xl"},Fr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Wr={key:0,class:"py-6 text-center md:py-8"},Vr={key:1,class:"space-y-2"},zr={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between"},Br={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Gr=["onClick"],Hr={class:"flex flex-wrap gap-x-2 text-xs text-gray-500 dark:text-gray-400"},Jr={key:0},Qr={key:1},Yr={class:"flex-shrink-0 text-xs sm:text-sm"},Xr={class:"ml-1 font-semibold text-green-600"},Zr={class:"ml-1 font-semibold text-amber-600 dark:text-amber-400"},el={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},tl={class:"text-sm md:text-base"},sl={__name:"ModelUsageStats",props:{period:{type:String,default:"daily",validator:E=>["daily","monthly","alltime"].includes(E)}},setup(E){const K=E,i=ge(),{dailyModelStats:_,monthlyModelStats:g,alltimeModelStats:v,modelStatsLoading:h,serviceRates:$}=ce(i),M=j(()=>K.period==="daily"?_.value:K.period==="monthly"?g.value:K.period==="alltime"?v.value:[]),L=j(()=>h.value),w=j(()=>K.period==="daily"?"今日":K.period==="monthly"?"本月":K.period==="alltime"?"所有时间":""),u=c=>Ee(c,"模型名称已复制"),x=c=>{if(!c)return"claude";const n=c.toLowerCase();return n.includes("claude")||n.includes("sonnet")||n.includes("opus")||n.includes("haiku")?"claude":n.includes("gpt")||n.includes("o1")||n.includes("o3")||n.includes("o4")?"codex":n.includes("gemini")?"gemini":n.includes("droid")||n.includes("factory")?"droid":n.includes("bedrock")||n.includes("amazon")?"bedrock":n.includes("azure")?"azure":"claude"},f=c=>{var U,F,Q;if(!c.isLegacy&&((U=c.costs)==null?void 0:U.rated)!==void 0){const W=c.costs.rated;return W>=1?"$"+W.toFixed(2):W>=.01?"$"+W.toFixed(4):"$"+W.toFixed(6)}const n=((F=c.costs)==null?void 0:F.total)||0;if(!n||!((Q=$.value)!=null&&Q.rates))return"$0.00";const C=x(c.model),P=$.value.rates[C]||1,D=n*P;return D>=1?"$"+D.toFixed(2):D>=.01?"$"+D.toFixed(4):"$"+D.toFixed(6)};return(c,n)=>(a(),l("div",Er,[e("div",Nr,[e("h3",Or,[n[0]||(n[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),k(" 模型使用统计 ")],-1)),e("span",Fr,"("+o(w.value)+")",1)])]),L.value?(a(),l("div",Wr,n[1]||(n[1]=[e("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):M.value.length>0?(a(),l("div",Vr,[(a(!0),l(X,null,se(M.value,(C,P)=>{var D,U;return a(),l("div",{key:P,class:"model-usage-item"},[e("div",zr,[e("div",Br,[e("h4",{class:"cursor-pointer text-sm font-bold text-gray-900 hover:text-indigo-600 dark:text-gray-100 dark:hover:text-indigo-400",title:"点击复制",onClick:F=>u(C.model)},[k(o(C.model)+" ",1),n[2]||(n[2]=e("i",{class:"fas fa-copy ml-1 text-xs text-gray-400"},null,-1))],8,Gr),e("div",Hr,[e("span",null,o(C.requests)+"次",1),e("span",null,"输入:"+o(t(O)(C.inputTokens)),1),e("span",null,"输出:"+o(t(O)(C.outputTokens)),1),C.cacheCreateTokens?(a(),l("span",Jr,"缓存创建:"+o(t(O)(C.cacheCreateTokens)),1)):b("",!0),C.cacheReadTokens?(a(),l("span",Qr,"缓存读取:"+o(t(O)(C.cacheReadTokens)),1)):b("",!0)])]),e("div",Yr,[n[4]||(n[4]=e("span",{class:"text-gray-500"},"官方API",-1)),e("span",Xr,o(((D=C.formatted)==null?void 0:D.total)||"$0.00"),1),(U=t($))!=null&&U.rates?(a(),l(X,{key:0},[n[3]||(n[3]=e("span",{class:"ml-2 text-gray-500"},"计费",-1)),e("span",Zr,o(f(C)),1)],64)):b("",!0)])])])}),128))])):(a(),l("div",el,[n[5]||(n[5]=e("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),e("p",tl,"暂无"+o(w.value)+"模型使用数据",1)]))]))}},we=me(sl,[["__scopeId","data-v-0571e613"]]),al={key:0,class:"card p-3 sm:p-4 md:p-6"},rl={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"},ll={class:"mb-2 flex items-center justify-between"},nl={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ol={class:"flex items-center gap-1"},il={class:"rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-300",title:"全局倍率"},dl={key:0,class:"rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-900/30 dark:text-purple-300",title:"Key倍率"},ul={class:"mb-2 space-y-0.5 text-xs text-gray-600 dark:text-gray-400"},cl={class:"flex justify-between"},ml={class:"text-gray-900 dark:text-gray-200"},gl={class:"flex justify-between"},xl={class:"text-gray-900 dark:text-gray-200"},yl={key:0,class:"flex justify-between"},fl={class:"text-gray-900 dark:text-gray-200"},pl={key:1,class:"flex justify-between"},vl={class:"text-gray-900 dark:text-gray-200"},bl={class:"mb-2 space-y-0.5 border-t border-gray-200 pt-2 text-xs dark:border-gray-700"},kl={class:"flex justify-between"},hl={class:"font-semibold text-green-600 dark:text-green-400"},_l={class:"flex justify-between"},wl={class:"font-semibold text-amber-600 dark:text-amber-400"},$l={key:0,class:"space-y-0.5 border-t border-gray-200 pt-2 text-xs text-gray-500 dark:border-gray-700 dark:text-gray-500"},Cl={class:"flex justify-between"},Tl={class:"flex justify-between"},Sl={key:0,class:"flex justify-between"},Al={key:1,class:"flex justify-between"},Kl={__name:"ServiceCostCards",setup(E){const K=ge(),{modelStats:i,serviceRates:_,keyServiceRates:g,multiKeyMode:v}=ce(K),h={claude:"Claude",codex:"Codex",gemini:"Gemini",droid:"Droid",bedrock:"Bedrock",azure:"Azure",ccr:"CCR"},$=w=>{if(!w)return"claude";const u=w.toLowerCase();return u.includes("claude")||u.includes("sonnet")||u.includes("opus")||u.includes("haiku")?"claude":u.includes("gpt")||u.includes("o1")||u.includes("o3")||u.includes("o4")?"codex":u.includes("gemini")?"gemini":u.includes("droid")||u.includes("factory")?"droid":u.includes("bedrock")||u.includes("amazon")?"bedrock":u.includes("azure")?"azure":"claude"},M=j(()=>{var u,x;if(!((u=_.value)!=null&&u.rates)||!((x=i.value)!=null&&x.length))return[];const w={};return Object.keys(_.value.rates).forEach(f=>{w[f]={inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,realCost:0,ratedCost:0,pricing:null}}),i.value.forEach(f=>{var n,C,P,D;const c=$(f.model);if(w[c]){w[c].inputTokens+=f.inputTokens||0,w[c].outputTokens+=f.outputTokens||0,w[c].cacheCreateTokens+=f.cacheCreateTokens||0,w[c].cacheReadTokens+=f.cacheReadTokens||0;const U=((n=f.costs)==null?void 0:n.real)??((C=f.costs)==null?void 0:C.total)??0;w[c].realCost+=U;const F=_.value.rates[c]||1,Q=v.value?1:((P=g.value)==null?void 0:P[c])??1,W=!f.isLegacy&&((D=f.costs)==null?void 0:D.rated)!==void 0?f.costs.rated:U*F*Q;w[c].ratedCost+=W,!w[c].pricing&&f.pricing&&(w[c].pricing=f.pricing)}}),Object.entries(w).filter(([,f])=>f.inputTokens>0||f.outputTokens>0||f.cacheCreateTokens>0||f.realCost>0).map(([f,c])=>{var D;const n=_.value.rates[f]||1,C=v.value?1:((D=g.value)==null?void 0:D[f])??1,P=c.pricing;return{name:f,label:h[f]||f,globalRate:n,keyRate:C,inputTokens:c.inputTokens,outputTokens:c.outputTokens,cacheCreateTokens:c.cacheCreateTokens,cacheReadTokens:c.cacheReadTokens,officialCost:L(c.realCost),ccCost:L(c.ratedCost),pricing:P?{input:L(P.input),output:L(P.output),cacheCreate:P.cacheCreate?L(P.cacheCreate):null,cacheRead:P.cacheRead?L(P.cacheRead):null}:null}}).sort((f,c)=>c.inputTokens+c.outputTokens-(f.inputTokens+f.outputTokens))}),L=w=>!w||w===0?"$0.00":w>=1?"$"+w.toFixed(2):w>=.01?"$"+w.toFixed(4):"$"+w.toFixed(6);return(w,u)=>t(_)&&t(i).length>0?(a(),l("div",al,[u[10]||(u[10]=e("h3",{class:"mb-2 flex items-center justify-between text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:text-lg md:mb-4 md:text-xl"},[e("span",{class:"flex items-center"},[e("i",{class:"fas fa-coins mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),k(" 服务费用统计 ")]),e("span",{class:"text-xs font-normal text-gray-500 dark:text-gray-400"}," 计费 = 官方费用 × 全局倍率 × Key倍率 ")],-1)),e("div",rl,[(a(!0),l(X,null,se(M.value,x=>(a(),l("div",{key:x.name,class:"rounded-xl border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},[e("div",ll,[e("span",nl,o(x.label),1),e("div",ol,[e("span",il," 全局 "+o(x.globalRate)+"x ",1),t(v)?b("",!0):(a(),l("span",dl," Key "+o(x.keyRate)+"x ",1))])]),e("div",ul,[e("div",cl,[u[0]||(u[0]=e("span",null,"输入",-1)),e("span",ml,o(t(O)(x.inputTokens)),1)]),e("div",gl,[u[1]||(u[1]=e("span",null,"输出",-1)),e("span",xl,o(t(O)(x.outputTokens)),1)]),x.cacheCreateTokens?(a(),l("div",yl,[u[2]||(u[2]=e("span",null,"缓存创建",-1)),e("span",fl,o(t(O)(x.cacheCreateTokens)),1)])):b("",!0),x.cacheReadTokens?(a(),l("div",pl,[u[3]||(u[3]=e("span",null,"缓存读取",-1)),e("span",vl,o(t(O)(x.cacheReadTokens)),1)])):b("",!0)]),e("div",bl,[e("div",kl,[u[4]||(u[4]=e("span",{class:"text-gray-600 dark:text-gray-400"},"官方API",-1)),e("span",hl,o(x.officialCost),1)]),e("div",_l,[u[5]||(u[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"计费费用",-1)),e("span",wl,o(x.ccCost),1)])]),x.pricing?(a(),l("div",$l,[e("div",Cl,[u[6]||(u[6]=e("span",null,"输入",-1)),e("span",null,o(x.pricing.input)+"/M",1)]),e("div",Tl,[u[7]||(u[7]=e("span",null,"输出",-1)),e("span",null,o(x.pricing.output)+"/M",1)]),x.pricing.cacheCreate?(a(),l("div",Sl,[u[8]||(u[8]=e("span",null,"缓存创建",-1)),e("span",null,o(x.pricing.cacheCreate)+"/M",1)])):b("",!0),x.pricing.cacheRead?(a(),l("div",Al,[u[9]||(u[9]=e("span",null,"缓存读取",-1)),e("span",null,o(x.pricing.cacheRead)+"/M",1)])):b("",!0)])):b("",!0)]))),128))])])):b("",!0)}},Ml=me(Kl,[["__scopeId","data-v-79d7a9ef"]]),Pl={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Rl={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Ll={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Il={class:"flex items-center gap-3"},jl={class:"text-xs text-gray-500 dark:text-gray-400"},Dl=["disabled"],ql={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Ul={class:"mb-4"},El={class:"relative"},Nl=["value"],Ol={class:"mb-4 space-y-2"},Fl={class:"flex items-center justify-between text-sm"},Wl={class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},Vl={class:"text-sm"},zl={class:"mb-1 flex items-center justify-between"},Bl=["value"],Gl={class:"text-right text-xs text-gray-400 dark:text-gray-500"},Hl={class:"text-sm"},Jl={class:"mb-1 flex items-center justify-between"},Ql=["value"],Yl={class:"flex items-center justify-between text-sm"},Xl={class:"font-medium text-gray-700 dark:text-gray-300"},Zl={class:"mb-4"},en={class:"flex items-center gap-3"},tn={class:"text-xs text-gray-500 dark:text-gray-400"},sn={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},an={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},rn={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},ln={class:"max-h-40 overflow-y-auto p-3"},nn={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},on={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},dn={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},un={key:2,class:"text-sm text-red-600 dark:text-red-400"},cn={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},mn={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},gn=["disabled"],xn=["disabled"],yn={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""},serviceType:{type:String,default:"claude",validator:E=>["claude","gemini","openai"].includes(E)}},emits:["close"],setup(E,{emit:K}){const i=E,_=K,g=T("idle"),v=T(""),h=T(""),$=T(0),M=T(null),L=T(null),w=T("claude-sonnet-4-5-20250929"),u=T("hi"),x=T(1e3),f=[{value:100,label:"100"},{value:500,label:"500"},{value:1e3,label:"1000"},{value:2e3,label:"2000"},{value:4096,label:"4096"}],c=T({claude:[],gemini:[],openai:[]}),n=async()=>{try{const r=await Xe();r.success&&r.data&&(c.value={claude:r.data.claude||[],gemini:r.data.gemini||[],openai:r.data.openai||[]})}catch(r){console.error("Failed to load models:",r)}},C=j(()=>{const r={claude:{name:"Claude",endpoint:"/api-key/test",defaultModel:"claude-sonnet-4-5-20250929",displayEndpoint:"/api/v1/messages"},gemini:{name:"Gemini",endpoint:"/api-key/test-gemini",defaultModel:"gemini-2.5-pro",displayEndpoint:"/gemini/v1/models/:model:streamGenerateContent"},openai:{name:"OpenAI (Codex)",endpoint:"/api-key/test-openai",defaultModel:"gpt-5",displayEndpoint:"/openai/responses"}};return r[i.serviceType]||r.claude}),P=j(()=>c.value[i.serviceType]||[]);De(()=>{n()});const D=j(()=>i.apiKeyName||"当前 API Key"),U=j(()=>{const r=i.apiKeyValue;return r?r.length<=10?"****":r.substring(0,6)+"****"+r.substring(r.length-4):""}),F=j(()=>{switch(g.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),Q=j(()=>{switch(g.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return h.value||"无法通过 API Key 访问服务";default:return""}}),W=j(()=>{switch(g.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),G=j(()=>{switch(g.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),te=j(()=>{switch(g.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),ne=j(()=>{switch(g.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),oe=j(()=>{switch(g.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function Y(){if(!i.apiKeyValue)return;g.value="testing",v.value="",h.value="",$.value=0,M.value=Date.now(),L.value&&L.value.abort(),L.value=new AbortController;const r=`${Ze.apiPrefix}/apiStats${C.value.endpoint}`;try{const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i.apiKeyValue,model:w.value,prompt:u.value,maxTokens:x.value}),signal:L.value.signal});if(!s.ok){const B=await s.json().catch(()=>({}));throw new Error(B.message||B.error||`HTTP ${s.status}`)}const m=s.body.getReader(),A=new TextDecoder;let N=!1;for(;!N;){const{done:B,value:de}=await m.read();if(B){N=!0;continue}const ie=A.decode(de).split(`
+`);for(const J of ie)if(J.startsWith("data: "))try{const ae=JSON.parse(J.substring(6));Z(ae)}catch{}}}catch(s){if(s.name==="AbortError")return;g.value="error",h.value=s.message||"连接失败",$.value=Date.now()-M.value}}function Z(r){switch(r.type){case"test_start":break;case"content":v.value+=r.text;break;case"message_stop":break;case"test_complete":$.value=Date.now()-M.value,r.success?g.value="success":(g.value="error",h.value=r.error||"测试失败");break;case"error":g.value="error",h.value=r.error||"未知错误",$.value=Date.now()-M.value;break}}function H(){g.value!=="testing"&&(L.value&&(L.value.abort(),L.value=null),g.value="idle",v.value="",h.value="",$.value=0,_("close"))}return Te(()=>i.show,r=>{r&&(g.value="idle",v.value="",h.value="",$.value=0,w.value=C.value.defaultModel,u.value="hi",x.value=1e3)}),Te(()=>i.serviceType,()=>{w.value=C.value.defaultModel}),qe(()=>{L.value&&L.value.abort()}),(r,s)=>(a(),ve(Ue,{to:"body"},[E.show?(a(),l("div",Pl,[e("div",{class:"absolute inset-0",onClick:H}),e("div",Rl,[e("div",Ll,[e("div",Il,[e("div",{class:R(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",g.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":g.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:R(["fas",g.value==="idle"?"fa-vial":g.value==="testing"?"fa-spinner fa-spin":g.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[s[3]||(s[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),e("p",jl,o(D.value),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:g.value==="testing",onClick:H},s[4]||(s[4]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Dl)]),e("div",ql,[e("div",Ul,[s[6]||(s[6]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),e("div",El,[e("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:U.value},null,8,Nl),s[5]||(s[5]=e("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[e("i",{class:"fas fa-lock text-xs"})],-1))]),s[7]||(s[7]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),e("div",Ol,[e("div",Fl,[s[9]||(s[9]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点",-1)),e("span",Wl,[s[8]||(s[8]=e("i",{class:"fas fa-link"},null,-1)),k(" "+o(C.value.displayEndpoint),1)])]),e("div",Vl,[e("div",zl,[s[10]||(s[10]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),xe(e("select",{"onUpdate:modelValue":s[0]||(s[0]=m=>w.value=m),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300"},[(a(!0),l(X,null,se(P.value,m=>(a(),l("option",{key:m.value,value:m.value},o(m.label),9,Bl))),128))],512),[[Pe,w.value]])]),e("div",Gl,o(w.value),1)]),e("div",Hl,[e("div",Jl,[s[11]||(s[11]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最大输出 Token",-1)),xe(e("select",{"onUpdate:modelValue":s[1]||(s[1]=m=>x.value=m),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300"},[(a(),l(X,null,se(f,m=>e("option",{key:m.value,value:m.value},o(m.label),9,Ql)),64))],512),[[Pe,x.value]])])]),e("div",Yl,[s[12]||(s[12]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试服务",-1)),e("span",Xl,o(C.value.name),1)])]),e("div",Zl,[s[13]||(s[13]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 提示词 ",-1)),xe(e("textarea",{"onUpdate:modelValue":s[2]||(s[2]=m=>u.value=m),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入测试提示词...",rows:"2"},null,512),[[Se,u.value]])]),e("div",{class:R(["mb-4 rounded-xl border p-4 transition-all duration-300",W.value])},[e("div",en,[e("div",{class:R(["flex h-8 w-8 items-center justify-center rounded-lg",G.value])},[e("i",{class:R(["fas text-sm",te.value,ne.value])},null,2)],2),e("div",null,[e("p",{class:R(["font-medium",oe.value])},o(F.value),3),e("p",tn,o(Q.value),1)])])],2),g.value!=="idle"?(a(),l("div",sn,[e("div",an,[s[14]||(s[14]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),v.value?(a(),l("span",rn,o(v.value.length)+" 字符 ",1)):b("",!0)]),e("div",ln,[v.value?(a(),l("p",nn,[k(o(v.value)+" ",1),g.value==="testing"?(a(),l("span",on)):b("",!0)])):g.value==="testing"?(a(),l("p",dn,s[15]||(s[15]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),k(" 等待响应中... ",-1)]))):g.value==="error"&&h.value?(a(),l("p",un,o(h.value),1)):b("",!0)])])):b("",!0),$.value>0?(a(),l("div",cn,[s[16]||(s[16]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+o(($.value/1e3).toFixed(2))+" 秒",1)])):b("",!0)]),e("div",mn,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:g.value==="testing",onClick:H}," 关闭 ",8,gn),e("button",{class:R(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",g.value==="testing"||!E.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:g.value==="testing"||!E.apiKeyValue,onClick:Y},[e("i",{class:R(["fas",g.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),k(" "+o(g.value==="testing"?"测试中...":g.value==="idle"?"开始测试":"重新测试"),1)],10,xn)])])])):b("",!0)]))}},fn={class:"glass-strong mb-4 rounded-2xl p-3 shadow-xl sm:mb-6 sm:rounded-3xl sm:p-4 md:mb-8 md:p-6"},pn={class:"flex flex-col items-center justify-between gap-3 sm:gap-4 md:flex-row"},vn={class:"flex items-center gap-2 md:gap-4"},bn={class:"flex items-center"},kn={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},hn={class:"mb-4 sm:mb-6 md:mb-8"},_n={class:"flex justify-center"},wn={class:"inline-flex w-full max-w-2xl flex-wrap justify-center gap-1 rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl sm:w-auto sm:flex-nowrap"},$n={key:0,class:"tab-content"},Cn={key:0,class:"mb-4 sm:mb-6 md:mb-8"},Tn={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},Sn={key:1,class:"fade-in"},An={class:"glass-strong rounded-2xl p-3 shadow-xl sm:rounded-3xl sm:p-4 md:p-6"},Kn={class:"mb-3 border-b border-gray-200 pb-3 dark:border-gray-700 sm:mb-4 sm:pb-4 md:mb-6 md:pb-6"},Mn={class:"flex flex-col items-start justify-between gap-2 sm:gap-3 md:flex-row md:items-center md:gap-4"},Pn={class:"flex w-full items-center gap-2 md:w-auto"},Rn=["disabled"],Ln=["disabled"],In=["disabled"],jn={key:0,class:"relative"},Dn=["disabled","title"],qn={key:0,class:"absolute right-0 top-full z-50 mt-1 min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800"},Un={class:"mb-4 mt-4 grid grid-cols-1 gap-3 sm:mb-6 sm:mt-6 sm:gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},En={class:"space-y-4 sm:space-y-6"},Nn={key:1,class:"tab-content"},On={class:"glass-strong rounded-3xl shadow-xl"},Fn={key:2,class:"tab-content"},Wn={class:"glass-strong rounded-2xl p-4 shadow-xl sm:rounded-3xl sm:p-6 md:p-8"},Vn={class:"mb-4 flex gap-2 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},zn={key:0},Bn={key:0,class:"py-8 text-center"},Gn={key:1},Hn={class:"mb-6 rounded-xl bg-blue-50 p-4 dark:bg-blue-900/20"},Jn={class:"text-sm text-blue-700 dark:text-blue-300"},Qn={class:"font-medium"},Yn={class:"space-y-4"},Xn=["disabled"],Zn={key:0,class:"fas fa-spinner fa-spin mr-2"},eo={key:1,class:"fas fa-check-circle mr-2"},to={key:0,class:"mt-6"},so={class:"flex items-start gap-3"},ao={class:"font-medium"},ro={class:"mt-1 text-sm opacity-90"},lo={key:0,class:"mt-2 text-sm"},no={key:0},oo={class:"font-medium"},io={key:1},uo={class:"font-medium"},co={key:1},mo={key:0,class:"py-8 text-center"},go={key:1},xo={key:0,class:"py-8 text-center"},yo={key:1,class:"py-8 text-center"},fo={key:2,class:"space-y-3"},po={class:"flex items-start justify-between gap-4"},vo={class:"min-w-0 flex-1"},bo={class:"mb-1 flex items-center gap-2"},ko={key:0,class:"inline-flex items-center rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-300"},ho={class:"text-sm text-gray-600 dark:text-gray-300"},_o={key:0},wo={key:1},$o={key:2},Co={class:"whitespace-nowrap text-right text-xs text-gray-500 dark:text-gray-400"},To={class:"mb-4 flex items-center gap-3"},So={class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},Ao={class:"mb-4 whitespace-pre-wrap text-sm leading-relaxed text-gray-600 dark:text-gray-300"},Ko={class:"mb-4 flex cursor-pointer items-center gap-2"},je="apiStatsNoticeRead",Mo={__name:"ApiStatsView",setup(E){const K=We(),i=ge(),_=et(),g=T("stats"),v=j(()=>_.isDarkMode),{apiKey:h,apiId:$,loading:M,oemLoading:L,error:w,statsPeriod:u,statsData:x,oemSettings:f,multiKeyMode:c}=ce(i),{queryStats:n,switchPeriod:C,loadStatsWithApiId:P,loadOemSettings:D,loadServiceRates:U,loadApiKeyFromStorage:F,reset:Q}=i,W=T(!1),G=T(!1),te=T("claude"),ne=T(!1),oe=T(!1),Y=T("redeem"),Z=T(""),H=T(!1),r=T(null),s=T([]),m=T(!1),A=async()=>{var d;if(!Z.value.trim()||!$.value)return;H.value=!0,r.value=null;const p=await tt({apiId:$.value,code:Z.value.trim()});if(H.value=!1,p.success){const z=((d=p.data)==null?void 0:d.warnings)||[],le=z.length>0;r.value={success:!0,message:le?z.join(";"):"额度卡兑换成功!",data:p.data,hasWarnings:le},Z.value="",Ie(le?"兑换成功(部分截断)":"兑换成功",le?"warning":"success"),P()}else r.value={success:!1,message:p.error||p.message||"兑换失败"},Ie(p.error||p.message||"兑换失败","error")},N=async()=>{var d;if(!$.value)return;m.value=!0;const p=await st($.value);m.value=!1,p.success&&(s.value=((d=p.data)==null?void 0:d.records)||p.data||[])},B=()=>{g.value="quota",Y.value==="history"&&N()},de=()=>{Y.value="history",N()},re=p=>{if(!p)return[];if(Array.isArray(p))return p;if(typeof p=="string"){if(p==="all")return[];try{const d=JSON.parse(p);return Array.isArray(d)?d:[]}catch{return[]}}return[]},ie=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("claude")}),J=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("gemini")}),ae=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("openai")}),ue=j(()=>ie.value||J.value||ae.value),ye=j(()=>{var z;const p=re((z=x.value)==null?void 0:z.permissions);if(p.length===0)return"全部服务";const d={claude:"Claude",gemini:"Gemini",openai:"OpenAI",droid:"Droid"};return p.map(le=>d[le]||le).join(", ")}),fe=()=>{G.value=!G.value},pe=(p="claude")=>{te.value=p,G.value=!1,W.value=!0},he=()=>{W.value=!1},y=()=>{ne.value=!1,oe.value&&sessionStorage.setItem(je,"1")},S=()=>{var d;const p=(d=f.value)==null?void 0:d.apiStatsNotice;p!=null&&p.enabled&&(p!=null&&p.content)&&!sessionStorage.getItem(je)&&(ne.value=!0)},I=p=>{G.value&&!p.target.closest(".relative")&&(G.value=!1)},V=p=>{(p.ctrlKey||p.metaKey)&&p.key==="Enter"&&(!M.value&&h.value.trim()&&n(),p.preventDefault()),p.key==="Escape"&&Q()};return De(async()=>{_.initTheme(),await Promise.all([D(),U()]),S();const p=K.query.apiId,d=K.query.apiKey;if(p&&p.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)){$.value=p;const z=F();z&&(h.value=z),P()}else if(d&&d.length>10)h.value=d;else{const z=F();z&&z.length>10&&(h.value=z,n())}document.addEventListener("keydown",V),document.addEventListener("click",I)}),qe(()=>{document.removeEventListener("keydown",V),document.removeEventListener("click",I)}),Te(h,p=>{p||i.clearData()}),(p,d)=>{var le,Ae;const z=ze("router-link");return a(),l("div",{class:R(["min-h-screen p-2 sm:p-4 md:p-6",v.value?"gradient-bg-dark":"gradient-bg"])},[e("div",fn,[e("div",pn,[ee(rt,{loading:t(L),"logo-src":t(f).siteIconData||t(f).siteIcon,subtitle:g.value==="stats"?"API Key 使用统计":g.value==="quota"?"额度卡":"使用教程",title:t(f).siteName},null,8,["loading","logo-src","subtitle","title"]),e("div",vn,[e("div",bn,[ee(lt,{mode:"dropdown"})]),t(f).ldapEnabled||t(f).showAdminButton!==!1?(a(),l("div",kn)):b("",!0),t(f).ldapEnabled?(a(),ve(z,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:_e(()=>d[14]||(d[14]=[e("i",{class:"fas fa-user text-sm md:text-base"},null,-1),e("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[14]})):b("",!0),t(f).showAdminButton!==!1?(a(),ve(z,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:_e(()=>d[15]||(d[15]=[e("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),e("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[15]})):b("",!0)])])]),e("div",hn,[e("div",_n,[e("div",wn,[e("button",{class:R(["tab-pill-button",g.value==="stats"?"active":""]),onClick:d[0]||(d[0]=q=>g.value="stats")},d[16]||(d[16]=[e("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),e("button",{class:R(["tab-pill-button",g.value==="quota"?"active":""]),onClick:B},d[17]||(d[17]=[e("i",{class:"fas fa-ticket-alt mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"额度卡",-1)]),2),e("button",{class:R(["tab-pill-button",g.value==="tutorial"?"active":""]),onClick:d[1]||(d[1]=q=>g.value="tutorial")},d[18]||(d[18]=[e("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),g.value==="stats"?(a(),l("div",$n,[ee(At),t(w)?(a(),l("div",Cn,[e("div",Tn,[d[19]||(d[19]=e("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),k(" "+o(t(w)),1)])])):b("",!0),t(x)?(a(),l("div",Sn,[e("div",An,[e("div",Kn,[e("div",Mn,[d[27]||(d[27]=e("div",{class:"flex items-center gap-2 md:gap-3"},[e("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),e("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),e("div",Pn,[e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="daily"}]]),disabled:t(M),onClick:d[2]||(d[2]=q=>t(C)("daily"))},d[20]||(d[20]=[e("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),k(" 今日 ",-1)]),10,Rn),e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="monthly"}]]),disabled:t(M),onClick:d[3]||(d[3]=q=>t(C)("monthly"))},d[21]||(d[21]=[e("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),k(" 本月 ",-1)]),10,Ln),e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="alltime"}]]),disabled:t(M),onClick:d[4]||(d[4]=q=>t(C)("alltime"))},d[22]||(d[22]=[e("i",{class:"fas fa-infinity text-xs md:text-sm"},null,-1),k(" 全部 ",-1)]),10,In),t(c)?b("",!0):(a(),l("div",jn,[e("button",{class:R(["test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",ue.value?"":"cursor-not-allowed opacity-50"]),disabled:t(M)||!ue.value,title:ue.value?"测试 API":`当前 Key 可用服务: ${ye.value}`,onClick:fe},d[23]||(d[23]=[e("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),k(" 测试 ",-1),e("i",{class:"fas fa-chevron-down ml-1 text-xs"},null,-1)]),10,Dn),G.value?(a(),l("div",qn,[ie.value?(a(),l("button",{key:0,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[5]||(d[5]=q=>pe("claude"))},d[24]||(d[24]=[e("i",{class:"fas fa-robot text-orange-500"},null,-1),k(" Claude ",-1)]))):b("",!0),J.value?(a(),l("button",{key:1,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[6]||(d[6]=q=>pe("gemini"))},d[25]||(d[25]=[e("i",{class:"fas fa-gem text-blue-500"},null,-1),k(" Gemini ",-1)]))):b("",!0),ae.value?(a(),l("button",{key:2,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[7]||(d[7]=q=>pe("openai"))},d[26]||(d[26]=[e("i",{class:"fas fa-code text-green-500"},null,-1),k(" Codex ",-1)]))):b("",!0)])):b("",!0)]))])])]),ee(Hs),e("div",Un,[ee(ma,{class:"h-full"}),t(c)?(a(),ve(Ur,{key:0,class:"h-full"})):(a(),ve(wr,{key:1,class:"h-full"}))]),ee(Ml,{class:"mb-4 sm:mb-6"}),e("div",En,[ee(we,{period:"daily"}),ee(we,{period:"monthly"}),ee(we,{period:"alltime"})])])])):b("",!0)])):b("",!0),g.value==="tutorial"?(a(),l("div",Nn,[e("div",On,[ee(ot)])])):b("",!0),g.value==="quota"?(a(),l("div",Fn,[e("div",Wn,[e("div",Vn,[e("button",{class:R(["rounded-lg px-4 py-2 text-sm font-medium transition-all",Y.value==="redeem"?"bg-blue-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:d[8]||(d[8]=q=>Y.value="redeem")},d[28]||(d[28]=[e("i",{class:"fas fa-ticket-alt mr-2"},null,-1),k(" 兑换额度卡 ",-1)]),2),e("button",{class:R(["rounded-lg px-4 py-2 text-sm font-medium transition-all",Y.value==="history"?"bg-blue-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:de},d[29]||(d[29]=[e("i",{class:"fas fa-history mr-2"},null,-1),k(" 兑换记录 ",-1)]),2)]),Y.value==="redeem"?(a(),l("div",zn,[t($)?(a(),l("div",Gn,[e("div",Hn,[e("p",Jn,[d[31]||(d[31]=e("i",{class:"fas fa-info-circle mr-2"},null,-1)),d[32]||(d[32]=k(" 当前 API Key: ",-1)),e("span",Qn,o(((le=t(x))==null?void 0:le.name)||t($)),1)])]),e("div",Yn,[e("div",null,[d[33]||(d[33]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 额度卡卡号 ",-1)),xe(e("input",{"onUpdate:modelValue":d[10]||(d[10]=q=>Z.value=q),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 placeholder-gray-400 transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:placeholder-gray-500",placeholder:"请输入额度卡卡号",type:"text",onKeyup:$e(A,["enter"])},null,544),[[Se,Z.value]])]),e("button",{class:"w-full rounded-xl bg-gradient-to-r from-green-500 to-emerald-500 px-6 py-3 font-medium text-white transition-all hover:from-green-600 hover:to-emerald-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:!Z.value.trim()||H.value,onClick:A},[H.value?(a(),l("i",Zn)):(a(),l("i",eo)),k(" "+o(H.value?"兑换中...":"立即兑换"),1)],8,Xn)]),r.value?(a(),l("div",to,[e("div",{class:R(["rounded-xl p-4",r.value.success?r.value.hasWarnings?"bg-yellow-50 text-yellow-700 dark:bg-yellow-900/20 dark:text-yellow-300":"bg-green-50 text-green-700 dark:bg-green-900/20 dark:text-green-300":"bg-red-50 text-red-700 dark:bg-red-900/20 dark:text-red-300"])},[e("div",so,[e("i",{class:R(["mt-0.5 text-lg",r.value.success?r.value.hasWarnings?"fas fa-exclamation-triangle":"fas fa-check-circle":"fas fa-times-circle"])},null,2),e("div",null,[e("p",ao,o(r.value.success?r.value.hasWarnings?"兑换成功(部分截断)":"兑换成功":"兑换失败"),1),e("p",ro,o(r.value.message),1),r.value.success&&r.value.data?(a(),l("div",lo,[r.value.data.quotaAdded?(a(),l("p",no,[d[34]||(d[34]=k(" 额度增加: ",-1)),e("span",oo,"$"+o(r.value.data.quotaAdded),1)])):b("",!0),r.value.data.timeAdded?(a(),l("p",io,[d[35]||(d[35]=k(" 有效期延长: ",-1)),e("span",uo,o(r.value.data.timeAdded)+o(r.value.data.timeUnit==="days"?"天":r.value.data.timeUnit==="hours"?"小时":"月"),1)])):b("",!0)])):b("",!0)])])],2)])):b("",!0)])):(a(),l("div",Bn,[d[30]||(d[30]=e("div",{class:"mb-4 text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-key mb-4 block text-4xl opacity-50"}),e("p",null,"请先在「统计查询」页面输入您的 API Key")],-1)),e("button",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-6 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:d[9]||(d[9]=q=>g.value="stats")}," 前往输入 API Key ")]))])):b("",!0),Y.value==="history"?(a(),l("div",co,[t($)?(a(),l("div",go,[m.value?(a(),l("div",xo,d[37]||(d[37]=[e("i",{class:"fas fa-spinner fa-spin text-2xl text-gray-400"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):s.value.length===0?(a(),l("div",yo,d[38]||(d[38]=[e("i",{class:"fas fa-inbox text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"暂无兑换记录",-1)]))):(a(),l("div",fo,[(a(!0),l(X,null,se(s.value,q=>(a(),l("div",{key:q.id,class:"rounded-xl border border-gray-200 bg-white p-4 dark:border-gray-700 dark:bg-gray-800"},[e("div",po,[e("div",vo,[e("div",bo,[e("span",{class:R(["inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium",q.cardType==="quota"?"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300":q.cardType==="time"?"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300":"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300"])},o(q.cardType==="quota"?"额度卡":q.cardType==="time"?"时间卡":"组合卡"),3),q.status==="revoked"?(a(),l("span",ko," 已撤销 ")):b("",!0)]),e("p",ho,[q.quotaAdded?(a(),l("span",_o,"额度 +$"+o(q.quotaAdded),1)):b("",!0),q.quotaAdded&&q.timeAdded?(a(),l("span",wo," · ")):b("",!0),q.timeAdded?(a(),l("span",$o,"有效期 +"+o(q.timeAmount)+o(q.timeUnit==="days"?"天":q.timeUnit==="hours"?"小时":"月"),1)):b("",!0)])]),e("div",Co,o(t(at)(q.redeemedAt)),1)])]))),128))]))])):(a(),l("div",mo,[d[36]||(d[36]=e("div",{class:"mb-4 text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-key mb-4 block text-4xl opacity-50"}),e("p",null,"请先在「统计查询」页面输入您的 API Key")],-1)),e("button",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-6 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:d[11]||(d[11]=q=>g.value="stats")}," 前往输入 API Key ")]))])):b("",!0)])])):b("",!0),ee(yn,{"api-key-name":((Ae=t(x))==null?void 0:Ae.name)||"","api-key-value":t(h),"service-type":te.value,show:W.value,onClose:he},null,8,["api-key-name","api-key-value","service-type","show"]),(a(),ve(Ue,{to:"body"},[ee(Ve,{name:"fade"},{default:_e(()=>{var q,Ke;return[ne.value?(a(),l("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:Ce(y,["self"])},[e("div",{class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800",onClick:d[13]||(d[13]=Ce(()=>{},["stop"]))},[e("div",To,[d[39]||(d[39]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 text-white"},[e("i",{class:"fas fa-bell"})],-1)),e("h3",So,o(((q=t(f).apiStatsNotice)==null?void 0:q.title)||"通知"),1)]),e("p",Ao,o((Ke=t(f).apiStatsNotice)==null?void 0:Ke.content),1),e("label",Ko,[xe(e("input",{"onUpdate:modelValue":d[12]||(d[12]=Ne=>oe.value=Ne),class:"h-4 w-4 rounded border-gray-300 text-blue-500 focus:ring-blue-500",type:"checkbox"},null,512),[[Be,oe.value]]),d[40]||(d[40]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"本次会话不再显示",-1))]),e("button",{class:"w-full rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-4 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:y}," 知道了 ")])])):b("",!0)]}),_:1})]))],2)}}},Eo=me(Mo,[["__scopeId","data-v-8fdf3cb4"]]);export{Eo as default};
diff --git a/assets/ApiStatsView-G_xX3WMi.js b/assets/ApiStatsView-G_xX3WMi.js
deleted file mode 100644
index 84d02dbd..00000000
--- a/assets/ApiStatsView-G_xX3WMi.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import{aP as pt,r as M,c as j,aX as et,x as n,y as l,z as t,O as b,L as K,P as r,u as e,C as P,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as tt,B as lt,R as X,o as ft,V as yt,I as ot,a5 as bt,q as kt,aW as ht,J as xt,av as _t}from"./vue-vendor-R8HMg95E.js";import{_ as st,A as wt,a as $t}from"./index-B3t2NHq9.js";import{L as St}from"./LogoTitle-CNwD90nW.js";import{T as Ct}from"./ThemeToggle-DRoGUDeP.js";import{b as Tt}from"./vendor-Dr8jvgFu.js";import{_ as Kt}from"./WindowCountdown-DF7xS2EZ.js";import At from"./TutorialView-DeQdS06L.js";import"./element-plus-BUfCkBQO.js";class Lt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(v,s={}){try{this.isDev&&v.startsWith("/admin")&&(v="/webapi"+v);const p=await fetch(`${this.baseURL}${v}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),d=await p.json();if(!p.ok)throw new Error(d.message||`请求失败: ${p.status}`);return d}catch(p){throw console.error("API Stats request error:",p),p}}async getKeyId(v){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:v})})}async getUserStats(v){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:v})})}async getUserModelStats(v,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:v,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(v){return console.error("Failed to load OEM settings:",v),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(v){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:v})})}async getBatchModelStats(v,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:v,period:s})})}}const Q=new Lt,at=pt("apistats",()=>{const N=M(""),v=M(null),s=M(!1),p=M(!1),d=M(!0),x=M(""),m=M("daily"),y=M(null),_=M([]),A=M(null),f=M(null),T=M({siteName:"",siteIcon:"",siteIconData:""}),O=M(!1),w=M([]),h=M([]),u=M(null),i=M([]),I=M([]),E=j(()=>{const c={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return O.value&&u.value?m.value==="daily"?u.value.dailyUsage||c:u.value.monthlyUsage||c:m.value==="daily"?A.value||c:f.value||c}),H=j(()=>{if(!y.value||!E.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const c=E.value,k=y.value.limits;return{tokenUsage:k.tokenLimit>0?Math.min(c.allTokens/k.tokenLimit*100,100):0,costUsage:k.dailyCostLimit>0?Math.min(c.cost/k.dailyCostLimit*100,100):0,requestUsage:k.rateLimitRequests>0?Math.min(c.requests/k.rateLimitRequests*100,100):0}});async function V(){if(O.value)return Y();const c=N.value.trim();if(!c){x.value="请输入 API Key";return}if(c.length<10||c.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",y.value=null,_.value=[],v.value=null;try{const k=await Q.getKeyId(c);if(k.success){v.value=k.data.id;const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,await W(),x.value="",z();else throw new Error(L.message||"查询失败")}else throw new Error(k.message||"获取 API Key ID 失败")}catch(k){console.error("Query stats error:",k),x.value=k.message||"查询统计数据失败,请检查您的 API Key 是否正确",y.value=null,_.value=[],v.value=null}finally{s.value=!1}}async function W(){v.value&&(await Promise.all([B("daily"),B("monthly")]),await D(m.value))}async function B(c){try{const k=await Q.getUserModelStats(v.value,c);if(k.success){const L=k.data||[],F={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};L.forEach(q=>{var J;F.requests+=q.requests||0,F.inputTokens+=q.inputTokens||0,F.outputTokens+=q.outputTokens||0,F.cacheCreateTokens+=q.cacheCreateTokens||0,F.cacheReadTokens+=q.cacheReadTokens||0,F.allTokens+=q.allTokens||0,F.cost+=((J=q.costs)==null?void 0:J.total)||0}),F.formattedCost=G(F.cost),c==="daily"?A.value=F:f.value=F}else console.warn(`Failed to load ${c} stats:`,k.message)}catch(k){console.error(`Load ${c} stats error:`,k)}}async function D(c="daily"){if(v.value){p.value=!0;try{const k=await Q.getUserModelStats(v.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载模型统计失败")}catch(k){console.error("Load model stats error:",k),_.value=[]}finally{p.value=!1}}}async function $(c){if(!(m.value===c||p.value)){if(m.value=c,O.value&&h.value.length>0){await rt(c);return}(c==="daily"&&!A.value||c==="monthly"&&!f.value)&&await B(c),await D(c)}}async function U(){var c,k;if(v.value){s.value=!0,x.value="",y.value=null,_.value=[];try{const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,console.log("API Stats - Full response:",L.data),console.log("API Stats - limits data:",L.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(c=L.data.limits)==null?void 0:c.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(k=L.data.limits)==null?void 0:k.weeklyOpusCost),await W(),x.value="";else throw new Error(L.message||"查询失败")}catch(L){console.error("Load stats with apiId error:",L),x.value=L.message||"查询统计数据失败",y.value=null,_.value=[]}finally{s.value=!1}}}async function S(){d.value=!0;try{const c=await Q.getOemSettings();c&&c.success&&c.data&&(T.value={...T.value,...c.data})}catch(c){console.error("Error loading OEM settings:",c),T.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{d.value=!1}}function G(c){return typeof c!="number"||c===0?"$0.000000":c>=1?"$"+c.toFixed(2):c>=.01?"$"+c.toFixed(4):"$"+c.toFixed(6)}function z(){if(v.value){const c=new URL(window.location);c.searchParams.set("apiId",v.value),window.history.pushState({},"",c)}}async function Y(){const c=o();if(c.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",u.value=null,i.value=[],I.value=[],_.value=[],w.value=c,h.value=[];try{const k=await Promise.allSettled(c.map(J=>Q.getKeyId(J))),L=[],F=[];if(k.forEach((J,it)=>{J.status==="fulfilled"&&J.value.success?(L.push(J.value.data.id),F.push(c[it])):I.value.push(c[it])}),L.length===0)throw new Error("所有 API Key 都无效");h.value=L,w.value=F;const q=await Q.getBatchStats(L);if(q.success)u.value=q.data.aggregated,i.value=q.data.individual,y.value=q.data.aggregated,A.value=q.data.aggregated.dailyUsage||null,f.value=q.data.aggregated.monthlyUsage||null,await rt(m.value),a();else throw new Error(q.message||"批量查询失败")}catch(k){console.error("Batch query error:",k),x.value=k.message||"批量查询统计数据失败",u.value=null,i.value=[]}finally{s.value=!1}}async function rt(c="daily"){if(h.value.length!==0){p.value=!0;try{const k=await Q.getBatchModelStats(h.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载批量模型统计失败")}catch(k){console.error("Load batch model stats error:",k),_.value=[]}finally{p.value=!1}}}function o(){if(!N.value)return[];const c=N.value.split(/[,\n]+/).map(L=>L.trim()).filter(L=>L.length>=10&&L.length<=512);return[...new Set(c)].slice(0,30)}function a(){if(h.value.length>0){const c=new URL(window.location);c.searchParams.set("apiIds",h.value.join(",")),c.searchParams.set("batch","true"),window.history.pushState({},"",c)}}function g(){N.value=""}function C(){y.value=null,_.value=[],A.value=null,f.value=null,x.value="",m.value="daily",v.value=null,w.value=[],h.value=[],u.value=null,i.value=[],I.value=[]}function R(){N.value="",O.value=!1,C()}return{apiKey:N,apiId:v,loading:s,modelStatsLoading:p,oemLoading:d,error:x,statsPeriod:m,statsData:y,modelStats:_,dailyStats:A,monthlyStats:f,oemSettings:T,multiKeyMode:O,apiKeys:w,apiIds:h,aggregatedStats:u,individualStats:i,invalidKeys:I,currentPeriodData:E,usagePercentages:H,queryStats:V,queryBatchStats:Y,loadAllPeriodStats:W,loadPeriodStats:B,loadModelStats:D,loadBatchModelStats:rt,switchPeriod:$,loadStatsWithApiId:U,loadOemSettings:S,clearData:C,clearInput:g,reset:R}}),Pt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},It={class:"mx-auto max-w-4xl"},Mt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Dt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},qt={class:"button-group flex items-center gap-2"},jt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Ut={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Rt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Nt={class:"lg:col-span-3"},Ot=["disabled"],Et={key:1,class:"relative"},Ft=["disabled"],Wt={class:"lg:col-span-1"},Bt=["disabled"],Vt={key:0,class:"fas fa-spinner loading-spinner"},zt={key:1,class:"fas fa-search"},Jt={class:"security-notice mt-4"},Yt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},Ht={__name:"ApiKeyInput",setup(N){const v=at(),{apiKey:s,loading:p,multiKeyMode:d}=et(v),{queryStats:x,clearInput:m}=v,y=j(()=>{if(!d.value||!s.value)return[];const A=s.value.split(/[,\n]+/).map(T=>T.trim()).filter(T=>T.length>0);return[...new Set(A)].slice(0,30)}),_=j(()=>d.value?y.value.length>0:s.value&&s.value.trim().length>0);return(A,f)=>(l(),n("div",Pt,[f[15]||(f[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),b(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",It,[t("div",Mt,[t("label",Dt,[f[8]||(f[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),b(" "+r(e(d)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",qt,[t("div",jt,[t("button",{class:P(["mode-switch-btn",{active:!e(d)}]),title:"单一模式",onClick:f[0]||(f[0]=T=>d.value=!1)},f[9]||(f[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:P(["mode-switch-btn",{active:e(d)}]),title:"聚合模式",onClick:f[1]||(f[1]=T=>d.value=!0)},[f[10]||(f[10]=t("i",{class:"fas fa-layer-group"},null,-1)),f[11]||(f[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(d)&&y.value.length>0?(l(),n("span",Ut,r(y.value.length),1)):K("",!0)],2)])])]),t("div",Rt,[t("div",Nt,[e(d)?(l(),n("div",Et,[ut(t("textarea",{"onUpdate:modelValue":f[4]||(f[4]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full resize-y",disabled:e(p),placeholder:`请输入您的 API Keys,支持以下格式:
-cr_xxx
-cr_yyy
-或
-cr_xxx, cr_yyy`,rows:"4",onKeyup:f[5]||(f[5]=mt(vt((...T)=>e(x)&&e(x)(...T),["ctrl"]),["enter"]))},null,40,Ft),[[ct,e(s)]]),e(s)&&!e(p)?(l(),n("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:f[6]||(f[6]=(...T)=>e(m)&&e(m)(...T))},f[12]||(f[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):K("",!0)])):ut((l(),n("input",{key:0,"onUpdate:modelValue":f[2]||(f[2]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full",disabled:e(p),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:f[3]||(f[3]=mt((...T)=>e(x)&&e(x)(...T),["enter"]))},null,40,Ot)),[[ct,e(s)]])]),t("div",Wt,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(p)||!_.value,onClick:f[7]||(f[7]=(...T)=>e(x)&&e(x)(...T))},[e(p)?(l(),n("i",Vt)):(l(),n("i",zt)),b(" "+r(e(p)?"查询中...":"查询统计"),1)],8,Bt)])]),t("div",Jt,[f[13]||(f[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),b(" "+r(e(d)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(d)?(l(),n("div",Yt,f[14]||(f[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):K("",!0)])]))}},Gt=st(Ht,[["__scopeId","data-v-11e74200"]]),Qt={class:"space-y-6 md:space-y-8"},Xt={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Zt={class:"card-section"},te={class:"section-header"},ee={class:"header-title"},se={key:0,class:"info-grid"},ae={class:"info-item"},re={class:"info-value"},le={class:"info-item"},ie={class:"info-value text-green-600 dark:text-emerald-400"},oe={key:0,class:"info-item"},ne={class:"info-value text-red-500 dark:text-red-400"},de={class:"info-item"},ue={class:"info-value"},ce={class:"info-item"},me={class:"info-value"},ge={class:"info-item"},xe={class:"info-value text-indigo-600 dark:text-indigo-300"},fe={key:1,class:"info-item xl:col-span-2"},ye={class:"space-y-2"},pe={class:"truncate"},ve={class:"font-semibold"},be={key:1,class:"info-grid"},ke={class:"info-item"},he={class:"info-value break-all"},_e={class:"info-item"},we={class:"info-item"},$e={class:"info-value"},Se={class:"info-item"},Ce={class:"info-value break-all"},Te={class:"info-item xl:col-span-2"},Ke={class:"info-value"},Ae={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},Le={key:0,class:"text-red-500 dark:text-red-400"},Pe={key:1,class:"text-orange-500 dark:text-orange-400"},Ie={key:2},Me={key:2,class:"text-gray-400 dark:text-gray-500"},De={class:"card-section"},qe={class:"section-header"},je={class:"header-tag"},Ue={class:"metric-grid"},Re={class:"metric-card"},Ne={class:"metric-value text-green-600 dark:text-emerald-300"},Oe={class:"metric-label"},Ee={class:"metric-card"},Fe={class:"metric-value text-blue-600 dark:text-sky-300"},We={class:"metric-label"},Be={class:"metric-card"},Ve={class:"metric-value text-purple-600 dark:text-violet-300"},ze={class:"metric-label"},Je={class:"metric-card"},Ye={class:"metric-value text-amber-500 dark:text-amber-300"},He={class:"metric-label"},Ge={key:0,class:"card-section"},Qe={class:"flex items-center justify-between gap-3"},Xe={class:"flex items-center gap-3"},Ze={class:"account-name"},ts={class:"account-sub"},es={key:0,class:"mt-3 space-y-2"},ss={class:"progress-row"},as={class:"progress-track"},rs={class:"progress-value"},ls={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},is={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},os={key:1,class:"mt-3"},ns={key:0,class:"space-y-2"},ds={class:"quota-header"},us={class:"quota-percent"},cs={class:"progress-track"},ms={class:"quota-foot"},gs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},xs={__name:"StatsOverview",setup(N){const v=at(),{statsData:s,statsPeriod:p,currentPeriodData:d,multiKeyMode:x,aggregatedStats:m,individualStats:y,invalidKeys:_}=et(v),A=j(()=>!y.value||y.value.length===0?[]:[...y.value].sort((o,a)=>{var g,C;return(((g=a.usage)==null?void 0:g.allTokens)||0)-(((C=o.usage)==null?void 0:C.allTokens)||0)}).slice(0,3)),f=o=>{var g;return!m.value||!m.value.usage.allTokens?0:((((g=o.usage)==null?void 0:g.allTokens)||0)/m.value.usage.allTokens*100).toFixed(1)},T=o=>{if(!o)return"无";try{return Tt(o).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},O=o=>o?new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",w=o=>o?new Date(o){if(!o)return!1;const C=(new Date(o)-new Date)/(1e3*60*60*24);return C>0&&C<=7},u=o=>(typeof o!="number"&&(o=parseInt(o)||0),o===0?"0":o>=1e6?(o/1e6).toFixed(1)+"M":o>=1e3?(o/1e3).toFixed(1)+"K":o.toLocaleString()),i=o=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[o]||o||"未知",I=j(()=>{var g,C;const o=(C=(g=s.value)==null?void 0:g.accounts)==null?void 0:C.details;if(!o)return[];const a=[];return o.claude&&o.claude.accountType==="dedicated"&&a.push({key:"claude",...o.claude}),o.openai&&o.openai.accountType==="dedicated"&&a.push({key:"openai",...o.openai}),a}),E=j(()=>{const o=I.value.length;return o<=1?"md:grid-cols-1 lg:grid-cols-1":o===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),H=o=>o?o.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",V=o=>{if(!o||o<=0)return"";const a=Math.floor(o),g=Math.floor(a/1440),C=Math.floor(a%1440/60),R=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:`${R}分钟`},W=o=>{if(!o)return{text:"状态未知",class:"text-gray-400"};if(o.isRateLimited){const a=V(o.minutesRemaining);return{text:`限流中${a?` · 剩余约 ${a}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},B=(o,a)=>{if(!o||!a)return"暂无时间窗口信息";const g=new Date(o),C=new Date(a),R=c=>`${`${c.getHours()}`.padStart(2,"0")}:${`${c.getMinutes()}`.padStart(2,"0")}`;return`${R(g)} - ${R(C)}`},D=o=>{if(!o||o<=0)return"";const a=Math.floor(o/60),g=o%60;return a>0?`${a}小时${g}分钟`:`${g}分钟`},$=(o,a)=>{var C;if(!o)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((C=a==null?void 0:a.rateLimitStatus)!=null&&C.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const g=String(o).toLowerCase();return g==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":g==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},U=o=>{if(!o)return null;const a=typeof o.usedPercent=="number"&&!Number.isNaN(o.usedPercent)?o.usedPercent:null,g=typeof o.resetAfterSeconds=="number"&&!Number.isNaN(o.resetAfterSeconds)?o.resetAfterSeconds:null,C=typeof o.remainingSeconds=="number"?o.remainingSeconds:null,R=o.resetAt?Date.parse(o.resetAt):null;return g!==null&&(C!==null&&C<=0||R!==null&&!Number.isNaN(R)&&Date.now()>=R)?0:a===null?null:Math.max(0,Math.min(100,a))},S=o=>{const a=U(o);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},G=o=>{const a=U(o);return a===null?"0%":`${a}%`},z=o=>{const a=U(o);return a===null?"--":`${a.toFixed(1)}%`},Y=o=>{if(!o)return"--";let a=o.remainingSeconds;if(a==null&&(a=o.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const g=Math.floor(a/86400),C=Math.floor(a%86400/3600),R=Math.floor(a%3600/60),c=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:R>0?`${R}分钟`:`${c}秒`},rt=o=>o==="secondary"?"周限":"5h";return(o,a)=>(l(),n("div",Qt,[t("div",Xt,[t("div",Zt,[t("header",te,[t("i",{class:P(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",ee,r(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(m)?(l(),n("div",se,[t("div",ae,[a[0]||(a[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",re,r(e(m).totalKeys)+" 个",1)]),t("div",le,[a[2]||(a[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ie,[a[1]||(a[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),b(r(e(m).activeKeys)+" 个 ",1)])]),e(_).length>0?(l(),n("div",oe,[a[4]||(a[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",ne,[a[3]||(a[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),b(r(e(_).length)+" 个 ",1)])])):K("",!0),t("div",de,[a[5]||(a[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",ue,r(u(e(m).usage.requests)),1)]),t("div",ce,[a[6]||(a[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",me,r(u(e(m).usage.allTokens)),1)]),t("div",ge,[a[7]||(a[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",xe,r(e(m).usage.formattedCost),1)]),e(y).length>1?(l(),n("div",fe,[a[8]||(a[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",ye,[(l(!0),n(Z,null,tt(A.value,g=>(l(),n("div",{key:g.apiId,class:"contributor-item"},[t("span",pe,r(g.name),1),t("span",ve,r(f(g))+"%",1)]))),128))])])):K("",!0)])):(l(),n("div",be,[t("div",ke,[a[9]||(a[9]=t("p",{class:"info-label"},"名称",-1)),t("p",he,r(e(s).name),1)]),t("div",_e,[a[10]||(a[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:P(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:P(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),b(" "+r(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",we,[a[11]||(a[11]=t("p",{class:"info-label"},"权限",-1)),t("p",$e,r(i(e(s).permissions)),1)]),t("div",Se,[a[12]||(a[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ce,r(T(e(s).createdAt)),1)]),t("div",Te,[a[17]||(a[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ke,[e(s).expirationMode==="activation"&&!e(s).isActivated?(l(),n(Z,{key:0},[a[13]||(a[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),b("未激活 ")],-1)),t("span",Ae," 首次使用后 "+r(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+r(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(l(),n(Z,{key:1},[w(e(s).expiresAt)?(l(),n("span",Le,a[14]||(a[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),b("已过期 ",-1)]))):h(e(s).expiresAt)?(l(),n("span",Pe,[a[15]||(a[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),b(r(O(e(s).expiresAt)),1)])):(l(),n("span",Ie,r(O(e(s).expiresAt)),1))],64)):(l(),n("span",Me,a[16]||(a[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),b("永不过期 ",-1)])))])])]))]),t("div",De,[t("header",qe,[a[18]||(a[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),a[19]||(a[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",je,r(e(p)==="daily"?"今日":"本月"),1)]),t("div",Ue,[t("div",Re,[t("p",Ne,r(u(e(d).requests)),1),t("p",Oe,r(e(p)==="daily"?"今日":"本月")+"请求数",1)]),t("div",Ee,[t("p",Fe,r(u(e(d).allTokens)),1),t("p",We,r(e(p)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",Be,[t("p",Ve,r(e(d).formattedCost||"$0.000000"),1),t("p",ze,r(e(p)==="daily"?"今日":"本月")+"费用",1)]),t("div",Je,[t("p",Ye,r(u(e(d).inputTokens)),1),t("p",He,r(e(p)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&I.value.length>0?(l(),n("div",Ge,[a[21]||(a[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:P(["grid grid-cols-1 gap-4",E.value])},[(l(!0),n(Z,null,tt(I.value,g=>{var C,R,c,k,L,F;return l(),n("div",{key:g.id||g.key,class:"account-card"},[t("div",Qe,[t("div",Xe,[t("span",{class:P(["account-icon",g.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:P(g.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",Ze,r(H(g)),1),t("p",ts,r(g.platform==="claude"?"会话窗口":"额度窗口"),1)])]),W(g.rateLimitStatus)?(l(),n("div",{key:0,class:P(["rate-badge",W(g.rateLimitStatus).class])},[a[20]||(a[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),b(" "+r(W(g.rateLimitStatus).text),1)],2)):K("",!0)]),g.platform==="claude"?(l(),n("div",es,[t("div",ss,[t("div",as,[t("div",{class:P(["progress-bar",$((C=g.sessionWindow)==null?void 0:C.sessionWindowStatus,g)]),style:lt({width:`${Math.min(100,Math.max(0,((R=g.sessionWindow)==null?void 0:R.progress)||0))}%`})},null,6)]),t("span",rs,r(Math.min(100,Math.max(0,Math.round(((c=g.sessionWindow)==null?void 0:c.progress)||0))))+"% ",1)]),t("div",ls,[t("span",null,r(B((k=g.sessionWindow)==null?void 0:k.windowStart,(L=g.sessionWindow)==null?void 0:L.windowEnd)),1),((F=g.sessionWindow)==null?void 0:F.remainingTime)>0?(l(),n("span",is," 剩余 "+r(D(g.sessionWindow.remainingTime)),1)):K("",!0)])])):g.platform==="openai"?(l(),n("div",os,[g.codexUsage?(l(),n("div",ns,[(l(),n(Z,null,tt(["primary","secondary"],q=>{var J,it,nt,dt;return t("div",{key:`${g.key}-${q}`,class:"quota-row"},[t("div",ds,[t("span",{class:P(["quota-tag",q==="primary"?"tag-indigo":"tag-blue"])},r(rt(q)),3),t("span",us,r(z((J=g.codexUsage)==null?void 0:J[q])),1)]),t("div",cs,[t("div",{class:P(["progress-bar",S((it=g.codexUsage)==null?void 0:it[q])]),style:lt({width:G((nt=g.codexUsage)==null?void 0:nt[q])})},null,6)]),t("div",ms," 重置剩余 "+r(Y((dt=g.codexUsage)==null?void 0:dt[q])),1)])}),64))])):(l(),n("p",gs," 暂无额度使用数据 "))])):K("",!0)])}),128))],2)])):K("",!0)]))}},fs=st(xs,[["__scopeId","data-v-b72df2cd"]]),ys={class:"card p-4 md:p-6"},ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},vs={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},bs={class:"space-y-2 md:space-y-3"},ks={class:"flex items-center justify-between"},hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},_s={class:"flex items-center justify-between"},ws={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},$s={class:"flex items-center justify-between"},Ss={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Cs={class:"flex items-center justify-between"},Ts={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Ks={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},As={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ls={class:"text-sm md:text-base"},Ps={class:"text-lg md:text-xl"},Is={__name:"TokenDistribution",setup(N){const v=at(),{statsPeriod:s,currentPeriodData:p}=et(v),d=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,m)=>(l(),n("div",ys,[t("h3",ps,[m[0]||(m[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),b(" Token 使用分布 ")],-1)),t("span",vs,"("+r(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",bs,[t("div",ks,[m[1]||(m[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),b(" 输入 Token ")],-1)),t("span",hs,r(d(e(p).inputTokens)),1)]),t("div",_s,[m[2]||(m[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),b(" 输出 Token ")],-1)),t("span",ws,r(d(e(p).outputTokens)),1)]),t("div",$s,[m[3]||(m[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),b(" 缓存创建 Token ")],-1)),t("span",Ss,r(d(e(p).cacheCreateTokens)),1)]),t("div",Cs,[m[4]||(m[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),b(" 缓存读取 Token ")],-1)),t("span",Ts,r(d(e(p).cacheReadTokens)),1)])]),t("div",Ks,[t("div",As,[t("span",Ls,r(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Ps,r(d(e(p).allTokens)),1)])])]))}},Ms=st(Is,[["__scopeId","data-v-d9e5c1dd"]]),Ds={class:"flex h-full flex-col gap-4 md:gap-6"},qs={class:"card flex h-full flex-col p-4 md:p-6"},js={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Us={key:0,class:"space-y-4"},Rs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Ns={class:"mb-3 flex items-center justify-between"},Os={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},Es={class:"grid grid-cols-2 gap-3"},Fs={class:"text-center"},Ws={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Bs={class:"text-center"},Vs={class:"text-lg font-bold text-green-600"},zs={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Js={class:"space-y-2"},Ys={class:"flex items-center justify-between"},Hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Gs={class:"flex items-center justify-between"},Qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Xs={class:"flex items-center justify-between"},Zs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ta={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},ea={class:"text-red-700 dark:text-red-300"},sa={key:1,class:"space-y-4 md:space-y-5"},aa={class:"mb-2 flex items-center justify-between"},ra={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},la={key:0},ia={key:1,class:"flex items-center gap-1"},oa={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},na={key:1,class:"h-2 w-full rounded-full bg-gray-200"},da={class:"mb-2 flex items-center justify-between"},ua={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ca={key:0},ma={key:1,class:"flex items-center gap-1"},ga={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},xa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},fa={key:0},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},va={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ba={key:1},ka={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ha={key:0},_a={key:1},wa={key:2},$a={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},Sa={class:"flex items-center justify-between"},Ca={class:"text-sm font-medium text-gray-900 md:text-base"},Ta={key:0},Ka={key:1,class:"flex items-center gap-1"},Aa={class:"flex items-center justify-between"},La={class:"text-sm font-medium text-gray-900 md:text-base"},Pa={key:0,class:"text-orange-600"},Ia={key:1,class:"text-green-600"},Ma={class:"space-y-2"},Da={class:"flex items-center justify-between"},qa={class:"text-sm font-medium text-gray-900 md:text-base"},ja={key:0,class:"text-orange-600"},Ua={key:1,class:"text-green-600"},Ra={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Na={key:0,class:"card !overflow-visible p-4 md:p-6"},Oa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},Ea={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},Fa={class:"break-all text-gray-800 dark:text-gray-200"},Wa={__name:"LimitConfig",setup(N){const v=at(),{statsData:s,multiKeyMode:p,aggregatedStats:d,invalidKeys:x}=et(v),m=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableModelRestriction===!0&&Array.isArray(u.restrictedModels)&&u.restrictedModels.length>0:!1}),y=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableClientRestriction===!0&&Array.isArray(u.allowedClients)&&u.allowedClients.length>0:!1}),_=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const u=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(u,100)},A=()=>{const u=_();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const u=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(u,100)},T=()=>{const u=f();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-blue-500"},O=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const u=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(u,100)},w=()=>{const u=O();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-indigo-500"},h=u=>(typeof u!="number"&&(u=parseInt(u)||0),u===0?"0":u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toLocaleString());return(u,i)=>(l(),n("div",Ds,[t("div",qs,[t("h3",js,[i[0]||(i[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),b(" "+r(e(p)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(p)&&e(d)?(l(),n("div",Us,[t("div",Rs,[t("div",Ns,[i[1]||(i[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),b(" API Keys 概况 ")],-1)),t("span",Os,r(e(d).activeKeys)+"/"+r(e(d).totalKeys),1)]),t("div",Es,[t("div",Fs,[t("div",Ws,r(e(d).totalKeys),1),i[2]||(i[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",Bs,[t("div",Vs,r(e(d).activeKeys),1),i[3]||(i[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",zs,[i[7]||(i[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",Js,[t("div",Ys,[i[4]||(i[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),b(" 总请求数 ")],-1)),t("span",Hs,r(h(e(d).usage.requests)),1)]),t("div",Gs,[i[5]||(i[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),b(" 总 Tokens ")],-1)),t("span",Qs,r(h(e(d).usage.allTokens)),1)]),t("div",Xs,[i[6]||(i[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),b(" 总费用 ")],-1)),t("span",Zs,r(e(d).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(l(),n("div",ta,[i[8]||(i[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",ea,r(e(x).length)+" 个无效的 API Key ",1)])):K("",!0),i[9]||(i[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):K("",!0),e(p)?K("",!0):(l(),n("div",sa,[t("div",null,[t("div",aa,[i[11]||(i[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",ra,[e(s).limits.dailyCostLimit>0?(l(),n("span",la," $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / $"+r(e(s).limits.dailyCostLimit.toFixed(2)),1)):(l(),n("span",ia,[b(" $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),i[10]||(i[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(l(),n("div",oa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:_()+"%"})},null,6)])):(l(),n("div",na,i[12]||(i[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",da,[i[14]||(i[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",ua,[e(s).limits.totalCostLimit>0?(l(),n("span",ca," $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / $"+r(e(s).limits.totalCostLimit.toFixed(2)),1)):(l(),n("span",ma,[b(" $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),i[13]||(i[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(l(),n("div",ga,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T()]),style:lt({width:f()+"%"})},null,6)])):(l(),n("div",xa,i[15]||(i[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(l(),n("div",fa,[t("div",ya,[i[16]||(i[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Claude 模型周费用限制",-1)),t("span",pa," $"+r(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+r(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",va,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",w()]),style:lt({width:O()+"%"})},null,6)])])):K("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(l(),n("div",ba,[X(Kt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",ka,[i[17]||(i[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(l(),n("span",ha,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(l(),n("span",_a,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(l(),n("span",wa," 仅限制请求次数 "))])])):K("",!0),t("div",$a,[t("div",Sa,[i[19]||(i[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ca,[e(s).limits.concurrencyLimit>0?(l(),n("span",Ta,r(e(s).limits.concurrencyLimit),1)):(l(),n("span",Ka,i[18]||(i[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Aa,[i[22]||(i[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",La,[m.value?(l(),n("span",Pa,[i[20]||(i[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限制 "+r(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(l(),n("span",Ia,i[21]||(i[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有模型 ",-1)])))])]),t("div",Ma,[t("div",Da,[i[25]||(i[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",qa,[y.value?(l(),n("span",ja,[i[23]||(i[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限 "+r(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(l(),n("span",Ua,i[24]||(i[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有客户端 ",-1)])))])]),y.value?(l(),n("div",Ra,[(l(!0),n(Z,null,tt(e(s).restrictions.allowedClients,I=>(l(),n("span",{key:I,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[i[26]||(i[26]=t("i",{class:"fas fa-id-badge"},null,-1)),b(" "+r(I),1)]))),128))])):K("",!0)])])]))]),m.value?(l(),n("div",Na,[i[30]||(i[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),b(" 详细限制信息 ")],-1)),t("div",Oa,[i[28]||(i[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),b(" 受限模型列表 ")],-1)),t("div",Ea,[(l(!0),n(Z,null,tt(e(s).restrictions.restrictedModels,I=>(l(),n("div",{key:I,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[i[27]||(i[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Fa,r(I),1)]))),128))]),i[29]||(i[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):K("",!0)]))}},Ba=st(Wa,[["__scopeId","data-v-21526aa3"]]),Va={class:"card h-full p-4 md:p-6"},za={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ja={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ya={key:0,class:"space-y-2 md:space-y-3"},Ha={class:"mb-1 flex items-center justify-between text-sm"},Ga={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Qa={class:"text-xs text-gray-600 dark:text-gray-400"},Xa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Za={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},tr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},er={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},sr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},ar={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},rr={__name:"AggregatedStatsCard",setup(N){const v=at(),{aggregatedStats:s,individualStats:p,statsPeriod:d,multiKeyMode:x}=et(v),m=w=>w?d.value==="daily"?w.dailyUsage||w.usage:w.monthlyUsage||w.usage:null,y=j(()=>!p.value||p.value.length===0?[]:[...p.value].sort((w,h)=>{const u=m(w),i=m(h);return((i==null?void 0:i.cost)||0)-((u==null?void 0:u.cost)||0)}).slice(0,5)),_=j(()=>p.value?Math.max(0,p.value.length-5):0),A=j(()=>{var i,I;if(!p.value||!s.value)return 0;const w=y.value.reduce((E,H)=>{const V=m(H);return E+((V==null?void 0:V.cost)||0)},0),h=d.value==="daily"?((i=s.value.dailyUsage)==null?void 0:i.cost)||0:((I=s.value.monthlyUsage)==null?void 0:I.cost)||0;if(h===0)return 0;const u=h-w;return Math.max(0,Math.round(u/h*100))}),f=w=>{var I,E;if(!s.value)return 0;const h=d.value==="daily"?((I=s.value.dailyUsage)==null?void 0:I.cost)||0:((E=s.value.monthlyUsage)==null?void 0:E.cost)||0;if(h===0)return 0;const u=m(w),i=((u==null?void 0:u.cost)||0)/h*100;return Math.round(i)},T=w=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][w]||"bg-gray-400",O=w=>(typeof w!="number"&&(w=parseInt(w)||0),w===0?"0":w>=1e6?(w/1e6).toFixed(1)+"M":w>=1e3?(w/1e3).toFixed(1)+"K":w.toLocaleString());return(w,h)=>(l(),n("div",Va,[t("h3",za,[h[0]||(h[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),b(" 使用占比 ")],-1)),t("span",Ja,"("+r(e(d)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(p).length>0?(l(),n("div",Ya,[(l(!0),n(Z,null,tt(y.value,(u,i)=>{var I,E;return l(),n("div",{key:u.apiId,class:"relative"},[t("div",Ha,[t("span",Ga,r(u.name||`Key ${i+1}`),1),t("span",Qa,r(f(u))+"% ",1)]),t("div",Xa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T(i)]),style:lt({width:f(u)+"%"})},null,6)]),t("div",Za,[t("span",null,r(O(((I=m(u))==null?void 0:I.requests)||0))+"次",1),t("span",null,r(((E=m(u))==null?void 0:E.formattedCost)||"$0.00"),1)])])}),128)),_.value>0?(l(),n("div",tr,[t("div",er,[t("span",null,"其他 "+r(_.value)+" 个Keys",1),t("span",null,r(A.value)+"%",1)])])):K("",!0)])):e(x)?(l(),n("div",ar,h[2]||(h[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),b(" 暂无数据 ",-1)]))):(l(),n("div",sr,h[1]||(h[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},lr=st(rr,[["__scopeId","data-v-39572a8e"]]),ir={class:"card p-4 md:p-6"},or={class:"mb-4 md:mb-6"},nr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},dr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},ur={key:0,class:"py-6 text-center md:py-8"},cr={key:1,class:"space-y-3 md:space-y-4"},mr={class:"mb-2 flex items-start justify-between md:mb-3"},gr={class:"min-w-0 flex-1"},xr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},fr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},yr={class:"ml-3 flex-shrink-0 text-right"},pr={class:"text-base font-bold text-green-600 md:text-lg"},vr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},br={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},kr={class:"font-medium text-gray-900 dark:text-gray-100"},hr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},_r={class:"font-medium text-gray-900 dark:text-gray-100"},wr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},$r={class:"font-medium text-gray-900 dark:text-gray-100"},Sr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Cr={class:"font-medium text-gray-900 dark:text-gray-100"},Tr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Kr={class:"text-sm md:text-base"},Ar={__name:"ModelUsageStats",setup(N){const v=at(),{statsPeriod:s,modelStats:p,modelStatsLoading:d}=et(v),x=m=>(typeof m!="number"&&(m=parseInt(m)||0),m===0?"0":m>=1e6?(m/1e6).toFixed(1)+"M":m>=1e3?(m/1e3).toFixed(1)+"K":m.toLocaleString());return(m,y)=>(l(),n("div",ir,[t("div",or,[t("h3",nr,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),b(" 模型使用统计 ")],-1)),t("span",dr,"("+r(e(s)==="daily"?"今日":"本月")+")",1)])]),e(d)?(l(),n("div",ur,y[1]||(y[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(p).length>0?(l(),n("div",cr,[(l(!0),n(Z,null,tt(e(p),(_,A)=>{var f;return l(),n("div",{key:A,class:"model-usage-item"},[t("div",mr,[t("div",gr,[t("h4",xr,r(_.model),1),t("p",fr,r(_.requests)+" 次请求 ",1)]),t("div",yr,[t("div",pr,r(((f=_.formatted)==null?void 0:f.total)||"$0.000000"),1),y[2]||(y[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",vr,[t("div",br,[y[3]||(y[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",kr,r(x(_.inputTokens)),1)]),t("div",hr,[y[4]||(y[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",_r,r(x(_.outputTokens)),1)]),t("div",wr,[y[5]||(y[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",$r,r(x(_.cacheCreateTokens)),1)]),t("div",Sr,[y[6]||(y[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Cr,r(x(_.cacheReadTokens)),1)])])])}),128))])):(l(),n("div",Tr,[y[7]||(y[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Kr," 暂无"+r(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Lr=st(Ar,[["__scopeId","data-v-b3b8dc5f"]]),Pr={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ir={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Mr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Dr={class:"flex items-center gap-3"},qr={class:"text-xs text-gray-500 dark:text-gray-400"},jr=["disabled"],Ur={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Rr={class:"mb-4"},Nr={class:"relative"},Or=["value"],Er={class:"mb-4 space-y-2"},Fr={class:"flex items-center justify-between text-sm"},Wr={class:"font-medium text-gray-700 dark:text-gray-300"},Br={class:"flex items-center gap-3"},Vr={class:"text-xs text-gray-500 dark:text-gray-400"},zr={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Jr={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Yr={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Hr={class:"max-h-40 overflow-y-auto p-3"},Gr={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Qr={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Xr={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Zr={key:2,class:"text-sm text-red-600 dark:text-red-400"},tl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},el={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},sl=["disabled"],al=["disabled"],rl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(N,{emit:v}){const s=N,p=v,d=M("idle"),x=M(""),m=M(""),y=M(0),_=M(null),A=M(null),f=M("claude-sonnet-4-5-20250929"),T=j(()=>s.apiKeyName||"当前 API Key"),O=j(()=>{const D=s.apiKeyValue;return D?D.length<=10?"****":D.substring(0,6)+"****"+D.substring(D.length-4):""}),w=j(()=>{switch(d.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),h=j(()=>{switch(d.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return m.value||"无法通过 API Key 访问服务";default:return""}}),u=j(()=>{switch(d.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),i=j(()=>{switch(d.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),I=j(()=>{switch(d.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),E=j(()=>{switch(d.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),H=j(()=>{switch(d.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function V(){if(!s.apiKeyValue)return;d.value="testing",x.value="",m.value="",y.value=0,_.value=Date.now(),A.value&&A.value.abort(),A.value=new AbortController;const D=`${wt}/apiStats/api-key/test`;try{const $=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:f.value}),signal:A.value.signal});if(!$.ok){const z=await $.json().catch(()=>({}));throw new Error(z.message||z.error||`HTTP ${$.status}`)}const U=$.body.getReader(),S=new TextDecoder;let G=!1;for(;!G;){const{done:z,value:Y}=await U.read();if(z){G=!0;continue}const o=S.decode(Y).split(`
-`);for(const a of o)if(a.startsWith("data: "))try{const g=JSON.parse(a.substring(6));W(g)}catch{}}}catch($){if($.name==="AbortError")return;d.value="error",m.value=$.message||"连接失败",y.value=Date.now()-_.value}}function W(D){switch(D.type){case"test_start":break;case"content":x.value+=D.text;break;case"message_stop":break;case"test_complete":y.value=Date.now()-_.value,D.success?d.value="success":(d.value="error",m.value=D.error||"测试失败");break;case"error":d.value="error",m.value=D.error||"未知错误",y.value=Date.now()-_.value;break}}function B(){d.value!=="testing"&&(A.value&&(A.value.abort(),A.value=null),d.value="idle",x.value="",m.value="",y.value=0,p("close"))}return ft(()=>s.show,D=>{D&&(d.value="idle",x.value="",m.value="",y.value=0)}),yt(()=>{A.value&&A.value.abort()}),(D,$)=>(l(),ot(bt,{to:"body"},[N.show?(l(),n("div",Pr,[t("div",{class:"absolute inset-0",onClick:B}),t("div",Ir,[t("div",Mr,[t("div",Dr,[t("div",{class:P(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",d.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":d.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:P(["fas",d.value==="idle"?"fa-vial":d.value==="testing"?"fa-spinner fa-spin":d.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[$[0]||($[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",qr,r(T.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:d.value==="testing",onClick:B},$[1]||($[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,jr)]),t("div",Ur,[t("div",Rr,[$[3]||($[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Nr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:O.value},null,8,Or),$[2]||($[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),$[4]||($[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",Er,[$[6]||($[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),b(" /api/v1/messages ")])],-1)),t("div",Fr,[$[5]||($[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",Wr,r(f.value),1)]),$[7]||($[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:P(["mb-4 rounded-xl border p-4 transition-all duration-300",u.value])},[t("div",Br,[t("div",{class:P(["flex h-8 w-8 items-center justify-center rounded-lg",i.value])},[t("i",{class:P(["fas text-sm",I.value,E.value])},null,2)],2),t("div",null,[t("p",{class:P(["font-medium",H.value])},r(w.value),3),t("p",Vr,r(h.value),1)])])],2),d.value!=="idle"?(l(),n("div",zr,[t("div",Jr,[$[8]||($[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(l(),n("span",Yr,r(x.value.length)+" 字符 ",1)):K("",!0)]),t("div",Hr,[x.value?(l(),n("p",Gr,[b(r(x.value)+" ",1),d.value==="testing"?(l(),n("span",Qr)):K("",!0)])):d.value==="testing"?(l(),n("p",Xr,$[9]||($[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),b(" 等待响应中... ",-1)]))):d.value==="error"&&m.value?(l(),n("p",Zr,r(m.value),1)):K("",!0)])])):K("",!0),y.value>0?(l(),n("div",tl,[$[10]||($[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+r((y.value/1e3).toFixed(2))+" 秒",1)])):K("",!0)]),t("div",el,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:d.value==="testing",onClick:B}," 关闭 ",8,sl),t("button",{class:P(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",d.value==="testing"||!N.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:d.value==="testing"||!N.apiKeyValue,onClick:V},[t("i",{class:P(["fas",d.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),b(" "+r(d.value==="testing"?"测试中...":d.value==="idle"?"开始测试":"重新测试"),1)],10,al)])])])):K("",!0)]))}},ll={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},il={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},ol={class:"flex items-center gap-2 md:gap-4"},nl={class:"flex items-center"},dl={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ul={class:"mb-6 md:mb-8"},cl={class:"flex justify-center"},ml={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},gl={key:0,class:"tab-content"},xl={key:0,class:"mb-6 md:mb-8"},fl={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},yl={key:1,class:"fade-in"},pl={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},vl={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},bl={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},kl={class:"flex w-full items-center gap-2 md:w-auto"},hl=["disabled"],_l=["disabled"],wl=["disabled"],$l={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},Sl={key:1,class:"tab-content"},Cl={class:"glass-strong rounded-3xl shadow-xl"},Tl={__name:"ApiStatsView",setup(N){const v=ht(),s=at(),p=$t(),d=M("stats"),x=j(()=>p.isDarkMode),{apiKey:m,apiId:y,loading:_,modelStatsLoading:A,oemLoading:f,error:T,statsPeriod:O,statsData:w,oemSettings:h,multiKeyMode:u}=et(s),{queryStats:i,switchPeriod:I,loadStatsWithApiId:E,loadOemSettings:H,reset:V}=s,W=M(!1),B=()=>{W.value=!0},D=()=>{W.value=!1},$=U=>{(U.ctrlKey||U.metaKey)&&U.key==="Enter"&&(!_.value&&m.value.trim()&&i(),U.preventDefault()),U.key==="Escape"&&V()};return kt(()=>{p.initTheme(),H();const U=v.query.apiId,S=v.query.apiKey;U&&U.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(y.value=U,E()):S&&S.length>10&&(m.value=S),document.addEventListener("keydown",$)}),yt(()=>{document.removeEventListener("keydown",$)}),ft(m,U=>{U||s.clearData()}),(U,S)=>{var z;const G=_t("router-link");return l(),n("div",{class:P(["min-h-screen p-4 md:p-6",x.value?"gradient-bg-dark":"gradient-bg"])},[t("div",ll,[t("div",il,[X(St,{loading:e(f),"logo-src":e(h).siteIconData||e(h).siteIcon,subtitle:d.value==="stats"?"API Key 使用统计":"使用教程",title:e(h).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",ol,[t("div",nl,[X(Ct,{mode:"dropdown"})]),e(h).ldapEnabled||e(h).showAdminButton!==!1?(l(),n("div",dl)):K("",!0),e(h).ldapEnabled?(l(),ot(G,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:xt(()=>S[4]||(S[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):K("",!0),e(h).showAdminButton!==!1?(l(),ot(G,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:xt(()=>S[5]||(S[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):K("",!0)])])]),t("div",ul,[t("div",cl,[t("div",ml,[t("button",{class:P(["tab-pill-button",d.value==="stats"?"active":""]),onClick:S[0]||(S[0]=Y=>d.value="stats")},S[6]||(S[6]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:P(["tab-pill-button",d.value==="tutorial"?"active":""]),onClick:S[1]||(S[1]=Y=>d.value="tutorial")},S[7]||(S[7]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),d.value==="stats"?(l(),n("div",gl,[X(Gt),e(T)?(l(),n("div",xl,[t("div",fl,[S[8]||(S[8]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),b(" "+r(e(T)),1)])])):K("",!0),e(w)?(l(),n("div",yl,[t("div",pl,[t("div",vl,[t("div",bl,[S[12]||(S[12]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",kl,[t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="daily"}]]),disabled:e(_)||e(A),onClick:S[2]||(S[2]=Y=>e(I)("daily"))},S[9]||(S[9]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),b(" 今日 ",-1)]),10,hl),t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="monthly"}]]),disabled:e(_)||e(A),onClick:S[3]||(S[3]=Y=>e(I)("monthly"))},S[10]||(S[10]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),b(" 本月 ",-1)]),10,_l),e(u)?K("",!0):(l(),n("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(_),onClick:B},S[11]||(S[11]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),b(" 测试 ",-1)]),8,wl))])])]),X(fs),t("div",$l,[X(Ms,{class:"h-full"}),e(u)?(l(),ot(lr,{key:0,class:"h-full"})):(l(),ot(Ba,{key:1,class:"h-full"}))]),X(Lr)])])):K("",!0)])):K("",!0),d.value==="tutorial"?(l(),n("div",Sl,[t("div",Cl,[X(At)])])):K("",!0),X(rl,{"api-key-name":((z=e(w))==null?void 0:z.name)||"","api-key-value":e(m),show:W.value,onClose:D},null,8,["api-key-name","api-key-value","show"])],2)}}},jl=st(Tl,[["__scopeId","data-v-c1f23841"]]);export{jl as default};
diff --git a/assets/ConfirmModal-BAFPIqcc.js b/assets/ConfirmModal-BAFPIqcc.js
deleted file mode 100644
index 9dbd06c1..00000000
--- a/assets/ConfirmModal-BAFPIqcc.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as n}from"./index-B3t2NHq9.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-R8HMg95E.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C};
diff --git a/assets/ConfirmModal-BvCtxUSJ.css b/assets/ConfirmModal-BzWkJtgn.css
similarity index 66%
rename from assets/ConfirmModal-BvCtxUSJ.css
rename to assets/ConfirmModal-BzWkJtgn.css
index fed61041..f15da4b8 100644
--- a/assets/ConfirmModal-BvCtxUSJ.css
+++ b/assets/ConfirmModal-BzWkJtgn.css
@@ -1 +1 @@
-.modal[data-v-c629d8ff]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
+.modal[data-v-9b6104f1]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
diff --git a/assets/ConfirmModal-C2rCOkXI.js b/assets/ConfirmModal-C2rCOkXI.js
new file mode 100644
index 00000000..c7586797
--- /dev/null
+++ b/assets/ConfirmModal-C2rCOkXI.js
@@ -0,0 +1 @@
+import{_ as s}from"./index-BahP9Xx9.js";import{I as d,y as i,x as g,L as m,z as t,C as o,P as r,a5 as c}from"./vue-vendor-DV7DYXbz.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},y={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},x={class:"mb-6 flex items-start gap-4"},u={class:"flex-1"},h={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},b={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},p={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"},type:{type:String,default:"primary",validator:e=>["primary","warning","danger"].includes(e)}},emits:["confirm","cancel"],setup(e){return(n,a)=>(i(),d(c,{to:"body"},[e.show?(i(),g("div",f,[t("div",y,[t("div",x,[t("div",{class:o(["flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full",e.type==="danger"?"bg-gradient-to-br from-red-400 to-red-500":e.type==="warning"?"bg-gradient-to-br from-yellow-400 to-yellow-500":"bg-primary"])},[t("i",{class:o(["text-xl text-white",e.type==="danger"?"fas fa-trash-alt":e.type==="warning"?"fas fa-exclamation":"fas fa-question"])},null,2)],2),t("div",u,[t("h3",h,r(e.title),1),t("p",b,r(e.message),1)])]),t("div",p,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:a[0]||(a[0]=l=>n.$emit("cancel"))},r(e.cancelText),1),t("button",{class:o(["flex-1 rounded-xl px-4 py-2.5 font-medium text-white shadow-sm transition-all",e.type==="danger"?"bg-gradient-to-r from-red-500 to-red-600 hover:from-red-600 hover:to-red-700":e.type==="warning"?"bg-gradient-to-r from-yellow-500 to-orange-500 hover:from-yellow-600 hover:to-orange-600":"bg-primary hover:opacity-90"]),onClick:a[1]||(a[1]=l=>n.$emit("confirm"))},r(e.confirmText),3)])])])):m("",!0)]))}},C=s(w,[["__scopeId","data-v-9b6104f1"]]);export{C};
diff --git a/assets/DashboardView-BzrWMTub.js b/assets/DashboardView-BzrWMTub.js
new file mode 100644
index 00000000..202ef08f
--- /dev/null
+++ b/assets/DashboardView-BzrWMTub.js
@@ -0,0 +1 @@
+import{E as Jt}from"./element-plus-BSjV1f9S.js";import{aP as Xt,r as T,c as Gt,aY as Vt,o as pt,q as te,D as Q,V as ee,x,z as t,P as i,u as a,L as $,O as I,C as J,Q as Pt,ac as Bt,R as ae,K as se,al as oe,y as f,B as ne}from"./vue-vendor-DV7DYXbz.js";import{C as Ut}from"./chart-yFHxLHpB.js";import{n as re,o as Yt,p as Mt,s as Ot,_ as le,a as ie,f as U,q as de}from"./index-BahP9Xx9.js";import"./vendor-Dr8jvgFu.js";const ce=Xt("dashboard",()=>{const At=T(!1),yt=T({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),G=T({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),nt=T([]),s=T([]),Ct=T({data:[],topApiKeys:[],totalApiKeys:0}),X=T({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),rt={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},O="today",F="day",lt=l=>l==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Rt=(l,d)=>{try{return localStorage.getItem(l)||d}catch{return d}},tt=(l,d)=>{try{localStorage.setItem(l,d)}catch{}},Y=(l,d)=>lt(d).some(y=>y.value===l)?l:d==="hour"?"last24h":O,H=Rt(rt.granularity,F),wt=["day","hour"].includes(H)?H:F,Kt=Y(Rt(rt.preset,O),wt),o=T({type:"preset",preset:Kt,customStart:"",customEnd:"",customRange:null,presetOptions:lt(wt)}),M=T(wt),Dt=T("requests"),gt=T("claude"),Ft=Gt(()=>{const l=yt.value.uptime,d=Math.floor(l/86400),n=Math.floor(l%86400/3600),r=Math.floor(l%3600/60);return d>0?`${d}天 ${n}小时`:n>0?`${n}小时 ${r}分钟`:`${r}分钟`});function q(l,d=!0){const n=l.getFullYear(),r=l.getMonth(),y=l.getDate();return d?new Date(Date.UTC(n,r,y-1,16,0,0,0)):new Date(Date.UTC(n,r,y,15,59,59,999))}function it(l){const d=new Date;switch(l){case"today":return{start:q(d,!0),end:q(d,!1)};case"last24h":return{start:new Date(d.getTime()-24*60*60*1e3),end:new Date(d)};case"yesterday":{const n=new Date;return n.setDate(n.getDate()-1),{start:q(n,!0),end:q(n,!1)}}case"dayBefore":{const n=new Date;return n.setDate(n.getDate()-2),{start:q(n,!0),end:q(n,!1)}}default:return{start:new Date(d.getTime()-24*60*60*1e3),end:new Date(d)}}}const et=(l=o.value.preset,d=M.value)=>{tt(rt.preset,l),tt(rt.granularity,d)},W=()=>o.value.type==="preset"&&o.value.preset==="today"&&M.value==="day"?"hour":M.value;async function Tt(l=null){At.value=!0;try{let d={today:"today",all:"all"};l&&(d={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[l]||d);const[n,r,y]=await Promise.all([re(),Yt(d.today),Yt(d.all)]);if(n.success){const u=n.data.overview||{},b=n.data.recentActivity||{},_=n.data.systemAverages||{},w=n.data.realtimeMetrics||{},P=n.data.systemHealth||{};yt.value={totalApiKeys:u.totalApiKeys||0,activeApiKeys:u.activeApiKeys||0,totalAccounts:u.totalAccounts||u.totalClaudeAccounts||0,normalAccounts:u.normalAccounts||0,abnormalAccounts:u.abnormalAccounts||0,pausedAccounts:u.pausedAccounts||0,activeAccounts:u.activeAccounts||u.activeClaudeAccounts||0,rateLimitedAccounts:u.rateLimitedAccounts||u.rateLimitedClaudeAccounts||0,accountsByPlatform:u.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:b.requestsToday||0,totalRequests:u.totalRequestsUsed||0,todayTokens:b.tokensToday||0,todayInputTokens:b.inputTokensToday||0,todayOutputTokens:b.outputTokensToday||0,totalTokens:u.totalTokensUsed||0,totalInputTokens:u.totalInputTokensUsed||0,totalOutputTokens:u.totalOutputTokensUsed||0,totalCacheCreateTokens:u.totalCacheCreateTokensUsed||0,totalCacheReadTokens:u.totalCacheReadTokensUsed||0,todayCacheCreateTokens:b.cacheCreateTokensToday||0,todayCacheReadTokens:b.cacheReadTokensToday||0,systemRPM:_.rpm||0,systemTPM:_.tpm||0,realtimeRPM:w.rpm||0,realtimeTPM:w.tpm||0,metricsWindow:w.windowMinutes||5,isHistoricalMetrics:w.isHistorical||!1,systemStatus:P.redisConnected?"正常":"异常",uptime:P.uptime||0,systemTimezone:n.data.systemTimezone||8}}r.success&&y.success&&(G.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:y.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(d){console.error("加载仪表板数据失败:",d)}finally{At.value=!1}}async function xt(l=7,d=W()){try{let n="/admin/usage-trend?";if(d==="hour")if(n+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)n+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,n+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:y,end:u}=it(o.value.preset);n+=`&startDate=${encodeURIComponent(y.toISOString())}`,n+=`&endDate=${encodeURIComponent(u.toISOString())}`}else{const y=new Date;n+=`&startDate=${encodeURIComponent(new Date(y.getTime()-l*24*60*60*1e3).toISOString())}`,n+=`&endDate=${encodeURIComponent(y.toISOString())}`}else n+=`granularity=day&days=${l}`;const r=await Mt(n);r.success&&(nt.value=r.data)}catch(n){console.error("加载使用趋势失败:",n)}}async function at(l="daily",d=null){const n=d||W();try{let r=`/admin/model-stats?period=${l}`;if(o.value.type==="custom"||n==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(n==="hour"&&o.value.type==="preset"){const{start:u,end:b}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(u.toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}}else if(o.value.type==="preset"&&n==="day"){const u=new Date,b=o.value.presetOptions.find(_=>_.value===o.value.preset);if(b){let _,w;if(o.value.preset==="today")_=q(u,!0),w=q(u,!1);else{const P=new Date;P.setDate(P.getDate()-(b.days-1)),_=q(P,!0),w=q(u,!1)}r+=`&startDate=${encodeURIComponent(_.toISOString())}`,r+=`&endDate=${encodeURIComponent(w.toISOString())}`}}const y=await Mt(r);y.success&&(s.value=y.data)}catch(r){console.error("加载模型统计失败:",r)}}async function st(l="requests",d=null){const n=d||W();try{let r="/admin/api-keys-usage-trend?",y=7;if(n==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:b,end:_}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(b.toISOString())}`,r+=`&endDate=${encodeURIComponent(_.toISOString())}`}else{const b=new Date;r+=`&startDate=${encodeURIComponent(new Date(b.getTime()-24*60*60*1e3).toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}else y=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:ft(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${y}`;r+=`&metric=${l}`;const u=await Mt(r);u.success&&(Ct.value={data:u.data||[],topApiKeys:u.topApiKeys||[],totalApiKeys:u.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function Z(l=gt.value,d=null){const n=d||W();try{let r="/admin/account-usage-trend?",y=7;if(n==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:b,end:_}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(b.toISOString())}`,r+=`&endDate=${encodeURIComponent(_.toISOString())}`}else{const b=new Date;r+=`&startDate=${encodeURIComponent(new Date(b.getTime()-24*60*60*1e3).toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}else y=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:ft(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${y}`;r+=`&group=${l}`;const u=await Mt(r);u.success&&(X.value={data:u.data||[],topAccounts:u.topAccounts||[],totalAccounts:u.totalAccounts||0,group:u.group||l,groupLabel:u.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function j(l,d={}){const{silent:n=!1,skipSave:r=!1}=d,y=Y(l,M.value);o.value.type="preset",o.value.preset=y;const u=o.value.presetOptions.find(h=>h.value===y),b=new Date;let _,w;if(M.value==="hour"){const h=it(y);_=h.start,w=h.end}else _=new Date(b),w=new Date(b),y==="today"?(_.setHours(0,0,0,0),w.setHours(23,59,59,999)):u!=null&&u.days&&(_.setDate(b.getDate()-(u.days-1)),_.setHours(0,0,0,0),w.setHours(23,59,59,999));const P=h=>{const V=new Date(h),vt=V.getFullYear(),bt=String(V.getMonth()+1).padStart(2,"0"),ht=String(V.getDate()).padStart(2,"0"),ct=String(V.getHours()).padStart(2,"0"),It=String(V.getMinutes()).padStart(2,"0"),ut=String(V.getSeconds()).padStart(2,"0");return`${vt}-${bt}-${ht} ${ct}:${It}:${ut}`};o.value.customStart=_?_.toISOString().split("T")[0]:"",o.value.customEnd=w?w.toISOString().split("T")[0]:"",o.value.customRange=_&&w?[P(_),P(w)]:null,r||et(o.value.preset,M.value),n||N()}function Lt(l){if(l&&l.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=l,o.value.customStart=l[0].split(" ")[0],o.value.customEnd=l[1].split(" ")[0];const d=y=>{const[u,b]=y.split(" "),[_,w,P]=u.split("-").map(Number),[h,V,vt]=b.split(":").map(Number);return new Date(_,w-1,P,h,V,vt)},n=d(l[0]),r=d(l[1]);if(M.value==="hour"){if((r-n)/36e5>24){Ot("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-n)/864e5)+1>31){Ot("日期范围不能超过 31 天","warning");return}N()}else l===null&&j(M.value==="hour"?"last24h":O)}function St(l,d={}){const{silent:n=!1,skipSave:r=!1,presetOverride:y}=d;if(M.value=l,l==="hour"){if(o.value.presetOptions=lt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const b=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-b)/(1e3*60*60)>24){Ot("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),j("last24h",{silent:n,skipSave:r});return}}}else o.value.presetOptions=lt("day");if(o.value.type==="custom"){r||et(o.value.preset||O,M.value),n||N();return}const u=y||Y(o.value.preset,M.value);j(u,{silent:!0,skipSave:!0}),r||et(o.value.preset,M.value),n||N()}async function N(){let l,d="monthly";const n=W();if(o.value.type==="preset"){const r=o.value.presetOptions.find(y=>y.value===o.value.preset);n==="hour"?(l=1,d="daily"):(l=r?r.days:7,o.value.preset==="today"?d="daily":d="monthly")}else{if(n==="hour"){const r=new Date(o.value.customRange[0]),y=new Date(o.value.customRange[1]),u=Math.ceil((y-r)/(1e3*60*60));l=Math.ceil(u/24)||1}else l=ft(o.value.customStart,o.value.customEnd);d="daily"}await Promise.all([xt(l,n),at(d,n),st(Dt.value,n),Z(gt.value,n)])}function dt(l){return gt.value=l,Z(l,W())}function ft(l,d){if(!l||!d)return 7;const n=new Date(l),r=new Date(d),y=Math.abs(r-n);return Math.ceil(y/(1e3*60*60*24))||7}function Et(l){return l>new Date}return j(o.value.preset,{silent:!0,skipSave:!0}),et(o.value.preset,M.value),{loading:At,dashboardData:yt,costsData:G,trendData:nt,dashboardModelStats:s,apiKeysTrendData:Ct,accountUsageTrendData:X,dateFilter:o,trendGranularity:M,apiKeysTrendMetric:Dt,accountUsageGroup:gt,formattedUptime:Ft,loadDashboardData:Tt,loadUsageTrend:xt,loadModelStats:at,loadApiKeysTrend:st,loadAccountUsageTrend:Z,setDateFilterPreset:j,onCustomDateRangeChange:Lt,setTrendGranularity:St,refreshChartsData:N,setAccountUsageGroup:dt,disabledDate:Et}}),ue={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},me={class:"stat-card"},pe={class:"flex items-center justify-between"},ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ge={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},xe={class:"stat-card"},fe={class:"flex items-center justify-between"},ve={class:"flex-1"},be={class:"flex flex-wrap items-baseline gap-x-2"},he={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ke={key:0,class:"flex items-center gap-2"},_e=["title"],Ce={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Te=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Ae={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Re=["title"],Ie={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ue=["title"],Me={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Oe={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ke={key:0,class:"text-red-600"},Fe={key:1,class:"text-gray-600 dark:text-gray-400"},Le={key:2,class:"text-yellow-600"},Ee={class:"stat-card"},qe={class:"flex items-center justify-between"},ze={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ge={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},He={class:"stat-card"},je={class:"flex items-center justify-between"},Ne={class:"text-2xl font-bold text-green-600 sm:text-3xl"},Ve={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ye={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},We={class:"stat-card"},Ze={class:"flex items-center justify-between"},Qe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Je={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Xe={class:"mt-3 flex items-center justify-between gap-3"},ta={class:"text-xs text-gray-500 dark:text-gray-400"},ea=["disabled"],aa={class:"card p-4 sm:p-6"},sa={class:"mb-3 flex items-center justify-between"},oa={class:"text-xs text-gray-500 dark:text-gray-400"},na={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},ra={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},la={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},ia={class:"flex items-center justify-between gap-2"},da={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},ca={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ua={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},ma={key:0},pa={key:1},ya={key:0,class:"mt-2"},ga={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},xa={class:"text-red-600 dark:text-red-400"},fa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},va={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},ba={class:"stat-card"},ha={class:"flex items-center justify-between"},ka={class:"mr-8 flex-1"},_a={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ca={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},wa={class:"text-sm font-medium text-green-600"},Da={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={class:"flex flex-wrap items-center justify-between gap-x-4"},Sa={class:"font-medium"},$a={class:"font-medium"},Aa={key:0,class:"text-purple-600"},Ra={class:"font-medium"},Ia={key:1,class:"text-purple-600"},Pa={class:"font-medium"},Ba={class:"stat-card"},Ua={class:"flex items-center justify-between"},Ma={class:"mr-8 flex-1"},Oa={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ka={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Fa={class:"text-sm font-medium text-green-600"},La={class:"text-xs text-gray-500 dark:text-gray-400"},Ea={class:"flex flex-wrap items-center justify-between gap-x-4"},qa={class:"font-medium"},za={class:"font-medium"},Ga={key:0,class:"text-purple-600"},Ha={class:"font-medium"},ja={key:1,class:"text-purple-600"},Na={class:"font-medium"},Va={class:"stat-card"},Ya={class:"flex items-center justify-between"},Wa={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Za={class:"text-xs text-gray-400"},Qa={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Ja={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Xa={key:0,class:"text-yellow-600"},ts={class:"stat-card"},es={class:"flex items-center justify-between"},as={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ss={class:"text-xs text-gray-400"},os={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},ns={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},rs={key:0,class:"text-yellow-600"},ls={class:"mb-8"},is={class:"mb-4 flex flex-col gap-4 sm:mb-6"},ds={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},cs={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},us=["onClick"],ms={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},ps={class:"flex items-center gap-2"},ys={key:0,class:"text-xs text-orange-600"},gs={class:"flex items-center gap-2"},xs={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},fs={class:"relative inline-flex cursor-pointer items-center"},vs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},bs=["disabled"],hs={class:"hidden sm:inline"},ks={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},_s={class:"card p-4 sm:p-6"},Cs={class:"relative",style:{height:"250px"}},ws={class:"card p-4 sm:p-6"},Ds={key:0,class:"py-8 text-center"},Ts={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ss={class:"min-w-full"},$s={class:"divide-y divide-gray-200 dark:divide-gray-600"},As={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},Rs=["title"],Is={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},Ps={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Bs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Us={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Ms={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Os={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Fs={class:"sm:h-[300px]",style:{height:"250px"}},Ls={class:"mb-4 sm:mb-6 md:mb-8"},Es={class:"card p-4 sm:p-6"},qs={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Gs={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Hs={key:0},js={key:1},Ns={class:"sm:h-[350px]",style:{height:"300px"}},Vs={class:"mb-4 sm:mb-6 md:mb-8"},Ys={class:"card p-4 sm:p-6"},Ws={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Zs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Qs={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Js={class:"flex flex-wrap items-center gap-2"},Xs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},to=["onClick"],eo={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},ao={key:0},so={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},oo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},no={__name:"DashboardView",setup(At){const yt=ce(),G=ie(),{isDarkMode:nt}=Vt(G),{dashboardData:s,costsData:Ct,dashboardModelStats:X,trendData:rt,apiKeysTrendData:O,accountUsageTrendData:F,accountUsageGroup:lt,formattedUptime:Rt,dateFilter:tt,trendGranularity:Y,apiKeysTrendMetric:H}=Vt(yt),{loadDashboardData:wt,loadApiKeysTrend:Kt,setDateFilterPreset:o,onCustomDateRangeChange:M,setTrendGranularity:Dt,refreshChartsData:gt,setAccountUsageGroup:Ft,disabledDate:q}=yt,it=[new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)],et=T(null),W=T(null),Tt=T(null),xt=T(null);let at=null,st=null,Z=null,j=null;const Lt=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],St=T(!1),N=T({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),dt=T(!1),ft=T(null),Et=c=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[c]||c,l=Gt(()=>{var D;const c=[],e=((D=N.value)==null?void 0:D.platforms)||{};return Object.entries(e).forEach(([m,A])=>{(Array.isArray(A==null?void 0:A.accounts)?A.accounts:[]).forEach(E=>{var k,v;const L=E==null?void 0:E.data;if(!L)return;const C=(k=L.balance)==null?void 0:k.amount,R=(v=L.quota)==null?void 0:v.percentage,g=typeof C=="number"&&C<10,p=typeof R=="number"&&R>90;(g||p)&&c.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||m})})}),c}),d=c=>{const e=Number(c);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},n=c=>{if(!c)return"未知";const e=new Date(c);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},r=async()=>{dt.value=!0;const c=await de();c!=null&&c.success?(N.value=c.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},ft.value=new Date().toISOString()):c!=null&&c.message&&(console.debug("加载余额汇总失败:",c.message),Ot("加载余额汇总失败","error")),dt.value=!1},y=T(!1),u=T(30),b=T(null),_=T(0),w=T(null),P=T(!1),h=Gt(()=>({text:nt.value?"#e5e7eb":"#374151",grid:nt.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:nt.value?"#e5e7eb":"#374151"}));function V(c){return Number.isFinite(c)?c>=1?`$${c.toFixed(2)}`:c>=.01?`$${c.toFixed(3)}`:`$${c.toFixed(6)}`:"$0.000000"}function vt(c,e){if(!e||e.length===0)return 0;const D=e.reduce((m,A)=>m+A.allTokens,0);return D===0?0:(c/D*100).toFixed(1)}function bt(){if(!et.value)return;at&&at.destroy();const c=X.value||[],e={labels:c.map(D=>D.model),datasets:[{data:c.map(D=>D.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};at=new Ut(et.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{callbacks:{label:function(D){const m=D.label||"",A=U(D.parsed),ot=vt(D.parsed,c);return`${m}: ${A} (${ot}%)`}}}}}})}function ht(){var g;if(!W.value)return;st&&st.destroy();const c=rt.value||[],e=c.map(p=>p.inputTokens||0),D=c.map(p=>p.outputTokens||0),m=c.map(p=>p.cacheCreateTokens||0),A=c.map(p=>p.cacheReadTokens||0),ot=c.map(p=>p.requests||0),E=c.map(p=>p.cost||0),L=(g=c[0])!=null&&g.date?"date":"hour",R={labels:c.map(p=>{if(p.label)return p.label;if(L==="hour"){const v=new Date(p.hour),S=String(v.getMonth()+1).padStart(2,"0"),z=String(v.getDate()).padStart(2,"0"),K=String(v.getHours()).padStart(2,"0");return`${S}/${z} ${K}:00`}const k=p.date;if(k&&k.includes("-")){const v=k.split("-");if(v.length>=3)return`${v[1]}/${v[2]}`}return p.date}),datasets:[{label:"输入Token",data:e,borderColor:G.currentColorScheme.primary,backgroundColor:`${G.currentColorScheme.primary}1a`,tension:.3},{label:"输出Token",data:D,borderColor:G.currentColorScheme.accent,backgroundColor:`${G.currentColorScheme.accent}1a`,tension:.3},{label:"缓存创建Token",data:m,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:A,borderColor:G.currentColorScheme.secondary,backgroundColor:`${G.currentColorScheme.secondary}1a`,tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:ot,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};st=new Ut(W.value,{type:"line",data:R,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:h.value.text},legend:{position:"top",labels:{color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(p,k){const v=p.dataset.label||"",S=k.dataset.label||"";return v==="费用 (USD)"||S==="费用 (USD)"?v==="费用 (USD)"?-1:1:v==="请求数"||S==="请求数"?v==="请求数"?1:-1:k.parsed.y-p.parsed.y},callbacks:{label:function(p){const k=p.dataset.label||"";let v=p.parsed.y;return k==="费用 (USD)"?v<.01?k+": $"+v.toFixed(6):k+": $"+v.toFixed(4):k==="请求数"?k+": "+v.toLocaleString()+" 次":v>=1e6?k+": "+(v/1e6).toFixed(2)+"M tokens":v>=1e3?k+": "+(v/1e3).toFixed(2)+"K tokens":k+": "+v.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:h.value.text},ticks:{callback:function(p){return U(p)},color:h.value.text},grid:{color:h.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:h.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(p){return p.toLocaleString()},color:h.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function ct(){var E,L;if(!Tt.value)return;Z&&Z.destroy();const c=O.value.data||[],e=H.value,D=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],m=((E=O.value.topApiKeys)==null?void 0:E.map((C,R)=>{var k,v;const g=O.value.data.map(S=>!S.apiKeys||!S.apiKeys[C]?0:e==="tokens"?S.apiKeys[C].tokens:S.apiKeys[C].requests||0);return{label:((v=(k=O.value.data.find(S=>S.apiKeys&&S.apiKeys[C]))==null?void 0:k.apiKeys[C])==null?void 0:v.name)||`API Key ${C}`,data:g,borderColor:D[R%D.length],backgroundColor:D[R%D.length]+"20",tension:.4,fill:!1}}))||[],A=(L=c[0])!=null&&L.date?"date":"hour",ot={labels:c.map(C=>{if(C.label)return C.label;if(A==="hour"){const g=new Date(C.hour),p=String(g.getMonth()+1).padStart(2,"0"),k=String(g.getDate()).padStart(2,"0"),v=String(g.getHours()).padStart(2,"0");return`${p}/${k} ${v}:00`}const R=C.date;if(R&&R.includes("-")){const g=R.split("-");if(g.length>=3)return`${g[1]}/${g[2]}`}return C.date}),datasets:m};Z=new Ut(Tt.value,{type:"line",data:ot,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(C,R){return R.parsed.y-C.parsed.y},callbacks:{label:function(C){var K;const R=C.dataset.label||"",g=C.parsed.y,p=C.dataIndex,k=O.value.data[p],S=C.chart.data.datasets.map((B,kt)=>({value:B.data[p]||0,index:kt})).sort((B,kt)=>kt.value-B.value).findIndex(B=>B.index===C.datasetIndex)+1;let z="";if(S===1?z="🥇 ":S===2?z="🥈 ":S===3&&(z="🥉 "),H.value==="tokens"){let B="";g>=1e6?B=(g/1e6).toFixed(2)+"M":g>=1e3?B=(g/1e3).toFixed(2)+"K":B=g.toLocaleString();const kt=O.value.topApiKeys[C.datasetIndex],mt=(K=k==null?void 0:k.apiKeys)==null?void 0:K[kt],_t=(mt==null?void 0:mt.formattedCost)||"$0.00";return`${z}${R}: ${B} tokens (${_t})`}else return`${z}${R}: ${g.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:H.value==="tokens"?"Token 数量":"请求次数",color:h.value.text},ticks:{callback:function(C){return U(C)},color:h.value.text},grid:{color:h.value.grid}}}}})}async function It(){await Kt(H.value),await Q(),ct()}function ut(){var L,C,R;if(!xt.value)return;j&&j.destroy();const c=((L=F.value)==null?void 0:L.data)||[],e=((C=F.value)==null?void 0:C.topAccounts)||[],D=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],m=e.map((g,p)=>{var S,z;const k=c.map(K=>!K.accounts||!K.accounts[g]?0:K.accounts[g].cost||0);return{label:((z=(S=c.find(K=>K.accounts&&K.accounts[g]))==null?void 0:S.accounts[g])==null?void 0:z.name)||`账号 ${String(g).slice(0,6)}`,data:k,borderColor:D[p%D.length],backgroundColor:D[p%D.length]+"20",tension:.4,fill:!1}}),A=(R=c[0])!=null&&R.date?"date":"hour",ot={labels:c.map(g=>{if(g.label)return g.label;if(A==="hour"){const p=new Date(g.hour),k=String(p.getMonth()+1).padStart(2,"0"),v=String(p.getDate()).padStart(2,"0"),S=String(p.getHours()).padStart(2,"0");return`${k}/${v} ${S}:00`}if(g.date&&g.date.includes("-")){const p=g.date.split("-");if(p.length>=3)return`${p[1]}/${p[2]}`}return g.date}),datasets:m},E=e;j=new Ut(xt.value,{type:"line",data:ot,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(g,p)=>p.parsed.y-g.parsed.y,callbacks:{label:function(g){var Nt;const p=g.dataset.label||"",k=g.parsed.y||0,v=g.dataIndex,S=g.datasetIndex,z=E[S],K=F.value.data[v],B=(Nt=K==null?void 0:K.accounts)==null?void 0:Nt[z],mt=g.chart.data.datasets.map(($t,zt)=>({value:$t.data[v]||0,index:zt})).sort(($t,zt)=>zt.value-$t.value).findIndex($t=>$t.index===S)+1;let _t="";mt===1?_t="🥇 ":mt===2?_t="🥈 ":mt===3&&(_t="🥉 ");const Zt=(B==null?void 0:B.formattedCost)||V(k),Qt=(B==null?void 0:B.requests)||0;return`${_t}${p}: ${Zt} / ${Qt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y.value==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:h.value.text},ticks:{callback:g=>V(Number(g)),color:h.value.text},grid:{color:h.value.grid}}}}})}async function Wt(c){if(!(lt.value===c||St.value)){St.value=!0;try{await Ft(c),await Q(),ut()}finally{St.value=!1}}}pt(X,()=>{Q(()=>bt())}),pt(rt,()=>{Q(()=>ht())}),pt(O,()=>{Q(()=>ct())}),pt(F,()=>{Q(()=>ut())});async function qt(){if(!P.value){P.value=!0;try{await Promise.all([wt(),gt(),r()])}finally{P.value=!1}}}function Ht(){y.value&&(_.value=u.value,w.value&&clearInterval(w.value),b.value&&clearTimeout(b.value),w.value=setInterval(()=>{_.value--,_.value<=0&&clearInterval(w.value)},1e3),b.value=setTimeout(async()=>{await qt(),y.value&&Ht()},u.value*1e3))}function jt(){w.value&&(clearInterval(w.value),w.value=null),b.value&&(clearTimeout(b.value),b.value=null),_.value=0}return pt(y,c=>{c?Ht():jt()}),pt(nt,()=>{Q(()=>{bt(),ht(),ct(),ut()})}),pt(()=>G.colorScheme,()=>{Q(()=>{bt(),ht(),ct(),ut()})}),te(async()=>{await qt(),await Q(),bt(),ht(),ct(),ut()}),ee(()=>{jt(),at&&at.destroy(),st&&st.destroy(),Z&&Z.destroy(),j&&j.destroy()}),(c,e)=>{const D=Jt;return f(),x("div",null,[t("div",ue,[t("div",me,[t("div",pe,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ye,i(a(s).totalApiKeys),1),t("p",ge," 活跃: "+i(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",xe,[t("div",fe,[t("div",ve,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",be,[t("p",he,i(a(s).totalAccounts),1),a(s).accountsByPlatform?(f(),x("div",ke,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(f(),x("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",Ce,i(a(s).accountsByPlatform.claude.total),1)],8,_e)):$("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(f(),x("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",De,i(a(s).accountsByPlatform["claude-console"].total),1)],8,we)):$("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(f(),x("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",Se,i(a(s).accountsByPlatform.gemini.total),1)],8,Te)):$("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(f(),x("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Ae,i(a(s).accountsByPlatform.bedrock.total),1)],8,$e)):$("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(f(),x("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Ie,i(a(s).accountsByPlatform.openai.total),1)],8,Re)):$("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(f(),x("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Be,i(a(s).accountsByPlatform.azure_openai.total),1)],8,Pe)):$("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(f(),x("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Me,i(a(s).accountsByPlatform["openai-responses"].total),1)],8,Ue)):$("",!0)])):$("",!0)]),t("p",Oe,[I(" 正常: "+i(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(f(),x("span",Ke," | 异常: "+i(a(s).abnormalAccounts),1)):$("",!0),a(s).pausedAccounts>0?(f(),x("span",Fe," | 停止调度: "+i(a(s).pausedAccounts),1)):$("",!0),a(s).rateLimitedAccounts>0?(f(),x("span",Le," | 限流: "+i(a(s).rateLimitedAccounts),1)):$("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ee,[t("div",qe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",ze,i(a(s).todayRequests),1),t("p",Ge," 总请求: "+i(a(U)(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",He,[t("div",je,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ne,i(a(s).systemStatus),1),t("p",Ve," 运行时间: "+i(a(Rt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",Ye,[t("div",We,[t("div",Ze,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Qe,i(d(N.value.totalBalance||0)),1),t("p",Je," 低余额: "+i(N.value.lowBalanceCount||0)+" | 总成本: "+i(d(N.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Xe,[t("p",ta," 更新时间: "+i(n(ft.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:dt.value,onClick:r},[t("i",{class:J(["fas",dt.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,ea)])]),t("div",aa,[t("div",sa,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",oa,i(l.value.length)+" 个 ",1)]),dt.value?(f(),x("div",na," 正在加载... ")):l.value.length===0?(f(),x("div",ra," 全部正常 ")):(f(),x("div",la,[(f(!0),x(Pt,null,Bt(l.value,m=>{var A;return f(),x("div",{key:m.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",ia,[t("div",da,i(m.name||m.accountId),1),t("span",ca,i(Et(m.platform)),1)]),t("div",ua,[m.balance?(f(),x("span",ma,"余额: "+i(m.balance.formattedAmount),1)):(f(),x("span",pa,"今日成本: "+i(d(((A=m.statistics)==null?void 0:A.dailyCost)||0)),1))]),m.quota&&typeof m.quota.percentage=="number"?(f(),x("div",ya,[t("div",ga,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",xa,i(m.quota.percentage.toFixed(1))+"% ",1)]),t("div",fa,[t("div",{class:"h-2 rounded-full bg-red-500",style:ne({width:`${Math.min(100,m.quota.percentage)}%`})},null,4)])])):$("",!0)])}),128))]))])]),t("div",va,[t("div",ba,[t("div",ha,[t("div",ka,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",_a,[t("p",Ca,i(a(U)((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",wa,"/ "+i(a(Ct).todayCosts.formatted.totalCost),1)]),t("div",Da,[t("div",Ta,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Sa,i(a(U)(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",$a,i(a(U)(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(f(),x("span",Aa,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Ra,i(a(U)(a(s).todayCacheCreateTokens||0)),1)])):$("",!0),(a(s).todayCacheReadTokens||0)>0?(f(),x("span",Ia,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",Pa,i(a(U)(a(s).todayCacheReadTokens||0)),1)])):$("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ba,[t("div",Ua,[t("div",Ma,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Oa,[t("p",Ka,i(a(U)((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Fa,"/ "+i(a(Ct).totalCosts.formatted.totalCost),1)]),t("div",La,[t("div",Ea,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",qa,i(a(U)(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",za,i(a(U)(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(f(),x("span",Ga,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",Ha,i(a(U)(a(s).totalCacheCreateTokens||0)),1)])):$("",!0),(a(s).totalCacheReadTokens||0)>0?(f(),x("span",ja,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Na,i(a(U)(a(s).totalCacheReadTokens||0)),1)])):$("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Va,[t("div",Ya,[t("div",null,[t("p",Wa,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Za,"("+i(a(s).metricsWindow)+"分钟)",1)]),t("p",Qa,i(a(s).realtimeRPM||0),1),t("p",Ja,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(f(),x("span",Xa,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):$("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",ts,[t("div",es,[t("div",null,[t("p",as,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ss,"("+i(a(s).metricsWindow)+"分钟)",1)]),t("p",os,i(a(U)(a(s).realtimeTPM||0)),1),t("p",ns,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(f(),x("span",rs,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):$("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",ls,[t("div",is,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",ds,[t("div",cs,[(f(!0),x(Pt,null,Bt(a(tt).presetOptions,m=>(f(),x("button",{key:m.value,class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(tt).preset===m.value&&a(tt).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:A=>a(o)(m.value)},i(m.label),11,us))),128))]),t("div",ms,[t("button",{class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Y)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=m=>a(Dt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Y)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=m=>a(Dt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",ps,[ae(D,{modelValue:a(tt).customRange,"onUpdate:modelValue":e[2]||(e[2]=m=>a(tt).customRange=m),class:"custom-date-picker w-full lg:w-auto","default-time":it,"disabled-date":a(q),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(M)},null,8,["modelValue","disabled-date","onChange"]),a(Y)==="hour"?(f(),x("span",ys,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):$("",!0)]),t("div",gs,[t("div",xs,[t("label",fs,[se(t("input",{"onUpdate:modelValue":e[3]||(e[3]=m=>y.value=m),class:"peer sr-only",type:"checkbox"},null,512),[[oe,y.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",vs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),y.value?(f(),x("span",{key:0,class:J(["ml-1 font-mono text-xs text-blue-600 transition-opacity",_.value>0?"opacity-100":"opacity-0"])},i(_.value)+"s ",3)):$("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:P.value,title:"立即刷新数据",onClick:e[4]||(e[4]=m=>qt())},[t("i",{class:J(["fas fa-sync-alt text-xs",{"animate-spin":P.value}])},null,2),t("span",hs,i(P.value?"刷新中":"刷新"),1)],8,bs)])])]),t("div",ks,[t("div",_s,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",Cs,[t("canvas",{ref_key:"modelUsageChart",ref:et},null,512)])]),t("div",ws,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(X).length===0?(f(),x("div",Ds,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(f(),x("div",Ts,[t("table",Ss,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",$s,[(f(!0),x(Pt,null,Bt(a(X),m=>(f(),x("tr",{key:m.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",As,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:m.model},i(m.model),9,Rs)]),t("td",Is,i(a(U)(m.requests)),1),t("td",Ps,i(a(U)(m.allTokens)),1),t("td",Bs,i(m.formatted?m.formatted.total:"$0.000000"),1),t("td",Us,[t("span",Ms,i(vt(m.allTokens,a(X)))+"% ",1)])]))),128))])])]))])])]),t("div",Os,[t("div",Ks,[t("div",Fs,[t("canvas",{ref_key:"usageTrendChart",ref:W},null,512)])])]),t("div",Ls,[t("div",Es,[t("div",qs,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",zs,[t("button",{class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(H)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=m=>(H.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(H)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=m=>(H.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Gs,[a(O).totalApiKeys>10?(f(),x("span",Hs," 共 "+i(a(O).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(f(),x("span",js," 共 "+i(a(O).totalApiKeys)+" 个 API Key ",1))]),t("div",Ns,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:Tt},null,512)])])]),t("div",Vs,[t("div",Ys,[t("div",Ws,[t("div",Zs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Qs," 当前分组:"+i(a(F).groupLabel||"未选择"),1)]),t("div",Js,[t("div",Xs,[(f(),x(Pt,null,Bt(Lt,m=>t("button",{key:m.value,class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(lt)===m.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:A=>Wt(m.value)},i(m.label),11,to)),64))])])]),t("div",eo,[t("span",null,"共 "+i(a(F).totalAccounts||0)+" 个账号",1),a(F).topAccounts&&a(F).topAccounts.length?(f(),x("span",ao," 显示消耗排名前 "+i(a(F).topAccounts.length)+" 个账号 ",1)):$("",!0)]),!a(F).data||a(F).data.length===0?(f(),x("div",so," 暂无账号使用数据 ")):(f(),x("div",oo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:xt},null,512)]))])])])}}},mo=le(no,[["__scopeId","data-v-4fa3d294"]]);export{mo as default};
diff --git a/assets/DashboardView-C7pS8AeR.css b/assets/DashboardView-C7pS8AeR.css
new file mode 100644
index 00000000..131504fc
--- /dev/null
+++ b/assets/DashboardView-C7pS8AeR.css
@@ -0,0 +1 @@
+.custom-date-picker[data-v-4fa3d294]{font-size:13px}@keyframes spin-4fa3d294{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin[data-v-4fa3d294]{animation:spin-4fa3d294 1s linear infinite}
diff --git a/assets/DashboardView-CJCkJ1Cw.css b/assets/DashboardView-CJCkJ1Cw.css
deleted file mode 100644
index 28b67e50..00000000
--- a/assets/DashboardView-CJCkJ1Cw.css
+++ /dev/null
@@ -1 +0,0 @@
-.custom-date-picker[data-v-a189a0de]{font-size:13px}@keyframes spin-a189a0de{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin[data-v-a189a0de]{animation:spin-a189a0de 1s linear infinite}
diff --git a/assets/DashboardView-X4x_p8JP.js b/assets/DashboardView-X4x_p8JP.js
deleted file mode 100644
index bac26ec2..00000000
--- a/assets/DashboardView-X4x_p8JP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{E as Qt}from"./element-plus-BUfCkBQO.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-R8HMg95E.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-B3t2NHq9.js";import{C as Ft}from"./chart-yFHxLHpB.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default};
diff --git a/assets/Inter-Bold-BOs3KVhN.woff2 b/assets/Inter-Bold-BOs3KVhN.woff2
new file mode 100644
index 00000000..b9e3cb3b
Binary files /dev/null and b/assets/Inter-Bold-BOs3KVhN.woff2 differ
diff --git a/assets/Inter-Light-14LG-y7V.woff2 b/assets/Inter-Light-14LG-y7V.woff2
new file mode 100644
index 00000000..f3e012a4
Binary files /dev/null and b/assets/Inter-Light-14LG-y7V.woff2 differ
diff --git a/assets/Inter-Medium-CDhBSFyE.woff2 b/assets/Inter-Medium-CDhBSFyE.woff2
new file mode 100644
index 00000000..fdfdcc69
Binary files /dev/null and b/assets/Inter-Medium-CDhBSFyE.woff2 differ
diff --git a/assets/Inter-Regular-COLGFB3M.woff2 b/assets/Inter-Regular-COLGFB3M.woff2
new file mode 100644
index 00000000..2bcd222e
Binary files /dev/null and b/assets/Inter-Regular-COLGFB3M.woff2 differ
diff --git a/assets/Inter-SemiBold-BAEEcJ4E.woff2 b/assets/Inter-SemiBold-BAEEcJ4E.woff2
new file mode 100644
index 00000000..fbae113d
Binary files /dev/null and b/assets/Inter-SemiBold-BAEEcJ4E.woff2 differ
diff --git a/assets/LoginView-BXeEy6eP.js b/assets/LoginView-BXeEy6eP.js
deleted file mode 100644
index 2a3125b7..00000000
--- a/assets/LoginView-BXeEy6eP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as c,O as p,y as r}from"./vue-vendor-R8HMg95E.js";import{_ as v,u as k,a as S}from"./index-B3t2NHq9.js";import{T as L}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[c,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[c,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),p(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),p(m(o(e).loginError),1)])):d("",!0)])]))}},H=v(A,[["__scopeId","data-v-34e2cac0"]]);export{H as default};
diff --git a/assets/LoginView-Bk2509Bx.js b/assets/LoginView-Bk2509Bx.js
new file mode 100644
index 00000000..e995dcba
--- /dev/null
+++ b/assets/LoginView-Bk2509Bx.js
@@ -0,0 +1 @@
+import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as i,Y as v,K as u,aq as p,O as c,y as r}from"./vue-vendor-DV7DYXbz.js";import{u as _,a as k}from"./index-BahP9Xx9.js";import{T as S}from"./ThemeToggle-DROshBR1.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const L={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},V={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},N={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},I={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},j={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},B={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},M=["disabled"],z={key:0,class:"fas fa-sign-in-alt mr-2"},F={key:1,class:"loading-spinner mr-2"},O={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},Y={__name:"LoginView",setup(U){const e=_(),g=k(),m=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(A,t)=>(r(),a("div",L,[s("div",T,[w(S,{mode:"dropdown"})]),s("div",V,[s("div",N,[s("div",q,[m.value?(r(),a("div",I)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!m.value&&o(e).oemSettings.siteName?(r(),a("h1",j,i(o(e).oemSettings.siteName),1)):m.value?(r(),a("div",B)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:v(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[p,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[p,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",z)),o(e).loginLoading?(r(),a("div",F)):d("",!0),c(" "+i(o(e).loginLoading?"登录中...":"登录"),1)],8,M)],32),o(e).loginError?(r(),a("div",O,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),c(i(o(e).loginError),1)])):d("",!0)])]))}};export{Y as default};
diff --git a/assets/LoginView-tn0RQdqM.css b/assets/LoginView-tn0RQdqM.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/assets/LogoTitle-CNwD90nW.js b/assets/LogoTitle-DF7a1vCs.js
similarity index 88%
rename from assets/LogoTitle-CNwD90nW.js
rename to assets/LogoTitle-DF7a1vCs.js
index f874357a..a3593bc2 100644
--- a/assets/LogoTitle-CNwD90nW.js
+++ b/assets/LogoTitle-DF7a1vCs.js
@@ -1 +1 @@
-import{_ as d}from"./index-B3t2NHq9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-R8HMg95E.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L};
+import{_ as d}from"./index-BahP9Xx9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-DV7DYXbz.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L};
diff --git a/assets/MainLayout-C8oFjafl.js b/assets/MainLayout-C8oFjafl.js
new file mode 100644
index 00000000..3a50ae57
--- /dev/null
+++ b/assets/MainLayout-C8oFjafl.js
@@ -0,0 +1 @@
+import{c as U,r as y,_ as W,q as X,V as Y,x as d,y as u,z as t,L as S,R as k,J as L,P as b,C as I,Y as V,O as _,T as G,K as M,aq as A,aW as Z,Q as q,aU as O,ac as K,o as ee,av as te,aX as se,D as ae}from"./vue-vendor-DV7DYXbz.js";import{_ as re,u as j,l as ne,s as C,m as oe}from"./index-BahP9Xx9.js";import{L as le}from"./LogoTitle-DF7a1vCs.js";import{T as ie}from"./ThemeToggle-DROshBR1.js";import{C as de}from"./ConfirmModal-C2rCOkXI.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const ue={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},ce={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},me={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},ge={class:"flex items-center gap-1 sm:gap-2"},pe={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},fe=["href"],xe={class:"flex items-center gap-2 sm:gap-4"},ve={class:"flex items-center"},ye={class:"user-menu-container relative"},be={class:"hidden sm:inline"},he={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},ke={class:"flex items-center justify-between text-sm"},we={class:"font-mono text-gray-700 dark:text-gray-300"},_e={key:0,class:"mt-2"},Ce={class:"mb-2 flex items-center justify-between text-sm"},Ue={class:"font-mono text-green-600 dark:text-green-400"},Pe=["href"],Te={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},Me={key:2,class:"mt-2 text-center"},Ie={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},$e={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ne={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},Se=["value"],Ae={class:"relative"},qe=["type"],je={class:"flex gap-3 pt-4"},De=["disabled"],Le={key:0,class:"loading-spinner mr-2"},Ve={key:1,class:"fas fa-save mr-2"},Ke={__name:"AppHeader",setup(P){const p=O(),f=j(),g=U(()=>f.user||{username:"Admin"}),i=U(()=>f.oemSettings||{}),r=U(()=>f.oemLoading),s=y({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),x=y(!1),c=y(!1),o=y(!1),l=y(!1),a=W({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),T=y(!1),w=y({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),h=y(null),z=(n,e,v="确认",m="取消",H="primary")=>new Promise(R=>{w.value={title:n,message:e,confirmText:v,cancelText:m,type:H},h.value=R,T.value=!0}),E=()=>{var n;T.value=!1,(n=h.value)==null||n.call(h,!0)},B=()=>{var n;T.value=!1,(n=h.value)==null||n.call(h,!1)},$=async()=>{if(!s.value.checkingUpdate){s.value.checkingUpdate=!0;try{const n=await ne();if(n.success){const e=n.data;s.value.current=e.current,s.value.latest=e.latest,s.value.hasUpdate=e.hasUpdate,s.value.releaseInfo=e.releaseInfo,s.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:s.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(s.value.noUpdateMessage=!0,setTimeout(()=>{s.value.noUpdateMessage=!1},3e3))}}catch(n){console.error("Error checking for updates:",n);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);s.value.current=v.current||s.value.current,s.value.latest=v.latest,s.value.hasUpdate=v.hasUpdate,s.value.releaseInfo=v.releaseInfo,s.value.lastChecked=new Date(v.lastChecked)}}finally{s.value.checkingUpdate=!1}}},F=()=>{a.currentPassword="",a.newPassword="",a.confirmPassword="",a.newUsername="",c.value=!0,x.value=!1},N=()=>{c.value=!1},J=async()=>{if(a.newPassword!==a.confirmPassword){C("两次输入的密码不一致","error");return}if(a.newPassword.length<8){C("新密码长度至少8位","error");return}o.value=!0;try{const n=await oe({currentPassword:a.currentPassword,newPassword:a.newPassword,newUsername:a.newUsername||void 0});if(n.success){const e=a.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";C(e,"success"),N(),setTimeout(()=>{f.logout(),p.push("/login")},1500)}else C(n.message||"修改失败","error")}catch{C("修改密码失败","error")}finally{o.value=!1}},Q=async()=>{await z("退出登录","确定要退出登录吗?","确定退出","取消","warning")&&(f.logout(),p.push("/login"),C("已安全退出","success")),x.value=!1},D=n=>{!n.target.closest(".user-menu-container")&&x.value&&(x.value=!1)};return X(()=>{$(),setInterval(()=>{$()},36e5),document.addEventListener("click",D)}),Y(()=>{document.removeEventListener("click",D)}),(n,e)=>{var v;return u(),d(q,null,[t("div",ue,[t("div",ce,[t("div",me,[k(le,{loading:r.value,"logo-src":i.value.siteIconData||i.value.siteIcon,subtitle:"管理后台",title:i.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var m;return[t("div",ge,[t("span",pe,"v"+b(s.value.current||"..."),1),s.value.hasUpdate?(u(),d("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((m=s.value.releaseInfo)==null?void 0:m.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[8]||(e[8]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,fe)):S("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",xe,[t("div",ve,[k(ie,{mode:"dropdown"})]),e[19]||(e[19]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",ye,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=m=>x.value=!x.value)},[e[9]||(e[9]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",be,b(g.value.username||"Admin"),1),t("i",{class:I(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":x.value}])},null,2)]),x.value?(u(),d("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=V(()=>{},["stop"]))},[t("div",he,[t("div",ke,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",we,"v"+b(s.value.current||"..."),1)]),s.value.hasUpdate?(u(),d("div",_e,[t("div",Ce,[e[11]||(e[11]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),_("有新版本 ")],-1)),t("span",Ue,"v"+b(s.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=s.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[12]||(e[12]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),_("查看更新 ",-1)]),8,Pe)])):s.value.checkingUpdate?(u(),d("div",Te,e[13]||(e[13]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),_("检查更新中... ",-1)]))):(u(),d("div",Me,[k(G,{mode:"out-in",name:"fade"},{default:L(()=>[s.value.noUpdateMessage?(u(),d("div",Ie,e[14]||(e[14]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),_("当前已是最新版本 ")],-1)]))):(u(),d("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=m=>$())},e[15]||(e[15]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),_("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:F},e[16]||(e[16]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[18]||(e[18]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Q},e[17]||(e[17]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):S("",!0)])])])]),c.value?(u(),d("div",$e,[t("div",Ne,[t("div",{class:"mb-6 flex items-center justify-between"},[e[21]||(e[21]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:N},e[20]||(e[20]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:V(J,["prevent"])},[t("div",null,[e[22]||(e[22]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:g.value.username||"Admin"},null,8,Se),e[23]||(e[23]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[24]||(e[24]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),M(t("input",{"onUpdate:modelValue":e[3]||(e[3]=m=>a.newUsername=m),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[A,a.newUsername]]),e[25]||(e[25]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),t("div",Ae,[M(t("input",{"onUpdate:modelValue":e[4]||(e[4]=m=>a.currentPassword=m),class:"form-input w-full pr-10",placeholder:"请输入当前密码",required:"",type:l.value?"text":"password"},null,8,qe),[[Z,a.currentPassword]]),t("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",type:"button",onClick:e[5]||(e[5]=m=>l.value=!l.value)},[t("i",{class:I(l.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])]),t("div",null,[e[27]||(e[27]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),M(t("input",{"onUpdate:modelValue":e[6]||(e[6]=m=>a.newPassword=m),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[A,a.newPassword]]),e[28]||(e[28]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[29]||(e[29]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),M(t("input",{"onUpdate:modelValue":e[7]||(e[7]=m=>a.confirmPassword=m),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[A,a.confirmPassword]])]),t("div",je,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:N}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:o.value,type:"submit"},[o.value?(u(),d("div",Le)):(u(),d("i",Ve)),_(" "+b(o.value?"保存中...":"保存修改"),1)],8,De)])],32)])])):S("",!0),k(de,{"cancel-text":w.value.cancelText,"confirm-text":w.value.confirmText,message:w.value.message,show:T.value,title:w.value.title,type:w.value.type,onCancel:B,onConfirm:E},null,8,["cancel-text","confirm-text","message","show","title","type"])],64)}}},Oe=re(Ke,[["__scopeId","data-v-2abe1d62"]]),ze={class:"mb-4 sm:mb-6"},Ee={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Be=["value"],Fe=["value"],Je={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Qe=["onClick"],He={class:"hidden md:inline"},Re={class:"md:hidden"},We={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(P){const p=j(),f=U(()=>{var i;const g=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"},{key:"quotaCards",name:"额度卡",shortName:"额度卡",icon:"fas fa-ticket-alt"}];return(i=p.oemSettings)!=null&&i.ldapEnabled&&g.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),g.push({key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),g});return(g,i)=>(u(),d("div",ze,[t("div",Ee,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:P.activeTab,onChange:i[0]||(i[0]=r=>g.$emit("tab-change",r.target.value))},[(u(!0),d(q,null,K(f.value,r=>(u(),d("option",{key:r.key,value:r.key},b(r.name),9,Fe))),128))],40,Be)]),t("div",Je,[(u(!0),d(q,null,K(f.value,r=>(u(),d("button",{key:r.key,class:I(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",P.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:s=>g.$emit("tab-change",r.key)},[t("i",{class:I(r.icon+" mr-1 sm:mr-2")},null,2),t("span",He,b(r.name),1),t("span",Re,b(r.shortName||r.name),1)],10,Qe))),128))])]))}},Xe={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ye={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Ge={class:"tab-content"},ot={__name:"MainLayout",setup(P){const p=se(),f=O(),g=j(),i=y("dashboard"),r=U(()=>{var o;const c={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",quotaCards:"/quota-cards",settings:"/settings"};return(o=g.oemSettings)!=null&&o.ldapEnabled&&(c.userManagement="/user-management"),c}),s=()=>{const c=p.path,o=Object.keys(r.value).find(l=>r.value[l]===c);if(o)i.value=o;else{const l=p.name,a={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",QuotaCards:"quotaCards",Settings:"settings"};l&&a[l]?i.value=a[l]:i.value="dashboard"}};s(),ee(()=>p.path,c=>{const o=Object.keys(r.value).find(l=>r.value[l]===c);if(o)i.value=o;else{const l=p.name,a={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",QuotaCards:"quotaCards",Tutorial:"tutorial",Settings:"settings"};l&&a[l]&&(i.value=a[l])}});const x=async c=>{if(r.value[c]!==p.path){i.value=c;try{await f.push(r.value[c]),await ae()}catch(o){o.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",o),s())}}};return(c,o)=>{const l=te("router-view");return u(),d("div",Xe,[k(Oe),t("div",Ye,[k(We,{"active-tab":i.value,onTabChange:x},null,8,["active-tab"]),t("div",Ge,[k(l)])])])}}};export{ot as default};
diff --git a/assets/MainLayout-CCQ2LruH.css b/assets/MainLayout-CCQ2LruH.css
deleted file mode 100644
index 61c20f5f..00000000
--- a/assets/MainLayout-CCQ2LruH.css
+++ /dev/null
@@ -1 +0,0 @@
-.user-menu-button[data-v-1d65ae6c]{position:relative;overflow:hidden;min-height:38px}.user-menu-button[data-v-1d65ae6c]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.user-menu-button[data-v-1d65ae6c]:hover:before{left:100%}.user-menu-dropdown[data-v-1d65ae6c]{margin-top:8px;animation:slideDown-1d65ae6c .3s ease-out}@keyframes slideDown-1d65ae6c{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-1d65ae6c],.fade-leave-active[data-v-1d65ae6c]{transition:opacity .3s}.fade-enter-from[data-v-1d65ae6c],.fade-leave-to[data-v-1d65ae6c]{opacity:0}
diff --git a/assets/MainLayout-CYVTVq7H.js b/assets/MainLayout-CYVTVq7H.js
deleted file mode 100644
index dfca4c4e..00000000
--- a/assets/MainLayout-CYVTVq7H.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-R8HMg95E.js";import{_ as N,u as S,c as V,s as h}from"./index-B3t2NHq9.js";import{L as Y}from"./LogoTitle-CNwD90nW.js";import{T as G}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},He=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{He as default};
diff --git a/assets/MainLayout-DUrvC5cF.css b/assets/MainLayout-DUrvC5cF.css
new file mode 100644
index 00000000..f2de56f3
--- /dev/null
+++ b/assets/MainLayout-DUrvC5cF.css
@@ -0,0 +1 @@
+.user-menu-button[data-v-2abe1d62]{position:relative;overflow:hidden;min-height:38px;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);box-shadow:0 4px 12px rgba(var(--primary-rgb),.3)}.user-menu-button[data-v-2abe1d62]:hover{box-shadow:0 6px 16px rgba(var(--primary-rgb),.4)}.user-menu-button[data-v-2abe1d62]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.user-menu-button[data-v-2abe1d62]:hover:before{left:100%}.user-menu-dropdown[data-v-2abe1d62]{margin-top:8px;animation:slideDown-2abe1d62 .3s ease-out}@keyframes slideDown-2abe1d62{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-2abe1d62],.fade-leave-active[data-v-2abe1d62]{transition:opacity .3s}.fade-enter-from[data-v-2abe1d62],.fade-leave-to[data-v-2abe1d62]{opacity:0}
diff --git a/assets/QuotaCardsView-B9kpLmPn.js b/assets/QuotaCardsView-B9kpLmPn.js
new file mode 100644
index 00000000..645cfe64
--- /dev/null
+++ b/assets/QuotaCardsView-B9kpLmPn.js
@@ -0,0 +1,3 @@
+import{r as n,c as K,q as vt,x as o,z as t,I as X,R as ft,L as d,O as v,P as l,K as p,al as kt,aq as C,Q as f,ac as M,aV as Y,a5 as Z,Y as ht,y as a,C as L,u as U}from"./vue-vendor-DV7DYXbz.js";import{C as wt}from"./ConfirmModal-C2rCOkXI.js";import{bo as Ct,bp as _t,bq as At,br as $t,bs as Ut,s as m,bt as et,bu as qt,bv as jt,Z as N,c as st}from"./index-BahP9Xx9.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const Tt={class:"tab-content"},Vt={class:"card p-4 sm:p-6"},Mt={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Lt={class:"flex items-center justify-between"},St={class:"grid grid-cols-2 gap-3 sm:grid-cols-4 sm:gap-4"},Dt={class:"stat-card"},Pt={class:"flex items-center justify-between"},Rt={class:"text-xl font-bold text-gray-900 dark:text-gray-100 sm:text-2xl"},Qt={class:"stat-card"},It={class:"flex items-center justify-between"},zt={class:"text-xl font-bold text-green-600 dark:text-green-400 sm:text-2xl"},Bt={class:"stat-card"},Kt={class:"flex items-center justify-between"},Nt={class:"text-xl font-bold text-purple-600 dark:text-purple-400 sm:text-2xl"},Ot={class:"stat-card"},Et={class:"flex items-center justify-between"},Ft={class:"text-xl font-bold text-red-600 dark:text-red-400 sm:text-2xl"},Wt={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800/50"},Xt={class:"flex flex-wrap items-center gap-4"},Yt={class:"flex items-center gap-2"},Zt={class:"relative inline-flex cursor-pointer items-center"},Gt={class:"flex items-center gap-2"},Ht=["disabled"],Jt={class:"flex items-center gap-2"},te=["disabled"],ee={class:"border-b border-gray-200 dark:border-gray-700"},se={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},ae=["onClick"],re={key:0,class:"flex items-center justify-center py-12"},oe={key:1,class:"overflow-x-auto"},le={key:0,class:"mb-3 flex items-center gap-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},de={class:"text-sm text-blue-700 dark:text-blue-300"},ne={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},ie={class:"bg-gray-50 dark:bg-gray-700/50"},ue={class:"w-10 px-4 py-3"},xe=["checked","indeterminate"],ge={class:"divide-y divide-gray-200 bg-white dark:divide-gray-700 dark:bg-gray-800"},ye={class:"whitespace-nowrap px-4 py-3"},pe=["checked","onChange"],be={class:"whitespace-nowrap px-4 py-3"},me=["onClick"],ce={class:"whitespace-nowrap px-4 py-3"},ve={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-900 dark:text-white"},fe={key:0},ke={key:1},he={key:2},we={class:"whitespace-nowrap px-4 py-3"},Ce={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},_e={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-right"},$e=["onClick"],Ue={key:0},qe={key:1,class:"flex flex-col items-center justify-between gap-3 border-t border-gray-200 px-4 py-3 dark:border-gray-700 sm:flex-row"},je={class:"flex items-center gap-4"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ve={class:"flex items-center gap-2"},Me=["value"],Le={class:"flex items-center gap-2"},Se=["disabled"],De={class:"text-sm text-gray-600 dark:text-gray-400"},Pe=["disabled"],Re={key:2,class:"overflow-x-auto"},Qe={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},Ie={class:"divide-y divide-gray-200 bg-white dark:divide-gray-700 dark:bg-gray-800"},ze={class:"whitespace-nowrap px-4 py-3"},Be=["onClick"],Ke={class:"whitespace-nowrap px-4 py-3"},Ne=["onClick"],Oe={class:"whitespace-nowrap px-4 py-3"},Ee=["onClick"],Fe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-900 dark:text-white"},We={key:0},Xe={key:1},Ye={key:2},Ze={class:"whitespace-nowrap px-4 py-3"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},He={class:"whitespace-nowrap px-4 py-3 text-right"},Je=["onClick"],ts={key:0},es={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ss={class:"modal-content mx-auto w-full max-w-lg p-6"},as={class:"mb-6 flex items-center justify-between"},rs={class:"space-y-4"},os={key:0},ls={key:1},ds={class:"flex gap-2"},ns={class:"mt-6 flex gap-3"},is=["disabled"],us={key:0,class:"fas fa-spinner fa-spin mr-2"},xs={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},gs={class:"modal-content mx-auto w-full max-w-lg p-6"},ys={class:"mb-6 flex items-center justify-between"},ps={class:"flex items-center gap-3"},bs={class:"text-sm text-gray-500 dark:text-gray-400"},ms={class:"mb-4 max-h-60 overflow-y-auto rounded-lg bg-gray-50 p-3 dark:bg-gray-700/50"},cs={class:"flex items-center gap-2"},vs={class:"text-xs text-gray-400"},fs={class:"font-mono text-sm text-gray-900 dark:text-white"},ks={class:"text-xs text-gray-500 dark:text-gray-400"},hs={class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800"},ws={class:"mb-4"},Cs={class:"flex justify-end gap-3"},Ts={__name:"QuotaCardsView",setup(_s){const O=n(!1),q=n(!1),j=n(!1),E=n(!1),S=n(!1),_=n({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),k=n(null),y=n([]),T=n(!1),D=n(""),P=n(null),R=n("cards"),i=n([]),c=n(1),V=n(20),at=[10,20,50,100],Q=n(0),rt=[{id:"cards",name:"卡片列表"},{id:"redemptions",name:"核销记录"}],A=n({total:0,unused:0,redeemed:0,revoked:0,expired:0}),b=n({enabled:!0,maxExpiryDays:90,maxTotalCostLimit:1e3}),I=n([]),F=n([]),z=K(()=>I.value.filter(r=>r.status==="unused")),G=K(()=>z.value.length>0&&i.value.length===z.value.length),ot=K(()=>i.value.length>0&&i.value.length{G.value?i.value=[]:i.value=z.value.map(r=>r.id)},dt=r=>{const e=i.value.indexOf(r);e===-1?i.value.push(r):i.value.splice(e,1)},x=n({type:"quota",quotaAmount:10,timeAmount:30,timeUnit:"days",count:1,note:""}),H=(r,e,s="确认",u="取消",$="primary")=>new Promise(g=>{_.value={title:r,message:e,confirmText:s,cancelText:u,type:$},k.value=g,S.value=!0}),nt=()=>{var r;S.value=!1,(r=k.value)==null||r.call(k,!0)},it=()=>{var r;S.value=!1,(r=k.value)==null||r.call(k,!1)},h=async()=>{var g,w,B;O.value=!0;const r=(c.value-1)*V.value,[e,s,u]=await Promise.all([Ct({limit:V.value,offset:r}),_t(),At()]),$=await $t().catch(()=>({data:null}));I.value=((g=e.data)==null?void 0:g.cards)||[],Q.value=((w=e.data)==null?void 0:w.total)||0,A.value=s.data||A.value,F.value=((B=u.data)==null?void 0:B.redemptions)||[],$.data&&(b.value=$.data),O.value=!1},W=async()=>{(await Ut(b.value)).success&&m("配置已保存","success")},J=K(()=>Math.ceil(Q.value/V.value)),tt=r=>{c.value=r,i.value=[],h()},ut=()=>{c.value=1,i.value=[],h()},xt=async()=>{q.value=!0;const r=await qt(x.value);if(r.success){j.value=!1;const e=r.data;Array.isArray(e)?y.value=e:e?y.value=[e]:y.value=[],y.value.length>0&&(E.value=!0),m(`成功创建 ${y.value.length} 张卡片`,"success"),h()}else m(r.message||"创建卡片失败","error");q.value=!1},gt=()=>{if(y.value.length===0)return;const r=y.value.map(g=>{let w="";if((g.type==="quota"||g.type==="combo")&&(w+=`$${g.quotaAmount}`),g.type==="combo"&&(w+="_"),g.type==="time"||g.type==="combo"){const B={hours:"h",days:"d",months:"m"};w+=`${g.timeAmount}${B[g.timeUnit]||g.timeUnit}`}return`${w} ${g.code}`}).join(`
+`),e=new Blob([r],{type:"text/plain;charset=utf-8"}),s=URL.createObjectURL(e),u=document.createElement("a");u.href=s;const $=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);u.download=`quota-cards-${$}.txt`,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(s),m("卡片文件已下载","success")},yt=async()=>{if(y.value.length===0)return;const r=y.value.map(e=>e.code).join(`
+`);try{await navigator.clipboard.writeText(r),m("已复制所有卡号","success")}catch(e){console.error("Failed to copy:",e),m("复制失败","error")}},pt=async r=>{await H("删除卡片",`确定删除卡片 ${r.code}?`,"确定删除","取消","danger")&&(await et(r.id),m("卡片已删除","success"),h())},bt=async()=>{await H("批量删除",`确定删除选中的 ${i.value.length} 张卡片?`,"确定删除","取消","danger")&&(await Promise.all(i.value.map(e=>et(e))),m(`已删除 ${i.value.length} 张卡片`,"success"),i.value=[],h())},mt=r=>{P.value=r,D.value="",T.value=!0},ct=async()=>{P.value&&(await jt(P.value.id,{reason:D.value}),m("核销已撤销","success"),T.value=!1,P.value=null,h())};return vt(()=>{h()}),(r,e)=>(a(),o("div",Tt,[t("div",Vt,[t("div",Mt,[t("div",Lt,[e[21]||(e[21]=t("div",null,[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 额度卡管理 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理额度卡和时间卡,用户可核销增加额度 ")],-1)),t("button",{class:"inline-flex items-center rounded-md bg-blue-600 px-3 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:e[0]||(e[0]=s=>j.value=!0)},e[20]||(e[20]=[t("i",{class:"fas fa-plus mr-2"},null,-1),v(" 创建卡片 ",-1)]))]),t("div",St,[t("div",Dt,[t("div",Pt,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总卡片数 ",-1)),t("p",Rt,l(A.value.total),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-ticket-alt"})],-1))])]),t("div",Qt,[t("div",It,[t("div",null,[e[24]||(e[24]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 未使用 ",-1)),t("p",zt,l(A.value.unused),1)]),e[25]||(e[25]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-check-circle"})],-1))])]),t("div",Bt,[t("div",Kt,[t("div",null,[e[26]||(e[26]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 已核销 ",-1)),t("p",Nt,l(A.value.redeemed),1)]),e[27]||(e[27]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-exchange-alt"})],-1))])]),t("div",Ot,[t("div",Et,[t("div",null,[e[28]||(e[28]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 已撤销 ",-1)),t("p",Ft,l(A.value.revoked),1)]),e[29]||(e[29]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-red-500 to-red-600"},[t("i",{class:"fas fa-ban"})],-1))])])]),t("div",Wt,[t("div",Xt,[t("div",Yt,[e[31]||(e[31]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"兑换上限保护",-1)),t("label",Zt,[p(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>b.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:W},null,544),[[kt,b.value.enabled]]),e[30]||(e[30]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-300 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full dark:bg-gray-600"},null,-1))])]),t("div",Gt,[e[32]||(e[32]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"最大额度",-1)),p(t("input",{"onUpdate:modelValue":e[2]||(e[2]=s=>b.value.maxTotalCostLimit=s),class:"w-24 rounded border border-gray-300 bg-white px-2 py-1 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:!b.value.enabled,min:"0",type:"number",onChange:W},null,40,Ht),[[C,b.value.maxTotalCostLimit,void 0,{number:!0}]]),e[33]||(e[33]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"$",-1))]),t("div",Jt,[e[34]||(e[34]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"最大有效期",-1)),p(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>b.value.maxExpiryDays=s),class:"w-20 rounded border border-gray-300 bg-white px-2 py-1 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:!b.value.enabled,min:"0",type:"number",onChange:W},null,40,te),[[C,b.value.maxExpiryDays,void 0,{number:!0}]]),e[35]||(e[35]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"天",-1))])])]),t("div",ee,[t("nav",se,[(a(),o(f,null,M(rt,s=>t("button",{key:s.id,class:L(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",R.value===s.id?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:u=>R.value=s.id},l(s.name),11,ae)),64))])])]),O.value?(a(),o("div",re,e[36]||(e[36]=[t("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),t("span",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):R.value==="cards"?(a(),o("div",oe,[i.value.length>0?(a(),o("div",le,[t("span",de," 已选择 "+l(i.value.length)+" 张卡片 ",1),t("button",{class:"rounded-lg bg-red-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-red-600",onClick:bt},e[37]||(e[37]=[t("i",{class:"fas fa-trash mr-1"},null,-1),v(" 批量删除 ",-1)])),t("button",{class:"rounded-lg bg-gray-200 px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-300 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:e[4]||(e[4]=s=>i.value=[])}," 取消选择 ")])):d("",!0),t("table",ne,[t("thead",ie,[t("tr",null,[t("th",ue,[t("input",{checked:G.value,class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",indeterminate:ot.value,type:"checkbox",onChange:lt},null,40,xe)]),e[38]||(e[38]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 卡号 ",-1)),e[39]||(e[39]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 类型 ",-1)),e[40]||(e[40]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 额度/时间 ",-1)),e[41]||(e[41]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 状态 ",-1)),e[42]||(e[42]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 核销用户 ",-1)),e[43]||(e[43]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 创建时间 ",-1)),e[44]||(e[44]=t("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ",-1))])]),t("tbody",ge,[(a(!0),o(f,null,M(I.value,s=>(a(),o("tr",{key:s.id,class:L(["hover:bg-gray-50 dark:hover:bg-gray-700/50",i.value.includes(s.id)?"bg-blue-50 dark:bg-blue-900/10":""])},[t("td",ye,[s.status==="unused"?(a(),o("input",{key:0,checked:i.value.includes(s.id),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:u=>dt(s.id)},null,40,pe)):d("",!0)]),t("td",be,[t("code",{class:"cursor-pointer rounded bg-gray-100 px-2 py-1 font-mono text-xs hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"点击复制",onClick:u=>U(N)(s.code)},l(s.code),9,me)]),t("td",ce,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.type==="quota"?"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300":s.type==="time"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300"])},l(s.type==="quota"?"额度卡":s.type==="time"?"时间卡":"组合卡"),3)]),t("td",ve,[s.type==="quota"||s.type==="combo"?(a(),o("span",fe,"$"+l(s.quotaAmount),1)):d("",!0),s.type==="combo"?(a(),o("span",ke," + ")):d("",!0),s.type==="time"||s.type==="combo"?(a(),o("span",he,l(s.timeAmount)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)):d("",!0)]),t("td",we,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.status==="unused"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":s.status==="redeemed"?"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},l(s.status==="unused"?"未使用":s.status==="redeemed"?"已核销":"已撤销"),3)]),t("td",Ce,l(s.redeemedByUsername||"-"),1),t("td",_e,l(U(st)(s.createdAt)),1),t("td",Ae,[s.status==="unused"?(a(),o("button",{key:0,class:"text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300",title:"删除",onClick:u=>pt(s)},e[45]||(e[45]=[t("i",{class:"fas fa-trash"},null,-1)]),8,$e)):d("",!0)])],2))),128)),I.value.length===0?(a(),o("tr",Ue,e[46]||(e[46]=[t("td",{class:"px-4 py-8 text-center text-sm text-gray-500 dark:text-gray-400",colspan:"8"}," 暂无卡片数据 ",-1)]))):d("",!0)])]),Q.value>0?(a(),o("div",qe,[t("div",je,[t("span",Te," 共 "+l(Q.value)+" 条记录 ",1),t("div",Ve,[e[47]||(e[47]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"每页",-1)),p(t("select",{"onUpdate:modelValue":e[5]||(e[5]=s=>V.value=s),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300",onChange:ut},[(a(),o(f,null,M(at,s=>t("option",{key:s,value:s},l(s),9,Me)),64))],544),[[Y,V.value]]),e[48]||(e[48]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"条",-1))])]),t("div",Le,[t("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:c.value===1,onClick:e[6]||(e[6]=s=>tt(c.value-1))},e[49]||(e[49]=[t("i",{class:"fas fa-chevron-left"},null,-1)]),8,Se),t("span",De,l(c.value)+" / "+l(J.value),1),t("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:c.value>=J.value,onClick:e[7]||(e[7]=s=>tt(c.value+1))},e[50]||(e[50]=[t("i",{class:"fas fa-chevron-right"},null,-1)]),8,Pe)])])):d("",!0)])):R.value==="redemptions"?(a(),o("div",Re,[t("table",Qe,[e[53]||(e[53]=t("thead",{class:"bg-gray-50 dark:bg-gray-700/50"},[t("tr",null,[t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 卡号 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 用户 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 增加额度 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 状态 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 核销时间 "),t("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),t("tbody",Ie,[(a(!0),o(f,null,M(F.value,s=>(a(),o("tr",{key:s.id,class:"hover:bg-gray-50 dark:hover:bg-gray-700/50"},[t("td",ze,[t("code",{class:"cursor-pointer rounded bg-gray-100 px-2 py-1 font-mono text-xs hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"点击复制",onClick:u=>U(N)(s.cardCode)},l(s.cardCode),9,Be)]),t("td",Ke,[t("span",{class:"cursor-pointer text-sm text-gray-900 hover:text-blue-600 dark:text-white dark:hover:text-blue-400",title:"点击复制",onClick:u=>U(N)(s.username||s.userId)},l(s.username||s.userId),9,Ne)]),t("td",Oe,[t("span",{class:"cursor-pointer text-sm text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400",title:"点击复制",onClick:u=>U(N)(s.apiKeyName||s.apiKeyId)},l(s.apiKeyName||s.apiKeyId),9,Ee)]),t("td",Fe,[s.quotaAdded>0?(a(),o("span",We,"$"+l(s.quotaAdded),1)):d("",!0),s.quotaAdded>0&&s.timeAdded>0?(a(),o("span",Xe," + ")):d("",!0),s.timeAdded>0?(a(),o("span",Ye,l(s.timeAdded)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)):d("",!0)]),t("td",Ze,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.status==="active"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},l(s.status==="active"?"有效":"已撤销"),3)]),t("td",Ge,l(U(st)(s.timestamp)),1),t("td",He,[s.status==="active"?(a(),o("button",{key:0,class:"text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300",title:"撤销核销",onClick:u=>mt(s)},e[51]||(e[51]=[t("i",{class:"fas fa-undo"},null,-1)]),8,Je)):d("",!0)])]))),128)),F.value.length===0?(a(),o("tr",ts,e[52]||(e[52]=[t("td",{class:"px-4 py-8 text-center text-sm text-gray-500 dark:text-gray-400",colspan:"7"}," 暂无核销记录 ",-1)]))):d("",!0)])])])):d("",!0)]),(a(),X(Z,{to:"body"},[j.value?(a(),o("div",es,[t("div",ss,[t("div",as,[e[55]||(e[55]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-ticket-alt text-white"})]),t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建额度卡")],-1)),t("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:e[8]||(e[8]=s=>j.value=!1)},e[54]||(e[54]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("div",rs,[t("div",null,[e[57]||(e[57]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"卡片类型",-1)),p(t("select",{"onUpdate:modelValue":e[9]||(e[9]=s=>x.value.type=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[56]||(e[56]=[t("option",{value:"quota"},"额度卡",-1),t("option",{value:"time"},"时间卡",-1),t("option",{value:"combo"},"组合卡",-1)]),512),[[Y,x.value.type]])]),x.value.type==="quota"||x.value.type==="combo"?(a(),o("div",os,[e[58]||(e[58]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"额度数量 (美元)",-1)),p(t("input",{"onUpdate:modelValue":e[10]||(e[10]=s=>x.value.quotaAmount=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",min:"0",step:"0.1",type:"number"},null,512),[[C,x.value.quotaAmount,void 0,{number:!0}]])])):d("",!0),x.value.type==="time"||x.value.type==="combo"?(a(),o("div",ls,[e[60]||(e[60]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"时间数量",-1)),t("div",ds,[p(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>x.value.timeAmount=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",min:"1",type:"number"},null,512),[[C,x.value.timeAmount,void 0,{number:!0}]]),p(t("select",{"onUpdate:modelValue":e[12]||(e[12]=s=>x.value.timeUnit=s),class:"block rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[59]||(e[59]=[t("option",{value:"hours"},"小时",-1),t("option",{value:"days"},"天",-1),t("option",{value:"months"},"月",-1)]),512),[[Y,x.value.timeUnit]])])])):d("",!0),t("div",null,[e[61]||(e[61]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"批量生成数量",-1)),p(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>x.value.count=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"100",min:"1",type:"number"},null,512),[[C,x.value.count,void 0,{number:!0}]])]),t("div",null,[e[62]||(e[62]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"备注(可选)",-1)),p(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>x.value.note=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"例如:新年促销卡",type:"text"},null,512),[[C,x.value.note]])])]),t("div",ns,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:e[15]||(e[15]=s=>j.value=!1)}," 取消 "),t("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-blue-600 hover:to-blue-700 disabled:opacity-50",disabled:q.value,type:"button",onClick:xt},[q.value?(a(),o("i",us)):d("",!0),v(" "+l(q.value?"创建中...":"创建"),1)],8,is)])])])):d("",!0)])),(a(),X(Z,{to:"body"},[E.value?(a(),o("div",xs,[t("div",gs,[t("div",ys,[t("div",ps,[e[64]||(e[64]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-check text-white"})],-1)),t("div",null,[e[63]||(e[63]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建成功",-1)),t("p",bs," 已创建 "+l(y.value.length)+" 张卡片 ",1)])]),t("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:e[16]||(e[16]=s=>E.value=!1)},e[65]||(e[65]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("div",ms,[(a(!0),o(f,null,M(y.value,(s,u)=>(a(),o("div",{key:s.id,class:"flex items-center justify-between border-b border-gray-200 py-2 last:border-0 dark:border-gray-600"},[t("div",cs,[t("span",vs,l(u+1)+".",1),t("code",fs,l(s.code),1)]),t("span",ks,[s.type==="quota"||s.type==="combo"?(a(),o(f,{key:0},[v(" $"+l(s.quotaAmount),1)],64)):d("",!0),s.type==="combo"?(a(),o(f,{key:1},[v(" + ")],64)):d("",!0),s.type==="time"||s.type==="combo"?(a(),o(f,{key:2},[v(l(s.timeAmount)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)],64)):d("",!0)])]))),128))]),e[68]||(e[68]=t("div",{class:"mb-4 rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/20"},[t("div",{class:"flex items-start gap-2"},[t("i",{class:"fas fa-exclamation-triangle mt-0.5 text-yellow-500"}),t("p",{class:"text-sm text-yellow-700 dark:text-yellow-300"}," 请立即下载或复制卡号,关闭后将无法再次查看完整卡号列表。 ")])],-1)),t("div",{class:"flex gap-3"},[t("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-blue-600 hover:to-blue-700",type:"button",onClick:gt},e[66]||(e[66]=[t("i",{class:"fas fa-download mr-2"},null,-1),v(" 下载 TXT ",-1)])),t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:yt},e[67]||(e[67]=[t("i",{class:"fas fa-copy mr-2"},null,-1),v(" 复制全部 ",-1)]))])])])):d("",!0)])),(a(),X(Z,{to:"body"},[T.value?(a(),o("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:e[19]||(e[19]=ht(s=>T.value=!1,["self"]))},[t("div",hs,[e[70]||(e[70]=t("h3",{class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},"撤销核销",-1)),t("div",ws,[e[69]||(e[69]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 撤销原因(可选) ",-1)),p(t("input",{"onUpdate:modelValue":e[17]||(e[17]=s=>D.value=s),class:"w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"请输入撤销原因",type:"text"},null,512),[[C,D.value]])]),t("div",Cs,[t("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:e[18]||(e[18]=s=>T.value=!1)}," 取消 "),t("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-sm font-medium text-white hover:bg-red-600",onClick:ct}," 确认撤销 ")])])])):d("",!0)])),ft(wt,{"cancel-text":_.value.cancelText,"confirm-text":_.value.confirmText,message:_.value.message,show:S.value,title:_.value.title,type:_.value.type,onCancel:it,onConfirm:nt},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}};export{Ts as default};
diff --git a/assets/RecordDetailModal-BqG3nD3p.css b/assets/RecordDetailModal-BqG3nD3p.css
deleted file mode 100644
index 9fb6a44b..00000000
--- a/assets/RecordDetailModal-BqG3nD3p.css
+++ /dev/null
@@ -1 +0,0 @@
-.record-detail-modal[data-v-61b5b1eb] .el-dialog__header{margin:0;padding:16px 16px 0}.record-detail-modal[data-v-61b5b1eb] .el-dialog__body{padding:12px 16px 4px}.record-detail-modal[data-v-61b5b1eb] .el-dialog__footer{padding:8px 16px 16px}
diff --git a/assets/RecordDetailModal-CIaCpUK_.js b/assets/RecordDetailModal-CIaCpUK_.js
deleted file mode 100644
index d3144541..00000000
--- a/assets/RecordDetailModal-CIaCpUK_.js
+++ /dev/null
@@ -1 +0,0 @@
-import{b as C,e as R}from"./element-plus-BUfCkBQO.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-B3t2NHq9.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-R8HMg95E.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f};
diff --git a/assets/RecordDetailModal-CZv4ajwT.css b/assets/RecordDetailModal-CZv4ajwT.css
new file mode 100644
index 00000000..c2f48b67
--- /dev/null
+++ b/assets/RecordDetailModal-CZv4ajwT.css
@@ -0,0 +1 @@
+.record-detail-modal[data-v-8a7345f4] .el-dialog__header{margin:0;padding:16px 16px 0}.record-detail-modal[data-v-8a7345f4] .el-dialog__body{padding:12px 16px 4px}.record-detail-modal[data-v-8a7345f4] .el-dialog__footer{padding:8px 16px 16px}
diff --git a/assets/RecordDetailModal-iWzEw88d.js b/assets/RecordDetailModal-iWzEw88d.js
new file mode 100644
index 00000000..0e24bcd4
--- /dev/null
+++ b/assets/RecordDetailModal-iWzEw88d.js
@@ -0,0 +1 @@
+import{b as T,e as R}from"./element-plus-BSjV1f9S.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as D,f as l}from"./index-BahP9Xx9.js";import{c as w,I as N,y as $,J as x,z as t,P as s,u as i,R as F,O as M}from"./vue-vendor-DV7DYXbz.js";const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},z={class:"flex items-center justify-between"},J={class:"font-medium"},P={class:"flex items-center justify-between"},S={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},yt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},gt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(a,{emit:h}){const c=a,j=h,m=()=>j("close"),C=w(()=>{var r;return(r=c.record)!=null&&r.timestamp?B(c.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=w(()=>{var y,g;const r=((y=c.record)==null?void 0:y.realCostBreakdown)||((g=c.record)==null?void 0:g.costBreakdown)||{},e=o=>{const d=typeof o=="number"?o:0;return d>=1?`$${d.toFixed(2)}`:d>=.001?`$${d.toFixed(4)}`:`$${d.toFixed(6)}`};return{input:e(r.input),output:e(r.output),cacheCreate:e(r.cacheCreate),cacheRead:e(r.cacheRead),total:e(r.total)}});return(r,e)=>{const y=T,g=R;return $(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":a.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:x(()=>{var o;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,s(((o=a.record)==null?void 0:o.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:x(()=>[t("div",pt,[F(y,{type:"primary",onClick:m},{default:x(()=>e[19]||(e[19]=[M("关闭",-1)])),_:1,__:[19]})])]),default:x(()=>{var o,d,u,f,b,p,k,_,v;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",z,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",J,s(C.value),1)]),t("li",P,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",S,s(((o=a.record)==null?void 0:o.model)||"未知模型"),1)]),t("li",q,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",A,s(((d=a.record)==null?void 0:d.accountName)||"未知账户"),1)]),t("li",G,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",K,s(((u=a.record)==null?void 0:u.accountTypeName)||"未知渠道"),1)])])]),t("div",L,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,s(i(l)((f=a.record)==null?void 0:f.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,s(i(l)((b=a.record)==null?void 0:b.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,s(i(l)((p=a.record)==null?void 0:p.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,s(i(l)((k=a.record)==null?void 0:k.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,s(i(l)((_=a.record)==null?void 0:_.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,s(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",yt,s(n.value.output),1)]),t("div",gt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,s(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,s(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,s(((v=a.record)==null?void 0:v.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=D(kt,[["__scopeId","data-v-8a7345f4"]]);export{jt as R};
diff --git a/assets/SettingsView-BSo4LhAq.js b/assets/SettingsView-BSo4LhAq.js
new file mode 100644
index 00000000..c2a4993e
--- /dev/null
+++ b/assets/SettingsView-BSo4LhAq.js
@@ -0,0 +1,3 @@
+import{aP as $e,r as k,aY as Ge,c as Ce,o as Te,q as He,Z as Ye,x as o,z as t,L as x,C as E,O as l,u as g,K as d,S as X,aq as p,al as Q,P as v,aT as A,Q as Z,ac as le,R as Ue,aV as _,J as Je,T as Xe,Y as Ze,y as n}from"./vue-vendor-DV7DYXbz.js";import{b1 as _e,b2 as et,_ as tt,s as f,b3 as at,b4 as rt,b5 as st,b6 as lt,b7 as ot,b8 as nt,b9 as Ae,ba as dt,bb as it,bc as ut,bd as gt,be as ft}from"./index-BahP9Xx9.js";import{C as ct}from"./ConfirmModal-C2rCOkXI.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const bt=$e("settings",()=>{const M=k({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,apiStatsNotice:{enabled:!1,title:"",content:""},updatedAt:null}),R=k(!1),W=k(!1),I=async()=>{R.value=!0;const m=await _e();return m.success&&(M.value={...M.value,...m.data},w()),R.value=!1,m},b=async m=>{W.value=!0;const h=await et(m);return h.success&&(M.value={...M.value,...h.data},w()),W.value=!1,h},ee=async()=>{const m={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,apiStatsNotice:{enabled:!1,title:"",content:""},updatedAt:null};return M.value={...m},await b(m)},w=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const m=document.querySelector('link[rel="icon"]')||document.createElement("link");m.rel="icon",m.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(m)}};return{oemSettings:M,loading:R,saving:W,loadOemSettings:I,saveOemSettings:b,resetOemSettings:ee,applyOemSettings:w,formatDateTime:m=>m?new Date(m).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:m=>{const h=[];return m.size>350*1024&&h.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(m.type)||h.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:h.length===0,errors:h}},fileToBase64:m=>new Promise((h,K)=>{const F=new FileReader;F.onload=te=>h(te.target.result),F.onerror=K,F.readAsDataURL(m)})}}),xt={class:"settings-container"},pt={class:"card p-4 sm:p-6"},yt={class:"mb-6"},vt={class:"flex space-x-8"},mt={key:0,class:"py-12 text-center"},kt={key:1},wt={class:"table-container hidden sm:block"},ht={class:"min-w-full"},St={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ct={class:"table-row"},Tt={class:"px-6 py-4"},Ut={class:"table-row"},At={class:"px-6 py-4"},Mt={class:"space-y-3"},It={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},Bt=["src"],Et={class:"table-row"},Rt={class:"px-6 py-4"},Vt={class:"flex items-center"},Dt={class:"inline-flex cursor-pointer items-center"},Qt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},qt={class:"border-b border-gray-100 dark:border-gray-700"},Pt={class:"px-6 py-4"},jt={class:"flex items-center"},Nt={class:"inline-flex cursor-pointer items-center"},Lt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ot={key:0,class:"mt-3 space-y-3"},Wt={class:"px-6 py-6",colspan:"2"},zt={class:"flex items-center justify-between"},Kt={class:"flex gap-3"},Ft=["disabled"],$t={key:0,class:"loading-spinner mr-2"},Gt={key:1,class:"fas fa-save mr-2"},Ht=["disabled"],Yt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Jt={class:"space-y-4 sm:hidden"},Xt={class:"glass-card p-4"},Zt={class:"glass-card p-4"},_t={class:"space-y-3"},ea={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ta=["src"],aa={class:"glass-card p-4"},ra={class:"space-y-2"},sa={class:"inline-flex cursor-pointer items-center"},la={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},oa={class:"glass-card p-4"},na={class:"flex flex-col gap-3"},da=["disabled"],ia={key:0,class:"loading-spinner mr-2"},ua={key:1,class:"fas fa-save mr-2"},ga=["disabled"],fa={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},ca={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ba={class:"flex items-center justify-between"},xa={class:"relative inline-flex cursor-pointer items-center"},pa={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ya={class:"space-y-3"},va={class:"font-medium text-gray-700 dark:text-gray-300"},ma={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},ka={class:"relative inline-flex cursor-pointer items-center"},wa=["onUpdate:modelValue"],ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Sa={class:"mb-4 flex items-center justify-between"},Ca={key:0,class:"space-y-4"},Ta={class:"flex items-start justify-between"},Ua={class:"flex-1"},Aa={class:"flex items-center"},Ma={class:"font-semibold text-gray-800 dark:text-gray-200"},Ia={class:"text-sm text-gray-500 dark:text-gray-400"},Ba={class:"mt-3 space-y-1 text-sm"},Ea={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Ra={class:"truncate"},Va={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},Da={class:"truncate"},Qa={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},qa={class:"truncate"},Pa={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},ja={class:"truncate"},Na={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},La={class:"truncate"},Oa={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},Wa={class:"truncate"},za={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},Ka={class:"ml-4 flex items-center space-x-2"},Fa={class:"relative inline-flex cursor-pointer items-center"},$a=["checked","onChange"],Ga=["onClick"],Ha=["onClick"],Ya=["onClick"],Ja={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},Xa={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Za={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},_a={key:0,class:"py-12 text-center"},er={key:1},tr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ar={class:"flex items-center justify-between"},rr={class:"relative inline-flex cursor-pointer items-center"},sr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},lr={class:"flex items-center justify-between"},or={class:"relative inline-flex cursor-pointer items-center"},nr={key:0,class:"mt-6 space-y-4"},dr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ir={class:"flex items-center justify-between"},ur={class:"relative inline-flex cursor-pointer items-center"},gr={key:0,class:"mt-6 space-y-4"},fr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},cr={class:"flex items-center justify-between"},br={class:"relative inline-flex cursor-pointer items-center"},xr={key:0,class:"mt-6 space-y-4"},pr={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},yr={key:0,class:"ml-2"},vr={key:0,class:"py-12 text-center"},mr={key:1},kr={class:"mb-6 rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-6 dark:from-blue-900/20 dark:to-indigo-900/20"},wr={class:"flex items-start"},hr={class:"mt-2 text-sm text-gray-600 dark:text-gray-400"},Sr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Cr={class:"mb-4 flex items-center justify-between"},Tr=["disabled"],Ur={class:"space-y-4"},Ar={class:"flex items-center"},Mr={class:"font-medium text-gray-900 dark:text-gray-100"},Ir={class:"text-xs text-gray-500 dark:text-gray-400"},Br={key:0,class:"ml-2 rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300"},Er={class:"flex items-center gap-3"},Rr=["onUpdate:modelValue"],Vr={key:0,class:"mt-4 rounded-lg bg-gray-50 p-3 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},Dr={key:0,class:"ml-2"},Qr={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},qr={class:"flex items-center justify-between"},Pr={class:"flex items-center space-x-3"},jr={class:"text-xl font-semibold text-gray-900 dark:text-white"},Nr={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Lr={class:"p-6"},Or={class:"space-y-5"},Wr={class:"relative"},zr=["disabled"],Kr={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Fr={key:0},$r={class:"relative"},Gr={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Hr={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Yr={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},Jr={class:"text-sm text-blue-700 dark:text-blue-300"},Xr={key:1,class:"space-y-5"},Zr={key:2,class:"space-y-5"},_r={key:3,class:"space-y-5"},es={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ts={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},as={class:"space-y-4"},rs={class:"flex items-center justify-between"},ss={class:"flex cursor-pointer items-center",for:"enableSign"},ls={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},os={key:0},ns={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},ds={class:"flex items-center justify-between"},is={class:"flex space-x-3"},us=["disabled"],gs=["disabled"],fs=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const R=bt(),{loading:W,saving:I,oemSettings:b}=Ge(R),ee=k(),w=k("branding"),i=k(!0),T=k(new AbortController),z=k(!1),m=k({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),h=k(null),K=(a,e,r="确认",c="取消",y="primary")=>new Promise(O=>{m.value={title:a,message:e,confirmText:r,cancelText:c,type:y},h.value=O,z.value=!0}),F=()=>{var a;z.value=!1,(a=h.value)==null||a.call(h,!0)},te=()=>{var a;z.value=!1,(a=h.value)==null||a.call(h,!1)},P=Ce({get(){return!b.value.showAdminButton},set(a){b.value.showAdminButton=!a}}),V=k(!1),q=k(!1),j=k(!1),N=k(!1),ae={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},S=k({enabled:!1,platforms:[],notificationTypes:{...ae},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),re=k(!1),u=k({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),se=k(!1),H=k(!1),U=k({baseService:"claude",rates:{claude:1,codex:1,gemini:1,droid:1,bedrock:1,azure:1,ccr:1},updatedAt:null,updatedBy:null}),L=k(!1),B=k(null),s=k({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),oe=Te(w,async a=>{i.value&&(a==="webhook"?await $():a==="claude"?await Ie():a==="serviceRates"&&await de())}),ne=Te(()=>s.value.type,a=>{V.value=!1,q.value=!1,B.value||(a==="bark"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1):a==="smtp"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""):a==="telegram"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1,s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""):(s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1,s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""))}),Me=Ce(()=>s.value.type==="bark"?!!s.value.deviceKey:s.value.type==="telegram"?!!(s.value.botToken&&s.value.chatId):s.value.type==="smtp"?!!(s.value.host&&s.value.user&&s.value.pass&&s.value.to):!!s.value.url&&!V.value);He(async()=>{try{await R.loadOemSettings(),w.value==="webhook"&&await $(),w.value==="serviceRates"&&await de()}catch{f("加载设置失败","error")}}),Ye(()=>{i.value=!1,T.value&&T.value.abort(),oe&&oe(),ne&&ne(),L.value&&(L.value=!1,B.value=null)});const $=async()=>{if(i.value)try{const a=await at({signal:T.value.signal});if(a.success&&i.value){const e=a.config||{};S.value={...e,notificationTypes:{...ae,...e.notificationTypes||{}}}}}catch(a){if(a.name==="AbortError"||!i.value)return;f("获取webhook配置失败","error"),console.error(a)}},G=async()=>{if(i.value)try{const a={...S.value,notificationTypes:{...ae,...S.value.notificationTypes||{}}};(await st(a,{signal:T.value.signal})).success&&i.value&&(S.value=a,f("配置已保存","success"))}catch(a){if(a.name==="AbortError"||!i.value)return;f("保存配置失败","error"),console.error(a)}},Ie=async()=>{var a,e,r,c,y,O,ye,ve,me,ke,we,he,Se;if(i.value){re.value=!0;try{const C=await ft({signal:T.value.signal});C.success&&i.value&&(u.value={claudeCodeOnlyEnabled:((a=C.config)==null?void 0:a.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=C.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((r=C.config)==null?void 0:r.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((c=C.config)==null?void 0:c.sessionBindingTtlDays)??30,userMessageQueueEnabled:((y=C.config)==null?void 0:y.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((O=C.config)==null?void 0:O.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ye=C.config)==null?void 0:ye.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((ve=C.config)==null?void 0:ve.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((me=C.config)==null?void 0:me.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ke=C.config)==null?void 0:ke.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((we=C.config)==null?void 0:we.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((he=C.config)==null?void 0:he.updatedAt)||null,updatedBy:((Se=C.config)==null?void 0:Se.updatedBy)||null})}catch(C){if(C.name==="AbortError"||!i.value)return;f("获取 Claude 转发配置失败","error"),console.error(C)}finally{i.value&&(re.value=!1)}}},D=async()=>{var a,e;if(i.value)try{const r={claudeCodeOnlyEnabled:u.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:u.value.globalSessionBindingEnabled,sessionBindingErrorMessage:u.value.sessionBindingErrorMessage,sessionBindingTtlDays:u.value.sessionBindingTtlDays,userMessageQueueEnabled:u.value.userMessageQueueEnabled,userMessageQueueDelayMs:u.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:u.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:u.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:u.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:u.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:u.value.concurrentRequestQueueTimeoutMs},c=await ot(r,{signal:T.value.signal});c.success&&i.value&&(u.value={...u.value,updatedAt:((a=c.config)==null?void 0:a.updatedAt)||new Date().toISOString(),updatedBy:((e=c.config)==null?void 0:e.updatedBy)||null},f("Claude 转发配置已保存","success"))}catch(r){if(r.name==="AbortError"||!i.value)return;f("保存 Claude 转发配置失败","error"),console.error(r)}},de=async()=>{var a,e,r,c;if(i.value){se.value=!0;try{const y=await rt({signal:T.value.signal});y.success&&i.value&&(U.value={baseService:((a=y.data)==null?void 0:a.baseService)||"claude",rates:((e=y.data)==null?void 0:e.rates)||U.value.rates,updatedAt:(r=y.data)==null?void 0:r.updatedAt,updatedBy:(c=y.data)==null?void 0:c.updatedBy})}catch(y){if(y.name==="AbortError"||!i.value)return;console.error("加载服务倍率配置失败:",y)}finally{i.value&&(se.value=!1)}}},Be=async()=>{var a,e;if(i.value){H.value=!0;try{const r=await nt({rates:U.value.rates,baseService:U.value.baseService},{signal:T.value.signal});r.success&&i.value&&(U.value.updatedAt=((a=r.data)==null?void 0:a.updatedAt)||new Date().toISOString(),U.value.updatedBy=(e=r.data)==null?void 0:e.updatedBy,f("服务倍率配置已保存","success"))}catch(r){if(r.name==="AbortError"||!i.value)return;f("保存服务倍率配置失败","error"),console.error(r)}finally{i.value&&(H.value=!1)}}},Ee=a=>({claude:"fas fa-robot",codex:"fas fa-code",gemini:"fas fa-gem",droid:"fas fa-android",bedrock:"fab fa-aws",azure:"fab fa-microsoft",ccr:"fas fa-server"})[a]||"fas fa-cog",Re=a=>({claude:"bg-gradient-to-br from-orange-500 to-amber-600",codex:"bg-gradient-to-br from-green-500 to-emerald-600",gemini:"bg-gradient-to-br from-blue-500 to-indigo-600",droid:"bg-gradient-to-br from-green-600 to-lime-600",bedrock:"bg-gradient-to-br from-yellow-500 to-orange-600",azure:"bg-gradient-to-br from-blue-600 to-cyan-600",ccr:"bg-gradient-to-br from-purple-500 to-pink-600"})[a]||"bg-gradient-to-br from-gray-500 to-gray-600",Ve=a=>({claude:"Claude",codex:"Codex (OpenAI)",gemini:"Gemini",droid:"Droid",bedrock:"AWS Bedrock",azure:"Azure OpenAI",ccr:"CCR"})[a]||a,De=()=>{if(["bark","smtp","telegram"].includes(s.value.type)){V.value=!1,q.value=!1;return}const a=s.value.url;if(!a){V.value=!1,q.value=!1;return}try{new URL(a),a.startsWith("http://")||a.startsWith("https://")?(V.value=!1,q.value=!0):(V.value=!0,q.value=!1)}catch{V.value=!0,q.value=!1}},ie=()=>{if(s.value.type==="bark"){if(!s.value.deviceKey)return f("请输入Bark设备密钥","error"),!1}else if(s.value.type==="telegram"){if(!s.value.botToken)return f("请输入 Telegram 机器人 Token","error"),!1;if(!s.value.chatId)return f("请输入 Telegram Chat ID","error"),!1;if(s.value.apiBaseUrl)try{const a=new URL(s.value.apiBaseUrl);if(!["http:","https:"].includes(a.protocol))return f("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return f("请输入有效的 Telegram API 基础地址","error"),!1}if(s.value.proxyUrl)try{const a=new URL(s.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(a.protocol))return f("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return f("请输入有效的 Telegram 代理地址","error"),!1}}else if(s.value.type==="smtp"){const a=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:r}of a)if(!s.value[e])return f(`请输入${r}`,"error"),!1}else{if(!s.value.url)return f("请输入Webhook URL","error"),!1;if(V.value)return f("请输入有效的Webhook URL","error"),!1}return!0},Qe=async()=>{if(i.value&&ie()){N.value=!0;try{let a;B.value?a=await dt(B.value.id,s.value,{signal:T.value.signal}):a=await it(s.value,{signal:T.value.signal}),a.success&&i.value&&(f(B.value?"平台已更新":"平台已添加","success"),await $(),Y())}catch(a){if(a.name==="AbortError"||!i.value)return;f(a.message||"操作失败","error"),console.error(a)}finally{i.value&&(N.value=!1)}}},qe=a=>{B.value=a,s.value={type:a.type||"wechat_work",name:a.name||"",url:a.url||"",enableSign:a.enableSign||!1,secret:a.secret||"",botToken:a.botToken||"",chatId:a.chatId||"",apiBaseUrl:a.apiBaseUrl||"",proxyUrl:a.proxyUrl||"",deviceKey:a.deviceKey||"",serverUrl:a.serverUrl||"",level:a.level||"",sound:a.sound||"",group:a.group||"",host:a.host||"",port:a.port??null,secure:a.secure||!1,user:a.user||"",pass:a.pass||"",from:a.from||"",to:Array.isArray(a.to)?a.to.join(", "):a.to||"",timeout:a.timeout??null,ignoreTLS:a.ignoreTLS||!1},L.value=!0},Pe=async a=>{if(i.value&&await K("删除平台","确定要删除这个平台吗?","删除","取消","danger"))try{(await gt(a,{signal:T.value.signal})).success&&i.value&&(f("平台已删除","success"),await $())}catch(e){if(e.name==="AbortError"||!i.value)return;f("删除失败","error"),console.error(e)}},je=async a=>{if(i.value)try{const e=await ut(a,{signal:T.value.signal});e.success&&i.value&&(f(e.message,"success"),await $())}catch(e){if(e.name==="AbortError"||!i.value)return;f("操作失败","error"),console.error(e)}},Ne=async a=>{if(i.value)try{const e={type:a.type,secret:a.secret,enableSign:a.enableSign};a.type==="bark"?(e.deviceKey=a.deviceKey,e.serverUrl=a.serverUrl,e.level=a.level,e.sound=a.sound,e.group=a.group):a.type==="smtp"?(e.host=a.host,e.port=a.port,e.secure=a.secure,e.user=a.user,e.pass=a.pass,e.from=a.from,e.to=a.to,e.ignoreTLS=a.ignoreTLS):a.type==="telegram"?(e.botToken=a.botToken,e.chatId=a.chatId,e.apiBaseUrl=a.apiBaseUrl,e.proxyUrl=a.proxyUrl):e.url=a.url,(await Ae(e,{signal:T.value.signal})).success&&i.value&&f("测试成功","success")}catch(e){if(e.name==="AbortError"||!i.value)return;f(e.error||e.message||"测试失败","error"),console.error(e)}},Le=async()=>{if(i.value&&ie()){j.value=!0;try{(await Ae(s.value,{signal:T.value.signal})).success&&i.value&&f("测试成功","success")}catch(a){if(a.name==="AbortError"||!i.value)return;f(a.error||a.message||"测试失败","error"),console.error(a)}finally{i.value&&(j.value=!1)}}},Oe=async()=>{var a,e,r,c;if(i.value)try{(await lt({signal:T.value.signal})).success&&i.value&&f("测试通知已发送","success")}catch(y){if(y.name==="AbortError"||!i.value)return;const O=((e=(a=y==null?void 0:y.response)==null?void 0:a.data)==null?void 0:e.message)||((c=(r=y==null?void 0:y.response)==null?void 0:r.data)==null?void 0:c.error)||(y==null?void 0:y.message)||"发送失败";f(O,"error"),console.error(y)}},Y=()=>{i.value&&(L.value=!1,setTimeout(()=>{i.value&&(B.value=null,s.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},V.value=!1,q.value=!1,j.value=!1,N.value=!1)},0))},ue=a=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[a]||a,We=a=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[a]||"fas fa-bell",ge=a=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[a]||"",ze=a=>a?a.length<=12?a:`${a.slice(0,6)}...${a.slice(-4)}`:"",Ke=a=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[a]||a,Fe=a=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[a]||"",fe=async()=>{try{const a={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton,apiStatsNotice:b.value.apiStatsNotice},e=await R.saveOemSettings(a);e&&e.success?f("OEM设置保存成功","success"):f((e==null?void 0:e.message)||"保存失败","error")}catch{f("保存OEM设置失败","error")}},ce=async()=>{if(await K("重置设置",`确定要重置为默认设置吗?
+
+这将清除所有自定义的网站名称和图标设置。`,"重置","取消","warning"))try{const a=await R.resetOemSettings();a&&a.success?f("已重置为默认设置","success"):f("重置失败","error")}catch{f("重置失败","error")}},be=async a=>{const e=a.target.files[0];if(!e)return;const r=R.validateIconFile(e);if(!r.isValid){r.errors.forEach(c=>f(c,"error"));return}try{const c=await R.fileToBase64(e);b.value.siteIconData=c}catch{f("文件读取失败","error")}a.target.value=""},xe=()=>{b.value.siteIcon="",b.value.siteIconData=""},pe=()=>{console.warn("Icon failed to load")},J=R.formatDateTime;return(a,e)=>(n(),o(Z,null,[t("div",xt,[t("div",pt,[e[145]||(e[145]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",yt,[t("nav",vt,[t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=r=>w.value="branding")},e[51]||(e[51]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=r=>w.value="webhook")},e[52]||(e[52]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=r=>w.value="claude")},e[53]||(e[53]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="serviceRates"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[3]||(e[3]=r=>w.value="serviceRates")},e[54]||(e[54]=[t("i",{class:"fas fa-balance-scale mr-2"},null,-1),l(" 服务倍率 ",-1)]),2)])]),g(W)?(n(),o("div",mt,e[55]||(e[55]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(n(),o("div",kt,[d(t("div",null,[t("div",wt,[t("table",ht,[t("tbody",St,[t("tr",Ct,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Tt,[d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=r=>g(b).siteName=r),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,g(b).siteName]]),e[56]||(e[56]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ut,[e[62]||(e[62]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",At,[t("div",Mt,[g(b).siteIconData||g(b).siteIcon?(n(),o("div",It,[t("img",{alt:"图标预览",class:"h-8 w-8",src:g(b).siteIconData||g(b).siteIcon,onError:pe},null,40,Bt),e[59]||(e[59]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:xe},e[58]||(e[58]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:ee,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:be},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[5]||(e[5]=r=>a.$refs.iconFileInput.click())},e[60]||(e[60]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[61]||(e[61]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",Et,[e[65]||(e[65]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",Rt,[t("div",Vt,[t("label",Dt,[d(t("input",{"onUpdate:modelValue":e[6]||(e[6]=r=>P.value=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,P.value]]),e[63]||(e[63]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Qt,v(P.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[64]||(e[64]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",qt,[e[69]||(e[69]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-amber-500 to-orange-600"},[t("i",{class:"fas fa-bell text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 统计页通知 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Stats")])])],-1)),t("td",Pt,[t("div",jt,[t("label",Nt,[d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=r=>g(b).apiStatsNotice.enabled=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,g(b).apiStatsNotice.enabled]]),e[66]||(e[66]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Lt,v(g(b).apiStatsNotice.enabled?"已启用":"已禁用"),1)])]),g(b).apiStatsNotice.enabled?(n(),o("div",Ot,[t("div",null,[e[67]||(e[67]=t("label",{class:"mb-1 block text-xs text-gray-500 dark:text-gray-400"}," 标题 ",-1)),d(t("input",{"onUpdate:modelValue":e[8]||(e[8]=r=>g(b).apiStatsNotice.title=r),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"通知标题",type:"text"},null,512),[[p,g(b).apiStatsNotice.title]])]),t("div",null,[e[68]||(e[68]=t("label",{class:"mb-1 block text-xs text-gray-500 dark:text-gray-400"}," 内容 ",-1)),d(t("textarea",{"onUpdate:modelValue":e[9]||(e[9]=r=>g(b).apiStatsNotice.content=r),class:"form-input w-full max-w-md resize-none dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"2000",placeholder:"通知内容(支持换行)",rows:"3"},null,512),[[p,g(b).apiStatsNotice.content]])])])):x("",!0)])]),t("tr",null,[t("td",Wt,[t("div",zt,[t("div",Kt,[t("button",{class:E(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":g(I)}]),disabled:g(I),onClick:fe},[g(I)?(n(),o("div",$t)):(n(),o("i",Gt)),l(" "+v(g(I)?"保存中...":"保存设置"),1)],10,Ft),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:g(I),onClick:ce},e[70]||(e[70]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,Ht)]),g(b).updatedAt?(n(),o("div",Yt,[e[71]||(e[71]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+v(g(J)(g(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",Jt,[t("div",Xt,[e[72]||(e[72]=A('',1)),d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=r=>g(b).siteName=r),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,g(b).siteName]])]),t("div",Zt,[e[76]||(e[76]=A('',1)),t("div",_t,[g(b).siteIconData||g(b).siteIcon?(n(),o("div",ea,[t("img",{alt:"图标预览",class:"h-8 w-8",src:g(b).siteIconData||g(b).siteIcon,onError:pe},null,40,ta),e[73]||(e[73]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:xe}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:be},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[11]||(e[11]=r=>a.$refs.iconFileInputMobile.click())},e[74]||(e[74]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[75]||(e[75]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",aa,[e[79]||(e[79]=A('',1)),t("div",ra,[t("label",sa,[d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=r=>P.value=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,P.value]]),e[77]||(e[77]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",la,v(P.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[78]||(e[78]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",oa,[t("div",na,[t("button",{class:E(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":g(I)}]),disabled:g(I),onClick:fe},[g(I)?(n(),o("div",ia)):(n(),o("i",ua)),l(" "+v(g(I)?"保存中...":"保存设置"),1)],10,da),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:g(I),onClick:ce},e[80]||(e[80]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,ga),g(b).updatedAt?(n(),o("div",fa,[e[81]||(e[81]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+v(g(J)(g(b).updatedAt)),1)])):x("",!0)])])])],512),[[X,w.value==="branding"]]),d(t("div",null,[t("div",ca,[t("div",ba,[e[83]||(e[83]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",xa,[d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=r=>S.value.enabled=r),class:"peer sr-only",type:"checkbox",onChange:G},null,544),[[Q,S.value.enabled]]),e[82]||(e[82]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",pa,[e[85]||(e[85]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",ya,[(n(!0),o(Z,null,le(S.value.notificationTypes,(r,c)=>(n(),o("div",{key:c,class:"flex items-center justify-between"},[t("div",null,[t("span",va,v(Ke(c)),1),t("span",ma,v(Fe(c)),1)]),t("label",ka,[d(t("input",{"onUpdate:modelValue":y=>S.value.notificationTypes[c]=y,class:"peer sr-only",type:"checkbox",onChange:G},null,40,wa),[[Q,S.value.notificationTypes[c]]]),e[84]||(e[84]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",ha,[t("div",Sa,[e[87]||(e[87]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[14]||(e[14]=r=>L.value=!0)},e[86]||(e[86]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),S.value.platforms&&S.value.platforms.length>0?(n(),o("div",Ca,[(n(!0),o(Z,null,le(S.value.platforms,r=>(n(),o("div",{key:r.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",Ta,[t("div",Ua,[t("div",Aa,[t("i",{class:E(["mr-3 text-xl",We(r.type)])},null,2),t("div",null,[t("h3",Ma,v(r.name||ue(r.type)),1),t("p",Ia,v(ue(r.type)),1)])]),t("div",Ba,[r.type!=="smtp"&&r.type!=="telegram"?(n(),o("div",Ea,[e[88]||(e[88]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Ra,v(r.url),1)])):x("",!0),r.type==="telegram"?(n(),o("div",Va,[e[89]||(e[89]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",Da,"Chat ID: "+v(r.chatId||"未配置"),1)])):x("",!0),r.type==="telegram"&&r.botToken?(n(),o("div",Qa,[e[90]||(e[90]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",qa,"Token: "+v(ze(r.botToken)),1)])):x("",!0),r.type==="telegram"&&r.apiBaseUrl?(n(),o("div",Pa,[e[91]||(e[91]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",ja,"API: "+v(r.apiBaseUrl),1)])):x("",!0),r.type==="telegram"&&r.proxyUrl?(n(),o("div",Na,[e[92]||(e[92]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",La,"代理: "+v(r.proxyUrl),1)])):x("",!0),r.type==="smtp"&&r.to?(n(),o("div",Oa,[e[93]||(e[93]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",Wa,v(Array.isArray(r.to)?r.to.join(", "):r.to),1)])):x("",!0),r.enableSign?(n(),o("div",za,e[94]||(e[94]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",Ka,[t("label",Fa,[t("input",{checked:r.enabled,class:"peer sr-only",type:"checkbox",onChange:c=>je(r.id)},null,40,$a),e[95]||(e[95]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:c=>Ne(r)},e[96]||(e[96]=[t("i",{class:"fas fa-vial"},null,-1)]),8,Ga),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:c=>qe(r)},e[97]||(e[97]=[t("i",{class:"fas fa-edit"},null,-1)]),8,Ha),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:c=>Pe(r.id)},e[98]||(e[98]=[t("i",{class:"fas fa-trash"},null,-1)]),8,Ya)])])]))),128))])):(n(),o("div",Ja,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",Xa,[e[102]||(e[102]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",Za,[t("div",null,[e[99]||(e[99]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=r=>S.value.retrySettings.maxRetries=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[100]||(e[100]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=r=>S.value.retrySettings.retryDelay=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=r=>S.value.retrySettings.timeout=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Oe},e[103]||(e[103]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[X,w.value==="webhook"]]),d(t("div",null,[re.value?(n(),o("div",_a,e[104]||(e[104]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(n(),o("div",er,[t("div",tr,[t("div",ar,[e[106]||(e[106]=A('
仅允许 Claude Code 客户端
启用后,所有 /api/v1/messages 和 /claude/v1/messages 端点将强制验证 Claude Code CLI 客户端
',1)),t("label",rr,[d(t("input",{"onUpdate:modelValue":e[18]||(e[18]=r=>u.value.claudeCodeOnlyEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.claudeCodeOnlyEnabled]]),e[105]||(e[105]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[107]||(e[107]=A(' 此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。
',1))]),t("div",sr,[t("div",lr,[e[109]||(e[109]=A('
强制会话绑定
启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性
',1)),t("label",or,[d(t("input",{"onUpdate:modelValue":e[19]||(e[19]=r=>u.value.globalSessionBindingEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.globalSessionBindingEnabled]]),e[108]||(e[108]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),u.value.globalSessionBindingEnabled?(n(),o("div",nr,[t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),d(t("input",{"onUpdate:modelValue":e[20]||(e[20]=r=>u.value.sessionBindingTtlDays=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,u.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[112]||(e[112]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),d(t("textarea",{"onUpdate:modelValue":e[21]||(e[21]=r=>u.value.sessionBindingErrorMessage=r),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,u.value.sessionBindingErrorMessage]]),e[113]||(e[113]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[114]||(e[114]=A('工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。
新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。
',1))]),t("div",dr,[t("div",ir,[e[116]||(e[116]=A('
用户消息串行队列
启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流
',1)),t("label",ur,[d(t("input",{"onUpdate:modelValue":e[22]||(e[22]=r=>u.value.userMessageQueueEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.userMessageQueueEnabled]]),e[115]||(e[115]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),u.value.userMessageQueueEnabled?(n(),o("div",gr,[t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=r=>u.value.userMessageQueueDelayMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,u.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=r=>u.value.userMessageQueueTimeoutMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,u.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[121]||(e[121]=A('工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。
',1))]),t("div",fr,[t("div",cr,[e[123]||(e[123]=A('
并发请求排队
当 API Key 并发请求超限时进入队列等待,而非直接拒绝
',1)),t("label",br,[d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=r=>u.value.concurrentRequestQueueEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.concurrentRequestQueueEnabled]]),e[122]||(e[122]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),u.value.concurrentRequestQueueEnabled?(n(),o("div",xr,[t("div",null,[e[124]||(e[124]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=r=>u.value.concurrentRequestQueueMaxSize=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[125]||(e[125]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[126]||(e[126]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=r=>u.value.concurrentRequestQueueMaxSizeMultiplier=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[127]||(e[127]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[128]||(e[128]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=r=>u.value.concurrentRequestQueueTimeoutMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[129]||(e[129]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[130]||(e[130]=A('工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。
',1))]),u.value.updatedAt?(n(),o("div",pr,[e[133]||(e[133]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+v(g(J)(u.value.updatedAt))+" ",1),u.value.updatedBy?(n(),o("span",yr,[e[131]||(e[131]=l(" 由 ",-1)),t("strong",null,v(u.value.updatedBy),1),e[132]||(e[132]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[X,w.value==="claude"]]),d(t("div",null,[se.value?(n(),o("div",vr,e[134]||(e[134]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(n(),o("div",mr,[t("div",kr,[t("div",wr,[e[138]||(e[138]=t("div",{class:"mr-4 flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-blue-500 text-white"},[t("i",{class:"fas fa-info"})],-1)),t("div",null,[e[137]||(e[137]=t("h3",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"}," 服务倍率说明 ",-1)),t("p",hr,[e[135]||(e[135]=l(" 服务倍率用于计算不同服务的计费费用。以 ",-1)),t("strong",null,v(U.value.baseService||"claude"),1),e[136]||(e[136]=l(" 为基准(倍率 1.0),其他服务按倍率换算。例如:Gemini 倍率 0.5 表示消耗 $1 只扣除 $0.5 额度。 ",-1))])])])]),t("div",Sr,[t("div",Cr,[e[140]||(e[140]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},[t("i",{class:"fas fa-sliders-h mr-2 text-blue-500"}),l(" 倍率配置 ")],-1)),t("button",{class:"rounded-lg bg-blue-500 px-4 py-2 text-sm font-medium text-white hover:bg-blue-600 disabled:opacity-50",disabled:H.value,onClick:Be},[e[139]||(e[139]=t("i",{class:"fas fa-save mr-2"},null,-1)),l(" "+v(H.value?"保存中...":"保存配置"),1)],8,Tr)]),t("div",Ur,[(n(!0),o(Z,null,le(U.value.rates,(r,c)=>(n(),o("div",{key:c,class:"flex items-center justify-between rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",Ar,[t("div",{class:E(["mr-3 flex h-10 w-10 items-center justify-center rounded-lg",Re(c)])},[t("i",{class:E(["text-white",Ee(c)])},null,2)],2),t("div",null,[t("div",Mr,v(Ve(c)),1),t("div",Ir,[l(v(c)+" ",1),c===U.value.baseService?(n(),o("span",Br," 基准服务 ")):x("",!0)])])]),t("div",Er,[d(t("input",{"onUpdate:modelValue":y=>U.value.rates[c]=y,class:"w-24 rounded-lg border border-gray-300 px-3 py-2 text-center text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"10",min:"0.1",step:"0.1",type:"number"},null,8,Rr),[[p,U.value.rates[c],void 0,{number:!0}]]),e[141]||(e[141]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"倍",-1))])]))),128))]),U.value.updatedAt?(n(),o("div",Vr,[e[144]||(e[144]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+v(g(J)(U.value.updatedAt))+" ",1),U.value.updatedBy?(n(),o("span",Dr,[e[142]||(e[142]=l(" 由 ",-1)),t("strong",null,v(U.value.updatedBy),1),e[143]||(e[143]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)])]))],512),[[X,w.value==="serviceRates"]])]))])]),L.value?(n(),o("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:Y},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[50]||(e[50]=Ze(()=>{},["stop"]))},[t("div",Qr,[t("div",qr,[t("div",Pr,[e[146]||(e[146]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",jr,v(B.value?"编辑":"添加")+"通知平台 ",1),t("p",Nr," 配置"+v(B.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Y},e[147]||(e[147]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Lr,[t("div",Or,[t("div",null,[e[151]||(e[151]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",Wr,[d(t("select",{"onUpdate:modelValue":e[29]||(e[29]=r=>s.value.type=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:B.value},e[148]||(e[148]=[A('',9)]),8,zr),[[_,s.value.type]]),e[149]||(e[149]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),B.value?(n(),o("p",Kr,e[150]||(e[150]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=r=>s.value.name=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,s.value.name]])]),s.value.type!=="bark"&&s.value.type!=="smtp"&&s.value.type!=="telegram"?(n(),o("div",Fr,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",$r,[d(t("input",{"onUpdate:modelValue":e[31]||(e[31]=r=>s.value.url=r),class:E(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":V.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":q.value}]),placeholder:"https://...",required:"",type:"url",onInput:De},null,34),[[p,s.value.url]]),q.value?(n(),o("div",Gr,e[153]||(e[153]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),V.value?(n(),o("div",Hr,e[154]||(e[154]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),ge(s.value.type)?(n(),o("div",Yr,[e[155]||(e[155]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",Jr,v(ge(s.value.type)),1)])):x("",!0)])):x("",!0),s.value.type==="telegram"?(n(),o("div",Xr,[t("div",null,[e[157]||(e[157]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=r=>s.value.botToken=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,s.value.botToken]]),e[158]||(e[158]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[33]||(e[33]=r=>s.value.chatId=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,s.value.chatId]]),e[160]||(e[160]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[34]||(e[34]=r=>s.value.apiBaseUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,s.value.apiBaseUrl]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=r=>s.value.proxyUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,s.value.proxyUrl]]),e[164]||(e[164]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[165]||(e[165]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),s.value.type==="bark"?(n(),o("div",Zr,[t("div",null,[e[166]||(e[166]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[36]||(e[36]=r=>s.value.deviceKey=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,s.value.deviceKey]]),e[167]||(e[167]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[168]||(e[168]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[37]||(e[37]=r=>s.value.serverUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,s.value.serverUrl]])]),t("div",null,[e[170]||(e[170]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),d(t("select",{"onUpdate:modelValue":e[38]||(e[38]=r=>s.value.level=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[169]||(e[169]=[A('',5)]),512),[[_,s.value.level]])]),t("div",null,[e[172]||(e[172]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),d(t("select",{"onUpdate:modelValue":e[39]||(e[39]=r=>s.value.sound=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[171]||(e[171]=[A('',9)]),512),[[_,s.value.sound]])]),t("div",null,[e[173]||(e[173]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[40]||(e[40]=r=>s.value.group=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,s.value.group]])]),e[174]||(e[174]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),s.value.type==="smtp"?(n(),o("div",_r,[t("div",null,[e[175]||(e[175]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[41]||(e[41]=r=>s.value.host=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,s.value.host]])]),t("div",es,[t("div",null,[e[176]||(e[176]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),d(t("input",{"onUpdate:modelValue":e[42]||(e[42]=r=>s.value.port=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,s.value.port,void 0,{number:!0}]]),e[177]||(e[177]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[179]||(e[179]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),d(t("select",{"onUpdate:modelValue":e[43]||(e[43]=r=>s.value.secure=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[178]||(e[178]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[_,s.value.secure]])])]),t("div",null,[e[180]||(e[180]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[44]||(e[44]=r=>s.value.user=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,s.value.user]])]),t("div",null,[e[181]||(e[181]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[45]||(e[45]=r=>s.value.pass=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,s.value.pass]]),e[182]||(e[182]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[183]||(e[183]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[46]||(e[46]=r=>s.value.from=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,s.value.from]])]),t("div",null,[e[184]||(e[184]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[47]||(e[47]=r=>s.value.to=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,s.value.to]]),e[185]||(e[185]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),s.value.type==="dingtalk"||s.value.type==="feishu"?(n(),o("div",ts,[t("div",as,[t("div",rs,[t("label",ss,[d(t("input",{id:"enableSign","onUpdate:modelValue":e[48]||(e[48]=r=>s.value.enableSign=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[Q,s.value.enableSign]]),e[186]||(e[186]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),s.value.enableSign?(n(),o("span",ls," 已启用 ")):x("",!0)]),Ue(Xe,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:Je(()=>[s.value.enableSign?(n(),o("div",os,[e[187]||(e[187]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),d(t("input",{"onUpdate:modelValue":e[49]||(e[49]=r=>s.value.secret=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,s.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ns,[t("div",ds,[e[189]||(e[189]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",is,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Y},e[188]||(e[188]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:j.value,onClick:Le},[t("i",{class:E(["mr-2 transition-transform",j.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+v(j.value?"测试中...":"测试连接"),1)],8,us),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!Me.value||N.value,onClick:Qe},[t("i",{class:E(["mr-2 transition-transform",N.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+v(N.value?"保存中...":B.value?"保存修改":"添加平台"),1)],8,gs)])])])]),Ue(ct,{"cancel-text":m.value.cancelText,"confirm-text":m.value.confirmText,message:m.value.message,show:z.value,title:m.value.title,type:m.value.type,onCancel:te,onConfirm:F},null,8,["cancel-text","confirm-text","message","show","title","type"])])):x("",!0)],64))}}),vs=tt(fs,[["__scopeId","data-v-9495fcfd"]]);export{vs as default};
diff --git a/assets/SettingsView-Bzv2bCHm.js b/assets/SettingsView-Bzv2bCHm.js
deleted file mode 100644
index 0f17bd92..00000000
--- a/assets/SettingsView-Bzv2bCHm.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{aP as Ae,r as S,aX as De,c as be,o as xe,q as Ve,Z as Qe,x as d,z as t,L as x,C as R,O as l,u as f,K as o,S as J,aq as p,al as q,P as m,aT as U,Q as Y,ac as pe,aV as z,R as Re,J as qe,T as je,Y as Pe,y as i}from"./vue-vendor-R8HMg95E.js";import{c as I,_ as Le,s as g}from"./index-B3t2NHq9.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const Oe=Ae("settings",()=>{const M=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null}),A=S(!1),L=S(!1),B=async()=>{A.value=!0;try{const c=await I.get("/admin/oem-settings");return c&&c.success&&(M.value={...M.value,...c.data},T()),c}catch(c){throw console.error("Failed to load OEM settings:",c),c}finally{A.value=!1}},b=async c=>{L.value=!0;try{const y=await I.put("/admin/oem-settings",c);return y&&y.success&&(M.value={...M.value,...y.data},T()),y}catch(y){throw console.error("Failed to save OEM settings:",y),y}finally{L.value=!1}},$=async()=>{const c={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null};return M.value={...c},await b(c)},T=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const c=document.querySelector('link[rel="icon"]')||document.createElement("link");c.rel="icon",c.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(c)}};return{oemSettings:M,loading:A,saving:L,loadOemSettings:B,saveOemSettings:b,resetOemSettings:$,applyOemSettings:T,formatDateTime:c=>c?new Date(c).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:c=>{const y=[];return c.size>350*1024&&y.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(c.type)||y.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:y.length===0,errors:y}},fileToBase64:c=>new Promise((y,Q)=>{const V=new FileReader;V.onload=O=>y(O.target.result),V.onerror=Q,V.readAsDataURL(c)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},Ke={class:"mb-6"},We={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},$e={key:1},He={class:"table-container hidden sm:block"},Xe={class:"min-w-full"},Je={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ye={class:"table-row"},Ge={class:"px-6 py-4"},Ze={class:"table-row"},_e={class:"px-6 py-4"},et={class:"space-y-3"},tt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],rt={class:"table-row"},st={class:"px-6 py-4"},lt={class:"flex items-center"},ot={class:"inline-flex cursor-pointer items-center"},nt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},dt={class:"px-6 py-6",colspan:"2"},it={class:"flex items-center justify-between"},ut={class:"flex gap-3"},gt=["disabled"],ct={key:0,class:"loading-spinner mr-2"},ft={key:1,class:"fas fa-save mr-2"},bt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},pt={class:"space-y-4 sm:hidden"},yt={class:"glass-card p-4"},vt={class:"glass-card p-4"},mt={class:"space-y-3"},kt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ht=["src"],wt={class:"glass-card p-4"},St={class:"space-y-2"},Tt={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ut={class:"glass-card p-4"},Mt={class:"flex flex-col gap-3"},It=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},At=["disabled"],Dt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Vt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qt={class:"flex items-center justify-between"},Rt={class:"relative inline-flex cursor-pointer items-center"},qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Pt={class:"font-medium text-gray-700 dark:text-gray-300"},Lt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kt={class:"mb-4 flex items-center justify-between"},Wt={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},$t={class:"flex-1"},Ht={class:"flex items-center"},Xt={class:"font-semibold text-gray-800 dark:text-gray-200"},Jt={class:"text-sm text-gray-500 dark:text-gray-400"},Yt={class:"mt-3 space-y-1 text-sm"},Gt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Zt={class:"truncate"},_t={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},ea={class:"truncate"},ta={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},aa={class:"truncate"},ra={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},sa={class:"truncate"},la={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},oa={class:"truncate"},na={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},da={class:"truncate"},ia={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},ua={class:"ml-4 flex items-center space-x-2"},ga={class:"relative inline-flex cursor-pointer items-center"},ca=["checked","onChange"],fa=["onClick"],ba=["onClick"],xa=["onClick"],pa={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},ya={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},va={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},ma={key:0,class:"py-12 text-center"},ka={key:1},ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},wa={class:"flex items-center justify-between"},Sa={class:"relative inline-flex cursor-pointer items-center"},Ta={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ca={class:"flex items-center justify-between"},Ua={class:"relative inline-flex cursor-pointer items-center"},Ma={key:0,class:"mt-6 space-y-4"},Ia={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ba={class:"flex items-center justify-between"},Ea={class:"relative inline-flex cursor-pointer items-center"},Aa={key:0,class:"mt-6 space-y-4"},Da={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Va={class:"flex items-center justify-between"},Qa={class:"relative inline-flex cursor-pointer items-center"},Ra={key:0,class:"mt-6 space-y-4"},qa={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},ja={key:0,class:"ml-2"},Pa={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},La={class:"flex items-center justify-between"},Oa={class:"flex items-center space-x-3"},Fa={class:"text-xl font-semibold text-gray-900 dark:text-white"},Na={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Ka={class:"p-6"},Wa={class:"space-y-5"},za={class:"relative"},$a=["disabled"],Ha={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Xa={key:0},Ja={class:"relative"},Ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Ga={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Za={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},_a={class:"text-sm text-blue-700 dark:text-blue-300"},er={key:1,class:"space-y-5"},tr={key:2,class:"space-y-5"},ar={key:3,class:"space-y-5"},rr={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sr={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},lr={class:"space-y-4"},or={class:"flex items-center justify-between"},nr={class:"flex cursor-pointer items-center",for:"enableSign"},dr={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},ir={key:0},ur={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},gr={class:"flex items-center justify-between"},cr={class:"flex space-x-3"},fr=["disabled"],br=["disabled"],xr=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const A=Oe(),{loading:L,saving:B,oemSettings:b}=De(A),$=S(),T=S("branding"),u=S(!0),C=S(new AbortController),j=be({get(){return!b.value.showAdminButton},set(r){b.value.showAdminButton=!r}}),c=S(!1),y=S(!1),Q=S(!1),V=S(!1),O={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...O},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),H=S(!1),n=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),P=S(!1),E=S(null),a=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),G=xe(T,async r=>{u.value&&(r==="webhook"?await F():r==="claude"&&await ve())}),Z=xe(()=>a.value.type,r=>{c.value=!1,y.value=!1,E.value||(r==="bark"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1):r==="smtp"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):r==="telegram"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):(a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""))}),ye=be(()=>a.value.type==="bark"?!!a.value.deviceKey:a.value.type==="telegram"?!!(a.value.botToken&&a.value.chatId):a.value.type==="smtp"?!!(a.value.host&&a.value.user&&a.value.pass&&a.value.to):!!a.value.url&&!c.value);Ve(async()=>{try{await A.loadOemSettings(),T.value==="webhook"&&await F()}catch{g("加载设置失败","error")}}),Qe(()=>{u.value=!1,C.value&&C.value.abort(),G&&G(),Z&&Z(),P.value&&(P.value=!1,E.value=null)});const F=async()=>{if(u.value)try{const r=await I.get("/admin/webhook/config",{signal:C.value.signal});if(r.success&&u.value){const e=r.config||{};k.value={...e,notificationTypes:{...O,...e.notificationTypes||{}}}}}catch(r){if(r.name==="AbortError"||!u.value)return;g("获取webhook配置失败","error"),console.error(r)}},N=async()=>{if(u.value)try{const r={...k.value,notificationTypes:{...O,...k.value.notificationTypes||{}}};(await I.post("/admin/webhook/config",r,{signal:C.value.signal})).success&&u.value&&(k.value=r,g("配置已保存","success"))}catch(r){if(r.name==="AbortError"||!u.value)return;g("保存配置失败","error"),console.error(r)}},ve=async()=>{var r,e,s,v,h,W,ne,de,ie,ue,ge,ce,fe;if(u.value){H.value=!0;try{const w=await I.get("/admin/claude-relay-config",{signal:C.value.signal});w.success&&u.value&&(n.value={claudeCodeOnlyEnabled:((r=w.config)==null?void 0:r.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((s=w.config)==null?void 0:s.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((v=w.config)==null?void 0:v.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((W=w.config)==null?void 0:W.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ne=w.config)==null?void 0:ne.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((de=w.config)==null?void 0:de.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ie=w.config)==null?void 0:ie.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ue=w.config)==null?void 0:ue.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ge=w.config)==null?void 0:ge.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((ce=w.config)==null?void 0:ce.updatedAt)||null,updatedBy:((fe=w.config)==null?void 0:fe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!u.value)return;g("获取 Claude 转发配置失败","error"),console.error(w)}finally{u.value&&(H.value=!1)}}},D=async()=>{var r,e;if(u.value)try{const s={claudeCodeOnlyEnabled:n.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:n.value.globalSessionBindingEnabled,sessionBindingErrorMessage:n.value.sessionBindingErrorMessage,sessionBindingTtlDays:n.value.sessionBindingTtlDays,userMessageQueueEnabled:n.value.userMessageQueueEnabled,userMessageQueueDelayMs:n.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:n.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:n.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:n.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:n.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:n.value.concurrentRequestQueueTimeoutMs},v=await I.put("/admin/claude-relay-config",s,{signal:C.value.signal});v.success&&u.value&&(n.value={...n.value,updatedAt:((r=v.config)==null?void 0:r.updatedAt)||new Date().toISOString(),updatedBy:((e=v.config)==null?void 0:e.updatedBy)||null},g("Claude 转发配置已保存","success"))}catch(s){if(s.name==="AbortError"||!u.value)return;g("保存 Claude 转发配置失败","error"),console.error(s)}},me=()=>{if(["bark","smtp","telegram"].includes(a.value.type)){c.value=!1,y.value=!1;return}const r=a.value.url;if(!r){c.value=!1,y.value=!1;return}try{new URL(r),r.startsWith("http://")||r.startsWith("https://")?(c.value=!1,y.value=!0):(c.value=!0,y.value=!1)}catch{c.value=!0,y.value=!1}},_=()=>{if(a.value.type==="bark"){if(!a.value.deviceKey)return g("请输入Bark设备密钥","error"),!1}else if(a.value.type==="telegram"){if(!a.value.botToken)return g("请输入 Telegram 机器人 Token","error"),!1;if(!a.value.chatId)return g("请输入 Telegram Chat ID","error"),!1;if(a.value.apiBaseUrl)try{const r=new URL(a.value.apiBaseUrl);if(!["http:","https:"].includes(r.protocol))return g("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return g("请输入有效的 Telegram API 基础地址","error"),!1}if(a.value.proxyUrl)try{const r=new URL(a.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(r.protocol))return g("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return g("请输入有效的 Telegram 代理地址","error"),!1}}else if(a.value.type==="smtp"){const r=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:s}of r)if(!a.value[e])return g(`请输入${s}`,"error"),!1}else{if(!a.value.url)return g("请输入Webhook URL","error"),!1;if(c.value)return g("请输入有效的Webhook URL","error"),!1}return!0},ke=async()=>{if(u.value&&_()){V.value=!0;try{let r;E.value?r=await I.put(`/admin/webhook/platforms/${E.value.id}`,a.value,{signal:C.value.signal}):r=await I.post("/admin/webhook/platforms",a.value,{signal:C.value.signal}),r.success&&u.value&&(g(E.value?"平台已更新":"平台已添加","success"),await F(),K())}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.message||"操作失败","error"),console.error(r)}finally{u.value&&(V.value=!1)}}},he=r=>{E.value=r,a.value={type:r.type||"wechat_work",name:r.name||"",url:r.url||"",enableSign:r.enableSign||!1,secret:r.secret||"",botToken:r.botToken||"",chatId:r.chatId||"",apiBaseUrl:r.apiBaseUrl||"",proxyUrl:r.proxyUrl||"",deviceKey:r.deviceKey||"",serverUrl:r.serverUrl||"",level:r.level||"",sound:r.sound||"",group:r.group||"",host:r.host||"",port:r.port??null,secure:r.secure||!1,user:r.user||"",pass:r.pass||"",from:r.from||"",to:Array.isArray(r.to)?r.to.join(", "):r.to||"",timeout:r.timeout??null,ignoreTLS:r.ignoreTLS||!1},P.value=!0},we=async r=>{if(u.value&&confirm("确定要删除这个平台吗?"))try{(await I.delete(`/admin/webhook/platforms/${r}`,{signal:C.value.signal})).success&&u.value&&(g("平台已删除","success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("删除失败","error"),console.error(e)}},Se=async r=>{if(u.value)try{const e=await I.post(`/admin/webhook/platforms/${r}/toggle`,{},{signal:C.value.signal});e.success&&u.value&&(g(e.message,"success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("操作失败","error"),console.error(e)}},Te=async r=>{if(u.value)try{const e={type:r.type,secret:r.secret,enableSign:r.enableSign};r.type==="bark"?(e.deviceKey=r.deviceKey,e.serverUrl=r.serverUrl,e.level=r.level,e.sound=r.sound,e.group=r.group):r.type==="smtp"?(e.host=r.host,e.port=r.port,e.secure=r.secure,e.user=r.user,e.pass=r.pass,e.from=r.from,e.to=r.to,e.ignoreTLS=r.ignoreTLS):r.type==="telegram"?(e.botToken=r.botToken,e.chatId=r.chatId,e.apiBaseUrl=r.apiBaseUrl,e.proxyUrl=r.proxyUrl):e.url=r.url,(await I.post("/admin/webhook/test",e,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(e){if(e.name==="AbortError"||!u.value)return;g(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(u.value&&_()){Q.value=!0;try{(await I.post("/admin/webhook/test",a.value,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.error||r.message||"测试失败","error"),console.error(r)}finally{u.value&&(Q.value=!1)}}},Ue=async()=>{var r,e,s,v;if(u.value)try{(await I.post("/admin/webhook/test-notification",{},{signal:C.value.signal})).success&&u.value&&g("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!u.value)return;const W=((e=(r=h==null?void 0:h.response)==null?void 0:r.data)==null?void 0:e.message)||((v=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:v.error)||(h==null?void 0:h.message)||"发送失败";g(W,"error"),console.error(h)}},K=()=>{u.value&&(P.value=!1,setTimeout(()=>{u.value&&(E.value=null,a.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},c.value=!1,y.value=!1,Q.value=!1,V.value=!1)},0))},ee=r=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[r]||r,Me=r=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[r]||"fas fa-bell",te=r=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[r]||"",Ie=r=>r?r.length<=12?r:`${r.slice(0,6)}...${r.slice(-4)}`:"",Be=r=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[r]||r,Ee=r=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[r]||"",ae=async()=>{try{const r={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton},e=await A.saveOemSettings(r);e&&e.success?g("OEM设置保存成功","success"):g((e==null?void 0:e.message)||"保存失败","error")}catch{g("保存OEM设置失败","error")}},re=async()=>{if(confirm(`确定要重置为默认设置吗?
-
-这将清除所有自定义的网站名称和图标设置。`))try{const r=await A.resetOemSettings();r&&r.success?g("已重置为默认设置","success"):g("重置失败","error")}catch{g("重置失败","error")}},se=async r=>{const e=r.target.files[0];if(!e)return;const s=A.validateIconFile(e);if(!s.isValid){s.errors.forEach(v=>g(v,"error"));return}try{const v=await A.fileToBase64(e);b.value.siteIconData=v}catch{g("文件读取失败","error")}r.target.value=""},le=()=>{b.value.siteIcon="",b.value.siteIconData=""},oe=()=>{console.warn("Icon failed to load")},X=A.formatDateTime;return(r,e)=>(i(),d(Y,null,[t("div",Fe,[t("div",Ne,[e[125]||(e[125]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",Ke,[t("nav",We,[t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=s=>T.value="branding")},e[47]||(e[47]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=s=>T.value="webhook")},e[48]||(e[48]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=s=>T.value="claude")},e[49]||(e[49]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2)])]),f(L)?(i(),d("div",ze,e[50]||(e[50]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(i(),d("div",$e,[o(t("div",null,[t("div",He,[t("table",Xe,[t("tbody",Je,[t("tr",Ye,[e[52]||(e[52]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ge,[o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f(b).siteName=s),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ze,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",_e,[t("div",et,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",tt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,at),e[54]||(e[54]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le},e[53]||(e[53]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:$,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[4]||(e[4]=s=>r.$refs.iconFileInput.click())},e[55]||(e[55]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[56]||(e[56]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",rt,[e[60]||(e[60]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",st,[t("div",lt,[t("label",ot,[o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[58]||(e[58]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",nt,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[59]||(e[59]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",dt,[t("div",it,[t("div",ut,[t("button",{class:R(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",ct)):(i(),d("i",ft)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,gt),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[61]||(e[61]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,bt)]),f(b).updatedAt?(i(),d("div",xt,[e[62]||(e[62]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",pt,[t("div",yt,[e[63]||(e[63]=U('',1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>f(b).siteName=s),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]])]),t("div",vt,[e[67]||(e[67]=U('',1)),t("div",mt,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",kt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,ht),e[64]||(e[64]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[7]||(e[7]=s=>r.$refs.iconFileInputMobile.click())},e[65]||(e[65]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[66]||(e[66]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",wt,[e[70]||(e[70]=U('',1)),t("div",St,[t("label",Tt,[o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[68]||(e[68]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[69]||(e[69]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Ut,[t("div",Mt,[t("button",{class:R(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",Bt)):(i(),d("i",Et)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,It),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[71]||(e[71]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,At),f(b).updatedAt?(i(),d("div",Dt,[e[72]||(e[72]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])],512),[[J,T.value==="branding"]]),o(t("div",null,[t("div",Vt,[t("div",Qt,[e[74]||(e[74]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",Rt,[o(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>k.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:N},null,544),[[q,k.value.enabled]]),e[73]||(e[73]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",qt,[e[76]||(e[76]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(i(!0),d(Y,null,pe(k.value.notificationTypes,(s,v)=>(i(),d("div",{key:v,class:"flex items-center justify-between"},[t("div",null,[t("span",Pt,m(Be(v)),1),t("span",Lt,m(Ee(v)),1)]),t("label",Ot,[o(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[v]=h,class:"peer sr-only",type:"checkbox",onChange:N},null,40,Ft),[[q,k.value.notificationTypes[v]]]),e[75]||(e[75]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[10]||(e[10]=s=>P.value=!0)},e[77]||(e[77]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(i(),d("div",Wt,[(i(!0),d(Y,null,pe(k.value.platforms,s=>(i(),d("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",$t,[t("div",Ht,[t("i",{class:R(["mr-3 text-xl",Me(s.type)])},null,2),t("div",null,[t("h3",Xt,m(s.name||ee(s.type)),1),t("p",Jt,m(ee(s.type)),1)])]),t("div",Yt,[s.type!=="smtp"&&s.type!=="telegram"?(i(),d("div",Gt,[e[79]||(e[79]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Zt,m(s.url),1)])):x("",!0),s.type==="telegram"?(i(),d("div",_t,[e[80]||(e[80]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",ea,"Chat ID: "+m(s.chatId||"未配置"),1)])):x("",!0),s.type==="telegram"&&s.botToken?(i(),d("div",ta,[e[81]||(e[81]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",aa,"Token: "+m(Ie(s.botToken)),1)])):x("",!0),s.type==="telegram"&&s.apiBaseUrl?(i(),d("div",ra,[e[82]||(e[82]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",sa,"API: "+m(s.apiBaseUrl),1)])):x("",!0),s.type==="telegram"&&s.proxyUrl?(i(),d("div",la,[e[83]||(e[83]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",oa,"代理: "+m(s.proxyUrl),1)])):x("",!0),s.type==="smtp"&&s.to?(i(),d("div",na,[e[84]||(e[84]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",da,m(Array.isArray(s.to)?s.to.join(", "):s.to),1)])):x("",!0),s.enableSign?(i(),d("div",ia,e[85]||(e[85]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",ua,[t("label",ga,[t("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:v=>Se(s.id)},null,40,ca),e[86]||(e[86]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:v=>Te(s)},e[87]||(e[87]=[t("i",{class:"fas fa-vial"},null,-1)]),8,fa),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:v=>he(s)},e[88]||(e[88]=[t("i",{class:"fas fa-edit"},null,-1)]),8,ba),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:v=>we(s.id)},e[89]||(e[89]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xa)])])]))),128))])):(i(),d("div",pa,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",ya,[e[93]||(e[93]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",va,[t("div",null,[e[90]||(e[90]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),o(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>k.value.retrySettings.maxRetries=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[91]||(e[91]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>k.value.retrySettings.retryDelay=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[92]||(e[92]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>k.value.retrySettings.timeout=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Ue},e[94]||(e[94]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[J,T.value==="webhook"]]),o(t("div",null,[H.value?(i(),d("div",ma,e[95]||(e[95]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(i(),d("div",ka,[t("div",ha,[t("div",wa,[e[97]||(e[97]=U('
仅允许 Claude Code 客户端
启用后,所有 /api/v1/messages 和 /claude/v1/messages 端点将强制验证 Claude Code CLI 客户端
',1)),t("label",Sa,[o(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>n.value.claudeCodeOnlyEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.claudeCodeOnlyEnabled]]),e[96]||(e[96]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[98]||(e[98]=U(' 此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。
',1))]),t("div",Ta,[t("div",Ca,[e[100]||(e[100]=U('
强制会话绑定
启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性
',1)),t("label",Ua,[o(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>n.value.globalSessionBindingEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.globalSessionBindingEnabled]]),e[99]||(e[99]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),n.value.globalSessionBindingEnabled?(i(),d("div",Ma,[t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),o(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>n.value.sessionBindingTtlDays=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,n.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[102]||(e[102]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[103]||(e[103]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),o(t("textarea",{"onUpdate:modelValue":e[17]||(e[17]=s=>n.value.sessionBindingErrorMessage=s),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,n.value.sessionBindingErrorMessage]]),e[104]||(e[104]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[105]||(e[105]=U('工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。
新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。
',1))]),t("div",Ia,[t("div",Ba,[e[107]||(e[107]=U('
用户消息串行队列
启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流
',1)),t("label",Ea,[o(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>n.value.userMessageQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.userMessageQueueEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),n.value.userMessageQueueEnabled?(i(),d("div",Aa,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[19]||(e[19]=s=>n.value.userMessageQueueDelayMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[20]||(e[20]=s=>n.value.userMessageQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[112]||(e[112]=U('工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。
',1))]),t("div",Da,[t("div",Va,[e[114]||(e[114]=U('
并发请求排队
当 API Key 并发请求超限时进入队列等待,而非直接拒绝
',1)),t("label",Qa,[o(t("input",{"onUpdate:modelValue":e[21]||(e[21]=s=>n.value.concurrentRequestQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.concurrentRequestQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),n.value.concurrentRequestQueueEnabled?(i(),d("div",Ra,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[22]||(e[22]=s=>n.value.concurrentRequestQueueMaxSize=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>n.value.concurrentRequestQueueMaxSizeMultiplier=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>n.value.concurrentRequestQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[121]||(e[121]=U('工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。
',1))]),n.value.updatedAt?(i(),d("div",qa,[e[124]||(e[124]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+m(f(X)(n.value.updatedAt))+" ",1),n.value.updatedBy?(i(),d("span",ja,[e[122]||(e[122]=l(" 由 ",-1)),t("strong",null,m(n.value.updatedBy),1),e[123]||(e[123]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[J,T.value==="claude"]])]))])]),P.value?(i(),d("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:K},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[46]||(e[46]=Pe(()=>{},["stop"]))},[t("div",Pa,[t("div",La,[t("div",Oa,[e[126]||(e[126]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",Fa,m(E.value?"编辑":"添加")+"通知平台 ",1),t("p",Na," 配置"+m(E.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:K},e[127]||(e[127]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Ka,[t("div",Wa,[t("div",null,[e[131]||(e[131]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",za,[o(t("select",{"onUpdate:modelValue":e[25]||(e[25]=s=>a.value.type=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:E.value},e[128]||(e[128]=[U('',9)]),8,$a),[[z,a.value.type]]),e[129]||(e[129]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),E.value?(i(),d("p",Ha,e[130]||(e[130]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[132]||(e[132]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>a.value.name=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,a.value.name]])]),a.value.type!=="bark"&&a.value.type!=="smtp"&&a.value.type!=="telegram"?(i(),d("div",Xa,[e[136]||(e[136]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",Ja,[o(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>a.value.url=s),class:R(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":c.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":y.value}]),placeholder:"https://...",required:"",type:"url",onInput:me},null,34),[[p,a.value.url]]),y.value?(i(),d("div",Ya,e[133]||(e[133]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),c.value?(i(),d("div",Ga,e[134]||(e[134]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),te(a.value.type)?(i(),d("div",Za,[e[135]||(e[135]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",_a,m(te(a.value.type)),1)])):x("",!0)])):x("",!0),a.value.type==="telegram"?(i(),d("div",er,[t("div",null,[e[137]||(e[137]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>a.value.botToken=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,a.value.botToken]]),e[138]||(e[138]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[139]||(e[139]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>a.value.chatId=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,a.value.chatId]]),e[140]||(e[140]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[141]||(e[141]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>a.value.apiBaseUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,a.value.apiBaseUrl]]),e[142]||(e[142]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[143]||(e[143]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[31]||(e[31]=s=>a.value.proxyUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,a.value.proxyUrl]]),e[144]||(e[144]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[145]||(e[145]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),a.value.type==="bark"?(i(),d("div",tr,[t("div",null,[e[146]||(e[146]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>a.value.deviceKey=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,a.value.deviceKey]]),e[147]||(e[147]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[33]||(e[33]=s=>a.value.serverUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,a.value.serverUrl]])]),t("div",null,[e[150]||(e[150]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),o(t("select",{"onUpdate:modelValue":e[34]||(e[34]=s=>a.value.level=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[149]||(e[149]=[U('',5)]),512),[[z,a.value.level]])]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),o(t("select",{"onUpdate:modelValue":e[35]||(e[35]=s=>a.value.sound=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[151]||(e[151]=[U('',9)]),512),[[z,a.value.sound]])]),t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[36]||(e[36]=s=>a.value.group=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,a.value.group]])]),e[154]||(e[154]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),a.value.type==="smtp"?(i(),d("div",ar,[t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[37]||(e[37]=s=>a.value.host=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,a.value.host]])]),t("div",rr,[t("div",null,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),o(t("input",{"onUpdate:modelValue":e[38]||(e[38]=s=>a.value.port=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,a.value.port,void 0,{number:!0}]]),e[157]||(e[157]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),o(t("select",{"onUpdate:modelValue":e[39]||(e[39]=s=>a.value.secure=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[158]||(e[158]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[z,a.value.secure]])])]),t("div",null,[e[160]||(e[160]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[40]||(e[40]=s=>a.value.user=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,a.value.user]])]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[41]||(e[41]=s=>a.value.pass=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,a.value.pass]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[42]||(e[42]=s=>a.value.from=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,a.value.from]])]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[43]||(e[43]=s=>a.value.to=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,a.value.to]]),e[165]||(e[165]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),a.value.type==="dingtalk"||a.value.type==="feishu"?(i(),d("div",sr,[t("div",lr,[t("div",or,[t("label",nr,[o(t("input",{id:"enableSign","onUpdate:modelValue":e[44]||(e[44]=s=>a.value.enableSign=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[q,a.value.enableSign]]),e[166]||(e[166]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),a.value.enableSign?(i(),d("span",dr," 已启用 ")):x("",!0)]),Re(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:qe(()=>[a.value.enableSign?(i(),d("div",ir,[e[167]||(e[167]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),o(t("input",{"onUpdate:modelValue":e[45]||(e[45]=s=>a.value.secret=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,a.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ur,[t("div",gr,[e[169]||(e[169]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",cr,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:K},e[168]||(e[168]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:Q.value,onClick:Ce},[t("i",{class:R(["mr-2 transition-transform",Q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+m(Q.value?"测试中...":"测试连接"),1)],8,fr),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ye.value||V.value,onClick:ke},[t("i",{class:R(["mr-2 transition-transform",V.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+m(V.value?"保存中...":E.value?"保存修改":"添加平台"),1)],8,br)])])])])])):x("",!0)],64))}}),kr=Le(xr,[["__scopeId","data-v-d2705d9a"]]);export{kr as default};
diff --git a/assets/SettingsView-CRb2BaAt.css b/assets/SettingsView-CRb2BaAt.css
deleted file mode 100644
index 72fd34b8..00000000
--- a/assets/SettingsView-CRb2BaAt.css
+++ /dev/null
@@ -1 +0,0 @@
-.settings-container[data-v-d2705d9a]{min-height:calc(100vh - 300px)}.card[data-v-d2705d9a]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-d2705d9a]{background:#1f2937;border:1px solid #374151;box-shadow:0 2px 12px #0000004d}.table-container[data-v-d2705d9a]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-d2705d9a]{border:1px solid #4b5563}.table-row[data-v-d2705d9a]{transition:background-color .2s ease}.table-row[data-v-d2705d9a]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-d2705d9a]:hover{background-color:#374151}.form-input[data-v-d2705d9a]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-d2705d9a]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-d2705d9a]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-d2705d9a]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-d2705d9a]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-d2705d9a]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-d2705d9a]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-d2705d9a]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-d2705d9a]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-d2705d9a]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-d2705d9a]{height:1.25rem;width:1.25rem}@keyframes spin-d2705d9a{to{transform:rotate(360deg)}}.loading-spinner[data-v-d2705d9a]{animation:spin-d2705d9a 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}
diff --git a/assets/SettingsView-D2Ttplqa.css b/assets/SettingsView-D2Ttplqa.css
new file mode 100644
index 00000000..7c6d05cd
--- /dev/null
+++ b/assets/SettingsView-D2Ttplqa.css
@@ -0,0 +1 @@
+.settings-container[data-v-9495fcfd]{min-height:calc(100vh - 300px)}.card[data-v-9495fcfd]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-9495fcfd]{background:var(--bg-gradient-start);border:1px solid var(--border-color);box-shadow:0 2px 12px #0000004d}.table-container[data-v-9495fcfd]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-9495fcfd]{border:1px solid var(--border-color)}.table-row[data-v-9495fcfd]{transition:background-color .2s ease}.table-row[data-v-9495fcfd]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-9495fcfd]:hover{background-color:var(--bg-gradient-mid)}.form-input[data-v-9495fcfd]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-9495fcfd]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-9495fcfd]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-9495fcfd]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-9495fcfd]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-9495fcfd]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-9495fcfd]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-9495fcfd]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-9495fcfd]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-9495fcfd]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-9495fcfd]{height:1.25rem;width:1.25rem}@keyframes spin-9495fcfd{to{transform:rotate(360deg)}}.loading-spinner[data-v-9495fcfd]{animation:spin-9495fcfd 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}
diff --git a/assets/ThemeToggle-BLLHl9nT.css b/assets/ThemeToggle-BLLHl9nT.css
deleted file mode 100644
index 7dbed9bc..00000000
--- a/assets/ThemeToggle-BLLHl9nT.css
+++ /dev/null
@@ -1 +0,0 @@
-.theme-toggle-container[data-v-78f09a8c]{position:relative;display:inline-flex;align-items:center}.theme-toggle-button[data-v-78f09a8c]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){background-color:#1f2937e6}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{border-width:1px;border-color:#e5e7eb80}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){border-color:#4b556380}.theme-toggle-button[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]{position:relative;overflow:hidden}.theme-toggle-button[data-v-78f09a8c]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle,rgba(59,130,246,.1),transparent);opacity:0;transition:opacity .2s ease;pointer-events:none}.theme-toggle-button[data-v-78f09a8c]:hover:before{opacity:1}.theme-toggle-button i[data-v-78f09a8c]{font-size:1rem;line-height:1.5rem;transition:transform .2s ease}.theme-toggle-button:hover i[data-v-78f09a8c]{transform:scale(1.1)}.theme-toggle-button i.fa-sun[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-moon[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-circle-half-stroke[data-v-78f09a8c]{background:linear-gradient(90deg,#60a5fa,#2563eb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.theme-switch-wrapper[data-v-78f09a8c]{display:inline-flex;align-items:center}.theme-switch[data-v-78f09a8c]{position:relative;width:76px;height:38px;border-radius:50px;padding:4px;cursor:pointer;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);background:linear-gradient(135deg,#667eea,#764ba2);border:2px solid rgba(255,255,255,.1);box-shadow:0 4px 15px #667eea4d,inset 0 1px 2px #0000001a;overflow:hidden;display:flex;align-items:center}.theme-switch[data-v-78f09a8c]:hover{transform:scale(1.05);box-shadow:0 6px 20px #667eea66,inset 0 1px 2px #0000001a}.theme-switch[data-v-78f09a8c]:active{transform:scale(.98)}.theme-switch.is-dark[data-v-78f09a8c]{background:linear-gradient(135deg,#1e293b,#334155);border-color:#94a3b833;box-shadow:0 4px 15px #00000080,inset 0 1px 2px #ffffff0d}.theme-switch.is-dark[data-v-78f09a8c]:hover{box-shadow:0 6px 20px #0009,inset 0 1px 2px #ffffff0d}.theme-switch.is-auto[data-v-78f09a8c]{background:linear-gradient(135deg,#c4b5fd,#a78bfa 15%,#818cf8 40%,#6366f1 60%,#4f46e5 85%,#4338ca);border-color:#fff3;position:relative;overflow:hidden;background-size:120% 120%;background-position:center;box-shadow:0 4px 15px #8b5cf640,inset 0 1px 3px #0000001a,inset 0 -1px 3px #0000001a}.theme-switch.is-auto[data-v-78f09a8c]:before{content:"";position:absolute;left:50%;top:10%;bottom:10%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent);transform:translate(-50%);pointer-events:none}.switch-bg[data-v-78f09a8c]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;pointer-events:none}.stars[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch.is-dark .stars[data-v-78f09a8c]{opacity:1}.stars span[data-v-78f09a8c]{position:absolute;display:block;width:2px;height:2px;background:#fff;border-radius:50%;opacity:.6}.stars span[data-v-78f09a8c]:nth-child(1){top:25%;left:20%}.stars span[data-v-78f09a8c]:nth-child(2){top:40%;left:40%;width:1.5px;height:1.5px}.stars span[data-v-78f09a8c]:nth-child(3){top:60%;left:25%}.clouds[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch:not(.is-dark):not(.is-auto) .clouds[data-v-78f09a8c]{opacity:.7}.clouds span[data-v-78f09a8c]{position:absolute;background:#ffffff4d;border-radius:100px}.clouds span[data-v-78f09a8c]:nth-child(1){width:20px;height:8px;top:40%;left:15%}.clouds span[data-v-78f09a8c]:nth-child(2){width:15px;height:6px;top:60%;left:35%}.switch-handle[data-v-78f09a8c]{position:absolute;width:30px;height:30px;background:#fff;border-radius:50%;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);box-shadow:0 2px 8px #0003,0 0 0 1px #0000000d;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%) translate(0);left:4px}.theme-switch.is-dark .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(38px);background:linear-gradient(135deg,#1e293b,#475569);box-shadow:0 2px 8px #0006,0 0 0 1px #ffffff1a}.theme-switch.is-auto .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(19px);background:#ffffff40;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.35);box-shadow:0 4px 12px #0000001a,inset 0 0 8px #ffffff40}.handle-icon[data-v-78f09a8c]{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.handle-icon i[data-v-78f09a8c]{font-size:14px;transition:all .3s ease}.handle-icon .fa-sun[data-v-78f09a8c]{color:#f59e0b;filter:drop-shadow(0 0 3px rgba(245,158,11,.5))}.handle-icon .fa-moon[data-v-78f09a8c]{color:#fbbf24;filter:drop-shadow(0 0 3px rgba(251,191,36,.5))}.handle-icon .fa-circle-half-stroke[data-v-78f09a8c]{color:#ffffffe6;filter:drop-shadow(0 0 4px rgba(167,139,250,.5));font-size:15px}.theme-segmented[data-v-78f09a8c]{display:inline-flex;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]{border-radius:9999px;padding:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment[data-v-78f09a8c]{padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-radius:9999px;display:flex;align-items:center;gap:.25rem;cursor:pointer;position:relative}.theme-segment[data-v-78f09a8c]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover{background-color:#ffffff4d}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){background-color:#4b55634d}.theme-segment[data-v-78f09a8c]:hover{transform:scale(1.02)}.theme-segment.active[data-v-78f09a8c]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment i[data-v-78f09a8c]{font-size:.75rem;line-height:1rem;transition:transform .2s ease}.fade-enter-active[data-v-78f09a8c],.fade-leave-active[data-v-78f09a8c]{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.fade-enter-from[data-v-78f09a8c],.fade-leave-to[data-v-78f09a8c]{opacity:0}.dropdown-enter-active[data-v-78f09a8c]{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.dropdown-leave-active[data-v-78f09a8c]{transition:all .2s cubic-bezier(.4,0,1,1)}.dropdown-enter-from[data-v-78f09a8c]{opacity:0;transform:translateY(-10px) scale(.95)}.dropdown-leave-to[data-v-78f09a8c]{opacity:0;transform:translateY(-5px) scale(.98)}@media (max-width: 640px){.theme-dropdown[data-v-78f09a8c]{left:0;right:auto}.theme-segment span[data-v-78f09a8c]{display:none}}
diff --git a/assets/ThemeToggle-DROshBR1.js b/assets/ThemeToggle-DROshBR1.js
new file mode 100644
index 00000000..00e2423a
--- /dev/null
+++ b/assets/ThemeToggle-DROshBR1.js
@@ -0,0 +1 @@
+import{r as L,c as x,q as B,V,x as o,y as s,L as u,z as e,R as _,u as l,B as h,J as f,T as v,C as m,Q as g,ac as k,P as p}from"./vue-vendor-DV7DYXbz.js";import{_ as z,a as E}from"./index-BahP9Xx9.js";const N={class:"theme-toggle-container"},O={key:0,class:"flex items-center gap-2"},q={class:"relative"},D=["title"],F={key:0,class:"color-menu"},I=["title","onClick"],J={class:"color-name"},P=["title"],Q={key:"sun",class:"fas fa-sun"},R={key:"moon",class:"fas fa-moon"},U={key:"auto",class:"fas fa-circle-half-stroke"},j={key:1,class:"theme-switch-wrapper"},A={class:"relative mr-3"},G=["title"],H={key:0,class:"color-menu"},K=["title","onClick"],W={class:"color-name"},X=["title"],Y={class:"switch-handle"},Z={class:"handle-icon"},ee={key:0,class:"fas fa-sun"},te={key:1,class:"fas fa-moon"},oe={key:2,class:"fas fa-circle-half-stroke"},se={key:2,class:"theme-segmented"},ae=["title","onClick"],le={key:0,class:"ml-1 hidden sm:inline"},ne={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:r=>["compact","dropdown","segmented"].includes(r)},showLabel:{type:Boolean,default:!1}},setup(r){const t=E(),i=L(!1),y=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],b=x(()=>{const n=y.find(d=>d.value===t.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),C=()=>{t.cycleThemeMode()},T=n=>{t.setThemeMode(n)},S=()=>{i.value=!i.value},w=n=>{t.setColorScheme(n),i.value=!1},M=n=>{!n.target.closest(".color-scheme-button")&&!n.target.closest(".color-scheme-button-lg")&&!n.target.closest(".color-menu")&&(i.value=!1)};return B(()=>{document.addEventListener("click",M)}),V(()=>{document.removeEventListener("click",M)}),(n,d)=>(s(),o("div",N,[r.mode==="compact"?(s(),o("div",O,[e("div",q,[e("button",{class:"color-scheme-button",title:`色系: ${l(t).currentColorScheme.name}`,onClick:S},[e("span",{class:"color-dot",style:h({background:l(t).currentColorScheme.primary})},null,4)],8,D),_(v,{name:"dropdown"},{default:f(()=>[i.value?(s(),o("div",F,[(s(!0),o(g,null,k(l(t).ColorSchemes,(a,c)=>(s(),o("button",{key:c,class:m(["color-option",{active:l(t).colorScheme===c}]),title:a.name,onClick:$=>w(c)},[e("span",{class:"color-preview",style:h({background:`linear-gradient(135deg, ${a.primary} 0%, ${a.secondary} 100%)`})},null,4),e("span",J,p(a.name),1)],10,I))),128))])):u("",!0)]),_:1})]),e("button",{class:"theme-toggle-button",title:b.value,onClick:C},[_(v,{mode:"out-in",name:"fade"},{default:f(()=>[l(t).themeMode==="light"?(s(),o("i",Q)):l(t).themeMode==="dark"?(s(),o("i",R)):(s(),o("i",U))]),_:1})],8,P)])):r.mode==="dropdown"?(s(),o("div",j,[e("div",A,[e("button",{class:"color-scheme-button-lg",title:`色系: ${l(t).currentColorScheme.name}`,onClick:S},[e("span",{class:"color-dot-lg",style:h({background:`linear-gradient(135deg, ${l(t).currentColorScheme.primary} 0%, ${l(t).currentColorScheme.secondary} 100%)`})},null,4),d[0]||(d[0]=e("i",{class:"fas fa-palette ml-1 text-xs opacity-60"},null,-1))],8,G),_(v,{name:"dropdown"},{default:f(()=>[i.value?(s(),o("div",H,[(s(!0),o(g,null,k(l(t).ColorSchemes,(a,c)=>(s(),o("button",{key:c,class:m(["color-option",{active:l(t).colorScheme===c}]),title:a.name,onClick:$=>w(c)},[e("span",{class:"color-preview",style:h({background:`linear-gradient(135deg, ${a.primary} 0%, ${a.secondary} 100%)`})},null,4),e("span",W,p(a.name),1)],10,K))),128))])):u("",!0)]),_:1})]),e("button",{class:m(["theme-switch",{"is-dark":l(t).themeMode==="dark","is-auto":l(t).themeMode==="auto"}]),title:b.value,onClick:C},[d[1]||(d[1]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",Y,[e("div",Z,[l(t).themeMode==="light"?(s(),o("i",ee)):l(t).themeMode==="dark"?(s(),o("i",te)):(s(),o("i",oe))])])],10,X)])):r.mode==="segmented"?(s(),o("div",se,[(s(),o(g,null,k(y,a=>e("button",{key:a.value,class:m(["theme-segment",{active:l(t).themeMode===a.value}]),title:a.label,onClick:c=>T(a.value)},[e("i",{class:m(a.icon)},null,2),r.showLabel?(s(),o("span",le,p(a.shortLabel),1)):u("",!0)],10,ae)),64))])):u("",!0)]))}},ie=z(ne,[["__scopeId","data-v-d25ea0ef"]]);export{ie as T};
diff --git a/assets/ThemeToggle-DRoGUDeP.js b/assets/ThemeToggle-DRoGUDeP.js
deleted file mode 100644
index de7d8941..00000000
--- a/assets/ThemeToggle-DRoGUDeP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-R8HMg95E.js";import{_ as T,a as w}from"./index-B3t2NHq9.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T};
diff --git a/assets/ThemeToggle-MCe3g2y3.css b/assets/ThemeToggle-MCe3g2y3.css
new file mode 100644
index 00000000..fb32f2f0
--- /dev/null
+++ b/assets/ThemeToggle-MCe3g2y3.css
@@ -0,0 +1 @@
+.theme-toggle-container[data-v-d25ea0ef]{position:relative;display:inline-flex;align-items:center}.theme-toggle-button[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.theme-toggle-button[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.theme-toggle-button[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-toggle-button[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-d25ea0ef]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-d25ea0ef]{position:relative;overflow:hidden}.theme-toggle-button[data-v-d25ea0ef]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle,rgba(59,130,246,.1),transparent);opacity:0;transition:opacity .2s ease;pointer-events:none}.theme-toggle-button[data-v-d25ea0ef]:hover:before{opacity:1}.theme-toggle-button i[data-v-d25ea0ef]{font-size:1rem;line-height:1.5rem;transition:transform .2s ease}.theme-toggle-button:hover i[data-v-d25ea0ef]{transform:scale(1.1)}.theme-toggle-button i.fa-sun[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-moon[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-circle-half-stroke[data-v-d25ea0ef]{background:linear-gradient(90deg,#60a5fa,#2563eb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.theme-switch-wrapper[data-v-d25ea0ef]{display:inline-flex;align-items:center}.theme-switch[data-v-d25ea0ef]{position:relative;width:76px;height:38px;border-radius:50px;padding:4px;cursor:pointer;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border:2px solid rgba(255,255,255,.1);box-shadow:0 4px 15px color-mix(in srgb,var(--primary-color) 30%,transparent),inset 0 1px 2px #0000001a;overflow:hidden;display:flex;align-items:center}.theme-switch[data-v-d25ea0ef]:hover{transform:scale(1.05);box-shadow:0 6px 20px color-mix(in srgb,var(--primary-color) 40%,transparent),inset 0 1px 2px #0000001a}.theme-switch[data-v-d25ea0ef]:active{transform:scale(.98)}.theme-switch.is-dark[data-v-d25ea0ef]{background:linear-gradient(135deg,#1e293b,#334155);border-color:#94a3b833;box-shadow:0 4px 15px #00000080,inset 0 1px 2px #ffffff0d}.theme-switch.is-dark[data-v-d25ea0ef]:hover{box-shadow:0 6px 20px #0009,inset 0 1px 2px #ffffff0d}.theme-switch.is-auto[data-v-d25ea0ef]{background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 70%,white) 0%,var(--accent-color) 25%,color-mix(in srgb,var(--primary-color) 80%,var(--accent-color)) 50%,var(--primary-color) 75%,var(--secondary-color) 100%);border-color:#fff3;position:relative;overflow:hidden;background-size:120% 120%;background-position:center;box-shadow:0 4px 15px color-mix(in srgb,var(--secondary-color) 25%,transparent),inset 0 1px 3px #0000001a,inset 0 -1px 3px #0000001a}.theme-switch.is-auto[data-v-d25ea0ef]:before{content:"";position:absolute;left:50%;top:10%;bottom:10%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent);transform:translate(-50%);pointer-events:none}.switch-bg[data-v-d25ea0ef]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;pointer-events:none}.stars[data-v-d25ea0ef]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch.is-dark .stars[data-v-d25ea0ef]{opacity:1}.stars span[data-v-d25ea0ef]{position:absolute;display:block;width:2px;height:2px;background:#fff;border-radius:50%;opacity:.6}.stars span[data-v-d25ea0ef]:nth-child(1){top:25%;left:20%}.stars span[data-v-d25ea0ef]:nth-child(2){top:40%;left:40%;width:1.5px;height:1.5px}.stars span[data-v-d25ea0ef]:nth-child(3){top:60%;left:25%}.clouds[data-v-d25ea0ef]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch:not(.is-dark):not(.is-auto) .clouds[data-v-d25ea0ef]{opacity:.7}.clouds span[data-v-d25ea0ef]{position:absolute;background:#ffffff4d;border-radius:100px}.clouds span[data-v-d25ea0ef]:nth-child(1){width:20px;height:8px;top:40%;left:15%}.clouds span[data-v-d25ea0ef]:nth-child(2){width:15px;height:6px;top:60%;left:35%}.switch-handle[data-v-d25ea0ef]{position:absolute;width:30px;height:30px;background:#fff;border-radius:50%;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);box-shadow:0 2px 8px #0003,0 0 0 1px #0000000d;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%) translate(0);left:4px}.theme-switch.is-dark .switch-handle[data-v-d25ea0ef]{transform:translateY(-50%) translate(38px);background:linear-gradient(135deg,#1e293b,#475569);box-shadow:0 2px 8px #0006,0 0 0 1px #ffffff1a}.theme-switch.is-auto .switch-handle[data-v-d25ea0ef]{transform:translateY(-50%) translate(19px);background:#ffffff40;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.35);box-shadow:0 4px 12px #0000001a,inset 0 0 8px #ffffff40}.handle-icon[data-v-d25ea0ef]{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.handle-icon i[data-v-d25ea0ef]{font-size:14px;transition:all .3s ease}.handle-icon .fa-sun[data-v-d25ea0ef]{color:#f59e0b;filter:drop-shadow(0 0 3px rgba(245,158,11,.5))}.handle-icon .fa-moon[data-v-d25ea0ef]{color:#fbbf24;filter:drop-shadow(0 0 3px rgba(251,191,36,.5))}.handle-icon .fa-circle-half-stroke[data-v-d25ea0ef]{color:#ffffffe6;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--accent-color) 50%,transparent));font-size:15px}.theme-segmented[data-v-d25ea0ef]{display:inline-flex;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-d25ea0ef]{border-radius:9999px;padding:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-d25ea0ef]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-d25ea0ef]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment[data-v-d25ea0ef]{padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-radius:9999px;display:flex;align-items:center;gap:.25rem;cursor:pointer;position:relative}.theme-segment[data-v-d25ea0ef]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:hover{background-color:#ffffff4d}.theme-segment[data-v-d25ea0ef]:hover:is(.dark *){background-color:#4b55634d}.theme-segment[data-v-d25ea0ef]:hover{transform:scale(1.02)}.theme-segment.active[data-v-d25ea0ef]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment i[data-v-d25ea0ef]{font-size:.75rem;line-height:1rem;transition:transform .2s ease}.fade-enter-active[data-v-d25ea0ef],.fade-leave-active[data-v-d25ea0ef]{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.fade-enter-from[data-v-d25ea0ef],.fade-leave-to[data-v-d25ea0ef]{opacity:0}.dropdown-enter-active[data-v-d25ea0ef]{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.dropdown-leave-active[data-v-d25ea0ef]{transition:all .2s cubic-bezier(.4,0,1,1)}.dropdown-enter-from[data-v-d25ea0ef]{opacity:0;transform:translateY(-10px) scale(.95)}.dropdown-leave-to[data-v-d25ea0ef]{opacity:0;transform:translateY(-5px) scale(.98)}@media (max-width: 640px){.theme-dropdown[data-v-d25ea0ef]{left:0;right:auto}.theme-segment span[data-v-d25ea0ef]{display:none}}.color-scheme-button[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.color-scheme-button[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.color-scheme-button[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-scheme-button[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-scheme-button[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.color-scheme-button[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.color-scheme-button[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.color-scheme-button[data-v-d25ea0ef]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.color-scheme-button[data-v-d25ea0ef]{cursor:pointer}.color-scheme-button-lg[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;border-radius:9999px;padding-left:.75rem;padding-right:.75rem;background-color:#ffffffe6}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.color-scheme-button-lg[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.color-scheme-button-lg[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button-lg[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button-lg[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]{cursor:pointer}.color-dot[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:transform .2s ease}.color-dot-lg[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button:hover .color-dot[data-v-d25ea0ef]{transform:scale(1.1)}.color-menu[data-v-d25ea0ef]{position:absolute;left:0;top:100%;margin-top:.5rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-menu[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.color-menu[data-v-d25ea0ef]{border-radius:.75rem;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.color-menu[data-v-d25ea0ef]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.color-menu[data-v-d25ea0ef]{min-width:140px;padding:.5rem;z-index:50}.color-option[data-v-d25ea0ef]{display:flex;width:100%;align-items:center;gap:.5rem;border-radius:.5rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.color-option[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.color-option[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.color-option[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-option[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;cursor:pointer}.color-option.active[data-v-d25ea0ef]{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.color-option.active[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-option.active[data-v-d25ea0ef]{font-weight:500}.color-preview[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);flex-shrink:0}.color-name[data-v-d25ea0ef]{flex:1 1 0%;text-align:left}
diff --git a/assets/TutorialView-BjIHOtH3.css b/assets/TutorialView-BjIHOtH3.css
deleted file mode 100644
index bbcd9151..00000000
--- a/assets/TutorialView-BjIHOtH3.css
+++ /dev/null
@@ -1 +0,0 @@
-.tutorial-container[data-v-01fa9f4e]{min-height:calc(100vh - 300px)}.tutorial-content[data-v-01fa9f4e]{animation:fadeIn-01fa9f4e .3s ease-in-out}@keyframes fadeIn-01fa9f4e{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}code[data-v-01fa9f4e]{font-family:Fira Code,Monaco,Menlo,Ubuntu Mono,monospace}.tutorial-content h4[data-v-01fa9f4e]{scroll-margin-top:100px}.tutorial-content .bg-gradient-to-r[data-v-01fa9f4e]{transition:all .2s ease}.tutorial-content .bg-gradient-to-r[data-v-01fa9f4e]:hover{transform:translateY(-1px);box-shadow:0 4px 12px #0000001a}html.dark[data-v-01fa9f4e] .bg-gray-100{background-color:#1f2937!important;border:1px solid rgba(75,85,99,.5)}html.dark[data-v-01fa9f4e] .bg-gray-700{background-color:#1a202c!important;border:1px solid rgba(75,85,99,.6)}html.dark[data-v-01fa9f4e] button.bg-gray-800{background-color:#3b82f6!important;border:1px solid rgba(59,130,246,.8);box-shadow:0 2px 8px #3b82f666;color:#fff!important}html.dark[data-v-01fa9f4e] button:not(.bg-gray-800).text-gray-600{color:#9ca3af!important}html.dark[data-v-01fa9f4e] button:not(.bg-gray-800).hover\:text-gray-900:hover{color:#d1d5db!important}html.dark[data-v-01fa9f4e] .bg-gray-900{background-color:#1e293b!important;border:1px solid rgba(71,85,105,.6);box-shadow:inset 0 1px 2px #0003}html.dark[data-v-01fa9f4e] a{color:#60a5fa!important;text-decoration:underline}html.dark[data-v-01fa9f4e] a:hover{color:#93c5fd!important}html.dark[data-v-01fa9f4e] code.rounded{background-color:#334155!important;border:1px solid rgba(100,116,139,.6);color:#fbbf24!important;padding:.125rem .375rem}html.dark[data-v-01fa9f4e] .border-blue-200{border-color:#3b82f680!important}html.dark[data-v-01fa9f4e] .bg-blue-50{background-color:#2563eb26!important;border:1px solid rgba(59,130,246,.3)}html.dark[data-v-01fa9f4e] .border-green-200{border-color:#22c55e80!important}html.dark[data-v-01fa9f4e] .bg-green-50{background-color:#22c55e26!important;border:1px solid rgba(34,197,94,.3)}html.dark[data-v-01fa9f4e] .border-yellow-200{border-color:#facc1580!important}html.dark[data-v-01fa9f4e] .bg-yellow-50{background-color:#facc1526!important;border:1px solid rgba(250,204,21,.3)}html.dark[data-v-01fa9f4e] .border-indigo-200{border-color:#6366f180!important}html.dark[data-v-01fa9f4e] .bg-indigo-50{background-color:#6366f126!important;border:1px solid rgba(99,102,241,.3)}html.dark[data-v-01fa9f4e] .border-purple-200{border-color:#a855f780!important}html.dark[data-v-01fa9f4e] .from-purple-50{background:linear-gradient(to right,#a855f726,#ec489926)!important;border:1px solid rgba(168,85,247,.3)}html.dark[data-v-01fa9f4e] .from-blue-50{background:linear-gradient(to right,#3b82f626,#6366f126)!important;border:1px solid rgba(59,130,246,.3)}html.dark[data-v-01fa9f4e] .from-green-50{background:linear-gradient(to right,#22c55e26,#10b98126)!important;border:1px solid rgba(34,197,94,.3)}html.dark[data-v-01fa9f4e] .text-gray-400{color:#9ca3af!important}html.dark[data-v-01fa9f4e] .text-gray-600{color:#d1d5db!important}html.dark[data-v-01fa9f4e] .text-gray-700{color:#e5e7eb!important}html.dark[data-v-01fa9f4e] .text-gray-800{color:#f3f4f6!important}html.dark[data-v-01fa9f4e] .text-blue-600,html.dark[data-v-01fa9f4e] .text-blue-700{color:#60a5fa!important}html.dark[data-v-01fa9f4e] .text-blue-800{color:#93c5fd!important}html.dark[data-v-01fa9f4e] .text-green-700{color:#4ade80!important}html.dark[data-v-01fa9f4e] .text-green-800{color:#86efac!important}html.dark[data-v-01fa9f4e] .text-yellow-700{color:#facc15!important}html.dark[data-v-01fa9f4e] .text-yellow-800{color:#fde047!important}html.dark[data-v-01fa9f4e] .text-indigo-700{color:#818cf8!important}html.dark[data-v-01fa9f4e] .text-indigo-800{color:#a5b4fc!important}html.dark[data-v-01fa9f4e] h3,html.dark[data-v-01fa9f4e] h4,html.dark[data-v-01fa9f4e] h5,html.dark[data-v-01fa9f4e] h6{color:#f9fafb!important}html.dark[data-v-01fa9f4e] .bg-yellow-100{background-color:#facc1533!important}html.dark[data-v-01fa9f4e] .bg-indigo-100{background-color:#6366f133!important}html.dark[data-v-01fa9f4e] .bg-white{background-color:#374151!important;border:1px solid rgba(107,114,128,.5)}html.dark[data-v-01fa9f4e] .border-purple-700{border-color:#a855f799!important}html.dark[data-v-01fa9f4e] .border-blue-100{border-color:#3b82f666!important}html.dark[data-v-01fa9f4e] .border-green-100{border-color:#22c55e66!important}html.dark[data-v-01fa9f4e] .border-purple-100{border-color:#a855f766!important}html.dark[data-v-01fa9f4e] .text-green-400{color:#4ade80!important}html.dark[data-v-01fa9f4e] .text-gray-300{color:#d1d5db!important}
diff --git a/assets/TutorialView-Cpvhof5r.js b/assets/TutorialView-Cpvhof5r.js
new file mode 100644
index 00000000..1c8795c0
--- /dev/null
+++ b/assets/TutorialView-Cpvhof5r.js
@@ -0,0 +1,2 @@
+import{c as b,x as d,y as a,z as t,P as l,O as m,aT as v,R as f,Q as i,u as w,L as $,ac as h,C as k,r as _,I as A,M as P}from"./vue-vendor-DV7DYXbz.js";import{_ as O}from"./index-BahP9Xx9.js";function S(){const r=()=>{let u="";if(window.location.origin)u=window.location.origin;else{const p=window.location.protocol,y=window.location.hostname,g=window.location.port;u=p+"//"+y,g&&(p==="http:"&&g!=="80"||p==="https:"&&g!=="443")&&(u+=":"+g)}if(!u){const p=window.location.href,y=p.indexOf("/",8);if(y!==-1)u=p.substring(0,y);else return""}return u},x=b(()=>r()+"/api"),n=b(()=>r()+"/gemini"),s=b(()=>r()+"/openai"),c=b(()=>r()+"/droid/claude"),e=b(()=>r()+"/droid/openai");return{currentBaseUrl:x,geminiBaseUrl:n,openaiBaseUrl:s,droidClaudeBaseUrl:c,droidOpenaiBaseUrl:e}}const L={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},N={class:"mb-2 text-xs text-green-700 dark:text-green-300 sm:mb-3 sm:text-sm"},C={__name:"VerifyInstall",props:{terminal:{type:String,default:"终端"}},setup(r){return(x,n)=>(a(),d("div",L,[n[0]||(n[0]=t("h6",{class:"mb-2 text-sm font-medium text-green-800 dark:text-green-300 sm:text-base"}," 验证安装是否成功 ",-1)),t("p",N," 安装完成后,打开 "+l(r.terminal)+",输入以下命令: ",1),n[1]||(n[1]=t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"node --version"),t("div",{class:"whitespace-nowrap text-gray-300"},"npm --version")],-1)),n[2]||(n[2]=t("p",{class:"mt-2 text-xs text-green-700 dark:text-green-300 sm:text-sm"}," 如果显示版本号,说明安装成功了! ",-1))]))}},T={class:"mb-4 sm:mb-10 sm:mb-6"},R={class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},U={class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},K={class:"mb-4 text-sm text-gray-600 dark:text-gray-400 sm:mb-4 sm:mb-6 sm:text-base"},G={key:0,class:"node-install-section"},j={key:1,class:"node-install-section"},M={key:2,class:"node-install-section"},E={__name:"NodeInstallTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)},stepNumber:{type:[Number,String],default:1},toolName:{type:String,default:"CLI 工具"}},setup(r){return(x,n)=>(a(),d("div",T,[t("h4",R,[t("span",U,l(r.stepNumber),1),n[0]||(n[0]=m(" 安装 Node.js 环境 ",-1))]),t("p",K,l(r.toolName)+" 需要 Node.js 环境才能运行。 ",1),r.platform==="windows"?(a(),d("div",G,[n[1]||(n[1]=v(' Windows 安装方法
方法一:官网下载(推荐)
- 打开浏览器访问
https://nodejs.org/ - 点击 "LTS" 版本进行下载(推荐长期支持版本)
- 下载完成后双击
.msi 文件 - 按照安装向导完成安装,保持默认设置即可
方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
- • 建议使用 PowerShell 而不是 CMD
- • 如果遇到权限问题,尝试以管理员身份运行
- • 某些杀毒软件可能会误报,需要添加白名单
',1)),f(C,{terminal:"PowerShell 或 CMD"})])):r.platform==="macos"?(a(),d("div",j,[n[2]||(n[2]=v(' macOS 安装方法
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
# 更新 Homebrew
brew update
# 安装 Node.js
brew install node
方法二:官网下载
- 访问
https://nodejs.org/ - 下载适合 macOS 的 LTS 版本
- 打开下载的
.pkg 文件 - 按照安装程序指引完成安装
macOS 注意事项
- • 如果遇到权限问题,可能需要使用
sudo - • 首次运行可能需要在系统偏好设置中允许
- • 建议使用 Terminal 或 iTerm2
',1)),f(C,{terminal:"Terminal"})])):(a(),d("div",M,[n[3]||(n[3]=v(' Linux / WSL2 安装方法
方法一:使用 nvm(推荐)
nvm 可以方便地管理多个 Node.js 版本:
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载 shell 配置
source ~/.bashrc
# 安装最新 LTS 版本
nvm install --lts
方法二:使用包管理器
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# Fedora
sudo dnf install nodejs
# Arch Linux
sudo pacman -S nodejs npm
Linux / WSL2 注意事项
- • WSL2 用户建议在 Linux 子系统中安装,而不是 Windows
- • 使用 nvm 可以避免权限问题
- • 确保 shell 配置文件正确加载了 nvm
',1)),f(C,{terminal:"终端"})]))]))}},Y={class:"tutorial-content"},B={class:"mb-4 sm:mb-10 sm:mb-6"},V={class:"mb-4 rounded-xl border border-green-100 bg-gradient-to-r from-green-50 to-emerald-50 p-4 dark:border-green-500/40 dark:from-green-950/30 dark:to-emerald-950/30 sm:mb-6 sm:p-6"},D={class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"},H={class:"mb-4 overflow-x-auto rounded-lg bg-gray-900 p-3 font-mono text-xs text-green-400 sm:p-4 sm:text-sm"},q={class:"whitespace-nowrap text-gray-300"},W={class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},z={class:"space-y-1 text-xs text-blue-700 dark:text-blue-300 sm:text-sm"},F={class:"mb-6 sm:mb-10"},J={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},Q={class:"space-y-4"},X={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},Z={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},tt={class:"whitespace-nowrap text-gray-300"},et={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},st={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},rt={class:"whitespace-nowrap text-gray-300"},ot={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},at={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},dt={class:"whitespace-nowrap text-gray-300"},lt={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},nt={class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},mt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},it={class:"whitespace-nowrap text-gray-300"},xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},gt={class:"whitespace-nowrap text-gray-300"},pt={class:"mt-6 rounded-lg border border-indigo-200 bg-indigo-50 p-3 dark:border-indigo-500/40 dark:bg-indigo-950/30 sm:p-4"},bt={class:"mb-3 space-y-2"},ut={class:"text-sm text-indigo-700 dark:text-indigo-300"},yt={class:"rounded bg-indigo-100 px-1 dark:bg-indigo-900"},vt={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ct={class:"space-y-4"},wt={class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"},ft={class:"space-y-1 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},kt={class:"mt-3 space-y-2"},ht={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},St={class:"mb-6 sm:mb-8"},Et={class:"rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:p-6"},It={class:"space-y-4"},Ct={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},$t={class:"whitespace-nowrap text-gray-300"},_t={class:"mb-8"},At={class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},Pt={class:"space-y-4"},Ot={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Lt={class:"px-3 pb-3 text-gray-600 dark:text-gray-400 sm:px-4 sm:pb-4"},Nt={class:"list-inside list-disc space-y-1 text-sm"},Tt={key:0,class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Rt={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Ut={class:"px-3 pb-3 text-gray-600 dark:text-gray-400 sm:px-4 sm:pb-4"},Kt={class:"list-inside list-disc space-y-1 text-sm"},Gt={class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},jt={key:1,class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Mt={__name:"ClaudeCodeTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const x=r,{currentBaseUrl:n}=S(),s=b(()=>({windows:"Windows",macos:"macOS",linux:"Linux / WSL2"})[x.platform]);return(c,e)=>(a(),d("div",Y,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Claude Code"},null,8,["platform"]),t("div",B,[e[10]||(e[10]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-green-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 安装 Claude Code ")],-1)),t("div",V,[e[8]||(e[8]=t("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[t("i",{class:"fas fa-download mr-2 text-green-600"}),m(" 安装 Claude Code ")],-1)),t("p",D,l(r.platform==="windows"?"打开 PowerShell 或 CMD":"打开终端")+",运行以下命令: ",1),t("div",H,[e[0]||(e[0]=t("div",{class:"mb-2"},"# 全局安装 Claude Code",-1)),t("div",q,l(r.platform==="windows"?"npm install -g @anthropic-ai/claude-code":"sudo npm install -g @anthropic-ai/claude-code"),1)]),e[9]||(e[9]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," 这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。 ",-1)),t("div",W,[e[7]||(e[7]=t("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-300 sm:text-base"}," 提示 ",-1)),t("ul",z,[r.platform==="windows"?(a(),d(i,{key:0},[e[1]||(e[1]=t("li",null,"• 建议使用 PowerShell 而不是 CMD,功能更强大",-1)),e[2]||(e[2]=t("li",null,"• 如果遇到权限问题,以管理员身份运行 PowerShell",-1))],64)):r.platform==="macos"?(a(),d(i,{key:1},[e[3]||(e[3]=t("li",null,"• 如果遇到权限问题,可以使用 sudo",-1)),e[4]||(e[4]=t("li",null,"• 或者使用 nvm 安装的 Node.js 避免权限问题",-1))],64)):(a(),d(i,{key:2},[e[5]||(e[5]=t("li",null,"• 使用 nvm 安装的 Node.js 可以避免 sudo",-1)),e[6]||(e[6]=t("li",null,"• WSL2 用户确保在 Linux 子系统中运行",-1))],64))])])]),e[11]||(e[11]=v('验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',1))]),t("div",F,[e[44]||(e[44]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),m(" 设置环境变量 ")],-1)),t("div",J,[e[28]||(e[28]=t("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[t("i",{class:"fas fa-cog mr-2 text-purple-600"}),m(" 配置 Claude Code 环境变量 ")],-1)),e[29]||(e[29]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),t("div",Q,[r.platform==="windows"?(a(),d(i,{key:0},[t("div",X,[e[13]||(e[13]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),e[14]||(e[14]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",Z,[t("div",tt,' $env:ANTHROPIC_BASE_URL = "'+l(w(n))+'" ',1),e[12]||(e[12]=t("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),e[15]||(e[15]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),t("div",et,[e[18]||(e[18]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),e[19]||(e[19]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),t("div",st,[e[16]||(e[16]=t("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),t("div",rt,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+l(w(n))+'", [System.EnvironmentVariableTarget]::User) ',1),e[17]||(e[17]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),e[20]||(e[20]=t("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))])],64)):(a(),d(i,{key:1},[t("div",ot,[e[22]||(e[22]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),e[23]||(e[23]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),t("div",at,[t("div",dt,' export ANTHROPIC_BASE_URL="'+l(w(n))+'" ',1),e[21]||(e[21]=t("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),t("div",lt,[e[26]||(e[26]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置(Shell 配置文件) ",-1)),t("p",nt," 将以下内容添加到你的 shell 配置文件中("+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc")+"): ",1),t("div",mt,[t("div",it,' export ANTHROPIC_BASE_URL="'+l(w(n))+'" ',1),e[25]||(e[25]=t("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),e[27]||(e[27]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"然后执行:",-1)),t("div",xt,[t("div",gt," source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)])])],64))])]),t("div",pt,[e[32]||(e[32]=t("h6",{class:"mb-2 font-medium text-indigo-800 dark:text-indigo-300"}," VSCode Claude 插件配置 ",-1)),e[33]||(e[33]=t("p",{class:"mb-3 text-sm text-indigo-700 dark:text-indigo-300"}," 如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置: ",-1)),t("div",bt,[t("p",ut,[e[30]||(e[30]=t("strong",null,"配置文件位置:",-1)),t("code",yt,l(r.platform==="windows"?"C:\\Users\\你的用户名\\.claude\\config.json":"~/.claude/config.json"),1)]),e[31]||(e[31]=t("p",{class:"text-xs text-indigo-600 dark:text-indigo-400"}," 💡 如果该文件不存在,请手动创建。 ",-1))]),e[34]||(e[34]=t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"{"),t("div",{class:"whitespace-nowrap text-gray-300"},'"primaryApiKey": "crs"'),t("div",{class:"whitespace-nowrap text-gray-300"},"}")],-1))]),t("div",vt,[e[42]||(e[42]=t("h6",{class:"mb-2 font-medium text-blue-800 dark:text-blue-300"},"验证环境变量设置",-1)),e[43]||(e[43]=t("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 设置完环境变量后,可以通过以下命令验证是否设置成功: ",-1)),t("div",ct,[t("div",null,[t("h6",wt,l(r.platform==="windows"?"在 PowerShell 中验证:":"在终端中验证:"),1),t("div",ft,[r.platform==="windows"?(a(),d(i,{key:0},[e[35]||(e[35]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:ANTHROPIC_BASE_URL",-1)),e[36]||(e[36]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:ANTHROPIC_AUTH_TOKEN",-1))],64)):(a(),d(i,{key:1},[e[37]||(e[37]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $ANTHROPIC_BASE_URL",-1)),e[38]||(e[38]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $ANTHROPIC_AUTH_TOKEN",-1))],64))])])]),t("div",kt,[e[40]||(e[40]=t("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("strong",null,"预期输出示例:")],-1)),t("div",ht,[t("div",null,l(w(n)),1),e[39]||(e[39]=t("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),e[41]||(e[41]=t("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])])]),t("div",St,[e[51]||(e[51]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"4"),m(" 开始使用 Claude Code ")],-1)),t("div",Et,[e[50]||(e[50]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 现在你可以开始使用 Claude Code 了! ",-1)),t("div",It,[e[49]||(e[49]=t("div",null,[t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 启动 Claude Code "),t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"claude")])],-1)),t("div",null,[e[48]||(e[48]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 在特定项目中使用 ",-1)),t("div",Ct,[e[45]||(e[45]=t("div",{class:"mb-2"},"# 进入你的项目目录",-1)),t("div",$t," cd "+l(r.platform==="windows"?"C:\\path\\to\\your\\project":"/path/to/your/project"),1),e[46]||(e[46]=t("div",{class:"mb-2 mt-2"},"# 启动 Claude Code",-1)),e[47]||(e[47]=t("div",{class:"whitespace-nowrap text-gray-300"},"claude",-1))])])])])]),t("div",_t,[t("h4",At,[e[52]||(e[52]=t("i",{class:"fas fa-wrench mr-2 text-red-600 sm:mr-3"},null,-1)),m(" "+l(s.value)+" 常见问题解决 ",1)]),t("div",Pt,[t("details",Ot,[e[58]||(e[58]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700 sm:p-4 sm:text-base"},' 安装时提示 "permission denied" 错误 ',-1)),t("div",Lt,[e[57]||(e[57]=t("p",{class:"mb-2"},"这通常是权限问题,尝试以下解决方法:",-1)),t("ul",Nt,[r.platform==="windows"?(a(),d(i,{key:0},[e[53]||(e[53]=t("li",null,"以管理员身份运行 PowerShell",-1)),e[54]||(e[54]=t("li",null,[m(" 或者配置 npm 使用用户目录:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"npm config set prefix %APPDATA%\\npm")],-1))],64)):(a(),d(i,{key:1},[e[55]||(e[55]=t("li",null,"使用 sudo 运行安装命令",-1)),e[56]||(e[56]=t("li",null,"或者使用 nvm 安装 Node.js 避免权限问题",-1))],64))])])]),r.platform==="windows"?(a(),d("details",Tt,e[59]||(e[59]=[v(' PowerShell 执行策略错误 如果遇到执行策略限制,运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
',2)]))):$("",!0),t("details",Rt,[e[67]||(e[67]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700 sm:p-4 sm:text-base"}," 环境变量设置后不生效 ",-1)),t("div",Ut,[e[66]||(e[66]=t("p",{class:"mb-2"},"设置永久环境变量后需要:",-1)),t("ul",Kt,[r.platform==="windows"?(a(),d(i,{key:0},[e[60]||(e[60]=t("li",null,"重新启动 PowerShell 或 CMD",-1)),e[61]||(e[61]=t("li",null,"或者注销并重新登录 Windows",-1)),e[62]||(e[62]=t("li",null,[m(" 验证设置:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"echo $env:ANTHROPIC_BASE_URL")],-1))],64)):(a(),d(i,{key:1},[e[64]||(e[64]=t("li",null,"重新打开终端窗口",-1)),t("li",null,[e[63]||(e[63]=m(" 或者执行 ",-1)),t("code",Gt,"source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)]),e[65]||(e[65]=t("li",null,[m(" 验证设置:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"echo $ANTHROPIC_BASE_URL")],-1))],64))])])]),r.platform==="linux"?(a(),d("details",jt,e[68]||(e[68]=[v(' WSL2 中无法访问 Windows 文件 WSL2 可以通过 /mnt/ 路径访问 Windows 文件:
cd /mnt/c/Users/你的用户名/项目目录
',2)]))):$("",!0)])])]))}},Yt={class:"tutorial-section"},Bt={class:"mb-4 sm:mb-10 sm:mb-6"},Vt={class:"space-y-4"},Dt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Ht={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"whitespace-nowrap text-gray-300"},Wt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},zt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ft={class:"whitespace-nowrap text-gray-300"},Jt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Qt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Xt={class:"whitespace-nowrap text-gray-300"},Zt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},te={class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},ee={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},se={class:"whitespace-nowrap text-gray-300"},re={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},oe={class:"whitespace-nowrap text-gray-300"},ae={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},de={class:"mb-3 text-sm text-green-700 dark:text-green-300"},le={class:"space-y-1 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={__name:"GeminiCliTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const{geminiBaseUrl:x}=S();return(n,s)=>(a(),d("div",Yt,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Gemini CLI"},null,8,["platform"]),t("div",Bt,[s[27]||(s[27]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-green-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Gemini CLI 环境变量 ")],-1)),s[28]||(s[28]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 设置以下环境变量以连接到中转服务: ",-1)),t("div",Vt,[r.platform==="windows"?(a(),d(i,{key:0},[t("div",Dt,[s[2]||(s[2]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),s[3]||(s[3]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",Ht,[t("div",qt,' $env:GOOGLE_GEMINI_BASE_URL = "'+l(w(x))+'" ',1),s[0]||(s[0]=t("div",{class:"whitespace-nowrap text-gray-300"},'$env:GEMINI_API_KEY = "你的API密钥"',-1)),s[1]||(s[1]=t("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),s[4]||(s[4]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),t("div",Wt,[s[8]||(s[8]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),s[9]||(s[9]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",zt,[s[5]||(s[5]=t("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),t("div",Ft,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+l(w(x))+'", [System.EnvironmentVariableTarget]::User) ',1),s[6]||(s[6]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),s[7]||(s[7]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),s[10]||(s[10]=t("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))])],64)):(a(),d(i,{key:1},[t("div",Jt,[s[13]||(s[13]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 临时设置(当前会话) ",-1)),s[14]||(s[14]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),t("div",Qt,[t("div",Xt,' export GOOGLE_GEMINI_BASE_URL="'+l(w(x))+'" ',1),s[11]||(s[11]=t("div",{class:"whitespace-nowrap text-gray-300"},'export GEMINI_API_KEY="你的API密钥"',-1)),s[12]||(s[12]=t("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),s[15]||(s[15]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),t("div",Zt,[s[18]||(s[18]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置(Shell 配置文件) ",-1)),t("p",te," 将以下内容添加到你的 shell 配置文件中("+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc")+"): ",1),t("div",ee,[t("div",se,' export GOOGLE_GEMINI_BASE_URL="'+l(w(x))+'" ',1),s[16]||(s[16]=t("div",{class:"whitespace-nowrap text-gray-300"},'export GEMINI_API_KEY="你的API密钥"',-1)),s[17]||(s[17]=t("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),s[19]||(s[19]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"然后执行:",-1)),t("div",re,[t("div",oe," source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)])])],64)),t("div",ae,[s[26]||(s[26]=t("h6",{class:"mb-2 font-medium text-green-800 dark:text-green-300"}," 验证 Gemini CLI 环境变量 ",-1)),t("p",de,l(r.platform==="windows"?"在 PowerShell 中验证:":"在终端中验证:"),1),t("div",le,[r.platform==="windows"?(a(),d(i,{key:0},[s[20]||(s[20]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GOOGLE_GEMINI_BASE_URL",-1)),s[21]||(s[21]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GEMINI_API_KEY",-1)),s[22]||(s[22]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GEMINI_MODEL",-1))],64)):(a(),d(i,{key:1},[s[23]||(s[23]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GOOGLE_GEMINI_BASE_URL",-1)),s[24]||(s[24]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GEMINI_API_KEY",-1)),s[25]||(s[25]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GEMINI_MODEL",-1))],64))])])])])]))}},me={class:"tutorial-section"},ie={class:"mb-4 sm:mb-10 sm:mb-6"},xe={class:"space-y-4"},ge={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},pe={class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},be={class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},ue={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ye={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ve={class:"whitespace-nowrap text-gray-300"},ce={class:"rounded-lg border border-orange-200 bg-orange-50 p-3 dark:border-orange-500/40 dark:bg-orange-950/30 sm:p-4"},we={class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},fe={class:"rounded bg-orange-100 px-1 dark:bg-orange-900"},ke={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},he={class:"whitespace-nowrap text-gray-300"},Se={class:"rounded-lg border border-purple-200 bg-purple-50 p-3 dark:border-purple-500/40 dark:bg-purple-950/30 sm:p-4"},Ee={class:"mb-1 mt-2 text-sm text-purple-600 dark:text-purple-400"},Ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ce={class:"whitespace-nowrap text-gray-300"},$e={class:"mb-1 text-sm text-purple-600 dark:text-purple-400"},_e={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ae={class:"whitespace-nowrap text-gray-300"},Pe={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},Oe={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Le={key:0,class:"whitespace-nowrap text-gray-300"},Ne={key:1,class:"whitespace-nowrap text-gray-300"},Te={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Re={class:"px-3 pb-3"},Ue={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ke={key:0,class:"whitespace-nowrap text-gray-300"},Ge={key:1,class:"whitespace-nowrap text-gray-300"},je={__name:"CodexTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const x=r,{openaiBaseUrl:n}=S(),s=b(()=>x.platform==="windows"?"%USERPROFILE%\\.codex\\config.toml":"~/.codex/config.toml"),c=b(()=>x.platform==="windows"?"%USERPROFILE%\\.codex\\auth.json":"~/.codex/auth.json"),e=b(()=>['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${n.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"']),u=b(()=>e.value.join(`
+`)),p=b(()=>x.platform==="windows"?`New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.codex" | Out-Null; "${u.value.replace(/"/g,'`"').replace(/\n/g,"`n")}" | Set-Content -Path "$env:USERPROFILE\\.codex\\config.toml" -Force`:`mkdir -p ~/.codex && printf '${u.value.replace(/\n/g,"\\n")}\\n' > ~/.codex/config.toml`),y=b(()=>x.platform==="windows"?`New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.codex" | Out-Null; '{"OPENAI_API_KEY": null}' | Set-Content -Path "$env:USERPROFILE\\.codex\\auth.json" -Force`:`mkdir -p ~/.codex && echo '{"OPENAI_API_KEY": null}' > ~/.codex/auth.json`);return(g,o)=>(a(),d("div",me,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Codex"},null,8,["platform"]),t("div",ie,[o[20]||(o[20]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-indigo-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Codex ")],-1)),o[21]||(o[21]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 配置 Codex 以连接到中转服务: ",-1)),t("div",xe,[t("div",ge,[o[2]||(o[2]=t("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"}," 1. 配置文件 config.toml ",-1)),t("p",pe,[o[0]||(o[0]=m(" 在 ",-1)),t("code",be,l(s.value),1),o[1]||(o[1]=m(" 文件开头添加以下配置: ",-1))]),t("div",ue,[(a(!0),d(i,null,h(e.value,I=>(a(),d("div",{key:I,class:k(["whitespace-nowrap text-gray-300",{"mt-2":I===""}])},l(I||" "),3))),128))]),o[3]||(o[3]=t("p",{class:"mt-3 text-sm text-yellow-600 dark:text-yellow-400"},"一键写入命令:",-1)),t("div",ye,[t("div",ve,l(p.value),1)])]),t("div",ce,[o[6]||(o[6]=t("h6",{class:"mb-2 font-medium text-orange-800 dark:text-orange-300"}," 2. 认证文件 auth.json ",-1)),t("p",we,[o[4]||(o[4]=m(" 在 ",-1)),t("code",fe,l(c.value),1),o[5]||(o[5]=m(" 文件中配置: ",-1))]),o[7]||(o[7]=v('{
"OPENAI_API_KEY": null
}
⚠️ 必须将 OPENAI_API_KEY 设置为 null,否则 Codex 会优先使用它而忽略环境变量!
一键写入命令:
',3)),t("div",ke,[t("div",he,l(y.value),1)])]),t("div",Se,[o[11]||(o[11]=t("h6",{class:"mb-2 font-medium text-purple-800 dark:text-purple-300"}," 3. 设置环境变量 CRS_OAI_KEY ",-1)),o[12]||(o[12]=t("p",{class:"mb-3 text-sm text-purple-700 dark:text-purple-300"}," 设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx): ",-1)),r.platform==="windows"?(a(),d(i,{key:0},[o[8]||(o[8]=v(' 系统级环境变量(推荐):
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", "cr_xxxxxxxxxx", [System.EnvironmentVariableTarget]::Machine)
用户级环境变量 (不推荐)
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", "cr_xxxxxxxxxx", [System.EnvironmentVariableTarget]::User)
💡 设置后需要重新打开终端窗口才能生效
',5))],64)):(a(),d(i,{key:1},[o[9]||(o[9]=v(' 检查当前 shell:echo $SHELL
检查是否已有旧配置
如果之前配置过,建议先检查并清理旧配置:
# zsh
grep 'CRS_OAI_KEY' ~/.zshrc
# bash
grep 'CRS_OAI_KEY' ~/.bashrc
如果有输出,说明已配置过,可以手动编辑文件修改或删除旧配置
',2)),t("p",Ee,l(r.platform==="macos"?"zsh (macOS 默认)":"bash (Linux 默认)")+": ",1),t("div",Ie,[t("div",Ce,` echo 'export CRS_OAI_KEY="cr_xxxxxxxxxx"' >> `+l(r.platform==="macos"?"~/.zshrc && source ~/.zshrc":"~/.bashrc && source ~/.bashrc"),1)]),t("p",$e,l(r.platform==="macos"?"bash":"zsh")+": ",1),t("div",_e,[t("div",Ae,` echo 'export CRS_OAI_KEY="cr_xxxxxxxxxx"' >> `+l(r.platform==="macos"?"~/.bashrc && source ~/.bashrc":"~/.zshrc && source ~/.zshrc"),1)]),o[10]||(o[10]=t("p",{class:"text-sm text-purple-600 dark:text-purple-400"}," 💡 设置后需要重新打开终端窗口或执行 source 命令才能生效 ",-1))],64))]),t("div",Pe,[o[13]||(o[13]=t("h6",{class:"mb-2 font-medium text-green-800 dark:text-green-300"},"4. 验证环境变量",-1)),o[14]||(o[14]=t("p",{class:"mb-2 text-sm text-green-700 dark:text-green-300"}," 重新打开终端后,验证环境变量是否设置成功: ",-1)),t("div",Oe,[r.platform==="windows"?(a(),d("div",Le," Get-ChildItem Env:CRS_OAI_KEY ")):(a(),d("div",Ne,' echo "CRS_OAI_KEY: $CRS_OAI_KEY" '))])]),t("details",Te,[o[18]||(o[18]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 dark:text-gray-300"}," 如何删除环境变量 ",-1)),t("div",Re,[r.platform==="windows"?(a(),d(i,{key:0},[o[15]||(o[15]=v('删除用户级环境变量:
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", $null, [System.EnvironmentVariableTarget]::User)
删除系统级环境变量:
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", $null, [System.EnvironmentVariableTarget]::Machine)
',4))],64)):(a(),d(i,{key:1},[o[16]||(o[16]=v('从 zsh 配置中删除:
# 删除包含 CRS_OAI_KEY 的行
sed -i '' '/CRS_OAI_KEY/d' ~/.zshrc && source ~/.zshrc
从 bash 配置中删除:
# 删除包含 CRS_OAI_KEY 的行
sed -i '' '/CRS_OAI_KEY/d' ~/.bashrc && source ~/.bashrc
',4))],64)),o[17]||(o[17]=t("p",{class:"mb-1 text-sm text-gray-600 dark:text-gray-400"},"验证是否删除成功:",-1)),t("div",Ue,[r.platform==="windows"?(a(),d("div",Ke," Get-ChildItem Env:CRS_OAI_KEY ")):(a(),d("div",Ge,' echo "CRS_OAI_KEY: $CRS_OAI_KEY" '))])])]),o[19]||(o[19]=t("div",{class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},[t("p",{class:"text-sm text-yellow-700 dark:text-yellow-300"},[m(" 💡 请将示例中的 "),t("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"cr_xxxxxxxxxx"),m(" 替换为您的实际 API 密钥 ")])],-1))])])]))}},Me={class:"tutorial-section"},Ye={class:"mb-4 sm:mb-10 sm:mb-6"},Be={class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"},Ve={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},De={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},He={__name:"DroidCliTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const{droidClaudeBaseUrl:x,droidOpenaiBaseUrl:n}=S(),s=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${x.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${n.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(c,e)=>(a(),d("div",Me,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Droid CLI"},null,8,["platform"]),t("div",Ye,[e[12]||(e[12]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Droid CLI ")],-1)),t("p",Be,[e[6]||(e[6]=m(" Droid CLI 使用 ",-1)),e[7]||(e[7]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"~/.factory/config.json",-1)),e[8]||(e[8]=m(" 保存自定义模型; ",-1)),r.platform==="windows"?(a(),d(i,{key:0},[e[0]||(e[0]=m(" 在 Windows 中可直接编辑 ",-1)),e[1]||(e[1]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"C:\\Users\\你的用户名\\.factory\\config.json",-1)),e[2]||(e[2]=m("。 ",-1))],64)):(a(),d(i,{key:1},[e[3]||(e[3]=m(" 在终端中可使用 ",-1)),e[4]||(e[4]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"vim ~/.factory/config.json",-1)),e[5]||(e[5]=m(" 编辑。 ",-1))],64))]),t("div",Ve,[e[9]||(e[9]=t("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),e[10]||(e[10]=t("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),t("div",De,[(a(!0),d(i,null,h(s.value,(u,p)=>(a(),d("div",{key:u+p,class:"whitespace-pre text-gray-300"},l(u),1))),128))]),e[11]||(e[11]=t("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])])]))}},qe={class:"card p-3 sm:p-6"},We={class:"mb-4 sm:mb-8"},ze={class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},Fe={class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"},Je={class:"mb-4 sm:mb-6"},Qe={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},Xe=["onClick"],Ze={class:"mb-4 sm:mb-8"},ts={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},es=["onClick"],ss={__name:"TutorialView",setup(r){const x=_("windows"),n=_("claude-code"),s=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],c=[{key:"claude-code",name:"Claude Code",icon:"fas fa-robot",component:Mt},{key:"codex",name:"Codex",icon:"fas fa-code",component:je},{key:"gemini-cli",name:"Gemini CLI",icon:"fab fa-google",component:ne},{key:"droid-cli",name:"Droid CLI",icon:"fas fa-terminal",component:He}],e=b(()=>{const p=c.find(y=>y.key===n.value);return p?p.name:"CLI 工具"}),u=b(()=>{const p=c.find(y=>y.key===n.value);return p?p.component:null});return(p,y)=>(a(),d("div",qe,[t("div",We,[t("h3",ze,[y[0]||(y[0]=t("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"},null,-1)),m(" "+l(e.value)+" 使用教程 ",1)]),t("p",Fe," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 "+l(e.value)+"。 ",1)]),t("div",Je,[t("div",Qe,[(a(),d(i,null,h(s,g=>t("button",{key:g.key,class:k(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",x.value===g.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:o=>x.value=g.key},[t("i",{class:k(g.icon)},null,2),m(" "+l(g.name),1)],10,Xe)),64))])]),t("div",Ze,[t("div",ts,[(a(),d(i,null,h(c,g=>t("button",{key:g.key,class:k(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-4 sm:py-3 sm:text-sm",n.value===g.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:o=>n.value=g.key},[t("i",{class:k(g.icon)},null,2),m(" "+l(g.name),1)],10,es)),64))])]),(a(),A(P(u.value),{platform:x.value},null,8,["platform"]))]))}},as=O(ss,[["__scopeId","data-v-c8fcc5f9"]]);export{as as T};
diff --git a/assets/TutorialView-DeQdS06L.js b/assets/TutorialView-DeQdS06L.js
deleted file mode 100644
index aa09f07b..00000000
--- a/assets/TutorialView-DeQdS06L.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_}from"./index-B3t2NHq9.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-R8HMg95E.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
Windows 安装方法
方法一:官网下载(推荐)
- 打开浏览器访问
https://nodejs.org/ - 点击 "LTS" 版本进行下载(推荐长期支持版本)
- 下载完成后双击
.msi 文件 - 按照安装向导完成安装,保持默认设置即可
方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
- • 建议使用 PowerShell 而不是 CMD
- • 如果遇到权限问题,尝试以管理员身份运行
- • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开 PowerShell 或 CMD,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
提示
- • 建议使用 PowerShell 而不是 CMD,功能更强大
- • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('查看已设置的环境变量:
# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),t[35]||(t[35]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",B,[t[14]||(t[14]=m('验证环境变量设置
设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m(' 验证 Gemini CLI 环境变量
在 PowerShell 中验证:
echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json。
',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude
Windows 常见问题解决
安装时提示 "permission denied" 错误
这通常是权限问题,尝试以下解决方法:
- 以管理员身份运行 PowerShell
- 或者配置 npm 使用用户目录:
npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误
如果遇到执行策略限制,运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效
设置永久环境变量后需要:
- 重新启动 PowerShell 或 CMD
- 或者注销并重新登录 Windows
- 验证设置:
echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
macOS 安装方法
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
# 更新 Homebrew
brew update
# 安装 Node.js
brew install node
方法二:官网下载
- 访问
https://nodejs.org/ - 下载适合 macOS 的 LTS 版本
- 打开下载的
.pkg 文件 - 按照安装程序指引完成安装
macOS 注意事项
- • 如果遇到权限问题,可能需要使用
sudo - • 首次运行可能需要在系统偏好设置中允许
- • 建议使用 Terminal 或 iTerm2
验证安装是否成功
安装完成后,打开 Terminal,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开 Terminal,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
如果遇到权限问题,可以使用 sudo:
sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:~/.claude/config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m(' 验证 Gemini CLI 环境变量
在 Terminal 中验证:
echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。
',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude
macOS 常见问题解决
安装时提示权限错误
尝试以下解决方法:
- 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code - 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global
macOS 安全设置阻止运行
如果系统阻止运行 Claude Code:
- 打开"系统偏好设置" → "安全性与隐私"
- 点击"仍要打开"或"允许"
- 或者在 Terminal 中运行:
sudo spctl --master-disable
环境变量不生效
检查以下几点:
- 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
- 重新启动 Terminal
- 验证设置:
echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
Linux 安装方法
方法一:使用官方仓库(推荐)
# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
- • 某些发行版可能需要安装额外的依赖
- • 如果遇到权限问题,使用
sudo - • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功
安装完成后,打开终端,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开终端,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
如果遇到权限问题,可以使用 sudo:
sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m(' 验证 Gemini CLI 环境变量
在终端中验证:
echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:~/.claude/config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",je,[t[127]||(t[127]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。
',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude
Linux 常见问题解决
安装时提示权限错误
尝试以下解决方法:
- 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code - 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global - 然后添加到 PATH:
export PATH=~/.npm-global/bin:$PATH
缺少依赖库
某些 Linux 发行版需要安装额外依赖:
# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效
检查以下几点:
- 确认修改了正确的配置文件(.bashrc 或 .zshrc)
- 重新启动终端或运行
source ~/.bashrc - 验证设置:
echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},We=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{We as default};
diff --git a/assets/TutorialView-DfJPWFZG.css b/assets/TutorialView-DfJPWFZG.css
new file mode 100644
index 00000000..88492f3b
--- /dev/null
+++ b/assets/TutorialView-DfJPWFZG.css
@@ -0,0 +1 @@
+.tutorial-container[data-v-c8fcc5f9]{min-height:calc(100vh - 300px)}
diff --git a/assets/UserDashboardView-CAUM2yXW.js b/assets/UserDashboardView-CAUM2yXW.js
deleted file mode 100644
index d0124cf1..00000000
--- a/assets/UserDashboardView-CAUM2yXW.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-R8HMg95E.js";import{_ as V,b as z,s as _,a as Z}from"./index-B3t2NHq9.js";import{T as ee}from"./ThemeToggle-DRoGUDeP.js";import{C as te}from"./ConfirmModal-BAFPIqcc.js";import se from"./TutorialView-DeQdS06L.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('Daily Usage Trend
Usage Chart
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},Zo=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{Zo as default};
diff --git a/assets/UserDashboardView-CxHhaP6a.js b/assets/UserDashboardView-CxHhaP6a.js
new file mode 100644
index 00000000..685092b1
--- /dev/null
+++ b/assets/UserDashboardView-CxHhaP6a.js
@@ -0,0 +1 @@
+import{r as b,_ as E,o as Y,x as a,L as y,y as d,z as e,Y as W,K as F,aq as O,P as r,O as j,C as I,u as v,c as K,q as H,R as B,Q as N,ac as q,aV as G,aT as Q,aU as J}from"./vue-vendor-DV7DYXbz.js";import{b as L,s as C,f as A,c as D,a as X}from"./index-BahP9Xx9.js";import{T as Z}from"./ThemeToggle-DROshBR1.js";import{C as ee}from"./ConfirmModal-C2rCOkXI.js";import{T as te}from"./TutorialView-Cpvhof5r.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const se={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},oe={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},le={class:"mt-3"},re={class:"mb-4 flex items-center justify-between"},ae=["disabled"],de=["disabled"],ie={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ne={class:"flex"},ue={class:"ml-3"},ce={class:"text-sm text-red-700"},me={class:"flex justify-end space-x-3 pt-4"},xe=["disabled"],ge=["disabled"],ve={key:0,class:"flex items-center"},ye={key:1},pe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},fe={class:"flex items-start"},he={class:"ml-3 flex-1"},ke={class:"mt-3"},we={class:"rounded-md border border-green-300 bg-white p-3"},be={class:"flex items-center justify-between"},_e={class:"break-all font-mono text-sm text-gray-900"},$e={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(u,{emit:$}){const p=u,w=$,c=L(),m=b(!1),s=b(""),g=b(null),l=E({name:"",description:""}),_=()=>{l.name="",l.description="",s.value="",g.value=null},P=async()=>{var f,t;if(!l.name.trim()){s.value="API key name is required";return}m.value=!0,s.value="";try{const k={name:l.name.trim(),description:l.description.trim()||void 0},M=await c.createApiKey(k);M.success?(g.value=M.apiKey,C("API key created successfully!","success")):s.value=M.message||"Failed to create API key"}catch(k){console.error("Create API key error:",k),s.value=((t=(f=k.response)==null?void 0:f.data)==null?void 0:t.message)||k.message||"Failed to create API key"}finally{m.value=!1}},h=async f=>{try{await navigator.clipboard.writeText(f),C("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),C("Failed to copy to clipboard","error")}},o=()=>{_(),w("created"),w("close")};return Y(()=>p.show,f=>{f&&_()}),(f,t)=>u.show?(d(),a("div",se,[e("div",oe,[e("div",le,[e("div",re,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=k=>f.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W(P,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=k=>l.name=k),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:m.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,ae),[[O,l.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=k=>l.description=k),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:m.value,placeholder:"Optional description",rows:"3"},null,8,de),[[O,l.description]])]),s.value?(d(),a("div",ie,[e("div",ne,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ue,[e("p",ce,r(s.value),1)])])])):y("",!0),e("div",me,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:m.value,type:"button",onClick:t[3]||(t[3]=k=>f.$emit("close"))}," Cancel ",8,xe),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:m.value||!l.name.trim(),type:"submit"},[m.value?(d(),a("span",ve,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),j(" Creating... ",-1)]))):(d(),a("span",ye,"Create API Key"))],8,ge)])],32),g.value?(d(),a("div",pe,[e("div",fe,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",he,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",ke,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),j(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",we,[e("div",be,[e("code",_e,r(g.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=k=>h(g.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:o}," Done ")])])])])):y("",!0)])])])):y("",!0)}},Ae={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},Ce={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Me={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},De={key:0,class:"space-y-4"},Ie={class:"mt-1 text-sm text-gray-900"},je={key:0},Te={class:"mt-1 text-sm text-gray-900"},Be={class:"mt-1 flex items-center space-x-2"},Ue={class:"flex-1"},Ve={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Ke={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Le={class:"font-mono text-sm text-gray-900"},Se={class:"flex flex-col space-y-1"},Fe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ne={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},qe={key:0,class:"mt-1 text-xs text-gray-500"},He={class:"mt-1"},Re={key:1,class:"border-t border-gray-200 pt-4"},Oe={class:"grid grid-cols-2 gap-4 text-sm"},Ee={class:"ml-2 font-medium"},Ye={class:"ml-2 font-medium"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Je={class:"flex justify-between"},Xe={class:"text-gray-900"},Ze={key:0,class:"flex justify-between"},et={class:"text-gray-900"},tt={key:1,class:"flex justify-between"},st={class:"flex justify-end pt-4"},ot={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(u,{emit:$}){const p=$,w=b(!1),c=async m=>{try{await navigator.clipboard.writeText(m),C("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),C("Failed to copy to clipboard","error")}};return(m,s)=>u.show?(d(),a("div",Ae,[e("div",Ce,[e("div",Me,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=g=>p("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),u.apiKey?(d(),a("div",De,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",Ie,r(u.apiKey.name),1)]),u.apiKey.description?(d(),a("div",je,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,r(u.apiKey.description),1)])):y("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Be,[e("div",Ue,[w.value?(d(),a("div",Ve,[e("code",ze,r(u.apiKey.key||"Not available"),1)])):(d(),a("div",Ke,[e("code",Le,r(u.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Se,[u.apiKey.key?(d(),a("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=g=>w.value=!w.value)},[w.value?(d(),a("svg",Fe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(d(),a("svg",Ne,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),j(" "+r(w.value?"Hide":"Show"),1)])):y("",!0),w.value&&u.apiKey.key?(d(),a("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=g=>c(u.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Copy ",-1)]))):y("",!0)])]),u.apiKey.key?y("",!0):(d(),a("p",qe," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",He,[e("span",{class:I(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",u.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(u.apiKey.isActive?"Active":"Disabled"),3)])]),u.apiKey.usage?(d(),a("div",Re,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Oe,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",Ee,r(v(A)(u.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ye,r(v(A)(u.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",We,r(v(A)(u.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Ge,"$"+r((u.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):y("",!0),e("div",Qe,[e("div",Je,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",Xe,r(v(D)(u.apiKey.createdAt)),1)]),u.apiKey.lastUsedAt?(d(),a("div",Ze,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",et,r(v(D)(u.apiKey.lastUsedAt)),1)])):y("",!0),u.apiKey.expiresAt?(d(),a("div",tt,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:I(["font-medium",new Date(u.apiKey.expiresAt)p("close"))}," Close ")])])):y("",!0)])])])):y("",!0)}},lt={class:"space-y-6"},rt={class:"sm:flex sm:items-center"},at={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},dt=["disabled"],it={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},nt={class:"flex"},ut={class:"ml-3"},ct={class:"text-sm text-yellow-700"},mt={key:1,class:"py-12 text-center"},xt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},gt={class:"divide-y divide-gray-200",role:"list"},vt={class:"flex items-center justify-between"},yt={class:"flex items-center"},pt={class:"flex-shrink-0"},ft={class:"ml-4"},ht={class:"flex items-center"},kt={class:"text-sm font-medium text-gray-900"},wt={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},bt={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},_t={class:"mt-1"},$t={class:"text-sm text-gray-500"},At={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},Ct={key:0},Mt={key:1},Pt={key:2},Dt={key:3},It={class:"flex items-center space-x-2"},jt={class:"text-right text-xs text-gray-500"},Tt={key:0},Bt={class:"flex items-center space-x-1"},Ut=["onClick"],Vt=["onClick"],zt={key:3,class:"py-12 text-center"},Kt={class:"mt-6"},Lt={__name:"UserApiKeysManager",setup(u){const $=L(),p=b(!0),w=b([]),c=K(()=>{var x;return((x=$.config)==null?void 0:x.maxApiKeysPerUser)||5}),m=K(()=>{var x;return((x=$.config)==null?void 0:x.allowUserDeleteApiKeys)===!0}),s=b(!1),g=b(!1),l=b(!1),_=b(null),P=K(()=>[...w.value].sort((x,i)=>{const T=new Date(x.createdAt);return new Date(i.createdAt)-T})),h=K(()=>w.value.filter(x=>!(x.isDeleted==="true"||x.deletedAt)).length),o=async()=>{p.value=!0;try{w.value=await $.getUserApiKeys(!0)}catch(x){console.error("Failed to load API keys:",x),C("Failed to load API keys","error")}finally{p.value=!1}},f=x=>{_.value=x,g.value=!0},t=x=>{_.value=x,l.value=!0},k=async()=>{try{(await $.deleteApiKey(_.value.id)).success&&(C("API key deleted successfully","success"),await o())}catch(x){console.error("Failed to delete API key:",x),C("Failed to delete API key","error")}finally{l.value=!1,_.value=null}},M=async()=>{s.value=!1,await o()};return H(()=>{o()}),(x,i)=>{var T;return d(),a("div",lt,[e("div",rt,[i[6]||(i[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",at,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:h.value>=c.value,onClick:i[0]||(i[0]=n=>s.value=!0)},i[5]||(i[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Create API Key ",-1)]),8,dt)])]),h.value>=c.value?(d(),a("div",it,[e("div",nt,[i[7]||(i[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ut,[e("p",ct," You have reached the maximum number of API keys ("+r(c.value)+"). Please delete an existing key to create a new one. ",1)])])])):y("",!0),p.value?(d(),a("div",mt,i[8]||(i[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):P.value.length>0?(d(),a("div",xt,[e("ul",gt,[(d(!0),a(N,null,q(P.value,n=>{var U,V;return d(),a("li",{key:n.id,class:"px-6 py-4"},[e("div",vt,[e("div",yt,[e("div",pt,[e("div",{class:I(["h-2 w-2 rounded-full",n.isDeleted===!0||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",ft,[e("div",ht,[e("p",kt,r(n.name),1),n.isDeleted===!0||n.deletedAt?(d(),a("span",wt," Deleted ")):n.isActive?y("",!0):(d(),a("span",bt," Deleted "))]),e("div",_t,[e("p",$t,r(n.description||"No description"),1),e("div",At,[e("span",null,"Created: "+r(v(D)(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(d(),a("span",Ct,"Deleted: "+r(v(D)(n.deletedAt)),1)):n.lastUsedAt?(d(),a("span",Mt,"Last used: "+r(v(D)(n.lastUsedAt)),1)):(d(),a("span",Pt,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(d(),a("span",Dt,"Expires: "+r(v(D)(n.expiresAt)),1)):y("",!0)])])])]),e("div",It,[e("div",jt,[e("div",null,r(v(A)(((U=n.usage)==null?void 0:U.requests)||0))+" requests",1),(V=n.usage)!=null&&V.totalCost?(d(),a("div",Tt,"$"+r(n.usage.totalCost.toFixed(4)),1)):y("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:z=>f(n)},i[9]||(i[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ut),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&m.value?(d(),a("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:z=>t(n)},i[10]||(i[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Vt)):y("",!0)])])])])}),128))])])):(d(),a("div",zt,[i[12]||(i[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),i[13]||(i[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),i[14]||(i[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Kt,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:i[1]||(i[1]=n=>s.value=!0)},i[11]||(i[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Create API Key ",-1)]))])])),B($e,{show:s.value,onClose:i[2]||(i[2]=n=>s.value=!1),onCreated:M},null,8,["show"]),B(ot,{"api-key":_.value,show:g.value,onClose:i[3]||(i[3]=n=>g.value=!1)},null,8,["api-key","show"]),B(ee,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(T=_.value)==null?void 0:T.name}'? This action cannot be undone.`,show:l.value,title:"Delete API Key",onCancel:i[4]||(i[4]=n=>l.value=!1),onConfirm:k},null,8,["message","show"])])}}},St={class:"space-y-6"},Ft={class:"sm:flex sm:items-center"},Nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},qt={key:0,class:"py-12 text-center"},Ht={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Rt={class:"overflow-hidden rounded-lg bg-white shadow"},Ot={class:"p-5"},Et={class:"flex items-center"},Yt={class:"ml-5 w-0 flex-1"},Wt={class:"text-lg font-medium text-gray-900"},Gt={class:"overflow-hidden rounded-lg bg-white shadow"},Qt={class:"p-5"},Jt={class:"flex items-center"},Xt={class:"ml-5 w-0 flex-1"},Zt={class:"text-lg font-medium text-gray-900"},es={class:"overflow-hidden rounded-lg bg-white shadow"},ts={class:"p-5"},ss={class:"flex items-center"},os={class:"ml-5 w-0 flex-1"},ls={class:"text-lg font-medium text-gray-900"},rs={class:"overflow-hidden rounded-lg bg-white shadow"},as={class:"p-5"},ds={class:"flex items-center"},is={class:"ml-5 w-0 flex-1"},ns={class:"text-lg font-medium text-gray-900"},us={key:2,class:"rounded-lg bg-white shadow"},cs={key:3,class:"rounded-lg bg-white shadow"},ms={class:"px-4 py-5 sm:p-6"},xs={class:"space-y-3"},gs={class:"flex items-center"},vs={class:"ml-3"},ys={class:"text-sm font-medium text-gray-900"},ps={class:"text-right"},fs={class:"text-sm text-gray-900"},hs={class:"text-xs text-gray-500"},ks={key:4,class:"rounded-lg bg-white shadow"},ws={class:"px-4 py-5 sm:p-6"},bs={class:"overflow-hidden"},_s={class:"min-w-full divide-y divide-gray-200"},$s={class:"divide-y divide-gray-200 bg-white"},As={class:"whitespace-nowrap px-6 py-4"},Cs={class:"text-sm font-medium text-gray-900"},Ms={class:"text-sm text-gray-500"},Ps={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ds={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Is={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4"},Bs={key:5,class:"py-12 text-center"},Us={__name:"UserUsageStats",setup(u){const $=L(),p=b(!0),w=b("week"),c=b(null),m=b([]),s=async()=>{p.value=!0;try{const[g,l]=await Promise.all([$.getUserUsageStats({period:w.value}),$.getUserApiKeys(!0)]);c.value=g,m.value=l}catch(g){console.error("Failed to load usage stats:",g),C("Failed to load usage statistics","error")}finally{p.value=!1}};return H(()=>{s()}),(g,l)=>{var _,P,h,o,f;return d(),a("div",St,[e("div",Ft,[l[2]||(l[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Nt,[F(e("select",{"onUpdate:modelValue":l[0]||(l[0]=t=>w.value=t),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:s},l[1]||(l[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,w.value]])])]),p.value?(d(),a("div",qt,l[3]||(l[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(d(),a("div",Ht,[e("div",Rt,[e("div",Ot,[e("div",Et,[l[5]||(l[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Yt,[e("dl",null,[l[4]||(l[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Wt,r(v(A)(((_=c.value)==null?void 0:_.totalRequests)||0)),1)])])])])]),e("div",Gt,[e("div",Qt,[e("div",Jt,[l[7]||(l[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Xt,[e("dl",null,[l[6]||(l[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",Zt,r(v(A)(((P=c.value)==null?void 0:P.totalInputTokens)||0)),1)])])])])]),e("div",es,[e("div",ts,[e("div",ss,[l[9]||(l[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",os,[e("dl",null,[l[8]||(l[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",ls,r(v(A)(((h=c.value)==null?void 0:h.totalOutputTokens)||0)),1)])])])])]),e("div",rs,[e("div",as,[e("div",ds,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",is,[e("dl",null,[l[10]||(l[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",ns," $"+r((((o=c.value)==null?void 0:o.totalCost)||0).toFixed(4)),1)])])])])])])),!p.value&&c.value?(d(),a("div",us,l[12]||(l[12]=[Q('Daily Usage Trend
Usage Chart
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
',1)]))):y("",!0),!p.value&&c.value&&((f=c.value.modelStats)==null?void 0:f.length)>0?(d(),a("div",cs,[e("div",ms,[l[14]||(l[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",xs,[(d(!0),a(N,null,q(c.value.modelStats,t=>(d(),a("div",{key:t.name,class:"flex items-center justify-between"},[e("div",gs,[l[13]||(l[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",vs,[e("p",ys,r(t.name),1)])]),e("div",ps,[e("p",fs,r(v(A)(t.requests))+" requests",1),e("p",hs,"$"+r(t.cost.toFixed(4)),1)])]))),128))])])])):y("",!0),!p.value&&m.value.length>0?(d(),a("div",ks,[e("div",ws,[l[16]||(l[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",bs,[e("table",_s,[l[15]||(l[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",$s,[(d(!0),a(N,null,q(m.value,t=>{var k,M,x,i;return d(),a("tr",{key:t.id},[e("td",As,[e("div",Cs,r(t.name),1),e("div",Ms,r(t.keyPreview),1)]),e("td",Ps,r(v(A)(((k=t.usage)==null?void 0:k.requests)||0)),1),e("td",Ds,r(v(A)(((M=t.usage)==null?void 0:M.inputTokens)||0)),1),e("td",Is,r(v(A)(((x=t.usage)==null?void 0:x.outputTokens)||0)),1),e("td",js," $"+r((((i=t.usage)==null?void 0:i.totalCost)||0).toFixed(4)),1),e("td",Ts,[e("span",{class:I(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",t.isDeleted==="true"||t.deletedAt?"bg-gray-100 text-gray-800":t.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(t.isDeleted==="true"||t.deletedAt?"Deleted":t.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):y("",!0),!p.value&&(!c.value||c.value.totalRequests===0)?(d(),a("div",Bs,l[17]||(l[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):y("",!0)])}}},Vs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},zs={class:"bg-white shadow dark:bg-gray-800"},Ks={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Ls={class:"flex h-16 justify-between"},Ss={class:"flex items-center"},Fs={class:"ml-10"},Ns={class:"flex items-baseline space-x-4"},qs={class:"flex items-center space-x-4"},Hs={class:"text-sm text-gray-700 dark:text-gray-300"},Rs={class:"font-medium"},Os={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Es={key:0,class:"space-y-6"},Ys={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Ws={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Gs={class:"p-5"},Qs={class:"flex items-center"},Js={class:"ml-5 w-0 flex-1"},Xs={class:"text-lg font-medium text-gray-900 dark:text-white"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"px-4 py-5 sm:p-6"},bo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},_o={class:"divide-y divide-gray-200 dark:divide-gray-700"},$o={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Ao={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Co={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Mo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Po={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Do={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},To={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},Bo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Uo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},zo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={key:1},Lo={key:2},So={key:3,class:"space-y-6"},Yo={__name:"UserDashboardView",setup(u){const $=J(),p=L(),w=X(),c=b("overview"),m=b(null),s=b({active:0,deleted:0}),g=h=>{c.value=h,h==="overview"&&P()},l=async()=>{try{await p.logout(),C("Logged out successfully","success"),$.push("/user-login")}catch{C("Logout failed","error")}},_=async()=>{try{m.value=await p.getUserProfile()}catch(h){console.error("Failed to load user profile:",h),C("Failed to load user profile","error")}},P=async()=>{try{const h=await p.getUserApiKeys(!0);console.log("All API Keys received:",h);const o=h.filter(t=>!(t.isDeleted==="true"||t.deletedAt)&&t.isActive),f=h.filter(t=>t.isDeleted==="true"||t.deletedAt);console.log("Active keys:",o),console.log("Deleted keys:",f),console.log("Active count:",o.length),console.log("Deleted count:",f.length),s.value={active:o.length,deleted:f.length}}catch(h){console.error("Failed to load API keys stats:",h),s.value={active:0,deleted:0}}};return H(()=>{w.initTheme(),_(),P()}),(h,o)=>{var f,t,k,M,x,i,T,n,U,V,z,R;return d(),a("div",Vs,[e("nav",zs,[e("div",Ks,[e("div",Ls,[e("div",Ss,[o[4]||(o[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Fs,[e("div",Ns,[e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[0]||(o[0]=S=>g("overview"))}," Overview ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[1]||(o[1]=S=>g("api-keys"))}," API Keys ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[2]||(o[2]=S=>g("usage"))}," Usage Stats ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[3]||(o[3]=S=>g("tutorial"))}," Tutorial ",2)])])]),e("div",qs,[e("div",Hs,[o[5]||(o[5]=j(" Welcome, ",-1)),e("span",Rs,r(v(p).userName),1)]),B(Z,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:l}," Logout ")])])])]),e("main",Os,[c.value==="overview"?(d(),a("div",Es,[o[23]||(o[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Ys,[e("div",Ws,[e("div",Gs,[e("div",Qs,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Js,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",Xs,r(s.value.active),1)])])])])]),e("div",Zs,[e("div",eo,[e("div",to,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",oo,r(s.value.deleted),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",no,r(v(A)(((t=(f=m.value)==null?void 0:f.totalUsage)==null?void 0:t.requests)||0)),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",go,r(v(A)(((M=(k=m.value)==null?void 0:k.totalUsage)==null?void 0:M.inputTokens)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[o[15]||(o[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[o[14]||(o[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",ho," $"+r((((i=(x=m.value)==null?void 0:x.totalUsage)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ko,[e("div",wo,[o[22]||(o[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",bo,[e("dl",_o,[e("div",$o,[o[16]||(o[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Ao,r((T=m.value)==null?void 0:T.username),1)]),e("div",Co,[o[17]||(o[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",Mo,r(((n=m.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Po,[o[18]||(o[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",Do,r(((U=m.value)==null?void 0:U.email)||"N/A"),1)]),e("div",Io,[o[19]||(o[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",jo,[e("span",To,r(((V=m.value)==null?void 0:V.role)||"user"),1)])]),e("div",Bo,[o[20]||(o[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Uo,r(v(D)((z=m.value)==null?void 0:z.createdAt)),1)]),e("div",Vo,[o[21]||(o[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",zo,r(v(D)((R=m.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):c.value==="api-keys"?(d(),a("div",Ko,[B(Lt)])):c.value==="usage"?(d(),a("div",Lo,[B(Us)])):c.value==="tutorial"?(d(),a("div",So,[B(te)])):y("",!0)])])}}};export{Yo as default};
diff --git a/assets/UserLoginView-BB0rxKdy.js b/assets/UserLoginView-BB0rxKdy.js
deleted file mode 100644
index 8324cde0..00000000
--- a/assets/UserLoginView-BB0rxKdy.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-R8HMg95E.js";import{_ as C,b as T,a as U,s as M}from"./index-B3t2NHq9.js";import{T as B}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),t=h({username:"",password:""}),w=async()=>{var d,s;if(!t.username||!t.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:t.username,password:t.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((s=(d=o.response)==null?void 0:d.data)==null?void 0:s.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,s)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[s[7]||(s[7]=_(' Sign in to your account to manage your API keys
',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[s[2]||(s[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":s[0]||(s[0]=l=>t.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,t.username]])])]),e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=l=>t.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,t.password]])])]),a.value?(i(),n("div",D,[e("div",H,[s[4]||(s[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!t.username||!t.password,type:"submit"},[r.value?(i(),n("span",Y,s[5]||(s[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>s[6]||(s[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default};
diff --git a/assets/UserLoginView-CQ2slm3o.js b/assets/UserLoginView-CQ2slm3o.js
new file mode 100644
index 00000000..5f06e961
--- /dev/null
+++ b/assets/UserLoginView-CQ2slm3o.js
@@ -0,0 +1 @@
+import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as m,K as p,aq as g,P as b,O as x,J as S,av as z,aU as C,y as i}from"./vue-vendor-DV7DYXbz.js";import{b as T,a as V,s as M}from"./index-BahP9Xx9.js";import{T as U}from"./ThemeToggle-DROshBR1.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const B={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},I={class:"mt-1"},P=["disabled"],A={class:"mt-1"},E=["disabled"],R={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},D={class:"flex"},H={class:"ml-3"},J={class:"text-sm text-red-700 dark:text-red-400"},K=["disabled"],O={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},Y={class:"text-center"},$={__name:"UserLoginView",setup(F){const f=C(),y=T(),v=V(),t=u(!1),o=u(""),s=h({username:"",password:""}),w=async()=>{var l,r;if(!s.username||!s.password){o.value="Please enter both username and password";return}t.value=!0,o.value="";try{await y.login({username:s.username,password:s.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(a){console.error("Login error:",a),o.value=((r=(l=a.response)==null?void 0:l.data)==null?void 0:r.message)||a.message||"Login failed"}finally{t.value=!1}};return k(()=>{v.initTheme()}),(l,r)=>{const a=z("router-link");return i(),n("div",B,[e("div",N,[c(U,{mode:"dropdown"})]),e("div",j,[r[7]||(r[7]=_(' Sign in to your account to manage your API keys
',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[r[2]||(r[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",I,[p(e("input",{id:"username","onUpdate:modelValue":r[0]||(r[0]=d=>s.username=d),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:t.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,P),[[g,s.username]])])]),e("div",null,[r[3]||(r[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",A,[p(e("input",{id:"password","onUpdate:modelValue":r[1]||(r[1]=d=>s.password=d),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:t.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,E),[[g,s.password]])])]),o.value?(i(),n("div",R,[e("div",D,[r[4]||(r[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",H,[e("p",J,b(o.value),1)])])])):m("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:t.value||!s.username||!s.password,type:"submit"},[t.value?(i(),n("span",O,r[5]||(r[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):m("",!0),x(" "+b(t.value?"Signing In...":"Sign In"),1)],8,K)]),e("div",Y,[c(a,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>r[6]||(r[6]=[x(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}};export{$ as default};
diff --git a/assets/UserManagementView-CaiXdQvq.js b/assets/UserManagementView-CaiXdQvq.js
new file mode 100644
index 00000000..6c98e067
--- /dev/null
+++ b/assets/UserManagementView-CaiXdQvq.js
@@ -0,0 +1 @@
+import{r as x,o as O,x as i,L as b,y as n,z as e,P as a,K as j,aV as P,u as h,Q as E,ac as Q,C as B,Y as W,an as K,O as N,c as Y,q as J,R as I,aq as X}from"./vue-vendor-DV7DYXbz.js";import{f as A,c as G,g as Z,d as ee,s as M,e as te,h as se,i as oe,j as le,k as ae}from"./index-BahP9Xx9.js";import{C as re}from"./ConfirmModal-C2rCOkXI.js";import{d as ie}from"./vendor-Dr8jvgFu.js";import"./element-plus-BSjV1f9S.js";const ne={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},de={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},ue={class:"mt-3"},ce={class:"mb-6 flex items-center justify-between"},me={class:"text-lg font-medium text-gray-900"},ve={class:"text-sm text-gray-500"},xe={class:"mb-6"},ge={key:0,class:"py-12 text-center"},pe={key:1,class:"space-y-6"},fe={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},he={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-blue-900"},_e={class:"overflow-hidden rounded-lg bg-green-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Ue={class:"text-lg font-medium text-green-900"},Me={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Be={class:"ml-5 w-0 flex-1"},Ve={class:"text-lg font-medium text-purple-900"},Le={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},Re={class:"p-5"},Se={class:"flex items-center"},Te={class:"ml-5 w-0 flex-1"},Fe={class:"text-lg font-medium text-yellow-900"},De={key:0,class:"rounded-lg border border-gray-200 bg-white"},Ie={class:"overflow-hidden"},Pe={class:"min-w-full divide-y divide-gray-200"},Ne={class:"divide-y divide-gray-200 bg-white"},He={class:"whitespace-nowrap px-6 py-4"},qe={class:"text-sm font-medium text-gray-900"},Ke={class:"text-sm text-gray-500"},Oe={class:"whitespace-nowrap px-6 py-4"},Ee={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ge={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},We={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Ye={class:"rounded-lg border border-gray-200 bg-white"},Je={class:"p-6"},Xe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ze={class:"text-center"},et={class:"mt-1 text-sm text-gray-500"},tt={key:1,class:"py-12 text-center"},st={class:"mt-6 flex justify-end"},ot={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(m,{emit:k}){const g=m,_=k,v=x(!1),c=x("week"),d=x(null),$=x(null),p=async()=>{if(g.user){v.value=!0;try{const[l,s]=await Promise.all([Z(g.user.id,{period:c.value}),ee(g.user.id)]);l.success&&(d.value=l.stats),s.success&&($.value=s.user)}catch(l){console.error("Failed to load user usage stats:",l),M("Failed to load usage statistics","error")}finally{v.value=!1}}};return O([()=>g.show,()=>g.user],([l,s])=>{l&&s&&p()}),(l,s)=>{var y,U,C,z,V,L,R,S,T,F;return m.show?(n(),i("div",ne,[e("div",de,[e("div",ue,[e("div",ce,[e("div",null,[e("h3",me," Usage Statistics - "+a(((y=m.user)==null?void 0:y.displayName)||((U=m.user)==null?void 0:U.username)),1),e("p",ve,"@"+a((C=m.user)==null?void 0:C.username)+" • "+a((z=m.user)==null?void 0:z.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>_("close"))},s[3]||(s[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",xe,[j(e("select",{"onUpdate:modelValue":s[1]||(s[1]=o=>c.value=o),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:p},s[4]||(s[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,c.value]])]),v.value?(n(),i("div",ge,s[5]||(s[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",pe,[e("div",fe,[e("div",he,[e("div",ye,[e("div",we,[s[7]||(s[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[s[6]||(s[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",ke,a(h(A)(((V=d.value)==null?void 0:V.totalRequests)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[s[9]||(s[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[s[8]||(s[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",Ue,a(h(A)(((L=d.value)==null?void 0:L.totalInputTokens)||0)),1)])])])])]),e("div",Me,[e("div",je,[e("div",ze,[s[11]||(s[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Be,[e("dl",null,[s[10]||(s[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Ve,a(h(A)(((R=d.value)==null?void 0:R.totalOutputTokens)||0)),1)])])])])]),e("div",Le,[e("div",Re,[e("div",Se,[s[13]||(s[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Te,[e("dl",null,[s[12]||(s[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Fe," $"+a((((S=d.value)==null?void 0:S.totalCost)||0).toFixed(4)),1)])])])])])]),((F=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:F.length)>0?(n(),i("div",De,[s[15]||(s[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Ie,[e("table",Pe,[s[14]||(s[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",Ne,[(n(!0),i(E,null,Q($.value.apiKeys,o=>{var t,u,f,w;return n(),i("tr",{key:o.id},[e("td",He,[e("div",qe,a(o.name),1),e("div",Ke,a(o.keyPreview),1)]),e("td",Oe,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",o.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},a(o.isActive?"Active":"Disabled"),3)]),e("td",Ee,a(h(A)(((t=o.usage)==null?void 0:t.requests)||0)),1),e("td",Qe,[e("div",null,"In: "+a(h(A)(((u=o.usage)==null?void 0:u.inputTokens)||0)),1),e("div",null,"Out: "+a(h(A)(((f=o.usage)==null?void 0:f.outputTokens)||0)),1)]),e("td",Ge," $"+a((((w=o.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",We,a(o.lastUsedAt?h(G)(o.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Ye,[s[19]||(s[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Je,[e("div",Xe,[e("div",Ze,[s[16]||(s[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),s[17]||(s[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",et," Daily usage trends for "+a(c.value)+" period ",1),s[18]||(s[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",tt,s[20]||(s[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",st,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>l.$emit("close"))}," Close ")])])])])):b("",!0)}}},lt={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},at={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},rt={class:"mt-3"},it={class:"mb-4 flex items-center justify-between"},nt={key:0,class:"space-y-4"},dt={class:"rounded-md bg-gray-50 p-4"},ut={class:"flex items-center"},ct={class:"ml-4"},mt={class:"text-sm font-medium text-gray-900"},vt={class:"text-sm text-gray-500"},xt={class:"mt-1"},gt={class:"space-y-2"},pt={class:"flex items-center"},ft=["disabled"],ht={class:"flex items-center"},yt=["disabled"],wt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},bt={class:"flex"},kt={class:"ml-3"},_t={class:"mt-2 text-sm text-yellow-700"},$t={key:0},Ct={key:1},At={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},Ut={class:"flex"},Mt={class:"ml-3"},jt={class:"text-sm text-red-700"},zt={class:"flex justify-end space-x-3 pt-4"},Bt=["disabled"],Vt=["disabled"],Lt={key:0,class:"flex items-center"},Rt={key:1},St={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(m,{emit:k}){const g=m,_=k,v=x(!1),c=x(""),d=x(""),$=async()=>{var p,l;if(!(!g.user||d.value===g.user.role)){v.value=!0,c.value="";try{const s=await te(g.user.id,{role:d.value});s.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):c.value=s.message||"Failed to update user role"}catch(s){console.error("Update user role error:",s),c.value=((l=(p=s.response)==null?void 0:p.data)==null?void 0:l.message)||s.message||"Failed to update user role"}finally{v.value=!1}}};return O([()=>g.show,()=>g.user],([p,l])=>{p&&l&&(d.value=l.role,c.value="",v.value=!1)}),(p,l)=>m.show?(n(),i("div",lt,[e("div",at,[e("div",rt,[e("div",it,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=s=>p.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),m.user?(n(),i("div",nt,[e("div",dt,[e("div",ut,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",ct,[e("p",mt,a(m.user.displayName||m.user.username),1),e("p",vt,"@"+a(m.user.username),1),e("div",xt,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",m.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+a(m.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",gt,[e("label",pt,[j(e("input",{"onUpdate:modelValue":l[1]||(l[1]=s=>d.value=s),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:v.value,type:"radio",value:"user"},null,8,ft),[[K,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",ht,[j(e("input",{"onUpdate:modelValue":l[2]||(l[2]=s=>d.value=s),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:v.value,type:"radio",value:"admin"},null,8,yt),[[K,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==m.user.role?(n(),i("div",wt,[e("div",bt,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",kt,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",_t,[d.value==="admin"?(n(),i("p",$t," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",Ct," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),c.value?(n(),i("div",At,[e("div",Ut,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",Mt,[e("p",jt,a(c.value),1)])])])):b("",!0),e("div",zt,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:v.value,type:"button",onClick:l[3]||(l[3]=s=>p.$emit("close"))}," Cancel ",8,Bt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:v.value||d.value===m.user.role,type:"submit"},[v.value?(n(),i("span",Lt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),N(" Updating... ",-1)]))):(n(),i("span",Rt,"Update Role"))],8,Vt)])],32)])):b("",!0)])])])):b("",!0)}},Tt={class:"space-y-6"},Ft={class:"sm:flex sm:items-center"},Dt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},It=["disabled"],Pt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Nt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ht={class:"p-5"},qt={class:"flex items-center"},Kt={class:"ml-5 w-0 flex-1"},Ot={class:"text-lg font-medium text-gray-900 dark:text-white"},Et={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Qt={class:"p-5"},Gt={class:"flex items-center"},Wt={class:"ml-5 w-0 flex-1"},Yt={class:"text-lg font-medium text-gray-900 dark:text-white"},Jt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Xt={class:"p-5"},Zt={class:"flex items-center"},es={class:"ml-5 w-0 flex-1"},ts={class:"text-lg font-medium text-gray-900 dark:text-white"},ss={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},os={class:"p-5"},ls={class:"flex items-center"},as={class:"ml-5 w-0 flex-1"},rs={class:"text-lg font-medium text-gray-900 dark:text-white"},is={class:"rounded-lg bg-white shadow dark:bg-gray-800"},ns={class:"px-4 py-5 sm:p-6"},ds={class:"sm:flex sm:items-center sm:justify-between"},us={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},cs={class:"min-w-0 flex-1"},ms={class:"relative rounded-md shadow-sm"},vs={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},xs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},gs={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},ps={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},fs={key:0,class:"py-12 text-center"},hs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ys={class:"flex items-center justify-between"},ws={class:"flex min-w-0 flex-1 items-center"},bs={class:"ml-4 min-w-0 flex-1"},ks={class:"flex items-center"},_s={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},$s={class:"ml-2 flex items-center space-x-2"},Cs={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},As={key:0},Us={key:1},Ms={key:2},js={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},zs={class:"flex items-center space-x-2"},Bs=["onClick"],Vs=["disabled","onClick"],Ls=["title","onClick"],Rs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ss={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ts=["onClick"],Fs={key:2,class:"py-12 text-center"},Ds={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ks={__name:"UserManagementView",setup(m){const k=x(!0),g=x([]),_=x(null),v=x(""),c=x(""),d=x(""),$=x(!1),p=x(!1),l=x(!1),s=x(null),y=x({title:"",message:"",confirmText:"",confirmClass:"",action:null}),U=Y(()=>{let o=g.value;if(v.value){const t=v.value.toLowerCase();o=o.filter(u=>{var f,w;return u.username.toLowerCase().includes(t)||((f=u.displayName)==null?void 0:f.toLowerCase().includes(t))||((w=u.email)==null?void 0:w.toLowerCase().includes(t))})}if(c.value&&(o=o.filter(t=>t.role===c.value)),d.value!==""){const t=d.value==="true";o=o.filter(u=>u.isActive===t)}return o}),C=async()=>{k.value=!0;try{const o={};c.value&&c.value.trim()!==""&&(o.role=c.value),d.value!==""&&(o.isActive=d.value);const[t,u]=await Promise.all([se(o),oe()]);t.success&&(g.value=t.users),u.success&&(_.value=u.stats)}catch(o){console.error("Failed to load users:",o),M("Failed to load users","error")}finally{k.value=!1}},z=ie(()=>{},300),V=o=>{s.value=o,$.value=!0},L=o=>{s.value=o,y.value={title:o.isActive?"Disable User":"Enable User",message:o.isActive?`Are you sure you want to disable user "${o.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${o.username}"?`,confirmText:o.isActive?"Disable":"Enable",confirmClass:o.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},p.value=!0},R=o=>{o.apiKeyCount!==0&&(s.value=o,y.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${o.apiKeyCount} API keys for user "${o.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},p.value=!0)},S=o=>{s.value=o,l.value=!0},T=async()=>{const o=s.value,t=y.value.action;try{if(t==="toggleStatus"){if((await le(o.id,{isActive:!o.isActive})).success){const f=g.value.findIndex(w=>w.id===o.id);f!==-1&&(g.value[f].isActive=!o.isActive),M(`User ${o.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const u=await ae(o.id);u.success&&(M(`Disabled ${u.disabledCount} API keys`,"success"),await C())}}catch(u){console.error(`Failed to ${t}:`,u),M(`Failed to ${t}`,"error")}finally{p.value=!1,s.value=null}},F=()=>{l.value=!1,s.value=null,C()};return J(()=>{C()}),(o,t)=>{var u,f,w,H,q;return n(),i("div",Tt,[e("div",Ft,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",Dt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),N(" Refresh ",-1)]),8,It)])]),e("div",Pt,[e("div",Nt,[e("div",Ht,[e("div",qt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Kt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ot,a(((u=_.value)==null?void 0:u.totalUsers)||0),1)])])])])]),e("div",Et,[e("div",Qt,[e("div",Gt,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Wt,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Yt,a(((f=_.value)==null?void 0:f.activeUsers)||0),1)])])])])]),e("div",Jt,[e("div",Xt,[e("div",Zt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",es,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",ts,a(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",ss,[e("div",os,[e("div",ls,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",as,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",rs," $"+a((((q=(H=_.value)==null?void 0:H.totalUsage)==null?void 0:q.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",is,[e("div",ns,[e("div",ds,[e("div",us,[e("div",cs,[e("div",ms,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),j(e("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>v.value=r),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...r)=>h(z)&&h(z)(...r))},null,544),[[X,v.value]])])]),e("div",null,[j(e("select",{"onUpdate:modelValue":t[2]||(t[2]=r=>c.value=r),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,c.value]])]),e("div",null,[j(e("select",{"onUpdate:modelValue":t[3]||(t[3]=r=>d.value=r),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",vs,[e("div",xs,[e("h3",gs,[t[20]||(t[20]=N(" Users ",-1)),k.value?b("",!0):(n(),i("span",ps,"("+a(U.value.length)+" of "+a(g.value.length)+")",1))])]),k.value?(n(),i("div",fs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):U.value.length>0?(n(),i("ul",hs,[(n(!0),i(E,null,Q(U.value,r=>(n(),i("li",{key:r.id,class:"px-6 py-4"},[e("div",ys,[e("div",ws,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",bs,[e("div",ks,[e("p",_s,a(r.displayName||r.username),1),e("div",$s,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},a(r.isActive?"Active":"Disabled"),3),e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",r.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},a(r.role),3)])]),e("div",Cs,[e("span",null,"@"+a(r.username),1),r.email?(n(),i("span",As,a(r.email),1)):b("",!0),e("span",null,a(r.apiKeyCount||0)+" API keys",1),r.lastLoginAt?(n(),i("span",Us,"Last login: "+a(h(G)(r.lastLoginAt)),1)):(n(),i("span",Ms,"Never logged in"))]),r.totalUsage?(n(),i("div",js,[e("span",null,a(h(A)(r.totalUsage.requests||0))+" requests",1),e("span",null,"$"+a((r.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",zs,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:D=>V(r)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Bs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:r.apiKeyCount===0,title:"Disable All API Keys",onClick:D=>R(r)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Vs),e("button",{class:B(["inline-flex items-center rounded border border-transparent p-1",r.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:r.isActive?"Disable User":"Enable User",onClick:D=>L(r)},[r.isActive?(n(),i("svg",Rs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Ss,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,Ls),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:D=>S(r)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ts)])])]))),128))])):(n(),i("div",Fs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ds,a(v.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),I(ot,{show:$.value,user:s.value,onClose:t[4]||(t[4]=r=>$.value=!1)},null,8,["show","user"]),I(re,{"confirm-class":y.value.confirmClass,"confirm-text":y.value.confirmText,message:y.value.message,show:p.value,title:y.value.title,onCancel:t[5]||(t[5]=r=>p.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),I(St,{show:l.value,user:s.value,onClose:t[6]||(t[6]=r=>l.value=!1),onUpdated:F},null,8,["show","user"])])}}};export{Ks as default};
diff --git a/assets/UserManagementView-DJp_uG6X.js b/assets/UserManagementView-DJp_uG6X.js
deleted file mode 100644
index 179383c6..00000000
--- a/assets/UserManagementView-DJp_uG6X.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-R8HMg95E.js";import{_ as q,c as A,s as M}from"./index-B3t2NHq9.js";import{C as te}from"./ConfirmModal-BAFPIqcc.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./element-plus-BUfCkBQO.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},Hs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{Hs as default};
diff --git a/assets/WindowCountdown-DF7xS2EZ.js b/assets/WindowCountdown-Cz478C_V.js
similarity index 98%
rename from assets/WindowCountdown-DF7xS2EZ.js
rename to assets/WindowCountdown-Cz478C_V.js
index 9fede84a..ea332930 100644
--- a/assets/WindowCountdown-DF7xS2EZ.js
+++ b/assets/WindowCountdown-Cz478C_V.js
@@ -1 +1 @@
-import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-R8HMg95E.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _};
+import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-DV7DYXbz.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _};
diff --git a/assets/element-plus-BUfCkBQO.js b/assets/element-plus-BSjV1f9S.js
similarity index 99%
rename from assets/element-plus-BUfCkBQO.js
rename to assets/element-plus-BSjV1f9S.js
index 1fe2d08a..5c88e00e 100644
--- a/assets/element-plus-BUfCkBQO.js
+++ b/assets/element-plus-BSjV1f9S.js
@@ -1,4 +1,4 @@
-import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-R8HMg95E.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(`
+import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-DV7DYXbz.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(`
Add an empty element to avoid render label,
do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485
`),F("span")]),_:1},8,["model-value","label","disabled","onClick"])):o(d)&&e.node.checked?(_(),oe(o(Se),{key:2,class:T(o(a).e("prefix"))},{default:U(()=>[H(o(va))]),_:1},8,["class"])):J("v-if",!0),H(o(xy),{"render-label-fn":o(l).renderLabelFn,node:e.node},null,8,["render-label-fn","node"]),J(" postfix "),o(d)?J("v-if",!0):(_(),V(Oe,{key:3},[e.node.loading?(_(),oe(o(Se),{key:0,class:T([o(a).is("loading"),o(a).e("postfix")])},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])):(_(),oe(o(Se),{key:1,class:T(["arrow-right",o(a).e("postfix")])},{default:U(()=>[H(o(Cn))]),_:1},8,["class"]))],64))],42,["id","aria-haspopup","aria-owns","aria-expanded","tabindex"]))}});var Ky=fe(Hy,[["__file","node.vue"]]);const Wy=x({name:"ElCascaderMenu"}),jy=x({...Wy,props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=e,n=lt(),l=ue("cascader-menu"),{t:a}=pt(),s=sn();let r,i;const u=we(li),c=I(),d=y(()=>!t.nodes.length),f=y(()=>!u.initialLoaded),m=y(()=>`${s.value}-${t.index}`),v=b=>{r=b.target},h=b=>{if(!(!u.isHoverMenu||!r||!c.value))if(r.contains(b.target)){p();const E=n.vnode.el,{left:C}=E.getBoundingClientRect(),{offsetWidth:w,offsetHeight:k}=E,S=b.clientX-C,$=r.offsetTop,M=$+r.offsetHeight;c.value.innerHTML=`
diff --git a/assets/index-B3t2NHq9.js b/assets/index-B3t2NHq9.js
deleted file mode 100644
index 1df45ead..00000000
--- a/assets/index-B3t2NHq9.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-BXeEy6eP.js","assets/vue-vendor-R8HMg95E.js","assets/ThemeToggle-DRoGUDeP.js","assets/ThemeToggle-BLLHl9nT.css","assets/element-plus-BUfCkBQO.js","assets/vendor-Dr8jvgFu.js","assets/element-plus-BWHEPMNp.css","assets/LoginView-tn0RQdqM.css","assets/UserLoginView-BB0rxKdy.js","assets/UserDashboardView-CAUM2yXW.js","assets/ConfirmModal-BAFPIqcc.js","assets/ConfirmModal-BvCtxUSJ.css","assets/TutorialView-DeQdS06L.js","assets/TutorialView-BjIHOtH3.css","assets/UserManagementView-DJp_uG6X.js","assets/MainLayout-CYVTVq7H.js","assets/LogoTitle-CNwD90nW.js","assets/LogoTitle-DXipqypn.css","assets/MainLayout-CCQ2LruH.css","assets/DashboardView-X4x_p8JP.js","assets/chart-yFHxLHpB.js","assets/DashboardView-CJCkJ1Cw.css","assets/ApiKeysView-PDywvTD3.js","assets/WindowCountdown-DF7xS2EZ.js","assets/ActionDropdown-4ngn0-GS.js","assets/ActionDropdown-BAe-X9zd.css","assets/ApiKeysView-sn4JYbr5.css","assets/ApiKeyUsageRecordsView-B36TikZ_.js","assets/RecordDetailModal-CIaCpUK_.js","assets/RecordDetailModal-BqG3nD3p.css","assets/AccountsView-G6_okn5O.js","assets/AccountsView-C9_86Dy1.css","assets/AccountUsageRecordsView-BOIWIhGk.js","assets/SettingsView-Bzv2bCHm.js","assets/SettingsView-CRb2BaAt.css","assets/ApiStatsView-G_xX3WMi.js","assets/ApiStatsView-ANGMgUyF.css"])))=>i.map(i=>d[i]);
-import{aP as V,aQ as X,aR as Y,r as g,c as S,o as K,q as N,V as j,I as z,z as p,x as E,ac as Z,Q as ee,a5 as J,y as T,C as $,L as C,P,Y as B,B as te,R as O,J as se,T as oe,O as ae,av as re,aM as ne,aS as ie}from"./vue-vendor-R8HMg95E.js";import{i as ce,z as le}from"./element-plus-BUfCkBQO.js";import{P as w}from"./vendor-Dr8jvgFu.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const n of i.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&a(n)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();const ue="modulepreload",de=function(t){return"/admin-next/"+t},H={},v=function(e,s,a){let o=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const n=document.querySelector("meta[property=csp-nonce]"),c=(n==null?void 0:n.nonce)||(n==null?void 0:n.getAttribute("nonce"));o=Promise.allSettled(s.map(l=>{if(l=de(l),l in H)return;H[l]=!0;const d=l.endsWith(".css"),f=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${f}`))return;const r=document.createElement("link");if(r.rel=d?"stylesheet":ue,d||(r.as="script"),r.crossOrigin="",r.href=l,c&&r.setAttribute("nonce",c),document.head.appendChild(r),d)return new Promise((u,h)=>{r.addEventListener("load",u),r.addEventListener("error",()=>h(new Error(`Unable to preload CSS for ${l}`)))})}))}function i(n){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=n,window.dispatchEvent(c),!c.defaultPrevented)throw n}return o.then(n=>{for(const c of n||[])c.status==="rejected"&&i(c.reason);return e().catch(i)})};let I=null,he=0;function F(t,e="info",s="",a=3e3){I||(I=document.createElement("div"),I.id="toast-container",I.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 10000;",document.body.appendChild(I));const o=++he,i=document.createElement("div");i.className=`toast rounded-2xl p-4 shadow-2xl backdrop-blur-sm toast-${e}`,i.style.cssText=`
- position: relative;
- min-width: 320px;
- max-width: 500px;
- margin-bottom: 16px;
- transform: translateX(100%);
- transition: transform 0.3s ease-in-out;
- `;const n={success:"fas fa-check-circle",error:"fas fa-times-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"},c=t.replace(/\n/g,"
");return i.innerHTML=`
-
-
-
-
-
- ${s?`
${s}
`:""}
-
${c}
-
-
-
- `,I.appendChild(i),setTimeout(()=>{i.style.transform="translateX(0)"},10),a>0&&setTimeout(()=>{i.style.transform="translateX(100%)",setTimeout(()=>{i.remove()},300)},a),o}const me=Object.freeze(Object.defineProperty({__proto__:null,showToast:F},Symbol.toStringTag,{value:"Module"})),R={basePath:"/admin-next/",apiPrefix:""};function fe(t=""){return t&&!t.startsWith("/")&&(t="/"+t),R.basePath+(t.startsWith("#")?t:"#"+t)}function pe(){return fe("/login")}const q=R.apiPrefix;function x(t){return t.startsWith("/")||(t="/"+t),q+t}class ge{constructor(){this.baseURL=q}getAuthToken(){return localStorage.getItem("authToken")||null}buildConfig(e={}){const s={headers:{"Content-Type":"application/json",...e.headers},...e},a=this.getAuthToken();return a&&(s.headers.Authorization=`Bearer ${a}`),s}async handleResponse(e){if(e.status===401){const a=window.location.pathname+window.location.hash;throw a.includes("/login")||a.endsWith("/")||(localStorage.removeItem("authToken"),window.location.href=pe()),new Error("Unauthorized")}const s=e.headers.get("content-type");if(s&&s.includes("application/json")){const a=await e.json();if(!e.ok){const o=new Error(a.message||`HTTP ${e.status}`);throw o.response={status:e.status,data:a},o.message=a.message||o.message,o}return a}if(!e.ok)throw new Error(`HTTP ${e.status}: ${e.statusText}`);return e}async get(e,s={}){let a=x(e);if(s.params){const c=new URLSearchParams(s.params);a+="?"+c.toString()}const{params:o,...i}=s,n=this.buildConfig({...i,method:"GET"});try{const c=await fetch(a,n);return await this.handleResponse(c)}catch(c){throw console.error("API GET Error:",c),c}}async post(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"POST",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API POST Error:",n),n}}async put(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PUT",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API PUT Error:",n),n}}async patch(e,s=null,a={}){const o=x(e),i=this.buildConfig({...a,method:"PATCH",body:s?JSON.stringify(s):void 0});try{const n=await fetch(o,i);return await this.handleResponse(n)}catch(n){throw console.error("API PATCH Error:",n),n}}async delete(e,s={}){const a=x(e),{data:o,...i}=s,n=this.buildConfig({...i,method:"DELETE",body:o?JSON.stringify(o):void 0});try{const c=await fetch(a,n);return await this.handleResponse(c)}catch(c){throw console.error("API DELETE Error:",c),c}}}const L=new ge,b=`${q}/users`,G=V("user",{state:()=>({user:null,isAuthenticated:!1,sessionToken:null,loading:!1,config:null}),getters:{isLoggedIn:t=>t.isAuthenticated&&t.user,userName:t=>{var e,s;return((e=t.user)==null?void 0:e.displayName)||((s=t.user)==null?void 0:s.username)},userRole:t=>{var e;return(e=t.user)==null?void 0:e.role}},actions:{async login(t){this.loading=!0;try{const e=await w.post(`${b}/login`,t);if(e.data.success)return this.user=e.data.user,this.sessionToken=e.data.sessionToken,this.isAuthenticated=!0,localStorage.setItem("userToken",this.sessionToken),localStorage.setItem("userData",JSON.stringify(this.user)),this.setAuthHeader(),e.data;throw new Error(e.data.message||"Login failed")}catch(e){throw this.clearAuth(),e}finally{this.loading=!1}},async logout(){try{this.sessionToken&&await w.post(`${b}/logout`,{},{headers:{"x-user-token":this.sessionToken}})}catch(t){console.error("Logout request failed:",t)}finally{this.clearAuth()}},async checkAuth(){const t=localStorage.getItem("userToken"),e=localStorage.getItem("userData"),s=localStorage.getItem("userConfig");if(!t||!e)return this.clearAuth(),!1;try{return this.sessionToken=t,this.user=JSON.parse(e),this.config=s?JSON.parse(s):null,this.isAuthenticated=!0,this.setAuthHeader(),await this.getUserProfile(),!0}catch(a){return console.error("Auth check failed:",a),this.clearAuth(),!1}},async getUserProfile(){var t,e,s,a;try{const o=await w.get(`${b}/profile`);if(o.data.success)return this.user=o.data.user,this.config=o.data.config,localStorage.setItem("userData",JSON.stringify(this.user)),localStorage.setItem("userConfig",JSON.stringify(this.config)),o.data.user}catch(o){throw(((t=o.response)==null?void 0:t.status)===401||((e=o.response)==null?void 0:e.status)===403)&&(this.clearAuth(),((s=o.response)==null?void 0:s.status)===403)?new Error(((a=o.response.data)==null?void 0:a.message)||"Your account has been disabled"):o}},async getUserApiKeys(t=!1){try{const e={};t&&(e.includeDeleted="true");const s=await w.get(`${b}/api-keys`,{params:e});return s.data.success?s.data.apiKeys:[]}catch(e){throw console.error("Failed to fetch API keys:",e),e}},async createApiKey(t){try{return(await w.post(`${b}/api-keys`,t)).data}catch(e){throw console.error("Failed to create API key:",e),e}},async deleteApiKey(t){try{return(await w.delete(`${b}/api-keys/${t}`)).data}catch(e){throw console.error("Failed to delete API key:",e),e}},async getUserUsageStats(t={}){try{const e=await w.get(`${b}/usage-stats`,{params:t});return e.data.success?e.data.stats:null}catch(e){throw console.error("Failed to fetch usage stats:",e),e}},clearAuth(){this.user=null,this.sessionToken=null,this.isAuthenticated=!1,this.config=null,localStorage.removeItem("userToken"),localStorage.removeItem("userData"),localStorage.removeItem("userConfig"),delete w.defaults.headers.common["x-user-token"]},setAuthHeader(){this.sessionToken&&(w.defaults.headers.common["x-user-token"]=this.sessionToken)},setupAxiosInterceptors(){w.interceptors.response.use(t=>t,t=>{var e,s;if(((e=t.response)==null?void 0:e.status)===403){const a=(s=t.response.data)==null?void 0:s.message;a&&(a.includes("disabled")||a.includes("Account disabled"))&&(this.clearAuth(),F(a,"error"),window.location.pathname!=="/user-login"&&(window.location.href="/user-login"))}return Promise.reject(t)})}}}),_e=()=>v(()=>import("./LoginView-BXeEy6eP.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])),ye=()=>v(()=>import("./UserLoginView-BB0rxKdy.js"),__vite__mapDeps([8,1,2,3,4,5,6,7])),ve=()=>v(()=>import("./UserDashboardView-CAUM2yXW.js"),__vite__mapDeps([9,1,2,3,10,11,12,4,5,6,13,7])),we=()=>v(()=>import("./UserManagementView-DJp_uG6X.js"),__vite__mapDeps([14,1,10,11,5,4,6,7])),k=()=>v(()=>import("./MainLayout-CYVTVq7H.js"),__vite__mapDeps([15,1,16,17,2,3,4,5,6,18])),Ae=()=>v(()=>import("./DashboardView-X4x_p8JP.js"),__vite__mapDeps([19,4,1,5,6,20,21])),Te=()=>v(()=>import("./ApiKeysView-PDywvTD3.js"),__vite__mapDeps([22,4,1,5,6,23,24,25,26])),ke=()=>v(()=>import("./ApiKeyUsageRecordsView-B36TikZ_.js"),__vite__mapDeps([27,4,1,5,6,28,29])),be=()=>v(()=>import("./AccountsView-G6_okn5O.js"),__vite__mapDeps([30,4,1,5,6,10,11,20,24,25,31])),Ee=()=>v(()=>import("./AccountUsageRecordsView-BOIWIhGk.js"),__vite__mapDeps([32,4,1,5,6,28,29])),Ie=()=>v(()=>import("./TutorialView-DeQdS06L.js"),__vite__mapDeps([12,1,4,5,6,13])),Pe=()=>v(()=>import("./SettingsView-Bzv2bCHm.js"),__vite__mapDeps([33,1,4,5,6,34])),xe=()=>v(()=>import("./ApiStatsView-G_xX3WMi.js"),__vite__mapDeps([35,1,16,17,2,3,5,23,12,4,6,13,36])),Se=[{path:"/",redirect:()=>{const t=window.location.pathname,e=R.basePath.replace(/\/$/,"");return t===e||t===e+"/","/api-stats"}},{path:"/login",name:"Login",component:_e,meta:{requiresAuth:!1}},{path:"/admin-login",redirect:"/login"},{path:"/user-login",name:"UserLogin",component:ye,meta:{requiresAuth:!1,userAuth:!0}},{path:"/user-dashboard",name:"UserDashboard",component:ve,meta:{requiresUserAuth:!0}},{path:"/api-stats",name:"ApiStats",component:xe,meta:{requiresAuth:!1}},{path:"/dashboard",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Dashboard",component:Ae}]},{path:"/api-keys",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeys",component:Te}]},{path:"/api-keys/:keyId/usage-records",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeyUsageRecords",component:ke}]},{path:"/accounts",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Accounts",component:be}]},{path:"/accounts/:accountId/usage-records",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"AccountUsageRecords",component:Ee}]},{path:"/tutorial",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Tutorial",component:Ie}]},{path:"/settings",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"Settings",component:Pe}]},{path:"/user-management",component:k,meta:{requiresAuth:!0},children:[{path:"",name:"UserManagement",component:we}]},{path:"/:pathMatch(.*)*",redirect:"/api-stats"}],U=X({history:Y(R.basePath),routes:Se});U.beforeEach(async(t,e,s)=>{const a=W(),o=G();if(console.log("路由导航:",{to:t.path,from:e.path,fullPath:t.fullPath,requiresAuth:t.meta.requiresAuth,requiresUserAuth:t.meta.requiresUserAuth,isAuthenticated:a.isAuthenticated,isUserAuthenticated:o.isAuthenticated}),t.path===e.path&&t.fullPath===e.fullPath)return s();if(t.meta.requiresUserAuth){if(!o.isAuthenticated)try{if(!await o.checkAuth())return s("/user-login")}catch(i){if(i.message&&i.message.includes("disabled")){const{showToast:n}=await v(async()=>{const{showToast:c}=await Promise.resolve().then(()=>me);return{showToast:c}},void 0);n(i.message,"error")}return s("/user-login")}return s()}t.path==="/api-stats"||t.path.startsWith("/api-stats")?s():t.path==="/user-login"?o.isAuthenticated?s("/user-dashboard"):s():t.meta.requiresAuth&&!a.isAuthenticated?s("/login"):t.path==="/login"&&a.isAuthenticated?s("/dashboard"):s()});const W=V("auth",()=>{const t=g(!1),e=g(localStorage.getItem("authToken")||""),s=g(""),a=g(""),o=g(!1),i=g({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",faviconData:""}),n=g(!0),c=S(()=>!!e.value&&t.value),l=S(()=>e.value),d=S(()=>({username:s.value}));async function f(m){o.value=!0,a.value="";try{const _=await L.post("/web/auth/login",m);_.success?(e.value=_.token,s.value=_.username||m.username,t.value=!0,localStorage.setItem("authToken",_.token),await U.push("/dashboard")):a.value=_.message||"登录失败"}catch(_){a.value=_.message||"登录失败,请检查用户名和密码"}finally{o.value=!1}}function r(){t.value=!1,e.value="",s.value="",localStorage.removeItem("authToken"),U.push("/login")}function u(){e.value&&(t.value=!0,h())}async function h(){try{const m=await L.get("/web/auth/user");m.success&&m.user&&(s.value=m.user.username),(await L.get("/admin/dashboard")).success||r()}catch{r()}}async function A(){n.value=!0;try{const m=await L.get("/admin/oem-settings");if(m.success&&m.data){if(i.value={...i.value,...m.data},m.data.siteIconData||m.data.siteIcon){const _=document.querySelector("link[rel*='icon']")||document.createElement("link");_.type="image/x-icon",_.rel="shortcut icon",_.href=m.data.siteIconData||m.data.siteIcon,document.getElementsByTagName("head")[0].appendChild(_)}m.data.siteName&&(document.title=`${m.data.siteName} - 管理后台`)}}catch(m){console.error("加载OEM设置失败:",m)}finally{n.value=!1}}return{isLoggedIn:t,authToken:e,username:s,loginError:a,loginLoading:o,oemSettings:i,oemLoading:n,isAuthenticated:c,token:l,user:d,login:f,logout:r,checkAuth:u,loadOemSettings:A}}),y={LIGHT:"light",DARK:"dark",AUTO:"auto"},Le=V("theme",()=>{const t=g(y.AUTO),e=g(!1),s=S(()=>t.value===y.DARK?!0:t.value===y.LIGHT?!1:e.value),a=S(()=>s.value?y.DARK:y.LIGHT),o=()=>{const r=window.matchMedia("(prefers-color-scheme: dark)");e.value=r.matches;const u=localStorage.getItem("themeMode");u&&Object.values(y).includes(u)?t.value=u:t.value=y.AUTO,i(),l()},i=()=>{const r=document.documentElement;s.value?r.classList.add("dark"):r.classList.remove("dark")},n=r=>{Object.values(y).includes(r)&&(t.value=r)},c=()=>{const r=[y.LIGHT,y.DARK,y.AUTO],h=(r.indexOf(t.value)+1)%r.length;t.value=r[h]};K(t,r=>{localStorage.setItem("themeMode",r),i()}),K(e,()=>{t.value===y.AUTO&&i()});const l=()=>{const r=window.matchMedia("(prefers-color-scheme: dark)"),u=h=>{e.value=h.matches};return e.value=r.matches,r.addEventListener("change",u),()=>{r.removeEventListener("change",u)}};return{themeMode:t,isDarkMode:s,currentTheme:a,systemPrefersDark:e,ThemeMode:y,initTheme:o,setThemeMode:n,cycleThemeMode:c,watchSystemTheme:l,toggleTheme:()=>{c()},setTheme:r=>{r==="dark"?n(y.DARK):r==="light"&&n(y.LIGHT)}}}),M=(t,e)=>{const s=t.__vccOpts||t;for(const[a,o]of e)s[a]=o;return s},Oe={class:"toast-container"},Ce=["onClick"],Ue={class:"toast-content"},Re={class:"toast-icon"},De={class:"toast-body"},$e={key:0,class:"toast-title"},Ve={class:"toast-message"},Ne=["onClick"],qe={__name:"ToastNotification",setup(t,{expose:e}){const s=g([]);let a=0;const o=d=>{const f={success:"fas fa-check-circle",error:"fas fa-exclamation-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"};return f[d]||f.info},i=(d,f="info",r=null,u=5e3)=>{const h=++a,A={id:h,message:d,type:f,title:r,duration:u,isVisible:!1};return s.value.push(A),setTimeout(()=>{A.isVisible=!0},10),u>0&&setTimeout(()=>{n(h)},u),h},n=d=>{const f=s.value.findIndex(r=>r.id===d);if(f>-1){const r=s.value[f];r.isVisible=!1,setTimeout(()=>{const u=s.value.findIndex(h=>h.id===d);u>-1&&s.value.splice(u,1)},300)}},c=()=>{s.value.forEach(d=>{d.isVisible=!1}),setTimeout(()=>{s.value.length=0},300)},l=(d,f="info",r=null,u=5e3)=>i(d,f,r,u);return N(()=>{window.showToast=l}),j(()=>{window.showToast===l&&delete window.showToast}),e({showToast:l,removeToast:n,clearAllToasts:c}),(d,f)=>(T(),z(J,{to:"body"},[p("div",Oe,[(T(!0),E(ee,null,Z(s.value,r=>(T(),E("div",{key:r.id,class:$(["toast",`toast-${r.type}`,r.isVisible?"toast-show":"toast-hide"]),onClick:u=>n(r.id)},[p("div",Ue,[p("div",Re,[p("i",{class:$(o(r.type))},null,2)]),p("div",De,[r.title?(T(),E("div",$e,P(r.title),1)):C("",!0),p("div",Ve,P(r.message),1)]),p("button",{class:"toast-close",onClick:B(u=>n(r.id),["stop"])},f[0]||(f[0]=[p("i",{class:"fas fa-times"},null,-1)]),8,Ne)]),r.duration>0?(T(),E("div",{key:0,class:"toast-progress",style:te({animationDuration:`${r.duration}ms`})},null,4)):C("",!0)],10,Ce))),128))])]))}},Me=M(qe,[["__scopeId","data-v-c8b24ff5"]]),Ke={class:"modal-content mx-auto w-full max-w-md p-6"},He={class:"mb-6 flex items-start gap-4"},je={class:"flex-1"},ze={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Je={class:"whitespace-pre-line leading-relaxed text-gray-700 dark:text-gray-400"},Be={class:"flex items-center justify-end gap-3"},Fe=["disabled"],Ge=["disabled"],We={key:0,class:"loading-spinner mr-2"},Qe={__name:"ConfirmDialog",setup(t,{expose:e}){const s=g(!1),a=g(!1),o=g(""),i=g(""),n=g("确认"),c=g("取消");let l=null;const d=(h,A,m="确认",_="取消")=>new Promise(Q=>{o.value=h,i.value=A,n.value=m,c.value=_,s.value=!0,a.value=!1,l=Q}),f=()=>{a.value||(a.value=!0,setTimeout(()=>{s.value=!1,a.value=!1,l&&(l(!0),l=null)},200))},r=()=>{a.value||(s.value=!1,l&&(l(!1),l=null))},u=h=>{s.value&&(h.key==="Escape"?r():h.key==="Enter"&&!h.shiftKey&&!h.ctrlKey&&!h.altKey&&f())};return N(()=>{window.showConfirm=d,document.addEventListener("keydown",u)}),j(()=>{window.showConfirm===d&&delete window.showConfirm,document.removeEventListener("keydown",u)}),e({showConfirm:d}),(h,A)=>(T(),z(J,{to:"body"},[O(oe,{appear:"",name:"modal"},{default:se(()=>[s.value?(T(),E("div",{key:0,class:"modal fixed inset-0 z-[100] flex items-center justify-center p-4",onClick:B(r,["self"])},[p("div",Ke,[p("div",He,[A[0]||(A[0]=p("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-amber-600"},[p("i",{class:"fas fa-exclamation-triangle text-lg text-white"})],-1)),p("div",je,[p("h3",ze,P(o.value),1),p("div",Je,P(i.value),1)])]),p("div",Be,[p("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:a.value,onClick:r},P(c.value),9,Fe),p("button",{class:$(["btn btn-warning px-6 py-3",{"cursor-not-allowed opacity-50":a.value}]),disabled:a.value,onClick:f},[a.value?(T(),E("div",We)):C("",!0),ae(" "+P(n.value),1)],10,Ge)])])])):C("",!0)]),_:1})]))}},Xe=M(Qe,[["__scopeId","data-v-6b3390a6"]]),Ye={id:"app"},Ze={__name:"App",setup(t){const e=W(),s=Le(),a=g(),o=g();return N(()=>{s.initTheme(),s.watchSystemTheme(),e.checkAuth(),e.loadOemSettings()}),(i,n)=>{const c=re("router-view");return T(),E("div",Ye,[O(c),O(Me,{ref_key:"toastRef",ref:a},null,512),O(Xe,{ref_key:"confirmRef",ref:o},null,512)])}}},et=M(Ze,[["__scopeId","data-v-dab04b7e"]]),D=ne(et),tt=ie();D.use(tt);D.use(U);D.use(ce,{locale:le});const st=G();st.setupAxiosInterceptors();D.mount("#app");export{q as A,M as _,Le as a,G as b,L as c,F as s,W as u};
diff --git a/assets/index-BahP9Xx9.js b/assets/index-BahP9Xx9.js
new file mode 100644
index 00000000..580b4066
--- /dev/null
+++ b/assets/index-BahP9Xx9.js
@@ -0,0 +1,23 @@
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-Bk2509Bx.js","assets/vue-vendor-DV7DYXbz.js","assets/ThemeToggle-DROshBR1.js","assets/ThemeToggle-MCe3g2y3.css","assets/element-plus-BSjV1f9S.js","assets/vendor-Dr8jvgFu.js","assets/element-plus-BWHEPMNp.css","assets/UserLoginView-CQ2slm3o.js","assets/UserDashboardView-CxHhaP6a.js","assets/ConfirmModal-C2rCOkXI.js","assets/ConfirmModal-BzWkJtgn.css","assets/TutorialView-Cpvhof5r.js","assets/TutorialView-DfJPWFZG.css","assets/UserManagementView-CaiXdQvq.js","assets/MainLayout-C8oFjafl.js","assets/LogoTitle-DF7a1vCs.js","assets/LogoTitle-DXipqypn.css","assets/MainLayout-DUrvC5cF.css","assets/DashboardView-BzrWMTub.js","assets/chart-yFHxLHpB.js","assets/DashboardView-C7pS8AeR.css","assets/ApiKeysView-DZf3x888.js","assets/WindowCountdown-Cz478C_V.js","assets/ActionDropdown-GADQlLlI.js","assets/ActionDropdown-BAe-X9zd.css","assets/ApiKeysView-M9vmNqGR.css","assets/ApiKeyUsageRecordsView-DEBCoJV1.js","assets/RecordDetailModal-iWzEw88d.js","assets/RecordDetailModal-CZv4ajwT.css","assets/AccountsView-mqqu5LbU.js","assets/AccountsView-CWWlCm8X.css","assets/AccountUsageRecordsView-CAVEOn9q.js","assets/SettingsView-BSo4LhAq.js","assets/SettingsView-D2Ttplqa.css","assets/ApiStatsView-D5wlfbRX.js","assets/ApiStatsView-BDCKkmc6.css","assets/QuotaCardsView-B9kpLmPn.js"])))=>i.map(i=>d[i]);
+import{aP as B,aQ as ne,aR as ie,r as S,c as O,o as K,q as Y,V as ce,I as de,z as P,x as C,ac as ue,Q as le,a5 as me,y as w,C as F,L as W,P as z,Y as pe,B as he,R as Q,av as ge,aM as Ae,aS as fe}from"./vue-vendor-DV7DYXbz.js";import{i as ye,z as Te}from"./element-plus-BSjV1f9S.js";import{P as k}from"./vendor-Dr8jvgFu.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const d of i.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&r(d)}).observe(document,{childList:!0,subtree:!0});function s(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=s(o);fetch(o.href,i)}})();const be="modulepreload",Se=function(e){return"/admin-next/"+e},j={},T=function(t,s,r){let o=Promise.resolve();if(s&&s.length>0){document.getElementsByTagName("link");const d=document.querySelector("meta[property=csp-nonce]"),g=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));o=Promise.allSettled(s.map(A=>{if(A=Se(A),A in j)return;j[A]=!0;const m=A.endsWith(".css"),h=m?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${A}"]${h}`))return;const c=document.createElement("link");if(c.rel=m?"stylesheet":be,m||(c.as="script"),c.crossOrigin="",c.href=A,g&&c.setAttribute("nonce",g),document.head.appendChild(c),m)return new Promise((f,b)=>{c.addEventListener("load",f),c.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${A}`)))})}))}function i(d){const g=new Event("vite:preloadError",{cancelable:!0});if(g.payload=d,window.dispatchEvent(g),!g.defaultPrevented)throw d}return o.then(d=>{for(const g of d||[])g.status==="rejected"&&i(g.reason);return t().catch(i)})},$={basePath:"/admin-next/",apiPrefix:""},ke=(e="")=>(e&&!e.startsWith("/")&&(e="/"+e),$.basePath+(e.startsWith("#")?e:"#"+e)),Pe=()=>ke("/login");let G=null,Ee=0;const x=(e,t="info",s="",r=3e3)=>{G||(G=document.createElement("div"),G.id="toast-container",G.style.cssText="position: fixed; top: 20px; right: 20px; z-index: 10000;",document.body.appendChild(G));const o=++Ee,i=document.createElement("div");i.className=`toast rounded-2xl p-4 shadow-2xl backdrop-blur-sm toast-${t}`,i.style.cssText=`
+ position: relative;
+ min-width: 320px;
+ max-width: 500px;
+ margin-bottom: 16px;
+ transform: translateX(100%);
+ transition: transform 0.3s ease-in-out;
+ `;const d={success:"fas fa-check-circle",error:"fas fa-times-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"};return i.innerHTML=`
+
+
+
+
+
+ ${s?`
${s}
`:""}
+
${e.replace(/\n/g,"
")}
+
+
+
+ `,G.appendChild(i),setTimeout(()=>i.style.transform="translateX(0)",10),r>0&&setTimeout(()=>{i.style.transform="translateX(100%)",setTimeout(()=>i.remove(),300)},r),o},xs=async(e,t="已复制")=>{var s;try{if((s=navigator.clipboard)!=null&&s.writeText)await navigator.clipboard.writeText(e);else{const r=document.createElement("textarea");r.value=e,document.body.appendChild(r),r.select(),document.execCommand("copy"),document.body.removeChild(r)}return x(t,"success"),!0}catch(r){return console.error("Failed to copy:",r),x("复制失败","error"),!1}},Ls=e=>{if(e==null)return"0";const t=Math.abs(e);return t>=1e9?(e/1e9).toFixed(2)+"B":t>=1e6?(e/1e6).toFixed(2)+"M":t>=1e3?(e/1e3).toFixed(1)+"K":e.toLocaleString()},Rs=(e,t="YYYY-MM-DD HH:mm:ss")=>{if(!e)return"";const s=new Date(e),r=o=>String(o).padStart(2,"0");return t.replace("YYYY",s.getFullYear()).replace("MM",r(s.getMonth()+1)).replace("DD",r(s.getDate())).replace("HH",r(s.getHours())).replace("mm",r(s.getMinutes())).replace("ss",r(s.getSeconds()))},Ms=e=>{if(!e)return"";const t=new Date(e),s=new Date-t,r=Math.floor(s/6e4),o=Math.floor(r/60),i=Math.floor(o/24);return i>=7?t.toLocaleDateString("zh-CN"):i>0?`${i}天前`:o>0?`${o}小时前`:r>0?`${r}分钟前`:"刚刚"},Ks=e=>e?new Date(e).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",v=`${$.apiPrefix}/users`,J=B("user",{state:()=>({user:null,isAuthenticated:!1,sessionToken:null,loading:!1,config:null}),getters:{isLoggedIn:e=>e.isAuthenticated&&e.user,userName:e=>{var t,s;return((t=e.user)==null?void 0:t.displayName)||((s=e.user)==null?void 0:s.username)},userRole:e=>{var t;return(t=e.user)==null?void 0:t.role}},actions:{async login(e){this.loading=!0;try{const t=await k.post(`${v}/login`,e);if(t.data.success)return this.user=t.data.user,this.sessionToken=t.data.sessionToken,this.isAuthenticated=!0,localStorage.setItem("userToken",this.sessionToken),localStorage.setItem("userData",JSON.stringify(this.user)),this.setAuthHeader(),t.data;throw new Error(t.data.message||"Login failed")}catch(t){throw this.clearAuth(),t}finally{this.loading=!1}},async logout(){try{this.sessionToken&&await k.post(`${v}/logout`,{},{headers:{"x-user-token":this.sessionToken}})}catch(e){console.error("Logout request failed:",e)}finally{this.clearAuth()}},async checkAuth(){const e=localStorage.getItem("userToken"),t=localStorage.getItem("userData"),s=localStorage.getItem("userConfig");if(!e||!t)return this.clearAuth(),!1;try{return this.sessionToken=e,this.user=JSON.parse(t),this.config=s?JSON.parse(s):null,this.isAuthenticated=!0,this.setAuthHeader(),await this.getUserProfile(),!0}catch(r){return console.error("Auth check failed:",r),this.clearAuth(),!1}},async getUserProfile(){var e,t,s,r;try{const o=await k.get(`${v}/profile`);if(o.data.success)return this.user=o.data.user,this.config=o.data.config,localStorage.setItem("userData",JSON.stringify(this.user)),localStorage.setItem("userConfig",JSON.stringify(this.config)),o.data.user}catch(o){throw(((e=o.response)==null?void 0:e.status)===401||((t=o.response)==null?void 0:t.status)===403)&&(this.clearAuth(),((s=o.response)==null?void 0:s.status)===403)?new Error(((r=o.response.data)==null?void 0:r.message)||"Your account has been disabled"):o}},async getUserApiKeys(e=!1){try{const t={};e&&(t.includeDeleted="true");const s=await k.get(`${v}/api-keys`,{params:t});return s.data.success?s.data.apiKeys:[]}catch(t){throw console.error("Failed to fetch API keys:",t),t}},async createApiKey(e){try{return(await k.post(`${v}/api-keys`,e)).data}catch(t){throw console.error("Failed to create API key:",t),t}},async deleteApiKey(e){try{return(await k.delete(`${v}/api-keys/${e}`)).data}catch(t){throw console.error("Failed to delete API key:",t),t}},async getUserUsageStats(e={}){try{const t=await k.get(`${v}/usage-stats`,{params:e});return t.data.success?t.data.stats:null}catch(t){throw console.error("Failed to fetch usage stats:",t),t}},clearAuth(){this.user=null,this.sessionToken=null,this.isAuthenticated=!1,this.config=null,localStorage.removeItem("userToken"),localStorage.removeItem("userData"),localStorage.removeItem("userConfig"),delete k.defaults.headers.common["x-user-token"]},setAuthHeader(){this.sessionToken&&(k.defaults.headers.common["x-user-token"]=this.sessionToken)},setupAxiosInterceptors(){k.interceptors.response.use(e=>e,e=>{var t,s;if(((t=e.response)==null?void 0:t.status)===403){const r=(s=e.response.data)==null?void 0:s.message;r&&(r.includes("disabled")||r.includes("Account disabled"))&&(this.clearAuth(),x(r,"error"),window.location.pathname!=="/user-login"&&(window.location.href="/user-login"))}return Promise.reject(e)})}}}),ve=()=>T(()=>import("./LoginView-Bk2509Bx.js"),__vite__mapDeps([0,1,2,3,4,5,6])),Ge=()=>T(()=>import("./UserLoginView-CQ2slm3o.js"),__vite__mapDeps([7,1,2,3,4,5,6])),_e=()=>T(()=>import("./UserDashboardView-CxHhaP6a.js"),__vite__mapDeps([8,1,2,3,9,10,11,12,4,5,6])),we=()=>T(()=>import("./UserManagementView-CaiXdQvq.js"),__vite__mapDeps([13,1,9,10,5,4,6])),E=()=>T(()=>import("./MainLayout-C8oFjafl.js"),__vite__mapDeps([14,1,15,16,2,3,9,10,4,5,6,17])),Oe=()=>T(()=>import("./DashboardView-BzrWMTub.js"),__vite__mapDeps([18,4,1,5,6,19,20])),Ie=()=>T(()=>import("./ApiKeysView-DZf3x888.js"),__vite__mapDeps([21,4,1,5,6,9,10,22,23,24,25])),Ce=()=>T(()=>import("./ApiKeyUsageRecordsView-DEBCoJV1.js"),__vite__mapDeps([26,4,1,5,6,27,28])),$e=()=>T(()=>import("./AccountsView-mqqu5LbU.js"),__vite__mapDeps([29,4,1,5,6,9,10,19,23,24,30])),Ue=()=>T(()=>import("./AccountUsageRecordsView-CAVEOn9q.js"),__vite__mapDeps([31,4,1,5,6,27,28])),De=()=>T(()=>import("./SettingsView-BSo4LhAq.js"),__vite__mapDeps([32,1,9,10,4,5,6,33])),xe=()=>T(()=>import("./ApiStatsView-D5wlfbRX.js"),__vite__mapDeps([34,1,15,16,2,3,5,22,11,12,4,6,35])),Le=()=>T(()=>import("./QuotaCardsView-B9kpLmPn.js"),__vite__mapDeps([36,1,9,10,4,5,6])),Re=[{path:"/",redirect:()=>{const e=window.location.pathname,t=$.basePath.replace(/\/$/,"");return e===t||e===t+"/","/api-stats"}},{path:"/login",name:"Login",component:ve,meta:{requiresAuth:!1}},{path:"/admin-login",redirect:"/login"},{path:"/user-login",name:"UserLogin",component:Ge,meta:{requiresAuth:!1,userAuth:!0}},{path:"/user-dashboard",name:"UserDashboard",component:_e,meta:{requiresUserAuth:!0}},{path:"/api-stats",name:"ApiStats",component:xe,meta:{requiresAuth:!1}},{path:"/dashboard",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"Dashboard",component:Oe}]},{path:"/api-keys",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeys",component:Ie}]},{path:"/api-keys/:keyId/usage-records",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"ApiKeyUsageRecords",component:Ce}]},{path:"/accounts",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"Accounts",component:$e}]},{path:"/accounts/:accountId/usage-records",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"AccountUsageRecords",component:Ue}]},{path:"/settings",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"Settings",component:De}]},{path:"/user-management",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"UserManagement",component:we}]},{path:"/quota-cards",component:E,meta:{requiresAuth:!0},children:[{path:"",name:"QuotaCards",component:Le}]},{path:"/:pathMatch(.*)*",redirect:"/api-stats"}],L=ne({history:ie($.basePath),routes:Re});L.beforeEach(async(e,t,s)=>{const r=te(),o=J();if(console.log("路由导航:",{to:e.path,from:t.path,fullPath:e.fullPath,requiresAuth:e.meta.requiresAuth,requiresUserAuth:e.meta.requiresUserAuth,isAuthenticated:r.isAuthenticated,isUserAuthenticated:o.isAuthenticated}),e.path===t.path&&e.fullPath===t.fullPath)return s();if(e.meta.requiresUserAuth){if(!o.isAuthenticated)try{if(!await o.checkAuth())return s("/user-login")}catch(i){return i.message&&i.message.includes("disabled")&&x(i.message,"error"),s("/user-login")}return s()}e.path==="/api-stats"||e.path.startsWith("/api-stats")?s():e.path==="/user-login"?o.isAuthenticated?s("/user-dashboard"):s():e.meta.requiresAuth&&!r.isAuthenticated?s("/login"):e.path==="/login"&&r.isAuthenticated?s("/dashboard"):s()});const V=k.create({baseURL:$.apiPrefix,timeout:3e4,headers:{"Content-Type":"application/json"}});V.interceptors.request.use(e=>{const t=localStorage.getItem("authToken");return t&&(e.headers.Authorization=`Bearer ${t}`),e});V.interceptors.response.use(e=>e.data,e=>{var t;if(((t=e.response)==null?void 0:t.status)===401){const s=window.location.pathname+window.location.hash,r=s.includes("/api-stats")||s.includes("/user-login");!s.includes("/login")&&!s.endsWith("/")&&!r&&(localStorage.removeItem("authToken"),window.location.href=Pe())}return Promise.reject(e)});const a=async e=>{var t,s;try{return await V(e)}catch(r){console.error("Request failed:",r);const o=(t=r.response)==null?void 0:t.data;if(o){if(typeof o.success<"u")return o;if(o.error||o.message)return{success:!1,message:o.message||o.error}}const i=(s=r.response)==null?void 0:s.status;return{success:!1,message:{401:"未授权,请重新登录",403:"无权限访问",404:"请求的资源不存在",500:"服务器内部错误"}[i]||r.message||"请求失败"}}},Me=()=>a({url:"/apiStats/models",method:"GET"}),Ke=e=>a({url:"/apiStats/api/get-key-id",method:"POST",data:{apiKey:e}}),Be=e=>a({url:"/apiStats/api/user-stats",method:"POST",data:{apiId:e}}),Ve=(e,t="daily")=>a({url:"/apiStats/api/user-model-stats",method:"POST",data:{apiId:e,period:t}}),qe=e=>a({url:"/apiStats/api/batch-stats",method:"POST",data:{apiIds:e}}),Ne=(e,t="daily")=>a({url:"/apiStats/api/batch-model-stats",method:"POST",data:{apiIds:e,period:t}}),X=e=>a({url:"/web/auth/login",method:"POST",data:e}),Z=()=>a({url:"/web/auth/user",method:"GET"}),He=e=>a({url:"/web/auth/change-password",method:"POST",data:e}),ee=()=>a({url:"/admin/oem-settings",method:"GET"}),Fe=e=>a({url:"/admin/oem-settings",method:"PUT",data:e}),We=()=>a({url:"/apiStats/service-rates",method:"GET"}),ze=e=>a({url:"/apiStats/api/redeem-card",method:"POST",data:e}),Qe=(e,t={})=>a({url:"/apiStats/api/redemption-history",method:"GET",params:{apiId:e,...t}}),je=()=>a({url:"/admin/dashboard",method:"GET"}),Ye=e=>a({url:`/admin/usage-costs?period=${e}`,method:"GET"}),Je=e=>a({url:e,method:"GET"}),Xe=()=>a({url:"/admin/supported-clients",method:"GET"}),Ze=()=>a({url:"/admin/api-keys",method:"GET"}),et=e=>a({url:`/admin/api-keys?${e}`,method:"GET"}),tt=e=>a({url:"/admin/api-keys",method:"POST",data:e}),at=(e,t)=>a({url:`/admin/api-keys/${e}`,method:"PUT",data:t}),st=e=>a({url:`/admin/api-keys/${e}/toggle`,method:"PUT"}),ot=e=>a({url:`/admin/api-keys/${e}`,method:"DELETE"}),rt=(e,t)=>a({url:`/admin/api-keys/${e}/stats`,method:"GET",params:t}),nt=(e,t)=>a({url:`/admin/api-keys/${e}/model-stats`,method:"GET",params:t}),it=()=>a({url:"/admin/api-keys/tags",method:"GET"}),ct=()=>a({url:"/admin/api-keys/tags/details",method:"GET"}),dt=e=>a({url:"/admin/api-keys/tags",method:"POST",data:{name:e}}),ut=e=>a({url:`/admin/api-keys/tags/${encodeURIComponent(e)}`,method:"DELETE"}),lt=(e,t)=>a({url:`/admin/api-keys/tags/${encodeURIComponent(e)}`,method:"PUT",data:{newName:t}}),mt=()=>a({url:"/admin/api-keys/used-models",method:"GET"}),pt=e=>a({url:"/admin/api-keys/batch-stats",method:"POST",data:e}),ht=e=>a({url:"/admin/api-keys/batch-last-usage",method:"POST",data:e}),gt=()=>a({url:"/admin/api-keys/deleted",method:"GET"}),At=()=>a({url:"/admin/api-keys/cost-sort-status",method:"GET"}),ft=e=>a({url:`/admin/api-keys/${e}/restore`,method:"POST"}),yt=e=>a({url:`/admin/api-keys/${e}/permanent`,method:"DELETE"}),Tt=()=>a({url:"/admin/api-keys/deleted/clear-all",method:"DELETE"}),bt=e=>a({url:"/admin/api-keys/batch",method:"DELETE",data:e}),St=(e,t)=>a({url:`/admin/api-keys/${e}/expiration`,method:"PATCH",data:t}),kt=e=>a({url:"/admin/api-keys/batch",method:"POST",data:e}),Pt=e=>a({url:"/admin/api-keys/batch",method:"PUT",data:e}),Et=(e,t)=>a({url:`/admin/api-keys/${e}/usage-records`,method:"GET",params:t}),vt=()=>a({url:"/admin/claude-accounts",method:"GET"}),Gt=e=>a({url:"/admin/claude-accounts",method:"POST",data:e}),_t=(e,t)=>a({url:`/admin/claude-accounts/${e}`,method:"PUT",data:t}),wt=e=>a({url:`/admin/claude-accounts/${e}/refresh`,method:"POST"}),Ot=e=>a({url:"/admin/claude-accounts/generate-auth-url",method:"POST",data:e}),It=e=>a({url:"/admin/claude-accounts/exchange-code",method:"POST",data:e}),Ct=e=>a({url:"/admin/claude-accounts/generate-setup-token-url",method:"POST",data:e}),$t=e=>a({url:"/admin/claude-accounts/exchange-setup-token",method:"POST",data:e}),Ut=e=>a({url:"/admin/claude-accounts/oauth-with-cookie",method:"POST",data:e}),Dt=e=>a({url:"/admin/claude-accounts/setup-token-with-cookie",method:"POST",data:e}),xt=()=>a({url:"/admin/claude-console-accounts",method:"GET"}),Lt=e=>a({url:"/admin/claude-console-accounts",method:"POST",data:e}),Rt=(e,t)=>a({url:`/admin/claude-console-accounts/${e}`,method:"PUT",data:t}),Mt=()=>a({url:"/admin/bedrock-accounts",method:"GET"}),Kt=e=>a({url:"/admin/bedrock-accounts",method:"POST",data:e}),Bt=(e,t)=>a({url:`/admin/bedrock-accounts/${e}`,method:"PUT",data:t}),Vt=()=>a({url:"/admin/gemini-accounts",method:"GET"}),qt=e=>a({url:"/admin/gemini-accounts",method:"POST",data:e}),Nt=(e,t)=>a({url:`/admin/gemini-accounts/${e}`,method:"PUT",data:t}),Ht=e=>a({url:"/admin/gemini-accounts/generate-auth-url",method:"POST",data:e}),Ft=e=>a({url:"/admin/gemini-accounts/exchange-code",method:"POST",data:e}),Wt=()=>a({url:"/admin/gemini-api-accounts",method:"GET"}),zt=e=>a({url:"/admin/gemini-api-accounts",method:"POST",data:e}),Qt=(e,t)=>a({url:`/admin/gemini-api-accounts/${e}`,method:"PUT",data:t}),jt=()=>a({url:"/admin/openai-accounts",method:"GET"}),Yt=e=>a({url:"/admin/openai-accounts",method:"POST",data:e}),Jt=(e,t)=>a({url:`/admin/openai-accounts/${e}`,method:"PUT",data:t}),Xt=e=>a({url:"/admin/openai-accounts/generate-auth-url",method:"POST",data:e}),Zt=e=>a({url:"/admin/openai-accounts/exchange-code",method:"POST",data:e}),ea=()=>a({url:"/admin/openai-responses-accounts",method:"GET"}),ta=e=>a({url:"/admin/openai-responses-accounts",method:"POST",data:e}),aa=(e,t)=>a({url:`/admin/openai-responses-accounts/${e}`,method:"PUT",data:t}),sa=()=>a({url:"/admin/azure-openai-accounts",method:"GET"}),oa=e=>a({url:"/admin/azure-openai-accounts",method:"POST",data:e}),ra=(e,t)=>a({url:`/admin/azure-openai-accounts/${e}`,method:"PUT",data:t}),na=()=>a({url:"/admin/droid-accounts",method:"GET"}),ia=e=>a({url:"/admin/droid-accounts",method:"POST",data:e}),ca=(e,t)=>a({url:`/admin/droid-accounts/${e}`,method:"PUT",data:t}),da=e=>a({url:"/admin/droid-accounts/generate-auth-url",method:"POST",data:e}),ua=e=>a({url:"/admin/droid-accounts/exchange-code",method:"POST",data:e}),la=e=>a({url:`/admin/droid-accounts/${e}`,method:"GET"}),ma=()=>a({url:"/admin/ccr-accounts",method:"GET"}),pa=e=>a({url:"/admin/ccr-accounts",method:"POST",data:e}),ha=(e,t)=>a({url:`/admin/ccr-accounts/${e}`,method:"PUT",data:t}),ga=e=>a({url:e,method:"PUT"}),Aa=e=>a({url:e,method:"DELETE"}),fa=e=>a({url:e,method:"POST"}),ya=(e,t)=>a({url:e,method:"PUT",data:t}),Ta=()=>a({url:"/admin/claude-accounts/usage",method:"GET"}),ba=()=>a({url:"/admin/accounts/binding-counts",method:"GET"}),Sa=(e,t,s=30)=>a({url:`/admin/accounts/${e}/usage-history?platform=${t}&days=${s}`,method:"GET"}),ka=e=>a({url:`/admin/claude-console-accounts/${e}/usage`,method:"GET"}),Pa=(e,t)=>a({url:`/admin/accounts/${e}/usage-records`,method:"GET",params:t}),Ea=()=>a({url:"/admin/account-groups",method:"GET"}),va=e=>a({url:"/admin/account-groups",method:"POST",data:e}),Ga=(e,t)=>a({url:`/admin/account-groups/${e}`,method:"PUT",data:t}),_a=e=>a({url:`/admin/account-groups/${e}`,method:"DELETE"}),wa=e=>a({url:`/admin/account-groups/${e}/members`,method:"GET"}),Oa=()=>a({url:"/admin/users",method:"GET"}),Ia=e=>a({url:"/admin/quota-cards",method:"POST",data:e}),Ca=e=>a({url:`/admin/quota-cards/${e}`,method:"DELETE"}),$a=e=>a({url:"/admin/quota-cards",method:"GET",params:e}),Ua=()=>a({url:"/admin/quota-cards/stats",method:"GET"}),Da=()=>a({url:"/admin/redemptions",method:"GET"}),xa=(e,t)=>a({url:`/admin/redemptions/${e}/revoke`,method:"POST",data:t}),La=()=>a({url:"/admin/quota-cards/limits",method:"GET"}),Ra=e=>a({url:"/admin/quota-cards/limits",method:"PUT",data:e}),Ma=(e,t)=>a({url:`/admin/accounts/${e}/balance`,method:"GET",params:t}),Ka=(e,t)=>a({url:`/admin/accounts/${e}/balance/refresh`,method:"POST",data:t}),Ba=()=>a({url:"/admin/accounts/balance/summary",method:"GET"}),Va=(e,t)=>a({url:`/admin/accounts/balance/platform/${e}`,method:"GET",params:t}),qa=(e,t)=>a({url:`/admin/accounts/${e}/balance/script?platform=${t}`,method:"GET"}),Na=(e,t,s)=>a({url:`/admin/accounts/${e}/balance/script?platform=${t}`,method:"PUT",data:s}),Ha=(e,t,s)=>a({url:`/admin/accounts/${e}/balance/script/test?platform=${t}`,method:"POST",data:s}),Fa=()=>a({url:"/admin/balance-scripts/default",method:"GET"}),Wa=e=>a({url:"/admin/balance-scripts/default",method:"PUT",data:e}),za=e=>a({url:"/admin/balance-scripts/default/test",method:"POST",data:e}),Qa=e=>a({url:"/users",method:"GET",params:e}),ja=()=>a({url:"/users/stats/overview",method:"GET"}),Ya=e=>a({url:`/users/${e}`,method:"GET"}),Ja=(e,t)=>a({url:`/users/${e}/status`,method:"PATCH",data:t}),Xa=e=>a({url:`/users/${e}/disable-keys`,method:"POST"}),Za=(e,t)=>a({url:`/users/${e}/usage-stats`,method:"GET",params:t}),es=(e,t)=>a({url:`/users/${e}/role`,method:"PATCH",data:t}),ts=e=>a({url:"/admin/webhook/config",method:"GET",...e}),as=(e,t)=>a({url:"/admin/webhook/config",method:"POST",data:e,...t}),ss=(e,t)=>a({url:"/admin/webhook/platforms",method:"POST",data:e,...t}),os=(e,t)=>a({url:`/admin/webhook/platforms/${e}`,method:"DELETE",...t}),rs=(e,t,s)=>a({url:`/admin/webhook/platforms/${e}`,method:"PUT",data:t,...s}),ns=(e,t)=>a({url:`/admin/webhook/platforms/${e}/toggle`,method:"POST",...t}),is=(e,t)=>a({url:"/admin/webhook/test",method:"POST",data:e,...t}),cs=e=>a({url:"/admin/webhook/test-notification",method:"POST",...e}),ds=e=>a({url:"/admin/claude-relay-config",method:"GET",...e}),us=(e,t)=>a({url:"/admin/claude-relay-config",method:"PUT",data:e,...t}),ls=e=>a({url:"/admin/service-rates",method:"GET",...e}),ms=(e,t)=>a({url:"/admin/service-rates",method:"PUT",data:e,...t}),ps=()=>a({url:"/admin/check-updates",method:"GET"}),hs=()=>a({url:"/admin/claude-code-version",method:"GET"}),gs=()=>a({url:"/admin/claude-code-version/clear",method:"POST"}),Bs=Object.freeze(Object.defineProperty({__proto__:null,batchCreateApiKeysApi:kt,batchDeleteApiKeysApi:bt,batchUpdateApiKeysApi:Pt,changePasswordApi:He,checkUpdatesApi:ps,claudeOAuthWithCookieApi:Ut,claudeSetupTokenWithCookieApi:Dt,clearAllDeletedApiKeysApi:Tt,clearClaudeCodeVersionApi:gs,createAccountGroupApi:va,createApiKeyApi:tt,createApiKeyTagApi:dt,createAzureOpenAIAccountApi:oa,createBedrockAccountApi:Kt,createCcrAccountApi:pa,createClaudeAccountApi:Gt,createClaudeConsoleAccountApi:Lt,createDroidAccountApi:ia,createGeminiAccountApi:qt,createGeminiApiAccountApi:zt,createOpenAIAccountApi:Yt,createOpenAIResponsesAccountApi:ta,createQuotaCardApi:Ia,createWebhookPlatformApi:ss,deleteAccountByEndpointApi:Aa,deleteAccountGroupApi:_a,deleteApiKeyApi:ot,deleteApiKeyTagApi:ut,deleteQuotaCardApi:Ca,deleteWebhookPlatformApi:os,disableFrontUserKeysApi:Xa,exchangeClaudeCodeApi:It,exchangeClaudeSetupTokenApi:$t,exchangeDroidCodeApi:ua,exchangeGeminiCodeApi:Ft,exchangeOpenAICodeApi:Zt,generateClaudeAuthUrlApi:Ot,generateClaudeSetupTokenUrlApi:Ct,generateDroidAuthUrlApi:da,generateGeminiAuthUrlApi:Ht,generateOpenAIAuthUrlApi:Xt,getAccountBalanceApi:Ma,getAccountBalanceScriptApi:qa,getAccountGroupMembersApi:wa,getAccountGroupsApi:Ea,getAccountUsageHistoryApi:Sa,getAccountUsageRecordsByIdApi:Pa,getAccountsBindingCountsApi:ba,getAdminServiceRatesApi:ls,getApiKeyModelStatsApi:nt,getApiKeyStatsApi:rt,getApiKeyTagsApi:it,getApiKeyTagsDetailsApi:ct,getApiKeyUsageRecordsApi:Et,getApiKeyUsedModelsApi:mt,getApiKeysApi:Ze,getApiKeysBatchLastUsageApi:ht,getApiKeysBatchStatsApi:pt,getApiKeysCostSortStatusApi:At,getApiKeysWithParamsApi:et,getAuthUserApi:Z,getAzureOpenAIAccountsApi:sa,getBalanceByPlatformApi:Va,getBalanceSummaryApi:Ba,getBatchModelStatsApi:Ne,getBatchStatsApi:qe,getBedrockAccountsApi:Mt,getCcrAccountsApi:ma,getClaudeAccountsApi:vt,getClaudeAccountsUsageApi:Ta,getClaudeCodeVersionApi:hs,getClaudeConsoleAccountUsageApi:ka,getClaudeConsoleAccountsApi:xt,getClaudeRelayConfigApi:ds,getDashboardApi:je,getDefaultBalanceScriptApi:Fa,getDeletedApiKeysApi:gt,getDroidAccountByIdApi:la,getDroidAccountsApi:na,getFrontUserByIdApi:Ya,getFrontUserUsageStatsApi:Za,getFrontUsersApi:Qa,getFrontUsersStatsOverviewApi:ja,getGeminiAccountsApi:Vt,getGeminiApiAccountsApi:Wt,getKeyIdApi:Ke,getModelsApi:Me,getOemSettingsApi:ee,getOpenAIAccountsApi:jt,getOpenAIResponsesAccountsApi:ea,getQuotaCardLimitsApi:La,getQuotaCardsStatsApi:Ua,getQuotaCardsWithParamsApi:$a,getRedemptionHistoryByApiIdApi:Qe,getRedemptionsApi:Da,getServiceRatesApi:We,getSupportedClientsApi:Xe,getUsageCostsApi:Ye,getUsageStatsApi:Je,getUserModelStatsApi:Ve,getUserStatsApi:Be,getUsersApi:Oa,getWebhookConfigApi:ts,loginApi:X,permanentDeleteApiKeyApi:yt,redeemCardByApiIdApi:ze,refreshAccountBalanceApi:Ka,refreshClaudeAccountApi:wt,renameApiKeyTagApi:lt,restoreApiKeyApi:ft,revokeRedemptionApi:xa,testAccountBalanceScriptApi:Ha,testAccountByEndpointApi:fa,testDefaultBalanceScriptApi:za,testWebhookApi:is,testWebhookNotificationApi:cs,toggleAccountStatusApi:ga,toggleApiKeyApi:st,toggleWebhookPlatformApi:ns,updateAccountBalanceScriptApi:Na,updateAccountByEndpointApi:ya,updateAccountGroupApi:Ga,updateAdminServiceRatesApi:ms,updateApiKeyApi:at,updateApiKeyExpirationApi:St,updateAzureOpenAIAccountApi:ra,updateBedrockAccountApi:Bt,updateCcrAccountApi:ha,updateClaudeAccountApi:_t,updateClaudeConsoleAccountApi:Rt,updateClaudeRelayConfigApi:us,updateDefaultBalanceScriptApi:Wa,updateDroidAccountApi:ca,updateFrontUserRoleApi:es,updateFrontUserStatusApi:Ja,updateGeminiAccountApi:Nt,updateGeminiApiAccountApi:Qt,updateOemSettingsApi:Fe,updateOpenAIAccountApi:Jt,updateOpenAIResponsesAccountApi:aa,updateQuotaCardLimitsApi:Ra,updateWebhookConfigApi:as,updateWebhookPlatformApi:rs},Symbol.toStringTag,{value:"Module"})),te=B("auth",()=>{const e=S(!1),t=S(localStorage.getItem("authToken")||""),s=S(""),r=S(""),o=S(!1),i=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",faviconData:""}),d=S(!0),g=O(()=>!!t.value&&e.value),A=O(()=>t.value),m=O(()=>({username:s.value}));async function h(p){o.value=!0,r.value="";try{const n=await X(p);n.success?(t.value=n.token,s.value=n.username||p.username,e.value=!0,localStorage.setItem("authToken",n.token),await L.push("/dashboard")):r.value=n.message||"登录失败"}catch(n){r.value=n.message||"登录失败,请检查用户名和密码"}finally{o.value=!1}}function c(){e.value=!1,t.value="",s.value="",localStorage.removeItem("authToken"),L.push("/login")}function f(){t.value&&(e.value=!0,b())}async function b(){try{const p=await Z();if(!p.success||!p.user){c();return}s.value=p.user.username}catch{c()}}async function I(){d.value=!0;try{const p=await ee();if(p.success&&p.data){if(i.value={...i.value,...p.data},p.data.siteIconData||p.data.siteIcon){const n=document.querySelector("link[rel*='icon']")||document.createElement("link");n.type="image/x-icon",n.rel="shortcut icon",n.href=p.data.siteIconData||p.data.siteIcon,document.getElementsByTagName("head")[0].appendChild(n)}p.data.siteName&&(document.title=`${p.data.siteName} - 管理后台`)}}catch(p){console.error("加载OEM设置失败:",p)}finally{d.value=!1}}return{isLoggedIn:e,authToken:t,username:s,loginError:r,loginLoading:o,oemSettings:i,oemLoading:d,isAuthenticated:g,token:A,user:m,login:h,logout:c,checkAuth:f,loadOemSettings:I}}),y={LIGHT:"light",DARK:"dark",AUTO:"auto"},_={purple:{name:"默认紫",nameEn:"Purple",primary:"#667eea",secondary:"#764ba2",accent:"#f093fb",gradientStart:"#667eea",gradientMid:"#764ba2",gradientEnd:"#f093fb",glassStrong:"rgba(255, 255, 255, 0.95)",glass:"rgba(255, 255, 255, 0.1)",darkPrimary:"#818cf8",darkSecondary:"#a78bfa",darkAccent:"#c084fc",darkGradientStart:"#1f2937",darkGradientMid:"#374151",darkGradientEnd:"#4b5563",darkGlassStrong:"rgba(31, 41, 55, 0.95)",darkGlass:"rgba(0, 0, 0, 0.2)"},celadon:{name:"青瓷",nameEn:"Celadon",primary:"#7faaaf",secondary:"#5d8a8e",accent:"#a8d8dc",gradientStart:"#7faaaf",gradientMid:"#5d8a8e",gradientEnd:"#3d6a6e",glassStrong:"rgba(248, 253, 253, 0.95)",glass:"rgba(168, 216, 220, 0.1)",darkPrimary:"#9fcacd",darkSecondary:"#7daaae",darkAccent:"#c8f8fc",darkGradientStart:"#1a2a2b",darkGradientMid:"#2a3a3b",darkGradientEnd:"#3a4a4b",darkGlassStrong:"rgba(26, 42, 43, 0.95)",darkGlass:"rgba(0, 20, 20, 0.2)"},cinnabar:{name:"朱砂",nameEn:"Cinnabar",primary:"#c45a5a",secondary:"#8b3a3a",accent:"#e8a0a0",gradientStart:"#c45a5a",gradientMid:"#8b3a3a",gradientEnd:"#5c2a2a",glassStrong:"rgba(255, 252, 252, 0.95)",glass:"rgba(232, 160, 160, 0.1)",darkPrimary:"#e47a7a",darkSecondary:"#ab5a5a",darkAccent:"#f8c0c0",darkGradientStart:"#2a1a1a",darkGradientMid:"#3a2a2a",darkGradientEnd:"#4a3a3a",darkGlassStrong:"rgba(42, 26, 26, 0.95)",darkGlass:"rgba(20, 0, 0, 0.2)"},jade:{name:"墨玉",nameEn:"Jade",primary:"#4a7c59",secondary:"#2d5a3d",accent:"#7eb08c",gradientStart:"#4a7c59",gradientMid:"#2d5a3d",gradientEnd:"#1a3d28",glassStrong:"rgba(250, 255, 252, 0.95)",glass:"rgba(126, 176, 140, 0.1)",darkPrimary:"#6a9c79",darkSecondary:"#4d7a5d",darkAccent:"#9ed0ac",darkGradientStart:"#1a2a1e",darkGradientMid:"#2a3a2e",darkGradientEnd:"#3a4a3e",darkGlassStrong:"rgba(26, 42, 30, 0.95)",darkGlass:"rgba(0, 20, 10, 0.2)"},indigo:{name:"藏蓝",nameEn:"Indigo",primary:"#3a5a8c",secondary:"#2a4066",accent:"#6a8ab8",gradientStart:"#3a5a8c",gradientMid:"#2a4066",gradientEnd:"#1a2a44",glassStrong:"rgba(250, 252, 255, 0.95)",glass:"rgba(106, 138, 184, 0.1)",darkPrimary:"#5a7aac",darkSecondary:"#4a6086",darkAccent:"#8aaad8",darkGradientStart:"#1a1a2a",darkGradientMid:"#2a2a3a",darkGradientEnd:"#3a3a4a",darkGlassStrong:"rgba(26, 26, 42, 0.95)",darkGlass:"rgba(0, 0, 20, 0.2)"},amber:{name:"琥珀",nameEn:"Amber",primary:"#c49a3a",secondary:"#8b6914",accent:"#e8c86a",gradientStart:"#c49a3a",gradientMid:"#8b6914",gradientEnd:"#5c4a0a",glassStrong:"rgba(255, 253, 248, 0.95)",glass:"rgba(232, 200, 106, 0.1)",darkPrimary:"#e4ba5a",darkSecondary:"#ab8934",darkAccent:"#f8e88a",darkGradientStart:"#2a2a1a",darkGradientMid:"#3a3a2a",darkGradientEnd:"#4a4a3a",darkGlassStrong:"rgba(42, 42, 26, 0.95)",darkGlass:"rgba(20, 20, 0, 0.2)"},rouge:{name:"胭脂",nameEn:"Rouge",primary:"#b85a6a",secondary:"#8a3a4a",accent:"#e8a0b0",gradientStart:"#b85a6a",gradientMid:"#8a3a4a",gradientEnd:"#5c2a3a",glassStrong:"rgba(255, 250, 252, 0.95)",glass:"rgba(232, 160, 176, 0.1)",darkPrimary:"#d87a8a",darkSecondary:"#aa5a6a",darkAccent:"#f8c0d0",darkGradientStart:"#2a1a1e",darkGradientMid:"#3a2a2e",darkGradientEnd:"#4a3a3e",darkGlassStrong:"rgba(42, 26, 30, 0.95)",darkGlass:"rgba(20, 0, 10, 0.2)"}},As=B("theme",()=>{const e=S(y.AUTO),t=S(!1),s=S("purple"),r=O(()=>e.value===y.DARK?!0:e.value===y.LIGHT?!1:t.value),o=O(()=>r.value?y.DARK:y.LIGHT),i=O(()=>_[s.value]||_.purple),d=()=>{const n=window.matchMedia("(prefers-color-scheme: dark)");t.value=n.matches;const u=localStorage.getItem("themeMode");u&&Object.values(y).includes(u)?e.value=u:e.value=y.AUTO;const l=localStorage.getItem("colorScheme");l&&_[l]&&(s.value=l),g(),b()},g=()=>{const n=document.documentElement;r.value?n.classList.add("dark"):n.classList.remove("dark"),A()},A=()=>{const n=document.documentElement,u=i.value,l=r.value,q=l?u.darkPrimary:u.primary,N=l?u.darkSecondary:u.secondary,H=l?u.darkAccent:u.accent;n.style.setProperty("--primary-color",q),n.style.setProperty("--secondary-color",N),n.style.setProperty("--accent-color",H),n.style.setProperty("--bg-gradient-start",l?u.darkGradientStart:u.gradientStart),n.style.setProperty("--bg-gradient-mid",l?u.darkGradientMid:u.gradientMid),n.style.setProperty("--bg-gradient-end",l?u.darkGradientEnd:u.gradientEnd),n.style.setProperty("--glass-strong-color",l?u.darkGlassStrong:u.glassStrong),n.style.setProperty("--glass-color",l?u.darkGlass:u.glass),n.style.setProperty("--surface-color",l?u.darkGlassStrong:u.glassStrong),n.style.setProperty("--table-bg",l?u.darkGlassStrong:u.glassStrong),n.style.setProperty("--input-bg",l?u.darkGlassStrong:u.glassStrong);const M=re=>{const D=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(re);return D?`${parseInt(D[1],16)}, ${parseInt(D[2],16)}, ${parseInt(D[3],16)}`:"102, 126, 234"},U=M(q),se=M(N),oe=M(H);n.style.setProperty("--primary-rgb",U),n.style.setProperty("--secondary-rgb",se),n.style.setProperty("--accent-rgb",oe),n.style.setProperty("--table-hover",`rgba(${U}, ${l?.1:.05})`),n.style.setProperty("--border-color",`rgba(${U}, ${l?.25:.2})`),n.style.setProperty("--input-border",`rgba(${U}, ${l?.3:.25})`)},m=n=>{Object.values(y).includes(n)&&(e.value=n)},h=()=>{const n=[y.LIGHT,y.DARK,y.AUTO],l=(n.indexOf(e.value)+1)%n.length;e.value=n[l]},c=n=>{_[n]&&(s.value=n)},f=()=>{const n=Object.keys(_),l=(n.indexOf(s.value)+1)%n.length;s.value=n[l]};K(e,n=>{localStorage.setItem("themeMode",n),g()}),K(s,n=>{localStorage.setItem("colorScheme",n),A()}),K(t,()=>{e.value===y.AUTO&&g()});const b=()=>{const n=window.matchMedia("(prefers-color-scheme: dark)"),u=l=>{t.value=l.matches};return t.value=n.matches,n.addEventListener("change",u),()=>{n.removeEventListener("change",u)}};return{themeMode:e,isDarkMode:r,currentTheme:o,systemPrefersDark:t,colorScheme:s,currentColorScheme:i,ThemeMode:y,ColorSchemes:_,initTheme:d,setThemeMode:m,cycleThemeMode:h,watchSystemTheme:b,setColorScheme:c,cycleColorScheme:f,toggleTheme:()=>{h()},setTheme:n=>{n==="dark"?m(y.DARK):n==="light"&&m(y.LIGHT)}}}),ae=(e,t)=>{const s=e.__vccOpts||e;for(const[r,o]of t)s[r]=o;return s},fs={class:"toast-container"},ys=["onClick"],Ts={class:"toast-content"},bs={class:"toast-icon"},Ss={class:"toast-body"},ks={key:0,class:"toast-title"},Ps={class:"toast-message"},Es=["onClick"],vs={__name:"ToastNotification",setup(e,{expose:t}){const s=S([]);let r=0;const o=m=>{const h={success:"fas fa-check-circle",error:"fas fa-exclamation-circle",warning:"fas fa-exclamation-triangle",info:"fas fa-info-circle"};return h[m]||h.info},i=(m,h="info",c=null,f=5e3)=>{const b=++r,I={id:b,message:m,type:h,title:c,duration:f,isVisible:!1};return s.value.push(I),setTimeout(()=>{I.isVisible=!0},10),f>0&&setTimeout(()=>{d(b)},f),b},d=m=>{const h=s.value.findIndex(c=>c.id===m);if(h>-1){const c=s.value[h];c.isVisible=!1,setTimeout(()=>{const f=s.value.findIndex(b=>b.id===m);f>-1&&s.value.splice(f,1)},300)}},g=()=>{s.value.forEach(m=>{m.isVisible=!1}),setTimeout(()=>{s.value.length=0},300)},A=(m,h="info",c=null,f=5e3)=>i(m,h,c,f);return Y(()=>{window.showToast=A}),ce(()=>{window.showToast===A&&delete window.showToast}),t({showToast:A,removeToast:d,clearAllToasts:g}),(m,h)=>(w(),de(me,{to:"body"},[P("div",fs,[(w(!0),C(le,null,ue(s.value,c=>(w(),C("div",{key:c.id,class:F(["toast",`toast-${c.type}`,c.isVisible?"toast-show":"toast-hide"]),onClick:f=>d(c.id)},[P("div",Ts,[P("div",bs,[P("i",{class:F(o(c.type))},null,2)]),P("div",Ss,[c.title?(w(),C("div",ks,z(c.title),1)):W("",!0),P("div",Ps,z(c.message),1)]),P("button",{class:"toast-close",onClick:pe(f=>d(c.id),["stop"])},h[0]||(h[0]=[P("i",{class:"fas fa-times"},null,-1)]),8,Es)]),c.duration>0?(w(),C("div",{key:0,class:"toast-progress",style:he({animationDuration:`${c.duration}ms`})},null,4)):W("",!0)],10,ys))),128))])]))}},Gs=ae(vs,[["__scopeId","data-v-6710a02e"]]),_s={id:"app"},ws={__name:"App",setup(e){const t=te(),s=As(),r=S();return Y(()=>{s.initTheme(),s.watchSystemTheme(),t.checkAuth(),t.loadOemSettings()}),(o,i)=>{const d=ge("router-view");return w(),C("div",_s,[Q(d),Q(Gs,{ref_key:"toastRef",ref:r},null,512)])}}},Os=ae(ws,[["__scopeId","data-v-6f9c4d09"]]),R=Ae(Os),Is=fe();R.use(Is);R.use(L);R.use(ye,{locale:Te});const Cs=J();Cs.setupAxiosInterceptors();R.mount("#app");export{ft as $,it as A,kt as B,vt as C,xt as D,Vt as E,Wt as F,jt as G,ea as H,Mt as I,na as J,Ea as K,Oa as L,Pt as M,dt as N,lt as O,ct as P,ut as Q,At as R,et as S,mt as T,gt as U,bt as V,Tt as W,pt as X,ht as Y,xs as Z,ae as _,As as a,ya as a$,yt as a0,nt as a1,St as a2,Et as a3,ua as a4,sa as a5,Gt as a6,Lt as a7,Kt as a8,qt as a9,Xt as aA,Zt as aB,da as aC,Ga as aD,va as aE,_a as aF,la as aG,Me as aH,hs as aI,ka as aJ,gs as aK,wa as aL,ha as aM,pa as aN,$ as aO,Ma as aP,Ka as aQ,Ha as aR,Na as aS,qa as aT,ma as aU,ba as aV,Ta as aW,Va as aX,Ms as aY,fa as aZ,Sa as a_,Yt as aa,ia as ab,oa as ac,ta as ad,zt as ae,_t as af,Rt as ag,Bt as ah,Nt as ai,Jt as aj,ra as ak,aa as al,Qt as am,ca as an,ga as ao,Bs as ap,Aa as aq,wt as ar,Ot as as,It as at,Ct as au,$t as av,Ut as aw,Dt as ax,Ht as ay,Ft as az,J as b,Pa as b0,ee as b1,Fe as b2,ts as b3,ls as b4,as as b5,cs as b6,us as b7,ms as b8,is as b9,rs as ba,ss as bb,ns as bc,os as bd,ds as be,Ke as bf,Be as bg,Ve as bh,We as bi,qe as bj,Ne as bk,ze as bl,Qe as bm,Ks as bn,$a as bo,Ua as bp,Da as bq,La as br,Ra as bs,Ca as bt,Ia as bu,xa as bv,Rs as c,Ya as d,es as e,Ls as f,Za as g,Qa as h,ja as i,Ja as j,Xa as k,ps as l,He as m,je as n,Ye as o,Je as p,Ba as q,Xe as r,x as s,Ze as t,te as u,tt as v,at as w,st as x,ot as y,rt as z};
diff --git a/assets/index-C0PReR6i.css b/assets/index-C0PReR6i.css
new file mode 100644
index 00000000..0c73b73e
--- /dev/null
+++ b/assets/index-C0PReR6i.css
@@ -0,0 +1,5 @@
+@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(/admin-next/assets/Inter-Light-14LG-y7V.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(/admin-next/assets/Inter-Regular-COLGFB3M.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(/admin-next/assets/Inter-Medium-CDhBSFyE.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(/admin-next/assets/Inter-SemiBold-BAEEcJ4E.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(/admin-next/assets/Inter-Bold-BOs3KVhN.woff2) format("woff2")}.toast-container[data-v-6710a02e]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;pointer-events:none}.toast[data-v-6710a02e]{min-width:320px;max-width:500px;background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e5e7eb;overflow:hidden;position:relative;pointer-events:auto;cursor:pointer;transform:translate(100%);opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{background:var(--bg-gradient-start);border:1px solid var(--border-color);box-shadow:0 8px 32px #0000004d}.toast-show[data-v-6710a02e]{transform:translate(0);opacity:1}.toast-hide[data-v-6710a02e]{transform:translate(100%);opacity:0}.toast-content[data-v-6710a02e]{display:flex;align-items:flex-start;padding:16px;gap:12px}.toast-icon[data-v-6710a02e]{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px}.toast-body[data-v-6710a02e]{flex:1}.toast-title[data-v-6710a02e]{font-weight:600;font-size:14px;line-height:1.4;margin-bottom:4px}.toast-message[data-v-6710a02e]{font-size:14px;line-height:1.5;word-wrap:break-word}.toast-close[data-v-6710a02e]{flex-shrink:0;width:24px;height:24px;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#9ca3af;transition:all .2s ease}.toast-close[data-v-6710a02e]:hover{background:#f3f4f6;color:#6b7280}.dark{background:var(--bg-gradient-mid);color:var(--text-secondary)}.toast-progress[data-v-6710a02e]{position:absolute;bottom:0;left:0;height:3px;background:currentColor;opacity:.3;animation:toast-progress-6710a02e linear forwards}@keyframes toast-progress-6710a02e{0%{width:100%}to{width:0%}}.toast-success[data-v-6710a02e]{border-left:4px solid #10b981}.toast-success .toast-icon[data-v-6710a02e]{color:#10b981;background:#d1fae5}.dark{background:#064e3b}.toast-success .toast-title[data-v-6710a02e]{color:#065f46}.dark{color:#10b981}.toast-success .toast-message[data-v-6710a02e]{color:#047857}.dark{color:#34d399}.toast-success .toast-progress[data-v-6710a02e]{background:#10b981}.toast-error[data-v-6710a02e]{border-left:4px solid #ef4444}.toast-error .toast-icon[data-v-6710a02e]{color:#ef4444;background:#fee2e2}.dark{background:#7f1d1d}.toast-error .toast-title[data-v-6710a02e]{color:#991b1b}.dark{color:#ef4444}.toast-error .toast-message[data-v-6710a02e]{color:#dc2626}.dark{color:#f87171}.toast-error .toast-progress[data-v-6710a02e]{background:#ef4444}.toast-warning[data-v-6710a02e]{border-left:4px solid #f59e0b}.toast-warning .toast-icon[data-v-6710a02e]{color:#f59e0b;background:#fef3c7}.dark{background:#78350f}.toast-warning .toast-title[data-v-6710a02e]{color:#92400e}.dark{color:#f59e0b}.toast-warning .toast-message[data-v-6710a02e]{color:#d97706}.dark{color:#fbbf24}.toast-warning .toast-progress[data-v-6710a02e]{background:#f59e0b}.toast-info[data-v-6710a02e]{border-left:4px solid #3b82f6}.toast-info .toast-icon[data-v-6710a02e]{color:#3b82f6;background:#dbeafe}.dark{background:#1e3a8a}.toast-info .toast-title[data-v-6710a02e]{color:#1e40af}.dark{color:#3b82f6}.toast-info .toast-message[data-v-6710a02e]{color:#2563eb}.dark{color:#60a5fa}.toast-info .toast-progress[data-v-6710a02e]{background:#3b82f6}@media (max-width: 640px){.toast-container[data-v-6710a02e]{top:10px;right:10px;left:10px}.toast[data-v-6710a02e]{min-width:auto;max-width:none}}.toast-list-enter-active[data-v-6710a02e],.toast-list-leave-active[data-v-6710a02e]{transition:all .3s ease}.toast-list-enter-from[data-v-6710a02e],.toast-list-leave-to[data-v-6710a02e]{opacity:0;transform:translate(100%)}.toast-list-move[data-v-6710a02e]{transition:transform .3s ease}#app[data-v-6f9c4d09]{min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-0\.5{top:-.125rem;right:-.125rem;bottom:-.125rem;left:-.125rem}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-left-2{left:-.5rem}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-3{left:.75rem}.left-5{left:1.25rem}.left-\[50px\]{left:50px}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[1050\]{z-index:1050}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-8{margin-right:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-\[2px\]{margin-top:2px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[260px\]{height:260px}.h-\[38px\]{height:38px}.h-\[50vh\]{height:50vh}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[92vh\]{max-height:92vh}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[32px\]{min-height:32px}.min-h-\[48px\]{min-height:48px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[180px\]{width:180px}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[768px\]{width:768px}.w-\[94px\]{width:94px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[150px\]{min-width:150px}.min-w-\[160px\]{min-width:160px}.min-w-\[170px\]{min-width:170px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[20px\]{min-width:20px}.min-w-\[210px\]{min-width:210px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[32px\]{min-width:32px}.min-w-\[34px\]{min-width:34px}.min-w-\[48px\]{min-width:48px}.min-w-\[50px\]{min-width:50px}.min-w-\[70px\]{min-width:70px}.min-w-\[80px\]{min-width:80px}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-gray-200\/50>:not([hidden])~:not([hidden]){border-color:#e5e7eb80}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.\!overflow-visible{overflow:visible!important}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-100{--tw-border-opacity: 1;border-color:rgb(254 243 199 / var(--tw-border-opacity, 1))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-200\/80{border-color:#bfdbfecc}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-500{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-emerald-100{--tw-border-opacity: 1;border-color:rgb(209 250 229 / var(--tw-border-opacity, 1))}.border-emerald-200\/80{border-color:#a7f3d0cc}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/50{border-color:#e5e7eb80}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-300\/30{border-color:#d1d5db4d}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-green-100{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-indigo-100{--tw-border-opacity: 1;border-color:rgb(224 231 255 / var(--tw-border-opacity, 1))}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-orange-100{--tw-border-opacity: 1;border-color:rgb(255 237 213 / var(--tw-border-opacity, 1))}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity, 1))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-purple-100{--tw-border-opacity: 1;border-color:rgb(243 232 255 / var(--tw-border-opacity, 1))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-200\/70{border-color:#e9d5ffb3}.border-purple-200\/80{border-color:#e9d5ffcc}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-500\/30{border-color:#ef44444d}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-rose-500{--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.border-sky-200\/80{border-color:#bae6fdcc}.border-teal-200{--tw-border-opacity: 1;border-color:rgb(153 246 228 / var(--tw-border-opacity, 1))}.border-teal-500{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200\/80{border-color:#ddd6fecc}.border-white\/20{border-color:#fff3}.border-white\/50{border-color:#ffffff80}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity, 1))}.border-opacity-20{--tw-border-opacity: .2}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-300{--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/60{background-color:#eff6ff99}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900\/20{background-color:#1e3a8a33}.bg-cyan-100{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-cyan-50\/90{background-color:#ecfeffe6}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-cyan-600{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/60{background-color:#ecfdf599}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/85{background-color:#e5e7ebd9}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-300\/50{background-color:#d1d5db80}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/40{background-color:#11182766}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-300{--tw-bg-opacity: 1;background-color:rgb(165 180 252 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-600{--tw-bg-opacity: 1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-primary{background-color:var(--primary-color)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-300{--tw-bg-opacity: 1;background-color:rgb(216 180 254 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-50\/90{background-color:#fff1f2e6}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-teal-300{--tw-bg-opacity: 1;background-color:rgb(94 234 212 / var(--tw-bg-opacity, 1))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/20{background-color:#fff3}.bg-white\/30{background-color:#ffffff4d}.bg-white\/60{background-color:#fff9}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-300{--tw-bg-opacity: 1;background-color:rgb(253 224 71 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-20{--tw-bg-opacity: .2}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from: #fef3c7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 243 199 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-500{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-100{--tw-gradient-from: #dbeafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50{--tw-gradient-from: #eff6ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500\/20{--tw-gradient-from: rgb(59 130 246 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-100{--tw-gradient-from: #cffafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(207 250 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from: #06b6d4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-400{--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500{--tw-gradient-from: #10b981 var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-200{--tw-gradient-from: #e5e7eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(229 231 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-300{--tw-gradient-from: #d1d5db var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-50{--tw-gradient-from: #f9fafb var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-500{--tw-gradient-from: #6b7280 var(--tw-gradient-from-position);--tw-gradient-to: rgb(107 114 128 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-600{--tw-gradient-from: #4b5563 var(--tw-gradient-from-position);--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-600{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-50{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from: #6366f1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-100{--tw-gradient-from: #ffedd5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 237 213 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-50{--tw-gradient-from: #fff7ed var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 247 237 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-100{--tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50\/80{--tw-gradient-from: rgb(250 245 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500\/90{--tw-gradient-from: rgb(168 85 247 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-400{--tw-gradient-from: #f87171 var(--tw-gradient-from-position);--tw-gradient-to: rgb(248 113 113 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-600{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-50{--tw-gradient-from: #fff1f2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 241 242 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-400{--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-50{--tw-gradient-from: #f0f9ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 249 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-500{--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-100{--tw-gradient-from: #ccfbf1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-400{--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from: #f5f3ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 243 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from: #8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-100{--tw-gradient-from: #fef9c3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 249 195 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-400{--tw-gradient-from: #facc15 var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-50{--tw-gradient-from: #fefce8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 252 232 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-500{--tw-gradient-from: #eab308 var(--tw-gradient-from-position);--tw-gradient-to: rgb(234 179 8 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-blue-100{--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #dbeafe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-blue-500{--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-cyan-400{--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-500{--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-300{--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #d1d5db var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-50{--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f9fafb var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-green-50{--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f0fdf4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-orange-400{--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-500{--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-600{--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #9333ea var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-red-500{--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-sky-100{--tw-gradient-to: rgb(224 242 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #e0f2fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-100{--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ede9fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-100{--tw-gradient-to: #fef3c7 var(--tw-gradient-to-position)}.to-amber-50{--tw-gradient-to: #fffbeb var(--tw-gradient-to-position)}.to-amber-500{--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.to-amber-600{--tw-gradient-to: #d97706 var(--tw-gradient-to-position)}.to-blue-100{--tw-gradient-to: #dbeafe var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-cyan-500{--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.to-emerald-100{--tw-gradient-to: #d1fae5 var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to: #ecfdf5 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to: #10b981 var(--tw-gradient-to-position)}.to-emerald-600{--tw-gradient-to: #059669 var(--tw-gradient-to-position)}.to-fuchsia-100{--tw-gradient-to: #fae8ff var(--tw-gradient-to-position)}.to-fuchsia-500{--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.to-gray-100{--tw-gradient-to: #f3f4f6 var(--tw-gradient-to-position)}.to-gray-100\/90{--tw-gradient-to: rgb(243 244 246 / .9) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-gray-400{--tw-gradient-to: #9ca3af var(--tw-gradient-to-position)}.to-gray-50{--tw-gradient-to: #f9fafb var(--tw-gradient-to-position)}.to-gray-600{--tw-gradient-to: #4b5563 var(--tw-gradient-to-position)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-500{--tw-gradient-to: #22c55e var(--tw-gradient-to-position)}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position)}.to-indigo-100{--tw-gradient-to: #e0e7ff var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to: #eef2ff var(--tw-gradient-to-position)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.to-indigo-500\/90{--tw-gradient-to: rgb(99 102 241 / .9) var(--tw-gradient-to-position)}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.to-lime-600{--tw-gradient-to: #65a30d var(--tw-gradient-to-position)}.to-orange-100{--tw-gradient-to: #ffedd5 var(--tw-gradient-to-position)}.to-orange-50{--tw-gradient-to: #fff7ed var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-pink-100{--tw-gradient-to: #fce7f3 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to: #db2777 var(--tw-gradient-to-position)}.to-purple-100{--tw-gradient-to: #f3e8ff var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to: #faf5ff var(--tw-gradient-to-position)}.to-purple-50\/80{--tw-gradient-to: rgb(250 245 255 / .8) var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to: #a855f7 var(--tw-gradient-to-position)}.to-purple-500\/20{--tw-gradient-to: rgb(168 85 247 / .2) var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-red-500{--tw-gradient-to: #ef4444 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position)}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.to-rose-600{--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.to-sky-100{--tw-gradient-to: #e0f2fe var(--tw-gradient-to-position)}.to-sky-600{--tw-gradient-to: #0284c7 var(--tw-gradient-to-position)}.to-teal-50{--tw-gradient-to: #f0fdfa var(--tw-gradient-to-position)}.to-teal-500{--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to: #0d9488 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-yellow-100{--tw-gradient-to: #fef9c3 var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.to-yellow-500{--tw-gradient-to: #eab308 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-cyan-800{--tw-text-opacity: 1;color:rgb(21 94 117 / var(--tw-text-opacity, 1))}.text-cyan-900{--tw-text-opacity: 1;color:rgb(22 78 99 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-gray-950{--tw-text-opacity: 1;color:rgb(3 7 18 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-indigo-800{--tw-text-opacity: 1;color:rgb(55 48 163 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-500\/80{color:#a855f7cc}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-teal-800{--tw-text-opacity: 1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.text-yellow-900{--tw-text-opacity: 1;color:rgb(113 63 18 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.mix-blend-overlay{mix-blend-mode:overlay}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(139\,92\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(139,92,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(148,163,184,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(16\,185\,129\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(16,185,129,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(56\,189\,248\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(56,189,248,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(59\,130\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(59,130,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-amber-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1))}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.ring-blue-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1))}.ring-emerald-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 250 229 / var(--tw-ring-opacity, 1))}.ring-green-500\/20{--tw-ring-color: rgb(34 197 94 / .2)}.ring-purple-100\/80{--tw-ring-color: rgb(243 232 255 / .8)}.ring-red-500\/20{--tw-ring-color: rgb(239 68 68 / .2)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.8\)\]{--tw-drop-shadow: drop-shadow(0 1px 2px rgba(0,0,0,.8));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_2px_4px_rgba\(0\,0\,0\,0\.9\)\]{--tw-drop-shadow: drop-shadow(0 2px 4px rgba(0,0,0,.9));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / .05));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[username\:password\@\]{username:password@}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2)}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.glass-strong{background:var(--surface-color);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.card{background:var(--surface-color);border-radius:16px;border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative}.stat-card{background:linear-gradient(135deg,#fffffff2,#fffc);border-radius:20px;border:1px solid rgba(255,255,255,.3);padding:24px;position:relative;overflow:hidden;transition:all .3s ease}.btn-secondary{background:linear-gradient(135deg,var(--text-secondary) 0%,var(--bg-gradient-end) 100%);color:#fff;box-shadow:0 10px 15px -3px #6b72804d,0 4px 6px -2px #6b72800d}.btn-secondary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #6b72804d,0 10px 10px -5px #6b72801a}.form-input{background:#fffffff2;border:2px solid rgba(255,255,255,.3);border-radius:12px;padding:8px 12px;font-size:14px;transition:all .2s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.1),0 10px 15px -3px #0000001a;background:#fffffff2}.table-container{background:#fffffff2;border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.table-row{transition:all .2s ease}.table-row:hover{background:rgba(var(--primary-rgb),.05);transform:scale(1.005)}.modal{background:#0009}.dark .modal{background:#000000bf}.modal-content{background:#fffffffa;border-radius:24px;border:1px solid rgba(255,255,255,.3);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d}.dark .modal-content{background:var(--glass-strong-color);border:1px solid var(--border-color);box-shadow:0 10px 25px -5px #0000004d,0 0 0 1px #ffffff0d}@media (max-width: 640px){.glass,.glass-strong{margin:12px;border-radius:16px;padding:16px}.stat-card{padding:12px;border-radius:12px}.stat-icon{width:40px;height:40px;font-size:16px}.tab-btn{font-size:12px;padding:10px 6px}.modal-content{margin:8px;max-width:calc(100vw - 24px);padding:16px}.modal-scroll-content{max-height:calc(90vh - 100px)}.card{border-radius:12px}.form-input,.form-select,.form-textarea{font-size:14px;padding:8px 12px}.btn{font-size:14px;padding:8px 16px}.table-container table{font-size:12px}.table-container th,.table-container td{padding:8px 12px}.toast{min-width:280px;max-width:calc(100vw - 40px);right:12px;top:60px}.loading-spinner{width:16px;height:16px}}.animate-pulse{animation:pulse 2s infinite}.fa-openai{width:16px;height:16px;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNjQwIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIHY3LjAuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLi0tPjxwYXRoIGQ9Ik0yNjAuNCAyNDkuOHYtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44bC0xMDEuNS01OS40Yy02LjEtMy42LTEyLjMtMy42LTE4LjQgMGwtMTI4LjUgNzQuN3ptMjI4LjMgMTg5LjRWMzIzYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDM1MSAyMzIuNGw0Mi0yNC4xYzMuNi0yIDYuNy0yIDEwLjIgMGw5Ny44IDU2LjRjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNnpNMjMwLjIgMzM2LjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMlYxOTAuNGMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBsLTEwMC45IDU4LjRjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOXYxNDguNXptOTAuNCA1Mi4ybC02MC4yLTMzLjh2LTcxLjdsNjAuMi0zMy44IDYwLjIgMzMuOHY3MS43TDMyMC42IDM4OXptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlWMzAxLjlsNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMnYxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM3pNMjM3LjggNDMwLjVsLTk3LjctNTYuM0MxMTEuOSAzNTcuOCA5MyAzMjMgOTMgMjg5LjJjMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZ2MTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjJ2NDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM3ptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiLz48L3N2Zz4=) no-repeat center/100%}/*!
+ * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
+ * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
+ * Copyright 2024 Fonticons, Inc.
+ */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fas,.far,.fab,.fa-solid,.fa-regular,.fa-brands,.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas:before,.far:before,.fab:before,.fa-solid:before,.fa-regular:before,.fa-brands:before,.fa:before{content:var(--fa)}.fa-classic,.fas,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0{--fa: "0"}.fa-1{--fa: "1"}.fa-2{--fa: "2"}.fa-3{--fa: "3"}.fa-4{--fa: "4"}.fa-5{--fa: "5"}.fa-6{--fa: "6"}.fa-7{--fa: "7"}.fa-8{--fa: "8"}.fa-9{--fa: "9"}.fa-fill-drip{--fa: ""}.fa-arrows-to-circle{--fa: ""}.fa-circle-chevron-right,.fa-chevron-circle-right{--fa: ""}.fa-at{--fa: "@"}.fa-trash-can,.fa-trash-alt{--fa: ""}.fa-text-height{--fa: ""}.fa-user-xmark,.fa-user-times{--fa: ""}.fa-stethoscope{--fa: ""}.fa-message,.fa-comment-alt{--fa: ""}.fa-info{--fa: ""}.fa-down-left-and-up-right-to-center,.fa-compress-alt{--fa: ""}.fa-explosion{--fa: ""}.fa-file-lines,.fa-file-alt,.fa-file-text{--fa: ""}.fa-wave-square{--fa: ""}.fa-ring{--fa: ""}.fa-building-un{--fa: ""}.fa-dice-three{--fa: ""}.fa-calendar-days,.fa-calendar-alt{--fa: ""}.fa-anchor-circle-check{--fa: ""}.fa-building-circle-arrow-right{--fa: ""}.fa-volleyball,.fa-volleyball-ball{--fa: ""}.fa-arrows-up-to-line{--fa: ""}.fa-sort-down,.fa-sort-desc{--fa: ""}.fa-circle-minus,.fa-minus-circle{--fa: ""}.fa-door-open{--fa: ""}.fa-right-from-bracket,.fa-sign-out-alt{--fa: ""}.fa-atom{--fa: ""}.fa-soap{--fa: ""}.fa-icons,.fa-heart-music-camera-bolt{--fa: ""}.fa-microphone-lines-slash,.fa-microphone-alt-slash{--fa: ""}.fa-bridge-circle-check{--fa: ""}.fa-pump-medical{--fa: ""}.fa-fingerprint{--fa: ""}.fa-hand-point-right{--fa: ""}.fa-magnifying-glass-location,.fa-search-location{--fa: ""}.fa-forward-step,.fa-step-forward{--fa: ""}.fa-face-smile-beam,.fa-smile-beam{--fa: ""}.fa-flag-checkered{--fa: ""}.fa-football,.fa-football-ball{--fa: ""}.fa-school-circle-exclamation{--fa: ""}.fa-crop{--fa: ""}.fa-angles-down,.fa-angle-double-down{--fa: ""}.fa-users-rectangle{--fa: ""}.fa-people-roof{--fa: ""}.fa-people-line{--fa: ""}.fa-beer-mug-empty,.fa-beer{--fa: ""}.fa-diagram-predecessor{--fa: ""}.fa-arrow-up-long,.fa-long-arrow-up{--fa: ""}.fa-fire-flame-simple,.fa-burn{--fa: ""}.fa-person,.fa-male{--fa: ""}.fa-laptop{--fa: ""}.fa-file-csv{--fa: ""}.fa-menorah{--fa: ""}.fa-truck-plane{--fa: ""}.fa-record-vinyl{--fa: ""}.fa-face-grin-stars,.fa-grin-stars{--fa: ""}.fa-bong{--fa: ""}.fa-spaghetti-monster-flying,.fa-pastafarianism{--fa: ""}.fa-arrow-down-up-across-line{--fa: ""}.fa-spoon,.fa-utensil-spoon{--fa: ""}.fa-jar-wheat{--fa: ""}.fa-envelopes-bulk,.fa-mail-bulk{--fa: ""}.fa-file-circle-exclamation{--fa: ""}.fa-circle-h,.fa-hospital-symbol{--fa: ""}.fa-pager{--fa: ""}.fa-address-book,.fa-contact-book{--fa: ""}.fa-strikethrough{--fa: ""}.fa-k{--fa: "K"}.fa-landmark-flag{--fa: ""}.fa-pencil,.fa-pencil-alt{--fa: ""}.fa-backward{--fa: ""}.fa-caret-right{--fa: ""}.fa-comments{--fa: ""}.fa-paste,.fa-file-clipboard{--fa: ""}.fa-code-pull-request{--fa: ""}.fa-clipboard-list{--fa: ""}.fa-truck-ramp-box,.fa-truck-loading{--fa: ""}.fa-user-check{--fa: ""}.fa-vial-virus{--fa: ""}.fa-sheet-plastic{--fa: ""}.fa-blog{--fa: ""}.fa-user-ninja{--fa: ""}.fa-person-arrow-up-from-line{--fa: ""}.fa-scroll-torah,.fa-torah{--fa: ""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa: ""}.fa-toggle-off{--fa: ""}.fa-box-archive,.fa-archive{--fa: ""}.fa-person-drowning{--fa: ""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa: ""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa: ""}.fa-spray-can{--fa: ""}.fa-truck-monster{--fa: ""}.fa-w{--fa: "W"}.fa-earth-africa,.fa-globe-africa{--fa: ""}.fa-rainbow{--fa: ""}.fa-circle-notch{--fa: ""}.fa-tablet-screen-button,.fa-tablet-alt{--fa: ""}.fa-paw{--fa: ""}.fa-cloud{--fa: ""}.fa-trowel-bricks{--fa: ""}.fa-face-flushed,.fa-flushed{--fa: ""}.fa-hospital-user{--fa: ""}.fa-tent-arrow-left-right{--fa: ""}.fa-gavel,.fa-legal{--fa: ""}.fa-binoculars{--fa: ""}.fa-microphone-slash{--fa: ""}.fa-box-tissue{--fa: ""}.fa-motorcycle{--fa: ""}.fa-bell-concierge,.fa-concierge-bell{--fa: ""}.fa-pen-ruler,.fa-pencil-ruler{--fa: ""}.fa-people-arrows,.fa-people-arrows-left-right{--fa: ""}.fa-mars-and-venus-burst{--fa: ""}.fa-square-caret-right,.fa-caret-square-right{--fa: ""}.fa-scissors,.fa-cut{--fa: ""}.fa-sun-plant-wilt{--fa: ""}.fa-toilets-portable{--fa: ""}.fa-hockey-puck{--fa: ""}.fa-table{--fa: ""}.fa-magnifying-glass-arrow-right{--fa: ""}.fa-tachograph-digital,.fa-digital-tachograph{--fa: ""}.fa-users-slash{--fa: ""}.fa-clover{--fa: ""}.fa-reply,.fa-mail-reply{--fa: ""}.fa-star-and-crescent{--fa: ""}.fa-house-fire{--fa: ""}.fa-square-minus,.fa-minus-square{--fa: ""}.fa-helicopter{--fa: ""}.fa-compass{--fa: ""}.fa-square-caret-down,.fa-caret-square-down{--fa: ""}.fa-file-circle-question{--fa: ""}.fa-laptop-code{--fa: ""}.fa-swatchbook{--fa: ""}.fa-prescription-bottle{--fa: ""}.fa-bars,.fa-navicon{--fa: ""}.fa-people-group{--fa: ""}.fa-hourglass-end,.fa-hourglass-3{--fa: ""}.fa-heart-crack,.fa-heart-broken{--fa: ""}.fa-square-up-right,.fa-external-link-square-alt{--fa: ""}.fa-face-kiss-beam,.fa-kiss-beam{--fa: ""}.fa-film{--fa: ""}.fa-ruler-horizontal{--fa: ""}.fa-people-robbery{--fa: ""}.fa-lightbulb{--fa: ""}.fa-caret-left{--fa: ""}.fa-circle-exclamation,.fa-exclamation-circle{--fa: ""}.fa-school-circle-xmark{--fa: ""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa: ""}.fa-circle-chevron-down,.fa-chevron-circle-down{--fa: ""}.fa-unlock-keyhole,.fa-unlock-alt{--fa: ""}.fa-cloud-showers-heavy{--fa: ""}.fa-headphones-simple,.fa-headphones-alt{--fa: ""}.fa-sitemap{--fa: ""}.fa-circle-dollar-to-slot,.fa-donate{--fa: ""}.fa-memory{--fa: ""}.fa-road-spikes{--fa: ""}.fa-fire-burner{--fa: ""}.fa-flag{--fa: ""}.fa-hanukiah{--fa: ""}.fa-feather{--fa: ""}.fa-volume-low,.fa-volume-down{--fa: ""}.fa-comment-slash{--fa: ""}.fa-cloud-sun-rain{--fa: ""}.fa-compress{--fa: ""}.fa-wheat-awn,.fa-wheat-alt{--fa: ""}.fa-ankh{--fa: ""}.fa-hands-holding-child{--fa: ""}.fa-asterisk{--fa: "*"}.fa-square-check,.fa-check-square{--fa: ""}.fa-peseta-sign{--fa: ""}.fa-heading,.fa-header{--fa: ""}.fa-ghost{--fa: ""}.fa-list,.fa-list-squares{--fa: ""}.fa-square-phone-flip,.fa-phone-square-alt{--fa: ""}.fa-cart-plus{--fa: ""}.fa-gamepad{--fa: ""}.fa-circle-dot,.fa-dot-circle{--fa: ""}.fa-face-dizzy,.fa-dizzy{--fa: ""}.fa-egg{--fa: ""}.fa-house-medical-circle-xmark{--fa: ""}.fa-campground{--fa: ""}.fa-folder-plus{--fa: ""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa: ""}.fa-paintbrush,.fa-paint-brush{--fa: ""}.fa-lock{--fa: ""}.fa-gas-pump{--fa: ""}.fa-hot-tub-person,.fa-hot-tub{--fa: ""}.fa-map-location,.fa-map-marked{--fa: ""}.fa-house-flood-water{--fa: ""}.fa-tree{--fa: ""}.fa-bridge-lock{--fa: ""}.fa-sack-dollar{--fa: ""}.fa-pen-to-square,.fa-edit{--fa: ""}.fa-car-side{--fa: ""}.fa-share-nodes,.fa-share-alt{--fa: ""}.fa-heart-circle-minus{--fa: ""}.fa-hourglass-half,.fa-hourglass-2{--fa: ""}.fa-microscope{--fa: ""}.fa-sink{--fa: ""}.fa-bag-shopping,.fa-shopping-bag{--fa: ""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa: ""}.fa-mitten{--fa: ""}.fa-person-rays{--fa: ""}.fa-users{--fa: ""}.fa-eye-slash{--fa: ""}.fa-flask-vial{--fa: ""}.fa-hand,.fa-hand-paper{--fa: ""}.fa-om{--fa: ""}.fa-worm{--fa: ""}.fa-house-circle-xmark{--fa: ""}.fa-plug{--fa: ""}.fa-chevron-up{--fa: ""}.fa-hand-spock{--fa: ""}.fa-stopwatch{--fa: ""}.fa-face-kiss,.fa-kiss{--fa: ""}.fa-bridge-circle-xmark{--fa: ""}.fa-face-grin-tongue,.fa-grin-tongue{--fa: ""}.fa-chess-bishop{--fa: ""}.fa-face-grin-wink,.fa-grin-wink{--fa: ""}.fa-ear-deaf,.fa-deaf,.fa-deafness,.fa-hard-of-hearing{--fa: ""}.fa-road-circle-check{--fa: ""}.fa-dice-five{--fa: ""}.fa-square-rss,.fa-rss-square{--fa: ""}.fa-land-mine-on{--fa: ""}.fa-i-cursor{--fa: ""}.fa-stamp{--fa: ""}.fa-stairs{--fa: ""}.fa-i{--fa: "I"}.fa-hryvnia-sign,.fa-hryvnia{--fa: ""}.fa-pills{--fa: ""}.fa-face-grin-wide,.fa-grin-alt{--fa: ""}.fa-tooth{--fa: ""}.fa-v{--fa: "V"}.fa-bangladeshi-taka-sign{--fa: ""}.fa-bicycle{--fa: ""}.fa-staff-snake,.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius{--fa: ""}.fa-head-side-cough-slash{--fa: ""}.fa-truck-medical,.fa-ambulance{--fa: ""}.fa-wheat-awn-circle-exclamation{--fa: ""}.fa-snowman{--fa: ""}.fa-mortar-pestle{--fa: ""}.fa-road-barrier{--fa: ""}.fa-school{--fa: ""}.fa-igloo{--fa: ""}.fa-joint{--fa: ""}.fa-angle-right{--fa: ""}.fa-horse{--fa: ""}.fa-q{--fa: "Q"}.fa-g{--fa: "G"}.fa-notes-medical{--fa: ""}.fa-temperature-half,.fa-temperature-2,.fa-thermometer-2,.fa-thermometer-half{--fa: ""}.fa-dong-sign{--fa: ""}.fa-capsules{--fa: ""}.fa-poo-storm,.fa-poo-bolt{--fa: ""}.fa-face-frown-open,.fa-frown-open{--fa: ""}.fa-hand-point-up{--fa: ""}.fa-money-bill{--fa: ""}.fa-bookmark{--fa: ""}.fa-align-justify{--fa: ""}.fa-umbrella-beach{--fa: ""}.fa-helmet-un{--fa: ""}.fa-bullseye{--fa: ""}.fa-bacon{--fa: ""}.fa-hand-point-down{--fa: ""}.fa-arrow-up-from-bracket{--fa: ""}.fa-folder,.fa-folder-blank{--fa: ""}.fa-file-waveform,.fa-file-medical-alt{--fa: ""}.fa-radiation{--fa: ""}.fa-chart-simple{--fa: ""}.fa-mars-stroke{--fa: ""}.fa-vial{--fa: ""}.fa-gauge,.fa-dashboard,.fa-gauge-med,.fa-tachometer-alt-average{--fa: ""}.fa-wand-magic-sparkles,.fa-magic-wand-sparkles{--fa: ""}.fa-e{--fa: "E"}.fa-pen-clip,.fa-pen-alt{--fa: ""}.fa-bridge-circle-exclamation{--fa: ""}.fa-user{--fa: ""}.fa-school-circle-check{--fa: ""}.fa-dumpster{--fa: ""}.fa-van-shuttle,.fa-shuttle-van{--fa: ""}.fa-building-user{--fa: ""}.fa-square-caret-left,.fa-caret-square-left{--fa: ""}.fa-highlighter{--fa: ""}.fa-key{--fa: ""}.fa-bullhorn{--fa: ""}.fa-globe{--fa: ""}.fa-synagogue{--fa: ""}.fa-person-half-dress{--fa: ""}.fa-road-bridge{--fa: ""}.fa-location-arrow{--fa: ""}.fa-c{--fa: "C"}.fa-tablet-button{--fa: ""}.fa-building-lock{--fa: ""}.fa-pizza-slice{--fa: ""}.fa-money-bill-wave{--fa: ""}.fa-chart-area,.fa-area-chart{--fa: ""}.fa-house-flag{--fa: ""}.fa-person-circle-minus{--fa: ""}.fa-ban,.fa-cancel{--fa: ""}.fa-camera-rotate{--fa: ""}.fa-spray-can-sparkles,.fa-air-freshener{--fa: ""}.fa-star{--fa: ""}.fa-repeat{--fa: ""}.fa-cross{--fa: ""}.fa-box{--fa: ""}.fa-venus-mars{--fa: ""}.fa-arrow-pointer,.fa-mouse-pointer{--fa: ""}.fa-maximize,.fa-expand-arrows-alt{--fa: ""}.fa-charging-station{--fa: ""}.fa-shapes,.fa-triangle-circle-square{--fa: ""}.fa-shuffle,.fa-random{--fa: ""}.fa-person-running,.fa-running{--fa: ""}.fa-mobile-retro{--fa: ""}.fa-grip-lines-vertical{--fa: ""}.fa-spider{--fa: ""}.fa-hands-bound{--fa: ""}.fa-file-invoice-dollar{--fa: ""}.fa-plane-circle-exclamation{--fa: ""}.fa-x-ray{--fa: ""}.fa-spell-check{--fa: ""}.fa-slash{--fa: ""}.fa-computer-mouse,.fa-mouse{--fa: ""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa: ""}.fa-shop-slash,.fa-store-alt-slash{--fa: ""}.fa-server{--fa: ""}.fa-virus-covid-slash{--fa: ""}.fa-shop-lock{--fa: ""}.fa-hourglass-start,.fa-hourglass-1{--fa: ""}.fa-blender-phone{--fa: ""}.fa-building-wheat{--fa: ""}.fa-person-breastfeeding{--fa: ""}.fa-right-to-bracket,.fa-sign-in-alt{--fa: ""}.fa-venus{--fa: ""}.fa-passport{--fa: ""}.fa-thumbtack-slash,.fa-thumb-tack-slash{--fa: ""}.fa-heart-pulse,.fa-heartbeat{--fa: ""}.fa-people-carry-box,.fa-people-carry{--fa: ""}.fa-temperature-high{--fa: ""}.fa-microchip{--fa: ""}.fa-crown{--fa: ""}.fa-weight-hanging{--fa: ""}.fa-xmarks-lines{--fa: ""}.fa-file-prescription{--fa: ""}.fa-weight-scale,.fa-weight{--fa: ""}.fa-user-group,.fa-user-friends{--fa: ""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa: ""}.fa-chess-knight{--fa: ""}.fa-face-laugh-squint,.fa-laugh-squint{--fa: ""}.fa-wheelchair{--fa: ""}.fa-circle-arrow-up,.fa-arrow-circle-up{--fa: ""}.fa-toggle-on{--fa: ""}.fa-person-walking,.fa-walking{--fa: ""}.fa-l{--fa: "L"}.fa-fire{--fa: ""}.fa-bed-pulse,.fa-procedures{--fa: ""}.fa-shuttle-space,.fa-space-shuttle{--fa: ""}.fa-face-laugh,.fa-laugh{--fa: ""}.fa-folder-open{--fa: ""}.fa-heart-circle-plus{--fa: ""}.fa-code-fork{--fa: ""}.fa-city{--fa: ""}.fa-microphone-lines,.fa-microphone-alt{--fa: ""}.fa-pepper-hot{--fa: ""}.fa-unlock{--fa: ""}.fa-colon-sign{--fa: ""}.fa-headset{--fa: ""}.fa-store-slash{--fa: ""}.fa-road-circle-xmark{--fa: ""}.fa-user-minus{--fa: ""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa: ""}.fa-champagne-glasses,.fa-glass-cheers{--fa: ""}.fa-clipboard{--fa: ""}.fa-house-circle-exclamation{--fa: ""}.fa-file-arrow-up,.fa-file-upload{--fa: ""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa: ""}.fa-bath,.fa-bathtub{--fa: ""}.fa-underline{--fa: ""}.fa-user-pen,.fa-user-edit{--fa: ""}.fa-signature{--fa: ""}.fa-stroopwafel{--fa: ""}.fa-bold{--fa: ""}.fa-anchor-lock{--fa: ""}.fa-building-ngo{--fa: ""}.fa-manat-sign{--fa: ""}.fa-not-equal{--fa: ""}.fa-border-top-left,.fa-border-style{--fa: ""}.fa-map-location-dot,.fa-map-marked-alt{--fa: ""}.fa-jedi{--fa: ""}.fa-square-poll-vertical,.fa-poll{--fa: ""}.fa-mug-hot{--fa: ""}.fa-car-battery,.fa-battery-car{--fa: ""}.fa-gift{--fa: ""}.fa-dice-two{--fa: ""}.fa-chess-queen{--fa: ""}.fa-glasses{--fa: ""}.fa-chess-board{--fa: ""}.fa-building-circle-check{--fa: ""}.fa-person-chalkboard{--fa: ""}.fa-mars-stroke-right,.fa-mars-stroke-h{--fa: ""}.fa-hand-back-fist,.fa-hand-rock{--fa: ""}.fa-square-caret-up,.fa-caret-square-up{--fa: ""}.fa-cloud-showers-water{--fa: ""}.fa-chart-bar,.fa-bar-chart{--fa: ""}.fa-hands-bubbles,.fa-hands-wash{--fa: ""}.fa-less-than-equal{--fa: ""}.fa-train{--fa: ""}.fa-eye-low-vision,.fa-low-vision{--fa: ""}.fa-crow{--fa: ""}.fa-sailboat{--fa: ""}.fa-window-restore{--fa: ""}.fa-square-plus,.fa-plus-square{--fa: ""}.fa-torii-gate{--fa: ""}.fa-frog{--fa: ""}.fa-bucket{--fa: ""}.fa-image{--fa: ""}.fa-microphone{--fa: ""}.fa-cow{--fa: ""}.fa-caret-up{--fa: ""}.fa-screwdriver{--fa: ""}.fa-folder-closed{--fa: ""}.fa-house-tsunami{--fa: ""}.fa-square-nfi{--fa: ""}.fa-arrow-up-from-ground-water{--fa: ""}.fa-martini-glass,.fa-glass-martini-alt{--fa: ""}.fa-square-binary{--fa: ""}.fa-rotate-left,.fa-rotate-back,.fa-rotate-backward,.fa-undo-alt{--fa: ""}.fa-table-columns,.fa-columns{--fa: ""}.fa-lemon{--fa: ""}.fa-head-side-mask{--fa: ""}.fa-handshake{--fa: ""}.fa-gem{--fa: ""}.fa-dolly,.fa-dolly-box{--fa: ""}.fa-smoking{--fa: ""}.fa-minimize,.fa-compress-arrows-alt{--fa: ""}.fa-monument{--fa: ""}.fa-snowplow{--fa: ""}.fa-angles-right,.fa-angle-double-right{--fa: ""}.fa-cannabis{--fa: ""}.fa-circle-play,.fa-play-circle{--fa: ""}.fa-tablets{--fa: ""}.fa-ethernet{--fa: ""}.fa-euro-sign,.fa-eur,.fa-euro{--fa: ""}.fa-chair{--fa: ""}.fa-circle-check,.fa-check-circle{--fa: ""}.fa-circle-stop,.fa-stop-circle{--fa: ""}.fa-compass-drafting,.fa-drafting-compass{--fa: ""}.fa-plate-wheat{--fa: ""}.fa-icicles{--fa: ""}.fa-person-shelter{--fa: ""}.fa-neuter{--fa: ""}.fa-id-badge{--fa: ""}.fa-marker{--fa: ""}.fa-face-laugh-beam,.fa-laugh-beam{--fa: ""}.fa-helicopter-symbol{--fa: ""}.fa-universal-access{--fa: ""}.fa-circle-chevron-up,.fa-chevron-circle-up{--fa: ""}.fa-lari-sign{--fa: ""}.fa-volcano{--fa: ""}.fa-person-walking-dashed-line-arrow-right{--fa: ""}.fa-sterling-sign,.fa-gbp,.fa-pound-sign{--fa: ""}.fa-viruses{--fa: ""}.fa-square-person-confined{--fa: ""}.fa-user-tie{--fa: ""}.fa-arrow-down-long,.fa-long-arrow-down{--fa: ""}.fa-tent-arrow-down-to-line{--fa: ""}.fa-certificate{--fa: ""}.fa-reply-all,.fa-mail-reply-all{--fa: ""}.fa-suitcase{--fa: ""}.fa-person-skating,.fa-skating{--fa: ""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa: ""}.fa-camera-retro{--fa: ""}.fa-circle-arrow-down,.fa-arrow-circle-down{--fa: ""}.fa-file-import,.fa-arrow-right-to-file{--fa: ""}.fa-square-arrow-up-right,.fa-external-link-square{--fa: ""}.fa-box-open{--fa: ""}.fa-scroll{--fa: ""}.fa-spa{--fa: ""}.fa-location-pin-lock{--fa: ""}.fa-pause{--fa: ""}.fa-hill-avalanche{--fa: ""}.fa-temperature-empty,.fa-temperature-0,.fa-thermometer-0,.fa-thermometer-empty{--fa: ""}.fa-bomb{--fa: ""}.fa-registered{--fa: ""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa: ""}.fa-scale-unbalanced-flip,.fa-balance-scale-right{--fa: ""}.fa-subscript{--fa: ""}.fa-diamond-turn-right,.fa-directions{--fa: ""}.fa-burst{--fa: ""}.fa-house-laptop,.fa-laptop-house{--fa: ""}.fa-face-tired,.fa-tired{--fa: ""}.fa-money-bills{--fa: ""}.fa-smog{--fa: ""}.fa-crutch{--fa: ""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa: ""}.fa-palette{--fa: ""}.fa-arrows-turn-right{--fa: ""}.fa-vest{--fa: ""}.fa-ferry{--fa: ""}.fa-arrows-down-to-people{--fa: ""}.fa-seedling,.fa-sprout{--fa: ""}.fa-left-right,.fa-arrows-alt-h{--fa: ""}.fa-boxes-packing{--fa: ""}.fa-circle-arrow-left,.fa-arrow-circle-left{--fa: ""}.fa-group-arrows-rotate{--fa: ""}.fa-bowl-food{--fa: ""}.fa-candy-cane{--fa: ""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa: ""}.fa-cloud-bolt,.fa-thunderstorm{--fa: ""}.fa-text-slash,.fa-remove-format{--fa: ""}.fa-face-smile-wink,.fa-smile-wink{--fa: ""}.fa-file-word{--fa: ""}.fa-file-powerpoint{--fa: ""}.fa-arrows-left-right,.fa-arrows-h{--fa: ""}.fa-house-lock{--fa: ""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa: ""}.fa-children{--fa: ""}.fa-chalkboard,.fa-blackboard{--fa: ""}.fa-user-large-slash,.fa-user-alt-slash{--fa: ""}.fa-envelope-open{--fa: ""}.fa-handshake-simple-slash,.fa-handshake-alt-slash{--fa: ""}.fa-mattress-pillow{--fa: ""}.fa-guarani-sign{--fa: ""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa: ""}.fa-fire-extinguisher{--fa: ""}.fa-cruzeiro-sign{--fa: ""}.fa-greater-than-equal{--fa: ""}.fa-shield-halved,.fa-shield-alt{--fa: ""}.fa-book-atlas,.fa-atlas{--fa: ""}.fa-virus{--fa: ""}.fa-envelope-circle-check{--fa: ""}.fa-layer-group{--fa: ""}.fa-arrows-to-dot{--fa: ""}.fa-archway{--fa: ""}.fa-heart-circle-check{--fa: ""}.fa-house-chimney-crack,.fa-house-damage{--fa: ""}.fa-file-zipper,.fa-file-archive{--fa: ""}.fa-square{--fa: ""}.fa-martini-glass-empty,.fa-glass-martini{--fa: ""}.fa-couch{--fa: ""}.fa-cedi-sign{--fa: ""}.fa-italic{--fa: ""}.fa-table-cells-column-lock{--fa: ""}.fa-church{--fa: ""}.fa-comments-dollar{--fa: ""}.fa-democrat{--fa: ""}.fa-z{--fa: "Z"}.fa-person-skiing,.fa-skiing{--fa: ""}.fa-road-lock{--fa: ""}.fa-a{--fa: "A"}.fa-temperature-arrow-down,.fa-temperature-down{--fa: ""}.fa-feather-pointed,.fa-feather-alt{--fa: ""}.fa-p{--fa: "P"}.fa-snowflake{--fa: ""}.fa-newspaper{--fa: ""}.fa-rectangle-ad,.fa-ad{--fa: ""}.fa-circle-arrow-right,.fa-arrow-circle-right{--fa: ""}.fa-filter-circle-xmark{--fa: ""}.fa-locust{--fa: ""}.fa-sort,.fa-unsorted{--fa: ""}.fa-list-ol,.fa-list-1-2,.fa-list-numeric{--fa: ""}.fa-person-dress-burst{--fa: ""}.fa-money-check-dollar,.fa-money-check-alt{--fa: ""}.fa-vector-square{--fa: ""}.fa-bread-slice{--fa: ""}.fa-language{--fa: ""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa: ""}.fa-filter{--fa: ""}.fa-question{--fa: "?"}.fa-file-signature{--fa: ""}.fa-up-down-left-right,.fa-arrows-alt{--fa: ""}.fa-house-chimney-user{--fa: ""}.fa-hand-holding-heart{--fa: ""}.fa-puzzle-piece{--fa: ""}.fa-money-check{--fa: ""}.fa-star-half-stroke,.fa-star-half-alt{--fa: ""}.fa-code{--fa: ""}.fa-whiskey-glass,.fa-glass-whiskey{--fa: ""}.fa-building-circle-exclamation{--fa: ""}.fa-magnifying-glass-chart{--fa: ""}.fa-arrow-up-right-from-square,.fa-external-link{--fa: ""}.fa-cubes-stacked{--fa: ""}.fa-won-sign,.fa-krw,.fa-won{--fa: ""}.fa-virus-covid{--fa: ""}.fa-austral-sign{--fa: ""}.fa-f{--fa: "F"}.fa-leaf{--fa: ""}.fa-road{--fa: ""}.fa-taxi,.fa-cab{--fa: ""}.fa-person-circle-plus{--fa: ""}.fa-chart-pie,.fa-pie-chart{--fa: ""}.fa-bolt-lightning{--fa: ""}.fa-sack-xmark{--fa: ""}.fa-file-excel{--fa: ""}.fa-file-contract{--fa: ""}.fa-fish-fins{--fa: ""}.fa-building-flag{--fa: ""}.fa-face-grin-beam,.fa-grin-beam{--fa: ""}.fa-object-ungroup{--fa: ""}.fa-poop{--fa: ""}.fa-location-pin,.fa-map-marker{--fa: ""}.fa-kaaba{--fa: ""}.fa-toilet-paper{--fa: ""}.fa-helmet-safety,.fa-hard-hat,.fa-hat-hard{--fa: ""}.fa-eject{--fa: ""}.fa-circle-right,.fa-arrow-alt-circle-right{--fa: ""}.fa-plane-circle-check{--fa: ""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa: ""}.fa-object-group{--fa: ""}.fa-chart-line,.fa-line-chart{--fa: ""}.fa-mask-ventilator{--fa: ""}.fa-arrow-right{--fa: ""}.fa-signs-post,.fa-map-signs{--fa: ""}.fa-cash-register{--fa: ""}.fa-person-circle-question{--fa: ""}.fa-h{--fa: "H"}.fa-tarp{--fa: ""}.fa-screwdriver-wrench,.fa-tools{--fa: ""}.fa-arrows-to-eye{--fa: ""}.fa-plug-circle-bolt{--fa: ""}.fa-heart{--fa: ""}.fa-mars-and-venus{--fa: ""}.fa-house-user,.fa-home-user{--fa: ""}.fa-dumpster-fire{--fa: ""}.fa-house-crack{--fa: ""}.fa-martini-glass-citrus,.fa-cocktail{--fa: ""}.fa-face-surprise,.fa-surprise{--fa: ""}.fa-bottle-water{--fa: ""}.fa-circle-pause,.fa-pause-circle{--fa: ""}.fa-toilet-paper-slash{--fa: ""}.fa-apple-whole,.fa-apple-alt{--fa: ""}.fa-kitchen-set{--fa: ""}.fa-r{--fa: "R"}.fa-temperature-quarter,.fa-temperature-1,.fa-thermometer-1,.fa-thermometer-quarter{--fa: ""}.fa-cube{--fa: ""}.fa-bitcoin-sign{--fa: ""}.fa-shield-dog{--fa: ""}.fa-solar-panel{--fa: ""}.fa-lock-open{--fa: ""}.fa-elevator{--fa: ""}.fa-money-bill-transfer{--fa: ""}.fa-money-bill-trend-up{--fa: ""}.fa-house-flood-water-circle-arrow-right{--fa: ""}.fa-square-poll-horizontal,.fa-poll-h{--fa: ""}.fa-circle{--fa: ""}.fa-backward-fast,.fa-fast-backward{--fa: ""}.fa-recycle{--fa: ""}.fa-user-astronaut{--fa: ""}.fa-plane-slash{--fa: ""}.fa-trademark{--fa: ""}.fa-basketball,.fa-basketball-ball{--fa: ""}.fa-satellite-dish{--fa: ""}.fa-circle-up,.fa-arrow-alt-circle-up{--fa: ""}.fa-mobile-screen-button,.fa-mobile-alt{--fa: ""}.fa-volume-high,.fa-volume-up{--fa: ""}.fa-users-rays{--fa: ""}.fa-wallet{--fa: ""}.fa-clipboard-check{--fa: ""}.fa-file-audio{--fa: ""}.fa-burger,.fa-hamburger{--fa: ""}.fa-wrench{--fa: ""}.fa-bugs{--fa: ""}.fa-rupee-sign,.fa-rupee{--fa: ""}.fa-file-image{--fa: ""}.fa-circle-question,.fa-question-circle{--fa: ""}.fa-plane-departure{--fa: ""}.fa-handshake-slash{--fa: ""}.fa-book-bookmark{--fa: ""}.fa-code-branch{--fa: ""}.fa-hat-cowboy{--fa: ""}.fa-bridge{--fa: ""}.fa-phone-flip,.fa-phone-alt{--fa: ""}.fa-truck-front{--fa: ""}.fa-cat{--fa: ""}.fa-anchor-circle-exclamation{--fa: ""}.fa-truck-field{--fa: ""}.fa-route{--fa: ""}.fa-clipboard-question{--fa: ""}.fa-panorama{--fa: ""}.fa-comment-medical{--fa: ""}.fa-teeth-open{--fa: ""}.fa-file-circle-minus{--fa: ""}.fa-tags{--fa: ""}.fa-wine-glass{--fa: ""}.fa-forward-fast,.fa-fast-forward{--fa: ""}.fa-face-meh-blank,.fa-meh-blank{--fa: ""}.fa-square-parking,.fa-parking{--fa: ""}.fa-house-signal{--fa: ""}.fa-bars-progress,.fa-tasks-alt{--fa: ""}.fa-faucet-drip{--fa: ""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa: ""}.fa-ban-smoking,.fa-smoking-ban{--fa: ""}.fa-terminal{--fa: ""}.fa-mobile-button{--fa: ""}.fa-house-medical-flag{--fa: ""}.fa-basket-shopping,.fa-shopping-basket{--fa: ""}.fa-tape{--fa: ""}.fa-bus-simple,.fa-bus-alt{--fa: ""}.fa-eye{--fa: ""}.fa-face-sad-cry,.fa-sad-cry{--fa: ""}.fa-audio-description{--fa: ""}.fa-person-military-to-person{--fa: ""}.fa-file-shield{--fa: ""}.fa-user-slash{--fa: ""}.fa-pen{--fa: ""}.fa-tower-observation{--fa: ""}.fa-file-code{--fa: ""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa: ""}.fa-bus{--fa: ""}.fa-heart-circle-xmark{--fa: ""}.fa-house-chimney,.fa-home-lg{--fa: ""}.fa-window-maximize{--fa: ""}.fa-face-frown,.fa-frown{--fa: ""}.fa-prescription{--fa: ""}.fa-shop,.fa-store-alt{--fa: ""}.fa-floppy-disk,.fa-save{--fa: ""}.fa-vihara{--fa: ""}.fa-scale-unbalanced,.fa-balance-scale-left{--fa: ""}.fa-sort-up,.fa-sort-asc{--fa: ""}.fa-comment-dots,.fa-commenting{--fa: ""}.fa-plant-wilt{--fa: ""}.fa-diamond{--fa: ""}.fa-face-grin-squint,.fa-grin-squint{--fa: ""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa: ""}.fa-chart-diagram{--fa: ""}.fa-bacterium{--fa: ""}.fa-hand-pointer{--fa: ""}.fa-drum-steelpan{--fa: ""}.fa-hand-scissors{--fa: ""}.fa-hands-praying,.fa-praying-hands{--fa: ""}.fa-arrow-rotate-right,.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-redo{--fa: ""}.fa-biohazard{--fa: ""}.fa-location-crosshairs,.fa-location{--fa: ""}.fa-mars-double{--fa: ""}.fa-child-dress{--fa: ""}.fa-users-between-lines{--fa: ""}.fa-lungs-virus{--fa: ""}.fa-face-grin-tears,.fa-grin-tears{--fa: ""}.fa-phone{--fa: ""}.fa-calendar-xmark,.fa-calendar-times{--fa: ""}.fa-child-reaching{--fa: ""}.fa-head-side-virus{--fa: ""}.fa-user-gear,.fa-user-cog{--fa: ""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa: ""}.fa-door-closed{--fa: ""}.fa-shield-virus{--fa: ""}.fa-dice-six{--fa: ""}.fa-mosquito-net{--fa: ""}.fa-file-fragment{--fa: ""}.fa-bridge-water{--fa: ""}.fa-person-booth{--fa: ""}.fa-text-width{--fa: ""}.fa-hat-wizard{--fa: ""}.fa-pen-fancy{--fa: ""}.fa-person-digging,.fa-digging{--fa: ""}.fa-trash{--fa: ""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa: ""}.fa-book-medical{--fa: ""}.fa-poo{--fa: ""}.fa-quote-right,.fa-quote-right-alt{--fa: ""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa: ""}.fa-cubes{--fa: ""}.fa-divide{--fa: ""}.fa-tenge-sign,.fa-tenge{--fa: ""}.fa-headphones{--fa: ""}.fa-hands-holding{--fa: ""}.fa-hands-clapping{--fa: ""}.fa-republican{--fa: ""}.fa-arrow-left{--fa: ""}.fa-person-circle-xmark{--fa: ""}.fa-ruler{--fa: ""}.fa-align-left{--fa: ""}.fa-dice-d6{--fa: ""}.fa-restroom{--fa: ""}.fa-j{--fa: "J"}.fa-users-viewfinder{--fa: ""}.fa-file-video{--fa: ""}.fa-up-right-from-square,.fa-external-link-alt{--fa: ""}.fa-table-cells,.fa-th{--fa: ""}.fa-file-pdf{--fa: ""}.fa-book-bible,.fa-bible{--fa: ""}.fa-o{--fa: "O"}.fa-suitcase-medical,.fa-medkit{--fa: ""}.fa-user-secret{--fa: ""}.fa-otter{--fa: ""}.fa-person-dress,.fa-female{--fa: ""}.fa-comment-dollar{--fa: ""}.fa-business-time,.fa-briefcase-clock{--fa: ""}.fa-table-cells-large,.fa-th-large{--fa: ""}.fa-book-tanakh,.fa-tanakh{--fa: ""}.fa-phone-volume,.fa-volume-control-phone{--fa: ""}.fa-hat-cowboy-side{--fa: ""}.fa-clipboard-user{--fa: ""}.fa-child{--fa: ""}.fa-lira-sign{--fa: ""}.fa-satellite{--fa: ""}.fa-plane-lock{--fa: ""}.fa-tag{--fa: ""}.fa-comment{--fa: ""}.fa-cake-candles,.fa-birthday-cake,.fa-cake{--fa: ""}.fa-envelope{--fa: ""}.fa-angles-up,.fa-angle-double-up{--fa: ""}.fa-paperclip{--fa: ""}.fa-arrow-right-to-city{--fa: ""}.fa-ribbon{--fa: ""}.fa-lungs{--fa: ""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa: ""}.fa-litecoin-sign{--fa: ""}.fa-border-none{--fa: ""}.fa-circle-nodes{--fa: ""}.fa-parachute-box{--fa: ""}.fa-indent{--fa: ""}.fa-truck-field-un{--fa: ""}.fa-hourglass,.fa-hourglass-empty{--fa: ""}.fa-mountain{--fa: ""}.fa-user-doctor,.fa-user-md{--fa: ""}.fa-circle-info,.fa-info-circle{--fa: ""}.fa-cloud-meatball{--fa: ""}.fa-camera,.fa-camera-alt{--fa: ""}.fa-square-virus{--fa: ""}.fa-meteor{--fa: ""}.fa-car-on{--fa: ""}.fa-sleigh{--fa: ""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa: ""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa: ""}.fa-water{--fa: ""}.fa-calendar-check{--fa: ""}.fa-braille{--fa: ""}.fa-prescription-bottle-medical,.fa-prescription-bottle-alt{--fa: ""}.fa-landmark{--fa: ""}.fa-truck{--fa: ""}.fa-crosshairs{--fa: ""}.fa-person-cane{--fa: ""}.fa-tent{--fa: ""}.fa-vest-patches{--fa: ""}.fa-check-double{--fa: ""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa: ""}.fa-money-bill-wheat{--fa: ""}.fa-cookie{--fa: ""}.fa-arrow-rotate-left,.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-undo{--fa: ""}.fa-hard-drive,.fa-hdd{--fa: ""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa: ""}.fa-dumbbell{--fa: ""}.fa-rectangle-list,.fa-list-alt{--fa: ""}.fa-tarp-droplet{--fa: ""}.fa-house-medical-circle-check{--fa: ""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa: ""}.fa-calendar-plus{--fa: ""}.fa-plane-arrival{--fa: ""}.fa-circle-left,.fa-arrow-alt-circle-left{--fa: ""}.fa-train-subway,.fa-subway{--fa: ""}.fa-chart-gantt{--fa: ""}.fa-indian-rupee-sign,.fa-indian-rupee,.fa-inr{--fa: ""}.fa-crop-simple,.fa-crop-alt{--fa: ""}.fa-money-bill-1,.fa-money-bill-alt{--fa: ""}.fa-left-long,.fa-long-arrow-alt-left{--fa: ""}.fa-dna{--fa: ""}.fa-virus-slash{--fa: ""}.fa-minus,.fa-subtract{--fa: ""}.fa-chess{--fa: ""}.fa-arrow-left-long,.fa-long-arrow-left{--fa: ""}.fa-plug-circle-check{--fa: ""}.fa-street-view{--fa: ""}.fa-franc-sign{--fa: ""}.fa-volume-off{--fa: ""}.fa-hands-asl-interpreting,.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting{--fa: ""}.fa-gear,.fa-cog{--fa: ""}.fa-droplet-slash,.fa-tint-slash{--fa: ""}.fa-mosque{--fa: ""}.fa-mosquito{--fa: ""}.fa-star-of-david{--fa: ""}.fa-person-military-rifle{--fa: ""}.fa-cart-shopping,.fa-shopping-cart{--fa: ""}.fa-vials{--fa: ""}.fa-plug-circle-plus{--fa: ""}.fa-place-of-worship{--fa: ""}.fa-grip-vertical{--fa: ""}.fa-hexagon-nodes{--fa: ""}.fa-arrow-turn-up,.fa-level-up{--fa: ""}.fa-u{--fa: "U"}.fa-square-root-variable,.fa-square-root-alt{--fa: ""}.fa-clock,.fa-clock-four{--fa: ""}.fa-backward-step,.fa-step-backward{--fa: ""}.fa-pallet{--fa: ""}.fa-faucet{--fa: ""}.fa-baseball-bat-ball{--fa: ""}.fa-s{--fa: "S"}.fa-timeline{--fa: ""}.fa-keyboard{--fa: ""}.fa-caret-down{--fa: ""}.fa-house-chimney-medical,.fa-clinic-medical{--fa: ""}.fa-temperature-three-quarters,.fa-temperature-3,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa: ""}.fa-mobile-screen,.fa-mobile-android-alt{--fa: ""}.fa-plane-up{--fa: ""}.fa-piggy-bank{--fa: ""}.fa-battery-half,.fa-battery-3{--fa: ""}.fa-mountain-city{--fa: ""}.fa-coins{--fa: ""}.fa-khanda{--fa: ""}.fa-sliders,.fa-sliders-h{--fa: ""}.fa-folder-tree{--fa: ""}.fa-network-wired{--fa: ""}.fa-map-pin{--fa: ""}.fa-hamsa{--fa: ""}.fa-cent-sign{--fa: ""}.fa-flask{--fa: ""}.fa-person-pregnant{--fa: ""}.fa-wand-sparkles{--fa: ""}.fa-ellipsis-vertical,.fa-ellipsis-v{--fa: ""}.fa-ticket{--fa: ""}.fa-power-off{--fa: ""}.fa-right-long,.fa-long-arrow-alt-right{--fa: ""}.fa-flag-usa{--fa: ""}.fa-laptop-file{--fa: ""}.fa-tty,.fa-teletype{--fa: ""}.fa-diagram-next{--fa: ""}.fa-person-rifle{--fa: ""}.fa-house-medical-circle-exclamation{--fa: ""}.fa-closed-captioning{--fa: ""}.fa-person-hiking,.fa-hiking{--fa: ""}.fa-venus-double{--fa: ""}.fa-images{--fa: ""}.fa-calculator{--fa: ""}.fa-people-pulling{--fa: ""}.fa-n{--fa: "N"}.fa-cable-car,.fa-tram{--fa: ""}.fa-cloud-rain{--fa: ""}.fa-building-circle-xmark{--fa: ""}.fa-ship{--fa: ""}.fa-arrows-down-to-line{--fa: ""}.fa-download{--fa: ""}.fa-face-grin,.fa-grin{--fa: ""}.fa-delete-left,.fa-backspace{--fa: ""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa: ""}.fa-file-circle-check{--fa: ""}.fa-forward{--fa: ""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa: ""}.fa-face-meh,.fa-meh{--fa: ""}.fa-align-center{--fa: ""}.fa-book-skull,.fa-book-dead{--fa: ""}.fa-id-card,.fa-drivers-license{--fa: ""}.fa-outdent,.fa-dedent{--fa: ""}.fa-heart-circle-exclamation{--fa: ""}.fa-house,.fa-home,.fa-home-alt,.fa-home-lg-alt{--fa: ""}.fa-calendar-week{--fa: ""}.fa-laptop-medical{--fa: ""}.fa-b{--fa: "B"}.fa-file-medical{--fa: ""}.fa-dice-one{--fa: ""}.fa-kiwi-bird{--fa: ""}.fa-arrow-right-arrow-left,.fa-exchange{--fa: ""}.fa-rotate-right,.fa-redo-alt,.fa-rotate-forward{--fa: ""}.fa-utensils,.fa-cutlery{--fa: ""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa: ""}.fa-mill-sign{--fa: ""}.fa-bowl-rice{--fa: ""}.fa-skull{--fa: ""}.fa-tower-broadcast,.fa-broadcast-tower{--fa: ""}.fa-truck-pickup{--fa: ""}.fa-up-long,.fa-long-arrow-alt-up{--fa: ""}.fa-stop{--fa: ""}.fa-code-merge{--fa: ""}.fa-upload{--fa: ""}.fa-hurricane{--fa: ""}.fa-mound{--fa: ""}.fa-toilet-portable{--fa: ""}.fa-compact-disc{--fa: ""}.fa-file-arrow-down,.fa-file-download{--fa: ""}.fa-caravan{--fa: ""}.fa-shield-cat{--fa: ""}.fa-bolt,.fa-zap{--fa: ""}.fa-glass-water{--fa: ""}.fa-oil-well{--fa: ""}.fa-vault{--fa: ""}.fa-mars{--fa: ""}.fa-toilet{--fa: ""}.fa-plane-circle-xmark{--fa: ""}.fa-yen-sign,.fa-cny,.fa-jpy,.fa-rmb,.fa-yen{--fa: ""}.fa-ruble-sign,.fa-rouble,.fa-rub,.fa-ruble{--fa: ""}.fa-sun{--fa: ""}.fa-guitar{--fa: ""}.fa-face-laugh-wink,.fa-laugh-wink{--fa: ""}.fa-horse-head{--fa: ""}.fa-bore-hole{--fa: ""}.fa-industry{--fa: ""}.fa-circle-down,.fa-arrow-alt-circle-down{--fa: ""}.fa-arrows-turn-to-dots{--fa: ""}.fa-florin-sign{--fa: ""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa: ""}.fa-less-than{--fa: "<"}.fa-angle-down{--fa: ""}.fa-car-tunnel{--fa: ""}.fa-head-side-cough{--fa: ""}.fa-grip-lines{--fa: ""}.fa-thumbs-down{--fa: ""}.fa-user-lock{--fa: ""}.fa-arrow-right-long,.fa-long-arrow-right{--fa: ""}.fa-anchor-circle-xmark{--fa: ""}.fa-ellipsis,.fa-ellipsis-h{--fa: ""}.fa-chess-pawn{--fa: ""}.fa-kit-medical,.fa-first-aid{--fa: ""}.fa-person-through-window{--fa: ""}.fa-toolbox{--fa: ""}.fa-hands-holding-circle{--fa: ""}.fa-bug{--fa: ""}.fa-credit-card,.fa-credit-card-alt{--fa: ""}.fa-car,.fa-automobile{--fa: ""}.fa-hand-holding-hand{--fa: ""}.fa-book-open-reader,.fa-book-reader{--fa: ""}.fa-mountain-sun{--fa: ""}.fa-arrows-left-right-to-line{--fa: ""}.fa-dice-d20{--fa: ""}.fa-truck-droplet{--fa: ""}.fa-file-circle-xmark{--fa: ""}.fa-temperature-arrow-up,.fa-temperature-up{--fa: ""}.fa-medal{--fa: ""}.fa-bed{--fa: ""}.fa-square-h,.fa-h-square{--fa: ""}.fa-podcast{--fa: ""}.fa-temperature-full,.fa-temperature-4,.fa-thermometer-4,.fa-thermometer-full{--fa: ""}.fa-bell{--fa: ""}.fa-superscript{--fa: ""}.fa-plug-circle-xmark{--fa: ""}.fa-star-of-life{--fa: ""}.fa-phone-slash{--fa: ""}.fa-paint-roller{--fa: ""}.fa-handshake-angle,.fa-hands-helping{--fa: ""}.fa-location-dot,.fa-map-marker-alt{--fa: ""}.fa-file{--fa: ""}.fa-greater-than{--fa: ">"}.fa-person-swimming,.fa-swimmer{--fa: ""}.fa-arrow-down{--fa: ""}.fa-droplet,.fa-tint{--fa: ""}.fa-eraser{--fa: ""}.fa-earth-americas,.fa-earth,.fa-earth-america,.fa-globe-americas{--fa: ""}.fa-person-burst{--fa: ""}.fa-dove{--fa: ""}.fa-battery-empty,.fa-battery-0{--fa: ""}.fa-socks{--fa: ""}.fa-inbox{--fa: ""}.fa-section{--fa: ""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa: ""}.fa-envelope-open-text{--fa: ""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa: ""}.fa-wine-bottle{--fa: ""}.fa-chess-rook{--fa: ""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa: ""}.fa-dharmachakra{--fa: ""}.fa-hotdog{--fa: ""}.fa-person-walking-with-cane,.fa-blind{--fa: ""}.fa-drum{--fa: ""}.fa-ice-cream{--fa: ""}.fa-heart-circle-bolt{--fa: ""}.fa-fax{--fa: ""}.fa-paragraph{--fa: ""}.fa-check-to-slot,.fa-vote-yea{--fa: ""}.fa-star-half{--fa: ""}.fa-boxes-stacked,.fa-boxes,.fa-boxes-alt{--fa: ""}.fa-link,.fa-chain{--fa: ""}.fa-ear-listen,.fa-assistive-listening-systems{--fa: ""}.fa-tree-city{--fa: ""}.fa-play{--fa: ""}.fa-font{--fa: ""}.fa-table-cells-row-lock{--fa: ""}.fa-rupiah-sign{--fa: ""}.fa-magnifying-glass,.fa-search{--fa: ""}.fa-table-tennis-paddle-ball,.fa-ping-pong-paddle-ball,.fa-table-tennis{--fa: ""}.fa-person-dots-from-line,.fa-diagnoses{--fa: ""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa: ""}.fa-naira-sign{--fa: ""}.fa-cart-arrow-down{--fa: ""}.fa-walkie-talkie{--fa: ""}.fa-file-pen,.fa-file-edit{--fa: ""}.fa-receipt{--fa: ""}.fa-square-pen,.fa-pen-square,.fa-pencil-square{--fa: ""}.fa-suitcase-rolling{--fa: ""}.fa-person-circle-exclamation{--fa: ""}.fa-chevron-down{--fa: ""}.fa-battery-full,.fa-battery,.fa-battery-5{--fa: ""}.fa-skull-crossbones{--fa: ""}.fa-code-compare{--fa: ""}.fa-list-ul,.fa-list-dots{--fa: ""}.fa-school-lock{--fa: ""}.fa-tower-cell{--fa: ""}.fa-down-long,.fa-long-arrow-alt-down{--fa: ""}.fa-ranking-star{--fa: ""}.fa-chess-king{--fa: ""}.fa-person-harassing{--fa: ""}.fa-brazilian-real-sign{--fa: ""}.fa-landmark-dome,.fa-landmark-alt{--fa: ""}.fa-arrow-up{--fa: ""}.fa-tv,.fa-television,.fa-tv-alt{--fa: ""}.fa-shrimp{--fa: ""}.fa-list-check,.fa-tasks{--fa: ""}.fa-jug-detergent{--fa: ""}.fa-circle-user,.fa-user-circle{--fa: ""}.fa-user-shield{--fa: ""}.fa-wind{--fa: ""}.fa-car-burst,.fa-car-crash{--fa: ""}.fa-y{--fa: "Y"}.fa-person-snowboarding,.fa-snowboarding{--fa: ""}.fa-truck-fast,.fa-shipping-fast{--fa: ""}.fa-fish{--fa: ""}.fa-user-graduate{--fa: ""}.fa-circle-half-stroke,.fa-adjust{--fa: ""}.fa-clapperboard{--fa: ""}.fa-circle-radiation,.fa-radiation-alt{--fa: ""}.fa-baseball,.fa-baseball-ball{--fa: ""}.fa-jet-fighter-up{--fa: ""}.fa-diagram-project,.fa-project-diagram{--fa: ""}.fa-copy{--fa: ""}.fa-volume-xmark,.fa-volume-mute,.fa-volume-times{--fa: ""}.fa-hand-sparkles{--fa: ""}.fa-grip,.fa-grip-horizontal{--fa: ""}.fa-share-from-square,.fa-share-square{--fa: ""}.fa-child-combatant,.fa-child-rifle{--fa: ""}.fa-gun{--fa: ""}.fa-square-phone,.fa-phone-square{--fa: ""}.fa-plus,.fa-add{--fa: "+"}.fa-expand{--fa: ""}.fa-computer{--fa: ""}.fa-xmark,.fa-close,.fa-multiply,.fa-remove,.fa-times{--fa: ""}.fa-arrows-up-down-left-right,.fa-arrows{--fa: ""}.fa-chalkboard-user,.fa-chalkboard-teacher{--fa: ""}.fa-peso-sign{--fa: ""}.fa-building-shield{--fa: ""}.fa-baby{--fa: ""}.fa-users-line{--fa: ""}.fa-quote-left,.fa-quote-left-alt{--fa: ""}.fa-tractor{--fa: ""}.fa-trash-arrow-up,.fa-trash-restore{--fa: ""}.fa-arrow-down-up-lock{--fa: ""}.fa-lines-leaning{--fa: ""}.fa-ruler-combined{--fa: ""}.fa-copyright{--fa: ""}.fa-equals{--fa: "="}.fa-blender{--fa: ""}.fa-teeth{--fa: ""}.fa-shekel-sign,.fa-ils,.fa-shekel,.fa-sheqel,.fa-sheqel-sign{--fa: ""}.fa-map{--fa: ""}.fa-rocket{--fa: ""}.fa-photo-film,.fa-photo-video{--fa: ""}.fa-folder-minus{--fa: ""}.fa-hexagon-nodes-bolt{--fa: ""}.fa-store{--fa: ""}.fa-arrow-trend-up{--fa: ""}.fa-plug-circle-minus{--fa: ""}.fa-sign-hanging,.fa-sign{--fa: ""}.fa-bezier-curve{--fa: ""}.fa-bell-slash{--fa: ""}.fa-tablet,.fa-tablet-android{--fa: ""}.fa-school-flag{--fa: ""}.fa-fill{--fa: ""}.fa-angle-up{--fa: ""}.fa-drumstick-bite{--fa: ""}.fa-holly-berry{--fa: ""}.fa-chevron-left{--fa: ""}.fa-bacteria{--fa: ""}.fa-hand-lizard{--fa: ""}.fa-notdef{--fa: ""}.fa-disease{--fa: ""}.fa-briefcase-medical{--fa: ""}.fa-genderless{--fa: ""}.fa-chevron-right{--fa: ""}.fa-retweet{--fa: ""}.fa-car-rear,.fa-car-alt{--fa: ""}.fa-pump-soap{--fa: ""}.fa-video-slash{--fa: ""}.fa-battery-quarter,.fa-battery-2{--fa: ""}.fa-radio{--fa: ""}.fa-baby-carriage,.fa-carriage-baby{--fa: ""}.fa-traffic-light{--fa: ""}.fa-thermometer{--fa: ""}.fa-vr-cardboard{--fa: ""}.fa-hand-middle-finger{--fa: ""}.fa-percent,.fa-percentage{--fa: "%"}.fa-truck-moving{--fa: ""}.fa-glass-water-droplet{--fa: ""}.fa-display{--fa: ""}.fa-face-smile,.fa-smile{--fa: ""}.fa-thumbtack,.fa-thumb-tack{--fa: ""}.fa-trophy{--fa: ""}.fa-person-praying,.fa-pray{--fa: ""}.fa-hammer{--fa: ""}.fa-hand-peace{--fa: ""}.fa-rotate,.fa-sync-alt{--fa: ""}.fa-spinner{--fa: ""}.fa-robot{--fa: ""}.fa-peace{--fa: ""}.fa-gears,.fa-cogs{--fa: ""}.fa-warehouse{--fa: ""}.fa-arrow-up-right-dots{--fa: ""}.fa-splotch{--fa: ""}.fa-face-grin-hearts,.fa-grin-hearts{--fa: ""}.fa-dice-four{--fa: ""}.fa-sim-card{--fa: ""}.fa-transgender,.fa-transgender-alt{--fa: ""}.fa-mercury{--fa: ""}.fa-arrow-turn-down,.fa-level-down{--fa: ""}.fa-person-falling-burst{--fa: ""}.fa-award{--fa: ""}.fa-ticket-simple,.fa-ticket-alt{--fa: ""}.fa-building{--fa: ""}.fa-angles-left,.fa-angle-double-left{--fa: ""}.fa-qrcode{--fa: ""}.fa-clock-rotate-left,.fa-history{--fa: ""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa: ""}.fa-file-export,.fa-arrow-right-from-file{--fa: ""}.fa-shield,.fa-shield-blank{--fa: ""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa: ""}.fa-comment-nodes{--fa: ""}.fa-house-medical{--fa: ""}.fa-golf-ball-tee,.fa-golf-ball{--fa: ""}.fa-circle-chevron-left,.fa-chevron-circle-left{--fa: ""}.fa-house-chimney-window{--fa: ""}.fa-pen-nib{--fa: ""}.fa-tent-arrow-turn-left{--fa: ""}.fa-tents{--fa: ""}.fa-wand-magic,.fa-magic{--fa: ""}.fa-dog{--fa: ""}.fa-carrot{--fa: ""}.fa-moon{--fa: ""}.fa-wine-glass-empty,.fa-wine-glass-alt{--fa: ""}.fa-cheese{--fa: ""}.fa-yin-yang{--fa: ""}.fa-music{--fa: ""}.fa-code-commit{--fa: ""}.fa-temperature-low{--fa: ""}.fa-person-biking,.fa-biking{--fa: ""}.fa-broom{--fa: ""}.fa-shield-heart{--fa: ""}.fa-gopuram{--fa: ""}.fa-earth-oceania,.fa-globe-oceania{--fa: ""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa: ""}.fa-hashtag{--fa: "#"}.fa-up-right-and-down-left-from-center,.fa-expand-alt{--fa: ""}.fa-oil-can{--fa: ""}.fa-t{--fa: "T"}.fa-hippo{--fa: ""}.fa-chart-column{--fa: ""}.fa-infinity{--fa: ""}.fa-vial-circle-check{--fa: ""}.fa-person-arrow-down-to-line{--fa: ""}.fa-voicemail{--fa: ""}.fa-fan{--fa: ""}.fa-person-walking-luggage{--fa: ""}.fa-up-down,.fa-arrows-alt-v{--fa: ""}.fa-cloud-moon-rain{--fa: ""}.fa-calendar{--fa: ""}.fa-trailer{--fa: ""}.fa-bahai,.fa-haykal{--fa: ""}.fa-sd-card{--fa: ""}.fa-dragon{--fa: ""}.fa-shoe-prints{--fa: ""}.fa-circle-plus,.fa-plus-circle{--fa: ""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa: ""}.fa-hand-holding{--fa: ""}.fa-plug-circle-exclamation{--fa: ""}.fa-link-slash,.fa-chain-broken,.fa-chain-slash,.fa-unlink{--fa: ""}.fa-clone{--fa: ""}.fa-person-walking-arrow-loop-left{--fa: ""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa: ""}.fa-fire-flame-curved,.fa-fire-alt{--fa: ""}.fa-tornado{--fa: ""}.fa-file-circle-plus{--fa: ""}.fa-book-quran,.fa-quran{--fa: ""}.fa-anchor{--fa: ""}.fa-border-all{--fa: ""}.fa-face-angry,.fa-angry{--fa: ""}.fa-cookie-bite{--fa: ""}.fa-arrow-trend-down{--fa: ""}.fa-rss,.fa-feed{--fa: ""}.fa-draw-polygon{--fa: ""}.fa-scale-balanced,.fa-balance-scale{--fa: ""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa: ""}.fa-shower{--fa: ""}.fa-desktop,.fa-desktop-alt{--fa: ""}.fa-m{--fa: "M"}.fa-table-list,.fa-th-list{--fa: ""}.fa-comment-sms,.fa-sms{--fa: ""}.fa-book{--fa: ""}.fa-user-plus{--fa: ""}.fa-check{--fa: ""}.fa-battery-three-quarters,.fa-battery-4{--fa: ""}.fa-house-circle-check{--fa: ""}.fa-angle-left{--fa: ""}.fa-diagram-successor{--fa: ""}.fa-truck-arrow-right{--fa: ""}.fa-arrows-split-up-and-left{--fa: ""}.fa-hand-fist,.fa-fist-raised{--fa: ""}.fa-cloud-moon{--fa: ""}.fa-briefcase{--fa: ""}.fa-person-falling{--fa: ""}.fa-image-portrait,.fa-portrait{--fa: ""}.fa-user-tag{--fa: ""}.fa-rug{--fa: ""}.fa-earth-europe,.fa-globe-europe{--fa: ""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa: ""}.fa-rectangle-xmark,.fa-rectangle-times,.fa-times-rectangle,.fa-window-close{--fa: ""}.fa-baht-sign{--fa: ""}.fa-book-open{--fa: ""}.fa-book-journal-whills,.fa-journal-whills{--fa: ""}.fa-handcuffs{--fa: ""}.fa-triangle-exclamation,.fa-exclamation-triangle,.fa-warning{--fa: ""}.fa-database{--fa: ""}.fa-share,.fa-mail-forward{--fa: ""}.fa-bottle-droplet{--fa: ""}.fa-mask-face{--fa: ""}.fa-hill-rockslide{--fa: ""}.fa-right-left,.fa-exchange-alt{--fa: ""}.fa-paper-plane{--fa: ""}.fa-road-circle-exclamation{--fa: ""}.fa-dungeon{--fa: ""}.fa-align-right{--fa: ""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa: ""}.fa-life-ring{--fa: ""}.fa-hands,.fa-sign-language,.fa-signing{--fa: ""}.fa-calendar-day{--fa: ""}.fa-water-ladder,.fa-ladder-water,.fa-swimming-pool{--fa: ""}.fa-arrows-up-down,.fa-arrows-v{--fa: ""}.fa-face-grimace,.fa-grimace{--fa: ""}.fa-wheelchair-move,.fa-wheelchair-alt{--fa: ""}.fa-turn-down,.fa-level-down-alt{--fa: ""}.fa-person-walking-arrow-right{--fa: ""}.fa-square-envelope,.fa-envelope-square{--fa: ""}.fa-dice{--fa: ""}.fa-bowling-ball{--fa: ""}.fa-brain{--fa: ""}.fa-bandage,.fa-band-aid{--fa: ""}.fa-calendar-minus{--fa: ""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa: ""}.fa-gifts{--fa: ""}.fa-hotel{--fa: ""}.fa-earth-asia,.fa-globe-asia{--fa: ""}.fa-id-card-clip,.fa-id-card-alt{--fa: ""}.fa-magnifying-glass-plus,.fa-search-plus{--fa: ""}.fa-thumbs-up{--fa: ""}.fa-user-clock{--fa: ""}.fa-hand-dots,.fa-allergies{--fa: ""}.fa-file-invoice{--fa: ""}.fa-window-minimize{--fa: ""}.fa-mug-saucer,.fa-coffee{--fa: ""}.fa-brush{--fa: ""}.fa-file-half-dashed{--fa: ""}.fa-mask{--fa: ""}.fa-magnifying-glass-minus,.fa-search-minus{--fa: ""}.fa-ruler-vertical{--fa: ""}.fa-user-large,.fa-user-alt{--fa: ""}.fa-train-tram{--fa: ""}.fa-user-nurse{--fa: ""}.fa-syringe{--fa: ""}.fa-cloud-sun{--fa: ""}.fa-stopwatch-20{--fa: ""}.fa-square-full{--fa: ""}.fa-magnet{--fa: ""}.fa-jar{--fa: ""}.fa-note-sticky,.fa-sticky-note{--fa: ""}.fa-bug-slash{--fa: ""}.fa-arrow-up-from-water-pump{--fa: ""}.fa-bone{--fa: ""}.fa-table-cells-row-unlock{--fa: ""}.fa-user-injured{--fa: ""}.fa-face-sad-tear,.fa-sad-tear{--fa: ""}.fa-plane{--fa: ""}.fa-tent-arrows-down{--fa: ""}.fa-exclamation{--fa: "!"}.fa-arrows-spin{--fa: ""}.fa-print{--fa: ""}.fa-turkish-lira-sign,.fa-try,.fa-turkish-lira{--fa: ""}.fa-dollar-sign,.fa-dollar,.fa-usd{--fa: "$"}.fa-x{--fa: "X"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa: ""}.fa-users-gear,.fa-users-cog{--fa: ""}.fa-person-military-pointing{--fa: ""}.fa-building-columns,.fa-bank,.fa-institution,.fa-museum,.fa-university{--fa: ""}.fa-umbrella{--fa: ""}.fa-trowel{--fa: ""}.fa-d{--fa: "D"}.fa-stapler{--fa: ""}.fa-masks-theater,.fa-theater-masks{--fa: ""}.fa-kip-sign{--fa: ""}.fa-hand-point-left{--fa: ""}.fa-handshake-simple,.fa-handshake-alt{--fa: ""}.fa-jet-fighter,.fa-fighter-jet{--fa: ""}.fa-square-share-nodes,.fa-share-alt-square{--fa: ""}.fa-barcode{--fa: ""}.fa-plus-minus{--fa: ""}.fa-video,.fa-video-camera{--fa: ""}.fa-graduation-cap,.fa-mortar-board{--fa: ""}.fa-hand-holding-medical{--fa: ""}.fa-person-circle-check{--fa: ""}.fa-turn-up,.fa-level-up-alt{--fa: ""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero{--fa: ""}.fa-hooli{--fa: ""}.fa-yelp{--fa: ""}.fa-cc-visa{--fa: ""}.fa-lastfm{--fa: ""}.fa-shopware{--fa: ""}.fa-creative-commons-nc{--fa: ""}.fa-aws{--fa: ""}.fa-redhat{--fa: ""}.fa-yoast{--fa: ""}.fa-cloudflare{--fa: ""}.fa-ups{--fa: ""}.fa-pixiv{--fa: ""}.fa-wpexplorer{--fa: ""}.fa-dyalog{--fa: ""}.fa-bity{--fa: ""}.fa-stackpath{--fa: ""}.fa-buysellads{--fa: ""}.fa-first-order{--fa: ""}.fa-modx{--fa: ""}.fa-guilded{--fa: ""}.fa-vnv{--fa: ""}.fa-square-js,.fa-js-square{--fa: ""}.fa-microsoft{--fa: ""}.fa-qq{--fa: ""}.fa-orcid{--fa: ""}.fa-java{--fa: ""}.fa-invision{--fa: ""}.fa-creative-commons-pd-alt{--fa: ""}.fa-centercode{--fa: ""}.fa-glide-g{--fa: ""}.fa-drupal{--fa: ""}.fa-jxl{--fa: ""}.fa-dart-lang{--fa: ""}.fa-hire-a-helper{--fa: ""}.fa-creative-commons-by{--fa: ""}.fa-unity{--fa: ""}.fa-whmcs{--fa: ""}.fa-rocketchat{--fa: ""}.fa-vk{--fa: ""}.fa-untappd{--fa: ""}.fa-mailchimp{--fa: ""}.fa-css3-alt{--fa: ""}.fa-square-reddit,.fa-reddit-square{--fa: ""}.fa-vimeo-v{--fa: ""}.fa-contao{--fa: ""}.fa-square-font-awesome{--fa: ""}.fa-deskpro{--fa: ""}.fa-brave{--fa: ""}.fa-sistrix{--fa: ""}.fa-square-instagram,.fa-instagram-square{--fa: ""}.fa-battle-net{--fa: ""}.fa-the-red-yeti{--fa: ""}.fa-square-hacker-news,.fa-hacker-news-square{--fa: ""}.fa-edge{--fa: ""}.fa-threads{--fa: ""}.fa-napster{--fa: ""}.fa-square-snapchat,.fa-snapchat-square{--fa: ""}.fa-google-plus-g{--fa: ""}.fa-artstation{--fa: ""}.fa-markdown{--fa: ""}.fa-sourcetree{--fa: ""}.fa-google-plus{--fa: ""}.fa-diaspora{--fa: ""}.fa-foursquare{--fa: ""}.fa-stack-overflow{--fa: ""}.fa-github-alt{--fa: ""}.fa-phoenix-squadron{--fa: ""}.fa-pagelines{--fa: ""}.fa-algolia{--fa: ""}.fa-red-river{--fa: ""}.fa-creative-commons-sa{--fa: ""}.fa-safari{--fa: ""}.fa-google{--fa: ""}.fa-square-font-awesome-stroke,.fa-font-awesome-alt{--fa: ""}.fa-atlassian{--fa: ""}.fa-linkedin-in{--fa: ""}.fa-digital-ocean{--fa: ""}.fa-nimblr{--fa: ""}.fa-chromecast{--fa: ""}.fa-evernote{--fa: ""}.fa-hacker-news{--fa: ""}.fa-creative-commons-sampling{--fa: ""}.fa-adversal{--fa: ""}.fa-creative-commons{--fa: ""}.fa-watchman-monitoring{--fa: ""}.fa-fonticons{--fa: ""}.fa-weixin{--fa: ""}.fa-shirtsinbulk{--fa: ""}.fa-codepen{--fa: ""}.fa-git-alt{--fa: ""}.fa-lyft{--fa: ""}.fa-rev{--fa: ""}.fa-windows{--fa: ""}.fa-wizards-of-the-coast{--fa: ""}.fa-square-viadeo,.fa-viadeo-square{--fa: ""}.fa-meetup{--fa: ""}.fa-centos{--fa: ""}.fa-adn{--fa: ""}.fa-cloudsmith{--fa: ""}.fa-opensuse{--fa: ""}.fa-pied-piper-alt{--fa: ""}.fa-square-dribbble,.fa-dribbble-square{--fa: ""}.fa-codiepie{--fa: ""}.fa-node{--fa: ""}.fa-mix{--fa: ""}.fa-steam{--fa: ""}.fa-cc-apple-pay{--fa: ""}.fa-scribd{--fa: ""}.fa-debian{--fa: ""}.fa-openid{--fa: ""}.fa-instalod{--fa: ""}.fa-files-pinwheel{--fa: ""}.fa-expeditedssl{--fa: ""}.fa-sellcast{--fa: ""}.fa-square-twitter,.fa-twitter-square{--fa: ""}.fa-r-project{--fa: ""}.fa-delicious{--fa: ""}.fa-freebsd{--fa: ""}.fa-vuejs{--fa: ""}.fa-accusoft{--fa: ""}.fa-ioxhost{--fa: ""}.fa-fonticons-fi{--fa: ""}.fa-app-store{--fa: ""}.fa-cc-mastercard{--fa: ""}.fa-itunes-note{--fa: ""}.fa-golang{--fa: ""}.fa-kickstarter,.fa-square-kickstarter{--fa: ""}.fa-grav{--fa: ""}.fa-weibo{--fa: ""}.fa-uncharted{--fa: ""}.fa-firstdraft{--fa: ""}.fa-square-youtube,.fa-youtube-square{--fa: ""}.fa-wikipedia-w{--fa: ""}.fa-wpressr,.fa-rendact{--fa: ""}.fa-angellist{--fa: ""}.fa-galactic-republic{--fa: ""}.fa-nfc-directional{--fa: ""}.fa-skype{--fa: ""}.fa-joget{--fa: ""}.fa-fedora{--fa: ""}.fa-stripe-s{--fa: ""}.fa-meta{--fa: ""}.fa-laravel{--fa: ""}.fa-hotjar{--fa: ""}.fa-bluetooth-b{--fa: ""}.fa-square-letterboxd{--fa: ""}.fa-sticker-mule{--fa: ""}.fa-creative-commons-zero{--fa: ""}.fa-hips{--fa: ""}.fa-css{--fa: ""}.fa-behance{--fa: ""}.fa-reddit{--fa: ""}.fa-discord{--fa: ""}.fa-chrome{--fa: ""}.fa-app-store-ios{--fa: ""}.fa-cc-discover{--fa: ""}.fa-wpbeginner{--fa: ""}.fa-confluence{--fa: ""}.fa-shoelace{--fa: ""}.fa-mdb{--fa: ""}.fa-dochub{--fa: ""}.fa-accessible-icon{--fa: ""}.fa-ebay{--fa: ""}.fa-amazon{--fa: ""}.fa-unsplash{--fa: ""}.fa-yarn{--fa: ""}.fa-square-steam,.fa-steam-square{--fa: ""}.fa-500px{--fa: ""}.fa-square-vimeo,.fa-vimeo-square{--fa: ""}.fa-asymmetrik{--fa: ""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa: ""}.fa-gratipay{--fa: ""}.fa-apple{--fa: ""}.fa-hive{--fa: ""}.fa-gitkraken{--fa: ""}.fa-keybase{--fa: ""}.fa-apple-pay{--fa: ""}.fa-padlet{--fa: ""}.fa-amazon-pay{--fa: ""}.fa-square-github,.fa-github-square{--fa: ""}.fa-stumbleupon{--fa: ""}.fa-fedex{--fa: ""}.fa-phoenix-framework{--fa: ""}.fa-shopify{--fa: ""}.fa-neos{--fa: ""}.fa-square-threads{--fa: ""}.fa-hackerrank{--fa: ""}.fa-researchgate{--fa: ""}.fa-swift{--fa: ""}.fa-angular{--fa: ""}.fa-speakap{--fa: ""}.fa-angrycreative{--fa: ""}.fa-y-combinator{--fa: ""}.fa-empire{--fa: ""}.fa-envira{--fa: ""}.fa-google-scholar{--fa: ""}.fa-square-gitlab,.fa-gitlab-square{--fa: ""}.fa-studiovinari{--fa: ""}.fa-pied-piper{--fa: ""}.fa-wordpress{--fa: ""}.fa-product-hunt{--fa: ""}.fa-firefox{--fa: ""}.fa-linode{--fa: ""}.fa-goodreads{--fa: ""}.fa-square-odnoklassniki,.fa-odnoklassniki-square{--fa: ""}.fa-jsfiddle{--fa: ""}.fa-sith{--fa: ""}.fa-themeisle{--fa: ""}.fa-page4{--fa: ""}.fa-hashnode{--fa: ""}.fa-react{--fa: ""}.fa-cc-paypal{--fa: ""}.fa-squarespace{--fa: ""}.fa-cc-stripe{--fa: ""}.fa-creative-commons-share{--fa: ""}.fa-bitcoin{--fa: ""}.fa-keycdn{--fa: ""}.fa-opera{--fa: ""}.fa-itch-io{--fa: ""}.fa-umbraco{--fa: ""}.fa-galactic-senate{--fa: ""}.fa-ubuntu{--fa: ""}.fa-draft2digital{--fa: ""}.fa-stripe{--fa: ""}.fa-houzz{--fa: ""}.fa-gg{--fa: ""}.fa-dhl{--fa: ""}.fa-square-pinterest,.fa-pinterest-square{--fa: ""}.fa-xing{--fa: ""}.fa-blackberry{--fa: ""}.fa-creative-commons-pd{--fa: ""}.fa-playstation{--fa: ""}.fa-quinscape{--fa: ""}.fa-less{--fa: ""}.fa-blogger-b{--fa: ""}.fa-opencart{--fa: ""}.fa-vine{--fa: ""}.fa-signal-messenger{--fa: ""}.fa-paypal{--fa: ""}.fa-gitlab{--fa: ""}.fa-typo3{--fa: ""}.fa-reddit-alien{--fa: ""}.fa-yahoo{--fa: ""}.fa-dailymotion{--fa: ""}.fa-affiliatetheme{--fa: ""}.fa-pied-piper-pp{--fa: ""}.fa-bootstrap{--fa: ""}.fa-odnoklassniki{--fa: ""}.fa-nfc-symbol{--fa: ""}.fa-mintbit{--fa: ""}.fa-ethereum{--fa: ""}.fa-speaker-deck{--fa: ""}.fa-creative-commons-nc-eu{--fa: ""}.fa-patreon{--fa: ""}.fa-avianex{--fa: ""}.fa-ello{--fa: ""}.fa-gofore{--fa: ""}.fa-bimobject{--fa: ""}.fa-brave-reverse{--fa: ""}.fa-facebook-f{--fa: ""}.fa-square-google-plus,.fa-google-plus-square{--fa: ""}.fa-web-awesome{--fa: ""}.fa-mandalorian{--fa: ""}.fa-first-order-alt{--fa: ""}.fa-osi{--fa: ""}.fa-google-wallet{--fa: ""}.fa-d-and-d-beyond{--fa: ""}.fa-periscope{--fa: ""}.fa-fulcrum{--fa: ""}.fa-cloudscale{--fa: ""}.fa-forumbee{--fa: ""}.fa-mizuni{--fa: ""}.fa-schlix{--fa: ""}.fa-square-xing,.fa-xing-square{--fa: ""}.fa-bandcamp{--fa: ""}.fa-wpforms{--fa: ""}.fa-cloudversify{--fa: ""}.fa-usps{--fa: ""}.fa-megaport{--fa: ""}.fa-magento{--fa: ""}.fa-spotify{--fa: ""}.fa-optin-monster{--fa: ""}.fa-fly{--fa: ""}.fa-square-bluesky{--fa: ""}.fa-aviato{--fa: ""}.fa-itunes{--fa: ""}.fa-cuttlefish{--fa: ""}.fa-blogger{--fa: ""}.fa-flickr{--fa: ""}.fa-viber{--fa: ""}.fa-soundcloud{--fa: ""}.fa-digg{--fa: ""}.fa-tencent-weibo{--fa: ""}.fa-letterboxd{--fa: ""}.fa-symfony{--fa: ""}.fa-maxcdn{--fa: ""}.fa-etsy{--fa: ""}.fa-facebook-messenger{--fa: ""}.fa-audible{--fa: ""}.fa-think-peaks{--fa: ""}.fa-bilibili{--fa: ""}.fa-erlang{--fa: ""}.fa-x-twitter{--fa: ""}.fa-cotton-bureau{--fa: ""}.fa-dashcube{--fa: ""}.fa-42-group,.fa-innosoft{--fa: ""}.fa-stack-exchange{--fa: ""}.fa-elementor{--fa: ""}.fa-square-pied-piper,.fa-pied-piper-square{--fa: ""}.fa-creative-commons-nd{--fa: ""}.fa-palfed{--fa: ""}.fa-superpowers{--fa: ""}.fa-resolving{--fa: ""}.fa-xbox{--fa: ""}.fa-square-web-awesome-stroke{--fa: ""}.fa-searchengin{--fa: ""}.fa-tiktok{--fa: ""}.fa-square-facebook,.fa-facebook-square{--fa: ""}.fa-renren{--fa: ""}.fa-linux{--fa: ""}.fa-glide{--fa: ""}.fa-linkedin{--fa: ""}.fa-hubspot{--fa: ""}.fa-deploydog{--fa: ""}.fa-twitch{--fa: ""}.fa-flutter{--fa: ""}.fa-ravelry{--fa: ""}.fa-mixer{--fa: ""}.fa-square-lastfm,.fa-lastfm-square{--fa: ""}.fa-vimeo{--fa: ""}.fa-mendeley{--fa: ""}.fa-uniregistry{--fa: ""}.fa-figma{--fa: ""}.fa-creative-commons-remix{--fa: ""}.fa-cc-amazon-pay{--fa: ""}.fa-dropbox{--fa: ""}.fa-instagram{--fa: ""}.fa-cmplid{--fa: ""}.fa-upwork{--fa: ""}.fa-facebook{--fa: ""}.fa-gripfire{--fa: ""}.fa-jedi-order{--fa: ""}.fa-uikit{--fa: ""}.fa-fort-awesome-alt{--fa: ""}.fa-phabricator{--fa: ""}.fa-ussunnah{--fa: ""}.fa-earlybirds{--fa: ""}.fa-trade-federation{--fa: ""}.fa-autoprefixer{--fa: ""}.fa-whatsapp{--fa: ""}.fa-square-upwork{--fa: ""}.fa-slideshare{--fa: ""}.fa-google-play{--fa: ""}.fa-viadeo{--fa: ""}.fa-line{--fa: ""}.fa-google-drive{--fa: ""}.fa-servicestack{--fa: ""}.fa-simplybuilt{--fa: ""}.fa-bitbucket{--fa: ""}.fa-imdb{--fa: ""}.fa-deezer{--fa: ""}.fa-raspberry-pi{--fa: ""}.fa-jira{--fa: ""}.fa-docker{--fa: ""}.fa-screenpal{--fa: ""}.fa-bluetooth{--fa: ""}.fa-gitter{--fa: ""}.fa-d-and-d{--fa: ""}.fa-microblog{--fa: ""}.fa-cc-diners-club{--fa: ""}.fa-gg-circle{--fa: ""}.fa-pied-piper-hat{--fa: ""}.fa-kickstarter-k{--fa: ""}.fa-yandex{--fa: ""}.fa-readme{--fa: ""}.fa-html5{--fa: ""}.fa-sellsy{--fa: ""}.fa-square-web-awesome{--fa: ""}.fa-sass{--fa: ""}.fa-wirsindhandwerk,.fa-wsh{--fa: ""}.fa-buromobelexperte{--fa: ""}.fa-salesforce{--fa: ""}.fa-octopus-deploy{--fa: ""}.fa-medapps{--fa: ""}.fa-ns8{--fa: ""}.fa-pinterest-p{--fa: ""}.fa-apper{--fa: ""}.fa-fort-awesome{--fa: ""}.fa-waze{--fa: ""}.fa-bluesky{--fa: ""}.fa-cc-jcb{--fa: ""}.fa-snapchat,.fa-snapchat-ghost{--fa: ""}.fa-fantasy-flight-games{--fa: ""}.fa-rust{--fa: ""}.fa-wix{--fa: ""}.fa-square-behance,.fa-behance-square{--fa: ""}.fa-supple{--fa: ""}.fa-webflow{--fa: ""}.fa-rebel{--fa: ""}.fa-css3{--fa: ""}.fa-staylinked{--fa: ""}.fa-kaggle{--fa: ""}.fa-space-awesome{--fa: ""}.fa-deviantart{--fa: ""}.fa-cpanel{--fa: ""}.fa-goodreads-g{--fa: ""}.fa-square-git,.fa-git-square{--fa: ""}.fa-square-tumblr,.fa-tumblr-square{--fa: ""}.fa-trello{--fa: ""}.fa-creative-commons-nc-jp{--fa: ""}.fa-get-pocket{--fa: ""}.fa-perbyte{--fa: ""}.fa-grunt{--fa: ""}.fa-weebly{--fa: ""}.fa-connectdevelop{--fa: ""}.fa-leanpub{--fa: ""}.fa-black-tie{--fa: ""}.fa-themeco{--fa: ""}.fa-python{--fa: ""}.fa-android{--fa: ""}.fa-bots{--fa: ""}.fa-free-code-camp{--fa: ""}.fa-hornbill{--fa: ""}.fa-js{--fa: ""}.fa-ideal{--fa: ""}.fa-git{--fa: ""}.fa-dev{--fa: ""}.fa-sketch{--fa: ""}.fa-yandex-international{--fa: ""}.fa-cc-amex{--fa: ""}.fa-uber{--fa: ""}.fa-github{--fa: ""}.fa-php{--fa: ""}.fa-alipay{--fa: ""}.fa-youtube{--fa: ""}.fa-skyatlas{--fa: ""}.fa-firefox-browser{--fa: ""}.fa-replyd{--fa: ""}.fa-suse{--fa: ""}.fa-jenkins{--fa: ""}.fa-twitter{--fa: ""}.fa-rockrms{--fa: ""}.fa-pinterest{--fa: ""}.fa-buffer{--fa: ""}.fa-npm{--fa: ""}.fa-yammer{--fa: ""}.fa-btc{--fa: ""}.fa-dribbble{--fa: ""}.fa-stumbleupon-circle{--fa: ""}.fa-internet-explorer{--fa: ""}.fa-stubber{--fa: ""}.fa-telegram,.fa-telegram-plane{--fa: ""}.fa-old-republic{--fa: ""}.fa-odysee{--fa: ""}.fa-square-whatsapp,.fa-whatsapp-square{--fa: ""}.fa-node-js{--fa: ""}.fa-edge-legacy{--fa: ""}.fa-slack,.fa-slack-hash{--fa: ""}.fa-medrt{--fa: ""}.fa-usb{--fa: ""}.fa-tumblr{--fa: ""}.fa-vaadin{--fa: ""}.fa-quora{--fa: ""}.fa-square-x-twitter{--fa: ""}.fa-reacteurope{--fa: ""}.fa-medium,.fa-medium-m{--fa: ""}.fa-amilia{--fa: ""}.fa-mixcloud{--fa: ""}.fa-flipboard{--fa: ""}.fa-viacoin{--fa: ""}.fa-critical-role{--fa: ""}.fa-sitrox{--fa: ""}.fa-discourse{--fa: ""}.fa-joomla{--fa: ""}.fa-mastodon{--fa: ""}.fa-airbnb{--fa: ""}.fa-wolf-pack-battalion{--fa: ""}.fa-buy-n-large{--fa: ""}.fa-gulp{--fa: ""}.fa-creative-commons-sampling-plus{--fa: ""}.fa-strava{--fa: ""}.fa-ember{--fa: ""}.fa-canadian-maple-leaf{--fa: ""}.fa-teamspeak{--fa: ""}.fa-pushed{--fa: ""}.fa-wordpress-simple{--fa: ""}.fa-nutritionix{--fa: ""}.fa-wodu{--fa: ""}.fa-google-pay{--fa: ""}.fa-intercom{--fa: ""}.fa-zhihu{--fa: ""}.fa-korvue{--fa: ""}.fa-pix{--fa: ""}.fa-steam-symbol{--fa: ""}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}.far,.fa-regular{font-weight:400}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype");unicode-range:U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-v4compatibility-C9RhG_FT.woff2) format("woff2"),url(/admin-next/assets/fa-v4compatibility-CCth-dXg.ttf) format("truetype");unicode-range:U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 50%,var(--accent-color) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden}body,div,button,input,select,textarea,table,tr,td,th,span,p,h1,h2,h3,h4,h5,h6{transition:all .3s cubic-bezier(.4,0,.2,1)}.el-button--primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:transparent}.el-button--primary:hover,.el-button--primary:focus{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);opacity:.9}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:shadow-sm:after{content:var(--tw-content);--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:transition-transform:after{content:var(--tw-content);transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:duration-200:after{content:var(--tw-content);transition-duration:.2s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.last\:border-0:last-child{border-width:0px}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-amber-400:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.hover\:border-blue-300:hover{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.hover\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.hover\:border-cyan-300:hover{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.hover\:border-cyan-400:hover{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.hover\:border-emerald-300:hover{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.hover\:border-emerald-400:hover{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-indigo-300:hover{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.hover\:border-indigo-400:hover{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.hover\:border-orange-400:hover{--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.hover\:border-purple-300:hover{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.hover\:border-purple-400:hover{--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.hover\:border-red-300:hover{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.hover\:border-rose-300:hover{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.hover\:border-rose-400:hover{--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.hover\:border-teal-400:hover{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-200:hover{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-50\/50:hover{background-color:#fffbeb80}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-100:hover{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50:hover{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50\/50:hover{background-color:#ecfeff80}.hover\:bg-emerald-200:hover{--tw-bg-opacity: 1;background-color:rgb(167 243 208 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-50\/50:hover{background-color:#ecfdf580}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-green-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-200:hover{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}.hover\:bg-indigo-700:hover{--tw-bg-opacity: 1;background-color:rgb(67 56 202 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-100:hover{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50:hover{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}.hover\:bg-pink-200:hover{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-200:hover{--tw-bg-opacity: 1;background-color:rgb(233 213 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}.hover\:bg-purple-600:hover{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-50\/50:hover{background-color:#fff1f280}.hover\:bg-teal-200:hover{--tw-bg-opacity: 1;background-color:rgb(153 246 228 / var(--tw-bg-opacity, 1))}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/50:hover{background-color:#ffffff80}.hover\:bg-yellow-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 240 138 / var(--tw-bg-opacity, 1))}.hover\:from-blue-600:hover{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-blue-700:hover{--tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-green-600:hover{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-600:hover{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-700:hover{--tw-gradient-from: #b91c1c var(--tw-gradient-from-position);--tw-gradient-to: rgb(185 28 28 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-yellow-600:hover{--tw-gradient-from: #ca8a04 var(--tw-gradient-from-position);--tw-gradient-to: rgb(202 138 4 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-700:hover{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.hover\:to-blue-800:hover{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.hover\:to-cyan-600:hover{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.hover\:to-emerald-600:hover{--tw-gradient-to: #059669 var(--tw-gradient-to-position)}.hover\:to-green-700:hover{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.hover\:to-indigo-600:hover{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.hover\:to-indigo-700:hover{--tw-gradient-to: #4338ca var(--tw-gradient-to-position)}.hover\:to-orange-600:hover{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.hover\:to-red-700:hover{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.hover\:to-red-800:hover{--tw-gradient-to: #991b1b var(--tw-gradient-to-position)}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-cyan-700:hover{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-green-900:hover{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.hover\:text-indigo-600:hover{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity, 1))}.hover\:text-orange-700:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.hover\:text-orange-900:hover{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.hover\:text-purple-700:hover{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.hover\:text-purple-900:hover{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-red-900:hover{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-yellow-700:hover{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow:hover{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.focus\:border-green-500:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.focus\:border-indigo-400:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.focus\:border-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.focus\:border-teal-500:focus{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500\/20:focus{--tw-ring-color: rgb(59 130 246 / .2)}.focus\:ring-cyan-500\/20:focus{--tw-ring-color: rgb(6 182 212 / .2)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-green-500\/20:focus{--tw-ring-color: rgb(34 197 94 / .2)}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(233 213 255 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(168 85 247 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-500\/20:focus{--tw-ring-color: rgb(168 85 247 / .2)}.focus\:ring-red-500\/20:focus{--tw-ring-color: rgb(239 68 68 / .2)}.focus\:ring-teal-500\/20:focus{--tw-ring-color: rgb(20 184 166 / .2)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-purple-500\/60:focus-visible{--tw-ring-color: rgb(168 85 247 / .6)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:from-gray-400:disabled{--tw-gradient-from: #9ca3af var(--tw-gradient-from-position);--tw-gradient-to: rgb(156 163 175 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.disabled\:to-gray-500:disabled{--tw-gradient-to: #6b7280 var(--tw-gradient-to-position)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:shadow-sm:hover:disabled{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-20{opacity:.2}.group:hover .group-hover\:opacity-30{opacity:.3}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(139\,92\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(139,92,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(148\,163\,184\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(148,163,184,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(16\,185\,129\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(16,185,129,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(56\,189\,248\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(56,189,248,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(59\,130\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(59,130,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-4:after{content:var(--tw-content);--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus~.peer-focus\:ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-blue-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-orange-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(253 186 116 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-purple-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-teal-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(94 234 212 / var(--tw-ring-opacity, 1))}.dark\:divide-gray-600:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(75 85 99 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-600\/50:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#4b556380}.dark\:divide-gray-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-800:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.dark\:border:is(.dark *){border-width:1px}.dark\:border-amber-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.dark\:border-amber-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-amber-500\/20:is(.dark *){border-color:#f59e0b33}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:border-blue-500\/20:is(.dark *){border-color:#3b82f633}.dark\:border-blue-500\/30:is(.dark *){border-color:#3b82f64d}.dark\:border-blue-500\/40:is(.dark *){border-color:#3b82f666}.dark\:border-blue-500\/50:is(.dark *){border-color:#3b82f680}.dark\:border-blue-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-cyan-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:border-cyan-500\/40:is(.dark *){border-color:#06b6d466}.dark\:border-cyan-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(8 145 178 / var(--tw-border-opacity, 1))}.dark\:border-cyan-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(14 116 144 / var(--tw-border-opacity, 1))}.dark\:border-emerald-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.dark\:border-emerald-500\/20:is(.dark *){border-color:#10b98133}.dark\:border-emerald-500\/40:is(.dark *){border-color:#10b98166}.dark\:border-gray-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-600\/30:is(.dark *){border-color:#4b55634d}.dark\:border-gray-600\/50:is(.dark *){border-color:#4b556380}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/50:is(.dark *){border-color:#37415180}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-gray-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-green-500\/30:is(.dark *){border-color:#22c55e4d}.dark\:border-green-500\/40:is(.dark *){border-color:#22c55e66}.dark\:border-green-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-indigo-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.dark\:border-indigo-500\/40:is(.dark *){border-color:#6366f166}.dark\:border-indigo-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(67 56 202 / var(--tw-border-opacity, 1))}.dark\:border-orange-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.dark\:border-orange-500\/40:is(.dark *){border-color:#f9731666}.dark\:border-orange-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(234 88 12 / var(--tw-border-opacity, 1))}.dark\:border-orange-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(194 65 12 / var(--tw-border-opacity, 1))}.dark\:border-purple-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:border-purple-500\/40:is(.dark *){border-color:#a855f766}.dark\:border-purple-600\/60:is(.dark *){border-color:#9333ea99}.dark\:border-purple-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.dark\:border-purple-700\/70:is(.dark *){border-color:#7e22ceb3}.dark\:border-red-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.dark\:border-red-500\/20:is(.dark *){border-color:#ef444433}.dark\:border-red-500\/30:is(.dark *){border-color:#ef44444d}.dark\:border-red-500\/40:is(.dark *){border-color:#ef444466}.dark\:border-red-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/60:is(.dark *){border-color:#7f1d1d99}.dark\:border-rose-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.dark\:border-rose-500\/40:is(.dark *){border-color:#f43f5e66}.dark\:border-sky-500\/40:is(.dark *){border-color:#0ea5e966}.dark\:border-teal-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.dark\:border-teal-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(15 118 110 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/40:is(.dark *){border-color:#8b5cf666}.dark\:border-white\/10:is(.dark *){border-color:#ffffff1a}.dark\:border-yellow-500\/40:is(.dark *){border-color:#eab30866}.dark\:border-yellow-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(161 98 7 / var(--tw-border-opacity, 1))}.dark\:bg-amber-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-500\/20:is(.dark *){background-color:#f59e0b33}.dark\:bg-amber-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-amber-900\/40:is(.dark *){background-color:#78350f66}.dark\:bg-blue-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/20:is(.dark *){background-color:#3b82f633}.dark\:bg-blue-500\/30:is(.dark *){background-color:#3b82f64d}.dark\:bg-blue-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900\/10:is(.dark *){background-color:#1e3a8a1a}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-blue-900\/50:is(.dark *){background-color:#1e3a8a80}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-blue-950\/40:is(.dark *){background-color:#17255466}.dark\:bg-cyan-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-500\/20:is(.dark *){background-color:#06b6d433}.dark\:bg-cyan-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-900\/30:is(.dark *){background-color:#164e634d}.dark\:bg-cyan-900\/40:is(.dark *){background-color:#164e6366}.dark\:bg-emerald-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-500\/20:is(.dark *){background-color:#10b98133}.dark\:bg-emerald-900\/20:is(.dark *){background-color:#064e3b33}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#064e3b4d}.dark\:bg-emerald-900\/40:is(.dark *){background-color:#064e3b66}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#022c2266}.dark\:bg-gray-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600\/50:is(.dark *){background-color:#4b556380}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700\/50:is(.dark *){background-color:#37415180}.dark\:bg-gray-700\/60:is(.dark *){background-color:#37415199}.dark\:bg-gray-700\/70:is(.dark *){background-color:#374151b3}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/20:is(.dark *){background-color:#1f293733}.dark\:bg-gray-800\/50:is(.dark *){background-color:#1f293780}.dark\:bg-gray-800\/60:is(.dark *){background-color:#1f293799}.dark\:bg-gray-800\/80:is(.dark *){background-color:#1f2937cc}.dark\:bg-gray-800\/90:is(.dark *){background-color:#1f2937e6}.dark\:bg-gray-800\/95:is(.dark *){background-color:#1f2937f2}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/50:is(.dark *){background-color:#11182780}.dark\:bg-gray-900\/70:is(.dark *){background-color:#111827b3}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-gray-900\/95:is(.dark *){background-color:#111827f2}.dark\:bg-green-500\/20:is(.dark *){background-color:#22c55e33}.dark\:bg-green-500\/30:is(.dark *){background-color:#22c55e4d}.dark\:bg-green-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-green-900\/50:is(.dark *){background-color:#14532d80}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-indigo-500\/20:is(.dark *){background-color:#6366f133}.dark\:bg-indigo-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.dark\:bg-indigo-900\/20:is(.dark *){background-color:#312e8133}.dark\:bg-indigo-900\/30:is(.dark *){background-color:#312e814d}.dark\:bg-indigo-950\/30:is(.dark *){background-color:#1e1b4b4d}.dark\:bg-orange-500\/20:is(.dark *){background-color:#f9731633}.dark\:bg-orange-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity, 1))}.dark\:bg-orange-900\/30:is(.dark *){background-color:#7c2d124d}.dark\:bg-orange-950\/30:is(.dark *){background-color:#4314074d}.dark\:bg-pink-500\/20:is(.dark *){background-color:#ec489933}.dark\:bg-pink-900\/30:is(.dark *){background-color:#8318434d}.dark\:bg-purple-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(192 132 252 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500\/10:is(.dark *){background-color:#a855f71a}.dark\:bg-purple-500\/20:is(.dark *){background-color:#a855f733}.dark\:bg-purple-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-800\/20:is(.dark *){background-color:#6b21a833}.dark\:bg-purple-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-purple-950\/20:is(.dark *){background-color:#3b076433}.dark\:bg-purple-950\/30:is(.dark *){background-color:#3b07644d}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-500\/30:is(.dark *){background-color:#ef44444d}.dark\:bg-red-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-red-900\/40:is(.dark *){background-color:#7f1d1d66}.dark\:bg-red-950\/30:is(.dark *){background-color:#450a0a4d}.dark\:bg-rose-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-900\/30:is(.dark *){background-color:#8813374d}.dark\:bg-rose-900\/40:is(.dark *){background-color:#88133766}.dark\:bg-sky-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-500\/20:is(.dark *){background-color:#0ea5e933}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-teal-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 94 89 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-900\/20:is(.dark *){background-color:#134e4a33}.dark\:bg-teal-900\/30:is(.dark *){background-color:#134e4a4d}.dark\:bg-violet-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2e106566}.dark\:bg-yellow-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900\/20:is(.dark *){background-color:#713f1233}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:bg-yellow-900\/40:is(.dark *){background-color:#713f1266}.dark\:bg-yellow-950\/30:is(.dark *){background-color:#4220064d}.dark\:from-amber-400:is(.dark *){--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-amber-900\/20:is(.dark *){--tw-gradient-from: rgb(120 53 15 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(120 53 15 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-600\/20:is(.dark *){--tw-gradient-from: rgb(37 99 235 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/20:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/40:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-950\/30:is(.dark *){--tw-gradient-from: rgb(23 37 84 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(23 37 84 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-cyan-900\/20:is(.dark *){--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-400:is(.dark *){--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/20:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/40:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-700:is(.dark *){--tw-gradient-from: #374151 var(--tw-gradient-from-position);--tw-gradient-to: rgb(55 65 81 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-800:is(.dark *){--tw-gradient-from: #1f2937 var(--tw-gradient-from-position);--tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-900\/30:is(.dark *){--tw-gradient-from: rgb(17 24 39 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-900\/20:is(.dark *){--tw-gradient-from: rgb(20 83 45 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 83 45 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-950\/30:is(.dark *){--tw-gradient-from: rgb(5 46 22 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(5 46 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-indigo-900\/20:is(.dark *){--tw-gradient-from: rgb(49 46 129 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(49 46 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-orange-950\/30:is(.dark *){--tw-gradient-from: rgb(67 20 7 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(67 20 7 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-500\/70:is(.dark *){--tw-gradient-from: rgb(168 85 247 / .7) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/20:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/40:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-950\/30:is(.dark *){--tw-gradient-from: rgb(59 7 100 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-500:is(.dark *){--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-900\/20:is(.dark *){--tw-gradient-from: rgb(136 19 55 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(136 19 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-400:is(.dark *){--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-500:is(.dark *){--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-900\/40:is(.dark *){--tw-gradient-from: rgb(12 74 110 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-teal-900\/20:is(.dark *){--tw-gradient-from: rgb(19 78 74 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(19 78 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-400:is(.dark *){--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-900\/40:is(.dark *){--tw-gradient-from: rgb(76 29 149 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-900\/20:is(.dark *){--tw-gradient-from: rgb(113 63 18 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(113 63 18 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-blue-500:is(.dark *){--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-blue-900\/20:is(.dark *){--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(30 58 138 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-cyan-400:is(.dark *){--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-500:is(.dark *){--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(6 78 59 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-600:is(.dark *){--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #4b5563 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-900\/10:is(.dark *){--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(17 24 39 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-orange-400:is(.dark *){--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-500:is(.dark *){--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-600\/70:is(.dark *){--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(147 51 234 / .7) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(88 28 135 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-red-500:is(.dark *){--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(12 74 110 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-violet-900\/20:is(.dark *){--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(76 29 149 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-amber-500:is(.dark *){--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.dark\:to-amber-950\/30:is(.dark *){--tw-gradient-to: rgb(69 26 3 / .3) var(--tw-gradient-to-position)}.dark\:to-blue-500:is(.dark *){--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.dark\:to-blue-800\/20:is(.dark *){--tw-gradient-to: rgb(30 64 175 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-500:is(.dark *){--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.dark\:to-cyan-900\/20:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-900\/30:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-800\/30:is(.dark *){--tw-gradient-to: rgb(6 95 70 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .2) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/30:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-950\/30:is(.dark *){--tw-gradient-to: rgb(2 44 34 / .3) var(--tw-gradient-to-position)}.dark\:to-fuchsia-500:is(.dark *){--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.dark\:to-fuchsia-900\/30:is(.dark *){--tw-gradient-to: rgb(112 26 117 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-700:is(.dark *){--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-gray-800\/30:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-800\/90:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .9) var(--tw-gradient-to-position)}.dark\:to-green-800\/20:is(.dark *){--tw-gradient-to: rgb(22 101 52 / .2) var(--tw-gradient-to-position)}.dark\:to-green-900\/20:is(.dark *){--tw-gradient-to: rgb(20 83 45 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-500\/70:is(.dark *){--tw-gradient-to: rgb(99 102 241 / .7) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/20:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/30:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .3) var(--tw-gradient-to-position)}.dark\:to-indigo-950\/30:is(.dark *){--tw-gradient-to: rgb(30 27 75 / .3) var(--tw-gradient-to-position)}.dark\:to-orange-900\/20:is(.dark *){--tw-gradient-to: rgb(124 45 18 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-900\/20:is(.dark *){--tw-gradient-to: rgb(131 24 67 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-950\/30:is(.dark *){--tw-gradient-to: rgb(80 7 36 / .3) var(--tw-gradient-to-position)}.dark\:to-purple-600\/20:is(.dark *){--tw-gradient-to: rgb(147 51 234 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-800\/20:is(.dark *){--tw-gradient-to: rgb(107 33 168 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/40:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .4) var(--tw-gradient-to-position)}.dark\:to-rose-600:is(.dark *){--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.dark\:to-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .2) var(--tw-gradient-to-position)}.dark\:to-sky-900\/30:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .3) var(--tw-gradient-to-position)}.dark\:to-teal-500:is(.dark *){--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.dark\:to-teal-900\/20:is(.dark *){--tw-gradient-to: rgb(19 78 74 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-800\/20:is(.dark *){--tw-gradient-to: rgb(133 77 14 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-900\/20:is(.dark *){--tw-gradient-to: rgb(113 63 18 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-950\/30:is(.dark *){--tw-gradient-to: rgb(66 32 6 / .3) var(--tw-gradient-to-position)}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-100:is(.dark *){--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-200:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is(.dark *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.dark\:text-gray-900:is(.dark *){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300:is(.dark *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-indigo-400:is(.dark *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-300:is(.dark *){--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-purple-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200\/70:is(.dark *){color:#e9d5ffb3}.dark\:text-purple-300:is(.dark *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-teal-300:is(.dark *){--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.dark\:text-teal-400:is(.dark *){--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-2xl:is(.dark *){--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){--tw-shadow: 0 12px 28px rgba(0,0,0,.45);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-xl:is(.dark *){--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-blue-500\/40:is(.dark *){--tw-shadow-color: rgb(59 130 246 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:ring-amber-500\/20:is(.dark *){--tw-ring-color: rgb(245 158 11 / .2)}.dark\:ring-blue-500\/20:is(.dark *){--tw-ring-color: rgb(59 130 246 / .2)}.dark\:ring-emerald-500\/20:is(.dark *){--tw-ring-color: rgb(16 185 129 / .2)}.dark\:ring-purple-400\/30:is(.dark *){--tw-ring-color: rgb(192 132 252 / .3)}.dark\:ring-white\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:after\:bg-gray-300:is(.dark *):after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.dark\:hover\:border-amber-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:hover\:border-cyan-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(5 150 105 / var(--tw-border-opacity, 1))}.dark\:hover\:border-gray-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.dark\:hover\:border-orange-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.dark\:hover\:border-purple-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(225 29 72 / var(--tw-border-opacity, 1))}.dark\:hover\:border-teal-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-amber-800\/50:hover:is(.dark *){background-color:#92400e80}.dark\:hover\:bg-amber-900\/20:hover:is(.dark *){background-color:#78350f33}.dark\:hover\:bg-amber-900\/50:hover:is(.dark *){background-color:#78350f80}.dark\:hover\:bg-blue-500\/20:hover:is(.dark *){background-color:#3b82f633}.dark\:hover\:bg-blue-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-900\/20:hover:is(.dark *){background-color:#1e3a8a33}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-blue-900\/50:hover:is(.dark *){background-color:#1e3a8a80}.dark\:hover\:bg-blue-900\/70:hover:is(.dark *){background-color:#1e3a8ab3}.dark\:hover\:bg-cyan-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-cyan-800\/50:hover:is(.dark *){background-color:#155e7580}.dark\:hover\:bg-cyan-900\/20:hover:is(.dark *){background-color:#164e6333}.dark\:hover\:bg-cyan-900\/50:hover:is(.dark *){background-color:#164e6380}.dark\:hover\:bg-cyan-900\/60:hover:is(.dark *){background-color:#164e6399}.dark\:hover\:bg-emerald-900\/20:hover:is(.dark *){background-color:#064e3b33}.dark\:hover\:bg-emerald-900\/50:hover:is(.dark *){background-color:#064e3b80}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700\/30:hover:is(.dark *){background-color:#3741514d}.dark\:hover\:bg-gray-700\/50:hover:is(.dark *){background-color:#37415180}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/50:hover:is(.dark *){background-color:#14532d80}.dark\:hover\:bg-indigo-900\/20:hover:is(.dark *){background-color:#312e8133}.dark\:hover\:bg-indigo-900\/50:hover:is(.dark *){background-color:#312e8180}.dark\:hover\:bg-orange-900\/20:hover:is(.dark *){background-color:#7c2d1233}.dark\:hover\:bg-orange-900\/50:hover:is(.dark *){background-color:#7c2d1280}.dark\:hover\:bg-pink-900\/50:hover:is(.dark *){background-color:#83184380}.dark\:hover\:bg-purple-500\/20:hover:is(.dark *){background-color:#a855f733}.dark\:hover\:bg-purple-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-purple-900\/20:hover:is(.dark *){background-color:#581c8733}.dark\:hover\:bg-purple-900\/40:hover:is(.dark *){background-color:#581c8766}.dark\:hover\:bg-purple-900\/50:hover:is(.dark *){background-color:#581c8780}.dark\:hover\:bg-red-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-900\/20:hover:is(.dark *){background-color:#7f1d1d33}.dark\:hover\:bg-red-900\/30:hover:is(.dark *){background-color:#7f1d1d4d}.dark\:hover\:bg-red-900\/50:hover:is(.dark *){background-color:#7f1d1d80}.dark\:hover\:bg-rose-900\/20:hover:is(.dark *){background-color:#88133733}.dark\:hover\:bg-teal-900\/20:hover:is(.dark *){background-color:#134e4a33}.dark\:hover\:bg-teal-900\/50:hover:is(.dark *){background-color:#134e4a80}.dark\:hover\:text-blue-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:hover\:text-cyan-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:hover\:text-indigo-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:hover\:text-orange-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:hover\:text-purple-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-600:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-yellow-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:focus\:border-blue-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:focus\:border-indigo-500:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:focus\:border-purple-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:focus\:bg-gray-800:focus:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:focus\:ring-blue-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-indigo-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-purple-500\/40:focus:is(.dark *){--tw-ring-color: rgb(168 85 247 / .4)}.dark\:focus\:ring-offset-gray-800:focus:is(.dark *){--tw-ring-offset-color: #1f2937}.dark\:focus-visible\:ring-purple-400\/60:focus-visible:is(.dark *){--tw-ring-color: rgb(192 132 252 / .6)}.peer:focus~.dark\:peer-focus\:ring-blue-600:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-blue-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-orange-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(154 52 18 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-purple-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(107 33 168 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-teal-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(17 94 89 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-16{margin-left:4rem}.sm\:ml-2{margin-left:.5rem}.sm\:ml-4{margin-left:1rem}.sm\:mr-2{margin-right:.5rem}.sm\:mr-3{margin-right:.75rem}.sm\:mt-0{margin-top:0}.sm\:mt-2{margin-top:.5rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-20{height:5rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:max-h-\[300px\]{max-height:300px}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-20{width:5rem}.sm\:w-44{width:11rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-8{width:2rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:.5rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-3xl{border-radius:1.5rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:mb-3{margin-bottom:.75rem}.md\:mb-4{margin-bottom:1rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-2{margin-right:.5rem}.md\:mr-3{margin-right:.75rem}.md\:mt-3{margin-top:.75rem}.md\:mt-4{margin-top:1rem}.md\:mt-8{margin-top:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:max-h-80{max-height:20rem}.md\:w-auto{width:auto}.md\:flex-none{flex:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:gap-2{gap:.5rem}.md\:gap-3{gap:.75rem}.md\:gap-4{gap:1rem}.md\:gap-6{gap:1.5rem}.md\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.md\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.md\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.md\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.md\:rounded-3xl{border-radius:1.5rem}.md\:p-10{padding:2.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pt-4{padding-top:1rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:w-auto{width:auto}.lg\:max-w-md{max-width:28rem}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:p-6{padding:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.xl\:items-stretch{align-items:stretch}}@media (min-width: 1536px){.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--glass-strong-color: rgba(255, 255, 255, .95);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2);--bg-gradient-start: #667eea;--bg-gradient-mid: #764ba2;--bg-gradient-end: #f093fb;--input-bg: rgba(255, 255, 255, .9);--input-border: rgba(209, 213, 219, .8);--modal-bg: rgba(0, 0, 0, .4);--table-bg: rgba(255, 255, 255, .95);--table-hover: rgba(102, 126, 234, .05)}.dark{--primary-color: #818cf8;--secondary-color: #a78bfa;--accent-color: #c084fc;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(31, 41, 55, .95);--glass-color: rgba(0, 0, 0, .2);--glass-strong-color: rgba(31, 41, 55, .95);--text-primary: #f3f4f6;--text-secondary: #9ca3af;--border-color: rgba(75, 85, 99, .3);--bg-gradient-start: #1f2937;--bg-gradient-mid: #374151;--bg-gradient-end: #4b5563;--input-bg: rgba(31, 41, 55, .9);--input-border: rgba(75, 85, 99, .5);--modal-bg: rgba(0, 0, 0, .6);--table-bg: rgba(31, 41, 55, .95);--table-hover: rgba(129, 140, 248, .1)}.dark .bg-gray-800,.dark\:bg-gray-800:is(.dark *){background-color:var(--glass-strong-color)!important}.dark .bg-gray-700,.dark\:bg-gray-700:is(.dark *){background-color:var(--bg-gradient-mid)!important}.dark .bg-gray-900,.dark\:bg-gray-900:is(.dark *){background-color:var(--bg-gradient-start)!important}.dark\:bg-gray-800\/40:is(.dark *){background-color:color-mix(in srgb,var(--glass-strong-color) 40%,transparent)!important}.dark\:bg-gray-700\/30:is(.dark *){background-color:color-mix(in srgb,var(--bg-gradient-mid) 30%,transparent)!important}.dark\:from-gray-700:is(.dark *){--tw-gradient-from: var(--bg-gradient-mid) !important;--tw-gradient-to: var(--bg-gradient-mid) !important;--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important}.dark\:to-gray-800\/90:is(.dark *){--tw-gradient-to: var(--glass-strong-color) !important}.dark\:hover\:bg-gray-600:is(.dark *):hover{background-color:var(--bg-gradient-end)!important}.dark\:hover\:bg-gray-700:is(.dark *):hover{background-color:var(--bg-gradient-mid)!important}.dark\:hover\:bg-gray-500:is(.dark *):hover{background-color:var(--text-secondary)!important}.dark .border-gray-700,.dark\:border-gray-700:is(.dark *){border-color:var(--border-color)!important}.dark .border-gray-600,.dark\:border-gray-600:is(.dark *){border-color:var(--border-color)!important}.dark\:hover\:border-gray-500:is(.dark *):hover{border-color:var(--border-color)!important}button,input,select,textarea{transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease,transform .2s ease}.transition-colors{transition:color .3s ease,background-color .3s ease,border-color .3s ease}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden;color:var(--text-primary);transition:background .3s ease,color .3s ease}body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--primary-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--secondary-rgb),.1) 0%,transparent 50%);pointer-events:none;z-index:-1}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;transition:background-color .3s ease,border-color .3s ease}.dark .glass{box-shadow:0 20px 25px -5px #00000040,0 10px 10px -5px #0000001a,inset 0 1px #ffffff0d}.glass-strong{background:var(--glass-strong-color);border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease,border-color .3s ease}.dark .glass-strong{box-shadow:0 25px 50px -12px #0006,0 0 0 1px #ffffff05,inset 0 1px #ffffff0d}.tab-btn{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em}.tab-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.tab-btn:hover:before{left:100%}.tab-btn.active{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05);transform:translateY(-1px)}.card{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:background-color .3s ease,border-color .3s ease}.dark .card{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.card:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.stat-card{background:linear-gradient(135deg,var(--surface-color) 0%,var(--glass-strong-color) 100%);border-radius:20px;border:1px solid var(--border-color);padding:24px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.dark .stat-card{background:linear-gradient(135deg,var(--glass-strong-color) 0%,var(--bg-gradient-start) 100%)}.stat-card:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.stat-icon{width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.btn{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:#fff3;border-radius:50%;transform:translate(-50%,-50%);transition:width .3s ease,height .3s ease}.btn:active:before{width:300px;height:300px}.btn-primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05)}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px rgba(var(--primary-rgb),.3),0 10px 10px -5px rgba(var(--primary-rgb),.1)}.btn-success{background:linear-gradient(135deg,var(--success-color) 0%,#059669 100%);color:#fff;box-shadow:0 10px 15px -3px #10b9814d,0 4px 6px -2px #10b9810d}.btn-success:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #10b9814d,0 10px 10px -5px #10b9811a}.btn-danger{background:linear-gradient(135deg,var(--error-color) 0%,#dc2626 100%);color:#fff;box-shadow:0 10px 15px -3px #ef44444d,0 4px 6px -2px #ef44440d}.btn-danger:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #ef44444d,0 10px 10px -5px #ef44441a}.form-input{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:16px;font-size:16px;color:var(--text-primary);transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.1),0 10px 15px -3px #0000001a;background:#fffffff2;color:#1f2937}.dark .form-input:focus{box-shadow:0 0 0 3px rgba(var(--primary-rgb),.2),0 10px 15px -3px #0003;background:var(--glass-strong-color);color:#f3f4f6}.table-container{background:var(--table-bg);border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease}.dark .table-container{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.table-row{transition:background-color .2s ease,transform .2s ease}.table-row:hover{background:var(--table-hover);transform:scale(1.005)}.modal{background:var(--modal-bg);transition:background-color .3s ease}.modal-content{background:#fff;border-radius:24px;border:1px solid rgba(229,231,235,.8);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d;transition:background-color .3s ease,border-color .3s ease}.dark .modal-content{background:var(--bg-gradient-start);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #0009,0 0 0 1px #ffffff05}.header-title{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.loading-spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top:2px solid white;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-up-enter-active,.slide-up-leave-active{transition:all .3s ease}.slide-up-enter-from{opacity:0;transform:translateY(30px)}.slide-up-leave-to{opacity:0;transform:translateY(-30px)}.toast{position:fixed;top:80px;right:20px;z-index:1000;min-width:320px;max-width:500px;transform:translate(100%);transition:transform .3s ease-in-out}.toast.show{transform:translate(0)}.toast-success{background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:1px solid rgba(16,185,129,.3)}.toast-error{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border:1px solid rgba(239,68,68,.3)}.toast-info{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:1px solid rgba(59,130,246,.3)}.toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border:1px solid rgba(245,158,11,.3)}[v-cloak]{display:none}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(var(--primary-rgb),.3) rgba(var(--primary-rgb),.05)}.dark .custom-scrollbar{scrollbar-color:rgba(var(--primary-rgb),.3) rgba(var(--primary-rgb),.05)}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:rgba(var(--primary-rgb),.05);border-radius:10px}.dark .custom-scrollbar::-webkit-scrollbar-track{background:rgba(var(--primary-rgb),.05)}.custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,rgba(var(--primary-rgb),.4),rgba(var(--secondary-rgb),.4));border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease}.dark .custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,rgba(var(--primary-rgb),.4),rgba(var(--secondary-rgb),.4))}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,rgba(var(--primary-rgb),.6),rgba(var(--secondary-rgb),.6))}.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,rgba(var(--primary-rgb),.6),rgba(var(--secondary-rgb),.6))}.custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,rgba(var(--primary-rgb),.8),rgba(var(--secondary-rgb),.8))}.dark .custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,rgba(var(--primary-rgb),.8),rgba(var(--secondary-rgb),.8))}.modal-scroll-content{max-height:calc(90vh - 160px);overflow-y:auto;padding-right:8px}@media (max-width: 768px){.glass,.glass-strong{margin:0;border-radius:16px}.stat-card{padding:16px}.tab-btn{font-size:14px;padding:12px 8px}.modal-scroll-content{max-height:calc(85vh - 120px)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}to{transform:scale(1);opacity:1}}.animate-pulse{transition:transform .2s ease}.animate-pulse:hover{animation:pulse .3s ease}.user-menu-dropdown{min-width:240px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.tab-content{animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
diff --git a/assets/index-DHxgJIP3.css b/assets/index-DHxgJIP3.css
deleted file mode 100644
index 0e6eb8a3..00000000
--- a/assets/index-DHxgJIP3.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.toast-container[data-v-c8b24ff5]{position:fixed;top:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:12px;pointer-events:none}.toast[data-v-c8b24ff5]{min-width:320px;max-width:500px;background:#fff;border-radius:12px;box-shadow:0 8px 32px #0000001f;border:1px solid #e5e7eb;overflow:hidden;position:relative;pointer-events:auto;cursor:pointer;transform:translate(100%);opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 8px 32px #0000004d}.toast-show[data-v-c8b24ff5]{transform:translate(0);opacity:1}.toast-hide[data-v-c8b24ff5]{transform:translate(100%);opacity:0}.toast-content[data-v-c8b24ff5]{display:flex;align-items:flex-start;padding:16px;gap:12px}.toast-icon[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:14px}.toast-body[data-v-c8b24ff5]{flex:1}.toast-title[data-v-c8b24ff5]{font-weight:600;font-size:14px;line-height:1.4;margin-bottom:4px}.toast-message[data-v-c8b24ff5]{font-size:14px;line-height:1.5;word-wrap:break-word}.toast-close[data-v-c8b24ff5]{flex-shrink:0;width:24px;height:24px;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#9ca3af;transition:all .2s ease}.toast-close[data-v-c8b24ff5]:hover{background:#f3f4f6;color:#6b7280}.dark{background:#374151;color:#9ca3af}.toast-progress[data-v-c8b24ff5]{position:absolute;bottom:0;left:0;height:3px;background:currentColor;opacity:.3;animation:toast-progress-c8b24ff5 linear forwards}@keyframes toast-progress-c8b24ff5{0%{width:100%}to{width:0%}}.toast-success[data-v-c8b24ff5]{border-left:4px solid #10b981}.toast-success .toast-icon[data-v-c8b24ff5]{color:#10b981;background:#d1fae5}.dark{background:#064e3b}.toast-success .toast-title[data-v-c8b24ff5]{color:#065f46}.dark{color:#10b981}.toast-success .toast-message[data-v-c8b24ff5]{color:#047857}.dark{color:#34d399}.toast-success .toast-progress[data-v-c8b24ff5]{background:#10b981}.toast-error[data-v-c8b24ff5]{border-left:4px solid #ef4444}.toast-error .toast-icon[data-v-c8b24ff5]{color:#ef4444;background:#fee2e2}.dark{background:#7f1d1d}.toast-error .toast-title[data-v-c8b24ff5]{color:#991b1b}.dark{color:#ef4444}.toast-error .toast-message[data-v-c8b24ff5]{color:#dc2626}.dark{color:#f87171}.toast-error .toast-progress[data-v-c8b24ff5]{background:#ef4444}.toast-warning[data-v-c8b24ff5]{border-left:4px solid #f59e0b}.toast-warning .toast-icon[data-v-c8b24ff5]{color:#f59e0b;background:#fef3c7}.dark{background:#78350f}.toast-warning .toast-title[data-v-c8b24ff5]{color:#92400e}.dark{color:#f59e0b}.toast-warning .toast-message[data-v-c8b24ff5]{color:#d97706}.dark{color:#fbbf24}.toast-warning .toast-progress[data-v-c8b24ff5]{background:#f59e0b}.toast-info[data-v-c8b24ff5]{border-left:4px solid #3b82f6}.toast-info .toast-icon[data-v-c8b24ff5]{color:#3b82f6;background:#dbeafe}.dark{background:#1e3a8a}.toast-info .toast-title[data-v-c8b24ff5]{color:#1e40af}.dark{color:#3b82f6}.toast-info .toast-message[data-v-c8b24ff5]{color:#2563eb}.dark{color:#60a5fa}.toast-info .toast-progress[data-v-c8b24ff5]{background:#3b82f6}@media (max-width: 640px){.toast-container[data-v-c8b24ff5]{top:10px;right:10px;left:10px}.toast[data-v-c8b24ff5]{min-width:auto;max-width:none}}.toast-list-enter-active[data-v-c8b24ff5],.toast-list-leave-active[data-v-c8b24ff5]{transition:all .3s ease}.toast-list-enter-from[data-v-c8b24ff5],.toast-list-leave-to[data-v-c8b24ff5]{opacity:0;transform:translate(100%)}.toast-list-move[data-v-c8b24ff5]{transition:transform .3s ease}.modal[data-v-6b3390a6]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3}.modal-content[data-v-6b3390a6]{background:#fff;border-radius:16px;box-shadow:0 20px 64px #00000026;border:1px solid #e5e7eb;max-height:90vh;overflow-y:auto}.dark{background:#1f2937;border:1px solid #374151;box-shadow:0 20px 64px #000c}.btn[data-v-6b3390a6]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-6b3390a6]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-danger[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-danger[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.btn-danger[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity, 1))}.btn-warning[data-v-6b3390a6]{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-warning[data-v-6b3390a6]:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.btn-warning[data-v-6b3390a6]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(245 158 11 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-6b3390a6]{height:1rem;width:1rem}@keyframes spin-6b3390a6{to{transform:rotate(360deg)}}.loading-spinner[data-v-6b3390a6]{animation:spin-6b3390a6 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.modal-enter-active[data-v-6b3390a6],.modal-leave-active[data-v-6b3390a6]{transition:all .3s ease}.modal-enter-from[data-v-6b3390a6],.modal-leave-to[data-v-6b3390a6]{opacity:0}.modal-enter-active .modal-content[data-v-6b3390a6],.modal-leave-active .modal-content[data-v-6b3390a6]{transition:transform .3s ease}.modal-enter-from .modal-content[data-v-6b3390a6],.modal-leave-to .modal-content[data-v-6b3390a6]{transform:scale(.9) translateY(-20px)}.modal-content[data-v-6b3390a6]::-webkit-scrollbar{width:6px}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-track{background:#f1f5f9;border-radius:3px}.dark{background:#374151}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:3px}.dark{background:#4b5563}.modal-content[data-v-6b3390a6]::-webkit-scrollbar-thumb:hover{background:#94a3b8}.dark{background:#6b7280}#app[data-v-dab04b7e]{min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.-inset-0\.5{top:-.125rem;right:-.125rem;bottom:-.125rem;left:-.125rem}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-left-2{left:-.5rem}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.left-0{left:0}.left-0\.5{left:.125rem}.left-3{left:.75rem}.left-5{left:1.25rem}.left-\[50px\]{left:50px}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1050\]{z-index:1050}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-2\.5{margin-left:.625rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-8{margin-right:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[2px\]{margin-top:2px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[260px\]{height:260px}.h-\[38px\]{height:38px}.h-\[50vh\]{height:50vh}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[92vh\]{max-height:92vh}.min-h-\[260px\]{min-height:260px}.min-h-\[320px\]{min-height:320px}.min-h-\[32px\]{min-height:32px}.min-h-\[48px\]{min-height:48px}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[140px\]{width:140px}.w-\[180px\]{width:180px}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[768px\]{width:768px}.w-\[94px\]{width:94px}.w-\[95\%\]{width:95%}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[110px\]{min-width:110px}.min-w-\[120px\]{min-width:120px}.min-w-\[140px\]{min-width:140px}.min-w-\[150px\]{min-width:150px}.min-w-\[160px\]{min-width:160px}.min-w-\[170px\]{min-width:170px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[20px\]{min-width:20px}.min-w-\[210px\]{min-width:210px}.min-w-\[220px\]{min-width:220px}.min-w-\[240px\]{min-width:240px}.min-w-\[32px\]{min-width:32px}.min-w-\[34px\]{min-width:34px}.min-w-\[48px\]{min-width:48px}.min-w-\[50px\]{min-width:50px}.min-w-\[70px\]{min-width:70px}.min-w-\[80px\]{min-width:80px}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[320px\]{max-width:320px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-2{--tw-translate-y: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity, 1))}.divide-gray-200\/50>:not([hidden])~:not([hidden]){border-color:#e5e7eb80}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.\!overflow-visible{overflow:visible!important}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-100{--tw-border-opacity: 1;border-color:rgb(254 243 199 / var(--tw-border-opacity, 1))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.border-amber-500{--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.border-blue-100{--tw-border-opacity: 1;border-color:rgb(219 234 254 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-blue-200\/80{border-color:#bfdbfecc}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-300{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.border-cyan-500{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.border-emerald-100{--tw-border-opacity: 1;border-color:rgb(209 250 229 / var(--tw-border-opacity, 1))}.border-emerald-200\/80{border-color:#a7f3d0cc}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/50{border-color:#e5e7eb80}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-gray-300\/30{border-color:#d1d5db4d}.border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.border-green-100{--tw-border-opacity: 1;border-color:rgb(220 252 231 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.border-indigo-100{--tw-border-opacity: 1;border-color:rgb(224 231 255 / var(--tw-border-opacity, 1))}.border-indigo-200{--tw-border-opacity: 1;border-color:rgb(199 210 254 / var(--tw-border-opacity, 1))}.border-indigo-500{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.border-orange-100{--tw-border-opacity: 1;border-color:rgb(255 237 213 / var(--tw-border-opacity, 1))}.border-orange-200{--tw-border-opacity: 1;border-color:rgb(254 215 170 / var(--tw-border-opacity, 1))}.border-orange-300{--tw-border-opacity: 1;border-color:rgb(253 186 116 / var(--tw-border-opacity, 1))}.border-orange-500{--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.border-purple-100{--tw-border-opacity: 1;border-color:rgb(243 232 255 / var(--tw-border-opacity, 1))}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-purple-200\/70{border-color:#e9d5ffb3}.border-purple-200\/80{border-color:#e9d5ffcc}.border-purple-500{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.border-purple-700{--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-red-500\/30{border-color:#ef44444d}.border-rose-200{--tw-border-opacity: 1;border-color:rgb(254 205 211 / var(--tw-border-opacity, 1))}.border-rose-500{--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.border-sky-200\/80{border-color:#bae6fdcc}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/70{border-color:#e2e8f0b3}.border-teal-200{--tw-border-opacity: 1;border-color:rgb(153 246 228 / var(--tw-border-opacity, 1))}.border-teal-500{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200\/80{border-color:#ddd6fecc}.border-white\/20{border-color:#fff3}.border-white\/50{border-color:#ffffff80}.border-yellow-100{--tw-border-opacity: 1;border-color:rgb(254 249 195 / var(--tw-border-opacity, 1))}.border-yellow-200{--tw-border-opacity: 1;border-color:rgb(254 240 138 / var(--tw-border-opacity, 1))}.border-yellow-300{--tw-border-opacity: 1;border-color:rgb(253 224 71 / var(--tw-border-opacity, 1))}.border-opacity-20{--tw-border-opacity: .2}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-300{--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/70{background-color:#fffbebb3}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-300{--tw-bg-opacity: 1;background-color:rgb(147 197 253 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/60{background-color:#eff6ff99}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900\/20{background-color:#1e3a8a33}.bg-cyan-100{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.bg-cyan-300{--tw-bg-opacity: 1;background-color:rgb(103 232 249 / var(--tw-bg-opacity, 1))}.bg-cyan-50{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.bg-cyan-50\/90{background-color:#ecfeffe6}.bg-cyan-500{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity, 1))}.bg-cyan-600{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/60{background-color:#ecfdf599}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/85{background-color:#e5e7ebd9}.bg-gray-300{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.bg-gray-300\/50{background-color:#d1d5db80}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/70{background-color:#f9fafbb3}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-gray-800{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.bg-gray-900\/40{background-color:#11182766}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-400{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-indigo-300{--tw-bg-opacity: 1;background-color:rgb(165 180 252 / var(--tw-bg-opacity, 1))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-200{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.bg-orange-300{--tw-bg-opacity: 1;background-color:rgb(253 186 116 / var(--tw-bg-opacity, 1))}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-600{--tw-bg-opacity: 1;background-color:rgb(234 88 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-300{--tw-bg-opacity: 1;background-color:rgb(216 180 254 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/20{background-color:#ef444433}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-50{--tw-bg-opacity: 1;background-color:rgb(255 241 242 / var(--tw-bg-opacity, 1))}.bg-rose-50\/90{background-color:#fff1f2e6}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-teal-300{--tw-bg-opacity: 1;background-color:rgb(94 234 212 / var(--tw-bg-opacity, 1))}.bg-teal-50{--tw-bg-opacity: 1;background-color:rgb(240 253 250 / var(--tw-bg-opacity, 1))}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-white\/20{background-color:#fff3}.bg-white\/30{background-color:#ffffff4d}.bg-white\/60{background-color:#fff9}.bg-white\/70{background-color:#ffffffb3}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-300{--tw-bg-opacity: 1;background-color:rgb(253 224 71 / var(--tw-bg-opacity, 1))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity, 1))}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-opacity-20{--tw-bg-opacity: .2}.bg-opacity-50{--tw-bg-opacity: .5}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-100{--tw-gradient-from: #fef3c7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 243 199 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-400{--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-500{--tw-gradient-from: #f59e0b var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-100{--tw-gradient-from: #dbeafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50{--tw-gradient-from: #eff6ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from: #3b82f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500\/20{--tw-gradient-from: rgb(59 130 246 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-100{--tw-gradient-from: #cffafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(207 250 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from: #06b6d4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-400{--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500{--tw-gradient-from: #10b981 var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-100{--tw-gradient-from: #f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 244 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-200{--tw-gradient-from: #e5e7eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(229 231 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-300{--tw-gradient-from: #d1d5db var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-50{--tw-gradient-from: #f9fafb var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-gray-600{--tw-gradient-from: #4b5563 var(--tw-gradient-from-position);--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50{--tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-500{--tw-gradient-from: #22c55e var(--tw-gradient-from-position);--tw-gradient-to: rgb(34 197 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-100{--tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-50{--tw-gradient-from: #eef2ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(238 242 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-indigo-500{--tw-gradient-from: #6366f1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-100{--tw-gradient-from: #ffedd5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 237 213 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-50{--tw-gradient-from: #fff7ed var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 247 237 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-orange-500{--tw-gradient-from: #f97316 var(--tw-gradient-from-position);--tw-gradient-to: rgb(249 115 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-100{--tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50{--tw-gradient-from: #faf5ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-50\/80{--tw-gradient-from: rgb(250 245 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500{--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-purple-500\/90{--tw-gradient-from: rgb(168 85 247 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-500{--tw-gradient-from: #ef4444 var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-600{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-50{--tw-gradient-from: #fff1f2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 241 242 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-500{--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-400{--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-50{--tw-gradient-from: #f0f9ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 249 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-sky-500{--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-100{--tw-gradient-from: #ccfbf1 var(--tw-gradient-from-position);--tw-gradient-to: rgb(204 251 241 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-500{--tw-gradient-from: #14b8a6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 184 166 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-400{--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from: #f5f3ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 243 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from: #8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-100{--tw-gradient-from: #fef9c3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 249 195 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-400{--tw-gradient-from: #facc15 var(--tw-gradient-from-position);--tw-gradient-to: rgb(250 204 21 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-50{--tw-gradient-from: #fefce8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 252 232 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-yellow-500{--tw-gradient-from: #eab308 var(--tw-gradient-from-position);--tw-gradient-to: rgb(234 179 8 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-blue-100{--tw-gradient-to: rgb(219 234 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #dbeafe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-blue-500{--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-cyan-400{--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-500{--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-300{--tw-gradient-to: rgb(209 213 219 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #d1d5db var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-gray-50{--tw-gradient-to: rgb(249 250 251 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f9fafb var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-green-50{--tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f0fdf4 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-orange-400{--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-500{--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-purple-600{--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #9333ea var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-red-500{--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-sky-100{--tw-gradient-to: rgb(224 242 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #e0f2fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-100{--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ede9fe var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-100{--tw-gradient-to: #fef3c7 var(--tw-gradient-to-position)}.to-amber-50{--tw-gradient-to: #fffbeb var(--tw-gradient-to-position)}.to-amber-500{--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.to-amber-600{--tw-gradient-to: #d97706 var(--tw-gradient-to-position)}.to-blue-100{--tw-gradient-to: #dbeafe var(--tw-gradient-to-position)}.to-blue-500{--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.to-blue-600{--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-cyan-500{--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to: #0891b2 var(--tw-gradient-to-position)}.to-emerald-100{--tw-gradient-to: #d1fae5 var(--tw-gradient-to-position)}.to-emerald-50{--tw-gradient-to: #ecfdf5 var(--tw-gradient-to-position)}.to-emerald-500{--tw-gradient-to: #10b981 var(--tw-gradient-to-position)}.to-emerald-600{--tw-gradient-to: #059669 var(--tw-gradient-to-position)}.to-fuchsia-100{--tw-gradient-to: #fae8ff var(--tw-gradient-to-position)}.to-fuchsia-500{--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.to-gray-100{--tw-gradient-to: #f3f4f6 var(--tw-gradient-to-position)}.to-gray-100\/90{--tw-gradient-to: rgb(243 244 246 / .9) var(--tw-gradient-to-position)}.to-gray-200{--tw-gradient-to: #e5e7eb var(--tw-gradient-to-position)}.to-gray-400{--tw-gradient-to: #9ca3af var(--tw-gradient-to-position)}.to-gray-50{--tw-gradient-to: #f9fafb var(--tw-gradient-to-position)}.to-gray-700{--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.to-green-100{--tw-gradient-to: #dcfce7 var(--tw-gradient-to-position)}.to-green-500{--tw-gradient-to: #22c55e var(--tw-gradient-to-position)}.to-green-600{--tw-gradient-to: #16a34a var(--tw-gradient-to-position)}.to-indigo-100{--tw-gradient-to: #e0e7ff var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to: #eef2ff var(--tw-gradient-to-position)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.to-indigo-500\/90{--tw-gradient-to: rgb(99 102 241 / .9) var(--tw-gradient-to-position)}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.to-orange-100{--tw-gradient-to: #ffedd5 var(--tw-gradient-to-position)}.to-orange-50{--tw-gradient-to: #fff7ed var(--tw-gradient-to-position)}.to-orange-500{--tw-gradient-to: #f97316 var(--tw-gradient-to-position)}.to-orange-600{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.to-pink-100{--tw-gradient-to: #fce7f3 var(--tw-gradient-to-position)}.to-pink-50{--tw-gradient-to: #fdf2f8 var(--tw-gradient-to-position)}.to-pink-500{--tw-gradient-to: #ec4899 var(--tw-gradient-to-position)}.to-pink-600{--tw-gradient-to: #db2777 var(--tw-gradient-to-position)}.to-purple-100{--tw-gradient-to: #f3e8ff var(--tw-gradient-to-position)}.to-purple-50{--tw-gradient-to: #faf5ff var(--tw-gradient-to-position)}.to-purple-50\/80{--tw-gradient-to: rgb(250 245 255 / .8) var(--tw-gradient-to-position)}.to-purple-500{--tw-gradient-to: #a855f7 var(--tw-gradient-to-position)}.to-purple-500\/20{--tw-gradient-to: rgb(168 85 247 / .2) var(--tw-gradient-to-position)}.to-purple-600{--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-red-50{--tw-gradient-to: #fef2f2 var(--tw-gradient-to-position)}.to-red-600{--tw-gradient-to: #dc2626 var(--tw-gradient-to-position)}.to-red-700{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.to-rose-600{--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.to-sky-100{--tw-gradient-to: #e0f2fe var(--tw-gradient-to-position)}.to-sky-600{--tw-gradient-to: #0284c7 var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.to-teal-50{--tw-gradient-to: #f0fdfa var(--tw-gradient-to-position)}.to-teal-500{--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.to-teal-600{--tw-gradient-to: #0d9488 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-yellow-100{--tw-gradient-to: #fef9c3 var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.to-yellow-500{--tw-gradient-to: #eab308 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-6{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-100{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.text-blue-200{--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-cyan-800{--tw-text-opacity: 1;color:rgb(21 94 117 / var(--tw-text-opacity, 1))}.text-cyan-900{--tw-text-opacity: 1;color:rgb(22 78 99 / var(--tw-text-opacity, 1))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-gray-950{--tw-text-opacity: 1;color:rgb(3 7 18 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-green-900{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-indigo-800{--tw-text-opacity: 1;color:rgb(55 48 163 / var(--tw-text-opacity, 1))}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-orange-700{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.text-orange-800{--tw-text-opacity: 1;color:rgb(154 52 18 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-500\/80{color:#a855f7cc}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.text-sky-700{--tw-text-opacity: 1;color:rgb(3 105 161 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-teal-700{--tw-text-opacity: 1;color:rgb(15 118 110 / var(--tw-text-opacity, 1))}.text-teal-800{--tw-text-opacity: 1;color:rgb(17 94 89 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-700{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.text-yellow-900{--tw-text-opacity: 1;color:rgb(113 63 18 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.mix-blend-overlay{mix-blend-mode:overlay}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(139\,92\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(139,92,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(148,163,184,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(16\,185\,129\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(16,185,129,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(56\,189\,248\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(56,189,248,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_24px_rgba\(59\,130\,246\,0\.18\)\]{--tw-shadow: 0 10px 24px rgba(59,130,246,.18);--tw-shadow-colored: 0 10px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-amber-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(254 243 199 / var(--tw-ring-opacity, 1))}.ring-black\/5{--tw-ring-color: rgb(0 0 0 / .05)}.ring-blue-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(219 234 254 / var(--tw-ring-opacity, 1))}.ring-emerald-100{--tw-ring-opacity: 1;--tw-ring-color: rgb(209 250 229 / var(--tw-ring-opacity, 1))}.ring-green-500\/20{--tw-ring-color: rgb(34 197 94 / .2)}.ring-purple-100\/80{--tw-ring-color: rgb(243 232 255 / .8)}.ring-red-500\/20{--tw-ring-color: rgb(239 68 68 / .2)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.8\)\]{--tw-drop-shadow: drop-shadow(0 1px 2px rgba(0,0,0,.8));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0_2px_4px_rgba\(0\,0\,0\,0\.9\)\]{--tw-drop-shadow: drop-shadow(0 2px 4px rgba(0,0,0,.9));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-md{--tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / .07)) drop-shadow(0 2px 2px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-sm{--tw-drop-shadow: drop-shadow(0 1px 1px rgb(0 0 0 / .05));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[username\:password\@\]{username:password@}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2)}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.glass-strong{background:var(--surface-color);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.card{background:var(--surface-color);border-radius:16px;border:1px solid rgba(255,255,255,.2);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative}.stat-card{background:linear-gradient(135deg,#fffffff2,#fffc);border-radius:20px;border:1px solid rgba(255,255,255,.3);padding:24px;position:relative;overflow:hidden;transition:all .3s ease}.btn-secondary{background:linear-gradient(135deg,#6b7280,#4b5563);color:#fff;box-shadow:0 10px 15px -3px #6b72804d,0 4px 6px -2px #6b72800d}.btn-secondary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #6b72804d,0 10px 10px -5px #6b72801a}.form-input{background:#fffffff2;border:2px solid rgba(255,255,255,.3);border-radius:12px;padding:8px 12px;font-size:14px;transition:all .2s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2}.table-container{background:#fffffff2;border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.table-row{transition:all .2s ease}.table-row:hover{background:#667eea0d;transform:scale(1.005)}.modal{background:#0009}.dark .modal{background:#000000bf}.modal-content{background:#fffffffa;border-radius:24px;border:1px solid rgba(255,255,255,.3);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d}.dark .modal-content{background:#111827f2;border:1px solid rgba(75,85,99,.3);box-shadow:0 10px 25px -5px #0000004d,0 0 0 1px #ffffff0d}@media (max-width: 640px){.glass,.glass-strong{margin:12px;border-radius:16px;padding:16px}.stat-card{padding:12px;border-radius:12px}.stat-icon{width:40px;height:40px;font-size:16px}.tab-btn{font-size:12px;padding:10px 6px}.modal-content{margin:8px;max-width:calc(100vw - 24px);padding:16px}.modal-scroll-content{max-height:calc(90vh - 100px)}.card{border-radius:12px}.form-input,.form-select,.form-textarea{font-size:14px;padding:8px 12px}.btn{font-size:14px;padding:8px 16px}.table-container table{font-size:12px}.table-container th,.table-container td{padding:8px 12px}.toast{min-width:280px;max-width:calc(100vw - 40px);right:12px;top:60px}.loading-spinner{width:16px;height:16px}}.animate-pulse{animation:pulse 2s infinite}.fa-openai{width:16px;height:16px;background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NDAgNjQwIj48IS0tIUZvbnQgQXdlc29tZSBGcmVlIHY3LjAuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLi0tPjxwYXRoIGQ9Ik0yNjAuNCAyNDkuOHYtNDguNmMwLTQuMSAxLjUtNy4yIDUuMS05LjJsOTcuOC01Ni4zYzEzLjMtNy43IDI5LjItMTEuMyA0NS42LTExLjMgNjEuNCAwIDEwMC40IDQ3LjYgMTAwLjQgOTguMyAwIDMuNiAwIDcuNy0uNSAxMS44bC0xMDEuNS01OS40Yy02LjEtMy42LTEyLjMtMy42LTE4LjQgMGwtMTI4LjUgNzQuN3ptMjI4LjMgMTg5LjRWMzIzYzAtNy4yLTMuMS0xMi4zLTkuMi0xNS45TDM1MSAyMzIuNGw0Mi0yNC4xYzMuNi0yIDYuNy0yIDEwLjIgMGw5Ny44IDU2LjRjMjguMiAxNi40IDQ3LjEgNTEuMiA0Ny4xIDg1IDAgMzguOS0yMyA3NC44LTU5LjQgODkuNnpNMjMwLjIgMzM2LjhsLTQyLTI0LjZjLTMuNi0yLTUuMS01LjEtNS4xLTkuMlYxOTAuNGMwLTU0LjggNDItOTYuMyA5OC44LTk2LjMgMjEuNSAwIDQxLjUgNy4yIDU4LjQgMjBsLTEwMC45IDU4LjRjLTYuMSAzLjYtOS4yIDguNy05LjIgMTUuOXYxNDguNXptOTAuNCA1Mi4ybC02MC4yLTMzLjh2LTcxLjdsNjAuMi0zMy44IDYwLjIgMzMuOHY3MS43TDMyMC42IDM4OXptMzguNyAxNTUuN2MtMjEuNSAwLTQxLjUtNy4yLTU4LjQtMjBsMTAwLjktNTguNGM2LjEtMy42IDkuMi04LjcgOS4yLTE1LjlWMzAxLjlsNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMnYxMTIuNmMwIDU0LjgtNDIuNSA5Ni4zLTk5LjMgOTYuM3pNMjM3LjggNDMwLjVsLTk3LjctNTYuM0MxMTEuOSAzNTcuOCA5MyAzMjMgOTMgMjg5LjJjMC0zOS40IDIzLjYtNzQuOCA1OS45LTg5LjZ2MTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xLjUtOC4yIDEtMTIuM2wxMDAuOSA1OC40YzYuMSAzLjYgMTIuMyAzLjYgMTguNCAwbDEyOC41LTc0LjJ2NDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM3ptMTI3IDYwLjljNjIgMCAxMTMuNy00NCAxMjUuNC0xMDIuNCA1Ny4zLTE0LjkgOTQuMi02OC42IDk0LjItMTIzLjQgMC0zNS44LTE1LjQtNzAuNy00My05NS43IDIuNi0xMC44IDQuMS0yMS41IDQuMS0zMi4zIDAtNzMuMi01OS40LTEyOC0xMjgtMTI4LTEzLjggMC0yNy4xIDItNDAuNCA2LjctMjMtMjIuNS01NC44LTM2LjktODkuNi0zNi45LTYyIDAtMTEzLjcgNDQtMTI1LjQgMTAyLjQtNTcuMyAxNC44LTk0LjIgNjguNi05NC4yIDEyMy40IDAgMzUuOCAxNS40IDcwLjcgNDMgOTUuNy0yLjYgMTAuOC00LjEgMjEuNS00LjEgMzIuMyAwIDczLjIgNTkuNCAxMjggMTI4IDEyOCAxMy44IDAgMjcuMS0yIDQwLjQtNi43IDIzIDIyLjUgNTQuOCAzNi45IDg5LjYgMzYuOXoiLz48L3N2Zz4=) no-repeat center/100%}/*!
- * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com
- * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
- * Copyright 2024 Fonticons, Inc.
- */.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style, 900)}.fas,.far,.fab,.fa-solid,.fa-regular,.fa-brands,.fa{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display, inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fas:before,.far:before,.fab:before,.fa-solid:before,.fa-regular:before,.fa-brands:before,.fa:before{content:var(--fa)}.fa-classic,.fas,.fa-solid,.far,.fa-regular{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin, 2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(-1 * var(--fa-li-width, 2em));position:absolute;text-align:center;width:var(--fa-li-width, 2em);line-height:inherit}.fa-border{border-color:var(--fa-border-color, #eee);border-radius:var(--fa-border-radius, .1em);border-style:var(--fa-border-style, solid);border-width:var(--fa-border-width, .08em);padding:var(--fa-border-padding, .2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin, .3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin, .3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.28, .84, .42, 1))}.fa-fade{animation-name:fa-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-beat-fade{animation-name:fa-beat-fade;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, cubic-bezier(.4, 0, .6, 1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, ease-in-out)}.fa-shake{animation-name:fa-shake;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, linear)}.fa-spin-reverse{--fa-animation-direction: reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction, normal);animation-duration:var(--fa-animation-duration, 1s);animation-iteration-count:var(--fa-animation-iteration-count, infinite);animation-timing-function:var(--fa-animation-timing, steps(8))}@media (prefers-reduced-motion: reduce){.fa-beat,.fa-bounce,.fa-fade,.fa-beat-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale, 1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x, 1.1),var(--fa-bounce-start-scale-y, .9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x, .9),var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x, 1.05),var(--fa-bounce-land-scale-y, .95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound, -.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity, .4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity, .4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale, 1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x, 0),var(--fa-flip-y, 1),var(--fa-flip-z, 0),var(--fa-flip-angle, -180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0)}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle, 0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index, auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse, #fff)}.fa-0{--fa: "0"}.fa-1{--fa: "1"}.fa-2{--fa: "2"}.fa-3{--fa: "3"}.fa-4{--fa: "4"}.fa-5{--fa: "5"}.fa-6{--fa: "6"}.fa-7{--fa: "7"}.fa-8{--fa: "8"}.fa-9{--fa: "9"}.fa-fill-drip{--fa: ""}.fa-arrows-to-circle{--fa: ""}.fa-circle-chevron-right,.fa-chevron-circle-right{--fa: ""}.fa-at{--fa: "@"}.fa-trash-can,.fa-trash-alt{--fa: ""}.fa-text-height{--fa: ""}.fa-user-xmark,.fa-user-times{--fa: ""}.fa-stethoscope{--fa: ""}.fa-message,.fa-comment-alt{--fa: ""}.fa-info{--fa: ""}.fa-down-left-and-up-right-to-center,.fa-compress-alt{--fa: ""}.fa-explosion{--fa: ""}.fa-file-lines,.fa-file-alt,.fa-file-text{--fa: ""}.fa-wave-square{--fa: ""}.fa-ring{--fa: ""}.fa-building-un{--fa: ""}.fa-dice-three{--fa: ""}.fa-calendar-days,.fa-calendar-alt{--fa: ""}.fa-anchor-circle-check{--fa: ""}.fa-building-circle-arrow-right{--fa: ""}.fa-volleyball,.fa-volleyball-ball{--fa: ""}.fa-arrows-up-to-line{--fa: ""}.fa-sort-down,.fa-sort-desc{--fa: ""}.fa-circle-minus,.fa-minus-circle{--fa: ""}.fa-door-open{--fa: ""}.fa-right-from-bracket,.fa-sign-out-alt{--fa: ""}.fa-atom{--fa: ""}.fa-soap{--fa: ""}.fa-icons,.fa-heart-music-camera-bolt{--fa: ""}.fa-microphone-lines-slash,.fa-microphone-alt-slash{--fa: ""}.fa-bridge-circle-check{--fa: ""}.fa-pump-medical{--fa: ""}.fa-fingerprint{--fa: ""}.fa-hand-point-right{--fa: ""}.fa-magnifying-glass-location,.fa-search-location{--fa: ""}.fa-forward-step,.fa-step-forward{--fa: ""}.fa-face-smile-beam,.fa-smile-beam{--fa: ""}.fa-flag-checkered{--fa: ""}.fa-football,.fa-football-ball{--fa: ""}.fa-school-circle-exclamation{--fa: ""}.fa-crop{--fa: ""}.fa-angles-down,.fa-angle-double-down{--fa: ""}.fa-users-rectangle{--fa: ""}.fa-people-roof{--fa: ""}.fa-people-line{--fa: ""}.fa-beer-mug-empty,.fa-beer{--fa: ""}.fa-diagram-predecessor{--fa: ""}.fa-arrow-up-long,.fa-long-arrow-up{--fa: ""}.fa-fire-flame-simple,.fa-burn{--fa: ""}.fa-person,.fa-male{--fa: ""}.fa-laptop{--fa: ""}.fa-file-csv{--fa: ""}.fa-menorah{--fa: ""}.fa-truck-plane{--fa: ""}.fa-record-vinyl{--fa: ""}.fa-face-grin-stars,.fa-grin-stars{--fa: ""}.fa-bong{--fa: ""}.fa-spaghetti-monster-flying,.fa-pastafarianism{--fa: ""}.fa-arrow-down-up-across-line{--fa: ""}.fa-spoon,.fa-utensil-spoon{--fa: ""}.fa-jar-wheat{--fa: ""}.fa-envelopes-bulk,.fa-mail-bulk{--fa: ""}.fa-file-circle-exclamation{--fa: ""}.fa-circle-h,.fa-hospital-symbol{--fa: ""}.fa-pager{--fa: ""}.fa-address-book,.fa-contact-book{--fa: ""}.fa-strikethrough{--fa: ""}.fa-k{--fa: "K"}.fa-landmark-flag{--fa: ""}.fa-pencil,.fa-pencil-alt{--fa: ""}.fa-backward{--fa: ""}.fa-caret-right{--fa: ""}.fa-comments{--fa: ""}.fa-paste,.fa-file-clipboard{--fa: ""}.fa-code-pull-request{--fa: ""}.fa-clipboard-list{--fa: ""}.fa-truck-ramp-box,.fa-truck-loading{--fa: ""}.fa-user-check{--fa: ""}.fa-vial-virus{--fa: ""}.fa-sheet-plastic{--fa: ""}.fa-blog{--fa: ""}.fa-user-ninja{--fa: ""}.fa-person-arrow-up-from-line{--fa: ""}.fa-scroll-torah,.fa-torah{--fa: ""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa: ""}.fa-toggle-off{--fa: ""}.fa-box-archive,.fa-archive{--fa: ""}.fa-person-drowning{--fa: ""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa: ""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa: ""}.fa-spray-can{--fa: ""}.fa-truck-monster{--fa: ""}.fa-w{--fa: "W"}.fa-earth-africa,.fa-globe-africa{--fa: ""}.fa-rainbow{--fa: ""}.fa-circle-notch{--fa: ""}.fa-tablet-screen-button,.fa-tablet-alt{--fa: ""}.fa-paw{--fa: ""}.fa-cloud{--fa: ""}.fa-trowel-bricks{--fa: ""}.fa-face-flushed,.fa-flushed{--fa: ""}.fa-hospital-user{--fa: ""}.fa-tent-arrow-left-right{--fa: ""}.fa-gavel,.fa-legal{--fa: ""}.fa-binoculars{--fa: ""}.fa-microphone-slash{--fa: ""}.fa-box-tissue{--fa: ""}.fa-motorcycle{--fa: ""}.fa-bell-concierge,.fa-concierge-bell{--fa: ""}.fa-pen-ruler,.fa-pencil-ruler{--fa: ""}.fa-people-arrows,.fa-people-arrows-left-right{--fa: ""}.fa-mars-and-venus-burst{--fa: ""}.fa-square-caret-right,.fa-caret-square-right{--fa: ""}.fa-scissors,.fa-cut{--fa: ""}.fa-sun-plant-wilt{--fa: ""}.fa-toilets-portable{--fa: ""}.fa-hockey-puck{--fa: ""}.fa-table{--fa: ""}.fa-magnifying-glass-arrow-right{--fa: ""}.fa-tachograph-digital,.fa-digital-tachograph{--fa: ""}.fa-users-slash{--fa: ""}.fa-clover{--fa: ""}.fa-reply,.fa-mail-reply{--fa: ""}.fa-star-and-crescent{--fa: ""}.fa-house-fire{--fa: ""}.fa-square-minus,.fa-minus-square{--fa: ""}.fa-helicopter{--fa: ""}.fa-compass{--fa: ""}.fa-square-caret-down,.fa-caret-square-down{--fa: ""}.fa-file-circle-question{--fa: ""}.fa-laptop-code{--fa: ""}.fa-swatchbook{--fa: ""}.fa-prescription-bottle{--fa: ""}.fa-bars,.fa-navicon{--fa: ""}.fa-people-group{--fa: ""}.fa-hourglass-end,.fa-hourglass-3{--fa: ""}.fa-heart-crack,.fa-heart-broken{--fa: ""}.fa-square-up-right,.fa-external-link-square-alt{--fa: ""}.fa-face-kiss-beam,.fa-kiss-beam{--fa: ""}.fa-film{--fa: ""}.fa-ruler-horizontal{--fa: ""}.fa-people-robbery{--fa: ""}.fa-lightbulb{--fa: ""}.fa-caret-left{--fa: ""}.fa-circle-exclamation,.fa-exclamation-circle{--fa: ""}.fa-school-circle-xmark{--fa: ""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa: ""}.fa-circle-chevron-down,.fa-chevron-circle-down{--fa: ""}.fa-unlock-keyhole,.fa-unlock-alt{--fa: ""}.fa-cloud-showers-heavy{--fa: ""}.fa-headphones-simple,.fa-headphones-alt{--fa: ""}.fa-sitemap{--fa: ""}.fa-circle-dollar-to-slot,.fa-donate{--fa: ""}.fa-memory{--fa: ""}.fa-road-spikes{--fa: ""}.fa-fire-burner{--fa: ""}.fa-flag{--fa: ""}.fa-hanukiah{--fa: ""}.fa-feather{--fa: ""}.fa-volume-low,.fa-volume-down{--fa: ""}.fa-comment-slash{--fa: ""}.fa-cloud-sun-rain{--fa: ""}.fa-compress{--fa: ""}.fa-wheat-awn,.fa-wheat-alt{--fa: ""}.fa-ankh{--fa: ""}.fa-hands-holding-child{--fa: ""}.fa-asterisk{--fa: "*"}.fa-square-check,.fa-check-square{--fa: ""}.fa-peseta-sign{--fa: ""}.fa-heading,.fa-header{--fa: ""}.fa-ghost{--fa: ""}.fa-list,.fa-list-squares{--fa: ""}.fa-square-phone-flip,.fa-phone-square-alt{--fa: ""}.fa-cart-plus{--fa: ""}.fa-gamepad{--fa: ""}.fa-circle-dot,.fa-dot-circle{--fa: ""}.fa-face-dizzy,.fa-dizzy{--fa: ""}.fa-egg{--fa: ""}.fa-house-medical-circle-xmark{--fa: ""}.fa-campground{--fa: ""}.fa-folder-plus{--fa: ""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa: ""}.fa-paintbrush,.fa-paint-brush{--fa: ""}.fa-lock{--fa: ""}.fa-gas-pump{--fa: ""}.fa-hot-tub-person,.fa-hot-tub{--fa: ""}.fa-map-location,.fa-map-marked{--fa: ""}.fa-house-flood-water{--fa: ""}.fa-tree{--fa: ""}.fa-bridge-lock{--fa: ""}.fa-sack-dollar{--fa: ""}.fa-pen-to-square,.fa-edit{--fa: ""}.fa-car-side{--fa: ""}.fa-share-nodes,.fa-share-alt{--fa: ""}.fa-heart-circle-minus{--fa: ""}.fa-hourglass-half,.fa-hourglass-2{--fa: ""}.fa-microscope{--fa: ""}.fa-sink{--fa: ""}.fa-bag-shopping,.fa-shopping-bag{--fa: ""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa: ""}.fa-mitten{--fa: ""}.fa-person-rays{--fa: ""}.fa-users{--fa: ""}.fa-eye-slash{--fa: ""}.fa-flask-vial{--fa: ""}.fa-hand,.fa-hand-paper{--fa: ""}.fa-om{--fa: ""}.fa-worm{--fa: ""}.fa-house-circle-xmark{--fa: ""}.fa-plug{--fa: ""}.fa-chevron-up{--fa: ""}.fa-hand-spock{--fa: ""}.fa-stopwatch{--fa: ""}.fa-face-kiss,.fa-kiss{--fa: ""}.fa-bridge-circle-xmark{--fa: ""}.fa-face-grin-tongue,.fa-grin-tongue{--fa: ""}.fa-chess-bishop{--fa: ""}.fa-face-grin-wink,.fa-grin-wink{--fa: ""}.fa-ear-deaf,.fa-deaf,.fa-deafness,.fa-hard-of-hearing{--fa: ""}.fa-road-circle-check{--fa: ""}.fa-dice-five{--fa: ""}.fa-square-rss,.fa-rss-square{--fa: ""}.fa-land-mine-on{--fa: ""}.fa-i-cursor{--fa: ""}.fa-stamp{--fa: ""}.fa-stairs{--fa: ""}.fa-i{--fa: "I"}.fa-hryvnia-sign,.fa-hryvnia{--fa: ""}.fa-pills{--fa: ""}.fa-face-grin-wide,.fa-grin-alt{--fa: ""}.fa-tooth{--fa: ""}.fa-v{--fa: "V"}.fa-bangladeshi-taka-sign{--fa: ""}.fa-bicycle{--fa: ""}.fa-staff-snake,.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius{--fa: ""}.fa-head-side-cough-slash{--fa: ""}.fa-truck-medical,.fa-ambulance{--fa: ""}.fa-wheat-awn-circle-exclamation{--fa: ""}.fa-snowman{--fa: ""}.fa-mortar-pestle{--fa: ""}.fa-road-barrier{--fa: ""}.fa-school{--fa: ""}.fa-igloo{--fa: ""}.fa-joint{--fa: ""}.fa-angle-right{--fa: ""}.fa-horse{--fa: ""}.fa-q{--fa: "Q"}.fa-g{--fa: "G"}.fa-notes-medical{--fa: ""}.fa-temperature-half,.fa-temperature-2,.fa-thermometer-2,.fa-thermometer-half{--fa: ""}.fa-dong-sign{--fa: ""}.fa-capsules{--fa: ""}.fa-poo-storm,.fa-poo-bolt{--fa: ""}.fa-face-frown-open,.fa-frown-open{--fa: ""}.fa-hand-point-up{--fa: ""}.fa-money-bill{--fa: ""}.fa-bookmark{--fa: ""}.fa-align-justify{--fa: ""}.fa-umbrella-beach{--fa: ""}.fa-helmet-un{--fa: ""}.fa-bullseye{--fa: ""}.fa-bacon{--fa: ""}.fa-hand-point-down{--fa: ""}.fa-arrow-up-from-bracket{--fa: ""}.fa-folder,.fa-folder-blank{--fa: ""}.fa-file-waveform,.fa-file-medical-alt{--fa: ""}.fa-radiation{--fa: ""}.fa-chart-simple{--fa: ""}.fa-mars-stroke{--fa: ""}.fa-vial{--fa: ""}.fa-gauge,.fa-dashboard,.fa-gauge-med,.fa-tachometer-alt-average{--fa: ""}.fa-wand-magic-sparkles,.fa-magic-wand-sparkles{--fa: ""}.fa-e{--fa: "E"}.fa-pen-clip,.fa-pen-alt{--fa: ""}.fa-bridge-circle-exclamation{--fa: ""}.fa-user{--fa: ""}.fa-school-circle-check{--fa: ""}.fa-dumpster{--fa: ""}.fa-van-shuttle,.fa-shuttle-van{--fa: ""}.fa-building-user{--fa: ""}.fa-square-caret-left,.fa-caret-square-left{--fa: ""}.fa-highlighter{--fa: ""}.fa-key{--fa: ""}.fa-bullhorn{--fa: ""}.fa-globe{--fa: ""}.fa-synagogue{--fa: ""}.fa-person-half-dress{--fa: ""}.fa-road-bridge{--fa: ""}.fa-location-arrow{--fa: ""}.fa-c{--fa: "C"}.fa-tablet-button{--fa: ""}.fa-building-lock{--fa: ""}.fa-pizza-slice{--fa: ""}.fa-money-bill-wave{--fa: ""}.fa-chart-area,.fa-area-chart{--fa: ""}.fa-house-flag{--fa: ""}.fa-person-circle-minus{--fa: ""}.fa-ban,.fa-cancel{--fa: ""}.fa-camera-rotate{--fa: ""}.fa-spray-can-sparkles,.fa-air-freshener{--fa: ""}.fa-star{--fa: ""}.fa-repeat{--fa: ""}.fa-cross{--fa: ""}.fa-box{--fa: ""}.fa-venus-mars{--fa: ""}.fa-arrow-pointer,.fa-mouse-pointer{--fa: ""}.fa-maximize,.fa-expand-arrows-alt{--fa: ""}.fa-charging-station{--fa: ""}.fa-shapes,.fa-triangle-circle-square{--fa: ""}.fa-shuffle,.fa-random{--fa: ""}.fa-person-running,.fa-running{--fa: ""}.fa-mobile-retro{--fa: ""}.fa-grip-lines-vertical{--fa: ""}.fa-spider{--fa: ""}.fa-hands-bound{--fa: ""}.fa-file-invoice-dollar{--fa: ""}.fa-plane-circle-exclamation{--fa: ""}.fa-x-ray{--fa: ""}.fa-spell-check{--fa: ""}.fa-slash{--fa: ""}.fa-computer-mouse,.fa-mouse{--fa: ""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa: ""}.fa-shop-slash,.fa-store-alt-slash{--fa: ""}.fa-server{--fa: ""}.fa-virus-covid-slash{--fa: ""}.fa-shop-lock{--fa: ""}.fa-hourglass-start,.fa-hourglass-1{--fa: ""}.fa-blender-phone{--fa: ""}.fa-building-wheat{--fa: ""}.fa-person-breastfeeding{--fa: ""}.fa-right-to-bracket,.fa-sign-in-alt{--fa: ""}.fa-venus{--fa: ""}.fa-passport{--fa: ""}.fa-thumbtack-slash,.fa-thumb-tack-slash{--fa: ""}.fa-heart-pulse,.fa-heartbeat{--fa: ""}.fa-people-carry-box,.fa-people-carry{--fa: ""}.fa-temperature-high{--fa: ""}.fa-microchip{--fa: ""}.fa-crown{--fa: ""}.fa-weight-hanging{--fa: ""}.fa-xmarks-lines{--fa: ""}.fa-file-prescription{--fa: ""}.fa-weight-scale,.fa-weight{--fa: ""}.fa-user-group,.fa-user-friends{--fa: ""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa: ""}.fa-chess-knight{--fa: ""}.fa-face-laugh-squint,.fa-laugh-squint{--fa: ""}.fa-wheelchair{--fa: ""}.fa-circle-arrow-up,.fa-arrow-circle-up{--fa: ""}.fa-toggle-on{--fa: ""}.fa-person-walking,.fa-walking{--fa: ""}.fa-l{--fa: "L"}.fa-fire{--fa: ""}.fa-bed-pulse,.fa-procedures{--fa: ""}.fa-shuttle-space,.fa-space-shuttle{--fa: ""}.fa-face-laugh,.fa-laugh{--fa: ""}.fa-folder-open{--fa: ""}.fa-heart-circle-plus{--fa: ""}.fa-code-fork{--fa: ""}.fa-city{--fa: ""}.fa-microphone-lines,.fa-microphone-alt{--fa: ""}.fa-pepper-hot{--fa: ""}.fa-unlock{--fa: ""}.fa-colon-sign{--fa: ""}.fa-headset{--fa: ""}.fa-store-slash{--fa: ""}.fa-road-circle-xmark{--fa: ""}.fa-user-minus{--fa: ""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa: ""}.fa-champagne-glasses,.fa-glass-cheers{--fa: ""}.fa-clipboard{--fa: ""}.fa-house-circle-exclamation{--fa: ""}.fa-file-arrow-up,.fa-file-upload{--fa: ""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa: ""}.fa-bath,.fa-bathtub{--fa: ""}.fa-underline{--fa: ""}.fa-user-pen,.fa-user-edit{--fa: ""}.fa-signature{--fa: ""}.fa-stroopwafel{--fa: ""}.fa-bold{--fa: ""}.fa-anchor-lock{--fa: ""}.fa-building-ngo{--fa: ""}.fa-manat-sign{--fa: ""}.fa-not-equal{--fa: ""}.fa-border-top-left,.fa-border-style{--fa: ""}.fa-map-location-dot,.fa-map-marked-alt{--fa: ""}.fa-jedi{--fa: ""}.fa-square-poll-vertical,.fa-poll{--fa: ""}.fa-mug-hot{--fa: ""}.fa-car-battery,.fa-battery-car{--fa: ""}.fa-gift{--fa: ""}.fa-dice-two{--fa: ""}.fa-chess-queen{--fa: ""}.fa-glasses{--fa: ""}.fa-chess-board{--fa: ""}.fa-building-circle-check{--fa: ""}.fa-person-chalkboard{--fa: ""}.fa-mars-stroke-right,.fa-mars-stroke-h{--fa: ""}.fa-hand-back-fist,.fa-hand-rock{--fa: ""}.fa-square-caret-up,.fa-caret-square-up{--fa: ""}.fa-cloud-showers-water{--fa: ""}.fa-chart-bar,.fa-bar-chart{--fa: ""}.fa-hands-bubbles,.fa-hands-wash{--fa: ""}.fa-less-than-equal{--fa: ""}.fa-train{--fa: ""}.fa-eye-low-vision,.fa-low-vision{--fa: ""}.fa-crow{--fa: ""}.fa-sailboat{--fa: ""}.fa-window-restore{--fa: ""}.fa-square-plus,.fa-plus-square{--fa: ""}.fa-torii-gate{--fa: ""}.fa-frog{--fa: ""}.fa-bucket{--fa: ""}.fa-image{--fa: ""}.fa-microphone{--fa: ""}.fa-cow{--fa: ""}.fa-caret-up{--fa: ""}.fa-screwdriver{--fa: ""}.fa-folder-closed{--fa: ""}.fa-house-tsunami{--fa: ""}.fa-square-nfi{--fa: ""}.fa-arrow-up-from-ground-water{--fa: ""}.fa-martini-glass,.fa-glass-martini-alt{--fa: ""}.fa-square-binary{--fa: ""}.fa-rotate-left,.fa-rotate-back,.fa-rotate-backward,.fa-undo-alt{--fa: ""}.fa-table-columns,.fa-columns{--fa: ""}.fa-lemon{--fa: ""}.fa-head-side-mask{--fa: ""}.fa-handshake{--fa: ""}.fa-gem{--fa: ""}.fa-dolly,.fa-dolly-box{--fa: ""}.fa-smoking{--fa: ""}.fa-minimize,.fa-compress-arrows-alt{--fa: ""}.fa-monument{--fa: ""}.fa-snowplow{--fa: ""}.fa-angles-right,.fa-angle-double-right{--fa: ""}.fa-cannabis{--fa: ""}.fa-circle-play,.fa-play-circle{--fa: ""}.fa-tablets{--fa: ""}.fa-ethernet{--fa: ""}.fa-euro-sign,.fa-eur,.fa-euro{--fa: ""}.fa-chair{--fa: ""}.fa-circle-check,.fa-check-circle{--fa: ""}.fa-circle-stop,.fa-stop-circle{--fa: ""}.fa-compass-drafting,.fa-drafting-compass{--fa: ""}.fa-plate-wheat{--fa: ""}.fa-icicles{--fa: ""}.fa-person-shelter{--fa: ""}.fa-neuter{--fa: ""}.fa-id-badge{--fa: ""}.fa-marker{--fa: ""}.fa-face-laugh-beam,.fa-laugh-beam{--fa: ""}.fa-helicopter-symbol{--fa: ""}.fa-universal-access{--fa: ""}.fa-circle-chevron-up,.fa-chevron-circle-up{--fa: ""}.fa-lari-sign{--fa: ""}.fa-volcano{--fa: ""}.fa-person-walking-dashed-line-arrow-right{--fa: ""}.fa-sterling-sign,.fa-gbp,.fa-pound-sign{--fa: ""}.fa-viruses{--fa: ""}.fa-square-person-confined{--fa: ""}.fa-user-tie{--fa: ""}.fa-arrow-down-long,.fa-long-arrow-down{--fa: ""}.fa-tent-arrow-down-to-line{--fa: ""}.fa-certificate{--fa: ""}.fa-reply-all,.fa-mail-reply-all{--fa: ""}.fa-suitcase{--fa: ""}.fa-person-skating,.fa-skating{--fa: ""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa: ""}.fa-camera-retro{--fa: ""}.fa-circle-arrow-down,.fa-arrow-circle-down{--fa: ""}.fa-file-import,.fa-arrow-right-to-file{--fa: ""}.fa-square-arrow-up-right,.fa-external-link-square{--fa: ""}.fa-box-open{--fa: ""}.fa-scroll{--fa: ""}.fa-spa{--fa: ""}.fa-location-pin-lock{--fa: ""}.fa-pause{--fa: ""}.fa-hill-avalanche{--fa: ""}.fa-temperature-empty,.fa-temperature-0,.fa-thermometer-0,.fa-thermometer-empty{--fa: ""}.fa-bomb{--fa: ""}.fa-registered{--fa: ""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa: ""}.fa-scale-unbalanced-flip,.fa-balance-scale-right{--fa: ""}.fa-subscript{--fa: ""}.fa-diamond-turn-right,.fa-directions{--fa: ""}.fa-burst{--fa: ""}.fa-house-laptop,.fa-laptop-house{--fa: ""}.fa-face-tired,.fa-tired{--fa: ""}.fa-money-bills{--fa: ""}.fa-smog{--fa: ""}.fa-crutch{--fa: ""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa: ""}.fa-palette{--fa: ""}.fa-arrows-turn-right{--fa: ""}.fa-vest{--fa: ""}.fa-ferry{--fa: ""}.fa-arrows-down-to-people{--fa: ""}.fa-seedling,.fa-sprout{--fa: ""}.fa-left-right,.fa-arrows-alt-h{--fa: ""}.fa-boxes-packing{--fa: ""}.fa-circle-arrow-left,.fa-arrow-circle-left{--fa: ""}.fa-group-arrows-rotate{--fa: ""}.fa-bowl-food{--fa: ""}.fa-candy-cane{--fa: ""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa: ""}.fa-cloud-bolt,.fa-thunderstorm{--fa: ""}.fa-text-slash,.fa-remove-format{--fa: ""}.fa-face-smile-wink,.fa-smile-wink{--fa: ""}.fa-file-word{--fa: ""}.fa-file-powerpoint{--fa: ""}.fa-arrows-left-right,.fa-arrows-h{--fa: ""}.fa-house-lock{--fa: ""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa: ""}.fa-children{--fa: ""}.fa-chalkboard,.fa-blackboard{--fa: ""}.fa-user-large-slash,.fa-user-alt-slash{--fa: ""}.fa-envelope-open{--fa: ""}.fa-handshake-simple-slash,.fa-handshake-alt-slash{--fa: ""}.fa-mattress-pillow{--fa: ""}.fa-guarani-sign{--fa: ""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa: ""}.fa-fire-extinguisher{--fa: ""}.fa-cruzeiro-sign{--fa: ""}.fa-greater-than-equal{--fa: ""}.fa-shield-halved,.fa-shield-alt{--fa: ""}.fa-book-atlas,.fa-atlas{--fa: ""}.fa-virus{--fa: ""}.fa-envelope-circle-check{--fa: ""}.fa-layer-group{--fa: ""}.fa-arrows-to-dot{--fa: ""}.fa-archway{--fa: ""}.fa-heart-circle-check{--fa: ""}.fa-house-chimney-crack,.fa-house-damage{--fa: ""}.fa-file-zipper,.fa-file-archive{--fa: ""}.fa-square{--fa: ""}.fa-martini-glass-empty,.fa-glass-martini{--fa: ""}.fa-couch{--fa: ""}.fa-cedi-sign{--fa: ""}.fa-italic{--fa: ""}.fa-table-cells-column-lock{--fa: ""}.fa-church{--fa: ""}.fa-comments-dollar{--fa: ""}.fa-democrat{--fa: ""}.fa-z{--fa: "Z"}.fa-person-skiing,.fa-skiing{--fa: ""}.fa-road-lock{--fa: ""}.fa-a{--fa: "A"}.fa-temperature-arrow-down,.fa-temperature-down{--fa: ""}.fa-feather-pointed,.fa-feather-alt{--fa: ""}.fa-p{--fa: "P"}.fa-snowflake{--fa: ""}.fa-newspaper{--fa: ""}.fa-rectangle-ad,.fa-ad{--fa: ""}.fa-circle-arrow-right,.fa-arrow-circle-right{--fa: ""}.fa-filter-circle-xmark{--fa: ""}.fa-locust{--fa: ""}.fa-sort,.fa-unsorted{--fa: ""}.fa-list-ol,.fa-list-1-2,.fa-list-numeric{--fa: ""}.fa-person-dress-burst{--fa: ""}.fa-money-check-dollar,.fa-money-check-alt{--fa: ""}.fa-vector-square{--fa: ""}.fa-bread-slice{--fa: ""}.fa-language{--fa: ""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa: ""}.fa-filter{--fa: ""}.fa-question{--fa: "?"}.fa-file-signature{--fa: ""}.fa-up-down-left-right,.fa-arrows-alt{--fa: ""}.fa-house-chimney-user{--fa: ""}.fa-hand-holding-heart{--fa: ""}.fa-puzzle-piece{--fa: ""}.fa-money-check{--fa: ""}.fa-star-half-stroke,.fa-star-half-alt{--fa: ""}.fa-code{--fa: ""}.fa-whiskey-glass,.fa-glass-whiskey{--fa: ""}.fa-building-circle-exclamation{--fa: ""}.fa-magnifying-glass-chart{--fa: ""}.fa-arrow-up-right-from-square,.fa-external-link{--fa: ""}.fa-cubes-stacked{--fa: ""}.fa-won-sign,.fa-krw,.fa-won{--fa: ""}.fa-virus-covid{--fa: ""}.fa-austral-sign{--fa: ""}.fa-f{--fa: "F"}.fa-leaf{--fa: ""}.fa-road{--fa: ""}.fa-taxi,.fa-cab{--fa: ""}.fa-person-circle-plus{--fa: ""}.fa-chart-pie,.fa-pie-chart{--fa: ""}.fa-bolt-lightning{--fa: ""}.fa-sack-xmark{--fa: ""}.fa-file-excel{--fa: ""}.fa-file-contract{--fa: ""}.fa-fish-fins{--fa: ""}.fa-building-flag{--fa: ""}.fa-face-grin-beam,.fa-grin-beam{--fa: ""}.fa-object-ungroup{--fa: ""}.fa-poop{--fa: ""}.fa-location-pin,.fa-map-marker{--fa: ""}.fa-kaaba{--fa: ""}.fa-toilet-paper{--fa: ""}.fa-helmet-safety,.fa-hard-hat,.fa-hat-hard{--fa: ""}.fa-eject{--fa: ""}.fa-circle-right,.fa-arrow-alt-circle-right{--fa: ""}.fa-plane-circle-check{--fa: ""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa: ""}.fa-object-group{--fa: ""}.fa-chart-line,.fa-line-chart{--fa: ""}.fa-mask-ventilator{--fa: ""}.fa-arrow-right{--fa: ""}.fa-signs-post,.fa-map-signs{--fa: ""}.fa-cash-register{--fa: ""}.fa-person-circle-question{--fa: ""}.fa-h{--fa: "H"}.fa-tarp{--fa: ""}.fa-screwdriver-wrench,.fa-tools{--fa: ""}.fa-arrows-to-eye{--fa: ""}.fa-plug-circle-bolt{--fa: ""}.fa-heart{--fa: ""}.fa-mars-and-venus{--fa: ""}.fa-house-user,.fa-home-user{--fa: ""}.fa-dumpster-fire{--fa: ""}.fa-house-crack{--fa: ""}.fa-martini-glass-citrus,.fa-cocktail{--fa: ""}.fa-face-surprise,.fa-surprise{--fa: ""}.fa-bottle-water{--fa: ""}.fa-circle-pause,.fa-pause-circle{--fa: ""}.fa-toilet-paper-slash{--fa: ""}.fa-apple-whole,.fa-apple-alt{--fa: ""}.fa-kitchen-set{--fa: ""}.fa-r{--fa: "R"}.fa-temperature-quarter,.fa-temperature-1,.fa-thermometer-1,.fa-thermometer-quarter{--fa: ""}.fa-cube{--fa: ""}.fa-bitcoin-sign{--fa: ""}.fa-shield-dog{--fa: ""}.fa-solar-panel{--fa: ""}.fa-lock-open{--fa: ""}.fa-elevator{--fa: ""}.fa-money-bill-transfer{--fa: ""}.fa-money-bill-trend-up{--fa: ""}.fa-house-flood-water-circle-arrow-right{--fa: ""}.fa-square-poll-horizontal,.fa-poll-h{--fa: ""}.fa-circle{--fa: ""}.fa-backward-fast,.fa-fast-backward{--fa: ""}.fa-recycle{--fa: ""}.fa-user-astronaut{--fa: ""}.fa-plane-slash{--fa: ""}.fa-trademark{--fa: ""}.fa-basketball,.fa-basketball-ball{--fa: ""}.fa-satellite-dish{--fa: ""}.fa-circle-up,.fa-arrow-alt-circle-up{--fa: ""}.fa-mobile-screen-button,.fa-mobile-alt{--fa: ""}.fa-volume-high,.fa-volume-up{--fa: ""}.fa-users-rays{--fa: ""}.fa-wallet{--fa: ""}.fa-clipboard-check{--fa: ""}.fa-file-audio{--fa: ""}.fa-burger,.fa-hamburger{--fa: ""}.fa-wrench{--fa: ""}.fa-bugs{--fa: ""}.fa-rupee-sign,.fa-rupee{--fa: ""}.fa-file-image{--fa: ""}.fa-circle-question,.fa-question-circle{--fa: ""}.fa-plane-departure{--fa: ""}.fa-handshake-slash{--fa: ""}.fa-book-bookmark{--fa: ""}.fa-code-branch{--fa: ""}.fa-hat-cowboy{--fa: ""}.fa-bridge{--fa: ""}.fa-phone-flip,.fa-phone-alt{--fa: ""}.fa-truck-front{--fa: ""}.fa-cat{--fa: ""}.fa-anchor-circle-exclamation{--fa: ""}.fa-truck-field{--fa: ""}.fa-route{--fa: ""}.fa-clipboard-question{--fa: ""}.fa-panorama{--fa: ""}.fa-comment-medical{--fa: ""}.fa-teeth-open{--fa: ""}.fa-file-circle-minus{--fa: ""}.fa-tags{--fa: ""}.fa-wine-glass{--fa: ""}.fa-forward-fast,.fa-fast-forward{--fa: ""}.fa-face-meh-blank,.fa-meh-blank{--fa: ""}.fa-square-parking,.fa-parking{--fa: ""}.fa-house-signal{--fa: ""}.fa-bars-progress,.fa-tasks-alt{--fa: ""}.fa-faucet-drip{--fa: ""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa: ""}.fa-ban-smoking,.fa-smoking-ban{--fa: ""}.fa-terminal{--fa: ""}.fa-mobile-button{--fa: ""}.fa-house-medical-flag{--fa: ""}.fa-basket-shopping,.fa-shopping-basket{--fa: ""}.fa-tape{--fa: ""}.fa-bus-simple,.fa-bus-alt{--fa: ""}.fa-eye{--fa: ""}.fa-face-sad-cry,.fa-sad-cry{--fa: ""}.fa-audio-description{--fa: ""}.fa-person-military-to-person{--fa: ""}.fa-file-shield{--fa: ""}.fa-user-slash{--fa: ""}.fa-pen{--fa: ""}.fa-tower-observation{--fa: ""}.fa-file-code{--fa: ""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa: ""}.fa-bus{--fa: ""}.fa-heart-circle-xmark{--fa: ""}.fa-house-chimney,.fa-home-lg{--fa: ""}.fa-window-maximize{--fa: ""}.fa-face-frown,.fa-frown{--fa: ""}.fa-prescription{--fa: ""}.fa-shop,.fa-store-alt{--fa: ""}.fa-floppy-disk,.fa-save{--fa: ""}.fa-vihara{--fa: ""}.fa-scale-unbalanced,.fa-balance-scale-left{--fa: ""}.fa-sort-up,.fa-sort-asc{--fa: ""}.fa-comment-dots,.fa-commenting{--fa: ""}.fa-plant-wilt{--fa: ""}.fa-diamond{--fa: ""}.fa-face-grin-squint,.fa-grin-squint{--fa: ""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa: ""}.fa-chart-diagram{--fa: ""}.fa-bacterium{--fa: ""}.fa-hand-pointer{--fa: ""}.fa-drum-steelpan{--fa: ""}.fa-hand-scissors{--fa: ""}.fa-hands-praying,.fa-praying-hands{--fa: ""}.fa-arrow-rotate-right,.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-redo{--fa: ""}.fa-biohazard{--fa: ""}.fa-location-crosshairs,.fa-location{--fa: ""}.fa-mars-double{--fa: ""}.fa-child-dress{--fa: ""}.fa-users-between-lines{--fa: ""}.fa-lungs-virus{--fa: ""}.fa-face-grin-tears,.fa-grin-tears{--fa: ""}.fa-phone{--fa: ""}.fa-calendar-xmark,.fa-calendar-times{--fa: ""}.fa-child-reaching{--fa: ""}.fa-head-side-virus{--fa: ""}.fa-user-gear,.fa-user-cog{--fa: ""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa: ""}.fa-door-closed{--fa: ""}.fa-shield-virus{--fa: ""}.fa-dice-six{--fa: ""}.fa-mosquito-net{--fa: ""}.fa-file-fragment{--fa: ""}.fa-bridge-water{--fa: ""}.fa-person-booth{--fa: ""}.fa-text-width{--fa: ""}.fa-hat-wizard{--fa: ""}.fa-pen-fancy{--fa: ""}.fa-person-digging,.fa-digging{--fa: ""}.fa-trash{--fa: ""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa: ""}.fa-book-medical{--fa: ""}.fa-poo{--fa: ""}.fa-quote-right,.fa-quote-right-alt{--fa: ""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa: ""}.fa-cubes{--fa: ""}.fa-divide{--fa: ""}.fa-tenge-sign,.fa-tenge{--fa: ""}.fa-headphones{--fa: ""}.fa-hands-holding{--fa: ""}.fa-hands-clapping{--fa: ""}.fa-republican{--fa: ""}.fa-arrow-left{--fa: ""}.fa-person-circle-xmark{--fa: ""}.fa-ruler{--fa: ""}.fa-align-left{--fa: ""}.fa-dice-d6{--fa: ""}.fa-restroom{--fa: ""}.fa-j{--fa: "J"}.fa-users-viewfinder{--fa: ""}.fa-file-video{--fa: ""}.fa-up-right-from-square,.fa-external-link-alt{--fa: ""}.fa-table-cells,.fa-th{--fa: ""}.fa-file-pdf{--fa: ""}.fa-book-bible,.fa-bible{--fa: ""}.fa-o{--fa: "O"}.fa-suitcase-medical,.fa-medkit{--fa: ""}.fa-user-secret{--fa: ""}.fa-otter{--fa: ""}.fa-person-dress,.fa-female{--fa: ""}.fa-comment-dollar{--fa: ""}.fa-business-time,.fa-briefcase-clock{--fa: ""}.fa-table-cells-large,.fa-th-large{--fa: ""}.fa-book-tanakh,.fa-tanakh{--fa: ""}.fa-phone-volume,.fa-volume-control-phone{--fa: ""}.fa-hat-cowboy-side{--fa: ""}.fa-clipboard-user{--fa: ""}.fa-child{--fa: ""}.fa-lira-sign{--fa: ""}.fa-satellite{--fa: ""}.fa-plane-lock{--fa: ""}.fa-tag{--fa: ""}.fa-comment{--fa: ""}.fa-cake-candles,.fa-birthday-cake,.fa-cake{--fa: ""}.fa-envelope{--fa: ""}.fa-angles-up,.fa-angle-double-up{--fa: ""}.fa-paperclip{--fa: ""}.fa-arrow-right-to-city{--fa: ""}.fa-ribbon{--fa: ""}.fa-lungs{--fa: ""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa: ""}.fa-litecoin-sign{--fa: ""}.fa-border-none{--fa: ""}.fa-circle-nodes{--fa: ""}.fa-parachute-box{--fa: ""}.fa-indent{--fa: ""}.fa-truck-field-un{--fa: ""}.fa-hourglass,.fa-hourglass-empty{--fa: ""}.fa-mountain{--fa: ""}.fa-user-doctor,.fa-user-md{--fa: ""}.fa-circle-info,.fa-info-circle{--fa: ""}.fa-cloud-meatball{--fa: ""}.fa-camera,.fa-camera-alt{--fa: ""}.fa-square-virus{--fa: ""}.fa-meteor{--fa: ""}.fa-car-on{--fa: ""}.fa-sleigh{--fa: ""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa: ""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa: ""}.fa-water{--fa: ""}.fa-calendar-check{--fa: ""}.fa-braille{--fa: ""}.fa-prescription-bottle-medical,.fa-prescription-bottle-alt{--fa: ""}.fa-landmark{--fa: ""}.fa-truck{--fa: ""}.fa-crosshairs{--fa: ""}.fa-person-cane{--fa: ""}.fa-tent{--fa: ""}.fa-vest-patches{--fa: ""}.fa-check-double{--fa: ""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa: ""}.fa-money-bill-wheat{--fa: ""}.fa-cookie{--fa: ""}.fa-arrow-rotate-left,.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-undo{--fa: ""}.fa-hard-drive,.fa-hdd{--fa: ""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa: ""}.fa-dumbbell{--fa: ""}.fa-rectangle-list,.fa-list-alt{--fa: ""}.fa-tarp-droplet{--fa: ""}.fa-house-medical-circle-check{--fa: ""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa: ""}.fa-calendar-plus{--fa: ""}.fa-plane-arrival{--fa: ""}.fa-circle-left,.fa-arrow-alt-circle-left{--fa: ""}.fa-train-subway,.fa-subway{--fa: ""}.fa-chart-gantt{--fa: ""}.fa-indian-rupee-sign,.fa-indian-rupee,.fa-inr{--fa: ""}.fa-crop-simple,.fa-crop-alt{--fa: ""}.fa-money-bill-1,.fa-money-bill-alt{--fa: ""}.fa-left-long,.fa-long-arrow-alt-left{--fa: ""}.fa-dna{--fa: ""}.fa-virus-slash{--fa: ""}.fa-minus,.fa-subtract{--fa: ""}.fa-chess{--fa: ""}.fa-arrow-left-long,.fa-long-arrow-left{--fa: ""}.fa-plug-circle-check{--fa: ""}.fa-street-view{--fa: ""}.fa-franc-sign{--fa: ""}.fa-volume-off{--fa: ""}.fa-hands-asl-interpreting,.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting{--fa: ""}.fa-gear,.fa-cog{--fa: ""}.fa-droplet-slash,.fa-tint-slash{--fa: ""}.fa-mosque{--fa: ""}.fa-mosquito{--fa: ""}.fa-star-of-david{--fa: ""}.fa-person-military-rifle{--fa: ""}.fa-cart-shopping,.fa-shopping-cart{--fa: ""}.fa-vials{--fa: ""}.fa-plug-circle-plus{--fa: ""}.fa-place-of-worship{--fa: ""}.fa-grip-vertical{--fa: ""}.fa-hexagon-nodes{--fa: ""}.fa-arrow-turn-up,.fa-level-up{--fa: ""}.fa-u{--fa: "U"}.fa-square-root-variable,.fa-square-root-alt{--fa: ""}.fa-clock,.fa-clock-four{--fa: ""}.fa-backward-step,.fa-step-backward{--fa: ""}.fa-pallet{--fa: ""}.fa-faucet{--fa: ""}.fa-baseball-bat-ball{--fa: ""}.fa-s{--fa: "S"}.fa-timeline{--fa: ""}.fa-keyboard{--fa: ""}.fa-caret-down{--fa: ""}.fa-house-chimney-medical,.fa-clinic-medical{--fa: ""}.fa-temperature-three-quarters,.fa-temperature-3,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa: ""}.fa-mobile-screen,.fa-mobile-android-alt{--fa: ""}.fa-plane-up{--fa: ""}.fa-piggy-bank{--fa: ""}.fa-battery-half,.fa-battery-3{--fa: ""}.fa-mountain-city{--fa: ""}.fa-coins{--fa: ""}.fa-khanda{--fa: ""}.fa-sliders,.fa-sliders-h{--fa: ""}.fa-folder-tree{--fa: ""}.fa-network-wired{--fa: ""}.fa-map-pin{--fa: ""}.fa-hamsa{--fa: ""}.fa-cent-sign{--fa: ""}.fa-flask{--fa: ""}.fa-person-pregnant{--fa: ""}.fa-wand-sparkles{--fa: ""}.fa-ellipsis-vertical,.fa-ellipsis-v{--fa: ""}.fa-ticket{--fa: ""}.fa-power-off{--fa: ""}.fa-right-long,.fa-long-arrow-alt-right{--fa: ""}.fa-flag-usa{--fa: ""}.fa-laptop-file{--fa: ""}.fa-tty,.fa-teletype{--fa: ""}.fa-diagram-next{--fa: ""}.fa-person-rifle{--fa: ""}.fa-house-medical-circle-exclamation{--fa: ""}.fa-closed-captioning{--fa: ""}.fa-person-hiking,.fa-hiking{--fa: ""}.fa-venus-double{--fa: ""}.fa-images{--fa: ""}.fa-calculator{--fa: ""}.fa-people-pulling{--fa: ""}.fa-n{--fa: "N"}.fa-cable-car,.fa-tram{--fa: ""}.fa-cloud-rain{--fa: ""}.fa-building-circle-xmark{--fa: ""}.fa-ship{--fa: ""}.fa-arrows-down-to-line{--fa: ""}.fa-download{--fa: ""}.fa-face-grin,.fa-grin{--fa: ""}.fa-delete-left,.fa-backspace{--fa: ""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa: ""}.fa-file-circle-check{--fa: ""}.fa-forward{--fa: ""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa: ""}.fa-face-meh,.fa-meh{--fa: ""}.fa-align-center{--fa: ""}.fa-book-skull,.fa-book-dead{--fa: ""}.fa-id-card,.fa-drivers-license{--fa: ""}.fa-outdent,.fa-dedent{--fa: ""}.fa-heart-circle-exclamation{--fa: ""}.fa-house,.fa-home,.fa-home-alt,.fa-home-lg-alt{--fa: ""}.fa-calendar-week{--fa: ""}.fa-laptop-medical{--fa: ""}.fa-b{--fa: "B"}.fa-file-medical{--fa: ""}.fa-dice-one{--fa: ""}.fa-kiwi-bird{--fa: ""}.fa-arrow-right-arrow-left,.fa-exchange{--fa: ""}.fa-rotate-right,.fa-redo-alt,.fa-rotate-forward{--fa: ""}.fa-utensils,.fa-cutlery{--fa: ""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa: ""}.fa-mill-sign{--fa: ""}.fa-bowl-rice{--fa: ""}.fa-skull{--fa: ""}.fa-tower-broadcast,.fa-broadcast-tower{--fa: ""}.fa-truck-pickup{--fa: ""}.fa-up-long,.fa-long-arrow-alt-up{--fa: ""}.fa-stop{--fa: ""}.fa-code-merge{--fa: ""}.fa-upload{--fa: ""}.fa-hurricane{--fa: ""}.fa-mound{--fa: ""}.fa-toilet-portable{--fa: ""}.fa-compact-disc{--fa: ""}.fa-file-arrow-down,.fa-file-download{--fa: ""}.fa-caravan{--fa: ""}.fa-shield-cat{--fa: ""}.fa-bolt,.fa-zap{--fa: ""}.fa-glass-water{--fa: ""}.fa-oil-well{--fa: ""}.fa-vault{--fa: ""}.fa-mars{--fa: ""}.fa-toilet{--fa: ""}.fa-plane-circle-xmark{--fa: ""}.fa-yen-sign,.fa-cny,.fa-jpy,.fa-rmb,.fa-yen{--fa: ""}.fa-ruble-sign,.fa-rouble,.fa-rub,.fa-ruble{--fa: ""}.fa-sun{--fa: ""}.fa-guitar{--fa: ""}.fa-face-laugh-wink,.fa-laugh-wink{--fa: ""}.fa-horse-head{--fa: ""}.fa-bore-hole{--fa: ""}.fa-industry{--fa: ""}.fa-circle-down,.fa-arrow-alt-circle-down{--fa: ""}.fa-arrows-turn-to-dots{--fa: ""}.fa-florin-sign{--fa: ""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa: ""}.fa-less-than{--fa: "<"}.fa-angle-down{--fa: ""}.fa-car-tunnel{--fa: ""}.fa-head-side-cough{--fa: ""}.fa-grip-lines{--fa: ""}.fa-thumbs-down{--fa: ""}.fa-user-lock{--fa: ""}.fa-arrow-right-long,.fa-long-arrow-right{--fa: ""}.fa-anchor-circle-xmark{--fa: ""}.fa-ellipsis,.fa-ellipsis-h{--fa: ""}.fa-chess-pawn{--fa: ""}.fa-kit-medical,.fa-first-aid{--fa: ""}.fa-person-through-window{--fa: ""}.fa-toolbox{--fa: ""}.fa-hands-holding-circle{--fa: ""}.fa-bug{--fa: ""}.fa-credit-card,.fa-credit-card-alt{--fa: ""}.fa-car,.fa-automobile{--fa: ""}.fa-hand-holding-hand{--fa: ""}.fa-book-open-reader,.fa-book-reader{--fa: ""}.fa-mountain-sun{--fa: ""}.fa-arrows-left-right-to-line{--fa: ""}.fa-dice-d20{--fa: ""}.fa-truck-droplet{--fa: ""}.fa-file-circle-xmark{--fa: ""}.fa-temperature-arrow-up,.fa-temperature-up{--fa: ""}.fa-medal{--fa: ""}.fa-bed{--fa: ""}.fa-square-h,.fa-h-square{--fa: ""}.fa-podcast{--fa: ""}.fa-temperature-full,.fa-temperature-4,.fa-thermometer-4,.fa-thermometer-full{--fa: ""}.fa-bell{--fa: ""}.fa-superscript{--fa: ""}.fa-plug-circle-xmark{--fa: ""}.fa-star-of-life{--fa: ""}.fa-phone-slash{--fa: ""}.fa-paint-roller{--fa: ""}.fa-handshake-angle,.fa-hands-helping{--fa: ""}.fa-location-dot,.fa-map-marker-alt{--fa: ""}.fa-file{--fa: ""}.fa-greater-than{--fa: ">"}.fa-person-swimming,.fa-swimmer{--fa: ""}.fa-arrow-down{--fa: ""}.fa-droplet,.fa-tint{--fa: ""}.fa-eraser{--fa: ""}.fa-earth-americas,.fa-earth,.fa-earth-america,.fa-globe-americas{--fa: ""}.fa-person-burst{--fa: ""}.fa-dove{--fa: ""}.fa-battery-empty,.fa-battery-0{--fa: ""}.fa-socks{--fa: ""}.fa-inbox{--fa: ""}.fa-section{--fa: ""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa: ""}.fa-envelope-open-text{--fa: ""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa: ""}.fa-wine-bottle{--fa: ""}.fa-chess-rook{--fa: ""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa: ""}.fa-dharmachakra{--fa: ""}.fa-hotdog{--fa: ""}.fa-person-walking-with-cane,.fa-blind{--fa: ""}.fa-drum{--fa: ""}.fa-ice-cream{--fa: ""}.fa-heart-circle-bolt{--fa: ""}.fa-fax{--fa: ""}.fa-paragraph{--fa: ""}.fa-check-to-slot,.fa-vote-yea{--fa: ""}.fa-star-half{--fa: ""}.fa-boxes-stacked,.fa-boxes,.fa-boxes-alt{--fa: ""}.fa-link,.fa-chain{--fa: ""}.fa-ear-listen,.fa-assistive-listening-systems{--fa: ""}.fa-tree-city{--fa: ""}.fa-play{--fa: ""}.fa-font{--fa: ""}.fa-table-cells-row-lock{--fa: ""}.fa-rupiah-sign{--fa: ""}.fa-magnifying-glass,.fa-search{--fa: ""}.fa-table-tennis-paddle-ball,.fa-ping-pong-paddle-ball,.fa-table-tennis{--fa: ""}.fa-person-dots-from-line,.fa-diagnoses{--fa: ""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa: ""}.fa-naira-sign{--fa: ""}.fa-cart-arrow-down{--fa: ""}.fa-walkie-talkie{--fa: ""}.fa-file-pen,.fa-file-edit{--fa: ""}.fa-receipt{--fa: ""}.fa-square-pen,.fa-pen-square,.fa-pencil-square{--fa: ""}.fa-suitcase-rolling{--fa: ""}.fa-person-circle-exclamation{--fa: ""}.fa-chevron-down{--fa: ""}.fa-battery-full,.fa-battery,.fa-battery-5{--fa: ""}.fa-skull-crossbones{--fa: ""}.fa-code-compare{--fa: ""}.fa-list-ul,.fa-list-dots{--fa: ""}.fa-school-lock{--fa: ""}.fa-tower-cell{--fa: ""}.fa-down-long,.fa-long-arrow-alt-down{--fa: ""}.fa-ranking-star{--fa: ""}.fa-chess-king{--fa: ""}.fa-person-harassing{--fa: ""}.fa-brazilian-real-sign{--fa: ""}.fa-landmark-dome,.fa-landmark-alt{--fa: ""}.fa-arrow-up{--fa: ""}.fa-tv,.fa-television,.fa-tv-alt{--fa: ""}.fa-shrimp{--fa: ""}.fa-list-check,.fa-tasks{--fa: ""}.fa-jug-detergent{--fa: ""}.fa-circle-user,.fa-user-circle{--fa: ""}.fa-user-shield{--fa: ""}.fa-wind{--fa: ""}.fa-car-burst,.fa-car-crash{--fa: ""}.fa-y{--fa: "Y"}.fa-person-snowboarding,.fa-snowboarding{--fa: ""}.fa-truck-fast,.fa-shipping-fast{--fa: ""}.fa-fish{--fa: ""}.fa-user-graduate{--fa: ""}.fa-circle-half-stroke,.fa-adjust{--fa: ""}.fa-clapperboard{--fa: ""}.fa-circle-radiation,.fa-radiation-alt{--fa: ""}.fa-baseball,.fa-baseball-ball{--fa: ""}.fa-jet-fighter-up{--fa: ""}.fa-diagram-project,.fa-project-diagram{--fa: ""}.fa-copy{--fa: ""}.fa-volume-xmark,.fa-volume-mute,.fa-volume-times{--fa: ""}.fa-hand-sparkles{--fa: ""}.fa-grip,.fa-grip-horizontal{--fa: ""}.fa-share-from-square,.fa-share-square{--fa: ""}.fa-child-combatant,.fa-child-rifle{--fa: ""}.fa-gun{--fa: ""}.fa-square-phone,.fa-phone-square{--fa: ""}.fa-plus,.fa-add{--fa: "+"}.fa-expand{--fa: ""}.fa-computer{--fa: ""}.fa-xmark,.fa-close,.fa-multiply,.fa-remove,.fa-times{--fa: ""}.fa-arrows-up-down-left-right,.fa-arrows{--fa: ""}.fa-chalkboard-user,.fa-chalkboard-teacher{--fa: ""}.fa-peso-sign{--fa: ""}.fa-building-shield{--fa: ""}.fa-baby{--fa: ""}.fa-users-line{--fa: ""}.fa-quote-left,.fa-quote-left-alt{--fa: ""}.fa-tractor{--fa: ""}.fa-trash-arrow-up,.fa-trash-restore{--fa: ""}.fa-arrow-down-up-lock{--fa: ""}.fa-lines-leaning{--fa: ""}.fa-ruler-combined{--fa: ""}.fa-copyright{--fa: ""}.fa-equals{--fa: "="}.fa-blender{--fa: ""}.fa-teeth{--fa: ""}.fa-shekel-sign,.fa-ils,.fa-shekel,.fa-sheqel,.fa-sheqel-sign{--fa: ""}.fa-map{--fa: ""}.fa-rocket{--fa: ""}.fa-photo-film,.fa-photo-video{--fa: ""}.fa-folder-minus{--fa: ""}.fa-hexagon-nodes-bolt{--fa: ""}.fa-store{--fa: ""}.fa-arrow-trend-up{--fa: ""}.fa-plug-circle-minus{--fa: ""}.fa-sign-hanging,.fa-sign{--fa: ""}.fa-bezier-curve{--fa: ""}.fa-bell-slash{--fa: ""}.fa-tablet,.fa-tablet-android{--fa: ""}.fa-school-flag{--fa: ""}.fa-fill{--fa: ""}.fa-angle-up{--fa: ""}.fa-drumstick-bite{--fa: ""}.fa-holly-berry{--fa: ""}.fa-chevron-left{--fa: ""}.fa-bacteria{--fa: ""}.fa-hand-lizard{--fa: ""}.fa-notdef{--fa: ""}.fa-disease{--fa: ""}.fa-briefcase-medical{--fa: ""}.fa-genderless{--fa: ""}.fa-chevron-right{--fa: ""}.fa-retweet{--fa: ""}.fa-car-rear,.fa-car-alt{--fa: ""}.fa-pump-soap{--fa: ""}.fa-video-slash{--fa: ""}.fa-battery-quarter,.fa-battery-2{--fa: ""}.fa-radio{--fa: ""}.fa-baby-carriage,.fa-carriage-baby{--fa: ""}.fa-traffic-light{--fa: ""}.fa-thermometer{--fa: ""}.fa-vr-cardboard{--fa: ""}.fa-hand-middle-finger{--fa: ""}.fa-percent,.fa-percentage{--fa: "%"}.fa-truck-moving{--fa: ""}.fa-glass-water-droplet{--fa: ""}.fa-display{--fa: ""}.fa-face-smile,.fa-smile{--fa: ""}.fa-thumbtack,.fa-thumb-tack{--fa: ""}.fa-trophy{--fa: ""}.fa-person-praying,.fa-pray{--fa: ""}.fa-hammer{--fa: ""}.fa-hand-peace{--fa: ""}.fa-rotate,.fa-sync-alt{--fa: ""}.fa-spinner{--fa: ""}.fa-robot{--fa: ""}.fa-peace{--fa: ""}.fa-gears,.fa-cogs{--fa: ""}.fa-warehouse{--fa: ""}.fa-arrow-up-right-dots{--fa: ""}.fa-splotch{--fa: ""}.fa-face-grin-hearts,.fa-grin-hearts{--fa: ""}.fa-dice-four{--fa: ""}.fa-sim-card{--fa: ""}.fa-transgender,.fa-transgender-alt{--fa: ""}.fa-mercury{--fa: ""}.fa-arrow-turn-down,.fa-level-down{--fa: ""}.fa-person-falling-burst{--fa: ""}.fa-award{--fa: ""}.fa-ticket-simple,.fa-ticket-alt{--fa: ""}.fa-building{--fa: ""}.fa-angles-left,.fa-angle-double-left{--fa: ""}.fa-qrcode{--fa: ""}.fa-clock-rotate-left,.fa-history{--fa: ""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa: ""}.fa-file-export,.fa-arrow-right-from-file{--fa: ""}.fa-shield,.fa-shield-blank{--fa: ""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa: ""}.fa-comment-nodes{--fa: ""}.fa-house-medical{--fa: ""}.fa-golf-ball-tee,.fa-golf-ball{--fa: ""}.fa-circle-chevron-left,.fa-chevron-circle-left{--fa: ""}.fa-house-chimney-window{--fa: ""}.fa-pen-nib{--fa: ""}.fa-tent-arrow-turn-left{--fa: ""}.fa-tents{--fa: ""}.fa-wand-magic,.fa-magic{--fa: ""}.fa-dog{--fa: ""}.fa-carrot{--fa: ""}.fa-moon{--fa: ""}.fa-wine-glass-empty,.fa-wine-glass-alt{--fa: ""}.fa-cheese{--fa: ""}.fa-yin-yang{--fa: ""}.fa-music{--fa: ""}.fa-code-commit{--fa: ""}.fa-temperature-low{--fa: ""}.fa-person-biking,.fa-biking{--fa: ""}.fa-broom{--fa: ""}.fa-shield-heart{--fa: ""}.fa-gopuram{--fa: ""}.fa-earth-oceania,.fa-globe-oceania{--fa: ""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa: ""}.fa-hashtag{--fa: "#"}.fa-up-right-and-down-left-from-center,.fa-expand-alt{--fa: ""}.fa-oil-can{--fa: ""}.fa-t{--fa: "T"}.fa-hippo{--fa: ""}.fa-chart-column{--fa: ""}.fa-infinity{--fa: ""}.fa-vial-circle-check{--fa: ""}.fa-person-arrow-down-to-line{--fa: ""}.fa-voicemail{--fa: ""}.fa-fan{--fa: ""}.fa-person-walking-luggage{--fa: ""}.fa-up-down,.fa-arrows-alt-v{--fa: ""}.fa-cloud-moon-rain{--fa: ""}.fa-calendar{--fa: ""}.fa-trailer{--fa: ""}.fa-bahai,.fa-haykal{--fa: ""}.fa-sd-card{--fa: ""}.fa-dragon{--fa: ""}.fa-shoe-prints{--fa: ""}.fa-circle-plus,.fa-plus-circle{--fa: ""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa: ""}.fa-hand-holding{--fa: ""}.fa-plug-circle-exclamation{--fa: ""}.fa-link-slash,.fa-chain-broken,.fa-chain-slash,.fa-unlink{--fa: ""}.fa-clone{--fa: ""}.fa-person-walking-arrow-loop-left{--fa: ""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa: ""}.fa-fire-flame-curved,.fa-fire-alt{--fa: ""}.fa-tornado{--fa: ""}.fa-file-circle-plus{--fa: ""}.fa-book-quran,.fa-quran{--fa: ""}.fa-anchor{--fa: ""}.fa-border-all{--fa: ""}.fa-face-angry,.fa-angry{--fa: ""}.fa-cookie-bite{--fa: ""}.fa-arrow-trend-down{--fa: ""}.fa-rss,.fa-feed{--fa: ""}.fa-draw-polygon{--fa: ""}.fa-scale-balanced,.fa-balance-scale{--fa: ""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa: ""}.fa-shower{--fa: ""}.fa-desktop,.fa-desktop-alt{--fa: ""}.fa-m{--fa: "M"}.fa-table-list,.fa-th-list{--fa: ""}.fa-comment-sms,.fa-sms{--fa: ""}.fa-book{--fa: ""}.fa-user-plus{--fa: ""}.fa-check{--fa: ""}.fa-battery-three-quarters,.fa-battery-4{--fa: ""}.fa-house-circle-check{--fa: ""}.fa-angle-left{--fa: ""}.fa-diagram-successor{--fa: ""}.fa-truck-arrow-right{--fa: ""}.fa-arrows-split-up-and-left{--fa: ""}.fa-hand-fist,.fa-fist-raised{--fa: ""}.fa-cloud-moon{--fa: ""}.fa-briefcase{--fa: ""}.fa-person-falling{--fa: ""}.fa-image-portrait,.fa-portrait{--fa: ""}.fa-user-tag{--fa: ""}.fa-rug{--fa: ""}.fa-earth-europe,.fa-globe-europe{--fa: ""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa: ""}.fa-rectangle-xmark,.fa-rectangle-times,.fa-times-rectangle,.fa-window-close{--fa: ""}.fa-baht-sign{--fa: ""}.fa-book-open{--fa: ""}.fa-book-journal-whills,.fa-journal-whills{--fa: ""}.fa-handcuffs{--fa: ""}.fa-triangle-exclamation,.fa-exclamation-triangle,.fa-warning{--fa: ""}.fa-database{--fa: ""}.fa-share,.fa-mail-forward{--fa: ""}.fa-bottle-droplet{--fa: ""}.fa-mask-face{--fa: ""}.fa-hill-rockslide{--fa: ""}.fa-right-left,.fa-exchange-alt{--fa: ""}.fa-paper-plane{--fa: ""}.fa-road-circle-exclamation{--fa: ""}.fa-dungeon{--fa: ""}.fa-align-right{--fa: ""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa: ""}.fa-life-ring{--fa: ""}.fa-hands,.fa-sign-language,.fa-signing{--fa: ""}.fa-calendar-day{--fa: ""}.fa-water-ladder,.fa-ladder-water,.fa-swimming-pool{--fa: ""}.fa-arrows-up-down,.fa-arrows-v{--fa: ""}.fa-face-grimace,.fa-grimace{--fa: ""}.fa-wheelchair-move,.fa-wheelchair-alt{--fa: ""}.fa-turn-down,.fa-level-down-alt{--fa: ""}.fa-person-walking-arrow-right{--fa: ""}.fa-square-envelope,.fa-envelope-square{--fa: ""}.fa-dice{--fa: ""}.fa-bowling-ball{--fa: ""}.fa-brain{--fa: ""}.fa-bandage,.fa-band-aid{--fa: ""}.fa-calendar-minus{--fa: ""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa: ""}.fa-gifts{--fa: ""}.fa-hotel{--fa: ""}.fa-earth-asia,.fa-globe-asia{--fa: ""}.fa-id-card-clip,.fa-id-card-alt{--fa: ""}.fa-magnifying-glass-plus,.fa-search-plus{--fa: ""}.fa-thumbs-up{--fa: ""}.fa-user-clock{--fa: ""}.fa-hand-dots,.fa-allergies{--fa: ""}.fa-file-invoice{--fa: ""}.fa-window-minimize{--fa: ""}.fa-mug-saucer,.fa-coffee{--fa: ""}.fa-brush{--fa: ""}.fa-file-half-dashed{--fa: ""}.fa-mask{--fa: ""}.fa-magnifying-glass-minus,.fa-search-minus{--fa: ""}.fa-ruler-vertical{--fa: ""}.fa-user-large,.fa-user-alt{--fa: ""}.fa-train-tram{--fa: ""}.fa-user-nurse{--fa: ""}.fa-syringe{--fa: ""}.fa-cloud-sun{--fa: ""}.fa-stopwatch-20{--fa: ""}.fa-square-full{--fa: ""}.fa-magnet{--fa: ""}.fa-jar{--fa: ""}.fa-note-sticky,.fa-sticky-note{--fa: ""}.fa-bug-slash{--fa: ""}.fa-arrow-up-from-water-pump{--fa: ""}.fa-bone{--fa: ""}.fa-table-cells-row-unlock{--fa: ""}.fa-user-injured{--fa: ""}.fa-face-sad-tear,.fa-sad-tear{--fa: ""}.fa-plane{--fa: ""}.fa-tent-arrows-down{--fa: ""}.fa-exclamation{--fa: "!"}.fa-arrows-spin{--fa: ""}.fa-print{--fa: ""}.fa-turkish-lira-sign,.fa-try,.fa-turkish-lira{--fa: ""}.fa-dollar-sign,.fa-dollar,.fa-usd{--fa: "$"}.fa-x{--fa: "X"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa: ""}.fa-users-gear,.fa-users-cog{--fa: ""}.fa-person-military-pointing{--fa: ""}.fa-building-columns,.fa-bank,.fa-institution,.fa-museum,.fa-university{--fa: ""}.fa-umbrella{--fa: ""}.fa-trowel{--fa: ""}.fa-d{--fa: "D"}.fa-stapler{--fa: ""}.fa-masks-theater,.fa-theater-masks{--fa: ""}.fa-kip-sign{--fa: ""}.fa-hand-point-left{--fa: ""}.fa-handshake-simple,.fa-handshake-alt{--fa: ""}.fa-jet-fighter,.fa-fighter-jet{--fa: ""}.fa-square-share-nodes,.fa-share-alt-square{--fa: ""}.fa-barcode{--fa: ""}.fa-plus-minus{--fa: ""}.fa-video,.fa-video-camera{--fa: ""}.fa-graduation-cap,.fa-mortar-board{--fa: ""}.fa-hand-holding-medical{--fa: ""}.fa-person-circle-check{--fa: ""}.fa-turn-up,.fa-level-up-alt{--fa: ""}.sr-only,.fa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:not(:focus),.fa-sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root,:host{--fa-style-family-brands: "Font Awesome 6 Brands";--fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}.fab,.fa-brands{font-weight:400}.fa-monero{--fa: ""}.fa-hooli{--fa: ""}.fa-yelp{--fa: ""}.fa-cc-visa{--fa: ""}.fa-lastfm{--fa: ""}.fa-shopware{--fa: ""}.fa-creative-commons-nc{--fa: ""}.fa-aws{--fa: ""}.fa-redhat{--fa: ""}.fa-yoast{--fa: ""}.fa-cloudflare{--fa: ""}.fa-ups{--fa: ""}.fa-pixiv{--fa: ""}.fa-wpexplorer{--fa: ""}.fa-dyalog{--fa: ""}.fa-bity{--fa: ""}.fa-stackpath{--fa: ""}.fa-buysellads{--fa: ""}.fa-first-order{--fa: ""}.fa-modx{--fa: ""}.fa-guilded{--fa: ""}.fa-vnv{--fa: ""}.fa-square-js,.fa-js-square{--fa: ""}.fa-microsoft{--fa: ""}.fa-qq{--fa: ""}.fa-orcid{--fa: ""}.fa-java{--fa: ""}.fa-invision{--fa: ""}.fa-creative-commons-pd-alt{--fa: ""}.fa-centercode{--fa: ""}.fa-glide-g{--fa: ""}.fa-drupal{--fa: ""}.fa-jxl{--fa: ""}.fa-dart-lang{--fa: ""}.fa-hire-a-helper{--fa: ""}.fa-creative-commons-by{--fa: ""}.fa-unity{--fa: ""}.fa-whmcs{--fa: ""}.fa-rocketchat{--fa: ""}.fa-vk{--fa: ""}.fa-untappd{--fa: ""}.fa-mailchimp{--fa: ""}.fa-css3-alt{--fa: ""}.fa-square-reddit,.fa-reddit-square{--fa: ""}.fa-vimeo-v{--fa: ""}.fa-contao{--fa: ""}.fa-square-font-awesome{--fa: ""}.fa-deskpro{--fa: ""}.fa-brave{--fa: ""}.fa-sistrix{--fa: ""}.fa-square-instagram,.fa-instagram-square{--fa: ""}.fa-battle-net{--fa: ""}.fa-the-red-yeti{--fa: ""}.fa-square-hacker-news,.fa-hacker-news-square{--fa: ""}.fa-edge{--fa: ""}.fa-threads{--fa: ""}.fa-napster{--fa: ""}.fa-square-snapchat,.fa-snapchat-square{--fa: ""}.fa-google-plus-g{--fa: ""}.fa-artstation{--fa: ""}.fa-markdown{--fa: ""}.fa-sourcetree{--fa: ""}.fa-google-plus{--fa: ""}.fa-diaspora{--fa: ""}.fa-foursquare{--fa: ""}.fa-stack-overflow{--fa: ""}.fa-github-alt{--fa: ""}.fa-phoenix-squadron{--fa: ""}.fa-pagelines{--fa: ""}.fa-algolia{--fa: ""}.fa-red-river{--fa: ""}.fa-creative-commons-sa{--fa: ""}.fa-safari{--fa: ""}.fa-google{--fa: ""}.fa-square-font-awesome-stroke,.fa-font-awesome-alt{--fa: ""}.fa-atlassian{--fa: ""}.fa-linkedin-in{--fa: ""}.fa-digital-ocean{--fa: ""}.fa-nimblr{--fa: ""}.fa-chromecast{--fa: ""}.fa-evernote{--fa: ""}.fa-hacker-news{--fa: ""}.fa-creative-commons-sampling{--fa: ""}.fa-adversal{--fa: ""}.fa-creative-commons{--fa: ""}.fa-watchman-monitoring{--fa: ""}.fa-fonticons{--fa: ""}.fa-weixin{--fa: ""}.fa-shirtsinbulk{--fa: ""}.fa-codepen{--fa: ""}.fa-git-alt{--fa: ""}.fa-lyft{--fa: ""}.fa-rev{--fa: ""}.fa-windows{--fa: ""}.fa-wizards-of-the-coast{--fa: ""}.fa-square-viadeo,.fa-viadeo-square{--fa: ""}.fa-meetup{--fa: ""}.fa-centos{--fa: ""}.fa-adn{--fa: ""}.fa-cloudsmith{--fa: ""}.fa-opensuse{--fa: ""}.fa-pied-piper-alt{--fa: ""}.fa-square-dribbble,.fa-dribbble-square{--fa: ""}.fa-codiepie{--fa: ""}.fa-node{--fa: ""}.fa-mix{--fa: ""}.fa-steam{--fa: ""}.fa-cc-apple-pay{--fa: ""}.fa-scribd{--fa: ""}.fa-debian{--fa: ""}.fa-openid{--fa: ""}.fa-instalod{--fa: ""}.fa-files-pinwheel{--fa: ""}.fa-expeditedssl{--fa: ""}.fa-sellcast{--fa: ""}.fa-square-twitter,.fa-twitter-square{--fa: ""}.fa-r-project{--fa: ""}.fa-delicious{--fa: ""}.fa-freebsd{--fa: ""}.fa-vuejs{--fa: ""}.fa-accusoft{--fa: ""}.fa-ioxhost{--fa: ""}.fa-fonticons-fi{--fa: ""}.fa-app-store{--fa: ""}.fa-cc-mastercard{--fa: ""}.fa-itunes-note{--fa: ""}.fa-golang{--fa: ""}.fa-kickstarter,.fa-square-kickstarter{--fa: ""}.fa-grav{--fa: ""}.fa-weibo{--fa: ""}.fa-uncharted{--fa: ""}.fa-firstdraft{--fa: ""}.fa-square-youtube,.fa-youtube-square{--fa: ""}.fa-wikipedia-w{--fa: ""}.fa-wpressr,.fa-rendact{--fa: ""}.fa-angellist{--fa: ""}.fa-galactic-republic{--fa: ""}.fa-nfc-directional{--fa: ""}.fa-skype{--fa: ""}.fa-joget{--fa: ""}.fa-fedora{--fa: ""}.fa-stripe-s{--fa: ""}.fa-meta{--fa: ""}.fa-laravel{--fa: ""}.fa-hotjar{--fa: ""}.fa-bluetooth-b{--fa: ""}.fa-square-letterboxd{--fa: ""}.fa-sticker-mule{--fa: ""}.fa-creative-commons-zero{--fa: ""}.fa-hips{--fa: ""}.fa-css{--fa: ""}.fa-behance{--fa: ""}.fa-reddit{--fa: ""}.fa-discord{--fa: ""}.fa-chrome{--fa: ""}.fa-app-store-ios{--fa: ""}.fa-cc-discover{--fa: ""}.fa-wpbeginner{--fa: ""}.fa-confluence{--fa: ""}.fa-shoelace{--fa: ""}.fa-mdb{--fa: ""}.fa-dochub{--fa: ""}.fa-accessible-icon{--fa: ""}.fa-ebay{--fa: ""}.fa-amazon{--fa: ""}.fa-unsplash{--fa: ""}.fa-yarn{--fa: ""}.fa-square-steam,.fa-steam-square{--fa: ""}.fa-500px{--fa: ""}.fa-square-vimeo,.fa-vimeo-square{--fa: ""}.fa-asymmetrik{--fa: ""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa: ""}.fa-gratipay{--fa: ""}.fa-apple{--fa: ""}.fa-hive{--fa: ""}.fa-gitkraken{--fa: ""}.fa-keybase{--fa: ""}.fa-apple-pay{--fa: ""}.fa-padlet{--fa: ""}.fa-amazon-pay{--fa: ""}.fa-square-github,.fa-github-square{--fa: ""}.fa-stumbleupon{--fa: ""}.fa-fedex{--fa: ""}.fa-phoenix-framework{--fa: ""}.fa-shopify{--fa: ""}.fa-neos{--fa: ""}.fa-square-threads{--fa: ""}.fa-hackerrank{--fa: ""}.fa-researchgate{--fa: ""}.fa-swift{--fa: ""}.fa-angular{--fa: ""}.fa-speakap{--fa: ""}.fa-angrycreative{--fa: ""}.fa-y-combinator{--fa: ""}.fa-empire{--fa: ""}.fa-envira{--fa: ""}.fa-google-scholar{--fa: ""}.fa-square-gitlab,.fa-gitlab-square{--fa: ""}.fa-studiovinari{--fa: ""}.fa-pied-piper{--fa: ""}.fa-wordpress{--fa: ""}.fa-product-hunt{--fa: ""}.fa-firefox{--fa: ""}.fa-linode{--fa: ""}.fa-goodreads{--fa: ""}.fa-square-odnoklassniki,.fa-odnoklassniki-square{--fa: ""}.fa-jsfiddle{--fa: ""}.fa-sith{--fa: ""}.fa-themeisle{--fa: ""}.fa-page4{--fa: ""}.fa-hashnode{--fa: ""}.fa-react{--fa: ""}.fa-cc-paypal{--fa: ""}.fa-squarespace{--fa: ""}.fa-cc-stripe{--fa: ""}.fa-creative-commons-share{--fa: ""}.fa-bitcoin{--fa: ""}.fa-keycdn{--fa: ""}.fa-opera{--fa: ""}.fa-itch-io{--fa: ""}.fa-umbraco{--fa: ""}.fa-galactic-senate{--fa: ""}.fa-ubuntu{--fa: ""}.fa-draft2digital{--fa: ""}.fa-stripe{--fa: ""}.fa-houzz{--fa: ""}.fa-gg{--fa: ""}.fa-dhl{--fa: ""}.fa-square-pinterest,.fa-pinterest-square{--fa: ""}.fa-xing{--fa: ""}.fa-blackberry{--fa: ""}.fa-creative-commons-pd{--fa: ""}.fa-playstation{--fa: ""}.fa-quinscape{--fa: ""}.fa-less{--fa: ""}.fa-blogger-b{--fa: ""}.fa-opencart{--fa: ""}.fa-vine{--fa: ""}.fa-signal-messenger{--fa: ""}.fa-paypal{--fa: ""}.fa-gitlab{--fa: ""}.fa-typo3{--fa: ""}.fa-reddit-alien{--fa: ""}.fa-yahoo{--fa: ""}.fa-dailymotion{--fa: ""}.fa-affiliatetheme{--fa: ""}.fa-pied-piper-pp{--fa: ""}.fa-bootstrap{--fa: ""}.fa-odnoklassniki{--fa: ""}.fa-nfc-symbol{--fa: ""}.fa-mintbit{--fa: ""}.fa-ethereum{--fa: ""}.fa-speaker-deck{--fa: ""}.fa-creative-commons-nc-eu{--fa: ""}.fa-patreon{--fa: ""}.fa-avianex{--fa: ""}.fa-ello{--fa: ""}.fa-gofore{--fa: ""}.fa-bimobject{--fa: ""}.fa-brave-reverse{--fa: ""}.fa-facebook-f{--fa: ""}.fa-square-google-plus,.fa-google-plus-square{--fa: ""}.fa-web-awesome{--fa: ""}.fa-mandalorian{--fa: ""}.fa-first-order-alt{--fa: ""}.fa-osi{--fa: ""}.fa-google-wallet{--fa: ""}.fa-d-and-d-beyond{--fa: ""}.fa-periscope{--fa: ""}.fa-fulcrum{--fa: ""}.fa-cloudscale{--fa: ""}.fa-forumbee{--fa: ""}.fa-mizuni{--fa: ""}.fa-schlix{--fa: ""}.fa-square-xing,.fa-xing-square{--fa: ""}.fa-bandcamp{--fa: ""}.fa-wpforms{--fa: ""}.fa-cloudversify{--fa: ""}.fa-usps{--fa: ""}.fa-megaport{--fa: ""}.fa-magento{--fa: ""}.fa-spotify{--fa: ""}.fa-optin-monster{--fa: ""}.fa-fly{--fa: ""}.fa-square-bluesky{--fa: ""}.fa-aviato{--fa: ""}.fa-itunes{--fa: ""}.fa-cuttlefish{--fa: ""}.fa-blogger{--fa: ""}.fa-flickr{--fa: ""}.fa-viber{--fa: ""}.fa-soundcloud{--fa: ""}.fa-digg{--fa: ""}.fa-tencent-weibo{--fa: ""}.fa-letterboxd{--fa: ""}.fa-symfony{--fa: ""}.fa-maxcdn{--fa: ""}.fa-etsy{--fa: ""}.fa-facebook-messenger{--fa: ""}.fa-audible{--fa: ""}.fa-think-peaks{--fa: ""}.fa-bilibili{--fa: ""}.fa-erlang{--fa: ""}.fa-x-twitter{--fa: ""}.fa-cotton-bureau{--fa: ""}.fa-dashcube{--fa: ""}.fa-42-group,.fa-innosoft{--fa: ""}.fa-stack-exchange{--fa: ""}.fa-elementor{--fa: ""}.fa-square-pied-piper,.fa-pied-piper-square{--fa: ""}.fa-creative-commons-nd{--fa: ""}.fa-palfed{--fa: ""}.fa-superpowers{--fa: ""}.fa-resolving{--fa: ""}.fa-xbox{--fa: ""}.fa-square-web-awesome-stroke{--fa: ""}.fa-searchengin{--fa: ""}.fa-tiktok{--fa: ""}.fa-square-facebook,.fa-facebook-square{--fa: ""}.fa-renren{--fa: ""}.fa-linux{--fa: ""}.fa-glide{--fa: ""}.fa-linkedin{--fa: ""}.fa-hubspot{--fa: ""}.fa-deploydog{--fa: ""}.fa-twitch{--fa: ""}.fa-flutter{--fa: ""}.fa-ravelry{--fa: ""}.fa-mixer{--fa: ""}.fa-square-lastfm,.fa-lastfm-square{--fa: ""}.fa-vimeo{--fa: ""}.fa-mendeley{--fa: ""}.fa-uniregistry{--fa: ""}.fa-figma{--fa: ""}.fa-creative-commons-remix{--fa: ""}.fa-cc-amazon-pay{--fa: ""}.fa-dropbox{--fa: ""}.fa-instagram{--fa: ""}.fa-cmplid{--fa: ""}.fa-upwork{--fa: ""}.fa-facebook{--fa: ""}.fa-gripfire{--fa: ""}.fa-jedi-order{--fa: ""}.fa-uikit{--fa: ""}.fa-fort-awesome-alt{--fa: ""}.fa-phabricator{--fa: ""}.fa-ussunnah{--fa: ""}.fa-earlybirds{--fa: ""}.fa-trade-federation{--fa: ""}.fa-autoprefixer{--fa: ""}.fa-whatsapp{--fa: ""}.fa-square-upwork{--fa: ""}.fa-slideshare{--fa: ""}.fa-google-play{--fa: ""}.fa-viadeo{--fa: ""}.fa-line{--fa: ""}.fa-google-drive{--fa: ""}.fa-servicestack{--fa: ""}.fa-simplybuilt{--fa: ""}.fa-bitbucket{--fa: ""}.fa-imdb{--fa: ""}.fa-deezer{--fa: ""}.fa-raspberry-pi{--fa: ""}.fa-jira{--fa: ""}.fa-docker{--fa: ""}.fa-screenpal{--fa: ""}.fa-bluetooth{--fa: ""}.fa-gitter{--fa: ""}.fa-d-and-d{--fa: ""}.fa-microblog{--fa: ""}.fa-cc-diners-club{--fa: ""}.fa-gg-circle{--fa: ""}.fa-pied-piper-hat{--fa: ""}.fa-kickstarter-k{--fa: ""}.fa-yandex{--fa: ""}.fa-readme{--fa: ""}.fa-html5{--fa: ""}.fa-sellsy{--fa: ""}.fa-square-web-awesome{--fa: ""}.fa-sass{--fa: ""}.fa-wirsindhandwerk,.fa-wsh{--fa: ""}.fa-buromobelexperte{--fa: ""}.fa-salesforce{--fa: ""}.fa-octopus-deploy{--fa: ""}.fa-medapps{--fa: ""}.fa-ns8{--fa: ""}.fa-pinterest-p{--fa: ""}.fa-apper{--fa: ""}.fa-fort-awesome{--fa: ""}.fa-waze{--fa: ""}.fa-bluesky{--fa: ""}.fa-cc-jcb{--fa: ""}.fa-snapchat,.fa-snapchat-ghost{--fa: ""}.fa-fantasy-flight-games{--fa: ""}.fa-rust{--fa: ""}.fa-wix{--fa: ""}.fa-square-behance,.fa-behance-square{--fa: ""}.fa-supple{--fa: ""}.fa-webflow{--fa: ""}.fa-rebel{--fa: ""}.fa-css3{--fa: ""}.fa-staylinked{--fa: ""}.fa-kaggle{--fa: ""}.fa-space-awesome{--fa: ""}.fa-deviantart{--fa: ""}.fa-cpanel{--fa: ""}.fa-goodreads-g{--fa: ""}.fa-square-git,.fa-git-square{--fa: ""}.fa-square-tumblr,.fa-tumblr-square{--fa: ""}.fa-trello{--fa: ""}.fa-creative-commons-nc-jp{--fa: ""}.fa-get-pocket{--fa: ""}.fa-perbyte{--fa: ""}.fa-grunt{--fa: ""}.fa-weebly{--fa: ""}.fa-connectdevelop{--fa: ""}.fa-leanpub{--fa: ""}.fa-black-tie{--fa: ""}.fa-themeco{--fa: ""}.fa-python{--fa: ""}.fa-android{--fa: ""}.fa-bots{--fa: ""}.fa-free-code-camp{--fa: ""}.fa-hornbill{--fa: ""}.fa-js{--fa: ""}.fa-ideal{--fa: ""}.fa-git{--fa: ""}.fa-dev{--fa: ""}.fa-sketch{--fa: ""}.fa-yandex-international{--fa: ""}.fa-cc-amex{--fa: ""}.fa-uber{--fa: ""}.fa-github{--fa: ""}.fa-php{--fa: ""}.fa-alipay{--fa: ""}.fa-youtube{--fa: ""}.fa-skyatlas{--fa: ""}.fa-firefox-browser{--fa: ""}.fa-replyd{--fa: ""}.fa-suse{--fa: ""}.fa-jenkins{--fa: ""}.fa-twitter{--fa: ""}.fa-rockrms{--fa: ""}.fa-pinterest{--fa: ""}.fa-buffer{--fa: ""}.fa-npm{--fa: ""}.fa-yammer{--fa: ""}.fa-btc{--fa: ""}.fa-dribbble{--fa: ""}.fa-stumbleupon-circle{--fa: ""}.fa-internet-explorer{--fa: ""}.fa-stubber{--fa: ""}.fa-telegram,.fa-telegram-plane{--fa: ""}.fa-old-republic{--fa: ""}.fa-odysee{--fa: ""}.fa-square-whatsapp,.fa-whatsapp-square{--fa: ""}.fa-node-js{--fa: ""}.fa-edge-legacy{--fa: ""}.fa-slack,.fa-slack-hash{--fa: ""}.fa-medrt{--fa: ""}.fa-usb{--fa: ""}.fa-tumblr{--fa: ""}.fa-vaadin{--fa: ""}.fa-quora{--fa: ""}.fa-square-x-twitter{--fa: ""}.fa-reacteurope{--fa: ""}.fa-medium,.fa-medium-m{--fa: ""}.fa-amilia{--fa: ""}.fa-mixcloud{--fa: ""}.fa-flipboard{--fa: ""}.fa-viacoin{--fa: ""}.fa-critical-role{--fa: ""}.fa-sitrox{--fa: ""}.fa-discourse{--fa: ""}.fa-joomla{--fa: ""}.fa-mastodon{--fa: ""}.fa-airbnb{--fa: ""}.fa-wolf-pack-battalion{--fa: ""}.fa-buy-n-large{--fa: ""}.fa-gulp{--fa: ""}.fa-creative-commons-sampling-plus{--fa: ""}.fa-strava{--fa: ""}.fa-ember{--fa: ""}.fa-canadian-maple-leaf{--fa: ""}.fa-teamspeak{--fa: ""}.fa-pushed{--fa: ""}.fa-wordpress-simple{--fa: ""}.fa-nutritionix{--fa: ""}.fa-wodu{--fa: ""}.fa-google-pay{--fa: ""}.fa-intercom{--fa: ""}.fa-zhihu{--fa: ""}.fa-korvue{--fa: ""}.fa-pix{--fa: ""}.fa-steam-symbol{--fa: ""}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}.far,.fa-regular{font-weight:400}:root,:host{--fa-style-family-classic: "Font Awesome 6 Free";--fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}.fas,.fa-solid{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-solid-900-CTAAxXor.woff2) format("woff2"),url(/admin-next/assets/fa-solid-900-D0aA9rwL.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-brands-400-D_cYUPeE.woff2) format("woff2"),url(/admin-next/assets/fa-brands-400-D1LuMI3I.ttf) format("truetype")}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-regular-400-BjRzuEpd.woff2) format("woff2"),url(/admin-next/assets/fa-regular-400-DZaxPHgR.ttf) format("truetype");unicode-range:U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC}@font-face{font-family:FontAwesome;font-display:block;src:url(/admin-next/assets/fa-v4compatibility-C9RhG_FT.woff2) format("woff2"),url(/admin-next/assets/fa-v4compatibility-CCth-dXg.ttf) format("truetype");unicode-range:U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 50%,var(--accent-color) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden}body,div,button,input,select,textarea,table,tr,td,th,span,p,h1,h2,h3,h4,h5,h6{transition:all .3s cubic-bezier(.4,0,.2,1)}.el-button--primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:transparent}.el-button--primary:hover,.el-button--primary:focus{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);opacity:.9}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-0\.5:after{content:var(--tw-content);top:.125rem}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:h-5:after{content:var(--tw-content);height:1.25rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:w-5:after{content:var(--tw-content);width:1.25rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.after\:shadow-sm:after{content:var(--tw-content);--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:transition-transform:after{content:var(--tw-content);transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:duration-200:after{content:var(--tw-content);transition-duration:.2s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-amber-400:hover{--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.hover\:border-blue-300:hover{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.hover\:border-blue-400:hover{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.hover\:border-cyan-300:hover{--tw-border-opacity: 1;border-color:rgb(103 232 249 / var(--tw-border-opacity, 1))}.hover\:border-cyan-400:hover{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.hover\:border-emerald-300:hover{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.hover\:border-emerald-400:hover{--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.hover\:border-gray-400:hover{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.hover\:border-indigo-300:hover{--tw-border-opacity: 1;border-color:rgb(165 180 252 / var(--tw-border-opacity, 1))}.hover\:border-indigo-400:hover{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.hover\:border-orange-400:hover{--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.hover\:border-purple-300:hover{--tw-border-opacity: 1;border-color:rgb(216 180 254 / var(--tw-border-opacity, 1))}.hover\:border-purple-400:hover{--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.hover\:border-red-300:hover{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.hover\:border-rose-300:hover{--tw-border-opacity: 1;border-color:rgb(253 164 175 / var(--tw-border-opacity, 1))}.hover\:border-rose-400:hover{--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.hover\:border-teal-400:hover{--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-200:hover{--tw-bg-opacity: 1;background-color:rgb(253 230 138 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-50\/50:hover{background-color:#fffbeb80}.hover\:bg-amber-700:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-200:hover{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50:hover{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}.hover\:bg-blue-50\/60:hover{background-color:#eff6ff99}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-100:hover{--tw-bg-opacity: 1;background-color:rgb(207 250 254 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-200:hover{--tw-bg-opacity: 1;background-color:rgb(165 243 252 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50:hover{--tw-bg-opacity: 1;background-color:rgb(236 254 255 / var(--tw-bg-opacity, 1))}.hover\:bg-cyan-50\/50:hover{background-color:#ecfeff80}.hover\:bg-emerald-200:hover{--tw-bg-opacity: 1;background-color:rgb(167 243 208 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-50\/50:hover{background-color:#ecfdf580}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.hover\:bg-green-100:hover{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.hover\:bg-green-200:hover{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity, 1))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-100:hover{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-200:hover{--tw-bg-opacity: 1;background-color:rgb(199 210 254 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50:hover{--tw-bg-opacity: 1;background-color:rgb(238 242 255 / var(--tw-bg-opacity, 1))}.hover\:bg-indigo-50\/50:hover{background-color:#eef2ff80}.hover\:bg-indigo-700:hover{--tw-bg-opacity: 1;background-color:rgb(67 56 202 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-100:hover{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 215 170 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50:hover{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.hover\:bg-orange-50\/50:hover{background-color:#fff7ed80}.hover\:bg-pink-200:hover{--tw-bg-opacity: 1;background-color:rgb(251 207 232 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-200:hover{--tw-bg-opacity: 1;background-color:rgb(233 213 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50:hover{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-50\/50:hover{background-color:#faf5ff80}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-50\/50:hover{background-color:#fff1f280}.hover\:bg-teal-200:hover{--tw-bg-opacity: 1;background-color:rgb(153 246 228 / var(--tw-bg-opacity, 1))}.hover\:bg-teal-50\/50:hover{background-color:#f0fdfa80}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:bg-white\/50:hover{background-color:#ffffff80}.hover\:bg-yellow-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 240 138 / var(--tw-bg-opacity, 1))}.hover\:from-blue-600:hover{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-blue-700:hover{--tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(29 78 216 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-green-600:hover{--tw-gradient-from: #16a34a var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 163 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-600:hover{--tw-gradient-from: #dc2626 var(--tw-gradient-from-position);--tw-gradient-to: rgb(220 38 38 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-700:hover{--tw-gradient-from: #b91c1c var(--tw-gradient-from-position);--tw-gradient-to: rgb(185 28 28 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-yellow-600:hover{--tw-gradient-from: #ca8a04 var(--tw-gradient-from-position);--tw-gradient-to: rgb(202 138 4 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-blue-700:hover{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.hover\:to-blue-800:hover{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.hover\:to-green-700:hover{--tw-gradient-to: #15803d var(--tw-gradient-to-position)}.hover\:to-indigo-600:hover{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.hover\:to-indigo-700:hover{--tw-gradient-to: #4338ca var(--tw-gradient-to-position)}.hover\:to-orange-600:hover{--tw-gradient-to: #ea580c var(--tw-gradient-to-position)}.hover\:to-red-700:hover{--tw-gradient-to: #b91c1c var(--tw-gradient-to-position)}.hover\:to-red-800:hover{--tw-gradient-to: #991b1b var(--tw-gradient-to-position)}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-blue-900:hover{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.hover\:text-cyan-700:hover{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.hover\:text-green-600:hover{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.hover\:text-green-700:hover{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.hover\:text-green-900:hover{--tw-text-opacity: 1;color:rgb(20 83 45 / var(--tw-text-opacity, 1))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity, 1))}.hover\:text-orange-700:hover{--tw-text-opacity: 1;color:rgb(194 65 12 / var(--tw-text-opacity, 1))}.hover\:text-orange-900:hover{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.hover\:text-purple-700:hover{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.hover\:text-purple-900:hover{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-red-800:hover{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.hover\:text-red-900:hover{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-yellow-700:hover{--tw-text-opacity: 1;color:rgb(161 98 7 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow:hover{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-sm:hover{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-10:focus{z-index:10}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:border-cyan-500:focus{--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.focus\:border-green-500:focus{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity, 1))}.focus\:border-indigo-400:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.focus\:border-purple-500:focus{--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.focus\:border-teal-500:focus{--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.focus\:border-transparent:focus{border-color:transparent}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500\/20:focus{--tw-ring-color: rgb(59 130 246 / .2)}.focus\:ring-cyan-500\/20:focus{--tw-ring-color: rgb(6 182 212 / .2)}.focus\:ring-green-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.focus\:ring-green-500\/20:focus{--tw-ring-color: rgb(34 197 94 / .2)}.focus\:ring-indigo-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(233 213 255 / var(--tw-ring-opacity, 1))}.focus\:ring-purple-500\/20:focus{--tw-ring-color: rgb(168 85 247 / .2)}.focus\:ring-red-500\/20:focus{--tw-ring-color: rgb(239 68 68 / .2)}.focus\:ring-teal-500\/20:focus{--tw-ring-color: rgb(20 184 166 / .2)}.focus\:ring-offset-0:focus{--tw-ring-offset-width: 0px}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-purple-500\/60:focus-visible{--tw-ring-color: rgb(168 85 247 / .6)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:from-gray-400:disabled{--tw-gradient-from: #9ca3af var(--tw-gradient-from-position);--tw-gradient-to: rgb(156 163 175 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.disabled\:to-gray-500:disabled{--tw-gradient-to: #6b7280 var(--tw-gradient-to-position)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:hover\:shadow-sm:hover:disabled{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:scale-110{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-20{opacity:.2}.group:hover .group-hover\:opacity-30{opacity:.3}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(139\,92\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(139,92,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(148\,163\,184\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(148,163,184,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(16\,185\,129\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(16,185,129,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(56\,189\,248\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(56,189,248,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:shadow-\[0_14px_30px_rgba\(59\,130\,246\,0\.22\)\]{--tw-shadow: 0 14px 30px rgba(59,130,246,.22);--tw-shadow-colored: 0 14px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.peer:checked~.peer-checked\:bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.peer:checked~.peer-checked\:after\:translate-x-4:after{content:var(--tw-content);--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}.peer:focus~.peer-focus\:ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.peer:focus~.peer-focus\:ring-blue-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-orange-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(253 186 116 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-purple-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(216 180 254 / var(--tw-ring-opacity, 1))}.peer:focus~.peer-focus\:ring-teal-300{--tw-ring-opacity: 1;--tw-ring-color: rgb(94 234 212 / var(--tw-ring-opacity, 1))}.dark\:divide-gray-600:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(75 85 99 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-600\/50:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#4b556380}.dark\:divide-gray-700:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(55 65 81 / var(--tw-divide-opacity, 1))}.dark\:divide-gray-800:is(.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(31 41 55 / var(--tw-divide-opacity, 1))}.dark\:border:is(.dark *){border-width:1px}.dark\:border-amber-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 191 36 / var(--tw-border-opacity, 1))}.dark\:border-amber-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-amber-500\/20:is(.dark *){border-color:#f59e0b33}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:border-blue-500\/20:is(.dark *){border-color:#3b82f633}.dark\:border-blue-500\/30:is(.dark *){border-color:#3b82f64d}.dark\:border-blue-500\/40:is(.dark *){border-color:#3b82f666}.dark\:border-blue-500\/50:is(.dark *){border-color:#3b82f680}.dark\:border-blue-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-cyan-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity, 1))}.dark\:border-cyan-500\/40:is(.dark *){border-color:#06b6d466}.dark\:border-cyan-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(8 145 178 / var(--tw-border-opacity, 1))}.dark\:border-cyan-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(14 116 144 / var(--tw-border-opacity, 1))}.dark\:border-emerald-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(52 211 153 / var(--tw-border-opacity, 1))}.dark\:border-emerald-500\/20:is(.dark *){border-color:#10b98133}.dark\:border-emerald-500\/40:is(.dark *){border-color:#10b98166}.dark\:border-gray-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-600\/30:is(.dark *){border-color:#4b55634d}.dark\:border-gray-600\/50:is(.dark *){border-color:#4b556380}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/50:is(.dark *){border-color:#37415180}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-gray-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-green-500\/30:is(.dark *){border-color:#22c55e4d}.dark\:border-green-500\/40:is(.dark *){border-color:#22c55e66}.dark\:border-green-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-indigo-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1))}.dark\:border-indigo-500\/40:is(.dark *){border-color:#6366f166}.dark\:border-indigo-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(67 56 202 / var(--tw-border-opacity, 1))}.dark\:border-orange-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 146 60 / var(--tw-border-opacity, 1))}.dark\:border-orange-500\/40:is(.dark *){border-color:#f9731666}.dark\:border-orange-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(234 88 12 / var(--tw-border-opacity, 1))}.dark\:border-orange-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(194 65 12 / var(--tw-border-opacity, 1))}.dark\:border-purple-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:border-purple-500\/40:is(.dark *){border-color:#a855f766}.dark\:border-purple-600\/60:is(.dark *){border-color:#9333ea99}.dark\:border-purple-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(126 34 206 / var(--tw-border-opacity, 1))}.dark\:border-purple-700\/70:is(.dark *){border-color:#7e22ceb3}.dark\:border-red-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity, 1))}.dark\:border-red-500\/20:is(.dark *){border-color:#ef444433}.dark\:border-red-500\/30:is(.dark *){border-color:#ef44444d}.dark\:border-red-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-red-900\/60:is(.dark *){border-color:#7f1d1d99}.dark\:border-rose-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(251 113 133 / var(--tw-border-opacity, 1))}.dark\:border-rose-500\/40:is(.dark *){border-color:#f43f5e66}.dark\:border-sky-500\/40:is(.dark *){border-color:#0ea5e966}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-slate-700\/60:is(.dark *){border-color:#33415599}.dark\:border-teal-400:is(.dark *){--tw-border-opacity: 1;border-color:rgb(45 212 191 / var(--tw-border-opacity, 1))}.dark\:border-teal-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(15 118 110 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/40:is(.dark *){border-color:#8b5cf666}.dark\:border-white\/10:is(.dark *){border-color:#ffffff1a}.dark\:border-yellow-500\/40:is(.dark *){border-color:#eab30866}.dark\:border-yellow-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(161 98 7 / var(--tw-border-opacity, 1))}.dark\:bg-amber-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(252 211 77 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-amber-900\/30:is(.dark *){background-color:#78350f4d}.dark\:bg-amber-900\/40:is(.dark *){background-color:#78350f66}.dark\:bg-blue-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(96 165 250 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/20:is(.dark *){background-color:#3b82f633}.dark\:bg-blue-500\/30:is(.dark *){background-color:#3b82f64d}.dark\:bg-blue-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 58 138 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-blue-900\/50:is(.dark *){background-color:#1e3a8a80}.dark\:bg-blue-950\/30:is(.dark *){background-color:#1725544d}.dark\:bg-blue-950\/40:is(.dark *){background-color:#17255466}.dark\:bg-cyan-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity, 1))}.dark\:bg-cyan-900\/30:is(.dark *){background-color:#164e634d}.dark\:bg-cyan-900\/40:is(.dark *){background-color:#164e6366}.dark\:bg-emerald-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-500\/20:is(.dark *){background-color:#10b98133}.dark\:bg-emerald-900\/20:is(.dark *){background-color:#064e3b33}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#064e3b4d}.dark\:bg-emerald-900\/40:is(.dark *){background-color:#064e3b66}.dark\:bg-emerald-950\/40:is(.dark *){background-color:#022c2266}.dark\:bg-gray-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-600\/50:is(.dark *){background-color:#4b556380}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-700\/30:is(.dark *){background-color:#3741514d}.dark\:bg-gray-700\/50:is(.dark *){background-color:#37415180}.dark\:bg-gray-700\/60:is(.dark *){background-color:#37415199}.dark\:bg-gray-700\/70:is(.dark *){background-color:#374151b3}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800\/20:is(.dark *){background-color:#1f293733}.dark\:bg-gray-800\/40:is(.dark *){background-color:#1f293766}.dark\:bg-gray-800\/50:is(.dark *){background-color:#1f293780}.dark\:bg-gray-800\/60:is(.dark *){background-color:#1f293799}.dark\:bg-gray-800\/80:is(.dark *){background-color:#1f2937cc}.dark\:bg-gray-800\/90:is(.dark *){background-color:#1f2937e6}.dark\:bg-gray-800\/95:is(.dark *){background-color:#1f2937f2}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900\/50:is(.dark *){background-color:#11182780}.dark\:bg-gray-900\/70:is(.dark *){background-color:#111827b3}.dark\:bg-gray-900\/80:is(.dark *){background-color:#111827cc}.dark\:bg-gray-900\/95:is(.dark *){background-color:#111827f2}.dark\:bg-green-500\/20:is(.dark *){background-color:#22c55e33}.dark\:bg-green-500\/30:is(.dark *){background-color:#22c55e4d}.dark\:bg-green-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(20 83 45 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-green-900\/50:is(.dark *){background-color:#14532d80}.dark\:bg-green-950\/30:is(.dark *){background-color:#052e164d}.dark\:bg-indigo-500\/20:is(.dark *){background-color:#6366f133}.dark\:bg-indigo-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(49 46 129 / var(--tw-bg-opacity, 1))}.dark\:bg-indigo-900\/20:is(.dark *){background-color:#312e8133}.dark\:bg-indigo-900\/30:is(.dark *){background-color:#312e814d}.dark\:bg-indigo-950\/30:is(.dark *){background-color:#1e1b4b4d}.dark\:bg-orange-500\/20:is(.dark *){background-color:#f9731633}.dark\:bg-orange-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(124 45 18 / var(--tw-bg-opacity, 1))}.dark\:bg-orange-900\/30:is(.dark *){background-color:#7c2d124d}.dark\:bg-orange-950\/30:is(.dark *){background-color:#4314074d}.dark\:bg-pink-900\/30:is(.dark *){background-color:#8318434d}.dark\:bg-purple-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(192 132 252 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-500\/10:is(.dark *){background-color:#a855f71a}.dark\:bg-purple-500\/20:is(.dark *){background-color:#a855f733}.dark\:bg-purple-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(107 33 168 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-800\/20:is(.dark *){background-color:#6b21a833}.dark\:bg-purple-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(88 28 135 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-900\/20:is(.dark *){background-color:#581c8733}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-purple-950\/20:is(.dark *){background-color:#3b076433}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-500\/30:is(.dark *){background-color:#ef44444d}.dark\:bg-red-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-red-900\/40:is(.dark *){background-color:#7f1d1d66}.dark\:bg-rose-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.dark\:bg-rose-900\/30:is(.dark *){background-color:#8813374d}.dark\:bg-rose-900\/40:is(.dark *){background-color:#88133766}.dark\:bg-sky-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.dark\:bg-sky-500\/20:is(.dark *){background-color:#0ea5e933}.dark\:bg-sky-950\/40:is(.dark *){background-color:#082f4966}.dark\:bg-slate-500:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900\/70:is(.dark *){background-color:#0f172ab3}.dark\:bg-teal-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 94 89 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-900\/20:is(.dark *){background-color:#134e4a33}.dark\:bg-teal-900\/30:is(.dark *){background-color:#134e4a4d}.dark\:bg-violet-400:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(167 139 250 / var(--tw-bg-opacity, 1))}.dark\:bg-violet-950\/40:is(.dark *){background-color:#2e106566}.dark\:bg-yellow-600:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(202 138 4 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(113 63 18 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-900\/30:is(.dark *){background-color:#713f124d}.dark\:bg-yellow-900\/40:is(.dark *){background-color:#713f1266}.dark\:bg-yellow-950\/30:is(.dark *){background-color:#4220064d}.dark\:from-amber-400:is(.dark *){--tw-gradient-from: #fbbf24 var(--tw-gradient-from-position);--tw-gradient-to: rgb(251 191 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-amber-900\/20:is(.dark *){--tw-gradient-from: rgb(120 53 15 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(120 53 15 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-600\/20:is(.dark *){--tw-gradient-from: rgb(37 99 235 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/20:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/40:is(.dark *){--tw-gradient-from: rgb(30 58 138 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-950\/30:is(.dark *){--tw-gradient-from: rgb(23 37 84 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(23 37 84 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-cyan-900\/20:is(.dark *){--tw-gradient-from: rgb(22 78 99 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(22 78 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-400:is(.dark *){--tw-gradient-from: #34d399 var(--tw-gradient-from-position);--tw-gradient-to: rgb(52 211 153 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/20:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-900\/40:is(.dark *){--tw-gradient-from: rgb(6 78 59 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-700:is(.dark *){--tw-gradient-from: #374151 var(--tw-gradient-from-position);--tw-gradient-to: rgb(55 65 81 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-800:is(.dark *){--tw-gradient-from: #1f2937 var(--tw-gradient-from-position);--tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-gray-900\/30:is(.dark *){--tw-gradient-from: rgb(17 24 39 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-900\/20:is(.dark *){--tw-gradient-from: rgb(20 83 45 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 83 45 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-950\/30:is(.dark *){--tw-gradient-from: rgb(5 46 22 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(5 46 22 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-indigo-900\/20:is(.dark *){--tw-gradient-from: rgb(49 46 129 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(49 46 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-orange-950\/30:is(.dark *){--tw-gradient-from: rgb(67 20 7 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(67 20 7 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-500\/70:is(.dark *){--tw-gradient-from: rgb(168 85 247 / .7) var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/20:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-900\/40:is(.dark *){--tw-gradient-from: rgb(88 28 135 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-purple-950\/30:is(.dark *){--tw-gradient-from: rgb(59 7 100 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 7 100 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-500:is(.dark *){--tw-gradient-from: #f43f5e var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-rose-900\/20:is(.dark *){--tw-gradient-from: rgb(136 19 55 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(136 19 55 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-400:is(.dark *){--tw-gradient-from: #38bdf8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(56 189 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-500:is(.dark *){--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-sky-900\/40:is(.dark *){--tw-gradient-from: rgb(12 74 110 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-teal-900\/20:is(.dark *){--tw-gradient-from: rgb(19 78 74 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(19 78 74 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-400:is(.dark *){--tw-gradient-from: #a78bfa var(--tw-gradient-from-position);--tw-gradient-to: rgb(167 139 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-900\/40:is(.dark *){--tw-gradient-from: rgb(76 29 149 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-900\/20:is(.dark *){--tw-gradient-from: rgb(113 63 18 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(113 63 18 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-yellow-950\/30:is(.dark *){--tw-gradient-from: rgb(66 32 6 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(66 32 6 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-blue-500:is(.dark *){--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #3b82f6 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-blue-900\/20:is(.dark *){--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(30 58 138 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-cyan-400:is(.dark *){--tw-gradient-to: rgb(34 211 238 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #22d3ee var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-500:is(.dark *){--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #10b981 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(6 78 59 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-600:is(.dark *){--tw-gradient-to: rgb(75 85 99 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #4b5563 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-gray-900\/10:is(.dark *){--tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(17 24 39 / .1) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-orange-400:is(.dark *){--tw-gradient-to: rgb(251 146 60 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fb923c var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-500:is(.dark *){--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #a855f7 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-600\/70:is(.dark *){--tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(147 51 234 / .7) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(88 28 135 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-red-500:is(.dark *){--tw-gradient-to: rgb(239 68 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #ef4444 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(12 74 110 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-violet-900\/20:is(.dark *){--tw-gradient-to: rgb(76 29 149 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(76 29 149 / .2) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-amber-500:is(.dark *){--tw-gradient-to: #f59e0b var(--tw-gradient-to-position)}.dark\:to-amber-950\/30:is(.dark *){--tw-gradient-to: rgb(69 26 3 / .3) var(--tw-gradient-to-position)}.dark\:to-blue-500:is(.dark *){--tw-gradient-to: #3b82f6 var(--tw-gradient-to-position)}.dark\:to-blue-800\/20:is(.dark *){--tw-gradient-to: rgb(30 64 175 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-500:is(.dark *){--tw-gradient-to: #06b6d4 var(--tw-gradient-to-position)}.dark\:to-cyan-900\/20:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .2) var(--tw-gradient-to-position)}.dark\:to-cyan-900\/30:is(.dark *){--tw-gradient-to: rgb(22 78 99 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-800\/30:is(.dark *){--tw-gradient-to: rgb(6 95 70 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/20:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .2) var(--tw-gradient-to-position)}.dark\:to-emerald-900\/30:is(.dark *){--tw-gradient-to: rgb(6 78 59 / .3) var(--tw-gradient-to-position)}.dark\:to-emerald-950\/30:is(.dark *){--tw-gradient-to: rgb(2 44 34 / .3) var(--tw-gradient-to-position)}.dark\:to-fuchsia-500:is(.dark *){--tw-gradient-to: #d946ef var(--tw-gradient-to-position)}.dark\:to-fuchsia-900\/30:is(.dark *){--tw-gradient-to: rgb(112 26 117 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-700:is(.dark *){--tw-gradient-to: #374151 var(--tw-gradient-to-position)}.dark\:to-gray-800:is(.dark *){--tw-gradient-to: #1f2937 var(--tw-gradient-to-position)}.dark\:to-gray-800\/30:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .3) var(--tw-gradient-to-position)}.dark\:to-gray-800\/90:is(.dark *){--tw-gradient-to: rgb(31 41 55 / .9) var(--tw-gradient-to-position)}.dark\:to-green-800\/20:is(.dark *){--tw-gradient-to: rgb(22 101 52 / .2) var(--tw-gradient-to-position)}.dark\:to-green-900\/20:is(.dark *){--tw-gradient-to: rgb(20 83 45 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-500\/70:is(.dark *){--tw-gradient-to: rgb(99 102 241 / .7) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/20:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .2) var(--tw-gradient-to-position)}.dark\:to-indigo-900\/30:is(.dark *){--tw-gradient-to: rgb(49 46 129 / .3) var(--tw-gradient-to-position)}.dark\:to-indigo-950\/30:is(.dark *){--tw-gradient-to: rgb(30 27 75 / .3) var(--tw-gradient-to-position)}.dark\:to-orange-900\/20:is(.dark *){--tw-gradient-to: rgb(124 45 18 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-900\/20:is(.dark *){--tw-gradient-to: rgb(131 24 67 / .2) var(--tw-gradient-to-position)}.dark\:to-pink-950\/30:is(.dark *){--tw-gradient-to: rgb(80 7 36 / .3) var(--tw-gradient-to-position)}.dark\:to-purple-600\/20:is(.dark *){--tw-gradient-to: rgb(147 51 234 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-800\/20:is(.dark *){--tw-gradient-to: rgb(107 33 168 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/20:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .2) var(--tw-gradient-to-position)}.dark\:to-purple-900\/40:is(.dark *){--tw-gradient-to: rgb(88 28 135 / .4) var(--tw-gradient-to-position)}.dark\:to-red-950\/30:is(.dark *){--tw-gradient-to: rgb(69 10 10 / .3) var(--tw-gradient-to-position)}.dark\:to-rose-600:is(.dark *){--tw-gradient-to: #e11d48 var(--tw-gradient-to-position)}.dark\:to-sky-900\/20:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .2) var(--tw-gradient-to-position)}.dark\:to-sky-900\/30:is(.dark *){--tw-gradient-to: rgb(12 74 110 / .3) var(--tw-gradient-to-position)}.dark\:to-slate-800:is(.dark *){--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.dark\:to-teal-500:is(.dark *){--tw-gradient-to: #14b8a6 var(--tw-gradient-to-position)}.dark\:to-teal-900\/20:is(.dark *){--tw-gradient-to: rgb(19 78 74 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-800\/20:is(.dark *){--tw-gradient-to: rgb(133 77 14 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-900\/20:is(.dark *){--tw-gradient-to: rgb(113 63 18 / .2) var(--tw-gradient-to-position)}.dark\:to-yellow-950\/30:is(.dark *){--tw-gradient-to: rgb(66 32 6 / .3) var(--tw-gradient-to-position)}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-100:is(.dark *){--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-200:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is(.dark *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-gray-600:is(.dark *){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.dark\:text-gray-800:is(.dark *){--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.dark\:text-gray-900:is(.dark *){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is(.dark *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-indigo-300:is(.dark *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-indigo-400:is(.dark *){--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-orange-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-purple-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-200\/70:is(.dark *){color:#e9d5ffb3}.dark\:text-purple-300:is(.dark *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-rose-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-sky-300:is(.dark *){--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-teal-300:is(.dark *){--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.dark\:text-teal-400:is(.dark *){--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-yellow-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.dark\:text-yellow-300:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-400:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:placeholder-gray-500:is(.dark *)::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity, 1))}.dark\:shadow-2xl:is(.dark *){--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){--tw-shadow: 0 12px 28px rgba(0,0,0,.45);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-xl:is(.dark *){--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-blue-500\/40:is(.dark *){--tw-shadow-color: rgb(59 130 246 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:ring-amber-500\/20:is(.dark *){--tw-ring-color: rgb(245 158 11 / .2)}.dark\:ring-blue-500\/20:is(.dark *){--tw-ring-color: rgb(59 130 246 / .2)}.dark\:ring-emerald-500\/20:is(.dark *){--tw-ring-color: rgb(16 185 129 / .2)}.dark\:ring-purple-400\/30:is(.dark *){--tw-ring-color: rgb(192 132 252 / .3)}.dark\:ring-white\/10:is(.dark *){--tw-ring-color: rgb(255 255 255 / .1)}.dark\:placeholder\:text-gray-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-gray-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:after\:bg-gray-300:is(.dark *):after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.dark\:hover\:border-amber-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:hover\:border-blue-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:hover\:border-cyan-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(6 182 212 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity, 1))}.dark\:hover\:border-emerald-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(5 150 105 / var(--tw-border-opacity, 1))}.dark\:hover\:border-gray-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:hover\:border-indigo-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(79 70 229 / var(--tw-border-opacity, 1))}.dark\:hover\:border-orange-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(249 115 22 / var(--tw-border-opacity, 1))}.dark\:hover\:border-purple-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(168 85 247 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(244 63 94 / var(--tw-border-opacity, 1))}.dark\:hover\:border-rose-600:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(225 29 72 / var(--tw-border-opacity, 1))}.dark\:hover\:border-teal-500:hover:is(.dark *){--tw-border-opacity: 1;border-color:rgb(20 184 166 / var(--tw-border-opacity, 1))}.dark\:hover\:bg-amber-800\/50:hover:is(.dark *){background-color:#92400e80}.dark\:hover\:bg-amber-900\/20:hover:is(.dark *){background-color:#78350f33}.dark\:hover\:bg-amber-900\/50:hover:is(.dark *){background-color:#78350f80}.dark\:hover\:bg-blue-500\/20:hover:is(.dark *){background-color:#3b82f633}.dark\:hover\:bg-blue-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 64 175 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-blue-900\/20:hover:is(.dark *){background-color:#1e3a8a33}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-blue-900\/50:hover:is(.dark *){background-color:#1e3a8a80}.dark\:hover\:bg-blue-900\/70:hover:is(.dark *){background-color:#1e3a8ab3}.dark\:hover\:bg-cyan-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-cyan-800\/50:hover:is(.dark *){background-color:#155e7580}.dark\:hover\:bg-cyan-900\/20:hover:is(.dark *){background-color:#164e6333}.dark\:hover\:bg-cyan-900\/50:hover:is(.dark *){background-color:#164e6380}.dark\:hover\:bg-cyan-900\/60:hover:is(.dark *){background-color:#164e6399}.dark\:hover\:bg-emerald-900\/20:hover:is(.dark *){background-color:#064e3b33}.dark\:hover\:bg-emerald-900\/50:hover:is(.dark *){background-color:#064e3b80}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700\/30:hover:is(.dark *){background-color:#3741514d}.dark\:hover\:bg-gray-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-green-900\/20:hover:is(.dark *){background-color:#14532d33}.dark\:hover\:bg-green-900\/50:hover:is(.dark *){background-color:#14532d80}.dark\:hover\:bg-indigo-900\/20:hover:is(.dark *){background-color:#312e8133}.dark\:hover\:bg-indigo-900\/50:hover:is(.dark *){background-color:#312e8180}.dark\:hover\:bg-orange-900\/20:hover:is(.dark *){background-color:#7c2d1233}.dark\:hover\:bg-orange-900\/50:hover:is(.dark *){background-color:#7c2d1280}.dark\:hover\:bg-pink-900\/50:hover:is(.dark *){background-color:#83184380}.dark\:hover\:bg-purple-500\/20:hover:is(.dark *){background-color:#a855f733}.dark\:hover\:bg-purple-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-purple-900\/20:hover:is(.dark *){background-color:#581c8733}.dark\:hover\:bg-purple-900\/40:hover:is(.dark *){background-color:#581c8766}.dark\:hover\:bg-purple-900\/50:hover:is(.dark *){background-color:#581c8780}.dark\:hover\:bg-red-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-800:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-900\/20:hover:is(.dark *){background-color:#7f1d1d33}.dark\:hover\:bg-red-900\/50:hover:is(.dark *){background-color:#7f1d1d80}.dark\:hover\:bg-rose-900\/20:hover:is(.dark *){background-color:#88133733}.dark\:hover\:bg-teal-900\/20:hover:is(.dark *){background-color:#134e4a33}.dark\:hover\:bg-teal-900\/50:hover:is(.dark *){background-color:#134e4a80}.dark\:hover\:text-blue-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:hover\:text-cyan-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-400:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:hover\:text-orange-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.dark\:hover\:text-purple-100:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(243 232 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-600:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-yellow-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.dark\:focus\:border-blue-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:focus\:border-indigo-500:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1))}.dark\:focus\:border-purple-400:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(192 132 252 / var(--tw-border-opacity, 1))}.dark\:focus\:bg-gray-800:focus:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:focus\:ring-blue-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-indigo-400:focus:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(129 140 248 / var(--tw-ring-opacity, 1))}.dark\:focus\:ring-purple-500\/40:focus:is(.dark *){--tw-ring-color: rgb(168 85 247 / .4)}.dark\:focus\:ring-offset-gray-800:focus:is(.dark *){--tw-ring-offset-color: #1f2937}.dark\:focus-visible\:ring-purple-400\/60:focus-visible:is(.dark *){--tw-ring-color: rgb(192 132 252 / .6)}.peer:focus~.dark\:peer-focus\:ring-blue-600:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(37 99 235 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-blue-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(30 64 175 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-orange-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(154 52 18 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-purple-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(107 33 168 / var(--tw-ring-opacity, 1))}.peer:focus~.dark\:peer-focus\:ring-teal-800:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(17 94 89 / var(--tw-ring-opacity, 1))}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mb-10{margin-bottom:2.5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-3{margin-bottom:.75rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-6{margin-bottom:1.5rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-16{margin-left:4rem}.sm\:ml-2{margin-left:.5rem}.sm\:ml-4{margin-left:1rem}.sm\:mr-2{margin-right:.5rem}.sm\:mr-3{margin-right:.75rem}.sm\:mt-0{margin-top:0}.sm\:mt-2{margin-top:.5rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:table-cell{display:table-cell}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-20{height:5rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:max-h-\[300px\]{max-height:300px}.sm\:w-10{width:2.5rem}.sm\:w-12{width:3rem}.sm\:w-20{width:5rem}.sm\:w-44{width:11rem}.sm\:w-56{width:14rem}.sm\:w-64{width:16rem}.sm\:w-8{width:2rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1 1 0%}.sm\:flex-auto{flex:1 1 auto}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:gap-2{gap:.5rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.sm\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.sm\:rounded-2xl{border-radius:1rem}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-xl{border-radius:.75rem}.sm\:p-1{padding:.25rem}.sm\:p-2{padding:.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-1{padding-top:.25rem;padding-bottom:.25rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-4{padding-bottom:1rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:mb-3{margin-bottom:.75rem}.md\:mb-4{margin-bottom:1rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-2{margin-right:.5rem}.md\:mr-3{margin-right:.75rem}.md\:mt-3{margin-top:.75rem}.md\:mt-4{margin-top:1rem}.md\:mt-8{margin-top:2rem}.md\:block{display:block}.md\:inline{display:inline}.md\:hidden{display:none}.md\:max-h-80{max-height:20rem}.md\:w-auto{width:auto}.md\:flex-none{flex:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:gap-2{gap:.5rem}.md\:gap-3{gap:.75rem}.md\:gap-4{gap:1rem}.md\:gap-6{gap:1.5rem}.md\:space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.md\:space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.md\:space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.md\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.md\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.md\:rounded-3xl{border-radius:1.5rem}.md\:p-10{padding:2.5rem}.md\:p-3{padding:.75rem}.md\:p-4{padding:1rem}.md\:p-6{padding:1.5rem}.md\:p-8{padding:2rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-5{padding-left:1.25rem;padding-right:1.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.md\:py-8{padding-top:2rem;padding-bottom:2rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pt-4{padding-top:1rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-base{font-size:1rem;line-height:1.5rem}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1024px){.lg\:col-span-1{grid-column:span 1 / span 1}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:w-auto{width:auto}.lg\:max-w-md{max-width:28rem}.lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:p-6{padding:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (min-width: 1280px){.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}.xl\:items-stretch{align-items:stretch}}@media (min-width: 1536px){.\32xl\:flex{display:flex}.\32xl\:hidden{display:none}}:root{--primary-color: #667eea;--secondary-color: #764ba2;--accent-color: #f093fb;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(255, 255, 255, .95);--glass-color: rgba(255, 255, 255, .1);--glass-strong-color: rgba(255, 255, 255, .95);--text-primary: #1f2937;--text-secondary: #6b7280;--border-color: rgba(255, 255, 255, .2);--bg-gradient-start: #667eea;--bg-gradient-mid: #764ba2;--bg-gradient-end: #f093fb;--input-bg: rgba(255, 255, 255, .9);--input-border: rgba(209, 213, 219, .8);--modal-bg: rgba(0, 0, 0, .4);--table-bg: rgba(255, 255, 255, .95);--table-hover: rgba(102, 126, 234, .05)}.dark{--primary-color: #818cf8;--secondary-color: #a78bfa;--accent-color: #c084fc;--success-color: #10b981;--warning-color: #f59e0b;--error-color: #ef4444;--surface-color: rgba(31, 41, 55, .95);--glass-color: rgba(0, 0, 0, .2);--glass-strong-color: rgba(31, 41, 55, .95);--text-primary: #f3f4f6;--text-secondary: #9ca3af;--border-color: rgba(75, 85, 99, .3);--bg-gradient-start: #1f2937;--bg-gradient-mid: #374151;--bg-gradient-end: #4b5563;--input-bg: rgba(31, 41, 55, .9);--input-border: rgba(75, 85, 99, .5);--modal-bg: rgba(0, 0, 0, .6);--table-bg: rgba(31, 41, 55, .95);--table-hover: rgba(129, 140, 248, .1)}button,input,select,textarea{transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease,transform .2s ease}.transition-colors{transition:color .3s ease,background-color .3s ease,border-color .3s ease}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;margin:0;overflow-x:hidden;color:var(--text-primary);transition:background .3s ease,color .3s ease}body:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:-1}.glass{background:var(--glass-color);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border:1px solid var(--border-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;transition:background-color .3s ease,border-color .3s ease}.dark .glass{box-shadow:0 20px 25px -5px #00000040,0 10px 10px -5px #0000001a,inset 0 1px #ffffff0d}.glass-strong{background:var(--glass-strong-color);border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease,border-color .3s ease}.dark .glass-strong{box-shadow:0 25px 50px -12px #0006,0 0 0 1px #ffffff05,inset 0 1px #ffffff0d}.tab-btn{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em}.tab-btn:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.tab-btn:hover:before{left:100%}.tab-btn.active{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.card{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:background-color .3s ease,border-color .3s ease}.dark .card{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.card:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.stat-card{background:linear-gradient(135deg,var(--surface-color) 0%,var(--glass-strong-color) 100%);border-radius:20px;border:1px solid var(--border-color);padding:24px;position:relative;overflow:hidden;transition:transform .3s ease,box-shadow .3s ease}.dark .stat-card{background:linear-gradient(135deg,#1f2937f2,#111827cc)}.stat-card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(circle,rgba(255,255,255,.1) 0%,transparent 70%);opacity:0;transition:opacity .3s ease}.stat-card:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a}.stat-card:hover:before{opacity:1}.stat-icon{width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;color:#fff;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.btn{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn:before{content:"";position:absolute;top:50%;left:50%;width:0;height:0;background:#fff3;border-radius:50%;transform:translate(-50%,-50%);transition:width .3s ease,height .3s ease}.btn:active:before{width:300px;height:300px}.btn-primary{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-success{background:linear-gradient(135deg,var(--success-color) 0%,#059669 100%);color:#fff;box-shadow:0 10px 15px -3px #10b9814d,0 4px 6px -2px #10b9810d}.btn-success:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #10b9814d,0 10px 10px -5px #10b9811a}.btn-danger{background:linear-gradient(135deg,var(--error-color) 0%,#dc2626 100%);color:#fff;box-shadow:0 10px 15px -3px #ef44444d,0 4px 6px -2px #ef44440d}.btn-danger:hover{transform:translateY(-1px);box-shadow:0 20px 25px -5px #ef44444d,0 10px 10px -5px #ef44441a}.form-input{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:16px;font-size:16px;color:var(--text-primary);transition:background-color .3s ease,border-color .3s ease,box-shadow .3s ease}.form-input:focus{outline:none;border-color:var(--primary-color);box-shadow:0 0 0 3px #667eea1a,0 10px 15px -3px #0000001a;background:#fffffff2;color:#1f2937}.dark .form-input:focus{box-shadow:0 0 0 3px #818cf833,0 10px 15px -3px #0003;background:#111827f2;color:#f3f4f6}.table-container{background:var(--table-bg);border-radius:16px;overflow:hidden;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;transition:background-color .3s ease}.dark .table-container{box-shadow:0 10px 15px -3px #00000040,0 4px 6px -2px #0000001a}.table-row{transition:background-color .2s ease,transform .2s ease}.table-row:hover{background:var(--table-hover);transform:scale(1.005)}.modal{background:var(--modal-bg);transition:background-color .3s ease}.modal-content{background:#fff;border-radius:24px;border:1px solid rgba(229,231,235,.8);box-shadow:0 10px 25px -5px #00000026,0 0 0 1px #ffffff0d;transition:background-color .3s ease,border-color .3s ease}.dark .modal-content{background:#1f2937;border:1px solid rgba(75,85,99,.5);box-shadow:0 25px 50px -12px #0009,0 0 0 1px #ffffff05}.header-title{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.loading-spinner{display:inline-block;width:20px;height:20px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top:2px solid white;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease}.fade-enter-from,.fade-leave-to{opacity:0}.slide-up-enter-active,.slide-up-leave-active{transition:all .3s ease}.slide-up-enter-from{opacity:0;transform:translateY(30px)}.slide-up-leave-to{opacity:0;transform:translateY(-30px)}.toast{position:fixed;top:80px;right:20px;z-index:1000;min-width:320px;max-width:500px;transform:translate(100%);transition:transform .3s ease-in-out}.toast.show{transform:translate(0)}.toast-success{background:linear-gradient(135deg,#10b981,#059669);color:#fff;border:1px solid rgba(16,185,129,.3)}.toast-error{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border:1px solid rgba(239,68,68,.3)}.toast-info{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:1px solid rgba(59,130,246,.3)}.toast-warning{background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border:1px solid rgba(245,158,11,.3)}[v-cloak]{display:none}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgba(102,126,234,.3) rgba(102,126,234,.05)}.dark .custom-scrollbar{scrollbar-color:rgba(129,140,248,.3) rgba(129,140,248,.05)}.custom-scrollbar::-webkit-scrollbar{width:8px;height:8px}.custom-scrollbar::-webkit-scrollbar-track{background:#667eea0d;border-radius:10px}.dark .custom-scrollbar::-webkit-scrollbar-track{background:#818cf80d}.custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#667eea66,#764ba266);border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease}.dark .custom-scrollbar::-webkit-scrollbar-thumb{background:linear-gradient(135deg,#818cf866,#a78bfa66)}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#667eea99,#764ba299)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:hover{background:linear-gradient(135deg,#818cf899,#a78bfa99)}.custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#667eeacc,#764ba2cc)}.dark .custom-scrollbar::-webkit-scrollbar-thumb:active{background:linear-gradient(135deg,#818cf8cc,#a78bfacc)}.modal-scroll-content{max-height:calc(90vh - 160px);overflow-y:auto;padding-right:8px}@media (max-width: 768px){.glass,.glass-strong{margin:16px;border-radius:20px}.stat-card{padding:16px}.tab-btn{font-size:14px;padding:12px 8px}.modal-scroll-content{max-height:calc(85vh - 120px)}}@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}to{transform:scale(1);opacity:1}}.animate-pulse{transition:transform .2s ease}.animate-pulse:hover{animation:pulse .3s ease}.user-menu-dropdown{min-width:240px;box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.tab-content{animation:fadeIn .3s ease-in-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
diff --git a/assets/vue-vendor-R8HMg95E.js b/assets/vue-vendor-DV7DYXbz.js
similarity index 99%
rename from assets/vue-vendor-R8HMg95E.js
rename to assets/vue-vendor-DV7DYXbz.js
index 718ba12a..b76d6470 100644
--- a/assets/vue-vendor-R8HMg95E.js
+++ b/assets/vue-vendor-DV7DYXbz.js
@@ -22,4 +22,4 @@
* vue-router v4.5.1
* (c) 2025 Eduardo San Martin Morote
* @license MIT
- */const Kt=typeof document<"u";function Il(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Il(e.default)}const ee=Object.assign;function Ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=We(r)?r.map(e):e(r)}return n}const gn=()=>{},We=Array.isArray,Ml=/#/g,rf=/&/g,of=/\//g,lf=/=/g,cf=/\?/g,Nl=/\+/g,uf=/%5B/g,af=/%5D/g,Ll=/%5E/g,ff=/%60/g,Fl=/%7B/g,df=/%7C/g,$l=/%7D/g,hf=/%20/g;function Rr(e){return encodeURI(""+e).replace(df,"|").replace(uf,"[").replace(af,"]")}function pf(e){return Rr(e).replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function Xs(e){return Rr(e).replace(Nl,"%2B").replace(hf,"+").replace(Ml,"%23").replace(rf,"%26").replace(ff,"`").replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function gf(e){return Xs(e).replace(lf,"%3D")}function mf(e){return Rr(e).replace(Ml,"%23").replace(cf,"%3F")}function vf(e){return e==null?"":mf(e).replace(of,"%2F")}function xn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const yf=/\/$/,_f=e=>e.replace(yf,"");function Ns(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),o=t.slice(c+1,l>-1?l:t.length),r=e(o)),l>-1&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Ef(s??t,n),{fullPath:s+(o&&"?")+o+i,path:s,query:r,hash:xn(i)}}function bf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function No(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function wf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Yt(t.matched[s],n.matched[r])&&Dl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Yt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Dl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Sf(e[n],t[n]))return!1;return!0}function Sf(e,t){return We(e)?Lo(e,t):We(t)?Lo(t,e):e===t}function Lo(e,t){return We(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ef(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cn;(function(e){e.pop="pop",e.push="push"})(Cn||(Cn={}));var mn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mn||(mn={}));function xf(e){if(!e)if(Kt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),_f(e)}const Cf=/^[^#]+#/;function Rf(e,t){return e.replace(Cf,"#")+t}function Of(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const _s=()=>({left:window.scrollX,top:window.scrollY});function Pf(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Of(r,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 Fo(e,t){return(history.state?history.state.position-t:-1)+e}const Zs=new Map;function Tf(e,t){Zs.set(e,t)}function Af(e){const t=Zs.get(e);return Zs.delete(e),t}let If=()=>location.protocol+"//"+location.host;function jl(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let l=r.includes(e.slice(o))?e.slice(o).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),No(c,"")}return No(n,e)+s+r}function Mf(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const g=jl(e,location),v=n.value,S=t.value;let $=0;if(h){if(n.value=g,t.value=h,i&&i===v){i=null;return}$=S?h.position-S.position:0}else s(g);r.forEach(A=>{A(n.value,v,{delta:$,type:Cn.pop,direction:$?$>0?mn.forward:mn.back:mn.unknown})})};function c(){i=n.value}function a(h){r.push(h);const g=()=>{const v=r.indexOf(h);v>-1&&r.splice(v,1)};return o.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(ee({},h.state,{scroll:_s()}),"")}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:c,listen:a,destroy:f}}function $o(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?_s():null}}function Nf(e){const{history:t,location:n}=window,s={value:jl(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,a,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:If()+e+c;try{t[u?"replaceState":"pushState"](a,"",h),r.value=a}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(c,a){const u=ee({},t.state,$o(r.value.back,c,r.value.forward,!0),a,{position:r.value.position});o(c,u,!0),s.value=c}function l(c,a){const u=ee({},r.value,t.state,{forward:c,scroll:_s()});o(u.current,u,!0);const f=ee({},$o(s.value,c,null),{position:u.position+1},a);o(c,f,!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function qd(e){e=xf(e);const t=Nf(e),n=Mf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ee({location:"",base:e,go:s,createHref:Rf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Lf(e){return typeof e=="string"||e&&typeof e=="object"}function Hl(e){return typeof e=="string"||typeof e=="symbol"}const Vl=Symbol("");var Do;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Do||(Do={}));function Xt(e,t){return ee(new Error,{type:e,[Vl]:!0},t)}function nt(e,t){return e instanceof Error&&Vl in e&&(t==null||!!(e.type&t))}const jo="[^/]+?",Ff={sensitive:!1,strict:!1,start:!0,end:!0},$f=/[.+*?^${}()[\]/\\]/g;function Df(e,t){const n=ee({},Ff,t),s=[];let r=n.start?"^":"";const o=[];for(const a of e){const u=a.length?[]:[90];n.strict&&!a.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function kl(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Hf={type:0,value:""},Vf=/[a-zA-Z0-9_]/;function kf(e){if(!e)return[[]];if(e==="/")return[[Hf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${a}": ${g}`)}let n=0,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,a="",u="";function f(){a&&(n===0?o.push({type:0,value:a}):n===1||n===2||n===3?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:a,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function h(){a+=c}for(;l{i(F)}:gn}function i(f){if(Hl(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function c(f){const h=Gf(f,n);n.splice(h,0,f),f.record.name&&!Bo(f)&&s.set(f.record.name,f)}function a(f,h){let g,v={},S,$;if("name"in f&&f.name){if(g=s.get(f.name),!g)throw Xt(1,{location:f});$=g.record.name,v=ee(Vo(h.params,g.keys.filter(F=>!F.optional).concat(g.parent?g.parent.keys.filter(F=>F.optional):[]).map(F=>F.name)),f.params&&Vo(f.params,g.keys.map(F=>F.name))),S=g.stringify(v)}else if(f.path!=null)S=f.path,g=n.find(F=>F.re.test(S)),g&&(v=g.parse(S),$=g.record.name);else{if(g=h.name?s.get(h.name):n.find(F=>F.re.test(h.path)),!g)throw Xt(1,{location:f,currentLocation:h});$=g.record.name,v=ee({},h.params,f.params),S=g.stringify(v)}const A=[];let I=g;for(;I;)A.unshift(I.record),I=I.parent;return{name:$,path:S,params:v,matched:A,meta:Wf(A)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:a,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Vo(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ko(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Uf(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 Uf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Bo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wf(e){return e.reduce((t,n)=>ee(t,n.meta),{})}function Ko(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function Gf(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;kl(e,t[o])<0?s=o:n=o+1}const r=qf(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qf(e){let t=e;for(;t=t.parent;)if(Bl(t)&&kl(e,t)===0)return t}function Bl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zf(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ro&&Xs(o)):[s&&Xs(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Qf(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=We(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Jf=Symbol(""),Wo=Symbol(""),bs=Symbol(""),Or=Symbol(""),er=Symbol("");function rn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function bt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const a=h=>{h===!1?c(Xt(4,{from:n,to:t})):h instanceof Error?c(h):Lf(h)?c(Xt(2,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},u=o(()=>e.call(s&&s.instances[r],t,n,a));let f=Promise.resolve(u);e.length<3&&(f=f.then(a)),f.catch(h=>c(h))})}function Ls(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Il(c)){const u=(c.__vccOpts||c)[t];u&&o.push(bt(u,n,s,i,l,r))}else{let a=c();o.push(()=>a.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=sf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const g=(f.__vccOpts||f)[t];return g&&bt(g,n,s,i,l,r)()}))}}return o}function Go(e){const t=De(bs),n=De(Or),s=be(()=>{const c=Nt(e.to);return t.resolve(c)}),r=be(()=>{const{matched:c}=s.value,{length:a}=c,u=c[a-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(Yt.bind(null,u));if(h>-1)return h;const g=qo(c[a-2]);return a>1&&qo(u)===g&&f[f.length-1].path!==g?f.findIndex(Yt.bind(null,c[a-2])):h}),o=be(()=>r.value>-1&&td(n.params,s.value.params)),i=be(()=>r.value>-1&&r.value===n.matched.length-1&&Dl(n.params,s.value.params));function l(c={}){if(ed(c)){const a=t[Nt(e.replace)?"replace":"push"](Nt(e.to)).catch(gn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>a),a}return Promise.resolve()}return{route:s,href:be(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Yf(e){return e.length===1?e[0]:e}const Xf=ji({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:Go,setup(e,{slots:t}){const n=On(Go(e)),{options:s}=De(bs),r=be(()=>({[zo(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[zo(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Yf(t.default(n));return e.custom?o:xr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Zf=Xf;function ed(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 td(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!We(r)||r.length!==s.length||s.some((o,i)=>o!==r[i]))return!1}return!0}function qo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const zo=(e,t,n)=>e??t??n,nd=ji({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=De(er),r=be(()=>e.route||s.value),o=De(Wo,0),i=be(()=>{let a=Nt(o);const{matched:u}=r.value;let f;for(;(f=u[a])&&!f.components;)a++;return a}),l=be(()=>r.value.matched[i.value]);kn(Wo,be(()=>i.value+1)),kn(Jf,l),kn(er,r);const c=ue();return Se(()=>[c.value,l.value,e.name],([a,u,f],[h,g,v])=>{u&&(u.instances[f]=a,g&&g!==u&&a&&a===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),a&&u&&(!g||!Yt(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(S=>S(a))},{flush:"post"}),()=>{const a=r.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Qo(n.default,{Component:h,route:a});const g=f.props[u],v=g?g===!0?a.params:typeof g=="function"?g(a):g:null,$=xr(h,ee({},v,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(f.instances[u]=null)},ref:c}));return Qo(n.default,{Component:$,route:a})||$}}});function Qo(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const sd=nd;function zd(e){const t=Kf(e.routes,e),n=e.parseQuery||zf,s=e.stringifyQuery||Uo,r=e.history,o=rn(),i=rn(),l=rn(),c=bi(pt);let a=pt;Kt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ms.bind(null,_=>""+_),f=Ms.bind(null,vf),h=Ms.bind(null,xn);function g(_,L){let P,D;return Hl(_)?(P=t.getRecordMatcher(_),D=L):D=_,t.addRoute(D,P)}function v(_){const L=t.getRecordMatcher(_);L&&t.removeRoute(L)}function S(){return t.getRoutes().map(_=>_.record)}function $(_){return!!t.getRecordMatcher(_)}function A(_,L){if(L=ee({},L||c.value),typeof _=="string"){const m=Ns(n,_,L.path),y=t.resolve({path:m.path},L),w=r.createHref(m.fullPath);return ee(m,y,{params:h(y.params),hash:xn(m.hash),redirectedFrom:void 0,href:w})}let P;if(_.path!=null)P=ee({},_,{path:Ns(n,_.path,L.path).path});else{const m=ee({},_.params);for(const y in m)m[y]==null&&delete m[y];P=ee({},_,{params:f(m)}),L.params=f(L.params)}const D=t.resolve(P,L),oe=_.hash||"";D.params=u(h(D.params));const d=bf(s,ee({},_,{hash:pf(oe),path:D.path})),p=r.createHref(d);return ee({fullPath:d,hash:oe,query:s===Uo?Qf(_.query):_.query||{}},D,{redirectedFrom:void 0,href:p})}function I(_){return typeof _=="string"?Ns(n,_,c.value.path):ee({},_)}function F(_,L){if(a!==_)return Xt(8,{from:L,to:_})}function N(_){return q(_)}function k(_){return N(ee(I(_),{replace:!0}))}function z(_){const L=_.matched[_.matched.length-1];if(L&&L.redirect){const{redirect:P}=L;let D=typeof P=="function"?P(_):P;return typeof D=="string"&&(D=D.includes("?")||D.includes("#")?D=I(D):{path:D},D.params={}),ee({query:_.query,hash:_.hash,params:D.path!=null?{}:_.params},D)}}function q(_,L){const P=a=A(_),D=c.value,oe=_.state,d=_.force,p=_.replace===!0,m=z(P);if(m)return q(ee(I(m),{state:typeof m=="object"?ee({},oe,m.state):oe,force:d,replace:p}),L||P);const y=P;y.redirectedFrom=L;let w;return!d&&wf(s,D,P)&&(w=Xt(16,{to:y,from:D}),Ge(D,D,!0,!1)),(w?Promise.resolve(w):K(y,D)).catch(b=>nt(b)?nt(b,2)?b:dt(b):Z(b,y,D)).then(b=>{if(b){if(nt(b,2))return q(ee({replace:p},I(b.to),{state:typeof b.to=="object"?ee({},oe,b.to.state):oe,force:d}),L||y)}else b=M(y,D,!0,p,oe);return Q(y,D,b),b})}function B(_,L){const P=F(_,L);return P?Promise.reject(P):Promise.resolve()}function x(_){const L=Ht.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(_):_()}function K(_,L){let P;const[D,oe,d]=rd(_,L);P=Ls(D.reverse(),"beforeRouteLeave",_,L);for(const m of D)m.leaveGuards.forEach(y=>{P.push(bt(y,_,L))});const p=B.bind(null,_,L);return P.push(p),Le(P).then(()=>{P=[];for(const m of o.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).then(()=>{P=Ls(oe,"beforeRouteUpdate",_,L);for(const m of oe)m.updateGuards.forEach(y=>{P.push(bt(y,_,L))});return P.push(p),Le(P)}).then(()=>{P=[];for(const m of d)if(m.beforeEnter)if(We(m.beforeEnter))for(const y of m.beforeEnter)P.push(bt(y,_,L));else P.push(bt(m.beforeEnter,_,L));return P.push(p),Le(P)}).then(()=>(_.matched.forEach(m=>m.enterCallbacks={}),P=Ls(d,"beforeRouteEnter",_,L,x),P.push(p),Le(P))).then(()=>{P=[];for(const m of i.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).catch(m=>nt(m,8)?m:Promise.reject(m))}function Q(_,L,P){l.list().forEach(D=>x(()=>D(_,L,P)))}function M(_,L,P,D,oe){const d=F(_,L);if(d)return d;const p=L===pt,m=Kt?history.state:{};P&&(D||p?r.replace(_.fullPath,ee({scroll:p&&m&&m.scroll},oe)):r.push(_.fullPath,oe)),c.value=_,Ge(_,L,P,p),dt()}let Y;function de(){Y||(Y=r.listen((_,L,P)=>{if(!In.listening)return;const D=A(_),oe=z(D);if(oe){q(ee(oe,{replace:!0,force:!0}),D).catch(gn);return}a=D;const d=c.value;Kt&&Tf(Fo(d.fullPath,P.delta),_s()),K(D,d).catch(p=>nt(p,12)?p:nt(p,2)?(q(ee(I(p.to),{force:!0}),D).then(m=>{nt(m,20)&&!P.delta&&P.type===Cn.pop&&r.go(-1,!1)}).catch(gn),Promise.reject()):(P.delta&&r.go(-P.delta,!1),Z(p,D,d))).then(p=>{p=p||M(D,d,!1),p&&(P.delta&&!nt(p,8)?r.go(-P.delta,!1):P.type===Cn.pop&&nt(p,20)&&r.go(-1,!1)),Q(D,d,p)}).catch(gn)}))}let Ee=rn(),re=rn(),G;function Z(_,L,P){dt(_);const D=re.list();return D.length?D.forEach(oe=>oe(_,L,P)):console.error(_),Promise.reject(_)}function et(){return G&&c.value!==pt?Promise.resolve():new Promise((_,L)=>{Ee.add([_,L])})}function dt(_){return G||(G=!_,de(),Ee.list().forEach(([L,P])=>_?P(_):L()),Ee.reset()),_}function Ge(_,L,P,D){const{scrollBehavior:oe}=e;if(!Kt||!oe)return Promise.resolve();const d=!P&&Af(Fo(_.fullPath,0))||(D||!P)&&history.state&&history.state.scroll||null;return Tn().then(()=>oe(_,L,d)).then(p=>p&&Pf(p)).catch(p=>Z(p,_,L))}const Oe=_=>r.go(_);let jt;const Ht=new Set,In={currentRoute:c,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:$,getRoutes:S,resolve:A,options:e,push:N,replace:k,go:Oe,back:()=>Oe(-1),forward:()=>Oe(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:et,install(_){const L=this;_.component("RouterLink",Zf),_.component("RouterView",sd),_.config.globalProperties.$router=L,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>Nt(c)}),Kt&&!jt&&c.value===pt&&(jt=!0,N(r.location).catch(oe=>{}));const P={};for(const oe in pt)Object.defineProperty(P,oe,{get:()=>c.value[oe],enumerable:!0});_.provide(bs,L),_.provide(Or,_i(P)),_.provide(er,c);const D=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(a=pt,Y&&Y(),Y=null,c.value=pt,jt=!1,G=!1),D()}}};function Le(_){return _.reduce((L,P)=>L.then(()=>x(P)),Promise.resolve())}return In}function rd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iYt(a,l))?s.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(a=>Yt(a,c))||r.push(c))}return[n,s,r]}function Qd(){return De(bs)}function Jd(e){return De(Or)}export{kc as $,pd as A,os as B,is as C,Tn as D,Iu as E,ys as F,md as G,Tc as H,Ws as I,Dc as J,ld as K,bd as L,ad as M,ke as N,Au as O,nc as P,Ae as Q,we as R,Ed as S,Sd as T,Nd as U,Ki as V,vd as W,Al as X,Rd as Y,Bi as Z,On as _,ae as a,ki as a0,Et as a1,ps as a2,ye as a3,Ne as a4,cd as a5,Uc as a6,Dd as a7,us as a8,Bc as a9,ss as aA,ja as aB,Xo as aC,fd as aD,jn as aE,Kd as aF,Pd as aG,Vd as aH,Wd as aI,Ud as aJ,jd as aK,Bd as aL,Td as aM,Rt as aN,_i as aO,Id as aP,zd as aQ,qd as aR,Ad as aS,_d as aT,Qd as aU,ma as aV,Jd as aW,Md as aX,Cd as aY,Od as aa,hd as ab,dd as ac,Fd as ad,Ir as ae,od as af,Tu as ag,Sn as ah,xr as ai,id as aj,J as ak,pa as al,Rc as am,ga as an,Wc as ao,Jo as ap,mo as aq,Hd as ar,gd as as,ri as at,$d as au,ud as av,Ld as aw,xd as ax,hr as ay,si as az,j as b,be as c,se as d,vs as e,fe as f,Dt as g,te as h,De as i,W as j,Ve as k,ji as l,Gd as m,kd as n,Se as o,kn as p,mr as q,ue as r,bi as s,He as t,Nt as u,yu as v,wd as w,yd as x,Us as y,al as z};
+ */const Kt=typeof document<"u";function Il(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function sf(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Il(e.default)}const ee=Object.assign;function Ms(e,t){const n={};for(const s in t){const r=t[s];n[s]=We(r)?r.map(e):e(r)}return n}const gn=()=>{},We=Array.isArray,Ml=/#/g,rf=/&/g,of=/\//g,lf=/=/g,cf=/\?/g,Nl=/\+/g,uf=/%5B/g,af=/%5D/g,Ll=/%5E/g,ff=/%60/g,Fl=/%7B/g,df=/%7C/g,$l=/%7D/g,hf=/%20/g;function Rr(e){return encodeURI(""+e).replace(df,"|").replace(uf,"[").replace(af,"]")}function pf(e){return Rr(e).replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function Xs(e){return Rr(e).replace(Nl,"%2B").replace(hf,"+").replace(Ml,"%23").replace(rf,"%26").replace(ff,"`").replace(Fl,"{").replace($l,"}").replace(Ll,"^")}function gf(e){return Xs(e).replace(lf,"%3D")}function mf(e){return Rr(e).replace(Ml,"%23").replace(cf,"%3F")}function vf(e){return e==null?"":mf(e).replace(of,"%2F")}function xn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}const yf=/\/$/,_f=e=>e.replace(yf,"");function Ns(e,t,n="/"){let s,r={},o="",i="";const l=t.indexOf("#");let c=t.indexOf("?");return l=0&&(c=-1),c>-1&&(s=t.slice(0,c),o=t.slice(c+1,l>-1?l:t.length),r=e(o)),l>-1&&(s=s||t.slice(0,l),i=t.slice(l,t.length)),s=Ef(s??t,n),{fullPath:s+(o&&"?")+o+i,path:s,query:r,hash:xn(i)}}function bf(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function No(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function wf(e,t,n){const s=t.matched.length-1,r=n.matched.length-1;return s>-1&&s===r&&Yt(t.matched[s],n.matched[r])&&Dl(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function Yt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Dl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!Sf(e[n],t[n]))return!1;return!0}function Sf(e,t){return We(e)?Lo(e,t):We(t)?Lo(t,e):e===t}function Lo(e,t){return We(t)?e.length===t.length&&e.every((n,s)=>n===t[s]):e.length===1&&e[0]===t}function Ef(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),s=e.split("/"),r=s[s.length-1];(r===".."||r===".")&&s.push("");let o=n.length-1,i,l;for(i=0;i1&&o--;else break;return n.slice(0,o).join("/")+"/"+s.slice(i).join("/")}const pt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};var Cn;(function(e){e.pop="pop",e.push="push"})(Cn||(Cn={}));var mn;(function(e){e.back="back",e.forward="forward",e.unknown=""})(mn||(mn={}));function xf(e){if(!e)if(Kt){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),_f(e)}const Cf=/^[^#]+#/;function Rf(e,t){return e.replace(Cf,"#")+t}function Of(e,t){const n=document.documentElement.getBoundingClientRect(),s=e.getBoundingClientRect();return{behavior:t.behavior,left:s.left-n.left-(t.left||0),top:s.top-n.top-(t.top||0)}}const _s=()=>({left:window.scrollX,top:window.scrollY});function Pf(e){let t;if("el"in e){const n=e.el,s=typeof n=="string"&&n.startsWith("#"),r=typeof n=="string"?s?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!r)return;t=Of(r,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 Fo(e,t){return(history.state?history.state.position-t:-1)+e}const Zs=new Map;function Tf(e,t){Zs.set(e,t)}function Af(e){const t=Zs.get(e);return Zs.delete(e),t}let If=()=>location.protocol+"//"+location.host;function jl(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let l=r.includes(e.slice(o))?e.slice(o).length:1,c=r.slice(l);return c[0]!=="/"&&(c="/"+c),No(c,"")}return No(n,e)+s+r}function Mf(e,t,n,s){let r=[],o=[],i=null;const l=({state:h})=>{const g=jl(e,location),v=n.value,S=t.value;let $=0;if(h){if(n.value=g,t.value=h,i&&i===v){i=null;return}$=S?h.position-S.position:0}else s(g);r.forEach(A=>{A(n.value,v,{delta:$,type:Cn.pop,direction:$?$>0?mn.forward:mn.back:mn.unknown})})};function c(){i=n.value}function a(h){r.push(h);const g=()=>{const v=r.indexOf(h);v>-1&&r.splice(v,1)};return o.push(g),g}function u(){const{history:h}=window;h.state&&h.replaceState(ee({},h.state,{scroll:_s()}),"")}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",u,{passive:!0}),{pauseListeners:c,listen:a,destroy:f}}function $o(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?_s():null}}function Nf(e){const{history:t,location:n}=window,s={value:jl(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(c,a,u){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+c:If()+e+c;try{t[u?"replaceState":"pushState"](a,"",h),r.value=a}catch(g){console.error(g),n[u?"replace":"assign"](h)}}function i(c,a){const u=ee({},t.state,$o(r.value.back,c,r.value.forward,!0),a,{position:r.value.position});o(c,u,!0),s.value=c}function l(c,a){const u=ee({},r.value,t.state,{forward:c,scroll:_s()});o(u.current,u,!0);const f=ee({},$o(s.value,c,null),{position:u.position+1},a);o(c,f,!1),s.value=c}return{location:s,state:r,push:l,replace:i}}function qd(e){e=xf(e);const t=Nf(e),n=Mf(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=ee({location:"",base:e,go:s,createHref:Rf.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}function Lf(e){return typeof e=="string"||e&&typeof e=="object"}function Hl(e){return typeof e=="string"||typeof e=="symbol"}const Vl=Symbol("");var Do;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Do||(Do={}));function Xt(e,t){return ee(new Error,{type:e,[Vl]:!0},t)}function nt(e,t){return e instanceof Error&&Vl in e&&(t==null||!!(e.type&t))}const jo="[^/]+?",Ff={sensitive:!1,strict:!1,start:!0,end:!0},$f=/[.+*?^${}()[\]/\\]/g;function Df(e,t){const n=ee({},Ff,t),s=[];let r=n.start?"^":"";const o=[];for(const a of e){const u=a.length?[]:[90];n.strict&&!a.length&&(r+="/");for(let f=0;ft.length?t.length===1&&t[0]===80?1:-1:0}function kl(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const Hf={type:0,value:""},Vf=/[a-zA-Z0-9_]/;function kf(e){if(!e)return[[]];if(e==="/")return[[Hf]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(g){throw new Error(`ERR (${n})/"${a}": ${g}`)}let n=0,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let l=0,c,a="",u="";function f(){a&&(n===0?o.push({type:0,value:a}):n===1||n===2||n===3?(o.length>1&&(c==="*"||c==="+")&&t(`A repeatable param (${a}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:a,regexp:u,repeatable:c==="*"||c==="+",optional:c==="*"||c==="?"})):t("Invalid state to consume buffer"),a="")}function h(){a+=c}for(;l{i(F)}:gn}function i(f){if(Hl(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function l(){return n}function c(f){const h=Gf(f,n);n.splice(h,0,f),f.record.name&&!Bo(f)&&s.set(f.record.name,f)}function a(f,h){let g,v={},S,$;if("name"in f&&f.name){if(g=s.get(f.name),!g)throw Xt(1,{location:f});$=g.record.name,v=ee(Vo(h.params,g.keys.filter(F=>!F.optional).concat(g.parent?g.parent.keys.filter(F=>F.optional):[]).map(F=>F.name)),f.params&&Vo(f.params,g.keys.map(F=>F.name))),S=g.stringify(v)}else if(f.path!=null)S=f.path,g=n.find(F=>F.re.test(S)),g&&(v=g.parse(S),$=g.record.name);else{if(g=h.name?s.get(h.name):n.find(F=>F.re.test(h.path)),!g)throw Xt(1,{location:f,currentLocation:h});$=g.record.name,v=ee({},h.params,f.params),S=g.stringify(v)}const A=[];let I=g;for(;I;)A.unshift(I.record),I=I.parent;return{name:$,path:S,params:v,matched:A,meta:Wf(A)}}e.forEach(f=>o(f));function u(){n.length=0,s.clear()}return{addRoute:o,resolve:a,removeRoute:i,clearRoutes:u,getRoutes:l,getRecordMatcher:r}}function Vo(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function ko(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Uf(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 Uf(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function Bo(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Wf(e){return e.reduce((t,n)=>ee(t,n.meta),{})}function Ko(e,t){const n={};for(const s in e)n[s]=s in t?t[s]:e[s];return n}function Gf(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;kl(e,t[o])<0?s=o:n=o+1}const r=qf(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function qf(e){let t=e;for(;t=t.parent;)if(Bl(t)&&kl(e,t)===0)return t}function Bl({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function zf(e){const t={};if(e===""||e==="?")return t;const s=(e[0]==="?"?e.slice(1):e).split("&");for(let r=0;ro&&Xs(o)):[s&&Xs(s)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+n,o!=null&&(t+="="+o))})}return t}function Qf(e){const t={};for(const n in e){const s=e[n];s!==void 0&&(t[n]=We(s)?s.map(r=>r==null?null:""+r):s==null?s:""+s)}return t}const Jf=Symbol(""),Wo=Symbol(""),bs=Symbol(""),Or=Symbol(""),er=Symbol("");function rn(){let e=[];function t(s){return e.push(s),()=>{const r=e.indexOf(s);r>-1&&e.splice(r,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function bt(e,t,n,s,r,o=i=>i()){const i=s&&(s.enterCallbacks[r]=s.enterCallbacks[r]||[]);return()=>new Promise((l,c)=>{const a=h=>{h===!1?c(Xt(4,{from:n,to:t})):h instanceof Error?c(h):Lf(h)?c(Xt(2,{from:t,to:h})):(i&&s.enterCallbacks[r]===i&&typeof h=="function"&&i.push(h),l())},u=o(()=>e.call(s&&s.instances[r],t,n,a));let f=Promise.resolve(u);e.length<3&&(f=f.then(a)),f.catch(h=>c(h))})}function Ls(e,t,n,s,r=o=>o()){const o=[];for(const i of e)for(const l in i.components){let c=i.components[l];if(!(t!=="beforeRouteEnter"&&!i.instances[l]))if(Il(c)){const u=(c.__vccOpts||c)[t];u&&o.push(bt(u,n,s,i,l,r))}else{let a=c();o.push(()=>a.then(u=>{if(!u)throw new Error(`Couldn't resolve component "${l}" at "${i.path}"`);const f=sf(u)?u.default:u;i.mods[l]=u,i.components[l]=f;const g=(f.__vccOpts||f)[t];return g&&bt(g,n,s,i,l,r)()}))}}return o}function Go(e){const t=De(bs),n=De(Or),s=be(()=>{const c=Nt(e.to);return t.resolve(c)}),r=be(()=>{const{matched:c}=s.value,{length:a}=c,u=c[a-1],f=n.matched;if(!u||!f.length)return-1;const h=f.findIndex(Yt.bind(null,u));if(h>-1)return h;const g=qo(c[a-2]);return a>1&&qo(u)===g&&f[f.length-1].path!==g?f.findIndex(Yt.bind(null,c[a-2])):h}),o=be(()=>r.value>-1&&td(n.params,s.value.params)),i=be(()=>r.value>-1&&r.value===n.matched.length-1&&Dl(n.params,s.value.params));function l(c={}){if(ed(c)){const a=t[Nt(e.replace)?"replace":"push"](Nt(e.to)).catch(gn);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>a),a}return Promise.resolve()}return{route:s,href:be(()=>s.value.href),isActive:o,isExactActive:i,navigate:l}}function Yf(e){return e.length===1?e[0]:e}const Xf=ji({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:Go,setup(e,{slots:t}){const n=On(Go(e)),{options:s}=De(bs),r=be(()=>({[zo(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[zo(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&Yf(t.default(n));return e.custom?o:xr("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),Zf=Xf;function ed(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 td(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!We(r)||r.length!==s.length||s.some((o,i)=>o!==r[i]))return!1}return!0}function qo(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const zo=(e,t,n)=>e??t??n,nd=ji({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=De(er),r=be(()=>e.route||s.value),o=De(Wo,0),i=be(()=>{let a=Nt(o);const{matched:u}=r.value;let f;for(;(f=u[a])&&!f.components;)a++;return a}),l=be(()=>r.value.matched[i.value]);kn(Wo,be(()=>i.value+1)),kn(Jf,l),kn(er,r);const c=ue();return Se(()=>[c.value,l.value,e.name],([a,u,f],[h,g,v])=>{u&&(u.instances[f]=a,g&&g!==u&&a&&a===h&&(u.leaveGuards.size||(u.leaveGuards=g.leaveGuards),u.updateGuards.size||(u.updateGuards=g.updateGuards))),a&&u&&(!g||!Yt(u,g)||!h)&&(u.enterCallbacks[f]||[]).forEach(S=>S(a))},{flush:"post"}),()=>{const a=r.value,u=e.name,f=l.value,h=f&&f.components[u];if(!h)return Qo(n.default,{Component:h,route:a});const g=f.props[u],v=g?g===!0?a.params:typeof g=="function"?g(a):g:null,$=xr(h,ee({},v,t,{onVnodeUnmounted:A=>{A.component.isUnmounted&&(f.instances[u]=null)},ref:c}));return Qo(n.default,{Component:$,route:a})||$}}});function Qo(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const sd=nd;function zd(e){const t=Kf(e.routes,e),n=e.parseQuery||zf,s=e.stringifyQuery||Uo,r=e.history,o=rn(),i=rn(),l=rn(),c=bi(pt);let a=pt;Kt&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Ms.bind(null,_=>""+_),f=Ms.bind(null,vf),h=Ms.bind(null,xn);function g(_,L){let P,D;return Hl(_)?(P=t.getRecordMatcher(_),D=L):D=_,t.addRoute(D,P)}function v(_){const L=t.getRecordMatcher(_);L&&t.removeRoute(L)}function S(){return t.getRoutes().map(_=>_.record)}function $(_){return!!t.getRecordMatcher(_)}function A(_,L){if(L=ee({},L||c.value),typeof _=="string"){const m=Ns(n,_,L.path),y=t.resolve({path:m.path},L),w=r.createHref(m.fullPath);return ee(m,y,{params:h(y.params),hash:xn(m.hash),redirectedFrom:void 0,href:w})}let P;if(_.path!=null)P=ee({},_,{path:Ns(n,_.path,L.path).path});else{const m=ee({},_.params);for(const y in m)m[y]==null&&delete m[y];P=ee({},_,{params:f(m)}),L.params=f(L.params)}const D=t.resolve(P,L),oe=_.hash||"";D.params=u(h(D.params));const d=bf(s,ee({},_,{hash:pf(oe),path:D.path})),p=r.createHref(d);return ee({fullPath:d,hash:oe,query:s===Uo?Qf(_.query):_.query||{}},D,{redirectedFrom:void 0,href:p})}function I(_){return typeof _=="string"?Ns(n,_,c.value.path):ee({},_)}function F(_,L){if(a!==_)return Xt(8,{from:L,to:_})}function N(_){return q(_)}function k(_){return N(ee(I(_),{replace:!0}))}function z(_){const L=_.matched[_.matched.length-1];if(L&&L.redirect){const{redirect:P}=L;let D=typeof P=="function"?P(_):P;return typeof D=="string"&&(D=D.includes("?")||D.includes("#")?D=I(D):{path:D},D.params={}),ee({query:_.query,hash:_.hash,params:D.path!=null?{}:_.params},D)}}function q(_,L){const P=a=A(_),D=c.value,oe=_.state,d=_.force,p=_.replace===!0,m=z(P);if(m)return q(ee(I(m),{state:typeof m=="object"?ee({},oe,m.state):oe,force:d,replace:p}),L||P);const y=P;y.redirectedFrom=L;let w;return!d&&wf(s,D,P)&&(w=Xt(16,{to:y,from:D}),Ge(D,D,!0,!1)),(w?Promise.resolve(w):K(y,D)).catch(b=>nt(b)?nt(b,2)?b:dt(b):Z(b,y,D)).then(b=>{if(b){if(nt(b,2))return q(ee({replace:p},I(b.to),{state:typeof b.to=="object"?ee({},oe,b.to.state):oe,force:d}),L||y)}else b=M(y,D,!0,p,oe);return Q(y,D,b),b})}function B(_,L){const P=F(_,L);return P?Promise.reject(P):Promise.resolve()}function x(_){const L=Ht.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(_):_()}function K(_,L){let P;const[D,oe,d]=rd(_,L);P=Ls(D.reverse(),"beforeRouteLeave",_,L);for(const m of D)m.leaveGuards.forEach(y=>{P.push(bt(y,_,L))});const p=B.bind(null,_,L);return P.push(p),Le(P).then(()=>{P=[];for(const m of o.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).then(()=>{P=Ls(oe,"beforeRouteUpdate",_,L);for(const m of oe)m.updateGuards.forEach(y=>{P.push(bt(y,_,L))});return P.push(p),Le(P)}).then(()=>{P=[];for(const m of d)if(m.beforeEnter)if(We(m.beforeEnter))for(const y of m.beforeEnter)P.push(bt(y,_,L));else P.push(bt(m.beforeEnter,_,L));return P.push(p),Le(P)}).then(()=>(_.matched.forEach(m=>m.enterCallbacks={}),P=Ls(d,"beforeRouteEnter",_,L,x),P.push(p),Le(P))).then(()=>{P=[];for(const m of i.list())P.push(bt(m,_,L));return P.push(p),Le(P)}).catch(m=>nt(m,8)?m:Promise.reject(m))}function Q(_,L,P){l.list().forEach(D=>x(()=>D(_,L,P)))}function M(_,L,P,D,oe){const d=F(_,L);if(d)return d;const p=L===pt,m=Kt?history.state:{};P&&(D||p?r.replace(_.fullPath,ee({scroll:p&&m&&m.scroll},oe)):r.push(_.fullPath,oe)),c.value=_,Ge(_,L,P,p),dt()}let Y;function de(){Y||(Y=r.listen((_,L,P)=>{if(!In.listening)return;const D=A(_),oe=z(D);if(oe){q(ee(oe,{replace:!0,force:!0}),D).catch(gn);return}a=D;const d=c.value;Kt&&Tf(Fo(d.fullPath,P.delta),_s()),K(D,d).catch(p=>nt(p,12)?p:nt(p,2)?(q(ee(I(p.to),{force:!0}),D).then(m=>{nt(m,20)&&!P.delta&&P.type===Cn.pop&&r.go(-1,!1)}).catch(gn),Promise.reject()):(P.delta&&r.go(-P.delta,!1),Z(p,D,d))).then(p=>{p=p||M(D,d,!1),p&&(P.delta&&!nt(p,8)?r.go(-P.delta,!1):P.type===Cn.pop&&nt(p,20)&&r.go(-1,!1)),Q(D,d,p)}).catch(gn)}))}let Ee=rn(),re=rn(),G;function Z(_,L,P){dt(_);const D=re.list();return D.length?D.forEach(oe=>oe(_,L,P)):console.error(_),Promise.reject(_)}function et(){return G&&c.value!==pt?Promise.resolve():new Promise((_,L)=>{Ee.add([_,L])})}function dt(_){return G||(G=!_,de(),Ee.list().forEach(([L,P])=>_?P(_):L()),Ee.reset()),_}function Ge(_,L,P,D){const{scrollBehavior:oe}=e;if(!Kt||!oe)return Promise.resolve();const d=!P&&Af(Fo(_.fullPath,0))||(D||!P)&&history.state&&history.state.scroll||null;return Tn().then(()=>oe(_,L,d)).then(p=>p&&Pf(p)).catch(p=>Z(p,_,L))}const Oe=_=>r.go(_);let jt;const Ht=new Set,In={currentRoute:c,listening:!0,addRoute:g,removeRoute:v,clearRoutes:t.clearRoutes,hasRoute:$,getRoutes:S,resolve:A,options:e,push:N,replace:k,go:Oe,back:()=>Oe(-1),forward:()=>Oe(1),beforeEach:o.add,beforeResolve:i.add,afterEach:l.add,onError:re.add,isReady:et,install(_){const L=this;_.component("RouterLink",Zf),_.component("RouterView",sd),_.config.globalProperties.$router=L,Object.defineProperty(_.config.globalProperties,"$route",{enumerable:!0,get:()=>Nt(c)}),Kt&&!jt&&c.value===pt&&(jt=!0,N(r.location).catch(oe=>{}));const P={};for(const oe in pt)Object.defineProperty(P,oe,{get:()=>c.value[oe],enumerable:!0});_.provide(bs,L),_.provide(Or,_i(P)),_.provide(er,c);const D=_.unmount;Ht.add(_),_.unmount=function(){Ht.delete(_),Ht.size<1&&(a=pt,Y&&Y(),Y=null,c.value=pt,jt=!1,G=!1),D()}}};function Le(_){return _.reduce((L,P)=>L.then(()=>x(P)),Promise.resolve())}return In}function rd(e,t){const n=[],s=[],r=[],o=Math.max(t.matched.length,e.matched.length);for(let i=0;iYt(a,l))?s.push(l):n.push(l));const c=e.matched[i];c&&(t.matched.find(a=>Yt(a,c))||r.push(c))}return[n,s,r]}function Qd(){return De(bs)}function Jd(e){return De(Or)}export{kc as $,pd as A,os as B,is as C,Tn as D,Iu as E,ys as F,md as G,Tc as H,Ws as I,Dc as J,ld as K,bd as L,ad as M,ke as N,Au as O,nc as P,Ae as Q,we as R,Ed as S,Sd as T,Nd as U,Ki as V,vd as W,Al as X,Rd as Y,Bi as Z,On as _,ae as a,ki as a0,Et as a1,ps as a2,ye as a3,Ne as a4,cd as a5,Uc as a6,Dd as a7,us as a8,Bc as a9,ss as aA,ja as aB,Xo as aC,fd as aD,jn as aE,Kd as aF,Pd as aG,Vd as aH,Wd as aI,Ud as aJ,jd as aK,Bd as aL,Td as aM,Rt as aN,_i as aO,Id as aP,zd as aQ,qd as aR,Ad as aS,_d as aT,Qd as aU,ma as aV,Cd as aW,Jd as aX,Md as aY,Od as aa,hd as ab,dd as ac,Fd as ad,Ir as ae,od as af,Tu as ag,Sn as ah,xr as ai,id as aj,J as ak,pa as al,Rc as am,ga as an,Wc as ao,Jo as ap,mo as aq,Hd as ar,gd as as,ri as at,$d as au,ud as av,Ld as aw,xd as ax,hr as ay,si as az,j as b,be as c,se as d,vs as e,fe as f,Dt as g,te as h,De as i,W as j,Ve as k,ji as l,Gd as m,kd as n,Se as o,kn as p,mr as q,ue as r,bi as s,He as t,Nt as u,yu as v,wd as w,yd as x,Us as y,al as z};
diff --git a/index.html b/index.html
index 72ac047d..dbf68c5f 100644
--- a/index.html
+++ b/index.html
@@ -5,26 +5,12 @@
Claude Relay Service - 管理后台
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
+
-
+
diff --git a/web/admin-spa/dist/assets/AccountUsageRecordsView-BOIWIhGk.js b/web/admin-spa/dist/assets/AccountUsageRecordsView-BOIWIhGk.js
deleted file mode 100644
index d6de0614..00000000
--- a/web/admin-spa/dist/assets/AccountUsageRecordsView-BOIWIhGk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BUfCkBQO.js";import{b as M}from"./vendor-Dr8jvgFu.js";import{c as K,aW as ge,r as b,_ as O,o as J,q as xe,x as c,z as e,R as u,P as r,u as g,J as w,O as P,Q as $,ac as Y,aU as ye,y as i,I as Q}from"./vue-vendor-R8HMg95E.js";import{c as W,s as j}from"./index-B3t2NHq9.js";import{f as x,R as me}from"./RecordDetailModal-CIaCpUK_.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},he={class:"text-xs text-gray-500 dark:text-gray-400"},be={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ce={key:1},Ie={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ee={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Fe={key:1},Ue={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Me={key:1,class:"space-y-4"},Ne={class:"hidden overflow-x-auto md:block"},Ae={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},He={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},rt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},lt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=K(()=>N.params.accountId),I=K(()=>N.query.platform),E=b(!1),S=b(!1),V=b([]),A=b([]),B=b([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:I.value||""}),F=b(!1),U=b(null),X=K(()=>R.name||R.id||f.value),H=K(()=>{const o={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||I.value||"unknown";return o[t]||"未知渠道"}),q=K(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?M(o).format("YYYY-MM-DD HH:mm:ss"):"--",D=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},L=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=M(s.dateRange[0]).toISOString(),t.endDate=M(s.dateRange[1]).toISOString()),I.value&&(t.platform=I.value),t},ee=o=>{var m,k,_,a,v;V.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.apiKeyId!==void 0&&(s.apiKeyId=l.apiKeyId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const h=[l.startDate,l.endDate],d=s.dateRange||[];(d[0]!==h[0]||d[1]!==h[1])&&(s.dateRange=h)}const p=o.summary||{};y.totalRequests=p.totalRequests||0,y.totalTokens=p.totalTokens||0,y.totalCost=p.totalCost||0,y.avgCost=p.avgCost||0,R.id=((m=o.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=o.accountInfo)==null?void 0:k.name)||"",R.platform=((_=o.accountInfo)==null?void 0:_.platform)||I.value||"",A.value=((a=o.availableFilters)==null?void 0:a.models)||[],B.value=((v=o.availableFilters)==null?void 0:v.apiKeys)||[]},C=async(o=n.currentPage)=>{E.value=!0;try{const t=await W.get(`/admin/accounts/${f.value}/usage-records`,{params:L(o)});ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{E.value=!1}},te=o=>{n.currentPage=o,C(o)},ae=o=>{n.pageSize=o,n.currentPage=1,C(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,C(1)},G=o=>{U.value=o,F.value=!0},oe=()=>{F.value=!1,U.value=null},re=()=>{Z.push("/accounts")},le=async()=>{var o;if(!S.value){S.value=!0;try{const t=[];let l=1,p=1;const m=50;for(;l<=p&&l<=m;){const z=(await W.get(`/admin/accounts/${f.value}/usage-records`,{params:{...L(l),pageSize:200}})).data||{};t.push(...z.records||[]),p=((o=z.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[T(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||D(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(`
-`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),h=document.createElement("a");h.href=v,h.download=`account-${f.value}-usage-records.csv`,h.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,C(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,C(1)},{deep:!0}),xe(()=>{C()}),(o,t)=>{const l=de,p=ue,m=ie,k=ce,_=pe;return i(),c("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:re}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,r(X.value),1),e("p",he,"ID: "+r(f.value),1),e("p",be,"渠道:"+r(H.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),c("span",Re,r(q.value),1)):(i(),c("span",Ce,"显示近 5000 条记录"))])]),e("div",Ie,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,r(g(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,r(g(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,r(D(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,r(D(y.avgCost)),1)])]),e("div",$e,[e("div",Ye,[u(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),u(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),c($,null,Y(A.value,a=>(i(),Q(p,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),c($,null,Y(B.value,a=>(i(),Q(p,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),u(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[u(p,{label:"时间降序",value:"desc"}),u(p,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),u(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),P(" 重置 ",-1)])),_:1,__:[10]}),u(k,{loading:S.value,type:"primary",onClick:le},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),P(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[E.value?(i(),c("div",Ee,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),P(" 加载中... ",-1)]))):(i(),c("div",Fe,[V.value.length===0?(i(),c("div",Ue,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),c("div",Me,[e("div",Ne,[e("table",Ae,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(i(!0),c($,null,Y(V.value,a=>(i(),c("tr",{key:a.timestamp+a.model},[e("td",He,r(T(a.timestamp)),1),e("td",qe,[e("div",Le,[e("span",Ge,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+r(a.apiKeyId),1)])]),e("td",Qe,r(a.model),1),e("td",We,r(g(x)(a.inputTokens)),1),e("td",Ze,r(g(x)(a.outputTokens)),1),e("td",Xe,r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("td",et,r(g(x)(a.totalTokens)),1),e("td",tt,r(a.costFormatted||D(a.cost)),1),e("td",at,[u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[14]||(t[14]=[P("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),c($,null,Y(V.value,a=>(i(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",rt,r(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",lt," ID: "+r(a.apiKeyId)+" · "+r(T(a.timestamp)),1),e("p",nt," 渠道:"+r(H.value),1)]),u(k,{size:"small",onClick:v=>G(a)},{default:w(()=>t[16]||(t[16]=[P("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(g(x)(a.totalTokens)),1),e("div",null,"输入:"+r(g(x)(a.inputTokens)),1),e("div",null,"输出:"+r(g(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(g(x)(a.cacheCreateTokens))+" / "+r(g(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+r(a.costFormatted||D(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+r(n.totalRecords)+" 条记录 ",1),u(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),u(me,{record:U.value,show:F.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default};
diff --git a/web/admin-spa/dist/assets/AccountUsageRecordsView-CAVEOn9q.js b/web/admin-spa/dist/assets/AccountUsageRecordsView-CAVEOn9q.js
new file mode 100644
index 00000000..c93a4ec3
--- /dev/null
+++ b/web/admin-spa/dist/assets/AccountUsageRecordsView-CAVEOn9q.js
@@ -0,0 +1,2 @@
+import{E as de,a as ie,b as ce,c as pe,d as ue}from"./element-plus-BSjV1f9S.js";import{b as G}from"./vendor-Dr8jvgFu.js";import{c as D,aX as ge,r as h,_ as O,o as J,q as xe,x as p,z as e,R as g,P as o,u as c,J as w,O as K,Q as $,ac as U,aU as ye,y as i,I as Q}from"./vue-vendor-DV7DYXbz.js";import{c as P,f as x,b0 as X,s as j}from"./index-BahP9Xx9.js";import{R as me}from"./RecordDetailModal-iWzEw88d.js";const ke={class:"space-y-4 p-4 lg:p-6"},fe={class:"flex flex-wrap items-center justify-between gap-3"},_e={class:"flex items-center gap-3"},ve={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},be={class:"text-xs text-gray-500 dark:text-gray-400"},he={class:"text-xs text-gray-500 dark:text-gray-400"},we={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Re={key:0},Ie={key:1},Ce={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Te={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ke={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Pe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Oe={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},$e={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ue={class:"flex flex-wrap items-center gap-3"},je={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ae={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ee={key:1},Fe={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ne={key:1,class:"space-y-4"},Be={class:"hidden overflow-x-auto md:block"},Ye={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Le={class:"flex flex-col"},Ge={class:"font-semibold"},Je={class:"text-xs text-gray-500 dark:text-gray-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},et={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},tt={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},at={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},st={class:"space-y-3 md:hidden"},ot={class:"flex items-center justify-between"},lt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},rt={class:"text-xs text-gray-500 dark:text-gray-400"},nt={class:"text-xs text-gray-500 dark:text-gray-400"},dt={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},it={class:"text-yellow-600 dark:text-yellow-400"},ct={class:"flex items-center justify-between px-4 pb-4"},pt={class:"text-sm text-gray-500 dark:text-gray-400"},ft={__name:"AccountUsageRecordsView",setup(ut){const N=ge(),Z=ye(),f=D(()=>N.params.accountId),C=D(()=>N.query.platform),A=h(!1),S=h(!1),V=h([]),B=h([]),Y=h([]),n=O({currentPage:1,pageSize:50,totalRecords:0}),s=O({dateRange:null,model:"",apiKeyId:"",sortOrder:"desc"}),y=O({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),R=O({id:f.value,name:"",platform:C.value||""}),E=h(!1),F=h(null),W=D(()=>R.name||R.id||f.value),M=D(()=>{const l={claude:"Claude官方","claude-console":"Claude Console",ccr:"Claude Console Relay",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",unknown:"未知渠道"},t=R.platform||C.value||"unknown";return l[t]||"未知渠道"}),q=D(()=>!s.dateRange||s.dateRange.length!==2?"":`${P(s.dateRange[0])} ~ ${P(s.dateRange[1])}`),T=l=>{const t=typeof l=="number"?l:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},H=l=>{const t={page:l,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.apiKeyId&&(t.apiKeyId=s.apiKeyId),s.dateRange&&s.dateRange.length===2&&(t.startDate=G(s.dateRange[0]).toISOString(),t.endDate=G(s.dateRange[1]).toISOString()),C.value&&(t.platform=C.value),t},ee=l=>{var m,k,_,a,v;V.value=l.records||[];const t=l.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const r=l.filters||{};if(r.model!==void 0&&(s.model=r.model||""),r.apiKeyId!==void 0&&(s.apiKeyId=r.apiKeyId||""),r.sortOrder&&(s.sortOrder=r.sortOrder),r.startDate&&r.endDate){const b=[r.startDate,r.endDate],d=s.dateRange||[];(d[0]!==b[0]||d[1]!==b[1])&&(s.dateRange=b)}const u=l.summary||{};y.totalRequests=u.totalRequests||0,y.totalTokens=u.totalTokens||0,y.totalCost=u.totalCost||0,y.avgCost=u.avgCost||0,R.id=((m=l.accountInfo)==null?void 0:m.id)||f.value,R.name=((k=l.accountInfo)==null?void 0:k.name)||"",R.platform=((_=l.accountInfo)==null?void 0:_.platform)||C.value||"",B.value=((a=l.availableFilters)==null?void 0:a.models)||[],Y.value=((v=l.availableFilters)==null?void 0:v.apiKeys)||[]},I=async(l=n.currentPage)=>{A.value=!0;try{const t=await X(f.value,H(l));ee(t.data||{})}catch(t){j(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{A.value=!1}},te=l=>{n.currentPage=l,I(l)},ae=l=>{n.pageSize=l,n.currentPage=1,I(1)},se=()=>{s.model="",s.apiKeyId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,I(1)},L=l=>{F.value=l,E.value=!0},oe=()=>{E.value=!1,F.value=null},le=()=>{Z.push("/accounts")},re=async()=>{var l;if(!S.value){S.value=!0;try{const t=[];let r=1,u=1;const m=50;for(;r<=u&&r<=m;){const z=(await X(f.value,{...H(r),pageSize:200})).data||{};t.push(...z.records||[]),u=((l=z.pagination)==null?void 0:l.totalPages)||1,r+=1}if(t.length===0){j("没有可导出的记录","info");return}const _=[["时间","API Key","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(d=>{const z=[P(d.timestamp),d.apiKeyName||d.apiKeyId||"",d.model||"",d.inputTokens||0,d.outputTokens||0,d.cacheCreateTokens||0,d.cacheReadTokens||0,d.totalTokens||0,d.costFormatted||T(d.cost)];_.push(z.map(ne=>`"${String(ne).replace(/"/g,'""')}"`).join(","))});const a=new Blob([_.join(`
+`)],{type:"text/csv;charset=utf-8;"}),v=URL.createObjectURL(a),b=document.createElement("a");b.href=v,b.download=`account-${f.value}-usage-records.csv`,b.click(),URL.revokeObjectURL(v),j("导出 CSV 成功","success")}catch(t){j(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return J(()=>[s.model,s.apiKeyId,s.sortOrder],()=>{n.currentPage=1,I(1)}),J(()=>s.dateRange,()=>{n.currentPage=1,I(1)},{deep:!0}),xe(()=>{I()}),(l,t)=>{const r=de,u=ue,m=ie,k=ce,_=pe;return i(),p("div",ke,[e("div",fe,[e("div",_e,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:le}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," 账户请求详情时间线 ",-1)),e("h2",ve,o(W.value),1),e("p",be,"ID: "+o(f.value),1),e("p",he,"渠道:"+o(M.value),1)])]),e("div",we,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),q.value?(i(),p("span",Re,o(q.value),1)):(i(),p("span",Ie,"显示近 5000 条记录"))])]),e("div",Ce,[e("div",Te,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",De,o(c(x)(y.totalRequests)),1)]),e("div",Ke,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Pe,o(c(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Ve,o(T(y.totalCost)),1)]),e("div",ze,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Oe,o(T(y.avgCost)),1)])]),e("div",$e,[e("div",Ue,[g(r,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:w(()=>[(i(!0),p($,null,U(B.value,a=>(i(),Q(u,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.apiKeyId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.apiKeyId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有 API Key"},{default:w(()=>[(i(!0),p($,null,U(Y.value,a=>(i(),Q(u,{key:a.id,label:a.name||a.id,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:w(()=>[g(u,{label:"时间降序",value:"desc"}),g(u,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:se},{default:w(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),K(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:S.value,type:"primary",onClick:re},{default:w(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),K(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",je,[A.value?(i(),p("div",Ae,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),K(" 加载中... ",-1)]))):(i(),p("div",Ee,[V.value.length===0?(i(),p("div",Fe,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(i(),p("div",Ne,[e("div",Be,[e("table",Ye,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(i(!0),p($,null,U(V.value,a=>(i(),p("tr",{key:a.timestamp+a.model},[e("td",qe,o(c(P)(a.timestamp)),1),e("td",He,[e("div",Le,[e("span",Ge,o(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("span",Je," ID: "+o(a.apiKeyId),1)])]),e("td",Qe,o(a.model),1),e("td",Xe,o(c(x)(a.inputTokens)),1),e("td",Ze,o(c(x)(a.outputTokens)),1),e("td",We,o(c(x)(a.cacheCreateTokens))+" / "+o(c(x)(a.cacheReadTokens)),1),e("td",et,o(c(x)(a.totalTokens)),1),e("td",tt,o(a.costFormatted||T(a.cost)),1),e("td",at,[g(k,{size:"small",onClick:v=>L(a)},{default:w(()=>t[14]||(t[14]=[K("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",st,[(i(!0),p($,null,U(V.value,a=>(i(),p("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",ot,[e("div",null,[e("p",lt,o(a.apiKeyName||a.apiKeyId||"未知 Key"),1),e("p",rt," ID: "+o(a.apiKeyId)+" · "+o(c(P)(a.timestamp)),1),e("p",nt," 渠道:"+o(M.value),1)]),g(k,{size:"small",onClick:v=>L(a)},{default:w(()=>t[16]||(t[16]=[K("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",dt,[e("div",null,"模型:"+o(a.model),1),e("div",null,"总 Token:"+o(c(x)(a.totalTokens)),1),e("div",null,"输入:"+o(c(x)(a.inputTokens)),1),e("div",null,"输出:"+o(c(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+o(c(x)(a.cacheCreateTokens))+" / "+o(c(x)(a.cacheReadTokens)),1),e("div",it," 费用:"+o(a.costFormatted||T(a.cost)),1)])]))),128))]),e("div",ct,[e("div",pt," 共 "+o(n.totalRecords)+" 条记录 ",1),g(_,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:te,onSizeChange:ae},null,8,["current-page","page-size","total"])])]))]))]),g(me,{record:F.value,show:E.value,onClose:oe},null,8,["record","show"])])}}};export{ft as default};
diff --git a/web/admin-spa/dist/assets/AccountsView-C9_86Dy1.css b/web/admin-spa/dist/assets/AccountsView-C9_86Dy1.css
deleted file mode 100644
index fee9bdb0..00000000
--- a/web/admin-spa/dist/assets/AccountsView-C9_86Dy1.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes fadeIn-824201c5{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-824201c5]{animation:fadeIn-824201c5 .3s ease-out}.loading-spinner[data-v-2a966370]{width:20px;height:20px;border:2px solid #e5e7eb;border-top:2px solid #14b8a6;border-radius:50%;animation:spin-2a966370 1s linear infinite}@keyframes spin-2a966370{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-spinner[data-v-f40122f9]{border-top-color:transparent;border-radius:9999px;animation:spin-f40122f9 .8s linear infinite}@keyframes spin-f40122f9{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fadeIn-f19e4a71{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-f19e4a71]{animation:fadeIn-f19e4a71 .2s ease-out}.loading-spinner[data-v-f19e4a71]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-f19e4a71 .8s linear infinite;display:inline-block}@keyframes spin-f19e4a71{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-v-13083b1f] .balance-script-dialog{max-height:90vh;display:flex;flex-direction:column}[data-v-13083b1f] .balance-script-dialog .el-dialog__body{flex:1 1 auto;min-height:0;overflow:auto}[data-v-13083b1f] .balance-script-dialog .el-dialog__footer{border-top:1px solid rgba(229,231,235,.7)}.input-text[data-v-13083b1f]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-text[data-v-13083b1f]:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.input-text[data-v-13083b1f]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.input-text[data-v-13083b1f]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1))}.accounts-container[data-v-9813ec02]{min-height:calc(100vh - 300px)}.loading-spinner[data-v-9813ec02]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-9813ec02 1s linear infinite}@keyframes spin-9813ec02{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-wrapper[data-v-9813ec02]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.dark .table-wrapper[data-v-9813ec02]{border-color:#ffffff1a}.table-container[data-v-9813ec02]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-9813ec02]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-9813ec02]::-webkit-scrollbar{height:8px}.table-container[data-v-9813ec02]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-9813ec02]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-9813ec02]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-9813ec02]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-9813ec02]{transition:all .2s ease}.table-row[data-v-9813ec02]:hover{background-color:#00000005}.dark .table-row[data-v-9813ec02]:hover{background-color:#ffffff05}.table-container thead .checkbox-column[data-v-9813ec02],.table-container thead .name-column[data-v-9813ec02]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-9813ec02],.dark .table-container thead .name-column[data-v-9813ec02]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container thead .operations-column[data-v-9813ec02]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-9813ec02]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-9813ec02],.table-container tbody tr:nth-child(odd) .name-column[data-v-9813ec02]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-9813ec02],.table-container tbody tr:nth-child(2n) .name-column[data-v-9813ec02]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-9813ec02]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-9813ec02]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-9813ec02],.table-container tbody tr:hover .name-column[data-v-9813ec02]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-9813ec02],.dark .table-container tbody tr:hover .name-column[data-v-9813ec02]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-9813ec02]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-9813ec02]{box-shadow:8px 0 12px -8px #1e293b73}.table-container tbody tr:nth-child(odd) .operations-column[data-v-9813ec02]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-9813ec02]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-9813ec02]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-9813ec02]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-9813ec02]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-9813ec02]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-9813ec02]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-9813ec02]{box-shadow:-8px 0 12px -8px #1e293b73}
diff --git a/web/admin-spa/dist/assets/AccountsView-CWWlCm8X.css b/web/admin-spa/dist/assets/AccountsView-CWWlCm8X.css
new file mode 100644
index 00000000..b24853b4
--- /dev/null
+++ b/web/admin-spa/dist/assets/AccountsView-CWWlCm8X.css
@@ -0,0 +1 @@
+@keyframes fadeIn-31bfe83b{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-31bfe83b]{animation:fadeIn-31bfe83b .3s ease-out}.loading-spinner[data-v-3b48d107]{width:20px;height:20px;border:2px solid #e5e7eb;border-top:2px solid #14b8a6;border-radius:50%;animation:spin-3b48d107 1s linear infinite}@keyframes spin-3b48d107{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-spinner[data-v-c29b5f70]{border-top-color:transparent;border-radius:9999px;animation:spin-c29b5f70 .8s linear infinite}@keyframes spin-c29b5f70{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes fadeIn-f19e4a71{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-f19e4a71]{animation:fadeIn-f19e4a71 .2s ease-out}.loading-spinner[data-v-f19e4a71]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-f19e4a71 .8s linear infinite;display:inline-block}@keyframes spin-f19e4a71{0%{transform:rotate(0)}to{transform:rotate(360deg)}}[data-v-5e76f743] .balance-script-dialog{max-height:90vh;display:flex;flex-direction:column}[data-v-5e76f743] .balance-script-dialog .el-dialog__body{flex:1 1 auto;min-height:0;overflow:auto}[data-v-5e76f743] .balance-script-dialog .el-dialog__footer{border-top:1px solid rgba(229,231,235,.7)}.input-text[data-v-5e76f743]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-text[data-v-5e76f743]:focus{--tw-border-opacity: 1;border-color:rgb(129 140 248 / var(--tw-border-opacity, 1));outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(199 210 254 / var(--tw-ring-opacity, 1))}.input-text[data-v-5e76f743]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.input-text[data-v-5e76f743]:focus:is(.dark *){--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity, 1))}.accounts-container[data-v-f3c6543e]{min-height:calc(100vh - 300px)}.loading-spinner[data-v-f3c6543e]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-f3c6543e 1s linear infinite}@keyframes spin-f3c6543e{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.table-wrapper[data-v-f3c6543e]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05)}.dark .table-wrapper[data-v-f3c6543e]{border-color:#ffffff1a}.table-container[data-v-f3c6543e]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-f3c6543e]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-f3c6543e]::-webkit-scrollbar{height:8px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-track{background:var(--bg-gradient-mid)}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb{background:var(--bg-gradient-end)}.dark .table-container[data-v-f3c6543e]::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.table-container tbody tr:hover>td[data-v-f3c6543e]{background-color:rgba(var(--primary-rgb),.06)!important}.dark .table-container tbody tr:hover>td[data-v-f3c6543e]{background-color:rgba(var(--primary-rgb),.16)!important}.table-container tbody tr:nth-child(odd)>td[data-v-f3c6543e]{background-color:#fff}.table-container tbody tr:nth-child(2n)>td[data-v-f3c6543e]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd)>td[data-v-f3c6543e]{background-color:var(--bg-gradient-start)}.dark .table-container tbody tr:nth-child(2n)>td[data-v-f3c6543e]{background-color:var(--bg-gradient-mid)}.table-container thead .checkbox-column[data-v-f3c6543e],.table-container thead .name-column[data-v-f3c6543e]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-f3c6543e],.dark .table-container thead .name-column[data-v-f3c6543e]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container thead .operations-column[data-v-f3c6543e]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-f3c6543e]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .name-column[data-v-f3c6543e]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-f3c6543e]{box-shadow:8px 0 12px -8px #1e293b73}.table-container tbody .operations-column[data-v-f3c6543e]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-f3c6543e]{box-shadow:-8px 0 12px -8px #1e293b73}
diff --git a/web/admin-spa/dist/assets/AccountsView-G6_okn5O.js b/web/admin-spa/dist/assets/AccountsView-G6_okn5O.js
deleted file mode 100644
index 3238e8f9..00000000
--- a/web/admin-spa/dist/assets/AccountsView-G6_okn5O.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import{b as Kr,e as br,f as Sr}from"./element-plus-BUfCkBQO.js";import{r as $,aP as Mr,o as $e,V as Ya,x as n,y as o,z as e,L as c,K as b,al as ze,aT as Ot,O as x,aq as z,aa as Dr,P as u,aV as Ja,aY as va,C as I,c as se,Z as Pr,an as _e,Q as Ce,q as aa,I as Ye,ac as We,a5 as Kt,R as Ee,B as He,u as st,aX as jr,aU as Lr,D as ar,_ as vr,J as nt,Y as _t}from"./vue-vendor-R8HMg95E.js";import{c as G,s as P,_ as ra,a as Vr,A as ka}from"./index-B3t2NHq9.js";import{C as kr}from"./ConfirmModal-BAFPIqcc.js";import{C as zr}from"./chart-yFHxLHpB.js";import{C as Qa,_ as Rr}from"./ActionDropdown-4ngn0-GS.js";import"./vendor-Dr8jvgFu.js";const Ha=$(!1),pr=$({title:"",message:"",confirmText:"继续",cancelText:"取消"}),Rt=$(null);function hr(){return{showConfirmModal:Ha,confirmOptions:pr,showConfirm:(N,K,V="继续",U="取消")=>new Promise(C=>{pr.value={title:N,message:K,confirmText:V,cancelText:U},Rt.value=C,Ha.value=!0}),handleConfirm:()=>{Ha.value=!1,Rt.value&&(Rt.value(!0),Rt.value=null)},handleCancel:()=>{Ha.value=!1,Rt.value&&(Rt.value(!1),Rt.value=null)}}}const wr=Mr("accounts",()=>{const H=$([]),Pe=$([]),p=$([]),N=$([]),K=$([]),V=$([]),U=$([]),C=$([]),v=$(!1),k=$(null),j=$(""),oe=$("asc"),Z=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-accounts");if(w.success)H.value=w.data||[];else throw new Error(w.message||"获取Claude账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},pe=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/claude-console-accounts");if(w.success)Pe.value=w.data||[];else throw new Error(w.message||"获取Claude Console账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},J=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/bedrock-accounts");if(w.success)p.value=w.data||[];else throw new Error(w.message||"获取Bedrock账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},W=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/gemini-accounts");if(w.success)N.value=w.data||[];else throw new Error(w.message||"获取Gemini账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},O=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-accounts");if(w.success)K.value=w.data||[];else throw new Error(w.message||"获取OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},y=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/azure-openai-accounts");if(w.success)V.value=w.data||[];else throw new Error(w.message||"获取Azure OpenAI账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},g=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/openai-responses-accounts");if(w.success)U.value=w.data||[];else throw new Error(w.message||"获取OpenAI-Responses账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}},D=async()=>{v.value=!0,k.value=null;try{const w=await G.get("/admin/droid-accounts");if(w.success)C.value=w.data||[];else throw new Error(w.message||"获取Droid账户失败")}catch(w){throw k.value=w.message,w}finally{v.value=!1}};return{claudeAccounts:H,claudeConsoleAccounts:Pe,bedrockAccounts:p,geminiAccounts:N,openaiAccounts:K,azureOpenaiAccounts:V,openaiResponsesAccounts:U,droidAccounts:C,loading:v,error:k,sortBy:j,sortOrder:oe,fetchClaudeAccounts:Z,fetchClaudeConsoleAccounts:pe,fetchBedrockAccounts:J,fetchGeminiAccounts:W,fetchOpenAIAccounts:O,fetchAzureOpenAIAccounts:y,fetchOpenAIResponsesAccounts:g,fetchDroidAccounts:D,fetchAllAccounts:async()=>{v.value=!0,k.value=null;try{await Promise.all([Z(),pe(),J(),W(),O(),y(),g(),D()])}catch(w){throw k.value=w.message,w}finally{v.value=!1}},createClaudeAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-accounts",w);if(m.success)return await Z(),m.data;throw new Error(m.message||"创建Claude账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createClaudeConsoleAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/claude-console-accounts",w);if(m.success)return await pe(),m.data;throw new Error(m.message||"创建Claude Console账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createBedrockAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/bedrock-accounts",w);if(m.success)return await J(),m.data;throw new Error(m.message||"创建Bedrock账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-accounts",w);if(m.success)return await O(),m.data;throw new Error(m.message||"创建OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createDroidAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/droid-accounts",w);if(m.success)return await D(),m.data;throw new Error(m.message||"创建Droid账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateDroidAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/droid-accounts/${w}`,m);if(E.success)return await D(),E.data;throw new Error(E.message||"更新Droid账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},createAzureOpenAIAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/azure-openai-accounts",w);if(m.success)return await y(),m.data;throw new Error(m.message||"创建Azure OpenAI账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createOpenAIResponsesAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/openai-responses-accounts",w);if(m.success)return await g(),m.data;throw new Error(m.message||"创建OpenAI-Responses账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},createGeminiApiAccount:async w=>{v.value=!0,k.value=null;try{const m=await G.post("/admin/gemini-api-accounts",w);if(m.success)return await W(),m.data;throw new Error(m.message||"创建Gemini API账户失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},updateClaudeAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-accounts/${w}`,m);if(E.success)return await Z(),E;throw new Error(E.message||"更新Claude账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateClaudeConsoleAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/claude-console-accounts/${w}`,m);if(E.success)return await pe(),E;throw new Error(E.message||"更新Claude Console账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateBedrockAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/bedrock-accounts/${w}`,m);if(E.success)return await J(),E;throw new Error(E.message||"更新Bedrock账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-accounts/${w}`,m);if(E.success)return await O(),E;throw new Error(E.message||"更新OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateAzureOpenAIAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/azure-openai-accounts/${w}`,m);if(E.success)return await y(),E;throw new Error(E.message||"更新Azure OpenAI账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateOpenAIResponsesAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/openai-responses-accounts/${w}`,m);if(E.success)return await g(),E;throw new Error(E.message||"更新OpenAI-Responses账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},updateGeminiApiAccount:async(w,m)=>{v.value=!0,k.value=null;try{const E=await G.put(`/admin/gemini-api-accounts/${w}`,m);if(E.success)return await W(),E;throw new Error(E.message||"更新Gemini API账户失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},toggleAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}/toggle`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}/toggle`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}/toggle`:w==="gemini"?E=`/admin/gemini-accounts/${m}/toggle`:w==="openai"?E=`/admin/openai-accounts/${m}/toggle`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}/toggle`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}/toggle`:E=`/admin/openai-accounts/${m}/toggle`;const Qe=await G.put(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"切换状态失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},deleteAccount:async(w,m)=>{v.value=!0,k.value=null;try{let E;w==="claude"?E=`/admin/claude-accounts/${m}`:w==="claude-console"?E=`/admin/claude-console-accounts/${m}`:w==="bedrock"?E=`/admin/bedrock-accounts/${m}`:w==="gemini"?E=`/admin/gemini-accounts/${m}`:w==="openai"?E=`/admin/openai-accounts/${m}`:w==="azure_openai"?E=`/admin/azure-openai-accounts/${m}`:w==="openai-responses"?E=`/admin/openai-responses-accounts/${m}`:E=`/admin/openai-accounts/${m}`;const Qe=await G.delete(E);if(Qe.success)return w==="claude"?await Z():w==="claude-console"?await pe():w==="bedrock"?await J():w==="gemini"?await W():w==="openai"?await O():w==="azure_openai"?await y():w==="openai-responses"?await g():await O(),Qe;throw new Error(Qe.message||"删除失败")}catch(E){throw k.value=E.message,E}finally{v.value=!1}},refreshClaudeToken:async w=>{v.value=!0,k.value=null;try{const m=await G.post(`/admin/claude-accounts/${w}/refresh`);if(m.success)return await Z(),m;throw new Error(m.message||"Token刷新失败")}catch(m){throw k.value=m.message,m}finally{v.value=!1}},generateClaudeAuthUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateClaudeSetupTokenUrl:async w=>{try{const m=await G.post("/admin/claude-accounts/generate-setup-token-url",w);if(m.success)return m.data;throw new Error(m.message||"生成Setup Token URL失败")}catch(m){throw k.value=m.message,m}},exchangeClaudeSetupTokenCode:async w=>{try{const m=await G.post("/admin/claude-accounts/exchange-setup-token-code",w);if(m.success)return m.data;throw new Error(m.message||"交换Setup Token授权码失败")}catch(m){throw k.value=m.message,m}},oauthWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/oauth-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},oauthSetupTokenWithCookie:async w=>{try{const m=await G.post("/admin/claude-accounts/setup-token-with-cookie",w);if(m.success)return m.data;throw new Error(m.message||"Cookie授权失败")}catch(m){throw k.value=m.message,m}},generateGeminiAuthUrl:async w=>{try{const m=await G.post("/admin/gemini-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeGeminiCode:async w=>{try{const m=await G.post("/admin/gemini-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateOpenAIAuthUrl:async w=>{try{const m=await G.post("/admin/openai-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeOpenAICode:async w=>{try{const m=await G.post("/admin/openai-accounts/exchange-code",w);if(m.success)return m.data;throw new Error(m.message||"交换授权码失败")}catch(m){throw k.value=m.message,m}},generateDroidAuthUrl:async w=>{k.value=null;try{const m=await G.post("/admin/droid-accounts/generate-auth-url",w);if(m.success)return m.data;throw new Error(m.message||"生成授权URL失败")}catch(m){throw k.value=m.message,m}},exchangeDroidCode:async w=>{k.value=null;try{return await G.post("/admin/droid-accounts/exchange-code",w)}catch(m){throw k.value=m.message,m}},sortAccounts:w=>{j.value===w?oe.value=oe.value==="asc"?"desc":"asc":(j.value=w,oe.value="asc")},reset:()=>{H.value=[],Pe.value=[],p.value=[],N.value=[],K.value=[],V.value=[],U.value=[],C.value=[],v.value=!1,k.value=null,j.value="",oe.value="asc"}}}),Or={class:"space-y-4"},Er={class:"flex items-center justify-between"},Nr={class:"flex cursor-pointer items-center"},qr={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Wr={class:"relative"},Fr={key:0,class:"mt-1 text-xs text-red-500"},Br={key:1,class:"mt-1 text-xs text-green-500"},Gr={class:"grid grid-cols-2 gap-4"},Qr={class:"space-y-4"},Hr={class:"flex items-center"},Jr={key:0,class:"grid grid-cols-2 gap-4"},Yr={class:"relative"},Zr=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$({...p.modelValue}),V=$(!!(K.value.username||K.value.password)),U=$(!1),C=$(""),v=$(""),k=$(!1);$e(()=>p.modelValue,O=>{JSON.stringify(O)!==JSON.stringify(K.value)&&(K.value={...O},V.value=!!(O.username||O.password))},{deep:!0}),$e(()=>K.value.enabled,()=>{oe()}),$e(()=>K.value.type,()=>{oe()}),$e(()=>K.value.host,()=>{oe()}),$e(()=>K.value.port,()=>{oe()}),$e(()=>K.value.username,()=>{oe()}),$e(()=>K.value.password,()=>{oe()}),$e(V,O=>{O||(K.value.username="",K.value.password="",oe())});let j=null;function oe(){j&&clearTimeout(j),j=setTimeout(()=>{const O={...K.value};V.value||(O.username="",O.password=""),N("update:modelValue",O)},100)}function Z(){if(v.value="",k.value=!1,!!C.value)try{const O=C.value.split("#")[0].trim();if(!O)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,g=O.match(y);if(!g){const we=/^([^:]+):(\d+)$/,Ke=O.match(we);if(Ke){K.value.type="socks5",K.value.host=Ke[1],K.value.port=Ke[2],K.value.username="",K.value.password="",V.value=!1,k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3);return}v.value="无效的代理URL格式,请检查输入";return}const[,D,ce,B,_,Q]=g;K.value.type=D.toLowerCase(),K.value.host=_,K.value.port=Q,ce&&B?(K.value.username=decodeURIComponent(ce),K.value.password=decodeURIComponent(B),V.value=!0):(K.value.username="",K.value.password="",V.value=!1),k.value=!0,oe(),setTimeout(()=>{k.value=!1},3e3)}catch{v.value="解析失败,请检查URL格式"}}function pe(){C.value="",v.value="",k.value=!1}function J(){setTimeout(()=>{Z()},0)}function W(){const O=C.value.trim();O.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(O)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(O))&&Z():/^[^:]+:\d{2,5}$/.test(O)&&Z()}return Ya(()=>{j&&clearTimeout(j)}),(O,y)=>(o(),n("div",Or,[e("div",Er,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",Nr,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=g=>K.value.enabled=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,K.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),K.value.enabled?(o(),n("div",qr,[y[22]||(y[22]=Ot('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[x(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Wr,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=g=>C.value=g),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:W,onKeyup:Dr(Z,["enter"]),onPaste:J},null,544),[[z,C.value]]),C.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:pe},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):c("",!0)]),v.value?(o(),n("p",Fr,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(v.value),1)])):k.value?(o(),n("p",Br,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),x(" 代理配置已自动填充 ",-1)]))):c("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=g=>K.value.type=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ja,K.value.type]])]),e("div",Gr,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=g=>K.value.host=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[z,K.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=g=>K.value.port=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[z,K.value.port]])])]),e("div",Qr,[e("div",Hr,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=g=>V.value=g),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ze,V.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),V.value?(o(),n("div",Jr,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=g=>K.value.username=g),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[z,K.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Yr,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=g=>K.value.password=g),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:U.value?"text":"password"},null,8,Zr),[[va,K.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=g=>U.value=!U.value)},[e("i",{class:I(U.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):c("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),x("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):c("",!0)]))}},Xr={class:"space-y-6"},es={key:0},ts={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},as={class:"flex items-start gap-4"},rs={class:"flex-1"},ss={class:"mb-4"},ls={class:"flex gap-4"},os={class:"flex cursor-pointer items-center gap-2"},ns={class:"flex cursor-pointer items-center gap-2"},is={key:0,class:"space-y-4"},ds={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},us={class:"mb-4"},gs={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},ps={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},cs={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},ys={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},ms={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},xs={class:"text-sm text-red-600 dark:text-red-400"},fs=["disabled"],bs={key:0,class:"loading-spinner mr-2"},vs={key:1,class:"fas fa-magic mr-2"},ks={key:1},hs={class:"space-y-4"},ws={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},$s={class:"flex items-start gap-3"},As={class:"flex-1"},Cs=["disabled"],Ts={key:0,class:"fas fa-link mr-2"},Is={key:1,class:"loading-spinner mr-2"},Us={key:1,class:"space-y-3"},_s={class:"flex items-center gap-2"},Ks=["value"],Ss={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ms={class:"flex items-start gap-3"},Ds={class:"flex-1"},Ps={class:"space-y-3"},js={key:1},Ls={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Vs={class:"flex items-start gap-4"},zs={class:"flex-1"},Rs={class:"mb-4"},Os={class:"text-sm text-green-800 dark:text-green-300"},Es={class:"font-semibold"},Ns={class:"space-y-4"},qs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Ws={class:"flex items-start gap-3"},Fs={class:"flex-1"},Bs=["disabled"],Gs={key:0,class:"fas fa-link mr-2"},Qs={key:1,class:"loading-spinner mr-2"},Hs={key:1,class:"space-y-3"},Js={class:"flex items-center gap-2"},Ys=["value"],Zs={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},Xs={class:"flex items-start gap-3"},el={class:"flex-1"},tl={class:"space-y-3"},al={key:2},rl={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},sl={class:"flex items-start gap-4"},ll={class:"flex-1"},ol={class:"space-y-4"},nl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},il={class:"flex items-start gap-3"},dl={class:"flex-1"},ul=["disabled"],gl={key:0,class:"fas fa-link mr-2"},pl={key:1,class:"loading-spinner mr-2"},cl={key:1,class:"space-y-3"},yl={class:"flex items-center gap-2"},ml=["value"],xl={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},fl={class:"flex items-start gap-3"},bl={class:"flex-1"},vl={class:"space-y-3"},kl={key:3},hl={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},wl={class:"flex items-start gap-4"},$l={class:"flex-1"},Al={class:"space-y-4"},Cl={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Tl={class:"flex items-start gap-3"},Il={class:"flex-1"},Ul=["disabled"],_l={key:0,class:"fas fa-link mr-2"},Kl={key:1,class:"loading-spinner mr-2"},Sl={key:1,class:"space-y-4"},Ml={class:"space-y-2"},Dl={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Pl={class:"flex items-center gap-2"},jl=["value"],Ll={class:"space-y-2"},Vl={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},zl={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},Rl={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Ol={class:"flex gap-3 pt-4"},El=["disabled"],Nl={key:0,class:"loading-spinner mr-2"},ql={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=wr(),U=$(!1),C=$(!1),v=$(""),k=$(""),j=$(!1),oe=se(()=>N.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),Z=$(""),pe=$(""),J=$(""),W=$(""),O=$(0);let y=null;const g=$("manual"),D=$(""),ce=$(!1),B=$(""),_=$(!1),Q=$({current:0,total:0}),we=se(()=>D.value.split(`
-`).map(de=>de.trim()).filter(de=>de.length>0).length),Ke=se(()=>N.platform==="droid"?!!Z.value:v.value&&k.value.trim()),F=se(()=>{if(!O.value||O.value<=0)return"00:00";const de=Math.floor(O.value/60),a=O.value%60;return`${de.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}`}),ee=de=>{if(S(),!de||de<=0){O.value=0;return}O.value=Math.floor(de),y=setInterval(()=>{O.value<=1?(O.value=0,S()):O.value-=1},1e3)},S=()=>{y&&(clearInterval(y),y=null)};$e(k,de=>{if(N.platform==="droid"||!de||typeof de!="string")return;const a=de.trim();if(!a)return;if(a.startsWith("http://")||a.startsWith("https://"))if(a.startsWith("http://localhost:45462")||a.startsWith("http://localhost:1455"))try{const Ge=new URL(a).searchParams.get("code");Ge?(k.value=Ge,P("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(Ae){console.error("Failed to parse URL:",Ae),P("链接格式错误,请检查是否为完整的 URL","error")}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"||N.platform==="openai")try{const Ge=new URL(a).searchParams.get("code");Ge&&(k.value=Ge,P("成功提取授权码!","success"))}catch{}else P("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const h=async()=>{var de;S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",j.value=!1,U.value=!0;try{const a=(de=N.proxy)!=null&&de.enabled?{proxy:{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}}:{};if(N.platform==="claude"){const te=await V.generateClaudeAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="gemini"||N.platform==="gemini-antigravity"){const te=await V.generateGeminiAuthUrl({...a,oauthProvider:oe.value});v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="openai"){const te=await V.generateOpenAIAuthUrl(a);v.value=te.authUrl,Z.value=te.sessionId}else if(N.platform==="droid"){const te=await V.generateDroidAuthUrl(a);v.value=te.verificationUriComplete||te.verificationUri,J.value=te.verificationUri,W.value=te.verificationUriComplete||te.verificationUri,pe.value=te.userCode,ee(te.expiresIn||300),Z.value=te.sessionId}}catch(a){P(a.message||"生成授权链接失败","error")}finally{U.value=!1}},fe=()=>{S(),v.value="",k.value="",pe.value="",J.value="",W.value="",O.value=0,Z.value="",h()},le=async()=>{if(!v.value){P("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(v.value),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}catch{const a=document.createElement("input");a.value=v.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),j.value=!0,P("链接已复制","success"),setTimeout(()=>{j.value=!1},2e3)}},je=async()=>{if(!pe.value){P("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(pe.value),P("验证码已复制","success")}catch{const a=document.createElement("input");a.value=pe.value,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),P("验证码已复制","success")}},Y=()=>{W.value?window.open(W.value,"_blank","noopener"):J.value&&window.open(J.value,"_blank","noopener")},T=async()=>{var de;if(Ke.value){C.value=!0;try{let a={};N.platform==="claude"?a={sessionId:Z.value,callbackUrl:k.value.trim()}:N.platform==="gemini"||N.platform==="gemini-antigravity"?a={code:k.value.trim(),sessionId:Z.value,oauthProvider:oe.value}:N.platform==="openai"?a={code:k.value.trim(),sessionId:Z.value}:N.platform==="droid"&&(a={sessionId:Z.value}),(de=N.proxy)!=null&&de.enabled&&(a.proxy={type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null});let te;if(N.platform==="claude")te=await V.exchangeClaudeCode(a);else if(N.platform==="gemini"||N.platform==="gemini-antigravity")te=await V.exchangeGeminiCode(a),te&&(te.oauthProvider=oe.value);else if(N.platform==="openai")te=await V.exchangeOpenAICode(a);else if(N.platform==="droid"){const Ae=await V.exchangeDroidCode(a);if(!Ae.success){if(Ae.pending){const Ge=Ae.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";P(Ge,"info"),typeof Ae.expiresIn=="number"&&Ae.expiresIn>=0&&ee(Ae.expiresIn);return}throw new Error(Ae.message||"授权失败,请重试")}te=Ae.data,S()}K("success",te)}catch(a){P(a.message||"授权失败,请检查授权码是否正确","error")}finally{C.value=!1}}};Pr(()=>{S()});const q=async()=>{var Ge;const de=D.value.split(`
-`).map(De=>De.trim()).filter(De=>De.length>0);if(de.length===0){B.value="请输入至少一个 sessionKey";return}ce.value=!0,B.value="",Q.value={current:0,total:de.length};const a=(Ge=N.proxy)!=null&&Ge.enabled?{type:N.proxy.type,host:N.proxy.host,port:parseInt(N.proxy.port),username:N.proxy.username||null,password:N.proxy.password||null}:null,te=[],Ae=[];for(let De=0;De0?K("success",te):ce.value=!1,Ae.length>0&&te.length===0?B.value="全部授权失败,请检查 sessionKey 是否有效":Ae.length>0&&(B.value=`${Ae.length} 个授权失败`)},be=()=>{D.value="",B.value="",ce.value=!1,Q.value={current:0,total:0}},ge=()=>{be(),v.value="",k.value="",Z.value=""};return Pe({resetCookieAuth:be}),(de,a)=>(o(),n("div",Xr,[H.platform==="claude"?(o(),n("div",es,[e("div",ts,[e("div",as,[a[29]||(a[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",rs,[a[28]||(a[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",ss,[a[10]||(a[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",ls,[e("label",os,[b(e("input",{"onUpdate:modelValue":a[0]||(a[0]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:ge},null,544),[[_e,g.value]]),a[8]||(a[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",ns,[b(e("input",{"onUpdate:modelValue":a[1]||(a[1]=te=>g.value=te),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:ge},null,544),[[_e,g.value]]),a[9]||(a[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),g.value==="cookie"?(o(),n("div",is,[e("div",ds,[a[17]||(a[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",us,[e("label",gs,[a[12]||(a[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),a[13]||(a[13]=x(" sessionKey ",-1)),we.value>1?(o(),n("span",ps,u(we.value)+" 个 ",1)):c("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:a[2]||(a[2]=te=>_.value=!_.value)},a[11]||(a[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":a[3]||(a[3]=te=>D.value=te),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
-sk-ant-sid01-xxxxx...
-sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[z,D.value]]),we.value>1?(o(),n("p",cs,[a[14]||(a[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(we.value)+" 个账户 ",1)])):c("",!0)]),_.value?(o(),n("div",ys,a[15]||(a[15]=[Ot('如何获取 sessionKey
- 在浏览器中登录 claude.ai
- 按 F12 打开开发者工具
- 切换到 Application(应用)标签页
- 在左侧找到 Cookies → https://claude.ai
- 找到键为 sessionKey 的那一行
- 复制其 Value(值)列的内容
sessionKey 通常以 sk-ant-sid01- 开头
',3)]))):c("",!0),B.value?(o(),n("div",ms,[e("p",xs,[a[16]||(a[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),x(" "+u(B.value),1)])])):c("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:ce.value||!D.value.trim(),type:"button",onClick:q},[ce.value?(o(),n("div",bs)):(o(),n("i",vs)),ce.value&&Q.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(Q.value.current)+"/"+u(Q.value.total)+"... ",1)],64)):ce.value?(o(),n(Ce,{key:3},[x(" 正在授权... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,fs)])])):(o(),n("div",ks,[a[27]||(a[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",hs,[e("div",ws,[e("div",$s,[a[20]||(a[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",As,[a[19]||(a[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Us,[e("div",_s,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ks),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:fe},a[18]||(a[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Is)):(o(),n("i",Ts)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Cs))])])]),a[26]||(a[26]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Ss,[e("div",Ms,[a[25]||(a[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ds,[a[23]||(a[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),a[24]||(a[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[x(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),x(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Ps,[e("div",null,[a[21]||(a[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[4]||(a[4]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[22]||(a[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):H.platform==="gemini"||H.platform==="gemini-antigravity"?(o(),n("div",js,[e("div",Ls,[e("div",Vs,[a[43]||(a[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",zs,[a[41]||(a[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),a[42]||(a[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",Rs,[e("p",Os,[a[30]||(a[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a[31]||(a[31]=x(" 授权类型:",-1)),e("span",Es,u(H.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",Ns,[e("div",qs,[e("div",Ws,[a[34]||(a[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Fs,[a[33]||(a[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Hs,[e("div",Js,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,Ys),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:fe},a[32]||(a[32]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Qs)):(o(),n("i",Gs)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Bs))])])]),a[40]||(a[40]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Zs,[e("div",Xs,[a[39]||(a[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",el,[a[37]||(a[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),a[38]||(a[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",tl,[e("div",null,[a[35]||(a[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[5]||(a[5]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[z,k.value]])]),a[36]||(a[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),x(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):H.platform==="openai"?(o(),n("div",al,[e("div",rl,[e("div",sl,[a[55]||(a[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ll,[a[53]||(a[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),a[54]||(a[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",ol,[e("div",nl,[e("div",il,[a[46]||(a[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",dl,[a[45]||(a[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",cl,[e("div",yl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,ml),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:fe},a[44]||(a[44]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",pl)):(o(),n("i",gl)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,ul))])])]),a[52]||(a[52]=Ot(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",xl,[e("div",fl,[a[51]||(a[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",bl,[a[49]||(a[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),a[50]||(a[50]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[x(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),x(" 时: ")],-1)),e("div",vl,[e("div",null,[a[47]||(a[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),x("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":a[6]||(a[6]=te=>k.value=te),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
-方式2:仅复制 code 参数的值
-系统会自动识别并提取所需信息`,rows:"3"},null,512),[[z,k.value]])]),a[48]||(a[48]=Ot('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):H.platform==="droid"?(o(),n("div",kl,[e("div",hl,[e("div",wl,[a[67]||(a[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",$l,[a[65]||(a[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),a[66]||(a[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Al,[e("div",Cl,[e("div",Tl,[a[63]||(a[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Il,[a[62]||(a[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),v.value?(o(),n("div",Sl,[e("div",Ml,[a[58]||(a[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Dl,[e("div",Pl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:v.value},null,8,jl),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:le},[e("i",{class:I(j.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Y},a[56]||(a[56]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),x(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:fe},a[57]||(a[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),x("重新生成 ",-1)]))])])]),e("div",Ll,[a[60]||(a[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Vl,[e("span",zl,u(pe.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:je},a[59]||(a[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),x("复制 ",-1)]))])]),e("div",Rl,[e("span",null,[a[61]||(a[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),x(" 剩余有效期:"+u(F.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:U.value,onClick:h},[U.value?(o(),n("div",Kl)):(o(),n("i",_l)),x(" "+u(U.value?"生成中...":"生成授权链接"),1)],8,Ul))])])]),a[64]||(a[64]=Ot(' 2
在浏览器中打开链接并完成授权
在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。
3
完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。
若提示授权仍在等待确认,请稍候片刻后系统会自动重试。
',2))])])])])])):c("",!0),e("div",Ol,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:a[7]||(a[7]=te=>de.$emit("back"))}," 上一步 "),H.platform==="claude"&&g.value==="cookie"?c("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!Ke.value||C.value,type:"button",onClick:T},[C.value?(o(),n("div",Nl)):c("",!0),x(" "+u(C.value?"验证中...":"完成授权"),1)],8,El))])]))}},Wl={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Fl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},Bl={class:"mb-4 flex items-center justify-between sm:mb-6"},Gl={class:"mb-6"},Ql={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},Hl={class:"space-y-4"},Jl={class:"flex gap-4"},Yl={class:"flex cursor-pointer items-center"},Zl={class:"flex cursor-pointer items-center"},Xl={class:"flex cursor-pointer items-center"},eo={class:"flex cursor-pointer items-center"},to={class:"flex gap-3"},ao=["disabled"],ro={key:0,class:"loading-spinner mr-2"},so={class:"space-y-4"},lo={key:0,class:"py-8 text-center"},oo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},no={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},io={class:"mb-3 flex items-start justify-between"},uo={class:"flex-1"},go={class:"font-semibold text-gray-900"},po={class:"mt-1 text-sm text-gray-500"},co={class:"ml-4 flex items-center gap-2"},yo={class:"flex items-center justify-between text-sm text-gray-600"},mo={class:"flex items-center gap-4"},xo={class:"flex items-center gap-2"},fo=["onClick"],bo=["disabled","onClick"],vo={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ko={class:"modal-content w-full max-w-lg p-4 sm:p-6"},ho={class:"space-y-4"},wo={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},$o={class:"flex gap-3 pt-4"},Ao=["disabled"],Co={key:0,class:"loading-spinner mr-2"},To={__name:"GroupManagementModal",emits:["close","refresh"],setup(H,{emit:Pe}){const p=Pe,N=$(!0),K=$(!1),V=$([]),U=$(!1),C=$(!1),v=$({name:"",platform:"claude",description:""}),k=$(!1),j=$(!1),oe=$(null),Z=$({name:"",platform:"",description:""}),pe=B=>B?new Date(B).toLocaleDateString("zh-CN"):"-",J=async()=>{K.value=!0;try{const B=await G.get("/admin/account-groups");V.value=B.data||[]}catch{P("加载分组列表失败","error")}finally{K.value=!1}},W=async()=>{var B,_;if(!v.value.name||!v.value.platform){P("请填写必填项","error");return}C.value=!0;try{await G.post("/admin/account-groups",{name:v.value.name,platform:v.value.platform,description:v.value.description}),P("分组创建成功","success"),O(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"创建分组失败","error")}finally{C.value=!1}},O=()=>{U.value=!1,v.value={name:"",platform:"claude",description:""}},y=B=>{oe.value=B,Z.value={name:B.name,platform:B.platform,description:B.description||""},k.value=!0},g=async()=>{var B,_;if(!Z.value.name){P("请填写分组名称","error");return}j.value=!0;try{await G.put(`/admin/account-groups/${oe.value.id}`,{name:Z.value.name,description:Z.value.description}),P("分组更新成功","success"),D(),await J(),p("refresh")}catch(Q){P(((_=(B=Q.response)==null?void 0:B.data)==null?void 0:_.error)||"更新分组失败","error")}finally{j.value=!1}},D=()=>{k.value=!1,oe.value=null,Z.value={name:"",platform:"",description:""}},ce=async B=>{var _,Q;if(B.memberCount>0){P("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${B.name}" 吗?`))try{await G.delete(`/admin/account-groups/${B.id}`),P("分组删除成功","success"),await J(),p("refresh")}catch(we){P(((Q=(_=we.response)==null?void 0:_.data)==null?void 0:Q.error)||"删除分组失败","error")}};return aa(()=>{J()}),(B,_)=>(o(),Ye(Kt,{to:"body"},[N.value?(o(),n("div",Wl,[e("div",Fl,[e("div",Bl,[_[11]||(_[11]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:_[0]||(_[0]=Q=>B.$emit("close"))},_[10]||(_[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Gl,[e("button",{class:"btn btn-primary px-4 py-2",onClick:_[1]||(_[1]=Q=>U.value=!0)},_[12]||(_[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 创建新分组 ",-1)]))]),U.value?(o(),n("div",Ql,[_[20]||(_[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",Hl,[e("div",null,[_[13]||(_[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[2]||(_[2]=Q=>v.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,v.value.name]])]),e("div",null,[_[18]||(_[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",Jl,[e("label",Yl,[b(e("input",{"onUpdate:modelValue":_[3]||(_[3]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"claude"},null,512),[[_e,v.value.platform]]),_[14]||(_[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",Zl,[b(e("input",{"onUpdate:modelValue":_[4]||(_[4]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"gemini"},null,512),[[_e,v.value.platform]]),_[15]||(_[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",Xl,[b(e("input",{"onUpdate:modelValue":_[5]||(_[5]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"openai"},null,512),[[_e,v.value.platform]]),_[16]||(_[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",eo,[b(e("input",{"onUpdate:modelValue":_[6]||(_[6]=Q=>v.value.platform=Q),class:"mr-2",type:"radio",value:"droid"},null,512),[[_e,v.value.platform]]),_[17]||(_[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[_[19]||(_[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":_[7]||(_[7]=Q=>v.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,v.value.description]])]),e("div",to,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!v.value.name||!v.value.platform||C.value,onClick:W},[C.value?(o(),n("div",ro)):c("",!0),x(" "+u(C.value?"创建中...":"创建"),1)],8,ao),e("button",{class:"btn btn-secondary px-4 py-2",onClick:O},"取消")])])])):c("",!0),e("div",so,[K.value?(o(),n("div",lo,_[21]||(_[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):V.value.length===0?(o(),n("div",oo,_[22]||(_[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(o(),n("div",no,[(o(!0),n(Ce,null,We(V.value,Q=>(o(),n("div",{key:Q.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",io,[e("div",uo,[e("h4",go,u(Q.name),1),e("p",po,u(Q.description||"暂无描述"),1)]),e("div",co,[e("span",{class:I(["rounded-full px-2 py-1 text-xs font-medium",Q.platform==="claude"?"bg-purple-100 text-purple-700":Q.platform==="gemini"?"bg-blue-100 text-blue-700":Q.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(Q.platform==="claude"?"Claude":Q.platform==="gemini"?"Gemini":Q.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",yo,[e("div",mo,[e("span",null,[_[23]||(_[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),x(" "+u(Q.memberCount||0)+" 个成员 ",1)]),e("span",null,[_[24]||(_[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),x(" "+u(pe(Q.createdAt)),1)])]),e("div",xo,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:we=>y(Q)},_[25]||(_[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,fo),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:Q.memberCount>0,title:"删除",onClick:we=>ce(Q)},_[26]||(_[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,bo)])])]))),128))]))])])])):c("",!0),k.value?(o(),n("div",vo,[e("div",ko,[e("div",{class:"mb-4 flex items-center justify-between"},[_[28]||(_[28]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:D},_[27]||(_[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",ho,[e("div",null,[_[29]||(_[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":_[8]||(_[8]=Q=>Z.value.name=Q),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[z,Z.value.name]])]),e("div",null,[_[31]||(_[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",wo,[x(u(Z.value.platform==="claude"?"Claude":Z.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),_[30]||(_[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[_[32]||(_[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":_[9]||(_[9]=Q=>Z.value.description=Q),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[z,Z.value.description]])]),e("div",$o,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!Z.value.name||j.value,onClick:g},[j.value?(o(),n("div",Co)):c("",!0),x(" "+u(j.value?"更新中...":"更新"),1)],8,Ao),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:D},"取消")])])])])):c("",!0)]))}},Io={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Uo={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},Ko={class:"flex items-center gap-2 sm:gap-3"},So={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Mo={class:"flex items-center gap-2"},Do=["disabled"],Po={key:0,class:"py-8 text-center"},jo={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},Lo={key:2},Vo={class:"mb-4 space-y-3"},zo={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},Ro={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Oo={class:"flex items-center gap-2"},Eo={class:"flex gap-1"},No={class:"flex flex-1 items-center gap-2 lg:max-w-md"},qo={class:"relative flex-1"},Wo={class:"flex gap-1"},Fo={class:"flex flex-wrap items-center justify-between gap-2"},Bo={class:"flex flex-wrap items-center gap-2"},Go=["disabled"],Qo=["disabled"],Ho=["disabled"],Jo=["disabled"],Yo={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},Zo={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},Xo={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},en={key:0,class:"absolute -left-2 -top-2 z-10"},tn=["title"],an={class:"flex flex-col gap-3"},rn={class:"flex items-start justify-between gap-2"},sn=["title"],ln={class:"flex items-center gap-1"},on=["onClick"],nn=["disabled","onClick"],dn={key:0,class:"loading-spinner-sm"},un={key:1,class:"fas fa-redo"},gn=["disabled","onClick"],pn={key:0,class:"loading-spinner-sm"},cn={key:1,class:"fas fa-trash"},yn={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},mn={key:0},xn={key:0,class:"mt-4 flex items-center justify-between"},fn={class:"text-sm text-gray-600 dark:text-gray-400"},bn={class:"flex items-center gap-2"},vn=["disabled"],kn=["disabled"],hn={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},wn=["disabled"],$n=["disabled"],An={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=$(!1),U=$(null),C=$(null),v=$([]),k=$(1),j=$(15),oe=$(!1),Z=$("all"),pe=$(""),J=$("fuzzy"),W=$(!1),O=Y=>!Y||Y.length<12?Y:`${Y.substring(0,8)}...${Y.substring(Y.length-4)}`,y=se(()=>{let Y=v.value;if(Z.value!=="all"&&(Y=Y.filter(T=>T.status===Z.value)),pe.value.trim()){const T=pe.value.trim();Y=Y.filter(q=>{const be=q.key;return J.value==="exact"?be===T:be.toLowerCase().includes(T.toLowerCase())})}return Y}),g=se(()=>y.value.length),D=se(()=>Math.ceil(g.value/j.value)),ce=se(()=>{const Y=(k.value-1)*j.value,T=Y+j.value;return y.value.slice(Y,T)}),B=se(()=>v.value.filter(Y=>Y.status==="active").length),_=se(()=>v.value.filter(Y=>Y.status==="error").length),Q=async()=>{V.value=!0;try{const T=(await G.get(`/admin/droid-accounts/${p.accountId}`)).data;let q=[];if(Array.isArray(T.apiKeys))q=T.apiKeys;else if(typeof T.apiKeys=="string")try{q=JSON.parse(T.apiKeys)}catch(ge){console.error("Failed to parse apiKeys:",ge)}const be=q.map(ge=>typeof ge=="string"?{key:ge,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ge=="object"&&ge!==null?{key:ge.key||ge.apiKey||"",usageCount:ge.usageCount||ge.count||0,status:ge.status||"active",lastUsedAt:ge.lastUsedAt||ge.lastUsed||null,errorMessage:ge.errorMessage||""}:{key:String(ge),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});v.value=be.sort((ge,de)=>ge.lastUsedAt&&de.lastUsedAt?new Date(de.lastUsedAt)-new Date(ge.lastUsedAt):ge.lastUsedAt&&!de.lastUsedAt?-1:!ge.lastUsedAt&&de.lastUsedAt?1:(de.usageCount||0)-(ge.usageCount||0))}catch(Y){console.error("Failed to load API keys:",Y),P("加载 API Key 失败","error")}finally{V.value=!1,k.value=1}},we=async Y=>{var T,q;if(confirm(`确定要删除 API Key "${O(Y.key)}" 吗?`)){U.value=Y.key;try{const be={removeApiKeys:[Y.key],apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 已删除","success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete API key:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"删除 API Key 失败","error")}finally{U.value=null}}},Ke=async Y=>{var T,q;if(confirm(`确定要重置 API Key "${O(Y.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`)){C.value=Y.key;try{const be={apiKeys:[{key:Y.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P("API Key 状态已重置","success"),await Q(),N("refresh")}catch(be){console.error("Failed to reset API key status:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"重置 API Key 状态失败","error")}finally{C.value=null}}},F=async()=>{var T,q;const Y=v.value.filter(be=>be.status==="error");if(Y.length===0){P("没有异常状态的 API Key","warning");return}if(confirm(`确定要删除所有 ${Y.length} 个异常状态的 API Key 吗?此操作不可恢复!`)){W.value=!0;try{const ge={removeApiKeys:Y.map(de=>de.key),apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,ge),P(`成功删除 ${Y.length} 个异常 API Key`,"success"),await Q(),N("refresh")}catch(be){console.error("Failed to delete error API keys:",be),P(((q=(T=be.response)==null?void 0:T.data)==null?void 0:q.error)||"批量删除失败","error")}finally{W.value=!1}}},ee=async()=>{var Y,T;if(v.value.length===0){P("没有可删除的 API Key","warning");return}if(confirm(`确定要删除所有 ${v.value.length} 个 API Key 吗?此操作不可恢复!
-
-请再次确认:这将删除该账户下的所有 API Key。`)&&confirm("最后确认:真的要删除所有 API Key 吗?")){W.value=!0;try{const q=v.value.map(ge=>ge.key),be={removeApiKeys:q,apiKeyUpdateMode:"delete"};await G.put(`/admin/droid-accounts/${p.accountId}`,be),P(`成功删除所有 ${q.length} 个 API Key`,"success"),await Q(),N("refresh")}catch(q){console.error("Failed to delete all API keys:",q),P(((T=(Y=q.response)==null?void 0:Y.data)==null?void 0:T.error)||"批量删除失败","error")}finally{W.value=!1}}},S=Y=>{let T=[],q="";if(Y==="error"?(T=v.value.filter(te=>te.status==="error"),q=`error_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(T=v.value,q=`all_api_keys_${p.accountName}_${new Date().toISOString().split("T")[0]}.txt`),T.length===0){P("没有可导出的 API Key","warning");return}const be=T.map(te=>te.key).join(`
-`),ge=new Blob([be],{type:"text/plain;charset=utf-8"}),de=URL.createObjectURL(ge),a=document.createElement("a");a.href=de,a.download=q,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(de),P(`成功导出 ${T.length} 个 API Key`,"success")},h=async Y=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(Y);return}if(typeof document>"u")throw new Error("clipboard unavailable");const q=document.createElement("textarea");q.value=Y,q.setAttribute("readonly",""),q.style.position="fixed",q.style.opacity="0",q.style.pointerEvents="none",document.body.appendChild(q),q.select();try{const be=document.execCommand("copy");if(document.body.removeChild(q),!be)throw new Error("execCommand failed")}catch(be){throw document.body.removeChild(q),be}},fe=async Y=>{try{await h(Y),P("API Key 已复制","success")}catch(T){console.error("Failed to copy:",T),P("复制失败,请手动复制","error")}},le=async()=>{if(!(!v.value.length||oe.value)){oe.value=!0;try{const Y=v.value.map(T=>T.key).join(`
-`);await h(Y),P(`已复制 ${v.value.length} 条 API Key`,"success")}catch(Y){console.error("Failed to copy all keys:",Y),P("复制全部 API Key 失败,请手动复制","error")}finally{oe.value=!1}}},je=Y=>{if(!Y)return"-";try{return new Date(Y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return aa(()=>{Q()}),(Y,T)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Io,[e("div",Uo,[e("div",_o,[e("div",Ko,[T[14]||(T[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[T[13]||(T[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",So,u(H.accountName),1)])]),e("div",Mo,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:V.value||v.value.length===0||oe.value,onClick:le},[e("i",{class:I(["text-sm sm:text-base",oe.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),T[15]||(T[15]=e("span",null,"复制全部 Key",-1))],8,Do),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:T[0]||(T[0]=q=>Y.$emit("close"))},T[16]||(T[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),V.value?(o(),n("div",Po,T[17]||(T[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):c("",!0),!V.value&&v.value.length===0?(o(),n("div",jo,T[18]||(T[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):c("",!0),!V.value&&v.value.length>0?(o(),n("div",Lo,[e("div",Vo,[e("div",zo,[e("div",Ro,[e("div",Oo,[T[21]||(T[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),T[22]||(T[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",Eo,[e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[1]||(T[1]=q=>Z.value="all")}," 全部 ("+u(v.value.length)+") ",3),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[2]||(T[2]=q=>Z.value="active")},[T[19]||(T[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),x(" 正常 ("+u(B.value)+") ",1)],2),e("button",{class:I(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",Z.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:T[3]||(T[3]=q=>Z.value="error")},[T[20]||(T[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),x(" 异常 ("+u(_.value)+") ",1)],2)])]),e("div",No,[e("div",qo,[b(e("input",{"onUpdate:modelValue":T[4]||(T[4]=q=>pe.value=q),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[z,pe.value]]),T[23]||(T[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",Wo,[e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",J.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:T[5]||(T[5]=q=>J.value="fuzzy")},T[24]||(T[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),x(" 模糊 ",-1)]),2),e("button",{class:I(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",J.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:T[6]||(T[6]=q=>J.value="exact")},T[25]||(T[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),x(" 精确 ",-1)]),2)])])]),T[35]||(T[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",Fo,[e("div",Bo,[T[30]||(T[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:_.value===0||W.value,title:"删除所有异常状态的 API Key",onClick:F},T[26]||(T[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),x(" 删除异常 ",-1)]),8,Go),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:v.value.length===0||W.value,title:"删除所有 API Key",onClick:ee},T[27]||(T[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),x(" 删除全部 ",-1)]),8,Qo),T[31]||(T[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:_.value===0,title:"导出所有异常状态的 API Key",onClick:T[7]||(T[7]=q=>S("error"))},T[28]||(T[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),x(" 导出异常 ",-1)]),8,Ho),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:v.value.length===0,title:"导出所有 API Key",onClick:T[8]||(T[8]=q=>S("all"))},T[29]||(T[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),x(" 导出全部 ",-1)]),8,Jo)]),e("div",Yo,[T[34]||(T[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",Zo,[T[32]||(T[32]=x(" 显示 ",-1)),e("strong",null,u(y.value.length),1),T[33]||(T[33]=x(" 个 ",-1))])])])])]),e("div",Xo,[(o(!0),n(Ce,null,We(ce.value,(q,be)=>(o(),n("div",{key:be,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(q.status==="error"||q.status==="disabled")&&q.errorMessage?(o(),n("div",en,[e("span",{class:I(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[q.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${q.errorMessage}`},u(q.errorMessage),11,tn)])):c("",!0),e("div",an,[e("div",rn,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:q.key},u(O(q.key)),9,sn),e("div",ln,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:ge=>fe(q.key)},T[36]||(T[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,on),q.status==="error"||q.status==="disabled"?(o(),n("button",{key:0,class:I(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[q.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:C.value===q.key,title:"重置状态",onClick:ge=>Ke(q)},[C.value===q.key?(o(),n("div",dn)):(o(),n("i",un))],10,nn)):c("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:U.value===q.key,onClick:ge=>we(q)},[U.value===q.key?(o(),n("div",pn)):(o(),n("i",cn))],8,gn)])]),e("div",yn,[e("div",null,[e("span",{class:I([q.status==="active"?"text-green-600 dark:text-green-400":q.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:I(["mr-1",[q.status==="active"?"fas fa-check-circle":q.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),x(" "+u(q.status==="active"?"正常":q.status==="error"?"异常":q.status==="disabled"?"禁用":q.status||"未知"),1)],2)]),e("div",null,[e("span",null,[T[37]||(T[37]=x("使用: ",-1)),e("strong",null,u(q.usageCount||0),1),T[38]||(T[38]=x("次",-1))])]),q.lastUsedAt?(o(),n("div",mn,[e("span",null,u(je(q.lastUsedAt)),1)])):c("",!0)])])]))),128))]),D.value>1?(o(),n("div",xn,[e("div",fn," 显示 "+u((k.value-1)*j.value+1)+"-"+u(Math.min(k.value*j.value,g.value))+" 项,共 "+u(g.value)+" 项 ",1),e("div",bn,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===1,onClick:T[9]||(T[9]=q=>k.value=1)},T[39]||(T[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,vn),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===1,onClick:T[10]||(T[10]=q=>k.value--)},T[40]||(T[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,kn),e("span",hn,u(k.value)+" / "+u(D.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===D.value,onClick:T[11]||(T[11]=q=>k.value++)},T[41]||(T[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,wn),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:k.value===D.value,onClick:T[12]||(T[12]=q=>k.value=D.value)},T[42]||(T[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,$n)])])):c("",!0)])):c("",!0)])])):c("",!0)]))}},Cn={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Tn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},In={class:"mb-4 flex items-center justify-between sm:mb-6"},Un={class:"flex items-center gap-2 sm:gap-3"},_n={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Kn={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Sn={class:"flex items-center space-x-2 sm:space-x-4"},Mn={class:"flex items-center"},Dn={class:"flex items-center"},Pn={key:1},jn={class:"space-y-6"},Ln={key:0},Vn={class:"space-y-3"},zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},Rn={class:"p-3"},On={class:"flex items-center justify-between"},En={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},Nn={class:"p-3"},qn={class:"flex items-center justify-between"},Wn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},Fn={class:"p-3"},Bn={class:"flex items-center justify-between"},Gn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},Qn={class:"p-3"},Hn={class:"flex items-center justify-between"},Jn={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},Yn={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Zn={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},Xn={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},ei={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ti={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},ai={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},ri={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},si={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},li={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},oi={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},ni={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},ii={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},di={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},ui={key:1},gi={class:"flex flex-wrap gap-4"},pi={class:"flex cursor-pointer items-center"},ci={class:"text-sm text-gray-700 dark:text-gray-300"},yi={key:0},mi={key:0,class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},fi={key:1,class:"flex cursor-pointer items-center"},bi={key:0,class:"mt-1 text-xs text-red-500"},vi={class:"flex gap-4"},ki={class:"flex cursor-pointer items-center"},hi={class:"flex cursor-pointer items-center"},wi={class:"flex cursor-pointer items-center"},$i={key:2},Ai={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ci={key:0,class:"mt-3"},Ti=["min"],Ii={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ui={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},_i={key:3},Ki={class:"flex gap-2"},Si={class:"flex-1"},Mi={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Di={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Pi=["value"],ji={class:"text-sm text-gray-700 dark:text-gray-200"},Li={key:4},Vi={key:5,class:"space-y-4"},zi={key:0,class:"flex gap-4"},Ri={class:"flex cursor-pointer items-center"},Oi={class:"flex cursor-pointer items-center"},Ei={key:1,class:"flex gap-4"},Ni={class:"flex items-center opacity-60"},qi={class:"flex items-center opacity-60"},Wi={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},Fi={class:"flex items-start gap-2"},Bi={class:"text-xs text-blue-700 dark:text-blue-300"},Gi={key:0,class:"font-medium"},Qi={key:1,class:"font-medium"},Hi={key:2,class:"mt-1 text-xs italic"},Ji={key:0},Yi={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Zi=["placeholder","required"],Xi={key:0,class:"mt-1 text-xs text-red-500"},ed={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},td={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},ad=["placeholder","required"],rd={key:0,class:"mt-1 text-xs text-red-500"},sd={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ld=["placeholder"],od={key:1},nd={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},id=["placeholder","required"],dd={key:0,class:"mt-1 text-xs text-red-500"},ud={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},gd={key:0,class:"mt-1 text-xs text-red-500"},pd={key:6,class:"space-y-4"},cd={key:0,class:"mt-1 text-xs text-red-500"},yd={key:0,class:"mt-1 text-xs text-red-500"},md={key:0,class:"mt-1 text-xs text-red-500"},xd={class:"flex flex-wrap gap-2"},fd=["value"],bd={class:"text-sm text-gray-700 dark:text-gray-300"},vd={key:7},kd={class:"mb-3"},hd={class:"inline-flex cursor-pointer items-center"},wd={key:0},$d={key:8,class:"space-y-4"},Ad={key:0,class:"mt-1 text-xs text-red-500"},Cd={key:0,class:"mt-1 text-xs text-red-500"},Td={class:"grid grid-cols-2 gap-4"},Id={class:"mb-4 flex gap-2"},Ud={key:0},_d={class:"mb-3 grid grid-cols-2 gap-2"},Kd=["value"],Sd={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Md={class:"text-xs text-gray-500 dark:text-gray-400"},Dd={key:0},Pd={key:1},jd={class:"mb-3 space-y-2"},Ld=["onUpdate:modelValue"],Vd=["onUpdate:modelValue"],zd=["onClick"],Rd={class:"mt-3 flex flex-wrap gap-2"},Od={class:"mb-3"},Ed={class:"inline-flex cursor-pointer items-center"},Nd={key:0},qd={key:0},Wd={class:"inline-flex cursor-pointer items-center"},Fd={key:9,class:"space-y-4"},Bd={class:"relative"},Gd=["type"],Qd={key:10,class:"space-y-4"},Hd={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},Jd={class:"relative"},Yd=["type"],Zd={key:11},Xd={class:"flex gap-4"},e0={class:"flex cursor-pointer items-center"},t0={class:"flex cursor-pointer items-center"},a0={key:12,class:"mt-4"},r0={class:"flex items-start"},s0={key:13,class:"mt-4"},l0={class:"flex items-start"},o0={key:14,class:"mt-4"},n0={class:"flex items-start"},i0={key:15,class:"mt-4"},d0={class:"flex items-start"},u0={class:"ml-3"},g0={key:0,class:"mt-1"},p0={class:"flex items-center justify-between"},c0={class:"text-xs text-green-600 dark:text-green-400"},y0=["disabled"],m0={key:0,class:"fas fa-trash-alt mr-1"},x0={key:1,class:"loading-spinner mr-1"},f0={key:1,class:"mt-1"},b0={key:16,class:"mt-4"},v0={class:"flex items-start"},k0={class:"ml-3 flex-1"},h0={key:0,class:"mt-3"},w0={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},$0={class:"flex items-center gap-2"},A0={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},C0={class:"text-blue-600 dark:text-blue-400"},T0={class:"text-gray-500 dark:text-gray-500"},I0={class:"text-blue-600 dark:text-blue-400"},U0={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},_0={class:"mb-4 flex items-start gap-3"},K0={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},S0={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},M0={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},D0={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},P0={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},j0={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},L0={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},V0={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},z0={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},R0={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},O0={key:5,class:"text-xs text-red-600 dark:text-red-400"},E0={key:0},N0={key:1},q0={key:0,class:"mt-1 text-xs text-red-500"},W0={key:2},F0={key:0,class:"mt-1 text-xs text-red-500"},B0={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},G0={key:3},Q0={key:4},H0={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},J0={key:0,class:"mt-1 text-xs text-red-500"},Y0={class:"flex gap-3 pt-4"},Z0=["disabled"],X0=["disabled"],eu={key:0,class:"loading-spinner mr-2"},tu={key:3,class:"space-y-6"},au={key:0},ru={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},su={class:"flex items-start gap-4"},lu={class:"flex-1"},ou={class:"mb-4"},nu={class:"flex flex-wrap gap-4"},iu={class:"flex cursor-pointer items-center"},du={class:"flex cursor-pointer items-center"},uu={key:0,class:"space-y-4"},gu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},pu={class:"flex items-start gap-3"},cu={class:"flex-1"},yu=["disabled"],mu={key:0,class:"fas fa-link mr-2"},xu={key:1,class:"loading-spinner mr-2"},fu={key:1,class:"space-y-3"},bu={class:"flex items-center gap-2"},vu=["value"],ku={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},hu={class:"flex items-start gap-3"},wu={class:"flex-1"},$u={class:"space-y-3"},Au={key:1,class:"space-y-4"},Cu={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Tu={class:"space-y-4"},Iu={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Uu={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},_u={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Ku={key:1,class:"mt-1 text-xs text-red-500"},Su={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Mu=["disabled"],Du={key:0,class:"loading-spinner mr-2"},Pu={key:1,class:"fas fa-magic mr-2"},ju={class:"flex gap-3 pt-4"},Lu=["disabled"],Vu={key:0,class:"loading-spinner mr-2"},zu={key:4,class:"space-y-6"},Ru={class:"flex gap-4"},Ou={class:"flex cursor-pointer items-center"},Eu={class:"flex cursor-pointer items-center"},Nu={class:"flex cursor-pointer items-center"},qu={key:0},Wu={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Fu={key:0,class:"mt-3"},Bu=["min"],Gu={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Qu={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Hu={key:1},Ju={class:"flex gap-2"},Yu={class:"flex-1"},Zu={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Xu={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},eg=["value"],tg={class:"text-sm text-gray-700 dark:text-gray-200"},ag={key:2},rg={key:3},sg={class:"flex gap-4"},lg={class:"flex cursor-pointer items-center"},og={class:"flex cursor-pointer items-center"},ng={key:4,class:"mt-4"},ig={class:"flex items-start"},dg={key:5,class:"mt-4"},ug={class:"flex items-start"},gg={key:6,class:"mt-4"},pg={class:"flex items-start"},cg={key:7,class:"mt-4"},yg={class:"flex items-start"},mg={class:"ml-3"},xg={key:0,class:"mt-1"},fg={class:"flex items-center justify-between"},bg={class:"text-xs text-green-600 dark:text-green-400"},vg=["disabled"],kg={key:0,class:"fas fa-trash-alt mr-1"},hg={key:1,class:"loading-spinner mr-1"},wg={key:1,class:"mt-1"},$g={key:8,class:"mt-4"},Ag={class:"flex items-start"},Cg={class:"ml-3 flex-1"},Tg={key:0,class:"mt-3"},Ig={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ug={class:"flex items-center gap-2"},_g={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Kg={class:"text-blue-600 dark:text-blue-400"},Sg={class:"text-gray-500 dark:text-gray-500"},Mg={class:"text-blue-600 dark:text-blue-400"},Dg={key:9,class:"space-y-4"},Pg={class:"grid grid-cols-2 gap-4"},jg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Lg={class:"mb-2 flex items-center justify-between"},Vg={class:"text-sm text-gray-500 dark:text-gray-400"},zg={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Rg={class:"mt-2 flex items-center justify-between text-xs"},Og={class:"text-gray-500 dark:text-gray-400"},Eg={class:"text-gray-500 dark:text-gray-400"},Ng={class:"mb-4 flex gap-2"},qg={key:0},Wg={class:"mb-3 grid grid-cols-2 gap-2"},Fg=["value"],Bg={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Gg={class:"text-xs text-gray-500 dark:text-gray-400"},Qg={key:0},Hg={key:1},Jg={class:"mb-3 space-y-2"},Yg=["onUpdate:modelValue"],Zg=["onUpdate:modelValue"],Xg=["onClick"],ep={class:"mt-3 flex flex-wrap gap-2"},tp={class:"mb-3"},ap={class:"inline-flex cursor-pointer items-center"},rp={key:0},sp={key:1},lp={class:"inline-flex cursor-pointer items-center"},op={key:10,class:"space-y-4"},np={class:"relative"},ip=["type"],dp={class:"grid grid-cols-2 gap-4"},up={key:11,class:"space-y-4"},gp={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},pp={class:"relative"},cp=["type"],yp={key:12,class:"space-y-4"},mp={class:"mb-3"},xp={class:"inline-flex cursor-pointer items-center"},fp={key:0},bp={key:13,class:"space-y-4"},vp={key:0,class:"mt-1 text-xs text-red-500"},kp={key:0,class:"mt-1 text-xs text-red-500"},hp={key:0,class:"mt-1 text-xs text-red-500"},wp={class:"flex flex-wrap gap-2"},$p=["value"],Ap={class:"text-sm text-gray-700 dark:text-gray-300"},Cp={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},Tp={class:"mb-4 flex items-start gap-3"},Ip={class:"flex-1"},Up={class:"mb-2 flex items-center justify-between"},_p={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Kp={class:"space-y-4"},Sp={key:0,class:"mt-1 text-xs text-red-500"},Mp={class:"space-y-2"},Dp={class:"flex items-center justify-between"},Pp={class:"text-xs text-purple-600 dark:text-purple-300"},jp={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Lp=["onClick"],Vp={class:"text-xs text-purple-700 dark:text-purple-300"},zp={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},Rp={class:"space-y-4"},Op={key:16},Ep={class:"flex gap-3 pt-4"},Np=["disabled"],qp={key:0,class:"loading-spinner mr-2"},Wp={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(H,{emit:Pe}){var Qt,na,Ia,tt,Ua,_a,ia,Ka,rt,Sa,Ht,Tt,Ma,zt,da,Da,ua,Pa,ja,La,Va,za,ga,Jt,pa,ca,Ra,ft,bt,Oa,ya,Yt,ma,Ea,xa,Zt,Na,fa;const p=H,N=Pe,K=wr(),{showConfirmModal:V,confirmOptions:U,showConfirm:C,handleConfirm:v,handleCancel:k}=hr(),j=se(()=>!!p.account),oe=$(!0),Z=$(null),pe=$(1),J=$(!1),W=$(!1),O=$(!1),y=$(!1),g=$(""),D=$(""),ce=$(!1),B=$(""),_=$("manual"),Q=$(""),we=$(!1),Ke=$(""),F=$(!1),ee=$({current:0,total:0}),S=se(()=>Q.value.split(`
-`).map(d=>d.trim()).filter(d=>d.length>0).length),h=$(""),fe=$(!1),le=$(""),je=$(!1),Y=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",T=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),q=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ve=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",ye=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ve,username:ye,password:me}},be=d=>{const t=q(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:T()},ge=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ve=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ve||null,password:i||null}},de=()=>{var d;return be((d=p.account)==null?void 0:d.proxy)},a=$({platform:((Qt=p.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=p.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((na=p.account)==null?void 0:na.name)||"",description:((Ia=p.account)==null?void 0:Ia.description)||"",accountType:((tt=p.account)==null?void 0:tt.accountType)||"shared",authenticationMethod:((Ua=p.account)==null?void 0:Ua.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((_a=p.account)==null?void 0:_a.autoStopOnWarning)||!1,useUnifiedUserAgent:((ia=p.account)==null?void 0:ia.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ka=p.account)==null?void 0:Ka.useUnifiedClientId)||!1,unifiedClientId:((rt=p.account)==null?void 0:rt.unifiedClientId)||"",serialQueueEnabled:(((Sa=p.account)==null?void 0:Sa.maxConcurrency)||0)>0,interceptWarmup:((Ht=p.account)==null?void 0:Ht.interceptWarmup)===!0||((Tt=p.account)==null?void 0:Tt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Ma=p.account)==null?void 0:Ma.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:de(),apiUrl:((zt=p.account)==null?void 0:zt.apiUrl)||"",apiKey:((da=p.account)==null?void 0:da.apiKey)||"",priority:((Da=p.account)==null?void 0:Da.priority)||50,endpointType:((ua=p.account)==null?void 0:ua.endpointType)||"anthropic",baseApi:((Pa=p.account)==null?void 0:Pa.baseApi)||"",baseUrl:((ja=p.account)==null?void 0:ja.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((La=p.account)==null?void 0:La.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=p.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Va=p.account)==null?void 0:Va.userAgent)||"",enableRateLimit:p.account?p.account.rateLimitDuration>0:!0,disableAutoProtection:((za=p.account)==null?void 0:za.disableAutoProtection)===!0,dailyQuota:((ga=p.account)==null?void 0:ga.dailyQuota)||0,dailyUsage:((Jt=p.account)==null?void 0:Jt.dailyUsage)||0,quotaResetTime:((pa=p.account)==null?void 0:pa.quotaResetTime)||"00:00",maxConcurrentTasks:((ca=p.account)==null?void 0:ca.maxConcurrentTasks)||0,credentialType:((Ra=p.account)==null?void 0:Ra.credentialType)||"access_key",accessKeyId:((ft=p.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((bt=p.account)==null?void 0:bt.secretAccessKey)||"",region:((Oa=p.account)==null?void 0:Oa.region)||"",sessionToken:((ya=p.account)==null?void 0:ya.sessionToken)||"",bearerToken:((Yt=p.account)==null?void 0:Yt.bearerToken)||"",defaultModel:((ma=p.account)==null?void 0:ma.defaultModel)||"",smallFastModel:((Ea=p.account)==null?void 0:Ea.smallFastModel)||"",azureEndpoint:((xa=p.account)==null?void 0:xa.azureEndpoint)||"",apiVersion:((Zt=p.account)==null?void 0:Zt.apiVersion)||"",deploymentName:((Na=p.account)==null?void 0:Na.deploymentName)||"",expireDuration:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=p.account)!=null&&d.expiresAt?new Date(p.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((fa=p.account)==null?void 0:fa.expiresAt)||null}),te=$("whitelist"),Ae=$(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Ge=[{value:"claude-opus-4-5-20251101",label:"Claude Opus 4.5",color:"blue"},{value:"claude-sonnet-4-20250514",label:"Claude Sonnet 4",color:"blue"},{value:"claude-sonnet-4-5-20250929",label:"Claude Sonnet 4.5",color:"indigo"},{value:"claude-3-5-haiku-20241022",label:"Claude 3.5 Haiku",color:"green"},{value:"claude-haiku-4-5-20251001",label:"Claude Haiku 4.5",color:"emerald"},{value:"claude-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"},{value:"deepseek-chat",label:"DeepSeek Chat",color:"cyan"},{value:"Qwen",label:"Qwen",color:"orange"},{value:"Kimi",label:"Kimi",color:"pink"},{value:"GLM",label:"GLM",color:"teal"}],De=$([]),at=()=>{var d;if((d=p.account)!=null&&d.supportedModels)if(typeof p.account.supportedModels=="object"&&!Array.isArray(p.account.supportedModels)){const t=Object.entries(p.account.supportedModels);t.every(([ve,i])=>ve===i)?(te.value="whitelist",Ae.value=t.map(([ve])=>ve),De.value=t.map(([ve,i])=>({from:ve,to:i}))):(te.value="mapping",De.value=t.map(([ve,i])=>({from:ve,to:i})))}else Array.isArray(p.account.supportedModels)&&(te.value="whitelist",Ae.value=p.account.supportedModels,De.value=p.account.supportedModels.map(t=>({from:t,to:t})))},lt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ve=>ve.trim()).filter(ve=>ve.length>0);return t.length===0?[]:Array.from(new Set(t))},Xe=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],St=se(()=>{const d=Math.max(Xe.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/Xe.length;return{width:`${t}%`,left:`${d*t}%`}}),Mt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:Xe[0].label}),Dt=se(()=>{const d=Xe.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:Xe[0].description}),M=$({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),ht=se(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),pt=se(()=>g.value&&D.value.trim()),vt=()=>{var d;return!j.value||!((d=p.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=se(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:vt()/a.value.dailyQuota*100),Pt=se(()=>{if(!p.account||p.account.platform!=="droid")return 0;let d=0;if(Array.isArray(p.account.apiKeys))d=p.account.apiKeys.length;else if(typeof p.account.apiKeys=="string")try{const ie=JSON.parse(p.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=p.account.apiKeyCount??p.account.apiKeysCount??p.account.api_key_count??d;return Number(t)||0}),w=se(()=>{var t,ie,ve;if(!j.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=p.account)==null?void 0:t.authenticationMethod)||((ie=p.account)==null?void 0:ie.authMethod)||((ve=p.account)==null?void 0:ve.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),m=async()=>{var d;if(!(!j.value||!((d=p.account)!=null&&d.id)))try{const t=await G.get(`/admin/claude-console-accounts/${p.account.id}/usage`);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},E=d=>{le.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Qe=async()=>{if(M.value.name="",!ht.value){(!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&pe.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
-
-如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
-如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(pe.value=2)},it=async()=>{O.value=!0;try{const d=ge(a.value.proxy),t=d?{proxy:d}:{},ie=await K.generateClaudeSetupTokenUrl(t);g.value=ie.authUrl,B.value=ie.sessionId}catch(d){P(d.message||"生成Setup Token授权链接失败","error")}finally{O.value=!1}},yt=()=>{g.value="",D.value="",it()},Et=async()=>{try{await navigator.clipboard.writeText(g.value),ce.value=!0,P("链接已复制","success"),setTimeout(()=>{ce.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=g.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(ce.value=!0,P("链接已复制","success")):P("复制失败,请手动复制","error")}catch{P("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{ce.value=!1},2e3)}},Nt=async()=>{if(pt.value){y.value=!0;try{const d={sessionId:B.value,callbackUrl:D.value.trim()},t=ge(a.value.proxy);t&&(d.proxy=t);const ie=await K.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),await $t(ie)}catch(d){P(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{y.value=!1}}},kt=async()=>{const d=Q.value.split(`
-`).map(ye=>ye.trim()).filter(ye=>ye.length>0);if(d.length===0){Ke.value="请输入至少一个 sessionKey";return}we.value=!0,Ke.value="",ee.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=ge(a.value.proxy),ve=[],i=[];for(let ye=0;ye0)try{await $t(ve)}finally{we.value=!1}else we.value=!1;i.length>0&&ve.length===0?Ke.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Ke.value=`${i.length} 个授权失败`)},jt=()=>{Q.value="",Ke.value="",F.value=!1,ee.value={current:0,total:0}},Lt=()=>{_.value==="manual"?jt():(g.value="",D.value="",B.value="")},wt=(d,t,ie)=>{var me,Ne;const ve=ge(a.value.proxy),i=d.claudeAiOauth||d,ye={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ve,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const Be={},Re=i.extInfo;Re!=null&&Re.org_uuid&&(Be.org_uuid=Re.org_uuid),Re!=null&&Re.account_uuid&&(Be.account_uuid=Re.account_uuid),Re||((me=i.organization)!=null&&me.uuid&&(Be.org_uuid=i.organization.uuid),(Ne=i.account)!=null&&Ne.uuid&&(Be.account_uuid=i.account.uuid)),Object.keys(Be).length>0&&(ye.extInfo=Be)}return ye},$t=async d=>{var t,ie,ve,i,ye,me,Ne,Be,Re;J.value=!0;try{const L=a.value.platform;if(L==="claude"&&Array.isArray(d)){const Le=d,qe=Le.length>1,Me=a.value.name,Je=[],Ze=[];for(let ot=0;ot0){const ot=qe?`成功创建 ${Je.length}/${Le.length} 个账户`:"账户创建成功";P(ot,"success"),N("success",Je[0])}Ze.length>0&&P(`${Ze.length} 个账户创建失败`,"error");return}const R=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt());const Ie=ge(a.value.proxy),X={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Ie};if(L==="claude"){const Le=R.claudeAiOauth||R;if(X.claudeAiOauth=Le,Le){const qe={},Me=Le.extInfo;if(Me&&typeof Me=="object"&&(Me.org_uuid&&(qe.org_uuid=Me.org_uuid),Me.account_uuid&&(qe.account_uuid=Me.account_uuid)),!Me){const Je=(t=Le.organization)==null?void 0:t.uuid,Ze=(ie=Le.account)==null?void 0:ie.uuid;Je&&(qe.org_uuid=Je),Ze&&(qe.account_uuid=Ze)}Object.keys(qe).length>0&&(X.extInfo=qe)}X.priority=a.value.priority||50,X.autoStopOnWarning=a.value.autoStopOnWarning||!1,X.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,X.useUnifiedClientId=a.value.useUnifiedClientId||!1,X.unifiedClientId=a.value.unifiedClientId||"",X.maxConcurrency=a.value.serialQueueEnabled?1:0,X.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(L==="gemini"||L==="gemini-antigravity")X.geminiOauth=R.tokens||R,X.oauthProvider=L==="gemini-antigravity"?"antigravity":R.oauthProvider||"gemini-cli",a.value.projectId&&(X.projectId=a.value.projectId),X.priority=a.value.priority||50;else if(L==="openai")X.openaiOauth=R.tokens||R,X.accountInfo=R.accountInfo,X.priority=a.value.priority||50;else if(L==="droid"){const Le=R.tokens||R||{},qe={accessToken:Le.accessToken||Le.access_token||"",refreshToken:Le.refreshToken||Le.refresh_token||"",expiresAt:Le.expiresAt||Le.expires_at||"",expiresIn:Le.expiresIn||Le.expires_in||null,tokenType:Le.tokenType||Le.token_type||"Bearer",organizationId:Le.organizationId||Le.organization_id||"",authenticationMethod:Le.authenticationMethod||Le.authentication_method||""};if(!qe.refreshToken){J.value=!1,P("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(X.refreshToken=qe.refreshToken,X.accessToken=qe.accessToken,X.expiresAt=qe.expiresAt,qe.expiresIn!==null&&qe.expiresIn!==void 0&&(X.expiresIn=qe.expiresIn),X.priority=a.value.priority||50,X.endpointType=a.value.endpointType||"anthropic",X.platform="droid",X.tokenType=qe.tokenType,X.authenticationMethod=qe.authenticationMethod,qe.organizationId&&(X.organizationId=qe.organizationId),Le.user){const Me=Le.user,Je=[];typeof Me.first_name=="string"&&Me.first_name.trim()&&Je.push(Me.first_name.trim()),typeof Me.last_name=="string"&&Me.last_name.trim()&&Je.push(Me.last_name.trim());const Ze=Je.join(" ").trim()||(typeof Me.name=="string"?Me.name.trim():"")||(typeof Me.display_name=="string"?Me.display_name.trim():"");typeof Me.email=="string"&&Me.email.trim()&&(X.ownerEmail=Me.email.trim()),Ze?(X.ownerName=Ze,X.ownerDisplayName=Ze):X.ownerEmail&&(X.ownerName=X.ownerName||X.ownerEmail,X.ownerDisplayName=X.ownerDisplayName||X.ownerEmail),typeof Me.id=="string"&&Me.id.trim()&&(X.userId=Me.id.trim())}}let Se;L==="claude"?Se=await K.createClaudeAccount(X):L==="gemini"?Se=await K.createGeminiAccount(X):L==="openai"?Se=await K.createOpenAIAccount(X):L==="droid"?Se=await K.createDroidAccount(X):Se=await K.createGeminiAccount(X),N("success",Se)}catch(L){const R=((i=(ve=L.response)==null?void 0:ve.data)==null?void 0:i.error)||L.message||"账户创建失败",Ie=((me=(ye=L.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",X=((Be=(Ne=L.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let Se=R;Ie&&(Se+=`
-${Ie}`),X&&X.error_description?Se+=`
-详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
-详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1,(Re=Z.value)==null||Re.resetCookieAuth()}},qt=async()=>{var t,ie,ve,i,ye,me,Ne,Be;M.value.name="",M.value.accessToken="",M.value.refreshToken="",M.value.apiUrl="",M.value.apiKey="",M.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(M.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(M.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(M.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?j.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(M.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(M.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(j.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(M.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(M.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(M.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(M.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(M.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(M.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(M.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(M.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(M.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):lt(a.value.apiKeysInput).length===0&&(M.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(P("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){J.value=!0;try{const Re=ge(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Re};if(a.value.platform==="claude"){const Ie=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),L.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+Ie,scopes:[]},L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const Ie=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Ie},a.value.projectId&&(L.projectId=a.value.projectId),L.priority=a.value.priority||50}else if(a.value.platform==="openai"){const Ie=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor(Ie/1e3)},L.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0,L.priority=a.value.priority||50}else if(a.value.platform==="droid")if(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic",L.platform="droid",a.value.addType==="apikey"){const Ie=lt(a.value.apiKeysInput);L.apiKeys=Ie,L.authenticationMethod="api_key",L.isActive=!0,L.schedulable=!0}else{const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();L.accessToken=Ie,L.refreshToken=X,L.expiresAt=Se,L.expiresIn=8*60*60,L.tokenType="Bearer",L.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(L.apiUrl=a.value.apiUrl,L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=sa()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup),L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(L.baseApi=a.value.baseApi,L.apiKey=a.value.apiKey,L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.rateLimitDuration=60,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(L.oauthProvider="antigravity",L.priority=a.value.priority||50):a.value.platform==="gemini-api"?(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",L.apiKey=a.value.apiKey,L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(L.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?L.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(L.bearerToken=a.value.bearerToken),L.region=a.value.region,L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiKey=a.value.apiKey,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,L.isActive=a.value.isActive!==!1,L.schedulable=a.value.schedulable!==!1);let R;if(a.value.platform==="claude")R=await K.createClaudeAccount(L);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")R=await K.createClaudeConsoleAccount(L);else if(a.value.platform==="droid")R=await K.createDroidAccount(L);else if(a.value.platform==="openai-responses")R=await K.createOpenAIResponsesAccount(L);else if(a.value.platform==="bedrock")R=await K.createBedrockAccount(L);else if(a.value.platform==="openai")R=await K.createOpenAIAccount(L);else if(a.value.platform==="azure_openai")R=await K.createAzureOpenAIAccount(L);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")R=await K.createGeminiAccount(L);else if(a.value.platform==="gemini-api")R=await K.createGeminiApiAccount(L);else throw new Error(`不支持的平台: ${a.value.platform}`);N("success",R)}catch(Re){const L=((i=(ve=Re.response)==null?void 0:ve.data)==null?void 0:i.error)||Re.message||"账户创建失败",R=((me=(ye=Re.response)==null?void 0:ye.data)==null?void 0:me.suggestion)||"",Ie=((Be=(Ne=Re.response)==null?void 0:Ne.data)==null?void 0:Be.errorDetails)||null;let X=L;R&&(X+=`
-${R}`),Ie&&Ie.error_description?X+=`
-详细信息: ${Ie.error_description}`:Ie&&Ie.error&&Ie.error.message&&(X+=`
-详细信息: ${Ie.error.message}`),P(X,"error","",8e3)}finally{J.value=!1}}},dt=async()=>{var d,t,ie,ve,i,ye,me,Ne,Be,Re;if(M.value.name="",M.value.apiKeys="",M.value.baseUrl="",!a.value.name||a.value.name.trim()===""){M.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const L=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!L){M.value.baseUrl="请填写 API 基础地址";return}if(!L.endsWith("/models")){M.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){P("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await C("项目 ID 未填写",`您尚未填写项目 ID。
-
-如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
-如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){J.value=!0;try{const L=ge(a.value.proxy),R={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:L};if(a.value.accessToken||a.value.refreshToken){const Ie=((t=a.value.accessToken)==null?void 0:t.trim())||"",X=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(p.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;R.claudeAiOauth={accessToken:Ie||"",refreshToken:X||"",expiresAt:Date.now()+Se,scopes:p.account.scopes||[]}}else if(p.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;R.geminiOauth={access_token:Ie||"",refresh_token:X||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(p.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;R.openaiOauth={idToken:"",accessToken:Ie||"",refreshToken:X||"",expires_in:Math.floor(Se/1e3)},X&&X!==p.account.refreshToken&&(R.needsImmediateRefresh=!0,R.requireRefreshSuccess=!0)}else p.account.platform==="droid"&&(Ie&&(R.accessToken=Ie),X&&(R.refreshToken=X))}if(p.account.platform==="droid"){const Ie=((ve=a.value.apiKeysInput)==null?void 0:ve.trim())||"",X=a.value.apiKeyUpdateMode||"append";if(X==="delete"){if(!Ie){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请填写需要删除的 API Key",J.value=!1;return}R.removeApiKeys=Se,R.apiKeyUpdateMode="delete"}else{if(Ie){const Se=lt(Ie);if(Se.length===0){M.value.apiKeys="请至少填写一个 API Key",J.value=!1;return}R.apiKeys=Se}else X==="replace"&&(R.apiKeys=[]);(X!=="append"||Ie)&&(R.apiKeyUpdateMode=X)}w.value&&(R.authenticationMethod="api_key")}if(p.account.platform==="gemini"&&(R.projectId=a.value.projectId||""),p.account.platform==="droid"&&(R.priority=a.value.priority||50,R.endpointType=a.value.endpointType||"anthropic"),p.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=xt()),R.priority=a.value.priority||50,R.autoStopOnWarning=a.value.autoStopOnWarning||!1,R.interceptWarmup=a.value.interceptWarmup||!1,R.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,R.useUnifiedClientId=a.value.useUnifiedClientId||!1,R.unifiedClientId=a.value.unifiedClientId||"",R.maxConcurrency=a.value.serialQueueEnabled?1:0,R.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),p.account.platform==="openai"&&(R.priority=a.value.priority||50),p.account.platform==="gemini"&&(R.priority=a.value.priority||50),p.account.platform==="claude-console"&&(R.apiUrl=a.value.apiUrl,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=sa()||{},R.userAgent=a.value.userAgent||null,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,R.disableAutoProtection=!!a.value.disableAutoProtection,R.interceptWarmup=!!a.value.interceptWarmup,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00",R.maxConcurrentTasks=a.value.maxConcurrentTasks||0),p.account.platform==="openai-responses"&&(R.baseApi=a.value.baseApi,a.value.apiKey&&(R.apiKey=a.value.apiKey),R.userAgent=a.value.userAgent||"",R.priority=a.value.priority||50,R.dailyQuota=a.value.dailyQuota||0,R.quotaResetTime=a.value.quotaResetTime||"00:00"),p.account.platform==="bedrock"&&(a.value.credentialType&&(R.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(R.awsCredentials={},a.value.accessKeyId&&(R.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(R.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(R.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(R.bearerToken=a.value.bearerToken),a.value.region&&(R.region=a.value.region),R.defaultModel=a.value.defaultModel||null,R.smallFastModel=a.value.smallFastModel||null,R.priority=a.value.priority||50,R.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),p.account.platform==="azure_openai"&&(R.azureEndpoint=a.value.azureEndpoint,R.apiVersion=a.value.apiVersion||"2024-02-01",R.deploymentName=a.value.deploymentName,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],R.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey)),p.account.platform==="gemini-api"&&(R.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(R.apiKey=a.value.apiKey),R.priority=a.value.priority||50,R.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),p.account.platform==="claude")await K.updateClaudeAccount(p.account.id,R);else if(p.account.platform==="claude-console")await K.updateClaudeConsoleAccount(p.account.id,R);else if(p.account.platform==="openai-responses")await K.updateOpenAIResponsesAccount(p.account.id,R);else if(p.account.platform==="bedrock")await K.updateBedrockAccount(p.account.id,R);else if(p.account.platform==="openai")await K.updateOpenAIAccount(p.account.id,R);else if(p.account.platform==="azure_openai")await K.updateAzureOpenAIAccount(p.account.id,R);else if(p.account.platform==="gemini")await K.updateGeminiAccount(p.account.id,R);else if(p.account.platform==="gemini-api")await K.updateGeminiApiAccount(p.account.id,R);else if(p.account.platform==="droid")await K.updateDroidAccount(p.account.id,R);else throw new Error(`不支持的平台: ${p.account.platform}`);N("success")}catch(L){const R=((ye=(i=L.response)==null?void 0:i.data)==null?void 0:ye.error)||L.message||"账户更新失败",Ie=((Ne=(me=L.response)==null?void 0:me.data)==null?void 0:Ne.suggestion)||"",X=((Re=(Be=L.response)==null?void 0:Be.data)==null?void 0:Re.errorDetails)||null;let Se=R;Ie&&(Se+=`
-${Ie}`),X&&X.error_description?Se+=`
-详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(Se+=`
-详细信息: ${X.error.message}`),P(Se,"error","",8e3)}finally{J.value=!1}}};$e(()=>a.value.name,()=>{var d;M.value.name&&((d=a.value.name)!=null&&d.trim())&&(M.value.name="")}),$e(()=>a.value.accessToken,()=>{var d;M.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(M.value.accessToken="")}),$e(()=>a.value.refreshToken,()=>{var d;M.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(M.value.refreshToken="")}),$e(()=>a.value.apiUrl,()=>{var d;M.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(M.value.apiUrl="")}),$e(()=>a.value.apiKey,()=>{var d;M.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(M.value.apiKey="")}),$e(()=>a.value.azureEndpoint,()=>{var d;M.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(M.value.azureEndpoint="")}),$e(()=>a.value.deploymentName,()=>{var d;M.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(M.value.deploymentName="")});const et=$([]),Wt=$(!1),At=$(!1),Ft=se(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),et.value.filter(t=>t.platform===d)}),Bt=async()=>{Wt.value=!0;try{const d=await G.get("/admin/account-groups");et.value=d.data||[]}catch{P("加载分组列表失败","error"),et.value=[]}finally{Wt.value=!1}},Gt=async()=>{await Bt(),P("分组列表已刷新","success")},Vt=()=>{At.value=!0},ha=async()=>{await Bt()},wa=async()=>{var t;if(!((t=p.account)!=null&&t.id))return;const d=[typeof K.fetchDroidAccounts=="function"?K.fetchDroidAccounts:null,typeof K.fetchAllAccounts=="function"?K.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ve){console.error("刷新账户列表失败:",ve)}};$e(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),$e(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),$e(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",M.value.accessToken="",M.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",M.value.apiKeys="",j.value||(a.value.authenticationMethod="")))}),$e(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&M.value.apiKeys&&(M.value.apiKeys="")}),$e(()=>a.value.apiKeysInput,d=>{if(!M.value.apiKeys)return;const t=lt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){M.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(M.value.apiKeys="");return}ie==="delete"&&t.length>0&&(M.value.apiKeys="")}),$e(D,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(D.value=i,P("成功提取授权码!","success")):P("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{P("链接格式错误,请检查是否为完整的 URL","error")}else P("请粘贴以 http://localhost:45462 开头的链接","error")}),$e(()=>a.value.platform,d=>{j.value||N("platform-changed",d)}),$e(()=>a.value.accountType,d=>{d==="group"&&et.value.length===0&&Bt()}),$e(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",At.value=!0)});const $a=()=>{De.value.push({from:"",to:""})},mt=d=>{De.value.splice(d,1)},Ve=(d,t)=>{if(De.value.some(ve=>ve.from===d)){P(`模型 ${d} 的映射已存在`,"info");return}De.value.push({from:d,to:t}),P(`已添加映射: ${d} → ${t}`,"success")},sa=()=>{const d={};return te.value==="whitelist"?Ae.value.forEach(t=>{d[t]=t}):De.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};$e(()=>p.account,d=>{if(d){at();const t=be(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ve=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let ye="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?ye=me.accountType:me.hasClaudeMax?ye="claude_max":me.hasClaudePro?ye="claude_pro":ye="claude_free"}a.value={platform:d.platform,addType:ve,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:ye,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&m(),d.accountType==="group"&&Bt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(Ne=>{Ne&&Ne.id&&me.push(Ne.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const Ne=et.value.map(async Be=>{try{((await G.get(`/admin/account-groups/${Be.id}/members`)).data||[]).some(R=>R.id===d.id)&&(me.push(Be.id),a.value.groupId||(a.value.groupId=Be.id))}catch{}});await Promise.all(Ne)}a.value.groupIds=me})}},{immediate:!0});const ut=async()=>{try{const d=await G.get("/admin/claude-code-version");d.success&&d.userAgent?h.value=d.userAgent:h.value=""}catch{h.value=""}},Ct=async()=>{fe.value=!0;try{(await G.post("/admin/claude-code-version/clear")).success?(h.value="",P("统一User-Agent缓存已清除","success")):P("清除缓存失败","error")}catch(d){P("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{fe.value=!1}},xt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},la=()=>{a.value.unifiedClientId=xt(),P("已生成新的客户端标识","success")},Aa=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=xt()))},Ca=se(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),gt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ve,i]=ie,ye=parseInt(ve);i==="d"&&d.setDate(d.getDate()+ye),a.value.expiresAt=d.toISOString()}},oa=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ta=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return aa(()=>{var d;le.value=Y(a.value.platform),j.value&&at(),ut(),j.value&&((d=p.account)==null?void 0:d.platform)==="claude-console"&&m()}),$e(()=>a.value.platform,d=>{d==="claude"&&ut()}),(d,t)=>{var ie,ve;return o(),Ye(Kt,{to:"body"},[oe.value?(o(),n("div",Cn,[e("div",Tn,[e("div",In,[e("div",Un,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",_n,u(j.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!j.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Kn,[e("div",Sn,[e("div",Mn,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",pe.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Dn,[e("div",{class:I(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",pe.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):c("",!0),pe.value===1&&!j.value?(o(),n("div",Pn,[e("div",jn,[j.value?c("",!0):(o(),n("div",Ln,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Vn,[e("div",zn,[e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>E("claude"))},[e("div",Rn,[e("div",On,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),le.value==="claude"?(o(),n("div",En,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>E("openai"))},[e("div",Nn,[e("div",qn,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),le.value==="openai"?(o(),n("div",Wn,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>E("gemini"))},[e("div",Fn,[e("div",Bn,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),le.value==="gemini"?(o(),n("div",Gn,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:I(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[le.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>E("droid"))},[e("div",Qn,[e("div",Hn,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),le.value==="droid"?(o(),n("div",Jn,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),le.value?(o(),n("div",Yn,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",Zn,[le.value==="claude"?(o(),n(Ce,{key:0},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[_e,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",Xn,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[_e,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",ei,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[_e,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",ti,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[_e,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",ai,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="openai"?(o(),n(Ce,{key:1},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[_e,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",ri,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[_e,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",si,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[_e,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",li,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="gemini"?(o(),n(Ce,{key:2},[e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[_e,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",oi,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[_e,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",ni,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2),e("label",{class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[_e,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",ii,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)],64)):c("",!0),le.value==="droid"?(o(),n("label",{key:3,class:I(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[_e,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",di,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):c("",!0)],2)):c("",!0)])])):c("",!0)])])),!j.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",ui,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",gi,[e("label",pi,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[_e,a.value.addType]]),e("span",ci,[t[216]||(t[216]=x(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",yi," (用量可视化)")):c("",!0)])]),a.value.platform==="claude"?(o(),n("label",mi,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[_e,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):c("",!0),e("label",xi,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[_e,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",fi,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[_e,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):c("",!0)])])):c("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,a.value.name]]),M.value.name?(o(),n("p",bi,u(M.value.name),1)):c("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",vi,[e("label",ki,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",hi,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",wi,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!j.value&&a.value.platform!=="gemini-api"?(o(),n("div",$i,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ai,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Ci,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Ti),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Ii,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Ui,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):c("",!0),a.value.accountType==="group"?(o(),n("div",_i,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ki,[e("div",Si,[e("div",Mi,[Ft.value.length===0?(o(),n("div",Di," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=ye=>a.value.groupIds=ye),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Pi),[[ze,a.value.groupIds]]),e("span",ji,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Vt},t[233]||(t[233]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Li,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[x(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[x(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),x(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),x("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",Vi,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),j.value?(o(),n("div",Ei,[e("label",Ni,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",qi,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])):(o(),n("div",zi,[e("label",Ri,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[_e,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",Oi,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[_e,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])),e("div",Wi,[e("div",Fi,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",Bi,[a.value.credentialType==="access_key"?(o(),n("p",Gi," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",Qi," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),j.value?(o(),n("p",Hi," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):c("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",Ji,[e("div",null,[e("label",Yi,"AWS 访问密钥 ID "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.value.accessKeyId=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.accessKeyId}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!j.value,type:"text"},null,10,Zi),[[z,a.value.accessKeyId]]),M.value.accessKeyId?(o(),n("p",Xi,u(M.value.accessKeyId),1)):c("",!0),j.value?(o(),n("p",ed," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):c("",!0)]),e("div",null,[e("label",td,"AWS 秘密访问密钥 "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.secretAccessKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.secretAccessKey}]),placeholder:j.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!j.value,type:"password"},null,10,ad),[[z,a.value.secretAccessKey]]),M.value.secretAccessKey?(o(),n("p",rd,u(M.value.secretAccessKey),1)):c("",!0),j.value?(o(),n("p",sd," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):c("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:j.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,ld),[[z,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):c("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",od,[e("label",nd,"Bearer Token "+u(j.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.bearerToken}]),placeholder:j.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!j.value,type:"password"},null,10,id),[[z,a.value.bearerToken]]),M.value.bearerToken?(o(),n("p",dd,u(M.value.bearerToken),1)):c("",!0),j.value?(o(),n("p",ud," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):c("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[x(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):c("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[z,a.value.region]]),M.value.region?(o(),n("p",gd,u(M.value.region),1)):c("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):c("",!0),a.value.platform==="azure_openai"&&!j.value?(o(),n("div",pd,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",cd,u(M.value.azureEndpoint),1)):c("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",yd,u(M.value.deploymentName),1)):c("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",md,u(M.value.apiKey),1)):c("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",xd,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,fd),[[ze,a.value.supportedModels]]),e("span",bd,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):c("",!0),a.value.platform==="bedrock"&&!j.value?(o(),n("div",vd,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",kd,[e("label",hd,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",wd,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)])])):c("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!j.value?(o(),n("div",$d,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[z,a.value.apiUrl]]),M.value.apiUrl?(o(),n("p",Ad,u(M.value.apiUrl),1)):c("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",Cd,u(M.value.apiKey),1)):c("",!0)]),e("div",Td,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Id,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>te.value="whitelist")},t[276]||(t[276]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>te.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",Ud,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",_d,[(o(),n(Ce,null,We(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Kd),[[ze,Ae.value]]),e("span",Sd,u(i.label),1)],2)),64))]),e("p",Md,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Dd,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Pd,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",jd,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ld),[[z,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Vd),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>mt(ye)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,zd)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:$a},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",Rd,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>Ve("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Od,[e("label",Ed,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Nd,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",qd,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",Wd,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"&&!j.value?(o(),n("div",Fd,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[z,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Bd,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:W.value?"text":"password"},null,8,Gd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]])])):c("",!0),a.value.platform==="gemini-api"&&!j.value?(o(),n("div",Qd,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",Hd,u(M.value.baseUrl),1)):c("",!0),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[302]||(t[302]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[303]||(t[303]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Jd,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:W.value?"text":"password"},null,8,Yd),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",Zd,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",Xd,[e("label",e0,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",t0,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",a0,[e("label",r0,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",o0,[e("label",n0,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",i0,[e("label",d0,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",u0,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),h.value?(o(),n("div",g0,[e("div",p0,[e("p",c0," 💡 当前统一版本:"+u(h.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",x0)):(o(),n("i",m0)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,y0)])])):(o(),n("div",f0,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",b0,[e("label",v0,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",k0,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",h0,[e("div",w0,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",$0,[e("code",A0,[e("span",C0,u(a.value.unifiedClientId.substring(0,8)),1),e("span",T0,u(a.value.unifiedClientId.substring(8,56)),1),e("span",I0,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",U0,[e("div",_0,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",K0," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",S0," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",M0," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",D0," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):c("",!0),e("div",P0,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),x(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",j0,t[323]||(t[323]=[x(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),x(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",L0,t[324]||(t[324]=[x(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),x(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",V0," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",z0," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):c("",!0)]),a.value.platform!=="droid"?(o(),n("p",R0," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",O0," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",E0,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[z,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",N0,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[z,a.value.accessToken]]),M.value.accessToken?(o(),n("p",q0,u(M.value.accessToken),1)):c("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",W0,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[z,a.value.refreshToken]]),M.value.refreshToken?(o(),n("p",F0,u(M.value.refreshToken),1)):c("",!0),e("p",B0,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(Ce,{key:0},[x(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(Ce,{key:1},[x(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",G0,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[z,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",Q0,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0)])):c("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",H0,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",J0,u(M.value.apiKeys),1)):c("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),x("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Y0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:Qe}," 下一步 ",8,Z0)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:qt},[J.value?(o(),n("div",eu)):c("",!0),x(" "+u(J.value?"创建中...":"创建"),1)],8,X0))])])])):c("",!0),pe.value===2&&a.value.addType==="oauth"?(o(),Ye(ql,{key:2,ref_key:"oauthFlowRef",ref:Z,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>pe.value=1),onSuccess:$t},null,8,["platform","proxy"])):c("",!0),pe.value===2&&a.value.addType==="setup-token"?(o(),n("div",tu,[a.value.platform==="claude"?(o(),n("div",au,[e("div",ru,[e("div",su,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",lu,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",ou,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",nu,[e("label",iu,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[_e,_.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),x("手动授权 ")],-1))]),e("label",du,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>_.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[_e,_.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),x("Cookie 自动授权 ")],-1))])])]),_.value==="manual"?(o(),n("div",uu,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",gu,[e("div",pu,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",cu,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),g.value?(o(),n("div",fu,[e("div",bu,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:g.value},null,8,vu),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Et},[e("i",{class:I(ce.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:yt},t[345]||(t[345]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:O.value,onClick:it},[O.value?(o(),n("div",xu)):(o(),n("i",mu)),x(" "+u(O.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,yu))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),x("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",ku,[e("div",hu,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",wu,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",$u,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),x("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>D.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[z,D.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):c("",!0),_.value==="cookie"?(o(),n("div",Au,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Cu,[e("div",Tu,[e("div",null,[e("label",Iu,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=x("sessionKey ",-1)),S.value>1?(o(),n("span",Uu,u(S.value)+" 个 ",1)):c("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>Q.value=i),class:I(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Ke.value}]),placeholder:`每行一个 sessionKey,例如:
-sk-ant-sid01-xxxxx...
-sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[z,Q.value]]),S.value>1?(o(),n("p",_u,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),x(" 将批量创建 "+u(S.value)+" 个账户 ",1)])):c("",!0),Ke.value?(o(),n("p",Ku,u(Ke.value),1)):c("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>F.value=!F.value)},[e("i",{class:I(F.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=x(" 如何获取 sessionKey? ",-1))]),F.value?(o(),n("div",Su,t[359]||(t[359]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[x("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[x("2. 按 "),e("strong",null,"F12"),x(" 打开开发者工具")]),e("li",null,[x("3. 切换到 "),e("strong",null,'"Application"'),x(" (应用) 标签页")]),e("li",null,[x(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),x(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[x("5. 找到键为 "),e("strong",null,'"sessionKey"'),x(" 的那一行")]),e("li",null,[x("6. 复制其 "),e("strong",null,'"Value"'),x(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):c("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:we.value||!Q.value.trim(),type:"button",onClick:kt},[we.value?(o(),n("div",Du)):(o(),n("i",Pu)),we.value&&ee.value.total>1?(o(),n(Ce,{key:2},[x(" 正在授权 "+u(ee.value.current)+"/"+u(ee.value.total)+"... ",1)],64)):we.value?(o(),n(Ce,{key:3},[x(" 授权中... ")],64)):(o(),n(Ce,{key:4},[x(" 开始自动授权 ")],64))],8,Mu)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),x("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):c("",!0)])])])])):c("",!0),e("div",ju,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>pe.value=1)}," 上一步 "),_.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!pt.value||y.value,type:"button",onClick:Nt},[y.value?(o(),n("div",Vu)):c("",!0),x(" "+u(y.value?"验证中...":"完成授权"),1)],8,Lu)):c("",!0)])])):c("",!0),j.value?(o(),n("div",zu,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[z,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ru,[e("label",Ou,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[_e,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Eu,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[_e,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Nu,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[_e,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),j.value?c("",!0):(o(),n("div",qu,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Wu,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:gt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[Ja,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Fu,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ca.value,type:"datetime-local",onChange:oa},null,40,Bu),[[z,a.value.customExpireDate]])])):c("",!0),a.value.expiresAt?(o(),n("p",Gu,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),x(" 将于 "+u(Ta(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Qu,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",Hu,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Ju,[e("div",Yu,[e("div",Zu,[Ft.value.length===0?(o(),n("div",Xu," 暂无可用分组 ")):c("",!0),(o(!0),n(Ce,null,We(Ft.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=ye=>a.value.groupIds=ye),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,eg),[[ze,a.value.groupIds]]),e("span",tg,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Vt},t[376]||(t[376]=[e("i",{class:"fas fa-plus"},null,-1),x(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Gt},[e("i",{class:I(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):c("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",ag,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[z,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",rg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",sg,[e("label",lg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[_e,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",og,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[_e,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):c("",!0),a.value.platform==="claude"?(o(),n("div",ng,[e("label",ig,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",dg,[e("label",ug,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):c("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",gg,[e("label",pg,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):c("",!0),a.value.platform==="claude"?(o(),n("div",cg,[e("label",yg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.useUnifiedUserAgent]]),e("div",mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),h.value?(o(),n("div",xg,[e("div",fg,[e("p",bg," 💡 当前统一版本:"+u(h.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:fe.value,type:"button",onClick:Ct},[fe.value?(o(),n("div",hg)):(o(),n("i",kg)),x(" "+u(fe.value?"清除中...":"清除缓存"),1)],8,vg)])])):(o(),n("div",wg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):c("",!0),a.value.platform==="claude"?(o(),n("div",$g,[e("label",Ag,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Aa},null,544),[[ze,a.value.useUnifiedClientId]]),e("div",Cg,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Tg,[e("div",Ig,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:la},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),x(" 重新生成 ",-1)]))]),e("div",Ug,[e("code",_g,[e("span",Kg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Sg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Mg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),x(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):c("",!0)])])])):c("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[z,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Dg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[z,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Pg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),j.value&&a.value.dailyQuota>0?(o(),n("div",jg,[e("div",Lg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Vg," $"+u(vt().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",zg,[e("div",{class:I(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:He({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",Rg,[e("span",Og," 剩余: $"+u(Math.max(0,a.value.dailyQuota-vt()).toFixed(2)),1),e("span",Eg,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):c("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Ng,[e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>te.value="whitelist")},t[407]||(t[407]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),x(" 模型白名单 ",-1)]),2),e("button",{class:I(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",te.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>te.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),x(" 模型映射 ",-1)]),2)]),te.value==="whitelist"?(o(),n("div",qg,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Wg,[(o(),n(Ce,null,We(Ge,i=>e("label",{key:i.value,class:I(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",Ae.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=ye=>Ae.value=ye),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,Fg),[[ze,Ae.value]]),e("span",Bg,u(i.label),1)],2)),64))]),e("p",Gg,[x(" 已选择 "+u(Ae.value.length)+" 个模型 ",1),Ae.value.length===0?(o(),n("span",Qg,"(支持所有模型)")):c("",!0)])])):(o(),n("div",Hg,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Jg,[(o(!0),n(Ce,null,We(De.value,(i,ye)=>(o(),n("div",{key:ye,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,Yg),[[z,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,Zg),[[z,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>mt(ye)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Xg)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:$a},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)])),e("div",ep,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>Ve("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>Ve("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>Ve("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>Ve("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>Ve("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>Ve("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>Ve("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>Ve("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>Ve("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",tp,[e("label",ap,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",rp,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)]),a.value.platform==="claude-console"?(o(),n("div",sp,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",lp,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):c("",!0)])):c("",!0),a.value.platform==="openai-responses"?(o(),n("div",op,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[z,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",np,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,ip),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",dp,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[z,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[z,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):c("",!0),a.value.platform==="gemini-api"?(o(),n("div",up,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":M.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[z,a.value.baseUrl]]),M.value.baseUrl?(o(),n("p",gp,u(M.value.baseUrl),1)):c("",!0),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[x(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),x(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[436]||(t[436]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[437]||(t[437]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[x(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",pp,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:W.value?"text":"password"},null,8,cp),[[va,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>W.value=!W.value)},[e("i",{class:I(W.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):c("",!0),a.value.platform==="bedrock"?(o(),n("div",yp,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[z,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[z,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[z,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[z,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[z,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",mp,[e("label",xp,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ze,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",fp,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[z,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):c("",!0)])])):c("",!0),a.value.platform==="azure_openai"?(o(),n("div",bp,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[z,a.value.azureEndpoint]]),M.value.azureEndpoint?(o(),n("p",vp,u(M.value.azureEndpoint),1)):c("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[z,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[z,a.value.deploymentName]]),M.value.deploymentName?(o(),n("p",kp,u(M.value.deploymentName),1)):c("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[z,a.value.apiKey]]),M.value.apiKey?(o(),n("p",hp,u(M.value.apiKey),1)):c("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",wp,[(o(),n(Ce,null,We(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=ye=>a.value.supportedModels=ye),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,$p),[[ze,a.value.supportedModels]]),e("span",Ap,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):c("",!0),j.value&&w.value?(o(),n("div",Cp,[e("div",Tp,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Ip,[e("div",Up,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>je.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",_p,[t[466]||(t[466]=x(" 当前已保存 ",-1)),e("strong",null,u(Pt.value),1),t[467]||(t[467]=x(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Kp,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class:I(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":M.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[z,a.value.apiKeysInput]]),M.value.apiKeys?(o(),n("p",Sp,u(M.value.apiKeys),1)):c("",!0)]),e("div",Mp,[e("div",Dp,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Pp,u(Mt.value),1)]),e("div",jp,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:He(St.value)},null,4),(o(),n(Ce,null,We(Xe,i=>e("button",{key:i.value,class:I(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:ye=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Lp)),64))]),e("p",Vp,u(Dt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),x("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):c("",!0),!(j.value&&w.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",zp,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",Rp,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[z,a.value.refreshToken]])])])])):c("",!0),a.value.platform==="droid"?(o(),n("div",Op,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[z,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):c("",!0),Ee(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",Ep,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:J.value,type:"button",onClick:dt},[J.value?(o(),n("div",qp)):c("",!0),x(" "+u(J.value?"更新中...":"更新"),1)],8,Np)])])):c("",!0)])])):c("",!0),Ee(kr,{"cancel-text":st(U).cancelText,"confirm-text":st(U).confirmText,message:st(U).message,show:st(V),title:st(U).title,onCancel:st(k),onConfirm:st(v)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),At.value?(o(),Ye(To,{key:1,onClose:t[169]||(t[169]=i=>At.value=!1),onRefresh:ha})):c("",!0),je.value?(o(),Ye(An,{key:2,"account-id":(ie=p.account)==null?void 0:ie.id,"account-name":(ve=p.account)==null?void 0:ve.name,onClose:t[170]||(t[170]=i=>je.value=!1),onRefresh:wa},null,8,["account-id","account-name"])):c("",!0)])}}},cr=ra(Wp,[["__scopeId","data-v-824201c5"]]),Fp={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Bp={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},Gp={class:"mb-4 flex items-center justify-between sm:mb-6"},Qp={class:"flex items-center gap-2 sm:gap-3"},Hp={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Jp={class:"space-y-6"},Yp={key:0,class:"mt-1 text-xs text-red-500"},Zp={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Xp={key:0,class:"mt-1 text-xs text-red-500"},ec={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},tc=["placeholder","required"],ac={key:0,class:"mt-1 text-xs text-red-500"},rc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sc={class:"mb-3"},lc={class:"inline-flex cursor-pointer items-center"},oc={key:0},nc={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ic={class:"mb-3 space-y-2"},dc=["onUpdate:modelValue"],uc=["onUpdate:modelValue"],gc=["onClick"],pc={class:"mt-2 flex gap-3"},cc=["disabled"],yc={key:0,class:"loading-spinner mr-2"},mc={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!0),V=se(()=>!!p.account),U=$(!1),C=$({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),v=$(!0),k=$({}),j=$([]),oe=()=>{const y={};for(const g of j.value){const D=(g.from||"").trim(),ce=(g.to||"").trim();D&&ce&&(y[D]=ce)}return y},Z=()=>{j.value.push({from:"",to:""})},pe=y=>{j.value.splice(y,1)},J=()=>{const y={};return(!C.value.name||C.value.name.trim().length===0)&&(y.name="名称不能为空"),(!C.value.apiUrl||C.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!V.value&&(!C.value.apiKey||C.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),k.value=y,Object.keys(y).length===0},W=async()=>{if(J()){U.value=!0;try{if(V.value){const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,priority:C.value.priority,userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00",proxy:C.value.proxy||null,supportedModels:oe()};C.value.apiKey&&C.value.apiKey.trim().length>0&&(y.apiKey=C.value.apiKey);const g=await G.put(`/admin/ccr-accounts/${p.account.id}`,y);g.success?N("success"):P(g.message||"保存失败","error")}else{const y={name:C.value.name,description:C.value.description,apiUrl:C.value.apiUrl,apiKey:C.value.apiKey,priority:Number(C.value.priority||50),supportedModels:oe(),userAgent:C.value.userAgent,rateLimitDuration:v.value?Number(C.value.rateLimitDuration||60):0,proxy:C.value.proxy,accountType:"shared",dailyQuota:Number(C.value.dailyQuota||0),quotaResetTime:C.value.quotaResetTime||"00:00"},g=await G.post("/admin/ccr-accounts",y);g.success?N("success"):P(g.message||"创建失败","error")}}catch(y){P(y.message||"请求失败","error")}finally{U.value=!1}}},O=()=>{if(!p.account)return;const y=p.account;C.value.name=y.name||"",C.value.description=y.description||"",C.value.apiUrl=y.apiUrl||"",C.value.priority=Number(y.priority||50),C.value.userAgent=y.userAgent||"",C.value.rateLimitDuration=Number(y.rateLimitDuration||60),C.value.dailyQuota=Number(y.dailyQuota||0),C.value.quotaResetTime=y.quotaResetTime||"00:00",C.value.proxy=y.proxy||null,v.value=C.value.rateLimitDuration>0,j.value=[];const g=y.supportedModels||{};if(g&&typeof g=="object")for(const D of Object.keys(g))j.value.push({from:D,to:g[D]})};return aa(()=>{V.value&&O()}),$e(()=>p.account,()=>{V.value&&O()}),(y,g)=>(o(),Ye(Kt,{to:"body"},[K.value?(o(),n("div",Fp,[e("div",Bp,[e("div",Gp,[e("div",Qp,[g[13]||(g[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",Hp,u(V.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:g[0]||(g[0]=D=>y.$emit("close"))},g[14]||(g[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Jp,[e("div",null,[g[15]||(g[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=D=>C.value.name=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[z,C.value.name]]),k.value.name?(o(),n("p",Yp,u(k.value.name),1)):c("",!0)]),e("div",null,[g[16]||(g[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":g[2]||(g[2]=D=>C.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[z,C.value.description]])]),e("div",Zp,[e("div",null,[g[17]||(g[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>C.value.apiUrl=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[z,C.value.apiUrl]]),k.value.apiUrl?(o(),n("p",Xp,u(k.value.apiUrl),1)):c("",!0)]),e("div",null,[e("label",ec,"API Key "+u(V.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=D=>C.value.apiKey=D),class:I(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":k.value.apiKey}]),placeholder:V.value?"留空表示不更新":"必填",required:!V.value,type:"password"},null,10,tc),[[z,C.value.apiKey]]),k.value.apiKey?(o(),n("p",ac,u(k.value.apiKey),1)):c("",!0)])]),e("div",rc,[e("div",null,[g[18]||(g[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=D=>C.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[z,C.value.priority,void 0,{number:!0}]]),g[19]||(g[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[g[20]||(g[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":g[6]||(g[6]=D=>C.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[z,C.value.userAgent]])])]),e("div",null,[g[24]||(g[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",sc,[e("label",lc,[b(e("input",{"onUpdate:modelValue":g[7]||(g[7]=D=>v.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ze,v.value]]),g[21]||(g[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),v.value?(o(),n("div",oc,[g[22]||(g[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[8]||(g[8]=D=>C.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[z,C.value.rateLimitDuration,void 0,{number:!0}]]),g[23]||(g[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):c("",!0)]),e("div",nc,[e("div",null,[g[25]||(g[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":g[9]||(g[9]=D=>C.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[z,C.value.dailyQuota,void 0,{number:!0}]]),g[26]||(g[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[g[27]||(g[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":g[10]||(g[10]=D=>C.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[z,C.value.quotaResetTime]]),g[28]||(g[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[g[32]||(g[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),g[33]||(g[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),x(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",ic,[(o(!0),n(Ce,null,We(j.value,(D,ce)=>(o(),n("div",{key:ce,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":B=>D.from=B,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,dc),[[z,D.from]]),g[30]||(g[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":B=>D.to=B,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,uc),[[z,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:B=>pe(ce)},g[29]||(g[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,gc)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:Z},g[31]||(g[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),x(" 添加模型映射 ",-1)]))]),e("div",null,[Ee(rr,{modelValue:C.value.proxy,"onUpdate:modelValue":g[11]||(g[11]=D=>C.value.proxy=D)},null,8,["modelValue"])]),e("div",pc,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[12]||(g[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:U.value,type:"button",onClick:W},[U.value?(o(),n("div",yc)):c("",!0),x(" "+u(U.value?V.value?"保存中...":"创建中...":V.value?"保存":"创建"),1)],8,cc)])])])])):c("",!0)]))}},yr=ra(mc,[["__scopeId","data-v-2a966370"]]),xc={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},fc={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},bc={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},vc={class:"flex flex-1 items-start gap-3"},kc={class:"space-y-1"},hc={class:"flex flex-wrap items-center gap-2"},wc={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},$c={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},Ac={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},Cc={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Tc={key:0},Ic={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},Uc={key:0,class:"flex h-[50vh] items-center justify-center"},_c={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Kc={class:"flex items-start justify-between"},Sc={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Mc={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Dc={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Pc={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},jc={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Lc={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},Vc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},zc={class:"flex items-center justify-between"},Rc={class:"font-semibold text-gray-900 dark:text-gray-100"},Oc={class:"mt-2 flex items-center justify-between"},Ec={class:"font-semibold text-gray-900 dark:text-gray-100"},Nc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},qc={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},Wc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},Fc={class:"flex items-center justify-between"},Bc={class:"font-semibold text-gray-900 dark:text-gray-100"},Gc={class:"mt-2 flex items-center justify-between"},Qc={class:"font-semibold text-gray-900 dark:text-gray-100"},Hc={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Jc={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},Yc={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},Zc={class:"flex items-center justify-between"},Xc={class:"font-semibold text-gray-900 dark:text-gray-100"},ey={class:"mt-2 flex items-center justify-between"},ty={class:"font-semibold text-gray-900 dark:text-gray-100"},ay={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},ry={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},sy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},ly={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},oy={class:"flex items-center justify-between"},ny={class:"font-semibold text-gray-900 dark:text-gray-100"},iy={class:"flex items-center justify-between"},dy={class:"font-semibold text-gray-900 dark:text-gray-100"},uy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},gy={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},py={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},cy={class:"flex items-center justify-between"},yy={class:"font-semibold text-gray-900 dark:text-gray-100"},my={class:"flex items-center justify-between"},xy={class:"font-semibold text-gray-900 dark:text-gray-100"},fy={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},by={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},vy={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},ky={class:"flex items-center justify-between"},hy={class:"font-semibold text-gray-900 dark:text-gray-100"},wy={class:"flex items-center justify-between"},$y={class:"font-semibold text-gray-900 dark:text-gray-100"},Ay={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Cy={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Ty={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Iy={class:"text-xs text-gray-400 dark:text-gray-500"},Uy={class:"h-[260px] sm:h-[300px]"},_y={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(H,{emit:Pe}){const p=H,N=Pe,K=Vr(),{isDarkMode:V}=jr(K),U=Lr(),C=$(null);let v=null;const k={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},j=se(()=>{var S;return k[(S=p.account)==null?void 0:S.platform]||"未知平台"}),oe=se(()=>{var S;return(S=p.account)!=null&&S.accountType?p.account.accountType==="dedicated"?"专属":p.account.accountType==="group"?"分组":"共享":"共享"}),Z=se(()=>({text:V.value?"#e5e7eb":"#374151",grid:V.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),pe=se(()=>{var S;return((S=p.summary)==null?void 0:S.totalTokens)||0}),J=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.inputTokens)||0}),W=se(()=>{var S,h;return((h=(S=p.overview)==null?void 0:S.total)==null?void 0:h.outputTokens)||0}),O=S=>{const h=Number(S||0);return h>=1e6?`${(h/1e6).toFixed(2)}M`:h>=1e3?`${(h/1e3).toFixed(2)}K`:h.toLocaleString()},y=S=>{const h=Number(S||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},g=S=>Math.round((Number(S)||0)*100)/100,D=S=>{if(!S)return"-";const h=new Date(S);if(Number.isNaN(h.getTime())){const je=S.split("-");return je.length===3?`${je[1]}-${je[2]}`:S}const fe=String(h.getMonth()+1).padStart(2,"0"),le=String(h.getDate()).padStart(2,"0");return`${fe}-${le}`},ce=S=>{if(!S)return"暂无";const h=new Date(S);return Number.isNaN(h.getTime())?S:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},B=(S,h)=>{if(!S)return 0;const fe=p.history.find(le=>le.date===S);return fe&&fe[h]||0},_=se(()=>{var S,h;return p.generatedAt||((S=p.summary)==null?void 0:S.generatedAt)||((h=p.summary)==null?void 0:h.generated_at)||""}),Q=se(()=>{var S,h,fe,le,je,Y,T,q;return[{key:"totalCost",label:"30天总费用",value:((S=p.summary)==null?void 0:S.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:O(((h=p.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((fe=p.summary)==null?void 0:fe.avgDailyCostFormatted)||y(((le=p.summary)==null?void 0:le.avgDailyCost)||0),subtitle:(je=p.summary)!=null&&je.actualDaysUsed&&((Y=p.summary)==null?void 0:Y.actualDaysUsed)<((T=p.summary)==null?void 0:T.days)?`基于 ${p.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:O(g(((q=p.summary)==null?void 0:q.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),we=async()=>{if(await ar(),!p.show||!C.value)return;if(v&&v.destroy(),!p.history||p.history.length===0){v=null;return}const S=p.history.map(le=>le.label),h=p.history.map(le=>le.cost||0),fe=p.history.map(le=>le.requests||0);v=new zr(C.value,{type:"line",data:{labels:S,datasets:[{label:"费用 (USD)",data:h,borderColor:Z.value.cost,backgroundColor:Z.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:fe,borderColor:Z.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:Z.value.text}},tooltip:{callbacks:{label(le){return le.dataset.label==="费用 (USD)"?`${le.dataset.label}: ${y(le.parsed.y)}`:`${le.dataset.label}: ${O(le.parsed.y)} 次`}}}},scales:{x:{ticks:{color:Z.value.text},grid:{color:Z.value.grid}},y:{position:"left",ticks:{color:Z.value.text,callback:le=>y(le)},grid:{color:Z.value.grid}},y1:{position:"right",ticks:{color:Z.value.text,callback:le=>O(le)},grid:{drawOnChartArea:!1}}}}})},Ke=()=>{v&&(v.destroy(),v=null)},F=()=>{Ke(),N("close")},ee=()=>{var S;(S=p.account)!=null&&S.id&&U.push({path:`/accounts/${p.account.id}/usage-records`,query:{platform:p.account.platform||p.account.accountType}})};return $e(()=>p.show,S=>{S&&!p.loading?we():S||Ke()}),$e(()=>p.loading,S=>{!S&&p.show&&we()}),$e(()=>p.history,()=>{p.show&&!p.loading&&we()},{deep:!0}),$e(V,()=>{p.show&&!p.loading&&we()}),Ya(()=>{Ke()}),(S,h)=>{var fe,le,je,Y,T,q,be,ge,de,a,te,Ae,Ge,De,at,lt,Xe,St,Mt,Dt,M,ht,pt,vt,ct,Pt,w,m,E,Qe,it,yt,Et,Nt,kt,jt,Lt,wt,$t,qt,dt;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",xc,[e("div",{class:"absolute inset-0",onClick:F}),e("div",fc,[e("div",bc,[e("div",vc,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",kc,[e("div",hc,[e("h3",wc,u(((fe=H.account)==null?void 0:fe.name)||((le=H.account)==null?void 0:le.email)||"账号使用详情"),1),(je=H.account)!=null&&je.platform?(o(),n("span",$c,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),x(u(j.value),1)])):c("",!0),(Y=H.account)!=null&&Y.accountType?(o(),n("span",Ac,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),x(u(oe.value),1)])):c("",!0)]),e("p",Cc,[x(" 近 "+u(((T=H.summary)==null?void 0:T.days)||30)+" 天内的费用与请求趋势 ",1),(q=H.summary)!=null&&q.actualDaysUsed&&((be=H.summary)==null?void 0:be.actualDaysUsed)<((ge=H.summary)==null?void 0:ge.days)?(o(),n("span",Tc," (日均基于实际使用 "+u(H.summary.actualDaysUsed)+" 天) ",1)):c("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:ee},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),x(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:F},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Ic,[H.loading?(o(),n("div",Uc,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(Ce,{key:1},[e("div",_c,[(o(!0),n(Ce,null,We(Q.value,et=>(o(),n("div",{key:et.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Kc,[e("div",null,[e("p",Sc,u(et.label),1),e("p",Mc,u(et.value),1),e("p",Dc,u(et.subtitle),1)]),e("div",Pc,[e("i",{class:I(["fas",et.icon,et.iconClass])},null,2)])])]))),128))]),e("div",jc,[e("div",Lc,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),x(" 今日概览 ")],-1)),e("div",Vc,[e("div",zc,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",Rc,u(((a=(de=H.summary)==null?void 0:de.today)==null?void 0:a.costFormatted)||"$0.000000"),1)]),e("div",Oc,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",Ec,u(O(((Ae=(te=H.summary)==null?void 0:te.today)==null?void 0:Ae.requests)||0)),1)]),e("div",Nc,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(O(((De=(Ge=H.summary)==null?void 0:Ge.today)==null?void 0:De.tokens)||0)),1)])])]),e("div",qc,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),x(" 最高费用日 ")],-1)),e("div",Wc,[e("div",Fc,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",Bc,u(D((lt=(at=H.summary)==null?void 0:at.highestCostDay)==null?void 0:lt.date)),1)]),e("div",Gc,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",Qc,u(((St=(Xe=H.summary)==null?void 0:Xe.highestCostDay)==null?void 0:St.formattedCost)||"$0.000000"),1)]),e("div",Hc,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(O(B((Dt=(Mt=H.summary)==null?void 0:Mt.highestCostDay)==null?void 0:Dt.date,"requests"))),1)])])]),e("div",Jc,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),x(" 最高请求日 ")],-1)),e("div",Yc,[e("div",Zc,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",Xc,u(D((ht=(M=H.summary)==null?void 0:M.highestRequestDay)==null?void 0:ht.date)),1)]),e("div",ey,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",ty,u(O(((vt=(pt=H.summary)==null?void 0:pt.highestRequestDay)==null?void 0:vt.requests)||0)),1)]),e("div",ay,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(y(B((Pt=(ct=H.summary)==null?void 0:ct.highestRequestDay)==null?void 0:Pt.date,"cost"))),1)])])])]),e("div",ry,[e("div",sy,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),x(" 累计 Token ")],-1)),e("div",ly,[e("div",oy,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",ny,u(O(pe.value)),1)]),e("div",iy,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",dy,u(O(Math.round(((w=H.summary)==null?void 0:w.avgDailyTokens)||0))),1)]),e("div",uy,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(O(J.value))+" / "+u(O(W.value)),1)])])]),e("div",gy,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),x(" 平均速率 ")],-1)),e("div",py,[e("div",cy,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",yy,u(((E=(m=H.overview)==null?void 0:m.averages)==null?void 0:E.rpm)??0),1)]),e("div",my,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",xy,u(((it=(Qe=H.overview)==null?void 0:Qe.averages)==null?void 0:it.tpm)??0),1)]),e("div",fy,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(O(Math.round((((Et=(yt=H.overview)==null?void 0:yt.averages)==null?void 0:Et.dailyRequests)||0)*100)/100))+" / "+u(O(Math.round((((kt=(Nt=H.overview)==null?void 0:Nt.averages)==null?void 0:kt.dailyTokens)||0)*100)/100)),1)])])]),e("div",by,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),x(" 最近统计 ")],-1)),e("div",vy,[e("div",ky,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",hy,u(O(((Lt=(jt=H.overview)==null?void 0:jt.daily)==null?void 0:Lt.requests)||0)),1)]),e("div",wy,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",$y,u(O((($t=(wt=H.overview)==null?void 0:wt.daily)==null?void 0:$t.allTokens)||0)),1)]),e("div",Ay,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(y(((dt=(qt=H.overview)==null?void 0:qt.daily)==null?void 0:dt.cost)||0)),1)])])])]),e("div",Cy,[e("div",Ty,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),x(" 30天费用与请求趋势 ")],-1)),e("span",Iy," 最新更新时间:"+u(ce(_.value)),1)]),e("div",Uy,[e("canvas",{ref_key:"chartCanvas",ref:C,class:"h-full w-full"},null,512)])])],64))])])])):c("",!0)])}}},Ky=ra(_y,[["__scopeId","data-v-f40122f9"]]),Sy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},My={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Dy={class:"mb-6 flex items-center justify-between"},Py={class:"flex items-center gap-3"},jy={class:"text-sm text-gray-600 dark:text-gray-400"},Ly={class:"space-y-6"},Vy={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},zy={class:"flex items-center justify-between"},Ry={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Oy={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ey={class:"mb-3 grid grid-cols-3 gap-2"},Ny=["onClick"],qy={key:0,class:"animate-fadeIn"},Wy=["min"],Fy={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},By={class:"flex items-center justify-between"},Gy={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Qy={class:"flex gap-3 pt-2"},Hy=["disabled"],Jy={key:0,class:"loading-spinner mr-2"},Yy={key:1,class:"fas fa-save mr-2"},Zy={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(!1),U=vr({expireDuration:"",customExpireDate:"",expiresAt:null}),C=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],v=se(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});$e(()=>N.show,y=>{y&&k()}),$e(()=>{var y;return(y=N.account)==null?void 0:y.id},y=>{y&&N.show&&k()});const k=()=>{V.value=!1,N.account.expiresAt?(U.expireDuration="custom",U.customExpireDate=new Date(N.account.expiresAt).toISOString().slice(0,16),U.expiresAt=N.account.expiresAt):(U.expireDuration="",U.customExpireDate="",U.expiresAt=null)},j=y=>{if(U.expireDuration=y,!y){U.expiresAt=null;return}if(y==="custom")return;const g=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,ce,B]=D,_=parseInt(ce);switch(B){case"d":g.setDate(g.getDate()+_);break;case"h":g.setHours(g.getHours()+_);break;case"m":g.setMonth(g.getMonth()+_);break;case"y":g.setFullYear(g.getFullYear()+_);break}U.expiresAt=g.toISOString()}},oe=()=>{if(U.customExpireDate)try{const[y,g]=U.customExpireDate.split("T"),[D,ce,B]=y.split("-").map(Number),[_,Q]=g.split(":").map(Number),we=new Date(D,ce-1,B,_,Q,0,0);if(isNaN(we.getTime())){console.error("Invalid date:",U.customExpireDate);return}U.expiresAt=we.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},Z=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",pe=y=>y?new Date(y){if(!y)return null;const g=new Date,ce=new Date(y)-g,B=Math.ceil(ce/(1e3*60*60*24));return ce<0?{text:"已过期",class:"text-red-600"}:B<=7?{text:`${B} 天后过期`,class:"text-orange-600"}:B<=30?{text:`${B} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(B/30)} 个月后过期`,class:"text-green-600"}},W=()=>{V.value=!0,K("save",{accountId:N.account.id,expiresAt:U.expiresAt})};return Pe({resetSaving:()=>{V.value=!1}}),(y,g)=>(o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Sy,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:g[0]||(g[0]=D=>y.$emit("close"))}),e("div",My,[e("div",Dy,[e("div",Py,[g[6]||(g[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[g[5]||(g[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",jy,' 为 "'+u(H.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:g[1]||(g[1]=D=>y.$emit("close"))},g[7]||(g[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ly,[e("div",Vy,[e("div",zy,[e("div",null,[g[10]||(g[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Ry,[H.account.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(H.account.expiresAt))+" ",1),J(H.account.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(H.account.expiresAt).class])}," ("+u(J(H.account.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[8]||(g[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),g[9]||(g[9]=x(" 永不过期 ",-1))],64))])]),e("div",Oy,[e("i",{class:I(["fas fa-hourglass-half text-lg",H.account.expiresAt&&pe(H.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[g[12]||(g[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ey,[(o(),n(Ce,null,We(C,D=>e("button",{key:D.value,class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:ce=>j(D.value)},u(D.label),11,Ny)),64)),e("button",{class:I(["rounded-lg px-3 py-2 text-sm font-medium transition-all",U.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:g[2]||(g[2]=D=>j("custom"))},g[11]||(g[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),x(" 自定义 ",-1)]),2)])]),U.expireDuration==="custom"?(o(),n("div",qy,[g[13]||(g[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=D=>U.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:v.value,type:"datetime-local",onChange:oe},null,40,Wy),[[z,U.customExpireDate]]),g[14]||(g[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):c("",!0),U.expiresAt!==H.account.expiresAt?(o(),n("div",Fy,[e("div",By,[e("div",null,[g[17]||(g[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),x(" 新的到期时间 ")],-1)),e("p",Gy,[U.expiresAt?(o(),n(Ce,{key:0},[x(u(Z(U.expiresAt))+" ",1),J(U.expiresAt)?(o(),n("span",{key:0,class:I(["ml-2 text-xs font-normal",J(U.expiresAt).class])}," ("+u(J(U.expiresAt).text)+") ",3)):c("",!0)],64)):(o(),n(Ce,{key:1},[g[15]||(g[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),g[16]||(g[16]=x(" 永不过期 ",-1))],64))])]),g[18]||(g[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):c("",!0),e("div",Qy,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:g[4]||(g[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:V.value||U.expiresAt===H.account.expiresAt,onClick:W},[V.value?(o(),n("div",Jy)):(o(),n("i",Yy)),x(" "+u(V.value?"保存中...":"保存更改"),1)],8,Hy)])])])])):c("",!0)]))}},Xy=ra(Zy,[["__scopeId","data-v-f19e4a71"]]),em={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},tm={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},am={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},rm={class:"flex items-center gap-3"},sm={class:"text-xs text-gray-500 dark:text-gray-400"},lm=["disabled"],om={class:"px-5 py-4"},nm={class:"mb-4 space-y-2"},im={class:"flex items-center justify-between text-sm"},dm={key:0,class:"flex items-center justify-between text-sm"},um={class:"flex items-center justify-between text-sm"},gm={class:"font-medium text-gray-700 dark:text-gray-300"},pm={class:"flex items-center gap-3"},cm={class:"text-xs text-gray-500 dark:text-gray-400"},ym={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},mm={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},xm={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},fm={class:"max-h-40 overflow-y-auto p-3"},bm={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},vm={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},km={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},hm={key:2,class:"text-sm text-red-600 dark:text-red-400"},wm={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},$m={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Am=["disabled"],Cm=["disabled"],Tm={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$("idle"),V=$(""),U=$(""),C=$(0),v=$(null),k=$(null),j=$("claude-sonnet-4-5-20250929"),oe=se(()=>{if(!p.account)return"未知";const S=p.account.platform;return S==="claude"?"Claude OAuth":S==="claude-console"?"Claude Console":S==="bedrock"?"AWS Bedrock":S}),Z=se(()=>{if(!p.account)return"fas fa-question";const S=p.account.platform;return S==="claude"||S==="claude-console"||S==="bedrock"?"fas fa-brain":"fas fa-robot"}),pe=se(()=>{if(!p.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.platform;return S==="claude"?"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300":S==="claude-console"?"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300":S==="bedrock"?"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),J=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"Access Key":S==="bearer_token"?"Bearer Token":"Unknown"}),W=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"";const S=p.account.credentialType;return S==="access_key"?"fas fa-key":S==="bearer_token"?"fas fa-ticket":"fas fa-question"}),O=se(()=>{if(!p.account||p.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const S=p.account.credentialType;return S==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":S==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=se(()=>{switch(K.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),g=se(()=>{switch(K.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return"账户可以正常访问 Claude API";case"error":return U.value||"无法连接到 Claude API";default:return""}}),D=se(()=>{switch(K.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),ce=se(()=>{switch(K.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),B=se(()=>{switch(K.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),_=se(()=>{switch(K.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=se(()=>{switch(K.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function we(){if(!p.account)return"";const S=p.account.platform;return S==="claude"?`${ka}/admin/claude-accounts/${p.account.id}/test`:S==="claude-console"?`${ka}/admin/claude-console-accounts/${p.account.id}/test`:S==="bedrock"?`${ka}/admin/bedrock-accounts/${p.account.id}/test`:""}async function Ke(){if(!p.account)return;K.value="testing",V.value="",U.value="",C.value=0,v.value=Date.now(),k.value&&k.value.close();const S=we();if(!S){K.value="error",U.value="不支持的账户类型";return}try{const h=localStorage.getItem("authToken"),fe=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json",Authorization:h?`Bearer ${h}`:""},body:JSON.stringify({model:j.value})});if(!fe.ok){const T=await fe.json().catch(()=>({}));throw new Error(T.message||`HTTP ${fe.status}`)}const le=fe.body.getReader(),je=new TextDecoder;let Y=!1;for(;!Y;){const{done:T,value:q}=await le.read();if(T){Y=!0;continue}const ge=je.decode(q).split(`
-`);for(const de of ge)if(de.startsWith("data: "))try{const a=JSON.parse(de.substring(6));F(a)}catch{}}}catch(h){K.value="error",U.value=h.message||"连接失败",C.value=Date.now()-v.value}}function F(S){switch(S.type){case"test_start":break;case"content":V.value+=S.text;break;case"message_stop":break;case"test_complete":C.value=Date.now()-v.value,S.success?K.value="success":(K.value="error",U.value=S.error||"测试失败");break;case"error":K.value="error",U.value=S.error||"未知错误",C.value=Date.now()-v.value;break}}function ee(){K.value!=="testing"&&(k.value&&(k.value.close(),k.value=null),K.value="idle",V.value="",U.value="",C.value=0,N("close"))}return $e(()=>p.show,S=>{var h;S&&(K.value="idle",V.value="",U.value="",C.value=0,((h=p.account)==null?void 0:h.platform)==="bedrock"?p.account.credentialType==="bearer_token"?j.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":j.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":j.value="claude-sonnet-4-5-20250929")}),Ya(()=>{k.value&&k.value.close()}),(S,h)=>{var fe,le;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",em,[e("div",{class:"absolute inset-0",onClick:ee}),e("div",tm,[e("div",am,[e("div",rm,[e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",K.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":K.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:I(["fas",K.value==="idle"?"fa-vial":K.value==="testing"?"fa-spinner fa-spin":K.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[h[0]||(h[0]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",sm,u(((fe=H.account)==null?void 0:fe.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:K.value==="testing",onClick:ee},h[1]||(h[1]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,lm)]),e("div",om,[e("div",nm,[e("div",im,[h[2]||(h[2]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",pe.value])},[e("i",{class:I(Z.value)},null,2),x(" "+u(oe.value),1)],2)]),((le=p.account)==null?void 0:le.platform)==="bedrock"?(o(),n("div",dm,[h[3]||(h[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"账号类型",-1)),e("span",{class:I(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",O.value])},[e("i",{class:I(W.value)},null,2),x(" "+u(J.value),1)],2)])):c("",!0),e("div",um,[h[4]||(h[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),e("span",gm,u(j.value),1)])]),e("div",{class:I(["mb-4 rounded-xl border p-4 transition-all duration-300",D.value])},[e("div",pm,[e("div",{class:I(["flex h-8 w-8 items-center justify-center rounded-lg",ce.value])},[e("i",{class:I(["fas text-sm",B.value,_.value])},null,2)],2),e("div",null,[e("p",{class:I(["font-medium",Q.value])},u(y.value),3),e("p",cm,u(g.value),1)])])],2),K.value!=="idle"?(o(),n("div",ym,[e("div",mm,[h[5]||(h[5]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),V.value?(o(),n("span",xm,u(V.value.length)+" 字符 ",1)):c("",!0)]),e("div",fm,[V.value?(o(),n("p",bm,[x(u(V.value)+" ",1),K.value==="testing"?(o(),n("span",vm)):c("",!0)])):K.value==="testing"?(o(),n("p",km,h[6]||(h[6]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),x(" 等待响应中... ",-1)]))):K.value==="error"&&U.value?(o(),n("p",hm,u(U.value),1)):c("",!0)])])):c("",!0),C.value>0?(o(),n("div",wm,[h[7]||(h[7]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((C.value/1e3).toFixed(2))+" 秒",1)])):c("",!0)]),e("div",$m,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:K.value==="testing",onClick:ee}," 关闭 ",8,Am),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",K.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:K.value==="testing",onClick:Ke},[e("i",{class:I(["fas",K.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),x(" "+u(K.value==="testing"?"测试中...":K.value==="idle"?"开始测试":"重新测试"),1)],10,Cm)])])])):c("",!0)])}}},Im={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Um={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},_m={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Km={class:"flex items-center gap-3"},Sm={class:"text-xs text-gray-500 dark:text-gray-400"},Mm=["disabled"],Dm={class:"px-5 py-4"},Pm={key:0,class:"flex items-center justify-center py-8"},jm={class:"mb-5 flex items-center justify-between"},Lm={class:"mb-5"},Vm=["disabled"],zm={class:"mb-5"},Rm={class:"flex flex-wrap gap-2"},Om=["disabled","onClick"],Em={class:"mb-5"},Nm=["disabled"],qm={class:"mt-2 flex flex-wrap gap-2"},Wm=["disabled","onClick"],Fm={key:0,class:"mb-4"},Bm={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Gm={class:"flex items-center gap-2"},Qm={class:"text-gray-600 dark:text-gray-400"},Hm={key:0,class:"text-gray-500 dark:text-gray-500"},Jm=["title"],Ym={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},Zm={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Xm=["disabled"],ex=["disabled"],tx={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),C=$([]),v=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],k=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function j(J){return J?new Date(J).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function oe(){var J,W;if(p.account){K.value=!0;try{const O=localStorage.getItem("authToken"),y=p.account.platform;let g="";if(y==="claude")g=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{K.value=!1;return}const D=await fetch(g,{headers:{Authorization:O?`Bearer ${O}`:""}});if(D.ok){const _=await D.json();_.success&&((J=_.data)!=null&&J.config)&&(U.value={enabled:_.data.config.enabled||!1,cronExpression:_.data.config.cronExpression||"0 8 * * *",model:_.data.config.model||"claude-sonnet-4-5-20250929"})}const ce=g.replace("/test-config","/test-history"),B=await fetch(ce,{headers:{Authorization:O?`Bearer ${O}`:""}});if(B.ok){const _=await B.json();_.success&&((W=_.data)!=null&&W.history)&&(C.value=_.data.history)}}catch(O){P("加载配置失败: "+O.message,"error")}finally{K.value=!1}}}async function Z(){if(p.account){V.value=!0;try{const J=localStorage.getItem("authToken"),W=p.account.platform;let O="";if(W==="claude")O=`${ka}/admin/claude-accounts/${p.account.id}/test-config`;else{V.value=!1;return}const y=await fetch(O,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:J?`Bearer ${J}`:""},body:JSON.stringify({enabled:U.value.enabled,cronExpression:U.value.cronExpression,model:U.value.model})});if(y.ok)P("配置已保存","success"),N("saved"),pe();else{const g=await y.json().catch(()=>({}));P(g.message||"保存失败","error")}}catch(J){P("保存失败: "+J.message,"error")}finally{V.value=!1}}}function pe(){V.value||N("close")}return $e(()=>p.show,J=>{J&&(U.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},C.value=[],oe())}),(J,W)=>{var O;return o(),Ye(Kt,{to:"body"},[H.show?(o(),n("div",Im,[e("div",{class:"absolute inset-0",onClick:pe}),e("div",Um,[e("div",_m,[e("div",Km,[W[4]||(W[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[W[3]||(W[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Sm,u(((O=H.account)==null?void 0:O.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:V.value,onClick:pe},W[5]||(W[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Mm)]),e("div",Dm,[K.value?(o(),n("div",Pm,W[6]||(W[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(Ce,{key:1},[e("div",jm,[W[7]||(W[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:I(["relative h-6 w-11 rounded-full transition-colors duration-200",U.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:W[0]||(W[0]=y=>U.value.enabled=!U.value.enabled)},[e("span",{class:I(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",U.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",Lm,[W[8]||(W[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":W[1]||(W[1]=y=>U.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,Vm),[[z,U.value.cronExpression]]),W[9]||(W[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",zm,[W[10]||(W[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",Rm,[(o(),n(Ce,null,We(v,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.cronExpression=y.value},u(y.label),11,Om)),64))])]),e("div",Em,[W[11]||(W[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":W[2]||(W[2]=y=>U.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!U.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,Nm),[[z,U.value.model]]),e("div",qm,[(o(),n(Ce,null,We(k,y=>e("button",{key:y.value,class:I(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",U.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!U.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!U.value.enabled,onClick:g=>U.value.model=y.value},u(y.label),11,Wm)),64))])]),C.value.length>0?(o(),n("div",Fm,[W[12]||(W[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",Bm,[(o(!0),n(Ce,null,We(C.value,(y,g)=>(o(),n("div",{key:g,class:"flex items-center justify-between text-xs"},[e("div",Gm,[e("i",{class:I(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",Qm,u(j(y.timestamp)),1)]),y.latencyMs?(o(),n("span",Hm,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,Jm)):c("",!0)]))),128))])])):(o(),n("div",Ym,W[13]||(W[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",Zm,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:V.value,onClick:pe}," 取消 ",8,Xm),e("button",{class:I(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",V.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:V.value||K.value,onClick:Z},[e("i",{class:I(["fas",V.value?"fa-spinner fa-spin":"fa-save"])},null,2),x(" "+u(V.value?"保存中...":"保存配置"),1)],10,ex)])])])):c("",!0)])}}},ax={class:"min-w-[200px] space-y-1"},rx={key:0,class:"flex items-center gap-2"},sx={key:1,class:"flex items-center gap-2"},lx={class:"text-xs text-red-600 dark:text-red-400"},ox=["disabled"],nx={key:2,class:"space-y-1"},ix={key:0,class:"text-xs text-red-500"},dx={class:"flex items-center justify-between gap-2"},ux={class:"flex items-center gap-2"},gx={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},px=["disabled","title"],cx={key:1,class:"space-y-2"},yx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},mx={class:"space-y-1"},xx=["title"],fx={class:"flex w-[94px] flex-col gap-0.5"},bx={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},vx={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},kx={key:0,class:"text-gray-400 dark:text-gray-400"},hx={key:2,class:"space-y-1"},wx={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},$x={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ax={class:"flex items-center justify-between text-xs"},Cx={class:"text-gray-500 dark:text-gray-400"},Tx={key:0,class:"text-gray-400 dark:text-gray-500"},Ix={key:3,class:"flex items-center gap-2"},Ux={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},_x={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},mr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(H,{expose:Pe,emit:p}){const N=H,K=p,V=$(N.initialBalance),U=$(!1),C=$(!1),v=$(null),k=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":F==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":F==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":F==="local"}}),j=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.source;return{api:"API",cache:"缓存",local:"本地"}[F]||"未知"}),oe=se(()=>{var ee;const F=(ee=V.value)==null?void 0:ee.quota;return!F||F.unlimited||typeof F.percentage!="number"||!Number.isFinite(F.percentage)?null:{used:F.used??0,remaining:F.remaining??0,percentage:F.percentage,resetAt:F.resetAt||null}}),Z=se(()=>{var F,ee;return((ee=(F=V.value)==null?void 0:F.quota)==null?void 0:ee.type)==="antigravity"}),pe=se(()=>{var le,je;if(!Z.value)return[];const F=(je=(le=V.value)==null?void 0:le.quota)==null?void 0:je.buckets,ee=Array.isArray(F)?F:[],S=new Map(ee.map(Y=>[Y==null?void 0:Y.category,Y])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],fe={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(Y=>{var ge,de;const T=S.get(Y)||null,q=T==null?void 0:T.remaining,be=Number.isFinite(Number(q))?Math.max(0,Math.min(100,Number(q))):null;return{category:Y,remainingPercent:be,remainingText:be===null?"—":`${Math.round(be)}%`,resetAt:(T==null?void 0:T.resetAt)||null,dotClass:((ge=fe[Y])==null?void 0:ge.dotClass)||"bg-gray-400",barClass:((de=fe[Y])==null?void 0:de.barClass)||"bg-gray-400"}})}),J=se(()=>{var ee;const F=((ee=oe.value)==null?void 0:ee.percentage)||0;return F>=90?"bg-red-500 dark:bg-red-600":F>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),W=se(()=>{if(N.queryMode==="api"||N.queryMode==="auto")return!0;const F=V.value;return!F||F.scriptEnabled===!1?!1:!!F.scriptConfigured}),O=se(()=>{var F;return C.value?"刷新中...":W.value?Z.value?"刷新配额(调用 Antigravity API)":"刷新余额(调用脚本配置的余额 API)":((F=V.value)==null?void 0:F.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=se(()=>{var ee,S,h,fe;if((S=(ee=V.value)==null?void 0:ee.balance)!=null&&S.formattedAmount)return V.value.balance.formattedAmount;const F=Number(((fe=(h=V.value)==null?void 0:h.statistics)==null?void 0:fe.dailyCost)||0);return`今日成本 ${Q(F)}`}),g=async()=>{if(N.autoLoad&&!(!N.accountId||!N.platform)){U.value=!0,v.value=null;try{const F=await G.get(`/admin/accounts/${N.accountId}/balance`,{params:{platform:N.platform,queryApi:N.queryMode==="api"?!0:N.queryMode==="auto"?"auto":!1}});F!=null&&F.success?V.value=F.data:v.value=(F==null?void 0:F.error)||"加载失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{U.value=!1}}},D=async()=>{if(!(!N.accountId||!N.platform)&&!C.value&&W.value){C.value=!0,v.value=null;try{const F=await G.post(`/admin/accounts/${N.accountId}/balance/refresh`,{platform:N.platform});F!=null&&F.success?(V.value=F.data,K("refreshed",F.data)):v.value=(F==null?void 0:F.error)||"刷新失败"}catch(F){v.value=F.message||"网络错误",K("error",F)}finally{C.value=!1}}},ce=async()=>{await g()},B=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?ee.toLocaleString("zh-CN",{maximumFractionDigits:2}):"N/A"},_=F=>{if(F===1/0)return"∞";const ee=Number(F);return Number.isFinite(ee)?Z.value?`${Math.round(ee)}%`:B(ee):"N/A"},Q=F=>{const ee=Number(F);return Number.isFinite(ee)?ee>=1?`$${ee.toFixed(2)}`:ee>=.01?`$${ee.toFixed(3)}`:`$${ee.toFixed(6)}`:"$0.00"},we=F=>{const ee=new Date(F),S=new Date,h=ee.getTime()-S.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const fe=Math.floor(h/(1e3*60)),le=Math.floor(fe/60),je=fe%60;return le>=24?`${Math.floor(le/24)}天后`:`${le}小时${je}分钟`},Ke=F=>{const ee=new Date(F);return Number.isNaN(ee.getTime())?"未知":ee.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return $e(()=>N.initialBalance,F=>{F&&(V.value=F)}),aa(()=>{N.initialBalance||g()}),Pe({refresh:D,reload:ce}),(F,ee)=>{var S;return o(),n("div",ax,[U.value?(o(),n("div",rx,ee[0]||(ee[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):v.value?(o(),n("div",sx,[ee[1]||(ee[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",lx,u(v.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:C.value,onClick:ce}," 重试 ",8,ox)])):V.value?(o(),n("div",nx,[V.value.status==="error"&&V.value.error?(o(),n("div",ix,u(V.value.error),1)):c("",!0),e("div",dx,[e("div",ux,[e("i",{class:I(["fas",V.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",gx,u(y.value),1),e("span",{class:I(["rounded px-1.5 py-0.5 text-xs",k.value])},u(j.value),3)]),H.hideRefresh?c("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:C.value||!W.value,title:O.value,onClick:D},[e("i",{class:I(["fas fa-sync-alt",{"fa-spin":C.value}])},null,2)],8,px))]),oe.value&&Z.value?(o(),n("div",cx,[e("div",yx,[ee[2]||(ee[2]=e("span",null,"剩余",-1)),e("span",null,u(_(oe.value.remaining)),1)]),e("div",mx,[(o(!0),n(Ce,null,We(pe.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:I(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,xx),e("div",fx,[e("div",bx,[e("div",{class:I(["h-1.5 rounded-full transition-all",h.barClass]),style:He({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",vx,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",kx,u(we(h.resetAt)),1)):c("",!0)])])]))),128))])])):oe.value?(o(),n("div",hx,[e("div",wx,[e("span",null,"已用: "+u(_(oe.value.used)),1),e("span",null,"剩余: "+u(_(oe.value.remaining)),1)]),e("div",$x,[e("div",{class:I(["h-1.5 rounded-full transition-all",J.value]),style:He({width:`${Math.min(100,oe.value.percentage)}%`})},null,6)]),e("div",Ax,[e("span",Cx,u(oe.value.percentage.toFixed(1))+"% 已使用 ",1),oe.value.resetAt?(o(),n("span",Tx," 重置: "+u(we(oe.value.resetAt)),1)):c("",!0)])])):(S=V.value.quota)!=null&&S.unlimited?(o(),n("div",Ix,ee[3]||(ee[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):c("",!0),V.value.cacheExpiresAt&&V.value.source==="cache"?(o(),n("div",Ux," 缓存至: "+u(Ke(V.value.cacheExpiresAt)),1)):c("",!0)])):(o(),n("div",_x,"暂无余额数据"))])}}},Kx={class:"space-y-4"},Sx={class:"grid gap-3 md:grid-cols-2"},Mx={class:"space-y-2"},Dx={class:"space-y-2"},Px={class:"space-y-2"},jx={class:"space-y-2"},Lx={class:"space-y-2"},Vx={class:"space-y-2"},zx={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},Rx={class:"flex items-center justify-between"},Ox={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},Ex={key:0},Nx={key:1,class:"text-red-500"},qx={class:"text-xs text-gray-500 dark:text-gray-400"},Wx={class:"mt-1 whitespace-pre-wrap break-all"},Fx={class:"text-xs text-gray-500 dark:text-gray-400"},Bx={class:"mt-1 whitespace-pre-wrap break-all"},Gx={class:"flex items-center gap-2"},xr=`({
- request: {
- url: "{{baseUrl}}/api/user/self",
- method: "GET",
- headers: {
- "Content-Type": "application/json",
- "Authorization": "Bearer {{apiKey}}",
- "New-Api-User": "{{extra}}"
- }
- },
- extractor: function (response) {
- if (response && response.success && response.data) {
- const quota = response.data.quota || 0;
- const used = response.data.used_quota || 0;
- return {
- planName: response.data.group || "默认套餐",
- remaining: quota / 500000,
- used: used / 500000,
- total: (quota + used) / 500000,
- unit: "USD"
- };
- }
- return {
- isValid: false,
- invalidMessage: (response && response.message) || "查询失败"
- };
- }
-})`,Qx={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(H,{emit:Pe}){const p=H,N=Pe,K=$(!1),V=$(!1),U=$(null),C=vr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),v=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:xr}),k=()=>N("close"),j=()=>{Object.assign(C,v()),U.value=null,K.value=!1,V.value=!1},oe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform)))try{const D=await G.get(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`);D!=null&&D.success&&D.data&&Object.assign(C,D.data)}catch{P("加载脚本配置失败","error")}},Z=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){K.value=!0;try{await G.put(`/admin/accounts/${p.account.id}/balance/script?platform=${p.account.platform}`,{...C}),P("已保存","success"),N("saved")}catch(D){P(D.message||"保存失败","error")}finally{K.value=!1}}},pe=async()=>{var y,g;if(!(!((y=p.account)!=null&&y.id)||!((g=p.account)!=null&&g.platform))){V.value=!0,U.value=null;try{const D=await G.post(`/admin/accounts/${p.account.id}/balance/script/test?platform=${p.account.platform}`,{...C});D!=null&&D.success?(U.value=D.data,P("测试完成","success")):P((D==null?void 0:D.error)||"测试失败","error")}catch(D){P(D.message||"测试失败","error")}finally{V.value=!1}}},J=()=>{C.scriptBody=xr},W=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),O=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return $e(()=>p.show,y=>{y&&(j(),oe())}),(y,g)=>{var B;const D=Kr,ce=br;return o(),Ye(ce,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":H.show,title:`配置余额脚本 - ${((B=H.account)==null?void 0:B.name)||""}`,top:"5vh",width:"720px",onClose:k},{footer:nt(()=>[e("div",Gx,[Ee(D,{loading:V.value,onClick:pe},{default:nt(()=>g[20]||(g[20]=[x("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ee(D,{loading:K.value,type:"primary",onClick:Z},{default:nt(()=>g[21]||(g[21]=[x("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ee(D,{onClick:k},{default:nt(()=>g[22]||(g[22]=[x("取消",-1)])),_:1,__:[22]})])]),default:nt(()=>{var _,Q,we,Ke,F,ee;return[e("div",Kx,[e("div",Sx,[e("div",Mx,[g[7]||(g[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=S=>C.apiKey=S),class:"input-text",placeholder:"access token / key"},null,512),[[z,C.apiKey]])]),e("div",Dx,[g[8]||(g[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址(baseUrl)",-1)),b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=S=>C.baseUrl=S),class:"input-text",placeholder:"https://api.example.com"},null,512),[[z,C.baseUrl]])]),e("div",Px,[g[9]||(g[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token(可选)",-1)),b(e("input",{"onUpdate:modelValue":g[2]||(g[2]=S=>C.token=S),class:"input-text",placeholder:"Bearer token"},null,512),[[z,C.token]])]),e("div",jx,[g[10]||(g[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":g[3]||(g[3]=S=>C.extra=S),class:"input-text",placeholder:"用户ID等"},null,512),[[z,C.extra]])]),e("div",Lx,[g[11]||(g[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":g[4]||(g[4]=S=>C.timeoutSeconds=S),class:"input-text",min:"1",type:"number"},null,512),[[z,C.timeoutSeconds,void 0,{number:!0}]])]),e("div",Vx,[g[12]||(g[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":g[5]||(g[5]=S=>C.autoIntervalMinutes=S),class:"input-text",min:"0",type:"number"},null,512),[[z,C.autoIntervalMinutes,void 0,{number:!0}]]),g[13]||(g[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),g[14]||(g[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[g[15]||(g[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:J}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=S=>C.scriptBody=S),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[z,C.scriptBody]]),g[16]||(g[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回:isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),U.value?(o(),n("div",zx,[e("div",Rx,[g[17]||(g[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:I(["rounded px-2 py-0.5 text-xs",((_=U.value.mapped)==null?void 0:_.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((Q=U.value.mapped)==null?void 0:Q.status)||"unknown"),3)]),e("div",Ox,[e("div",null,"余额: "+u(W((we=U.value.mapped)==null?void 0:we.balance)),1),e("div",null,"单位: "+u(((Ke=U.value.mapped)==null?void 0:Ke.currency)||"—"),1),(F=U.value.mapped)!=null&&F.planName?(o(),n("div",Ex,"套餐: "+u(U.value.mapped.planName),1)):c("",!0),(ee=U.value.mapped)!=null&&ee.errorMessage?(o(),n("div",Nx," 错误: "+u(U.value.mapped.errorMessage),1)):c("",!0)]),e("details",qx,[g[18]||(g[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",Wx,u(O(U.value.extracted)),1)]),e("details",Fx,[g[19]||(g[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",Bx,u(O(U.value.response)),1)])])):c("",!0)])]}),_:1},8,["model-value","title"])}}},Hx=ra(Qx,[["__scopeId","data-v-13083b1f"]]),Jx={class:"accounts-container"},Yx={class:"card p-4 sm:p-6"},Zx={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Xx={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},ef={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},tf={class:"group relative min-w-[160px]"},af={class:"group relative min-w-[140px]"},rf={class:"group relative min-w-[160px]"},sf={class:"group relative min-w-[120px]"},lf={class:"group relative min-w-[200px]"},of={class:"relative flex items-center"},nf={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},df={class:"relative"},uf={class:"relative"},gf=["disabled"],pf={class:"relative"},cf=["disabled"],yf={class:"relative"},mf={key:0,class:"py-12 text-center"},xf={key:1,class:"py-12 text-center"},ff={key:2,class:"table-wrapper hidden md:block"},bf={class:"w-full"},vf={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},kf={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},hf={class:"flex items-center"},wf=["indeterminate"],$f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Af={key:1,class:"fas fa-sort ml-1 text-gray-400"},Cf={key:1,class:"fas fa-sort ml-1 text-gray-400"},Tf={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},If={class:"flex items-center gap-2"},Uf={key:1,class:"fas fa-sort ml-1 text-gray-400"},_f={key:1,class:"fas fa-sort ml-1 text-gray-400"},Kf={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Sf={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Mf={class:"flex items-center"},Df=["value"],Pf={class:"flex items-center"},jf={class:"min-w-0"},Lf={class:"flex items-center gap-2"},Vf=["title"],zf={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},Rf={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},Of={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},Ef={key:0,class:"my-2 flex flex-wrap items-center gap-2"},Nf=["title"],qf=["title"],Wf={class:"px-3 py-4"},Ff={class:"flex items-center gap-1"},Bf={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},Gf={class:"text-xs font-medium text-yellow-700"},Qf={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},Hf={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},Jf={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},Yf={class:"text-xs font-medium text-gray-950"},Zf={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},Xf={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},eb={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},tb={class:"text-xs font-semibold text-indigo-800"},ab={class:"text-xs font-medium text-indigo-700"},rb={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},sb={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},lb={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},ob={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},nb={key:10,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},ib={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},db={class:"flex flex-col gap-1"},ub={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},gb={key:0},pb={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},cb=["title"],yb={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},mb={class:"whitespace-nowrap px-3 py-4 text-sm"},xb={key:0,class:"space-y-1"},fb={class:"flex items-center gap-2"},bb={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},vb={class:"flex items-center gap-2"},kb={class:"text-xs text-gray-600 dark:text-gray-300"},hb={class:"flex items-center gap-2"},wb={class:"text-xs text-gray-600 dark:text-gray-300"},$b={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Ab={key:1,class:"text-xs text-gray-400"},Cb={class:"whitespace-nowrap px-3 py-4"},Tb={class:"mt-1 text-xs"},Ib=["onClick"],Ub={class:"whitespace-nowrap px-3 py-4"},_b={key:0,class:"space-y-2"},Kb={key:0,class:"space-y-2"},Sb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Mb={class:"flex items-center gap-2"},Db={class:"flex-1"},Pb={class:"flex items-center gap-2"},jb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Lb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Vb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},zb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Rb={class:"flex items-center gap-2"},Ob={class:"flex-1"},Eb={class:"flex items-center gap-2"},Nb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},qb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Wb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Fb={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Bb={class:"flex items-center gap-2"},Gb={class:"flex-1"},Qb={class:"flex items-center gap-2"},Hb={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Jb={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Yb={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Zb={key:1,class:"space-y-2"},Xb={key:0,class:"flex items-center gap-3 text-xs"},ev={class:"flex items-center gap-1"},tv={class:"font-medium text-gray-900 dark:text-gray-100"},av={class:"flex items-center gap-1"},rv={class:"font-medium text-gray-900 dark:text-gray-100"},sv={class:"flex items-center gap-2"},lv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},ov={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},nv={class:"text-xs text-gray-600 dark:text-gray-400"},iv={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},dv={key:2,class:"text-xs text-gray-400"},uv={key:1,class:"space-y-3"},gv={class:"flex items-center justify-between text-xs"},pv={class:"font-medium text-gray-700 dark:text-gray-200"},cv={class:"flex items-center gap-2"},yv={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},mv={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},xv={class:"text-xs text-gray-600 dark:text-gray-400"},fv={class:"ml-2 text-gray-400"},bv={key:1,class:"text-sm text-gray-400"},vv={class:"space-y-1"},kv={class:"flex items-center justify-between text-xs"},hv={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},wv={key:0,class:"flex items-center gap-2"},$v={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Av={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},Cv={key:2,class:"space-y-2"},Tv={key:0,class:"space-y-2"},Iv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Uv={class:"flex items-center gap-2"},_v={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Kv={class:"flex-1"},Sv={class:"flex items-center gap-2"},Mv={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Dv={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Pv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Lv={class:"flex items-center gap-2"},Vv={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},zv={class:"flex-1"},Rv={class:"flex items-center gap-2"},Ov={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ev={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Nv={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-sm text-gray-400"},Wv={key:3,class:"text-sm text-gray-400"},Fv={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},Bv={class:"whitespace-nowrap px-3 py-4"},Gv={key:0,class:"flex items-center gap-2"},Qv={class:"h-2 w-16 rounded-full bg-gray-200"},Hv={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Jv={key:1,class:"text-sm text-gray-400"},Yv={class:"px-3 py-4 text-sm text-gray-600"},Zv=["title"],Xv={key:1,class:"text-gray-400"},e1={class:"whitespace-nowrap px-3 py-4"},t1={class:"flex flex-col gap-1"},a1={key:0},r1=["onClick"],s1=["onClick"],l1=["onClick"],o1=["onClick"],n1={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},i1={key:0,class:"flex items-center gap-1"},d1=["disabled","title","onClick"],u1=["disabled","title","onClick"],g1={class:"ml-1"},p1=["onClick"],c1=["onClick"],y1=["onClick"],m1=["onClick"],x1=["onClick"],f1={key:1,class:"flex items-center gap-1"},b1=["disabled","title","onClick"],v1={class:"ml-1"},k1=["onClick"],h1={key:3,class:"space-y-3 md:hidden"},w1={class:"mb-3 flex items-start justify-between"},$1={class:"flex items-center gap-3"},A1=["value"],C1={class:"text-sm font-semibold text-gray-900"},T1={class:"mt-0.5 flex items-center gap-2"},I1={class:"text-xs text-gray-500 dark:text-gray-400"},U1={class:"text-xs text-gray-500 dark:text-gray-400"},_1={class:"mb-3 grid grid-cols-2 gap-3"},K1={class:"space-y-1"},S1={class:"flex items-center gap-1.5"},M1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},D1={class:"flex items-center gap-1.5"},P1={class:"text-xs text-gray-600 dark:text-gray-400"},j1={class:"flex items-center gap-1.5"},L1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={key:0,class:"space-y-1"},z1={class:"flex items-center gap-1.5"},R1={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},O1={class:"flex items-center gap-1.5"},E1={class:"text-xs text-gray-600 dark:text-gray-400"},N1={key:1,class:"text-sm font-semibold text-gray-400"},q1={class:"mb-3"},W1={class:"mt-1 text-xs"},F1=["onClick"],B1={class:"mb-3 space-y-2"},G1={key:0,class:"space-y-2"},Q1={key:0,class:"space-y-2"},H1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},J1={class:"flex items-center gap-2"},Y1={class:"flex-1"},Z1={class:"flex items-center gap-2"},X1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ek={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},tk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ak={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},rk={class:"flex items-center gap-2"},sk={class:"flex-1"},lk={class:"flex items-center gap-2"},ok={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ik={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},uk={class:"flex items-center gap-2"},gk={class:"flex-1"},pk={class:"flex items-center gap-2"},ck={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},yk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},mk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},xk={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},fk={class:"flex items-center justify-between text-xs"},bk={class:"flex items-center gap-1"},vk={class:"font-medium text-gray-700 dark:text-gray-200"},kk={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},hk={class:"flex items-center justify-between text-xs"},wk={class:"text-gray-500 dark:text-gray-400"},$k={key:0,class:"font-medium text-indigo-600"},Ak={key:1,class:"text-gray-500"},Ck={key:2,class:"text-xs text-gray-400"},Tk={key:1,class:"space-y-2"},Ik={key:0,class:"space-y-2"},Uk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},_k={class:"flex items-center gap-2"},Kk={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Sk={class:"flex-1"},Mk={class:"flex items-center gap-2"},Dk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Pk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},jk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Lk={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Vk={class:"flex items-center gap-2"},zk={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},Rk={class:"flex-1"},Ok={class:"flex items-center gap-2"},Ek={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Nk={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},qk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Wk={key:1,class:"text-xs text-gray-400"},Fk={class:"flex items-center justify-between text-xs"},Bk={class:"text-gray-700 dark:text-gray-200"},Gk={key:2,class:"flex items-center justify-between text-xs"},Qk={class:"text-gray-700 dark:text-gray-200"},Hk={class:"flex items-center justify-between text-xs"},Jk={class:"font-medium text-gray-700 dark:text-gray-200"},Yk={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Zk=["disabled","onClick"],Xk=["onClick"],e2=["onClick"],t2=["onClick"],a2=["onClick"],r2=["onClick"],s2={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},l2={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},o2={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},n2={class:"flex items-center gap-2"},i2=["value"],d2={class:"flex items-center gap-2"},u2=["disabled"],g2={class:"flex items-center gap-1"},p2={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},c2=["onClick"],y2={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},m2=["disabled"],x2={class:"space-y-4"},f2={class:"overflow-x-auto"},b2={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},v2={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},k2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},h2={class:"text-green-600 dark:text-green-400"},w2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},$2={class:"text-yellow-600 dark:text-yellow-400"},A2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},C2={class:"text-orange-600 dark:text-orange-400"},T2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},I2={class:"text-orange-600 dark:text-orange-400"},U2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},_2={class:"text-orange-600 dark:text-orange-400"},K2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},S2={class:"text-orange-600 dark:text-orange-400"},M2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},D2={class:"text-orange-600 dark:text-orange-400"},P2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},j2={class:"text-red-600 dark:text-red-400"},L2={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},V2={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},R2={class:"text-green-600 dark:text-green-400"},O2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},E2={class:"text-yellow-600 dark:text-yellow-400"},N2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},q2={class:"text-orange-600 dark:text-orange-400"},W2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},F2={class:"text-orange-600 dark:text-orange-400"},B2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G2={class:"text-orange-600 dark:text-orange-400"},Q2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},H2={class:"text-orange-600 dark:text-orange-400"},J2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Y2={class:"text-orange-600 dark:text-orange-400"},Z2={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},X2={class:"text-red-600 dark:text-red-400"},e3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},fr="accountsPageSize",t3={__name:"AccountsView",setup(H){const{showConfirmModal:Pe,confirmOptions:p,showConfirm:N,handleConfirm:K,handleCancel:V}=hr(),U=$([]),C=$(!1),v=$(!1),k=$("name"),j=$("asc"),oe=$([]),Z=$({}),pe=$([]),J=$("all"),W=$("all"),O=$("all"),y=$(""),g=()=>{const r=localStorage.getItem(fr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},D=[10,20,50,100],ce=$(g()),B=$(1),_=$([]),Q=$(!1),we=$(!1),Ke=$(!1),F=$(!1),ee=$(!1),S=$(null),h=$([]),fe=$({}),le=$({}),je=$(""),Y=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],T=$(null),q=$(null),be=$(!1),ge=$(null),de=$(!1),a=$(null),te=$(!1),Ae=$(null),Ge=$(!1),De=$(!1),at=$(!1),lt=$(!1),Xe=$(!1),St=$(new Map),Mt=$([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),Dt=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],M={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},ht={claude:r=>G.get("/admin/claude-accounts",{params:r}),"claude-console":r=>G.get("/admin/claude-console-accounts",{params:r}),bedrock:r=>G.get("/admin/bedrock-accounts",{params:r}),gemini:r=>G.get("/admin/gemini-accounts",{params:r}),openai:r=>G.get("/admin/openai-accounts",{params:r}),azure_openai:r=>G.get("/admin/azure-openai-accounts",{params:r}),"openai-responses":r=>G.get("/admin/openai-responses-accounts",{params:r}),ccr:r=>G.get("/admin/ccr-accounts",{params:r}),droid:r=>G.get("/admin/droid-accounts",{params:r}),"gemini-api":r=>G.get("/admin/gemini-api-accounts",{params:r})},pt=Object.keys(ht),vt=r=>r==="all"?pt:M[r]?M[r]:pt.includes(r)?[r]:pt,ct=se(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return Dt.forEach(s=>{var f;r.push({...s,indent:0,isGroup:!0}),(f=s.children)==null||f.forEach(A=>{r.push({...A,indent:1,parent:s.value})})}),r}),Pt=$([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),w=se(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return pe.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),m=se(()=>Ke.value),E=$(!1),Qe=$(null),it=$(!1),yt=$(null),Et=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(A=>{if(typeof A=="string"){const l=A.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(A=>{if(A&&typeof A.name=="string"){const l=A.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([A,l])=>{if(typeof l=="string"){const ae=A.toLowerCase();if(ae.includes("name")||ae.includes("email")){const Te=l.trim();Te&&s.add(Te)}}}),Array.from(s)},Nt=(r,s)=>s?Et(r).some(f=>f.toLowerCase().includes(s)):!0,kt=r=>!!r&&Y.includes(r.platform),jt=r=>{var f;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((f=r.rateLimitStatus)==null?void 0:f.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return jt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>fa(r)}),kt(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>wt(r)}),dt(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>et(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>At(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},wt=async r=>{if(!kt(r)){P("该账户类型暂不支持查看详情","warning");return}S.value=r,F.value=!0,ee.value=!0,h.value=[],fe.value={},le.value={},je.value="";try{const s=await G.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(s.success){const f=s.data||{};h.value=f.history||[],fe.value=f.summary||{},le.value=f.overview||{},je.value=f.generatedAt||""}else P(s.error||"加载账号使用详情失败","error")}catch{P("加载账号使用详情失败","error")}finally{ee.value=!1}},$t=()=>{F.value=!1,ee.value=!1,S.value=null},qt=["claude","claude-console","bedrock"],dt=r=>!!r&&qt.includes(r.platform),et=r=>{if(!dt(r)){P("该账户类型暂不支持测试","warning");return}ge.value=r,be.value=!0},Wt=()=>{be.value=!1,ge.value=null},At=r=>{if(!dt(r)){P("该账户类型暂不支持定时测试","warning");return}a.value=r,de.value=!0},Ft=()=>{de.value=!1,a.value=null},Bt=()=>{P("定时测试配置已保存","success")},Gt=$(!1),Vt=$(null),ha=r=>{Vt.value=r,Gt.value=!0},wa=()=>{Gt.value=!1,Vt.value=null},$a=async()=>{P("余额脚本已保存","success");const r=Vt.value;if(wa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await G.get(`/admin/accounts/${r.id}/balance`,{params:{platform:r.platform,queryApi:!1}});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},mt=se(()=>{let r=U.value;const s=y.value.trim();if(s){const A=s.toLowerCase();r=r.filter(l=>Nt(l,A))}return O.value!=="all"&&(r=r.filter(A=>{const l=ft(A),ae=A.status==="blocked"||A.status==="unauthorized";return O.value==="rateLimited"?A.isActive&&l:O.value==="normal"?A.isActive&&!l&&!ae&&A.schedulable!==!1:O.value==="unschedulable"?A.isActive&&!l&&!ae&&A.schedulable===!1:O.value==="other"?!l&&(!A.isActive||ae):!0})),k.value?[...r].sort((A,l)=>{var xe,Ue,re,he,ke,ne,ue,Oe,Fe,nr,ir,dr;let ae=A[k.value],Te=l[k.value];if(k.value==="dailyTokens"?(ae=((Ue=(xe=A.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0,Te=((he=(re=l.usage)==null?void 0:re.daily)==null?void 0:he.allTokens)||0):k.value==="dailyRequests"?(ae=((ne=(ke=A.usage)==null?void 0:ke.daily)==null?void 0:ne.requests)||0,Te=((Oe=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:Oe.requests)||0):k.value==="totalTokens"&&(ae=((nr=(Fe=A.usage)==null?void 0:Fe.total)==null?void 0:nr.allTokens)||0,Te=((dr=(ir=l.usage)==null?void 0:ir.total)==null?void 0:dr.allTokens)||0),k.value==="lastUsed"&&(ae=A.lastUsedAt?new Date(A.lastUsedAt).getTime():0,Te=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),k.value==="status"&&(ae=A.isActive?1:0,Te=l.isActive?1:0),k.value==="rateLimitTime"){const er=ft(A),tr=ft(l),ur=er?bt(A):0,gr=tr?bt(l):0;return!er&&tr?-1:er&&!tr?1:urgr?1:0}return aeTe?j.value==="asc"?1:-1:0}):r}),Ve=se(()=>{const r=mt.value.length;return Math.ceil(r/ce.value)||0}),sa=se(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const f=U.value.filter(ne=>ne.platform===s.value),A=f.filter(ne=>ft(ne)),l=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable!==!1}).length,ae=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&ne.isActive&&!Oe&&ne.schedulable===!1}).length,Te=f.filter(ne=>{const ue=ft(ne),Oe=ne.status==="blocked"||ne.status==="unauthorized";return!ue&&(!ne.isActive||Oe)}).length,xe=A.filter(ne=>{const ue=bt(ne);return ue>0&&ue<=60}).length,Ue=A.filter(ne=>{const ue=bt(ne);return ue>60&&ue<=300}).length,re=A.filter(ne=>{const ue=bt(ne);return ue>300&&ue<=720}).length,he=A.filter(ne=>{const ue=bt(ne);return ue>720&&ue<=1440}).length,ke=A.filter(ne=>bt(ne)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:ae,rateLimit0_1h:xe,rateLimit1_5h:Ue,rateLimit5_12h:re,rateLimit12_24h:he,rateLimitOver24h:ke,other:Te,total:f.length}}).filter(s=>s.total>0)),ut=se(()=>sa.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),Ct=se(()=>{const r=Ve.value,s=B.value,f=[];if(r<=7)for(let A=1;A<=r;A++)f.push(A);else{let A=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(A=r-4);for(let ae=A;ae<=l;ae++)f.push(ae)}return f}),xt=se(()=>{const r=Ct.value;return r.length===0?!1:r[0]>1}),la=se(()=>{const r=Ct.value;return r.length===0?!1:r[r.length-1]{const r=Ct.value;return r.length===0?!1:xt.value&&r[0]>2}),Ca=se(()=>{const r=Ct.value;return r.length===0?!1:la.value&&r[r.length-1]{const r=(B.value-1)*ce.value,s=r+ce.value;return mt.value.slice(r,s)}),oa=se(()=>{const r=gt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const f=s==null?void 0:s.balanceInfo;return(f==null?void 0:f.scriptEnabled)!==!1&&!!(f!=null&&f.scriptConfigured)})}),Ta=se(()=>C.value?"正在加载账户...":v.value?"刷新中...":oa.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{U.value=U.value.map(f=>f.id!==r?f:{...f,balanceInfo:s})},na=(r,s)=>{const f=(s==null?void 0:s.message)||"余额查询失败";P(f,"error")},Ia=async()=>{if(v.value)return;const r=gt.value;if(!r||r.length===0)return;const s=r.filter(A=>{const l=A==null?void 0:A.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){P("当前页没有配置余额脚本的账户","warning");return}const f=r.length-s.length;v.value=!0;try{const A=await Promise.all(s.map(async Ue=>{try{const re=await G.post(`/admin/accounts/${Ue.id}/balance/refresh`,{platform:Ue.platform});return{id:Ue.id,success:!!(re!=null&&re.success),data:(re==null?void 0:re.data)||null}}catch(re){return{id:Ue.id,success:!1,error:(re==null?void 0:re.message)||"刷新失败"}}})),l=A.reduce((Ue,re)=>(re.success&&re.data&&(Ue[re.id]=re.data),Ue),{}),ae=A.filter(Ue=>Ue.success).length,Te=A.length-ae,xe=f>0?`,跳过 ${f} 个未配置脚本`:"";Object.keys(l).length>0&&(U.value=U.value.map(Ue=>{const re=l[Ue.id];return re?{...Ue,balanceInfo:re}:Ue})),Te===0?P(`成功刷新 ${ae} 个账户余额${xe}`,"success"):P(`刷新完成:${ae} 成功,${Te} 失败${xe}`,"warning")}finally{v.value=!1}},tt=()=>{const r=gt.value.map(A=>A.id),s=r.filter(A=>_.value.includes(A)).length,f=r.length;s===0?(Q.value=!1,we.value=!1):s===f?(Q.value=!0,we.value=!1):(Q.value=!1,we.value=!0)},Ua=()=>{if(Q.value)gt.value.forEach(r=>{_.value.includes(r.id)||_.value.push(r.id)});else{const r=new Set(gt.value.map(s=>s.id));_.value=_.value.filter(s=>!r.has(s))}tt()},_a=()=>{Ke.value=!Ke.value,Ke.value?tt():(_.value=[],Q.value=!1,we.value=!1)},ia=()=>{const r=new Set(U.value.map(s=>s.id));_.value=_.value.filter(s=>r.has(s)),tt()},Ka=async()=>{const r=U.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const A=(await Promise.all(s.map(async l=>{try{const ae=await G.get(`/admin/accounts/balance/platform/${l}`,{params:{queryApi:!1}});return{platform:l,success:!!(ae!=null&&ae.success),data:(ae==null?void 0:ae.data)||[]}}catch(ae){return console.debug(`Failed to load balance cache for ${l}:`,ae),{platform:l,success:!1,data:[]}}}))).reduce((l,ae)=>(ae.success&&(Array.isArray(ae.data)?ae.data:[]).forEach(xe=>{var re;const Ue=(re=xe==null?void 0:xe.data)==null?void 0:re.accountId;Ue&&(l[Ue]=xe.data)}),l),{});Object.keys(A).length!==0&&(U.value=U.value.map(l=>({...l,balanceInfo:A[l.id]||l.balanceInfo||null})))},rt=async(r=!1)=>{C.value=!0;try{const s={};W.value!=="all"&&!M[W.value]&&(s.platform=W.value),J.value!=="all"&&(s.groupId=J.value);const f=vt(W.value);await Promise.all([ua(r),ja(r)]);const A=await Promise.all(f.map(async re=>{const he=ht[re];if(!he)return{platform:re,success:!0,data:[]};try{const ke=await he(s);return{platform:re,success:ke==null?void 0:ke.success,data:ke==null?void 0:ke.data}}catch(ke){return console.debug(`Failed to load ${re} accounts:`,ke),{platform:re,success:!1,data:[]}}})),l=[],ae=Z.value||{};let Te=[];const xe=(re,he)=>{const ke=Array.isArray(he)?he:[];if(ke.length!==0)switch(re){case"claude":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude",boundApiKeysCount:Oe}});l.push(...ne);break}case"claude-console":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.claudeConsoleAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"claude-console",boundApiKeysCount:Oe}});l.push(...ne);break}case"bedrock":{const ne=ke.map(ue=>({...ue,platform:"bedrock",boundApiKeysCount:0}));l.push(...ne);break}case"gemini":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"gemini",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.openaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"azure_openai":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.azureOpenaiAccountId)==null?void 0:Fe[ue.id])||0;return{...ue,platform:"azure_openai",boundApiKeysCount:Oe}});l.push(...ne);break}case"openai-responses":{Te=ke;break}case"ccr":{const ne=ke.map(ue=>({...ue,platform:"ccr",boundApiKeysCount:0}));l.push(...ne);break}case"droid":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.droidAccountId)==null?void 0:Fe[ue.id])||ue.boundApiKeysCount||0;return{...ue,platform:"droid",boundApiKeysCount:Oe}});l.push(...ne);break}case"gemini-api":{const ne=ke.map(ue=>{var Fe;const Oe=((Fe=ae.geminiAccountId)==null?void 0:Fe[`api:${ue.id}`])||0;return{...ue,platform:"gemini-api",boundApiKeysCount:Oe}});l.push(...ne);break}default:break}};if(A.forEach(({platform:re,success:he,data:ke})=>{he&&xe(re,ke||[])}),Te.length>0){let re={};try{const ke=await G.get("/admin/openai-responses-accounts/auto-recovery-configs");ke.success&&Array.isArray(ke.data)&&(re=ke.data.reduce((ne,ue)=>(ue!=null&&ue.accountId&&(ne[ue.accountId]=ue),ne),{}))}catch(ke){console.debug("Failed to load auto-recovery configs:",ke)}const he=Te.map(ke=>{var Oe;const ne=((Oe=ae.openaiAccountId)==null?void 0:Oe[`responses:${ke.id}`])||0,ue=re[ke.id]||ke.autoRecoveryConfig||null;return{...ke,platform:"openai-responses",boundApiKeysCount:ne,autoRecoveryConfig:ue}});l.push(...he)}let Ue=l;J.value!=="all"&&(J.value==="ungrouped"?Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0):Ue=l.filter(re=>!re.groupInfos||re.groupInfos.length===0?!1:re.groupInfos.some(he=>he.id===J.value))),Ue=Ue.map(re=>{const he=ga(re.proxyConfig||re.proxy);return{...re,proxyConfig:he||null}}),U.value=Ue,ia(),Ue.some(re=>re.platform==="claude")&&Sa().catch(re=>{console.debug("Claude usage loading failed:",re)}),Ka().catch(re=>{console.debug("Balance cache loading failed:",re)})}catch{P("加载账户失败","error")}finally{C.value=!1}},Sa=async()=>{try{const r=await G.get("/admin/claude-accounts/usage");if(r.success&&r.data){const s=r.data;U.value=U.value.map(f=>f.platform==="claude"&&s[f.id]?{...f,claudeUsage:s[f.id]}:f)}}catch(r){console.debug("Failed to load Claude usage data:",r)}};let Ht="name";const Tt=r=>{r&&(k.value===r?j.value=j.value==="asc"?"desc":"asc":(k.value=r,j.value="asc"),Ht=r)},Ma=r=>{r===Ht?j.value=j.value==="asc"?"desc":"asc":j.value="asc",Ht=r},zt=r=>{if(r==null)return"0";const s=Number(r);return s>=1e6?(s/1e6).toFixed(2):s>=1e3?(s/1e6).toFixed(4):(s/1e6).toFixed(6)},da=r=>{if(!r)return"从未使用";const s=new Date(r),A=new Date-s;return A<6e4?"刚刚":A<36e5?`${Math.floor(A/6e4)} 分钟前`:A<864e5?`${Math.floor(A/36e5)} 小时前`:A<6048e5?`${Math.floor(A/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Da=()=>{y.value="",B.value=1},ua=async(r=!1)=>{if(!(!r&&at.value))try{const s=await G.get("/admin/accounts/binding-counts");s.success&&(Z.value=s.data||{},at.value=!0)}catch{Z.value={}}},Pa=async(r=!1)=>{var s;if(!(!r&&De.value))try{const f=await G.get("/admin/api-keys");f.success&&(oe.value=((s=f.data)==null?void 0:s.items)||f.data||[],De.value=!0)}catch{}},ja=async(r=!1)=>{if(!(!r&<.value))try{const s=await G.get("/admin/account-groups");s.success&&(pe.value=s.data||[],lt.value=!0)}catch{}},La=()=>{De.value=!1,at.value=!1,lt.value=!1,Xe.value=!1,St.value.clear()},Va=()=>{B.value=1,rt()},za=()=>{B.value=1,rt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const f=s.proxy&&typeof s.proxy=="object"?s.proxy:s,A=typeof f.host=="string"?f.host.trim():f.host!==void 0&&f.host!==null?String(f.host).trim():"",l=f.port!==void 0&&f.port!==null?String(f.port).trim():"";if(!A||!l)return null;const ae=typeof f.type=="string"&&f.type.trim()?f.type.trim():"socks5",Te=typeof f.username=="string"?f.username:f.username!==void 0&&f.username!==null?String(f.username):"",xe=typeof f.password=="string"?f.password:f.password!==void 0&&f.password!==null?String(f.password):"";return{type:ae,host:A,port:l,username:Te,password:xe}}const Jt=r=>{const s=ga(r);if(!s)return null;const f=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let A=s.host;A.length>15&&(A=A.substring(0,12)+"...");let l=`${f}://${A}:${s.port}`;return s.username&&(l=`${f}://***@${A}:${s.port}`),l},pa=(r,s)=>{if(!r||!s)return"--";const f=new Date(r),A=new Date(s),l=f.getHours().toString().padStart(2,"0"),ae=f.getMinutes().toString().padStart(2,"0"),Te=A.getHours().toString().padStart(2,"0"),xe=A.getMinutes().toString().padStart(2,"0");return`${l}:${ae} - ${Te}:${xe}`},ca=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),f=r%60;return s>0?`${s}小时${f}分钟`:`${f}分钟`},Ra=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),f=r%1440,A=Math.floor(f/60),l=f%60;return s>0?A>0?`${s}天${A}小时`:`${s}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:`${l}分钟`},ft=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,bt=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const f=new Date(s.rateLimitResetAt).getTime()-Date.now();return f>0?Math.ceil(f/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),A=new Date(r.rateLimitUntil).getTime()-s;return A>0?Math.ceil(A/6e4):0}return 0},Oa=()=>{Qe.value=null,E.value=!0},ya=()=>{E.value=!1,Qe.value=null},Yt=r=>{yt.value=r,it.value=!0},ma=r=>!r||!r.id?[]:oe.value.filter(s=>{const f=r.id;return s.claudeAccountId===f||s.claudeConsoleAccountId===f||s.geminiAccountId===f||s.openaiAccountId===f||s.azureOpenaiAccountId===f||s.openaiAccountId===`responses:${f}`||s.geminiAccountId===`api:${f}`}),Ea=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},xa=async r=>{var f,A;const s=Ea(r);if(!s)return{success:!1,message:"不支持的账户类型"};try{const l=await G.delete(s);return l.success?{success:!0,data:l}:{success:!1,message:l.message||"删除失败"}}catch(l){return{success:!1,message:((A=(f=l.response)==null?void 0:f.data)==null?void 0:A.message)||l.message||"删除失败"}}},Zt=async r=>{const f=ma(r).length;let A=`确定要删除账户 "${r.name}" 吗?`;if(f>0&&(A+=`
-
-⚠️ 注意:此账号有 ${f} 个 API Key 绑定。`,A+=`
-删除后,这些 API Key 将自动切换为共享池模式。`),A+=`
-
-此操作不可恢复。`,!await N("删除账户",A,"删除","取消"))return;const ae=await xa(r);if(ae.success){const Te=ae.data;let xe="账户已成功删除";(Te==null?void 0:Te.unboundKeys)>0&&(xe+=`,${Te.unboundKeys} 个 API Key 已切换为共享池模式`),P(xe,"success"),_.value=_.value.filter(Ue=>Ue!==r.id),tt(),Xe.value=!1,De.value=!1,at.value=!1,rt(),Pa(!0),ua(!0)}else P(ae.message||"删除失败","error")},Na=async()=>{var re;if(_.value.length===0){P("请先选择要删除的账户","warning");return}const r=new Map(U.value.map(he=>[he.id,he])),s=_.value.map(he=>r.get(he)).filter(he=>!!he);if(s.length===0){P("选中的账户已不存在","warning"),_.value=[],tt();return}let f=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const A=s.map(he=>({account:he,boundKeys:ma(he)})).filter(he=>he.boundKeys.length>0);if(A.length>0&&(f+=`
-
-⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,A.forEach(({account:he,boundKeys:ke})=>{const ne=he.name||he.email||he.accountName||he.id;f+=`
-- ${ne}: ${ke.length} 个`}),f+=`
-删除后,这些 API Key 将切换为共享池模式。`),f+=`
-
-请再次确认是否继续。`,!await N("批量删除账户",f,"删除","取消"))return;let ae=0,Te=0,xe=0;const Ue=[];for(const he of s){const ke=await xa(he);ke.success?(ae+=1,xe+=((re=ke.data)==null?void 0:re.unboundKeys)||0):(Te+=1,Ue.push({name:he.name||he.email||he.accountName||he.id,message:ke.message||"删除失败"}))}if(ae>0){let he=`成功删除 ${ae} 个账户`;xe>0&&(he+=`,${xe} 个 API Key 已切换为共享池模式`),P(he,Te>0?"warning":"success"),_.value=[],Q.value=!1,we.value=!1,Xe.value=!1,De.value=!1,await rt(!0)}if(Te>0){const he=Ue.map(ke=>`${ke.name}: ${ke.message}`).join(`
-`);P(`有 ${Te} 个账户删除失败:
-${he}`,ae>0?"warning":"error")}tt()},fa=async r=>{if(r.isResetting)return;let s=!1;if(window.showConfirm?s=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):s=confirm("确定要重置此账户的所有异常状态吗?"),!!s)try{r.isResetting=!0;let f="";if(r.platform==="openai")f=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")f=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")f=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")f=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")f=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")f=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")f=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")f=`/admin/gemini-accounts/${r.id}/reset-status`;else{P("不支持的账户类型","error"),r.isResetting=!1;return}const A=await G.post(f);A.success?(P("账户状态已重置","success"),rt(!0)):P(A.message||"状态重置失败","error")}catch{P("状态重置失败","error")}finally{r.isResetting=!1}},d=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{P("该账户类型暂不支持调度控制","warning");return}const f=await G.put(s);f.success?(r.schedulable=f.schedulable,P(f.schedulable?"已启用调度":"已禁用调度","success")):P(f.message||"操作失败","error")}catch{P("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},t=()=>{E.value=!1,P("账户创建成功","success"),La(),rt()},ie=()=>{it.value=!1,P("账户更新成功","success"),Xe.value=!1,rt()},ve=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",i=()=>"OAuth",ye=()=>"OAuth",me=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const f=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof f=="string"&&f.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},Ne=r=>me(r)==="API Key",Be=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(f=>f.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const f=JSON.parse(r.apiKeys);if(Array.isArray(f))return f.filter(A=>A.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const f of s){const A=Number(f);if(Number.isFinite(A)&&A>=0)return A}return 0},Re=r=>{const s=Be(r),f="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[f,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[f,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},L=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},R=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},Ie=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",X=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",Se=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Le=r=>da(r),qe=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const A=String(r).toLowerCase();return A==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":A==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Je=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ze=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,ot=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},It=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return f>0?A>0?`${f}天${A}小时`:`${f}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},Xt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,f=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,A=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return f!==null&&(A!==null&&A<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=Xt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},ta=r=>{const s=Xt(r);return s===null?"--":`${s.toFixed(1)}%`},Ut=r=>{const s=Xt(r);return s===null?"0%":`${s}%`},qa=r=>r==="secondary"?"周限":"5h",Wa=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const f=Math.floor(s/86400),A=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),ae=s%60;return f>0?A>0?`${f}天${A}小时`:`${f}天`:A>0?l>0?`${A}小时${l}分钟`:`${A}小时`:l>0?`${l}分钟`:`${ae}秒`},Fa=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?0:s/f*100},$r=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const f=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,f/s*100)},Ar=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Cr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const f=Number((r==null?void 0:r.activeTaskCount)||0);return f>=s?"text-red-600 dark:text-red-400":f>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Tr=r=>{var A,l;const s=Number(((l=(A=r==null?void 0:r.usage)==null?void 0:A.daily)==null?void 0:l.cost)||0),f=Number((r==null?void 0:r.dailyQuota)||0);return!f||f<=0?"0.00":Math.max(0,f-s).toFixed(2)},sr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Fa(r.usage.daily.cost):"0.0000";$e(y,()=>{B.value=1,tt()}),$e(ce,r=>{localStorage.setItem(fr,r.toString()),tt()}),$e(()=>mt.value.length,()=>{B.value>Ve.value&&(B.value=Ve.value||1),tt()}),$e(B,()=>{tt()}),$e(gt,()=>{tt(),ar(()=>{ba()})}),$e(U,()=>{ia()});const lr=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Ir=r=>r?new Date(r){if(!r)return!1;const s=new Date,A=(new Date(r)-s)/(1e3*60*60*24);return A>0&&A<=7},Ba=r=>{T.value=r},or=()=>{T.value=null},_r=async({accountId:r,expiresAt:s})=>{try{const f=U.value.find(ae=>ae.id===r);if(!f){P("未找到账户","error");return}let A="";switch(f.platform){case"claude":case"claude-oauth":A=`/admin/claude-accounts/${r}`;break;case"gemini":A=`/admin/gemini-accounts/${r}`;break;case"claude-console":A=`/admin/claude-console-accounts/${r}`;break;case"bedrock":A=`/admin/bedrock-accounts/${r}`;break;case"ccr":A=`/admin/ccr-accounts/${r}`;break;case"openai":A=`/admin/openai-accounts/${r}`;break;case"droid":A=`/admin/droid-accounts/${r}`;break;case"azure_openai":A=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":A=`/admin/openai-responses-accounts/${r}`;break;default:P(`不支持的平台类型: ${f.platform}`,"error");return}const l=await G.put(A,{expiresAt:s||null});l.success?(P("账户到期时间已更新","success"),f.expiresAt=s||null,or()):(P(l.message||"更新失败","error"),q.value&&q.value.resetSaving())}catch(f){console.error("更新账户过期时间失败:",f),P("更新失败","error"),q.value&&q.value.resetSaving()}},ba=()=>{Ae.value&&(Ge.value=Ae.value.scrollWidth>Ae.value.clientWidth)};let Ga=null;return aa(()=>{rt(!0),ar(()=>{Ae.value&&(Ga=new ResizeObserver(()=>{ba()}),Ga.observe(Ae.value),ba())}),window.addEventListener("resize",ba)}),Ya(()=>{Ga&&Ga.disconnect(),window.removeEventListener("resize",ba)}),(r,s)=>{const f=Sr,A=br;return o(),n("div",Jx,[e("div",Yx,[e("div",Zx,[s[42]||(s[42]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",Xx,[e("div",ef,[e("div",tf,[s[27]||(s[27]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:k.value,"onUpdate:modelValue":s[0]||(s[0]=l=>k.value=l),icon:j.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Mt.value,placeholder:"选择排序",onChange:Ma},null,8,["modelValue","icon","options"])]),e("div",af,[s[28]||(s[28]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:W.value,"onUpdate:modelValue":s[1]||(s[1]=l=>W.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Va},null,8,["modelValue","options"])]),e("div",rf,[s[29]||(s[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:J.value,"onUpdate:modelValue":s[2]||(s[2]=l=>J.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:w.value,placeholder:"选择分组",onChange:za},null,8,["modelValue","options"])]),e("div",sf,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ee(Qa,{modelValue:O.value,"onUpdate:modelValue":s[3]||(s[3]=l=>O.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Pt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",lf,[s[33]||(s[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",of,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>y.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[z,y.value]]),s[32]||(s[32]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),y.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Da},s[31]||(s[31]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):c("",!0)])])]),e("div",nf,[e("div",df,[Ee(f,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>te.value=!0)},s[34]||(s[34]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",uf,[Ee(f,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value,onClick:[s[6]||(s[6]=_t(l=>rt(!0),["ctrl","exact"])),s[7]||(s[7]=_t(l=>rt(!1),["exact"])),s[8]||(s[8]=_t(l=>rt(!0),["meta","exact"]))]},[s[35]||(s[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:I(["fas relative text-green-500",C.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[36]||(s[36]=e("span",{class:"relative"},"刷新",-1))],8,gf)]),_:1})]),e("div",pf,[Ee(f,{content:Ta.value,effect:"dark",placement:"bottom"},{default:nt(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:C.value||v.value||!oa.value,onClick:Ia},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:I(["fas relative text-blue-500",v.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新余额",-1))],8,cf)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:_a},[e("i",{class:I(Ke.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Ke.value?"取消选择":"选择"),1)]),_.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Na},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[40]||(s[40]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",yf,"删除选中 ("+u(_.value.length)+")",1)])):c("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:_t(Oa,["stop"])},s[41]||(s[41]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),C.value?(o(),n("div",mf,s[43]||(s[43]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):mt.value.length===0?(o(),n("div",xf,s[44]||(s[44]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",ff,[e("div",{ref_key:"tableContainerRef",ref:Ae,class:"table-container"},[e("table",bf,[e("thead",vf,[e("tr",null,[m.value?(o(),n("th",kf,[e("div",hf,[b(e("input",{"onUpdate:modelValue":s[9]||(s[9]=l=>Q.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:we.value,type:"checkbox",onChange:Ua},null,40,wf),[[ze,Q.value]])])])):c("",!0),e("th",{class:I(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",m.value?"left-[50px]":"left-0"]),onClick:s[10]||(s[10]=l=>Tt("name"))},[s[45]||(s[45]=x(" 名称 ",-1)),k.value==="name"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",$f))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[11]||(s[11]=l=>Tt("platform"))},[s[46]||(s[46]=x(" 平台/类型 ",-1)),k.value==="platform"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Af))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Tt("status"))},[s[47]||(s[47]=x(" 状态 ",-1)),k.value==="status"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Cf))]),s[53]||(s[53]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[54]||(s[54]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Tf,[e("div",If,[s[50]||(s[50]=e("span",null,"会话窗口",-1)),Ee(f,{placement:"top"},{content:nt(()=>s[48]||(s[48]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:nt(()=>[s[49]||(s[49]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[49]})])]),s[55]||(s[55]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Tt("priority"))},[s[51]||(s[51]=x(" 优先级 ",-1)),k.value==="priority"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Uf))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Tt("expiresAt"))},[s[52]||(s[52]=x(" 到期时间 ",-1)),k.value==="expiresAt"?(o(),n("i",{key:0,class:I(["fas",j.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",_f))]),e("th",{class:I(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",Ge.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Kf,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te;return o(),n("tr",{key:l.id,class:"table-row"},[m.value?(o(),n("td",Sf,[e("div",Mf,[b(e("input",{"onUpdate:modelValue":s[15]||(s[15]=xe=>_.value=xe),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,Df),[[ze,_.value]])])])):c("",!0),e("td",{class:I(["name-column sticky z-10 px-3 py-4",m.value?"left-[50px]":"left-0"])},[e("div",Pf,[s[61]||(s[61]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",jf,[e("div",Lf,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},u(l.name),9,Vf),l.accountType==="dedicated"?(o(),n("span",zf,s[57]||(s[57]=[e("i",{class:"fas fa-lock mr-1"},null,-1),x("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",Rf,s[58]||(s[58]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),x("分组调度 ",-1)]))):(o(),n("span",Of,s[59]||(s[59]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),x("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",Ef,[(o(!0),n(Ce,null,We(l.groupInfos,xe=>(o(),n("span",{key:xe.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${xe.name}`},[s[60]||(s[60]=e("i",{class:"fas fa-folder mr-1"},null,-1)),x(u(xe.name),1)],8,Nf))),128))])):c("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,qf)])])],2),e("td",Wf,[e("div",Ff,[l.platform==="gemini"?(o(),n("div",Bf,[s[62]||(s[62]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[63]||(s[63]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[64]||(s[64]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",Gf,u(i()),1)])):l.platform==="claude-console"?(o(),n("div",Qf,s[65]||(s[65]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",Hf,s[66]||(s[66]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",Jf,[s[67]||(s[67]=e("div",{class:"fa-openai"},null,-1)),s[68]||(s[68]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[69]||(s[69]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",Yf,u(ye()),1)])):l.platform==="azure_openai"?(o(),n("div",Zf,s[70]||(s[70]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",Xf,s[71]||(s[71]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",eb,[s[72]||(s[72]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",tb,u(L(l)),1),s[73]||(s[73]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",ab,u(ve(l)),1)])):l.platform==="ccr"?(o(),n("div",rb,s[74]||(s[74]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",sb,[s[76]||(s[76]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[77]||(s[77]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[78]||(s[78]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",lb,u(me(l)),1),Ne(l)?(o(),n("span",{key:0,class:I(Re(l))},[s[75]||(s[75]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(Be(l)),1)],2)):c("",!0)])):l.platform==="gemini-api"?(o(),n("div",ob,s[79]||(s[79]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",nb,s[80]||(s[80]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",ib,[e("div",db,[e("span",{class:I(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:I(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),x(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",ub,[s[81]||(s[81]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[82]||(s[82]=x(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",gb,"("+u(Ra(l.rateLimitStatus.minutesRemaining))+")",1)):c("",!0)])):c("",!0),l.schedulable===!1?(o(),n("span",pb,[s[84]||(s[84]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[85]||(s[85]=x(" 不可调度 ",-1)),R(l)?(o(),Ye(f,{key:0,content:R(l),effect:"dark",placement:"top"},{default:nt(()=>s[83]||(s[83]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[83]},1032,["content"])):c("",!0)])):c("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,cb)):c("",!0),l.accountType==="dedicated"?(o(),n("span",yb," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):c("",!0)])]),e("td",mb,[l.usage&&l.usage.daily?(o(),n("div",xb,[e("div",fb,[s[86]||(s[86]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",bb,u(l.usage.daily.requests||0)+" 次",1)]),e("div",vb,[s[87]||(s[87]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",kb,u(zt(l.usage.daily.allTokens||0))+"M",1)]),e("div",hb,[s[88]||(s[88]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",wb,"$"+u(sr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",$b," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):c("",!0)])):(o(),n("div",Ab,"暂无数据"))]),e("td",Cb,[Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:xe=>na(l.id,xe),onRefreshed:xe=>Qt(l.id,xe)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Tb,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:xe=>ha(l)}," 配置余额脚本 ",8,Ib))])]),e("td",Ub,[l.platform==="claude"?(o(),n("div",_b,[Me(l)&&l.claudeUsage?(o(),n("div",Kb,[e("div",Sb,[e("div",Mb,[s[89]||(s[89]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Db,[e("div",Pb,[e("div",jb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",Lb,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",Vb," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",zb,[e("div",Rb,[s[90]||(s[90]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",Ob,[e("div",Eb,[e("div",Nb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",qb,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",Wb," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",Fb,[e("div",Bb,[s[91]||(s[91]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",Gb,[e("div",Qb,[e("div",Hb,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",Jb,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",Yb," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",Zb,[l.usage&&l.usage.sessionWindow?(o(),n("div",Xb,[e("div",ev,[s[92]||(s[92]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",tv,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",av,[s[93]||(s[93]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",rv," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):c("",!0),e("div",sv,[e("div",lv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",ov,u(l.sessionWindow.progress)+"% ",1)]),e("div",nv,[e("div",null,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",iv," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):c("",!0)])])):(o(),n("div",dv,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",uv,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(Ce,{key:0},[e("div",gv,[s[94]||(s[94]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",pv,u(Za(l).toFixed(1))+"% ",1)]),e("div",cv,[e("div",yv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",$r(Za(l))]),style:He({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",mv," $"+u(Fa(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",xv,[x(" 剩余 $"+u(Tr(l))+" ",1),e("span",fv,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",bv,s[95]||(s[95]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",vv,[e("div",kv,[s[96]||(s[96]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",hv,u(Xa(l).toFixed(0))+"% ",1)):c("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",wv,[e("div",$v,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",Ar(Xa(l))]),style:He({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:I(["min-w-[48px] text-xs font-medium",Cr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",Av,s[97]||(s[97]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),x("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",Cv,[l.codexUsage?(o(),n("div",Tv,[e("div",Iv,[e("div",Uv,[e("span",_v,u(qa("primary")),1),e("div",Kv,[e("div",Sv,[e("div",Mv,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Dv,u(ta(l.codexUsage.primary)),1)])])]),e("div",Pv," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",jv,[e("div",Lv,[e("span",Vv,u(qa("secondary")),1),e("div",zv,[e("div",Rv,[e("div",Ov,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Ev,u(ta(l.codexUsage.secondary)),1)])])]),e("div",Nv," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):(o(),n("div",qv,s[98]||(s[98]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",Wv,s[99]||(s[99]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Fv,u(da(l.lastUsedAt)),1),e("td",Bv,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",Gv,[e("div",Qv,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:He({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Hv,u(l.priority||50),1)])):(o(),n("div",Jv,s[100]||(s[100]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Yv,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,Zv)):(o(),n("div",Xv,"无代理"))]),e("td",e1,[e("div",t1,[l.expiresAt?(o(),n("span",a1,[Ir(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},s[101]||(s[101]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),x(" 已过期 ",-1)]),8,r1)):Ur(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},[s[102]||(s[102]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),x(" "+u(lr(l.expiresAt)),1)],8,s1)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},u(lr(l.expiresAt)),9,l1))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_t(xe=>Ba(l),["stop"])},s[103]||(s[103]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),x(" 永不过期 ",-1)]),8,o1))])]),e("td",n1,[Ge.value?(o(),n("div",f1,[e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",v1,u(l.schedulable?"调度":"停用"),1)],10,b1),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[110]||(s[110]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,k1),Ee(Rr,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",i1,[jt(l)?(o(),n("button",{key:0,class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:xe=>fa(l)},[e("i",{class:I(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[104]||(s[104]=e("span",{class:"ml-1"},"重置状态",-1))],10,d1)):c("",!0),e("button",{class:I(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:xe=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",g1,u(l.schedulable?"调度":"停用"),1)],10,u1),kt(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:xe=>wt(l)},s[105]||(s[105]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,p1)):c("",!0),dt(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:xe=>et(l)},s[106]||(s[106]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,c1)):c("",!0),dt(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:xe=>At(l)},s[107]||(s[107]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,y1)):c("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:xe=>Yt(l)},s[108]||(s[108]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,m1),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:xe=>Zt(l)},s[109]||(s[109]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,x1)]))])])}),128))])])],512)])),!C.value&&mt.value.length>0?(o(),n("div",h1,[(o(!0),n(Ce,null,We(gt.value,l=>{var ae,Te,xe,Ue;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",w1,[e("div",$1,[m.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[16]||(s[16]=re=>_.value=re),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:tt},null,40,A1)),[[ze,_.value]]):c("",!0),e("div",{class:I(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:I(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",C1,u(l.name||l.email),1),e("div",T1,[e("span",I1,u(l.platform),1),s[111]||(s[111]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",U1,u(l.type),1)])])]),e("span",{class:I(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",X(l)])},[e("div",{class:I(["mr-1.5 h-1.5 w-1.5 rounded-full",Se(l)])},null,2),x(" "+u(Ie(l)),1)],2)]),e("div",_1,[e("div",null,[s[115]||(s[115]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",K1,[e("div",S1,[s[112]||(s[112]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",M1,u(((Te=(ae=l.usage)==null?void 0:ae.daily)==null?void 0:Te.requests)||0)+" 次 ",1)]),e("div",D1,[s[113]||(s[113]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",P1,u(zt(((Ue=(xe=l.usage)==null?void 0:xe.daily)==null?void 0:Ue.allTokens)||0))+"M ",1)]),e("div",j1,[s[114]||(s[114]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",L1," $"+u(sr(l)),1)])])]),e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",V1,[e("div",z1,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",R1,u(zt(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",O1,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",E1," $"+u(Fa(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",N1,"-"))])]),e("div",q1,[s[119]||(s[119]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ee(mr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:re=>na(l.id,re),onRefreshed:re=>Qt(l.id,re)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",W1,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?c("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:re=>ha(l)}," 配置余额脚本 ",8,F1))])]),e("div",B1,[l.platform==="claude"?(o(),n("div",G1,[Me(l)&&l.claudeUsage?(o(),n("div",Q1,[e("div",H1,[e("div",J1,[s[120]||(s[120]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Y1,[e("div",Z1,[e("div",X1,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.fiveHour)]),style:He({width:Ze(l.claudeUsage.fiveHour)})},null,6)]),e("span",ek,u(Je(l.claudeUsage.fiveHour)),1)])])]),e("div",tk," 重置剩余 "+u(It(l.claudeUsage.fiveHour)),1)]),e("div",ak,[e("div",rk,[s[121]||(s[121]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",sk,[e("div",lk,[e("div",ok,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDay)]),style:He({width:Ze(l.claudeUsage.sevenDay)})},null,6)]),e("span",nk,u(Je(l.claudeUsage.sevenDay)),1)])])]),e("div",ik," 重置剩余 "+u(It(l.claudeUsage.sevenDay)),1)]),e("div",dk,[e("div",uk,[s[122]||(s[122]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",gk,[e("div",pk,[e("div",ck,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ot(l.claudeUsage.sevenDayOpus)]),style:He({width:Ze(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",yk,u(Je(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",mk," 重置剩余 "+u(It(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",xk,[e("div",fk,[e("div",bk,[s[124]||(s[124]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ee(f,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:nt(()=>s[123]||(s[123]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[123]})]),e("span",vk,u(l.sessionWindow.progress)+"% ",1)]),e("div",kk,[e("div",{class:I(["h-full transition-all duration-300",qe(l.sessionWindow.sessionWindowStatus,l)]),style:He({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",hk,[e("span",wk,u(pa(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",$k," 剩余 "+u(ca(l.sessionWindow.remainingTime)),1)):(o(),n("span",Ak," 已结束 "))])])):(o(),n("div",Ck,"暂无统计"))])):l.platform==="openai"?(o(),n("div",Tk,[l.codexUsage?(o(),n("div",Ik,[e("div",Uk,[e("div",_k,[e("span",Kk,u(qa("primary")),1),e("div",Sk,[e("div",Mk,[e("div",Dk,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:He({width:Ut(l.codexUsage.primary)})},null,6)]),e("span",Pk,u(ta(l.codexUsage.primary)),1)])])]),e("div",jk," 重置剩余 "+u(Wa(l.codexUsage.primary)),1)]),e("div",Lk,[e("div",Vk,[e("span",zk,u(qa("secondary")),1),e("div",Rk,[e("div",Ok,[e("div",Ek,[e("div",{class:I(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:He({width:Ut(l.codexUsage.secondary)})},null,6)]),e("span",Nk,u(ta(l.codexUsage.secondary)),1)])])]),e("div",qk," 重置剩余 "+u(Wa(l.codexUsage.secondary)),1)])])):c("",!0),l.codexUsage?c("",!0):(o(),n("div",Wk,"暂无统计"))])):c("",!0),e("div",Fk,[s[125]||(s[125]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Bk,u(l.lastUsedAt?Le(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",Gk,[s[126]||(s[126]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Qk,u(l.proxyConfig.type.toUpperCase()),1)])):c("",!0),e("div",Hk,[s[127]||(s[127]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",Jk,u(l.priority||50),1)])]),e("div",Yk,[e("button",{class:I(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:re=>d(l)},[e("i",{class:I(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),x(" "+u(l.schedulable?"暂停":"启用"),1)],10,Zk),kt(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:re=>wt(l)},s[128]||(s[128]=[e("i",{class:"fas fa-chart-line"},null,-1),x(" 详情 ",-1)]),8,Xk)):c("",!0),dt(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:re=>et(l)},s[129]||(s[129]=[e("i",{class:"fas fa-vial"},null,-1),x(" 测试 ",-1)]),8,e2)):c("",!0),dt(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:re=>At(l)},s[130]||(s[130]=[e("i",{class:"fas fa-clock"},null,-1),x(" 定时 ",-1)]),8,t2)):c("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:re=>Yt(l)},s[131]||(s[131]=[e("i",{class:"fas fa-edit mr-1"},null,-1),x(" 编辑 ",-1)]),8,a2),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:re=>Zt(l)},s[132]||(s[132]=[e("i",{class:"fas fa-trash"},null,-1)]),8,r2)])])}),128))])):c("",!0)]),!C.value&&mt.value.length>0?(o(),n("div",s2,[e("div",l2,[e("span",o2," 共 "+u(mt.value.length)+" 条记录 ",1),e("div",n2,[s[133]||(s[133]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[17]||(s[17]=l=>ce.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[18]||(s[18]=l=>B.value=1)},[(o(),n(Ce,null,We(D,l=>e("option",{key:l,value:l},u(l),9,i2)),64))],544),[[Ja,ce.value]]),s[134]||(s[134]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",d2,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:B.value===1,onClick:s[19]||(s[19]=l=>B.value--)},s[135]||(s[135]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,u2),e("div",g2,[xt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[20]||(s[20]=l=>B.value=1)}," 1 ")):c("",!0),Aa.value?(o(),n("span",p2," ... ")):c("",!0),(o(!0),n(Ce,null,We(Ct.value,l=>(o(),n("button",{key:l,class:I(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===B.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:ae=>B.value=l},u(l),11,c2))),128)),Ca.value?(o(),n("span",y2," ... ")):c("",!0),la.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>B.value=Ve.value)},u(Ve.value),1)):c("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:B.value===Ve.value||Ve.value===0,onClick:s[22]||(s[22]=l=>B.value++)},s[136]||(s[136]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,m2)])])):c("",!0),E.value&&(!Qe.value||Qe.value!=="ccr")?(o(),Ye(cr,{key:1,onClose:ya,onPlatformChanged:s[23]||(s[23]=l=>Qe.value=l),onSuccess:t})):E.value&&Qe.value==="ccr"?(o(),Ye(yr,{key:2,onClose:ya,onSuccess:t})):c("",!0),it.value&&yt.value&&yt.value.platform==="ccr"?(o(),Ye(yr,{key:3,account:yt.value,onClose:s[24]||(s[24]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):it.value?(o(),Ye(cr,{key:4,account:yt.value,onClose:s[25]||(s[25]=l=>it.value=!1),onSuccess:ie},null,8,["account"])):c("",!0),Ee(kr,{"cancel-text":st(p).cancelText,"confirm-text":st(p).confirmText,message:st(p).message,show:st(Pe),title:st(p).title,onCancel:st(V),onConfirm:st(K)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),F.value?(o(),Ye(Ky,{key:5,account:S.value||{},"generated-at":je.value,history:h.value,loading:ee.value,overview:le.value,show:F.value,summary:fe.value,onClose:$t},null,8,["account","generated-at","history","loading","overview","show","summary"])):c("",!0),Ee(Xy,{ref_key:"expiryEditModalRef",ref:q,account:T.value||{id:null,expiresAt:null,name:""},show:!!T.value,onClose:or,onSave:_r},null,8,["account","show"]),Ee(Tm,{account:ge.value,show:be.value,onClose:Wt},null,8,["account","show"]),Ee(tx,{account:a.value,show:de.value,onClose:Ft,onSaved:Bt},null,8,["account","show"]),Ee(Hx,{account:Vt.value,show:Gt.value,onClose:wa,onSaved:$a},null,8,["account","show"]),Ee(A,{modelValue:te.value,"onUpdate:modelValue":s[26]||(s[26]=l=>te.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:nt(()=>[e("div",x2,[e("div",f2,[e("table",b2,[s[138]||(s[138]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(Ce,null,We(sa.value,l=>(o(),n("tr",{key:l.platform},[e("td",v2,u(l.platformLabel),1),e("td",k2,[e("span",h2,u(l.normal),1)]),e("td",w2,[e("span",$2,u(l.unschedulable),1)]),e("td",A2,[e("span",C2,u(l.rateLimit0_1h),1)]),e("td",T2,[e("span",I2,u(l.rateLimit1_5h),1)]),e("td",U2,[e("span",_2,u(l.rateLimit5_12h),1)]),e("td",K2,[e("span",S2,u(l.rateLimit12_24h),1)]),e("td",M2,[e("span",D2,u(l.rateLimitOver24h),1)]),e("td",P2,[e("span",j2,u(l.other),1)]),e("td",L2,u(l.total),1)]))),128)),e("tr",V2,[s[137]||(s[137]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",z2,[e("span",R2,u(ut.value.normal),1)]),e("td",O2,[e("span",E2,u(ut.value.unschedulable),1)]),e("td",N2,[e("span",q2,u(ut.value.rateLimit0_1h),1)]),e("td",W2,[e("span",F2,u(ut.value.rateLimit1_5h),1)]),e("td",B2,[e("span",G2,u(ut.value.rateLimit5_12h),1)]),e("td",Q2,[e("span",H2,u(ut.value.rateLimit12_24h),1)]),e("td",J2,[e("span",Y2,u(ut.value.rateLimitOver24h),1)]),e("td",Z2,[e("span",X2,u(ut.value.other),1)]),e("td",e3,u(ut.value.total),1)])])])]),s[139]||(s[139]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"])])}}},d3=ra(t3,[["__scopeId","data-v-9813ec02"]]);export{d3 as default};
diff --git a/web/admin-spa/dist/assets/AccountsView-mqqu5LbU.js b/web/admin-spa/dist/assets/AccountsView-mqqu5LbU.js
new file mode 100644
index 00000000..4407fd85
--- /dev/null
+++ b/web/admin-spa/dist/assets/AccountsView-mqqu5LbU.js
@@ -0,0 +1,71 @@
+import{b as qr,e as kr,f as Wr}from"./element-plus-BSjV1f9S.js";import{aP as Br,r as v,o as ve,V as Ha,x as n,y as o,z as e,L as m,K as b,al as je,aT as Et,O as f,aq as j,aa as Gr,P as u,aV as wa,aW as ka,C as $,c as Z,Z as Fr,an as Ie,Q as ke,q as ra,I as Xe,R as Ve,ac as Ne,u as Ye,a5 as Mt,B as Ze,aY as Qr,aU as Hr,D as ar,_ as hr,J as ot,Y as vt}from"./vue-vendor-DV7DYXbz.js";import{a4 as Jr,C as wr,D as $r,I as Ar,E as Cr,G as Tr,a5 as Ir,H as Ur,J as _r,a6 as Yr,a7 as Zr,a8 as Xr,a9 as es,aa as ts,ab as as,ac as rs,ad as ss,ae as ls,af as os,ag as ns,ah as is,ai as ds,aj as us,ak as ps,al as gs,am as cs,an as ha,ao as Kr,ap as ys,aq as Sr,ar as ms,as as xs,at as fs,au as bs,av as vs,aw as ks,ax as hs,ay as ws,az as $s,aA as As,aB as Cs,aC as Ts,s as V,c as Is,K as sr,aD as Us,aE as _s,aF as Ks,aG as Ss,_ as sa,aH as Ms,aI as Ds,aJ as Ps,aK as js,aL as Vs,aM as zs,aN as Ls,a as Rs,f as Je,aO as kt,aP as Mr,aQ as Dr,aR as Os,aS as Es,aT as Ns,F as qs,aU as Ws,aV as Bs,aW as Gs,aX as Fs,Z as cr,aY as Qs,aZ as Hs,a_ as Js,t as Ys,a$ as Zs}from"./index-BahP9Xx9.js";import{C as Ja}from"./ConfirmModal-C2rCOkXI.js";import{C as Xs}from"./chart-yFHxLHpB.js";import{C as Qa,_ as el}from"./ActionDropdown-GADQlLlI.js";import"./vendor-Dr8jvgFu.js";const yr={claude:{endpoint:"claude-accounts",stateKey:"claudeAccounts"},"claude-console":{endpoint:"claude-console-accounts",stateKey:"claudeConsoleAccounts"},bedrock:{endpoint:"bedrock-accounts",stateKey:"bedrockAccounts"},gemini:{endpoint:"gemini-accounts",stateKey:"geminiAccounts"},openai:{endpoint:"openai-accounts",stateKey:"openaiAccounts"},azure_openai:{endpoint:"azure-openai-accounts",stateKey:"azureOpenaiAccounts"},"openai-responses":{endpoint:"openai-responses-accounts",stateKey:"openaiResponsesAccounts"},droid:{endpoint:"droid-accounts",stateKey:"droidAccounts"}},Pr=Br("accounts",()=>{const F=v([]),_e=v([]),c=v([]),z=v([]),A=v([]),_=v([]),T=v([]),k=v([]),P=v(!1),O=v(null),Y=v(""),M=v("asc"),se={claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k},ge=async(B,q)=>{P.value=!0;const Ee=await B();Ee.success?q.value=Ee.data||[]:O.value=Ee.message,P.value=!1},N=async(B,q,...Ee)=>{P.value=!0;const We=await B(...Ee);return We.success?await q():O.value=We.message,P.value=!1,We},E=()=>ge(wr,F),R=()=>ge($r,_e),y=()=>ge(Ar,c),p=()=>ge(Cr,z),D=()=>ge(Tr,A),de=()=>ge(Ir,_),le=()=>ge(Ur,T),ae=()=>ge(_r,k);return{claudeAccounts:F,claudeConsoleAccounts:_e,bedrockAccounts:c,geminiAccounts:z,openaiAccounts:A,azureOpenaiAccounts:_,openaiResponsesAccounts:T,droidAccounts:k,loading:P,error:O,sortBy:Y,sortOrder:M,fetchClaudeAccounts:E,fetchClaudeConsoleAccounts:R,fetchBedrockAccounts:y,fetchGeminiAccounts:p,fetchOpenAIAccounts:D,fetchAzureOpenAIAccounts:de,fetchOpenAIResponsesAccounts:le,fetchDroidAccounts:ae,fetchAllAccounts:async()=>{P.value=!0,await Promise.all([E(),R(),y(),p(),D(),de(),le(),ae()]),P.value=!1},createClaudeAccount:B=>N(Yr,E,B),createClaudeConsoleAccount:B=>N(Zr,R,B),createBedrockAccount:B=>N(Xr,y,B),createGeminiAccount:B=>N(es,p,B),createOpenAIAccount:B=>N(ts,D,B),createDroidAccount:B=>N(as,ae,B),updateDroidAccount:(B,q)=>N(ha,ae,B,q),createAzureOpenAIAccount:B=>N(rs,de,B),createOpenAIResponsesAccount:B=>N(ss,le,B),createGeminiApiAccount:B=>N(ls,p,B),updateClaudeAccount:(B,q)=>N(os,E,B,q),updateClaudeConsoleAccount:(B,q)=>N(ns,R,B,q),updateBedrockAccount:(B,q)=>N(is,y,B,q),updateGeminiAccount:(B,q)=>N(ds,p,B,q),updateOpenAIAccount:(B,q)=>N(us,D,B,q),updateAzureOpenAIAccount:(B,q)=>N(ps,de,B,q),updateOpenAIResponsesAccount:(B,q)=>N(gs,le,B,q),updateGeminiApiAccount:(B,q)=>N(cs,p,B,q),toggleAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Kr(`/admin/${Ee.endpoint}/${q}/toggle`);return We.success?await ge(ys[`get${Ee.stateKey.charAt(0).toUpperCase()+Ee.stateKey.slice(1).replace("Accounts","")}AccountsApi`],se[Ee.stateKey]):O.value=We.message,P.value=!1,We},deleteAccount:async(B,q)=>{const Ee=yr[B];if(!Ee)return{success:!1,message:"未知平台"};P.value=!0;const We=await Sr(`/admin/${Ee.endpoint}/${q}`);return We.success?await{claude:E,"claude-console":R,bedrock:y,gemini:p,openai:D,azure_openai:de,"openai-responses":le,droid:ae}[B]():O.value=We.message,P.value=!1,We},refreshClaudeToken:async B=>{P.value=!0;const q=await ms(B);return q.success?await E():O.value=q.message,P.value=!1,q},generateClaudeAuthUrl:async B=>{const q=await xs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeCode:async B=>{const q=await fs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateClaudeSetupTokenUrl:async B=>{const q=await bs(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeClaudeSetupTokenCode:async B=>{const q=await vs(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthWithCookie:async B=>{const q=await ks(B);return q.success||(O.value=q.message),q.success?q.data:null},oauthSetupTokenWithCookie:async B=>{const q=await hs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateGeminiAuthUrl:async B=>{const q=await ws(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeGeminiCode:async B=>{const q=await $s(B);return q.success||(O.value=q.message),q.success?q.data:null},generateOpenAIAuthUrl:async B=>{const q=await As(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeOpenAICode:async B=>{const q=await Cs(B);return q.success||(O.value=q.message),q.success?q.data:null},generateDroidAuthUrl:async B=>{const q=await Ts(B);return q.success||(O.value=q.message),q.success?q.data:null},exchangeDroidCode:B=>Jr(B),sortAccounts:B=>{Y.value===B?M.value=M.value==="asc"?"desc":"asc":(Y.value=B,M.value="asc")},reset:()=>{F.value=[],_e.value=[],c.value=[],z.value=[],A.value=[],_.value=[],T.value=[],k.value=[],P.value=!1,O.value=null,Y.value="",M.value="asc"}}}),tl={class:"space-y-4"},al={class:"flex items-center justify-between"},rl={class:"flex cursor-pointer items-center"},sl={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},ll={class:"relative"},ol={key:0,class:"mt-1 text-xs text-red-500"},nl={key:1,class:"mt-1 text-xs text-green-500"},il={class:"grid grid-cols-2 gap-4"},dl={class:"space-y-4"},ul={class:"flex items-center"},pl={key:0,class:"grid grid-cols-2 gap-4"},gl={class:"relative"},cl=["type"],rr={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(F,{emit:_e}){const c=F,z=_e,A=v({...c.modelValue}),_=v(!!(A.value.username||A.value.password)),T=v(!1),k=v(""),P=v(""),O=v(!1);ve(()=>c.modelValue,R=>{JSON.stringify(R)!==JSON.stringify(A.value)&&(A.value={...R},_.value=!!(R.username||R.password))},{deep:!0}),ve(()=>A.value.enabled,()=>{M()}),ve(()=>A.value.type,()=>{M()}),ve(()=>A.value.host,()=>{M()}),ve(()=>A.value.port,()=>{M()}),ve(()=>A.value.username,()=>{M()}),ve(()=>A.value.password,()=>{M()}),ve(_,R=>{R||(A.value.username="",A.value.password="",M())});let Y=null;function M(){Y&&clearTimeout(Y),Y=setTimeout(()=>{const R={...A.value};_.value||(R.username="",R.password=""),z("update:modelValue",R)},100)}function se(){if(P.value="",O.value=!1,!!k.value)try{const R=k.value.split("#")[0].trim();if(!R)return;const y=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,p=R.match(y);if(!p){const he=/^([^:]+):(\d+)$/,W=R.match(he);if(W){A.value.type="socks5",A.value.host=W[1],A.value.port=W[2],A.value.username="",A.value.password="",_.value=!1,O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3);return}P.value="无效的代理URL格式,请检查输入";return}const[,D,de,le,ae,oe]=p;A.value.type=D.toLowerCase(),A.value.host=ae,A.value.port=oe,de&&le?(A.value.username=decodeURIComponent(de),A.value.password=decodeURIComponent(le),_.value=!0):(A.value.username="",A.value.password="",_.value=!1),O.value=!0,M(),setTimeout(()=>{O.value=!1},3e3)}catch{P.value="解析失败,请检查URL格式"}}function ge(){k.value="",P.value="",O.value=!1}function N(){setTimeout(()=>{se()},0)}function E(){const R=k.value.trim();R.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(R)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(R))&&se():/^[^:]+:\d{2,5}$/.test(R)&&se()}return Ha(()=>{Y&&clearTimeout(Y)}),(R,y)=>(o(),n("div",tl,[e("div",al,[y[10]||(y[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",rl,[b(e("input",{"onUpdate:modelValue":y[0]||(y[0]=p=>A.value.enabled=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,A.value.enabled]]),y[9]||(y[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),A.value.enabled?(o(),n("div",sl,[y[22]||(y[22]=Et('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[y[14]||(y[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[f(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",ll,[b(e("input",{"onUpdate:modelValue":y[1]||(y[1]=p=>k.value=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:E,onKeyup:Gr(se,["enter"]),onPaste:N},null,544),[[j,k.value]]),k.value?(o(),n("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:ge},y[11]||(y[11]=[e("i",{class:"fas fa-times"},null,-1)]))):m("",!0)]),P.value?(o(),n("p",ol,[y[12]||(y[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(P.value),1)])):O.value?(o(),n("p",nl,y[13]||(y[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),f(" 代理配置已自动填充 ",-1)]))):m("",!0)]),y[23]||(y[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[y[16]||(y[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),b(e("select",{"onUpdate:modelValue":y[2]||(y[2]=p=>A.value.type=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},y[15]||(y[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[wa,A.value.type]])]),e("div",il,[e("div",null,[y[17]||(y[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),b(e("input",{"onUpdate:modelValue":y[3]||(y[3]=p=>A.value.host=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[j,A.value.host]])]),e("div",null,[y[18]||(y[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),b(e("input",{"onUpdate:modelValue":y[4]||(y[4]=p=>A.value.port=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[j,A.value.port]])])]),e("div",dl,[e("div",ul,[b(e("input",{id:"proxyAuth","onUpdate:modelValue":y[5]||(y[5]=p=>_.value=p),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[je,_.value]]),y[19]||(y[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),_.value?(o(),n("div",pl,[e("div",null,[y[20]||(y[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),b(e("input",{"onUpdate:modelValue":y[6]||(y[6]=p=>A.value.username=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[j,A.value.username]])]),e("div",null,[y[21]||(y[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",gl,[b(e("input",{"onUpdate:modelValue":y[7]||(y[7]=p=>A.value.password=p),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:T.value?"text":"password"},null,8,cl),[[ka,A.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:y[8]||(y[8]=p=>T.value=!T.value)},[e("i",{class:$(T.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):m("",!0)]),y[24]||(y[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),f("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):m("",!0)]))}},yl={class:"space-y-6"},ml={key:0},xl={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},fl={class:"flex items-start gap-4"},bl={class:"flex-1"},vl={class:"mb-4"},kl={class:"flex gap-4"},hl={class:"flex cursor-pointer items-center gap-2"},wl={class:"flex cursor-pointer items-center gap-2"},$l={key:0,class:"space-y-4"},Al={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Cl={class:"mb-4"},Tl={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Il={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Ul={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},_l={key:0,class:"mb-4 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-700 dark:bg-amber-900/30"},Kl={key:1,class:"mb-4 rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-700 dark:bg-red-900/30"},Sl={class:"text-sm text-red-600 dark:text-red-400"},Ml=["disabled"],Dl={key:0,class:"loading-spinner mr-2"},Pl={key:1,class:"fas fa-magic mr-2"},jl={key:1},Vl={class:"space-y-4"},zl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Ll={class:"flex items-start gap-3"},Rl={class:"flex-1"},Ol=["disabled"],El={key:0,class:"fas fa-link mr-2"},Nl={key:1,class:"loading-spinner mr-2"},ql={key:1,class:"space-y-3"},Wl={class:"flex items-center gap-2"},Bl=["value"],Gl={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Fl={class:"flex items-start gap-3"},Ql={class:"flex-1"},Hl={class:"space-y-3"},Jl={key:1},Yl={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},Zl={class:"flex items-start gap-4"},Xl={class:"flex-1"},eo={class:"mb-4"},to={class:"text-sm text-green-800 dark:text-green-300"},ao={class:"font-semibold"},ro={class:"space-y-4"},so={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},lo={class:"flex items-start gap-3"},oo={class:"flex-1"},no=["disabled"],io={key:0,class:"fas fa-link mr-2"},uo={key:1,class:"loading-spinner mr-2"},po={key:1,class:"space-y-3"},go={class:"flex items-center gap-2"},co=["value"],yo={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},mo={class:"flex items-start gap-3"},xo={class:"flex-1"},fo={class:"space-y-3"},bo={key:2},vo={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},ko={class:"flex items-start gap-4"},ho={class:"flex-1"},wo={class:"space-y-4"},$o={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Ao={class:"flex items-start gap-3"},Co={class:"flex-1"},To=["disabled"],Io={key:0,class:"fas fa-link mr-2"},Uo={key:1,class:"loading-spinner mr-2"},_o={key:1,class:"space-y-3"},Ko={class:"flex items-center gap-2"},So=["value"],Mo={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Do={class:"flex items-start gap-3"},Po={class:"flex-1"},jo={class:"space-y-3"},Vo={key:3},zo={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},Lo={class:"flex items-start gap-4"},Ro={class:"flex-1"},Oo={class:"space-y-4"},Eo={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},No={class:"flex items-start gap-3"},qo={class:"flex-1"},Wo=["disabled"],Bo={key:0,class:"fas fa-link mr-2"},Go={key:1,class:"loading-spinner mr-2"},Fo={key:1,class:"space-y-4"},Qo={class:"space-y-2"},Ho={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Jo={class:"flex items-center gap-2"},Yo=["value"],Zo={class:"space-y-2"},Xo={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},en={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},tn={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},an={class:"flex gap-3 pt-4"},rn=["disabled"],sn={key:0,class:"loading-spinner mr-2"},ln={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=Pr(),T=v(!1),k=v(!1),P=v(""),O=v(""),Y=v(!1),M=Z(()=>z.platform==="gemini-antigravity"?"antigravity":"gemini-cli"),se=v(""),ge=v(""),N=v(""),E=v(""),R=v(0);let y=null;const p=v("manual"),D=v(""),de=v(!1),le=v(""),ae=v(!1),oe=v({current:0,total:0}),he=Z(()=>D.value.split(`
+`).map(xe=>xe.trim()).filter(xe=>xe.length>0).length),W=Z(()=>z.platform==="droid"?!!se.value:P.value&&O.value.trim()),Q=Z(()=>{if(!R.value||R.value<=0)return"00:00";const xe=Math.floor(R.value/60),g=R.value%60;return`${xe.toString().padStart(2,"0")}:${g.toString().padStart(2,"0")}`}),H=xe=>{if(h(),!xe||xe<=0){R.value=0;return}R.value=Math.floor(xe),y=setInterval(()=>{R.value<=1?(R.value=0,h()):R.value-=1},1e3)},h=()=>{y&&(clearInterval(y),y=null)};ve(O,xe=>{if(z.platform==="droid"||!xe||typeof xe!="string")return;const g=xe.trim();if(!g)return;if(g.startsWith("http://")||g.startsWith("https://"))if(g.startsWith("http://localhost:45462")||g.startsWith("http://localhost:1455"))try{const re=new URL(g).searchParams.get("code");re?(O.value=re,V("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(U){console.error("Failed to parse URL:",U),V("链接格式错误,请检查是否为完整的 URL","error")}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"||z.platform==="openai")try{const re=new URL(g).searchParams.get("code");re&&(O.value=re,V("成功提取授权码!","success"))}catch{}else V("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const X=async()=>{var xe;h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",Y.value=!1,T.value=!0;try{const g=(xe=z.proxy)!=null&&xe.enabled?{proxy:{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}}:{};if(z.platform==="claude"){const a=await _.generateClaudeAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="gemini"||z.platform==="gemini-antigravity"){const a=await _.generateGeminiAuthUrl({...g,oauthProvider:M.value});P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="openai"){const a=await _.generateOpenAIAuthUrl(g);P.value=a.authUrl,se.value=a.sessionId}else if(z.platform==="droid"){const a=await _.generateDroidAuthUrl(g);P.value=a.verificationUriComplete||a.verificationUri,N.value=a.verificationUri,E.value=a.verificationUriComplete||a.verificationUri,ge.value=a.userCode,H(a.expiresIn||300),se.value=a.sessionId}}catch(g){V(g.message||"生成授权链接失败","error")}finally{T.value=!1}},C=()=>{h(),P.value="",O.value="",ge.value="",N.value="",E.value="",R.value=0,se.value="",X()},G=async()=>{if(!P.value){V("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(P.value),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}catch{const g=document.createElement("input");g.value=P.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),Y.value=!0,V("链接已复制","success"),setTimeout(()=>{Y.value=!1},2e3)}},K=async()=>{if(!ge.value){V("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(ge.value),V("验证码已复制","success")}catch{const g=document.createElement("input");g.value=ge.value,document.body.appendChild(g),g.select(),document.execCommand("copy"),document.body.removeChild(g),V("验证码已复制","success")}},Ce=()=>{E.value?window.open(E.value,"_blank","noopener"):N.value&&window.open(N.value,"_blank","noopener")},ze=async()=>{var xe;if(W.value){k.value=!0;try{let g={};z.platform==="claude"?g={sessionId:se.value,callbackUrl:O.value.trim()}:z.platform==="gemini"||z.platform==="gemini-antigravity"?g={code:O.value.trim(),sessionId:se.value,oauthProvider:M.value}:z.platform==="openai"?g={code:O.value.trim(),sessionId:se.value}:z.platform==="droid"&&(g={sessionId:se.value}),(xe=z.proxy)!=null&&xe.enabled&&(g.proxy={type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null});let a;if(z.platform==="claude")a=await _.exchangeClaudeCode(g);else if(z.platform==="gemini"||z.platform==="gemini-antigravity")a=await _.exchangeGeminiCode(g),a&&(a.oauthProvider=M.value);else if(z.platform==="openai")a=await _.exchangeOpenAICode(g);else if(z.platform==="droid"){const U=await _.exchangeDroidCode(g);if(!U.success){if(U.pending){const re=U.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";V(re,"info"),typeof U.expiresIn=="number"&&U.expiresIn>=0&&H(U.expiresIn);return}throw new Error(U.message||"授权失败,请重试")}a=U.data,h()}A("success",a)}catch(g){V(g.message||"授权失败,请检查授权码是否正确","error")}finally{k.value=!1}}};Fr(()=>{h()});const Ke=async()=>{var re;const xe=D.value.split(`
+`).map(ne=>ne.trim()).filter(ne=>ne.length>0);if(xe.length===0){le.value="请输入至少一个 sessionKey";return}de.value=!0,le.value="",oe.value={current:0,total:xe.length};const g=(re=z.proxy)!=null&&re.enabled?{type:z.proxy.type,host:z.proxy.host,port:parseInt(z.proxy.port),username:z.proxy.username||null,password:z.proxy.password||null}:null,a=[],U=[];for(let ne=0;ne0?A("success",a):de.value=!1,U.length>0&&a.length===0?le.value="全部授权失败,请检查 sessionKey 是否有效":U.length>0&&(le.value=`${U.length} 个授权失败`)},Fe=()=>{D.value="",le.value="",de.value=!1,oe.value={current:0,total:0}},Qe=()=>{Fe(),P.value="",O.value="",se.value=""};return _e({resetCookieAuth:Fe}),(xe,g)=>(o(),n("div",yl,[F.platform==="claude"?(o(),n("div",ml,[e("div",xl,[e("div",fl,[g[29]||(g[29]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",bl,[g[28]||(g[28]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),e("div",vl,[g[10]||(g[10]=e("label",{class:"mb-2 block text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式 ",-1)),e("div",kl,[e("label",hl,[b(e("input",{"onUpdate:modelValue":g[0]||(g[0]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"manual",onChange:Qe},null,544),[[Ie,p.value]]),g[8]||(g[8]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"手动授权",-1))]),e("label",wl,[b(e("input",{"onUpdate:modelValue":g[1]||(g[1]=a=>p.value=a),class:"text-blue-600 focus:ring-blue-500",name:"claude-auth-method",type:"radio",value:"cookie",onChange:Qe},null,544),[[Ie,p.value]]),g[9]||(g[9]=e("span",{class:"text-sm text-blue-900 dark:text-blue-200"},"Cookie自动授权",-1))])])]),p.value==="cookie"?(o(),n("div",$l,[e("div",Al,[g[17]||(g[17]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 使用 claude.ai 的 sessionKey 自动完成 OAuth 授权流程,无需手动打开浏览器。 ",-1)),e("div",Cl,[e("label",Tl,[g[12]||(g[12]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),g[13]||(g[13]=f(" sessionKey ",-1)),he.value>1?(o(),n("span",Il,u(he.value)+" 个 ",1)):m("",!0),e("button",{class:"text-blue-500 hover:text-blue-600",type:"button",onClick:g[2]||(g[2]=a=>ae.value=!ae.value)},g[11]||(g[11]=[e("i",{class:"fas fa-question-circle"},null,-1)]))]),b(e("textarea",{"onUpdate:modelValue":g[3]||(g[3]=a=>D.value=a),class:"form-input w-full resize-y font-mono text-sm",placeholder:`每行一个 sessionKey,例如:
+sk-ant-sid01-xxxxx...
+sk-ant-sid01-yyyyy...`,rows:"3"},null,512),[[j,D.value]]),he.value>1?(o(),n("p",Ul,[g[14]||(g[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(he.value)+" 个账户 ",1)])):m("",!0)]),ae.value?(o(),n("div",_l,g[15]||(g[15]=[Et('如何获取 sessionKey
- 在浏览器中登录 claude.ai
- 按 F12 打开开发者工具
- 切换到 Application(应用)标签页
- 在左侧找到 Cookies → https://claude.ai
- 找到键为 sessionKey 的那一行
- 复制其 Value(值)列的内容
sessionKey 通常以 sk-ant-sid01- 开头
',3)]))):m("",!0),le.value?(o(),n("div",Kl,[e("p",Sl,[g[16]||(g[16]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),f(" "+u(le.value),1)])])):m("",!0),e("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold",disabled:de.value||!D.value.trim(),type:"button",onClick:Ke},[de.value?(o(),n("div",Dl)):(o(),n("i",Pl)),de.value&&oe.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(oe.value.current)+"/"+u(oe.value.total)+"... ",1)],64)):de.value?(o(),n(ke,{key:3},[f(" 正在授权... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Ml)])])):(o(),n("div",jl,[g[27]||(g[27]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Vl,[e("div",zl,[e("div",Ll,[g[20]||(g[20]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Rl,[g[19]||(g[19]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",ql,[e("div",Wl,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Bl),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:C},g[18]||(g[18]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Nl)):(o(),n("i",El)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Ol))])])]),g[26]||(g[26]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Gl,[e("div",Fl,[g[25]||(g[25]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ql,[g[23]||(g[23]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),g[24]||(g[24]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[f(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),f(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Hl,[e("div",null,[g[21]||(g[21]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[4]||(g[4]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[22]||(g[22]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])]))])])])])):F.platform==="gemini"||F.platform==="gemini-antigravity"?(o(),n("div",Jl,[e("div",Yl,[e("div",Zl,[g[43]||(g[43]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Xl,[g[41]||(g[41]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),g[42]||(g[42]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",eo,[e("p",to,[g[30]||(g[30]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),g[31]||(g[31]=f(" 授权类型:",-1)),e("span",ao,u(F.platform==="gemini-antigravity"?"Antigravity OAuth":"Gemini CLI OAuth"),1)])]),e("div",ro,[e("div",so,[e("div",lo,[g[34]||(g[34]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",oo,[g[33]||(g[33]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",po,[e("div",go,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,co),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-green-600 hover:text-green-700",onClick:C},g[32]||(g[32]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",uo)):(o(),n("i",io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,no))])])]),g[40]||(g[40]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",yo,[e("div",mo,[g[39]||(g[39]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",xo,[g[37]||(g[37]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),g[38]||(g[38]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",fo,[e("div",null,[g[35]||(g[35]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[5]||(g[5]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[j,O.value]])]),g[36]||(g[36]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),f(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):F.platform==="openai"?(o(),n("div",bo,[e("div",vo,[e("div",ko,[g[55]||(g[55]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ho,[g[53]||(g[53]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),g[54]||(g[54]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",wo,[e("div",$o,[e("div",Ao,[g[46]||(g[46]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Co,[g[45]||(g[45]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",_o,[e("div",Ko,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,So),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:C},g[44]||(g[44]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Uo)):(o(),n("i",Io)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,To))])])]),g[52]||(g[52]=Et(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。
重要提示:授权后页面可能会加载较长时间,请耐心等待。
当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Mo,[e("div",Do,[g[51]||(g[51]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Po,[g[49]||(g[49]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),g[50]||(g[50]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[f(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),f(" 时: ")],-1)),e("div",jo,[e("div",null,[g[47]||(g[47]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),f("授权链接或 Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":g[6]||(g[6]=a=>O.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...)
+方式2:仅复制 code 参数的值
+系统会自动识别并提取所需信息`,rows:"3"},null,512),[[j,O.value]])]),g[48]||(g[48]=Et('提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。
• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...
• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...
',1))])])])])])])])])])):F.platform==="droid"?(o(),n("div",Vo,[e("div",zo,[e("div",Lo,[g[67]||(g[67]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",Ro,[g[65]||(g[65]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),g[66]||(g[66]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Oo,[e("div",Eo,[e("div",No,[g[63]||(g[63]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",qo,[g[62]||(g[62]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),P.value?(o(),n("div",Fo,[e("div",Qo,[g[58]||(g[58]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Ho,[e("div",Jo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:P.value},null,8,Yo),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:G},[e("i",{class:$(Y.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:Ce},g[56]||(g[56]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),f(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:C},g[57]||(g[57]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),f("重新生成 ",-1)]))])])]),e("div",Zo,[g[60]||(g[60]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Xo,[e("span",en,u(ge.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:K},g[59]||(g[59]=[e("i",{class:"fas fa-copy mr-1"},null,-1),f("复制 ",-1)]))])]),e("div",tn,[e("span",null,[g[61]||(g[61]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),f(" 剩余有效期:"+u(Q.value),1)])])])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:T.value,onClick:X},[T.value?(o(),n("div",Go)):(o(),n("i",Bo)),f(" "+u(T.value?"生成中...":"生成授权链接"),1)],8,Wo))])])]),g[64]||(g[64]=Et(' 2
在浏览器中打开链接并完成授权
在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。
3
完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。
若提示授权仍在等待确认,请稍候片刻后系统会自动重试。
',2))])])])])])):m("",!0),e("div",an,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:g[7]||(g[7]=a=>xe.$emit("back"))}," 上一步 "),F.platform==="claude"&&p.value==="cookie"?m("",!0):(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!W.value||k.value,type:"button",onClick:ze},[k.value?(o(),n("div",sn)):m("",!0),f(" "+u(k.value?"验证中...":"完成授权"),1)],8,rn))])]))}},on={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},nn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},dn={class:"mb-4 flex items-center justify-between sm:mb-6"},un={class:"mb-4 flex flex-wrap gap-2"},pn=["onClick"],gn={class:"ml-1 text-xs opacity-70"},cn={class:"space-y-4"},yn={key:0,class:"py-8 text-center"},mn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},xn={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},fn={class:"mb-3 flex items-start justify-between"},bn={class:"flex-1"},vn={class:"font-semibold text-gray-900"},kn={class:"mt-1 text-sm text-gray-500"},hn={class:"ml-4 flex items-center gap-2"},wn={class:"flex items-center justify-between text-sm text-gray-600"},$n={class:"flex items-center gap-4"},An={class:"flex items-center gap-2"},Cn=["onClick"],Tn=["disabled","onClick"],In={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Un={class:"modal-content w-full max-w-lg p-4 sm:p-6"},_n={class:"space-y-4"},Kn={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Sn={class:"flex gap-3 pt-4"},Mn=["disabled"],Dn={key:0,class:"loading-spinner mr-2"},Pn={key:2,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},jn={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Vn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},Ln={class:"flex cursor-pointer items-center"},Rn={class:"flex cursor-pointer items-center"},On={class:"flex cursor-pointer items-center"},En={class:"flex cursor-pointer items-center"},Nn={class:"flex gap-3 pt-4"},qn=["disabled"],Wn={key:0,class:"loading-spinner mr-2"},jr={__name:"GroupManagementModal",emits:["close","refresh"],setup(F,{emit:_e}){const c=_e,z=v(!0),A=v(!1),_=v([]),T=v("all"),k=[{key:"all",label:"全部",color:"gray"},{key:"claude",label:"Claude",color:"purple"},{key:"gemini",label:"Gemini",color:"blue"},{key:"openai",label:"OpenAI",color:"gray"},{key:"droid",label:"Droid",color:"cyan"}],P=Z(()=>{const X={all:_.value.length};return k.slice(1).forEach(C=>{X[C.key]=_.value.filter(G=>G.platform===C.key).length}),X}),O=Z(()=>T.value==="all"?_.value:_.value.filter(X=>X.platform===T.value)),Y=v(!1),M=v(null),se=v(!1),ge=v(!1),N=v({name:"",platform:"claude",description:""}),E=v(!1),R=v(!1),y=v(null),p=v({name:"",platform:"",description:""}),D=async()=>{A.value=!0;try{const X=await sr();_.value=X.data||[]}catch{V("加载分组列表失败","error")}finally{A.value=!1}},de=async()=>{var X,C;if(!N.value.name||!N.value.platform){V("请填写必填项","error");return}ge.value=!0;try{await _s({name:N.value.name,platform:N.value.platform,description:N.value.description}),V("分组创建成功","success"),ae(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"创建分组失败","error")}finally{ge.value=!1}},le=()=>{N.value.platform=T.value!=="all"?T.value:"claude",se.value=!0},ae=()=>{se.value=!1,N.value={name:"",platform:"claude",description:""}},oe=X=>{y.value=X,p.value={name:X.name,platform:X.platform,description:X.description||""},E.value=!0},he=async()=>{var X,C;if(!p.value.name){V("请填写分组名称","error");return}R.value=!0;try{await Us(y.value.id,{name:p.value.name,description:p.value.description}),V("分组更新成功","success"),W(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"更新分组失败","error")}finally{R.value=!1}},W=()=>{E.value=!1,y.value=null,p.value={name:"",platform:"",description:""}},Q=X=>{if(X.memberCount>0){V("分组内还有成员,无法删除","error");return}M.value=X,Y.value=!0},H=async()=>{var X,C;if(M.value)try{await Ks(M.value.id),V("分组删除成功","success"),h(),await D(),c("refresh")}catch(G){V(((C=(X=G.response)==null?void 0:X.data)==null?void 0:C.error)||"删除分组失败","error")}},h=()=>{Y.value=!1,M.value=null};return ra(()=>{D()}),(X,C)=>{var G;return o(),Xe(Mt,{to:"body"},[z.value?(o(),n("div",on,[e("div",nn,[e("div",dn,[C[10]||(C[10]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 账户分组管理 ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:C[0]||(C[0]=K=>X.$emit("close"))},C[9]||(C[9]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",un,[(o(),n(ke,null,Ne(k,K=>e("button",{key:K.key,class:$(["rounded-lg px-3 py-1.5 text-sm font-medium transition-all",T.value===K.key?K.key==="claude"?"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300":K.key==="gemini"?"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300":K.key==="droid"?"bg-cyan-100 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300":"bg-gray-200 text-gray-700 dark:bg-gray-700 dark:text-gray-200":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700"]),onClick:Ce=>T.value=K.key},[f(u(K.label)+" ",1),e("span",gn,"("+u(P.value[K.key])+")",1)],10,pn)),64))]),e("div",{class:"mb-6"},[e("button",{class:"btn btn-primary px-4 py-2",onClick:le},C[11]||(C[11]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 创建新分组 ",-1)]))]),e("div",cn,[A.value?(o(),n("div",yn,C[12]||(C[12]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):O.value.length===0?(o(),n("div",mn,C[13]||(C[13]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无分组",-1)]))):(o(),n("div",xn,[(o(!0),n(ke,null,Ne(O.value,K=>(o(),n("div",{key:K.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",fn,[e("div",bn,[e("h4",vn,u(K.name),1),e("p",kn,u(K.description||"暂无描述"),1)]),e("div",hn,[e("span",{class:$(["rounded-full px-2 py-1 text-xs font-medium",K.platform==="claude"?"bg-purple-100 text-purple-700":K.platform==="gemini"?"bg-blue-100 text-blue-700":K.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},u(K.platform==="claude"?"Claude":K.platform==="gemini"?"Gemini":K.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",wn,[e("div",$n,[e("span",null,[C[14]||(C[14]=e("i",{class:"fas fa-users mr-1"},null,-1)),f(" "+u(K.memberCount||0)+" 个成员 ",1)]),e("span",null,[C[15]||(C[15]=e("i",{class:"fas fa-clock mr-1"},null,-1)),f(" "+u(Ye(Is)(K.createdAt)),1)])]),e("div",An,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:Ce=>oe(K)},C[16]||(C[16]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Cn),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:K.memberCount>0,title:"删除",onClick:Ce=>Q(K)},C[17]||(C[17]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Tn)])])]))),128))]))])])])):m("",!0),E.value?(o(),n("div",In,[e("div",Un,[e("div",{class:"mb-4 flex items-center justify-between"},[C[19]||(C[19]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:W},C[18]||(C[18]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",_n,[e("div",null,[C[20]||(C[20]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[1]||(C[1]=K=>p.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,p.value.name]])]),e("div",null,[C[22]||(C[22]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Kn,[f(u(p.value.platform==="claude"?"Claude":p.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),C[21]||(C[21]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[C[23]||(C[23]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[2]||(C[2]=K=>p.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,p.value.description]])]),e("div",Sn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!p.value.name||R.value,onClick:he},[R.value?(o(),n("div",Dn)):m("",!0),f(" "+u(R.value?"更新中...":"更新"),1)],8,Mn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:W},"取消")])])])])):m("",!0),se.value?(o(),n("div",Pn,[e("div",jn,[e("div",{class:"mb-4 flex items-center justify-between"},[C[25]||(C[25]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建新分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:ae},C[24]||(C[24]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Vn,[e("div",null,[C[26]||(C[26]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"分组名称 *",-1)),b(e("input",{"onUpdate:modelValue":C[3]||(C[3]=K=>N.value.name=K),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[j,N.value.name]])]),e("div",null,[C[31]||(C[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"平台类型 *",-1)),e("div",zn,[e("label",Ln,[b(e("input",{"onUpdate:modelValue":C[4]||(C[4]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,N.value.platform]]),C[27]||(C[27]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Rn,[b(e("input",{"onUpdate:modelValue":C[5]||(C[5]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,N.value.platform]]),C[28]||(C[28]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",On,[b(e("input",{"onUpdate:modelValue":C[6]||(C[6]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,N.value.platform]]),C[29]||(C[29]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",En,[b(e("input",{"onUpdate:modelValue":C[7]||(C[7]=K=>N.value.platform=K),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,N.value.platform]]),C[30]||(C[30]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])])]),e("div",null,[C[32]||(C[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":C[8]||(C[8]=K=>N.value.description=K),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[j,N.value.description]])]),e("div",Nn,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!N.value.name||!N.value.platform||ge.value,onClick:de},[ge.value?(o(),n("div",Wn)):m("",!0),f(" "+u(ge.value?"创建中...":"创建"),1)],8,qn),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:ae},"取消")])])])])):m("",!0),Ve(Ja,{"cancel-text":"取消","confirm-text":"确认删除",message:`确定要删除分组 "${(G=M.value)==null?void 0:G.name}" 吗?此操作不可撤销。`,show:Y.value,title:"确认删除",type:"danger",onCancel:h,onConfirm:H},null,8,["message","show"])])}}},Bn={key:0,class:"modal fixed inset-0 z-[60] flex items-center justify-center p-3 sm:p-4"},Gn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},Fn={class:"mb-4 flex items-center justify-between sm:mb-6"},Qn={class:"flex items-center gap-2 sm:gap-3"},Hn={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Jn={class:"flex items-center gap-2"},Yn=["disabled"],Zn={key:0,class:"py-8 text-center"},Xn={key:1,class:"rounded-lg bg-gray-50 py-8 text-center dark:bg-gray-800"},ei={key:2},ti={class:"mb-4 space-y-3"},ai={class:"rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-800"},ri={class:"mb-3 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},si={class:"flex items-center gap-2"},li={class:"flex gap-1"},oi={class:"flex flex-1 items-center gap-2 lg:max-w-md"},ni={class:"relative flex-1"},ii={class:"flex gap-1"},di={class:"flex flex-wrap items-center justify-between gap-2"},ui={class:"flex flex-wrap items-center gap-2"},pi=["disabled"],gi=["disabled"],ci=["disabled"],yi=["disabled"],mi={class:"flex items-center gap-2 rounded-md bg-purple-50 px-3 py-1.5 dark:bg-purple-900/20"},xi={class:"text-xs font-medium text-purple-700 dark:text-purple-300"},fi={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"},bi={key:0,class:"absolute -left-2 -top-2 z-10"},vi=["title"],ki={class:"flex flex-col gap-3"},hi={class:"flex items-start justify-between gap-2"},wi=["title"],$i={class:"flex items-center gap-1"},Ai=["onClick"],Ci=["disabled","onClick"],Ti={key:0,class:"loading-spinner-sm"},Ii={key:1,class:"fas fa-redo"},Ui=["disabled","onClick"],_i={key:0,class:"loading-spinner-sm"},Ki={key:1,class:"fas fa-trash"},Si={class:"flex flex-wrap items-center gap-3 text-xs text-gray-600 dark:text-gray-400"},Mi={key:0},Di={key:0,class:"mt-4 flex items-center justify-between"},Pi={class:"text-sm text-gray-600 dark:text-gray-400"},ji={class:"flex items-center gap-2"},Vi=["disabled"],zi=["disabled"],Li={class:"px-3 py-1.5 text-sm font-medium text-gray-700 dark:text-gray-300"},Ri=["disabled"],Oi=["disabled"],Ei={__name:"ApiKeyManagementModal",props:{accountId:{type:String,required:!0},accountName:{type:String,default:""}},emits:["close","refresh"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=v(!1),T=v(null),k=v(null),P=v([]),O=v(1),Y=v(15),M=v(!1),se=v("all"),ge=v(""),N=v("fuzzy"),E=v(!1),R=v(!1),y=v({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),p=v(null),D=(g,a,U="确认",re="取消",ne="primary")=>new Promise(Re=>{y.value={title:g,message:a,confirmText:U,cancelText:re,type:ne},p.value=Re,R.value=!0}),de=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!0)},le=()=>{var g;R.value=!1,(g=p.value)==null||g.call(p,!1)},ae=g=>!g||g.length<12?g:`${g.substring(0,8)}...${g.substring(g.length-4)}`,oe=Z(()=>{let g=P.value;if(se.value!=="all"&&(g=g.filter(a=>a.status===se.value)),ge.value.trim()){const a=ge.value.trim();g=g.filter(U=>{const re=U.key;return N.value==="exact"?re===a:re.toLowerCase().includes(a.toLowerCase())})}return g}),he=Z(()=>oe.value.length),W=Z(()=>Math.ceil(he.value/Y.value)),Q=Z(()=>{const g=(O.value-1)*Y.value,a=g+Y.value;return oe.value.slice(g,a)}),H=Z(()=>P.value.filter(g=>g.status==="active").length),h=Z(()=>P.value.filter(g=>g.status==="error").length),X=async()=>{_.value=!0;try{const a=(await Ss(c.accountId)).data;let U=[];if(Array.isArray(a.apiKeys))U=a.apiKeys;else if(typeof a.apiKeys=="string")try{U=JSON.parse(a.apiKeys)}catch(ne){console.error("Failed to parse apiKeys:",ne)}const re=U.map(ne=>typeof ne=="string"?{key:ne,usageCount:0,status:"active",lastUsedAt:null,errorMessage:""}:typeof ne=="object"&&ne!==null?{key:ne.key||ne.apiKey||"",usageCount:ne.usageCount||ne.count||0,status:ne.status||"active",lastUsedAt:ne.lastUsedAt||ne.lastUsed||null,errorMessage:ne.errorMessage||""}:{key:String(ne),usageCount:0,status:"active",lastUsedAt:null,errorMessage:""});P.value=re.sort((ne,Re)=>ne.lastUsedAt&&Re.lastUsedAt?new Date(Re.lastUsedAt)-new Date(ne.lastUsedAt):ne.lastUsedAt&&!Re.lastUsedAt?-1:!ne.lastUsedAt&&Re.lastUsedAt?1:(Re.usageCount||0)-(ne.usageCount||0))}catch(g){console.error("Failed to load API keys:",g),V("加载 API Key 失败","error")}finally{_.value=!1,O.value=1}},C=async g=>{var a,U;if(await D("删除 API Key",`确定要删除 API Key "${ae(g.key)}" 吗?`,"删除","取消","danger")){T.value=g.key;try{const re={removeApiKeys:[g.key],apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V("API Key 已删除","success"),await X(),z("refresh")}catch(re){console.error("Failed to delete API key:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"删除 API Key 失败","error")}finally{T.value=null}}},G=async g=>{var a,U;if(await D("重置状态",`确定要重置 API Key "${ae(g.key)}" 的状态吗?这将清除错误信息并恢复为正常状态。`,"重置","取消","warning")){k.value=g.key;try{const re={apiKeys:[{key:g.key,status:"active",errorMessage:""}],apiKeyUpdateMode:"update"};await ha(c.accountId,re),V("API Key 状态已重置","success"),await X(),z("refresh")}catch(re){console.error("Failed to reset API key status:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"重置 API Key 状态失败","error")}finally{k.value=null}}},K=async()=>{var a,U;const g=P.value.filter(re=>re.status==="error");if(g.length===0){V("没有异常状态的 API Key","warning");return}if(await D("删除异常 API Key",`确定要删除所有 ${g.length} 个异常状态的 API Key 吗?此操作不可恢复!`,"删除","取消","danger")){E.value=!0;try{const ne={removeApiKeys:g.map(Re=>Re.key),apiKeyUpdateMode:"delete"};await ha(c.accountId,ne),V(`成功删除 ${g.length} 个异常 API Key`,"success"),await X(),z("refresh")}catch(re){console.error("Failed to delete error API keys:",re),V(((U=(a=re.response)==null?void 0:a.data)==null?void 0:U.error)||"批量删除失败","error")}finally{E.value=!1}}},Ce=async()=>{var g,a;if(P.value.length===0){V("没有可删除的 API Key","warning");return}if(await D("删除全部 API Key",`确定要删除所有 ${P.value.length} 个 API Key 吗?此操作不可恢复!
+
+请再次确认:这将删除该账户下的所有 API Key。`,"删除","取消","danger")&&await D("最后确认","真的要删除所有 API Key 吗?","确认删除","取消","danger")){E.value=!0;try{const U=P.value.map(ne=>ne.key),re={removeApiKeys:U,apiKeyUpdateMode:"delete"};await ha(c.accountId,re),V(`成功删除所有 ${U.length} 个 API Key`,"success"),await X(),z("refresh")}catch(U){console.error("Failed to delete all API keys:",U),V(((a=(g=U.response)==null?void 0:g.data)==null?void 0:a.error)||"批量删除失败","error")}finally{E.value=!1}}},ze=g=>{let a=[],U="";if(g==="error"?(a=P.value.filter(st=>st.status==="error"),U=`error_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`):(a=P.value,U=`all_api_keys_${c.accountName}_${new Date().toISOString().split("T")[0]}.txt`),a.length===0){V("没有可导出的 API Key","warning");return}const re=a.map(st=>st.key).join(`
+`),ne=new Blob([re],{type:"text/plain;charset=utf-8"}),Re=URL.createObjectURL(ne),Oe=document.createElement("a");Oe.href=Re,Oe.download=U,document.body.appendChild(Oe),Oe.click(),document.body.removeChild(Oe),URL.revokeObjectURL(Re),V(`成功导出 ${a.length} 个 API Key`,"success")},Ke=async g=>{if(typeof navigator<"u"&&navigator.clipboard&&typeof navigator.clipboard.writeText=="function"&&(typeof window>"u"||window.isSecureContext!==!1)){await navigator.clipboard.writeText(g);return}if(typeof document>"u")throw new Error("clipboard unavailable");const U=document.createElement("textarea");U.value=g,U.setAttribute("readonly",""),U.style.position="fixed",U.style.opacity="0",U.style.pointerEvents="none",document.body.appendChild(U),U.select();try{const re=document.execCommand("copy");if(document.body.removeChild(U),!re)throw new Error("execCommand failed")}catch(re){throw document.body.removeChild(U),re}},Fe=async g=>{try{await Ke(g),V("API Key 已复制","success")}catch(a){console.error("Failed to copy:",a),V("复制失败,请手动复制","error")}},Qe=async()=>{if(!(!P.value.length||M.value)){M.value=!0;try{const g=P.value.map(a=>a.key).join(`
+`);await Ke(g),V(`已复制 ${P.value.length} 条 API Key`,"success")}catch(g){console.error("Failed to copy all keys:",g),V("复制全部 API Key 失败,请手动复制","error")}finally{M.value=!1}}},xe=g=>{if(!g)return"-";try{return new Date(g).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return"-"}};return ra(()=>{X()}),(g,a)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",Bn,[e("div",Gn,[e("div",Fn,[e("div",Qn,[a[14]||(a[14]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})],-1)),e("div",null,[a[13]||(a[13]=e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," API Key 管理 ",-1)),e("p",Hn,u(F.accountName),1)])]),e("div",Jn,[e("button",{class:"flex items-center gap-2 rounded-lg border border-purple-200 bg-white/90 px-3 py-1.5 text-xs font-semibold text-purple-600 shadow-sm transition-all duration-200 hover:border-purple-300 hover:bg-purple-50 hover:text-purple-700 focus:outline-none focus:ring-2 focus:ring-purple-200 disabled:cursor-not-allowed disabled:opacity-60 dark:border-purple-600/60 dark:bg-purple-900/20 dark:text-purple-200 dark:hover:border-purple-500 dark:hover:bg-purple-900/40 dark:hover:text-purple-100 dark:focus:ring-purple-500/40 sm:text-sm",disabled:_.value||P.value.length===0||M.value,onClick:Qe},[e("i",{class:$(["text-sm sm:text-base",M.value?"fas fa-spinner fa-spin":"fas fa-clipboard-list"])},null,2),a[15]||(a[15]=e("span",null,"复制全部 Key",-1))],8,Yn),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-400 transition-colors hover:text-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-200 sm:h-10 sm:w-10",title:"关闭",onClick:a[0]||(a[0]=U=>g.$emit("close"))},a[16]||(a[16]=[e("i",{class:"fas fa-times text-base sm:text-lg"},null,-1)]))])]),_.value?(o(),n("div",Zn,a[17]||(a[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):m("",!0),!_.value&&P.value.length===0?(o(),n("div",Xn,a[18]||(a[18]=[e("i",{class:"fas fa-key mb-4 text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"暂无 API Key",-1)]))):m("",!0),!_.value&&P.value.length>0?(o(),n("div",ei,[e("div",ti,[e("div",ai,[e("div",ri,[e("div",si,[a[21]||(a[21]=e("i",{class:"fas fa-filter text-gray-400 dark:text-gray-500"},null,-1)),a[22]||(a[22]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"筛选:",-1)),e("div",li,[e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="all"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[1]||(a[1]=U=>se.value="all")}," 全部 ("+u(P.value.length)+") ",3),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="active"?"bg-green-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[2]||(a[2]=U=>se.value="active")},[a[19]||(a[19]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),f(" 正常 ("+u(H.value)+") ",1)],2),e("button",{class:$(["rounded-md px-3 py-1.5 text-xs font-medium transition-colors",se.value==="error"?"bg-red-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),onClick:a[3]||(a[3]=U=>se.value="error")},[a[20]||(a[20]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),f(" 异常 ("+u(h.value)+") ",1)],2)])]),e("div",oi,[e("div",ni,[b(e("input",{"onUpdate:modelValue":a[4]||(a[4]=U=>ge.value=U),class:"w-full rounded-md border border-gray-300 bg-gray-50 py-2 pl-10 pr-3 text-sm text-gray-700 transition-colors placeholder:text-gray-400 focus:border-purple-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:placeholder:text-gray-500 dark:focus:border-purple-400 dark:focus:bg-gray-800",placeholder:"搜索 API Key...",type:"text"},null,512),[[j,ge.value]]),a[23]||(a[23]=e("i",{class:"fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-gray-400 dark:text-gray-500"},null,-1))]),e("div",ii,[e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="fuzzy"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"模糊搜索:包含查询字符串即可",onClick:a[5]||(a[5]=U=>N.value="fuzzy")},a[24]||(a[24]=[e("i",{class:"fas fa-search mr-1"},null,-1),f(" 模糊 ",-1)]),2),e("button",{class:$(["rounded-md px-2.5 py-2 text-xs font-medium transition-colors",N.value==="exact"?"bg-purple-500 text-white shadow-sm":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"]),title:"精确搜索:完全匹配完整 Key",onClick:a[6]||(a[6]=U=>N.value="exact")},a[25]||(a[25]=[e("i",{class:"fas fa-equals mr-1"},null,-1),f(" 精确 ",-1)]),2)])])]),a[35]||(a[35]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-700"},null,-1)),e("div",di,[e("div",ui,[a[30]||(a[30]=e("span",{class:"text-xs font-medium text-gray-500 dark:text-gray-400"},"批量操作:",-1)),e("button",{class:"group rounded-md bg-gradient-to-r from-red-500 to-red-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-600 hover:to-red-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0||E.value,title:"删除所有异常状态的 API Key",onClick:K},a[26]||(a[26]=[e("i",{class:"fas fa-trash-alt mr-1"},null,-1),f(" 删除异常 ",-1)]),8,pi),e("button",{class:"group rounded-md bg-gradient-to-r from-red-600 to-red-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-red-700 hover:to-red-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0||E.value,title:"删除所有 API Key",onClick:Ce},a[27]||(a[27]=[e("i",{class:"fas fa-trash mr-1"},null,-1),f(" 删除全部 ",-1)]),8,gi),a[31]||(a[31]=e("div",{class:"mx-1 h-5 w-px bg-gray-300 dark:bg-gray-600"},null,-1)),e("button",{class:"rounded-md bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:h.value===0,title:"导出所有异常状态的 API Key",onClick:a[7]||(a[7]=U=>ze("error"))},a[28]||(a[28]=[e("i",{class:"fas fa-download mr-1"},null,-1),f(" 导出异常 ",-1)]),8,ci),e("button",{class:"rounded-md bg-gradient-to-r from-blue-600 to-blue-700 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-all hover:from-blue-700 hover:to-blue-800 hover:shadow disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:shadow-sm",disabled:P.value.length===0,title:"导出所有 API Key",onClick:a[8]||(a[8]=U=>ze("all"))},a[29]||(a[29]=[e("i",{class:"fas fa-file-export mr-1"},null,-1),f(" 导出全部 ",-1)]),8,yi)]),e("div",mi,[a[34]||(a[34]=e("i",{class:"fas fa-info-circle text-purple-500 dark:text-purple-400"},null,-1)),e("span",xi,[a[32]||(a[32]=f(" 显示 ",-1)),e("strong",null,u(oe.value.length),1),a[33]||(a[33]=f(" 个 ",-1))])])])])]),e("div",fi,[(o(!0),n(ke,null,Ne(Q.value,(U,re)=>(o(),n("div",{key:re,class:"relative rounded-lg border border-gray-200 bg-white p-4 transition-all hover:shadow-md dark:border-gray-700 dark:bg-gray-800"},[(U.status==="error"||U.status==="disabled")&&U.errorMessage?(o(),n("div",bi,[e("span",{class:$(["inline-flex items-center justify-center rounded-full px-2 py-0.5 text-[10px] font-semibold shadow-sm",[U.status==="error"?"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400":"bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400"]]),title:`错误状态码: ${U.errorMessage}`},u(U.errorMessage),11,vi)])):m("",!0),e("div",ki,[e("div",hi,[e("span",{class:"flex-1 break-all font-mono text-xs font-medium text-gray-900 dark:text-gray-100",title:U.key},u(ae(U.key)),9,wi),e("div",$i,[e("button",{class:"text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",title:"复制 API Key",onClick:ne=>Fe(U.key)},a[36]||(a[36]=[e("i",{class:"fas fa-copy"},null,-1)]),8,Ai),U.status==="error"||U.status==="disabled"?(o(),n("button",{key:0,class:$(["text-xs transition-colors disabled:cursor-not-allowed disabled:opacity-50",[U.status==="error"?"text-orange-500 hover:text-orange-700 dark:text-orange-400 dark:hover:text-orange-300":"text-yellow-500 hover:text-yellow-700 dark:text-yellow-400 dark:hover:text-yellow-300"]]),disabled:k.value===U.key,title:"重置状态",onClick:ne=>G(U)},[k.value===U.key?(o(),n("div",Ti)):(o(),n("i",Ii))],10,Ci)):m("",!0),e("button",{class:"text-xs text-red-500 transition-colors hover:text-red-700 disabled:cursor-not-allowed disabled:opacity-50 dark:text-red-400 dark:hover:text-red-600",disabled:T.value===U.key,onClick:ne=>C(U)},[T.value===U.key?(o(),n("div",_i)):(o(),n("i",Ki))],8,Ui)])]),e("div",Si,[e("div",null,[e("span",{class:$([U.status==="active"?"text-green-600 dark:text-green-400":U.status==="error"?"text-red-600 dark:text-red-400":"text-yellow-600 dark:text-yellow-400"])},[e("i",{class:$(["mr-1",[U.status==="active"?"fas fa-check-circle":U.status==="error"?"fas fa-exclamation-triangle":"fas fa-exclamation-circle"]])},null,2),f(" "+u(U.status==="active"?"正常":U.status==="error"?"异常":U.status==="disabled"?"禁用":U.status||"未知"),1)],2)]),e("div",null,[e("span",null,[a[37]||(a[37]=f("使用: ",-1)),e("strong",null,u(U.usageCount||0),1),a[38]||(a[38]=f("次",-1))])]),U.lastUsedAt?(o(),n("div",Mi,[e("span",null,u(xe(U.lastUsedAt)),1)])):m("",!0)])])]))),128))]),W.value>1?(o(),n("div",Di,[e("div",Pi," 显示 "+u((O.value-1)*Y.value+1)+"-"+u(Math.min(O.value*Y.value,he.value))+" 项,共 "+u(he.value)+" 项 ",1),e("div",ji,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[9]||(a[9]=U=>O.value=1)},a[39]||(a[39]=[e("i",{class:"fas fa-angle-double-left"},null,-1)]),8,Vi),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===1,onClick:a[10]||(a[10]=U=>O.value--)},a[40]||(a[40]=[e("i",{class:"fas fa-angle-left"},null,-1)]),8,zi),e("span",Li,u(O.value)+" / "+u(W.value),1),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[11]||(a[11]=U=>O.value++)},a[41]||(a[41]=[e("i",{class:"fas fa-angle-right"},null,-1)]),8,Ri),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-200 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:O.value===W.value,onClick:a[12]||(a[12]=U=>O.value=W.value)},a[42]||(a[42]=[e("i",{class:"fas fa-angle-double-right"},null,-1)]),8,Oi)])])):m("",!0)])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":y.value.cancelText,"confirm-text":y.value.confirmText,message:y.value.message,show:R.value,title:y.value.title,type:y.value.type,onCancel:le,onConfirm:de},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Ni={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},qi={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},Wi={class:"mb-4 flex items-center justify-between sm:mb-6"},Bi={class:"flex items-center gap-2 sm:gap-3"},Gi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Fi={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Qi={class:"flex items-center space-x-2 sm:space-x-4"},Hi={class:"flex items-center"},Ji={class:"flex items-center"},Yi={key:1},Zi={class:"space-y-6"},Xi={key:0},ed={class:"space-y-3"},td={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},ad={class:"p-3"},rd={class:"flex items-center justify-between"},sd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},ld={class:"p-3"},od={class:"flex items-center justify-between"},nd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},id={class:"p-3"},dd={class:"flex items-center justify-between"},ud={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},pd={class:"p-3"},gd={class:"flex items-center justify-between"},cd={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},yd={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},md={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},xd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},fd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},bd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},vd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},kd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},hd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},wd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},$d={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},Ad={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},Cd={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500"},Td={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Id={key:1},Ud={class:"flex flex-wrap gap-4"},_d={class:"flex cursor-pointer items-center"},Kd={class:"text-sm text-gray-700 dark:text-gray-300"},Sd={key:0},Md={key:0,class:"flex cursor-pointer items-center"},Dd={class:"flex cursor-pointer items-center"},Pd={key:1,class:"flex cursor-pointer items-center"},jd={key:0,class:"mt-1 text-xs text-red-500"},Vd={class:"flex gap-4"},zd={class:"flex cursor-pointer items-center"},Ld={class:"flex cursor-pointer items-center"},Rd={class:"flex cursor-pointer items-center"},Od={key:2},Ed={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Nd={key:0,class:"mt-3"},qd=["min"],Wd={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Bd={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Gd={key:3},Fd={class:"flex gap-2"},Qd={class:"flex-1"},Hd={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},Jd={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Yd=["value"],Zd={class:"text-sm text-gray-700 dark:text-gray-200"},Xd={key:4},e0={key:5,class:"space-y-4"},t0={key:0,class:"flex gap-4"},a0={class:"flex cursor-pointer items-center"},r0={class:"flex cursor-pointer items-center"},s0={key:1,class:"flex gap-4"},l0={class:"flex items-center opacity-60"},o0={class:"flex items-center opacity-60"},n0={class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},i0={class:"flex items-start gap-2"},d0={class:"text-xs text-blue-700 dark:text-blue-300"},u0={key:0,class:"font-medium"},p0={key:1,class:"font-medium"},g0={key:2,class:"mt-1 text-xs italic"},c0={key:0},y0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},m0=["placeholder","required"],x0={key:0,class:"mt-1 text-xs text-red-500"},f0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},b0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},v0=["placeholder","required"],k0={key:0,class:"mt-1 text-xs text-red-500"},h0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},w0=["placeholder"],$0={key:1},A0={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},C0=["placeholder","required"],T0={key:0,class:"mt-1 text-xs text-red-500"},I0={key:1,class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},U0={key:0,class:"mt-1 text-xs text-red-500"},_0={key:6,class:"space-y-4"},K0={key:0,class:"mt-1 text-xs text-red-500"},S0={key:0,class:"mt-1 text-xs text-red-500"},M0={key:0,class:"mt-1 text-xs text-red-500"},D0={class:"flex flex-wrap gap-2"},P0=["value"],j0={class:"text-sm text-gray-700 dark:text-gray-300"},V0={key:7},z0={class:"mb-3"},L0={class:"inline-flex cursor-pointer items-center"},R0={key:0},O0={key:8,class:"space-y-4"},E0={key:0,class:"mt-1 text-xs text-red-500"},N0={key:0,class:"mt-1 text-xs text-red-500"},q0={class:"grid grid-cols-2 gap-4"},W0={class:"mb-4 flex gap-2"},B0={key:0},G0={class:"mb-3 grid grid-cols-2 gap-2"},F0=["value"],Q0={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},H0={class:"text-xs text-gray-500 dark:text-gray-400"},J0={key:0},Y0={key:1},Z0={class:"mb-3 space-y-2"},X0=["onUpdate:modelValue"],eu=["onUpdate:modelValue"],tu=["onClick"],au={class:"mt-3 flex flex-wrap gap-2"},ru={class:"mb-3"},su={class:"inline-flex cursor-pointer items-center"},lu={key:0},ou={key:0},nu={class:"inline-flex cursor-pointer items-center"},iu={key:9,class:"space-y-4"},du={class:"relative"},uu=["type"],pu={key:10,class:"space-y-4"},gu={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},cu={class:"relative"},yu=["type"],mu={key:11},xu={class:"flex gap-4"},fu={class:"flex cursor-pointer items-center"},bu={class:"flex cursor-pointer items-center"},vu={key:12,class:"mt-4"},ku={class:"flex items-start"},hu={key:13,class:"mt-4"},wu={class:"flex items-start"},$u={key:14,class:"mt-4"},Au={class:"flex items-start"},Cu={key:15,class:"mt-4"},Tu={class:"flex items-start"},Iu={class:"ml-3"},Uu={key:0,class:"mt-1"},_u={class:"flex items-center justify-between"},Ku={class:"text-xs text-green-600 dark:text-green-400"},Su=["disabled"],Mu={key:0,class:"fas fa-trash-alt mr-1"},Du={key:1,class:"loading-spinner mr-1"},Pu={key:1,class:"mt-1"},ju={key:16,class:"mt-4"},Vu={class:"flex items-start"},zu={class:"ml-3 flex-1"},Lu={key:0,class:"mt-3"},Ru={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Ou={class:"flex items-center gap-2"},Eu={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Nu={class:"text-blue-600 dark:text-blue-400"},qu={class:"text-gray-500 dark:text-gray-500"},Wu={class:"text-blue-600 dark:text-blue-400"},Bu={key:17,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Gu={class:"mb-4 flex items-start gap-3"},Fu={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Qu={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Hu={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Ju={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},Yu={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},Zu={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},Xu={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},ep={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},tp={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},ap={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},rp={key:5,class:"text-xs text-red-600 dark:text-red-400"},sp={key:0},lp={key:1},op={key:0,class:"mt-1 text-xs text-red-500"},np={key:2},ip={key:0,class:"mt-1 text-xs text-red-500"},dp={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},up={key:3},pp={key:4},gp={key:18,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},cp={key:0,class:"mt-1 text-xs text-red-500"},yp={class:"flex gap-3 pt-4"},mp=["disabled"],xp=["disabled"],fp={key:0,class:"loading-spinner mr-2"},bp={key:3,class:"space-y-6"},vp={key:0},kp={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},hp={class:"flex items-start gap-4"},wp={class:"flex-1"},$p={class:"mb-4"},Ap={class:"flex flex-wrap gap-4"},Cp={class:"flex cursor-pointer items-center"},Tp={class:"flex cursor-pointer items-center"},Ip={key:0,class:"space-y-4"},Up={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},_p={class:"flex items-start gap-3"},Kp={class:"flex-1"},Sp=["disabled"],Mp={key:0,class:"fas fa-link mr-2"},Dp={key:1,class:"loading-spinner mr-2"},Pp={key:1,class:"space-y-3"},jp={class:"flex items-center gap-2"},Vp=["value"],zp={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Lp={class:"flex items-start gap-3"},Rp={class:"flex-1"},Op={class:"space-y-3"},Ep={key:1,class:"space-y-4"},Np={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},qp={class:"space-y-4"},Wp={class:"mb-2 flex items-center gap-2 text-sm font-semibold text-gray-700 dark:text-gray-300"},Bp={key:0,class:"rounded-full bg-blue-500 px-2 py-0.5 text-xs text-white"},Gp={key:0,class:"mt-1 text-xs text-blue-600 dark:text-blue-400"},Fp={key:1,class:"mt-1 text-xs text-red-500"},Qp={key:0,class:"mt-3 rounded border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-700"},Hp=["disabled"],Jp={key:0,class:"loading-spinner mr-2"},Yp={key:1,class:"fas fa-magic mr-2"},Zp={class:"flex gap-3 pt-4"},Xp=["disabled"],eg={key:0,class:"loading-spinner mr-2"},tg={key:4,class:"space-y-6"},ag={class:"flex gap-4"},rg={class:"flex cursor-pointer items-center"},sg={class:"flex cursor-pointer items-center"},lg={class:"flex cursor-pointer items-center"},og={key:0},ng={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},ig={key:0,class:"mt-3"},dg=["min"],ug={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},pg={key:2,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},gg={key:1},cg={class:"flex gap-2"},yg={class:"flex-1"},mg={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},xg={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},fg=["value"],bg={class:"text-sm text-gray-700 dark:text-gray-200"},vg={key:2},kg={key:3},hg={class:"flex gap-4"},wg={class:"flex cursor-pointer items-center"},$g={class:"flex cursor-pointer items-center"},Ag={key:4,class:"mt-4"},Cg={class:"flex items-start"},Tg={key:5,class:"mt-4"},Ig={class:"flex items-start"},Ug={key:6,class:"mt-4"},_g={class:"flex items-start"},Kg={key:7,class:"mt-4"},Sg={class:"flex items-start"},Mg={class:"ml-3"},Dg={key:0,class:"mt-1"},Pg={class:"flex items-center justify-between"},jg={class:"text-xs text-green-600 dark:text-green-400"},Vg=["disabled"],zg={key:0,class:"fas fa-trash-alt mr-1"},Lg={key:1,class:"loading-spinner mr-1"},Rg={key:1,class:"mt-1"},Og={key:8,class:"mt-4"},Eg={class:"flex items-start"},Ng={class:"ml-3 flex-1"},qg={key:0,class:"mt-3"},Wg={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Bg={class:"flex items-center gap-2"},Gg={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Fg={class:"text-blue-600 dark:text-blue-400"},Qg={class:"text-gray-500 dark:text-gray-500"},Hg={class:"text-blue-600 dark:text-blue-400"},Jg={key:9,class:"space-y-4"},Yg={class:"grid grid-cols-2 gap-4"},Zg={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Xg={class:"mb-2 flex items-center justify-between"},ec={class:"text-sm text-gray-500 dark:text-gray-400"},tc={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ac={class:"mt-2 flex items-center justify-between text-xs"},rc={class:"text-gray-500 dark:text-gray-400"},sc={class:"text-gray-500 dark:text-gray-400"},lc={class:"mb-4 flex gap-2"},oc={key:0},nc={class:"mb-3 grid grid-cols-2 gap-2"},ic=["value"],dc={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},uc={class:"text-xs text-gray-500 dark:text-gray-400"},pc={key:0},gc={key:1},cc={class:"mb-3 space-y-2"},yc=["onUpdate:modelValue"],mc=["onUpdate:modelValue"],xc=["onClick"],fc={class:"mt-3 flex flex-wrap gap-2"},bc={class:"mb-3"},vc={class:"inline-flex cursor-pointer items-center"},kc={key:0},hc={key:1},wc={class:"inline-flex cursor-pointer items-center"},$c={key:10,class:"space-y-4"},Ac={class:"relative"},Cc=["type"],Tc={class:"grid grid-cols-2 gap-4"},Ic={key:11,class:"space-y-4"},Uc={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},_c={class:"relative"},Kc=["type"],Sc={key:12,class:"space-y-4"},Mc={class:"mb-3"},Dc={class:"inline-flex cursor-pointer items-center"},Pc={key:0},jc={key:13,class:"space-y-4"},Vc={key:0,class:"mt-1 text-xs text-red-500"},zc={key:0,class:"mt-1 text-xs text-red-500"},Lc={key:0,class:"mt-1 text-xs text-red-500"},Rc={class:"flex flex-wrap gap-2"},Oc=["value"],Ec={class:"text-sm text-gray-700 dark:text-gray-300"},Nc={key:14,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},qc={class:"mb-4 flex items-start gap-3"},Wc={class:"flex-1"},Bc={class:"mb-2 flex items-center justify-between"},Gc={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Fc={class:"space-y-4"},Qc={key:0,class:"mt-1 text-xs text-red-500"},Hc={class:"space-y-2"},Jc={class:"flex items-center justify-between"},Yc={class:"text-xs text-purple-600 dark:text-purple-300"},Zc={class:"relative grid h-11 grid-cols-3 overflow-hidden rounded-2xl border border-purple-200/80 bg-gradient-to-r from-purple-50/80 via-white to-purple-50/80 shadow-inner dark:border-purple-700/70 dark:from-purple-900/40 dark:via-purple-900/20 dark:to-purple-900/40"},Xc=["onClick"],ey={class:"text-xs text-purple-700 dark:text-purple-300"},ty={key:15,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},ay={class:"space-y-4"},ry={key:16},sy={class:"flex gap-3 pt-4"},ly=["disabled"],oy={key:0,class:"loading-spinner mr-2"},ny={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(F,{emit:_e}){var Qt,ia,_a,rt,Ka,Sa,da,Ma,lt,Da,Ht,Kt,Pa,ja,Va,ua,za,pa,La,Ra,Oa,ga,Jt,ca,ya,Ea,xt,ft,Na,ma,Yt,xa,qa,fa,Zt,Wa,ba,Xt;const c=F,z=_e,A=Pr(),_=v(!1),T=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let k=null;const P=(d,t,ie="继续",ye="取消")=>new Promise(i=>{T.value={title:d,message:t,confirmText:ie,cancelText:ye},k=i,_.value=!0}),O=()=>{_.value=!1,k==null||k(!0),k=null},Y=()=>{_.value=!1,k==null||k(!1),k=null},M=Z(()=>!!c.account),se=v(!0),ge=v(null),N=v(1),E=v(!1),R=v(!1),y=v(!1),p=v(!1),D=v(""),de=v(""),le=v(!1),ae=v(""),oe=v("manual"),he=v(""),W=v(!1),Q=v(""),H=v(!1),h=v({current:0,total:0}),X=Z(()=>he.value.split(`
+`).map(d=>d.trim()).filter(d=>d.length>0).length),C=v(""),G=v(!1),K=v(""),Ce=v(!1),ze=d=>["claude","claude-console","ccr","bedrock"].includes(d)?"claude":["openai","openai-responses","azure_openai"].includes(d)?"openai":["gemini","gemini-antigravity","gemini-api"].includes(d)?"gemini":d==="droid"?"droid":"",Ke=()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}),Fe=d=>{if(!d)return null;let t=d;if(typeof d=="string")try{t=JSON.parse(d)}catch{return null}if(t&&typeof t=="object"&&t.proxy&&typeof t.proxy=="object"&&(t=t.proxy),!t||typeof t!="object")return null;const ie=typeof t.host=="string"?t.host.trim():t.host!==void 0&&t.host!==null?String(t.host).trim():"",ye=t.port!==void 0&&t.port!==null?String(t.port).trim():"",i=typeof t.type=="string"&&t.type.trim()?t.type.trim():"socks5",pe=typeof t.username=="string"?t.username:t.username!==void 0&&t.username!==null?String(t.username):"",me=typeof t.password=="string"?t.password:t.password!==void 0&&t.password!==null?String(t.password):"";return{type:i,host:ie,port:ye,username:pe,password:me}},Qe=d=>{const t=Fe(d);return t&&t.host&&t.port?{enabled:!0,type:t.type||"socks5",host:t.host,port:t.port,username:t.username||"",password:t.password||""}:Ke()},xe=d=>{if(!d||!d.enabled)return null;const t=(d.host||"").trim(),ie=Number.parseInt(d.port,10);if(!t||Number.isNaN(ie)||ie<=0)return null;const ye=d.username?d.username.trim():"",i=d.password?d.password.trim():"";return{type:d.type||"socks5",host:t,port:ie,username:ye||null,password:i||null}},g=()=>{var d;return Qe((d=c.account)==null?void 0:d.proxy)},a=v({platform:((Qt=c.account)==null?void 0:Qt.platform)||"claude",addType:(()=>{var t;const d=((t=c.account)==null?void 0:t.platform)||"claude";return d==="gemini"||d==="gemini-antigravity"||d==="openai"||d==="claude"?"oauth":"manual"})(),name:((ia=c.account)==null?void 0:ia.name)||"",description:((_a=c.account)==null?void 0:_a.description)||"",accountType:((rt=c.account)==null?void 0:rt.accountType)||"shared",authenticationMethod:((Ka=c.account)==null?void 0:Ka.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((Sa=c.account)==null?void 0:Sa.autoStopOnWarning)||!1,useUnifiedUserAgent:((da=c.account)==null?void 0:da.useUnifiedUserAgent)||!1,useUnifiedClientId:((Ma=c.account)==null?void 0:Ma.useUnifiedClientId)||!1,unifiedClientId:((lt=c.account)==null?void 0:lt.unifiedClientId)||"",serialQueueEnabled:(((Da=c.account)==null?void 0:Da.maxConcurrency)||0)>0,interceptWarmup:((Ht=c.account)==null?void 0:Ht.interceptWarmup)===!0||((Kt=c.account)==null?void 0:Kt.interceptWarmup)==="true",groupId:"",groupIds:[],projectId:((Pa=c.account)==null?void 0:Pa.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:g(),apiUrl:((ja=c.account)==null?void 0:ja.apiUrl)||"",apiKey:((Va=c.account)==null?void 0:Va.apiKey)||"",priority:((ua=c.account)==null?void 0:ua.priority)||50,endpointType:((za=c.account)==null?void 0:za.endpointType)||"anthropic",baseApi:((pa=c.account)==null?void 0:pa.baseApi)||"",baseUrl:((La=c.account)==null?void 0:La.baseUrl)||"https://generativelanguage.googleapis.com",rateLimitDuration:((Ra=c.account)==null?void 0:Ra.rateLimitDuration)||60,supportedModels:(()=>{var t;const d=(t=c.account)==null?void 0:t.supportedModels;return d?typeof d=="object"&&!Array.isArray(d)?Object.keys(d):Array.isArray(d)?d:[]:[]})(),userAgent:((Oa=c.account)==null?void 0:Oa.userAgent)||"",enableRateLimit:c.account?c.account.rateLimitDuration>0:!0,disableAutoProtection:((ga=c.account)==null?void 0:ga.disableAutoProtection)===!0,dailyQuota:((Jt=c.account)==null?void 0:Jt.dailyQuota)||0,dailyUsage:((ca=c.account)==null?void 0:ca.dailyUsage)||0,quotaResetTime:((ya=c.account)==null?void 0:ya.quotaResetTime)||"00:00",maxConcurrentTasks:((Ea=c.account)==null?void 0:Ea.maxConcurrentTasks)||0,credentialType:((xt=c.account)==null?void 0:xt.credentialType)||"access_key",accessKeyId:((ft=c.account)==null?void 0:ft.accessKeyId)||"",secretAccessKey:((Na=c.account)==null?void 0:Na.secretAccessKey)||"",region:((ma=c.account)==null?void 0:ma.region)||"",sessionToken:((Yt=c.account)==null?void 0:Yt.sessionToken)||"",bearerToken:((xa=c.account)==null?void 0:xa.bearerToken)||"",defaultModel:((qa=c.account)==null?void 0:qa.defaultModel)||"",smallFastModel:((fa=c.account)==null?void 0:fa.smallFastModel)||"",azureEndpoint:((Zt=c.account)==null?void 0:Zt.azureEndpoint)||"",apiVersion:((Wa=c.account)==null?void 0:Wa.apiVersion)||"",deploymentName:((ba=c.account)==null?void 0:ba.deploymentName)||"",expireDuration:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?"custom":""})(),customExpireDate:(()=>{var d;return(d=c.account)!=null&&d.expiresAt?new Date(c.account.expiresAt).toISOString().slice(0,16):""})(),expiresAt:((Xt=c.account)==null?void 0:Xt.expiresAt)||null}),U=v("whitelist"),re=v(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),ne=v([]),Re=async()=>{var d;try{const t=await Ms();t.success&&((d=t.data)!=null&&d.all)&&(ne.value=t.data.all)}catch(t){console.error("Failed to load models:",t)}},Oe=v([]),st=()=>{var d;if((d=c.account)!=null&&d.supportedModels)if(typeof c.account.supportedModels=="object"&&!Array.isArray(c.account.supportedModels)){const t=Object.entries(c.account.supportedModels);t.every(([ye,i])=>ye===i)?(U.value="whitelist",re.value=t.map(([ye])=>ye),Oe.value=t.map(([ye,i])=>({from:ye,to:i}))):(U.value="mapping",Oe.value=t.map(([ye,i])=>({from:ye,to:i})))}else Array.isArray(c.account.supportedModels)&&(U.value="whitelist",re.value=c.account.supportedModels,Oe.value=c.account.supportedModels.map(t=>({from:t,to:t})))},nt=d=>{if(!d||typeof d!="string")return[];const t=d.split(/\r?\n/).map(ye=>ye.trim()).filter(ye=>ye.length>0);return t.length===0?[]:Array.from(new Set(t))},at=[{value:"append",label:"追加模式",description:"保留现有 Key,并在末尾追加新 Key 列表。"},{value:"replace",label:"覆盖模式",description:"先清空旧 Key,再写入上方的新 Key 列表。"},{value:"delete",label:"删除模式",description:"输入要移除的 Key,可精准删除失效或被封禁的 Key。"}],Dt=Z(()=>{const d=Math.max(at.findIndex(ie=>ie.value===a.value.apiKeyUpdateMode),0),t=100/at.length;return{width:`${t}%`,left:`${d*t}%`}}),Pt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.label:at[0].label}),jt=Z(()=>{const d=at.find(t=>t.value===a.value.apiKeyUpdateMode);return d?d.description:at[0].description}),I=v({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",bearerToken:"",azureEndpoint:"",deploymentName:""}),Tt=Z(()=>{var d;return((d=a.value.name)==null?void 0:d.trim())&&a.value.platform}),gt=Z(()=>D.value&&de.value.trim()),ht=()=>{var d;return!M.value||!((d=c.account)!=null&&d.id)?0:typeof a.value.dailyUsage=="number"?a.value.dailyUsage:0},ct=Z(()=>!a.value.dailyQuota||a.value.dailyQuota<=0?0:ht()/a.value.dailyQuota*100),Vt=Z(()=>{if(!c.account||c.account.platform!=="droid")return 0;let d=0;if(Array.isArray(c.account.apiKeys))d=c.account.apiKeys.length;else if(typeof c.account.apiKeys=="string")try{const ie=JSON.parse(c.account.apiKeys);Array.isArray(ie)&&(d=ie.length)}catch{d=0}const t=c.account.apiKeyCount??c.account.apiKeysCount??c.account.api_key_count??d;return Number(t)||0}),wt=Z(()=>{var t,ie,ye;if(!M.value||a.value.platform!=="droid")return!1;const d=a.value.authenticationMethod||((t=c.account)==null?void 0:t.authenticationMethod)||((ie=c.account)==null?void 0:ie.authMethod)||((ye=c.account)==null?void 0:ye.authentication_mode)||"";return typeof d!="string"?!1:d.trim().toLowerCase()==="api_key"}),B=async()=>{var d;if(!(!M.value||!((d=c.account)!=null&&d.id)))try{const t=await Ps(c.account.id);t&&(a.value.dailyUsage=t.dailyUsage||0)}catch{}},q=d=>{K.value=d,d==="claude"?a.value.platform="claude":d==="openai"?a.value.platform="openai":d==="gemini"?a.value.platform="gemini":d==="droid"&&(a.value.platform="droid")},Ee=async()=>{if(I.value.name="",!Tt.value){(!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称");return}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!((a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")&&N.value===1&&a.value.addType==="oauth"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
+
+如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
+如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(N.value=2)},We=async()=>{y.value=!0;try{const d=xe(a.value.proxy),t=d?{proxy:d}:{},ie=await A.generateClaudeSetupTokenUrl(t);D.value=ie.authUrl,ae.value=ie.sessionId}catch(d){V(d.message||"生成Setup Token授权链接失败","error")}finally{y.value=!1}},ut=()=>{D.value="",de.value="",We()},Nt=async()=>{try{await navigator.clipboard.writeText(D.value),le.value=!0,V("链接已复制","success"),setTimeout(()=>{le.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=D.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(le.value=!0,V("链接已复制","success")):V("复制失败,请手动复制","error")}catch{V("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{le.value=!1},2e3)}},qt=async()=>{if(gt.value){p.value=!0;try{const d={sessionId:ae.value,callbackUrl:de.value.trim()},t=xe(a.value.proxy);t&&(d.proxy=t);const ie=await A.exchangeClaudeSetupTokenCode(d);a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),await it(ie)}catch(d){V(d.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{p.value=!1}}},$t=async()=>{const d=he.value.split(`
+`).map(pe=>pe.trim()).filter(pe=>pe.length>0);if(d.length===0){Q.value="请输入至少一个 sessionKey";return}W.value=!0,Q.value="",h.value={current:0,total:d.length};const t=a.value.addType==="setup-token",ie=xe(a.value.proxy),ye=[],i=[];for(let pe=0;pe0)try{await it(ye)}finally{W.value=!1}else W.value=!1;i.length>0&&ye.length===0?Q.value="全部授权失败,请检查 sessionKey 是否有效":i.length>0&&(Q.value=`${i.length} 个授权失败`)},zt=()=>{he.value="",Q.value="",H.value=!1,h.value={current:0,total:0}},Lt=()=>{oe.value==="manual"?zt():(D.value="",de.value="",ae.value="")},It=(d,t,ie)=>{var me,qe;const ye=xe(a.value.proxy),i=d.claudeAiOauth||d,pe={name:t,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:ye,claudeAiOauth:i,priority:a.value.priority||50,autoStopOnWarning:a.value.autoStopOnWarning||!1,interceptWarmup:a.value.interceptWarmup||!1,useUnifiedUserAgent:a.value.useUnifiedUserAgent||!1,useUnifiedClientId:a.value.useUnifiedClientId||!1,unifiedClientId:ie,maxConcurrency:a.value.serialQueueEnabled?1:0,subscriptionInfo:{accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}};if(i){const He={},Le=i.extInfo;Le!=null&&Le.org_uuid&&(He.org_uuid=Le.org_uuid),Le!=null&&Le.account_uuid&&(He.account_uuid=Le.account_uuid),Le||((me=i.organization)!=null&&me.uuid&&(He.org_uuid=i.organization.uuid),(qe=i.account)!=null&&qe.uuid&&(He.account_uuid=i.account.uuid)),Object.keys(He).length>0&&(pe.extInfo=He)}return pe},it=async d=>{var t,ie,ye,i,pe,me,qe,He,Le;E.value=!0;try{const S=a.value.platform;if(S==="claude"&&Array.isArray(d)){const Me=d,Pe=Me.length>1,Ue=a.value.name,et=[],tt=[];for(let bt=0;bt0){const bt=Pe?`成功创建 ${et.length}/${Me.length} 个账户`:"账户创建成功";V(bt,"success"),z("success",et[0])}tt.length>0&&V(`${tt.length} 个账户创建失败`,"error");return}const L=Array.isArray(d)?d[0]:d;a.value.platform==="claude"&&a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt());const $e=xe(a.value.proxy),J={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:$e};if(S==="claude"){const Me=L.claudeAiOauth||L;if(J.claudeAiOauth=Me,Me){const Pe={},Ue=Me.extInfo;if(Ue&&typeof Ue=="object"&&(Ue.org_uuid&&(Pe.org_uuid=Ue.org_uuid),Ue.account_uuid&&(Pe.account_uuid=Ue.account_uuid)),!Ue){const et=(t=Me.organization)==null?void 0:t.uuid,tt=(ie=Me.account)==null?void 0:ie.uuid;et&&(Pe.org_uuid=et),tt&&(Pe.account_uuid=tt)}Object.keys(Pe).length>0&&(J.extInfo=Pe)}J.priority=a.value.priority||50,J.autoStopOnWarning=a.value.autoStopOnWarning||!1,J.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,J.useUnifiedClientId=a.value.useUnifiedClientId||!1,J.unifiedClientId=a.value.unifiedClientId||"",J.maxConcurrency=a.value.serialQueueEnabled?1:0,J.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(S==="gemini"||S==="gemini-antigravity")J.geminiOauth=L.tokens||L,J.oauthProvider=S==="gemini-antigravity"?"antigravity":L.oauthProvider||"gemini-cli",a.value.projectId&&(J.projectId=a.value.projectId),J.priority=a.value.priority||50;else if(S==="openai")J.openaiOauth=L.tokens||L,J.accountInfo=L.accountInfo,J.priority=a.value.priority||50;else if(S==="droid"){const Me=L.tokens||L||{},Pe={accessToken:Me.accessToken||Me.access_token||"",refreshToken:Me.refreshToken||Me.refresh_token||"",expiresAt:Me.expiresAt||Me.expires_at||"",expiresIn:Me.expiresIn||Me.expires_in||null,tokenType:Me.tokenType||Me.token_type||"Bearer",organizationId:Me.organizationId||Me.organization_id||"",authenticationMethod:Me.authenticationMethod||Me.authentication_method||""};if(!Pe.refreshToken){E.value=!1,V("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(J.refreshToken=Pe.refreshToken,J.accessToken=Pe.accessToken,J.expiresAt=Pe.expiresAt,Pe.expiresIn!==null&&Pe.expiresIn!==void 0&&(J.expiresIn=Pe.expiresIn),J.priority=a.value.priority||50,J.endpointType=a.value.endpointType||"anthropic",J.platform="droid",J.tokenType=Pe.tokenType,J.authenticationMethod=Pe.authenticationMethod,Pe.organizationId&&(J.organizationId=Pe.organizationId),Me.user){const Ue=Me.user,et=[];typeof Ue.first_name=="string"&&Ue.first_name.trim()&&et.push(Ue.first_name.trim()),typeof Ue.last_name=="string"&&Ue.last_name.trim()&&et.push(Ue.last_name.trim());const tt=et.join(" ").trim()||(typeof Ue.name=="string"?Ue.name.trim():"")||(typeof Ue.display_name=="string"?Ue.display_name.trim():"");typeof Ue.email=="string"&&Ue.email.trim()&&(J.ownerEmail=Ue.email.trim()),tt?(J.ownerName=tt,J.ownerDisplayName=tt):J.ownerEmail&&(J.ownerName=J.ownerName||J.ownerEmail,J.ownerDisplayName=J.ownerDisplayName||J.ownerEmail),typeof Ue.id=="string"&&Ue.id.trim()&&(J.userId=Ue.id.trim())}}let Se;S==="claude"?Se=await A.createClaudeAccount(J):S==="gemini"?Se=await A.createGeminiAccount(J):S==="openai"?Se=await A.createOpenAIAccount(J):S==="droid"?Se=await A.createDroidAccount(J):Se=await A.createGeminiAccount(J),z("success",Se)}catch(S){const L=((i=(ye=S.response)==null?void 0:ye.data)==null?void 0:i.error)||S.message||"账户创建失败",$e=((me=(pe=S.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",J=((He=(qe=S.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let Se=L;$e&&(Se+=`
+${$e}`),J&&J.error_description?Se+=`
+详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
+详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1,(Le=ge.value)==null||Le.resetCookieAuth()}},Ya=async()=>{var t,ie,ye,i,pe,me,qe,He;I.value.name="",I.value.accessToken="",I.value.refreshToken="",I.value.apiUrl="",I.value.apiKey="",I.value.apiKeys="";let d=!1;if((!a.value.name||a.value.name.trim()==="")&&(I.value.name="请填写账户名称",d=!0),a.value.platform==="claude-console"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="ccr"&&((!a.value.apiUrl||a.value.apiUrl.trim()==="")&&(I.value.apiUrl="请填写 API URL",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)),a.value.platform==="openai-responses"?((!a.value.baseApi||a.value.baseApi.trim()==="")&&(I.value.baseApi="请填写 API 基础地址",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API 密钥",d=!0)):a.value.platform==="bedrock"?(a.value.credentialType==="access_key"?M.value||((!a.value.accessKeyId||a.value.accessKeyId.trim()==="")&&(I.value.accessKeyId="请填写 AWS 访问密钥 ID",d=!0),(!a.value.secretAccessKey||a.value.secretAccessKey.trim()==="")&&(I.value.secretAccessKey="请填写 AWS 秘密访问密钥",d=!0)):a.value.credentialType==="bearer_token"&&(M.value||(!a.value.bearerToken||a.value.bearerToken.trim()==="")&&(I.value.bearerToken="请填写 Bearer Token",d=!0)),(!a.value.region||a.value.region.trim()==="")&&(I.value.region="请选择 AWS 区域",d=!0)):a.value.platform==="azure_openai"?((!a.value.azureEndpoint||a.value.azureEndpoint.trim()==="")&&(I.value.azureEndpoint="请填写 Azure Endpoint",d=!0),(!a.value.deploymentName||a.value.deploymentName.trim()==="")&&(I.value.deploymentName="请填写部署名称",d=!0),(!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0)):a.value.addType==="manual"?a.value.platform==="openai"?(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0):a.value.platform==="gemini"?(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.platform==="droid"?((!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0),(!a.value.refreshToken||a.value.refreshToken.trim()==="")&&(I.value.refreshToken="请填写 Refresh Token",d=!0)):a.value.platform==="claude"&&(!a.value.accessToken||a.value.accessToken.trim()==="")&&(I.value.accessToken="请填写 Access Token",d=!0):a.value.addType==="apikey"&&(a.value.platform==="gemini-api"?((!a.value.apiKey||a.value.apiKey.trim()==="")&&(I.value.apiKey="请填写 API Key",d=!0),!a.value.baseUrl||a.value.baseUrl.trim()===""?(I.value.baseUrl="请填写 API 基础地址",d=!0):a.value.baseUrl.trim().endsWith("/models")||(I.value.baseUrl="API 基础地址必须以 /models 结尾",d=!0)):nt(a.value.apiKeysInput).length===0&&(I.value.apiKeys="请至少填写一个 API Key",d=!0)),a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)&&(V("请选择一个分组","error"),d=!0),a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!d){E.value=!0;try{const Le=xe(a.value.proxy),S={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:Le};if(a.value.platform==="claude"){const $e=a.value.refreshToken?6e5:31536e6;a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),S.claudeAiOauth={accessToken:a.value.accessToken,refreshToken:a.value.refreshToken||"",expiresAt:Date.now()+$e,scopes:[]},S.priority=a.value.priority||50,S.autoStopOnWarning=a.value.autoStopOnWarning||!1,S.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,S.useUnifiedClientId=a.value.useUnifiedClientId||!1,S.unifiedClientId=a.value.unifiedClientId||"",S.maxConcurrency=a.value.serialQueueEnabled?1:0,S.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(a.value.platform==="gemini"){const $e=a.value.refreshToken?6e5:31536e6;S.geminiOauth={access_token:a.value.accessToken,refresh_token:a.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+$e},a.value.projectId&&(S.projectId=a.value.projectId),S.priority=a.value.priority||50}else if(a.value.platform==="openai"){const $e=a.value.refreshToken?6e5:31536e6;S.openaiOauth={idToken:"",accessToken:a.value.accessToken||"",refreshToken:a.value.refreshToken,expires_in:Math.floor($e/1e3)},S.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},S.needsImmediateRefresh=!0,S.requireRefreshSuccess=!0,S.priority=a.value.priority||50}else if(a.value.platform==="droid")if(S.priority=a.value.priority||50,S.endpointType=a.value.endpointType||"anthropic",S.platform="droid",a.value.addType==="apikey"){const $e=nt(a.value.apiKeysInput);S.apiKeys=$e,S.authenticationMethod="api_key",S.isActive=!0,S.schedulable=!0}else{const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"",Se=new Date(Date.now()+8*60*60*1e3).toISOString();S.accessToken=$e,S.refreshToken=J,S.expiresAt=Se,S.expiresIn=8*60*60,S.tokenType="Bearer",S.authenticationMethod="manual"}else a.value.platform==="claude-console"||a.value.platform==="ccr"?(S.apiUrl=a.value.apiUrl,S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=la()||{},S.userAgent=a.value.userAgent||null,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,a.value.platform==="claude-console"&&(S.disableAutoProtection=!!a.value.disableAutoProtection,S.interceptWarmup=!!a.value.interceptWarmup),S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00",S.maxConcurrentTasks=a.value.maxConcurrentTasks||0):a.value.platform==="openai-responses"?(S.baseApi=a.value.baseApi,S.apiKey=a.value.apiKey,S.userAgent=a.value.userAgent||"",S.priority=a.value.priority||50,S.rateLimitDuration=60,S.dailyQuota=a.value.dailyQuota||0,S.quotaResetTime=a.value.quotaResetTime||"00:00"):a.value.platform==="gemini-antigravity"?(S.oauthProvider="antigravity",S.priority=a.value.priority||50):a.value.platform==="gemini-api"?(S.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",S.apiKey=a.value.apiKey,S.priority=a.value.priority||50,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]):a.value.platform==="bedrock"?(S.credentialType=a.value.credentialType||"access_key",a.value.credentialType==="access_key"?S.awsCredentials={accessKeyId:a.value.accessKeyId,secretAccessKey:a.value.secretAccessKey,sessionToken:a.value.sessionToken||null}:a.value.credentialType==="bearer_token"&&(S.bearerToken=a.value.bearerToken),S.region=a.value.region,S.defaultModel=a.value.defaultModel||null,S.smallFastModel=a.value.smallFastModel||null,S.priority=a.value.priority||50,S.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0):a.value.platform==="azure_openai"&&(S.azureEndpoint=a.value.azureEndpoint,S.apiKey=a.value.apiKey,S.apiVersion=a.value.apiVersion||"2024-02-01",S.deploymentName=a.value.deploymentName,S.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],S.priority=a.value.priority||50,S.isActive=a.value.isActive!==!1,S.schedulable=a.value.schedulable!==!1);let L;if(a.value.platform==="claude")L=await A.createClaudeAccount(S);else if(a.value.platform==="claude-console"||a.value.platform==="ccr")L=await A.createClaudeConsoleAccount(S);else if(a.value.platform==="droid")L=await A.createDroidAccount(S);else if(a.value.platform==="openai-responses")L=await A.createOpenAIResponsesAccount(S);else if(a.value.platform==="bedrock")L=await A.createBedrockAccount(S);else if(a.value.platform==="openai")L=await A.createOpenAIAccount(S);else if(a.value.platform==="azure_openai")L=await A.createAzureOpenAIAccount(S);else if(a.value.platform==="gemini"||a.value.platform==="gemini-antigravity")L=await A.createGeminiAccount(S);else if(a.value.platform==="gemini-api")L=await A.createGeminiApiAccount(S);else throw new Error(`不支持的平台: ${a.value.platform}`);z("success",L)}catch(Le){const S=((i=(ye=Le.response)==null?void 0:ye.data)==null?void 0:i.error)||Le.message||"账户创建失败",L=((me=(pe=Le.response)==null?void 0:pe.data)==null?void 0:me.suggestion)||"",$e=((He=(qe=Le.response)==null?void 0:qe.data)==null?void 0:He.errorDetails)||null;let J=S;L&&(J+=`
+${L}`),$e&&$e.error_description?J+=`
+详细信息: ${$e.error_description}`:$e&&$e.error&&$e.error.message&&(J+=`
+详细信息: ${$e.error.message}`),V(J,"error","",8e3)}finally{E.value=!1}}},At=async()=>{var d,t,ie,ye,i,pe,me,qe,He,Le;if(I.value.name="",I.value.apiKeys="",I.value.baseUrl="",!a.value.name||a.value.name.trim()===""){I.value.name="请填写账户名称";return}if(a.value.platform==="gemini-api"){const S=((d=a.value.baseUrl)==null?void 0:d.trim())||"";if(!S){I.value.baseUrl="请填写 API 基础地址";return}if(!S.endsWith("/models")){I.value.baseUrl="API 基础地址必须以 /models 结尾";return}}if(a.value.accountType==="group"&&(!a.value.groupIds||a.value.groupIds.length===0)){V("请选择一个分组","error");return}if(a.value.accountType==="group"&&(a.value.groupIds&&a.value.groupIds.length>0?a.value.groupId=a.value.groupIds[0]:a.value.groupId=""),!(a.value.platform==="gemini"&&(!a.value.projectId||a.value.projectId.trim()==="")&&!await P("项目 ID 未填写",`您尚未填写项目 ID。
+
+如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
+如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){E.value=!0;try{const S=xe(a.value.proxy),L={name:a.value.name,description:a.value.description,accountType:a.value.accountType,groupId:a.value.accountType==="group"?a.value.groupId:void 0,groupIds:a.value.accountType==="group"?a.value.groupIds:void 0,expiresAt:a.value.expiresAt||void 0,proxy:S};if(a.value.accessToken||a.value.refreshToken){const $e=((t=a.value.accessToken)==null?void 0:t.trim())||"",J=((ie=a.value.refreshToken)==null?void 0:ie.trim())||"";if(c.account.platform==="claude"){const Se=a.value.refreshToken?6e5:31536e6;L.claudeAiOauth={accessToken:$e||"",refreshToken:J||"",expiresAt:Date.now()+Se,scopes:c.account.scopes||[]}}else if(c.account.platform==="gemini"){const Se=a.value.refreshToken?6e5:31536e6;L.geminiOauth={access_token:$e||"",refresh_token:J||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+Se}}else if(c.account.platform==="openai"){const Se=a.value.refreshToken?6e5:31536e6;L.openaiOauth={idToken:"",accessToken:$e||"",refreshToken:J||"",expires_in:Math.floor(Se/1e3)},J&&J!==c.account.refreshToken&&(L.needsImmediateRefresh=!0,L.requireRefreshSuccess=!0)}else c.account.platform==="droid"&&($e&&(L.accessToken=$e),J&&(L.refreshToken=J))}if(c.account.platform==="droid"){const $e=((ye=a.value.apiKeysInput)==null?void 0:ye.trim())||"",J=a.value.apiKeyUpdateMode||"append";if(J==="delete"){if(!$e){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}const Se=nt($e);if(Se.length===0){I.value.apiKeys="请填写需要删除的 API Key",E.value=!1;return}L.removeApiKeys=Se,L.apiKeyUpdateMode="delete"}else{if($e){const Se=nt($e);if(Se.length===0){I.value.apiKeys="请至少填写一个 API Key",E.value=!1;return}L.apiKeys=Se}else J==="replace"&&(L.apiKeys=[]);(J!=="append"||$e)&&(L.apiKeyUpdateMode=J)}wt.value&&(L.authenticationMethod="api_key")}if(c.account.platform==="gemini"&&(L.projectId=a.value.projectId||""),c.account.platform==="droid"&&(L.priority=a.value.priority||50,L.endpointType=a.value.endpointType||"anthropic"),c.account.platform==="claude"&&(a.value.useUnifiedClientId&&!a.value.unifiedClientId&&(a.value.unifiedClientId=mt()),L.priority=a.value.priority||50,L.autoStopOnWarning=a.value.autoStopOnWarning||!1,L.interceptWarmup=a.value.interceptWarmup||!1,L.useUnifiedUserAgent=a.value.useUnifiedUserAgent||!1,L.useUnifiedClientId=a.value.useUnifiedClientId||!1,L.unifiedClientId=a.value.unifiedClientId||"",L.maxConcurrency=a.value.serialQueueEnabled?1:0,L.subscriptionInfo={accountType:a.value.subscriptionType||"claude_max",hasClaudeMax:a.value.subscriptionType==="claude_max",hasClaudePro:a.value.subscriptionType==="claude_pro",manuallySet:!0}),c.account.platform==="openai"&&(L.priority=a.value.priority||50),c.account.platform==="gemini"&&(L.priority=a.value.priority||50),c.account.platform==="claude-console"&&(L.apiUrl=a.value.apiUrl,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=la()||{},L.userAgent=a.value.userAgent||null,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0,L.disableAutoProtection=!!a.value.disableAutoProtection,L.interceptWarmup=!!a.value.interceptWarmup,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00",L.maxConcurrentTasks=a.value.maxConcurrentTasks||0),c.account.platform==="openai-responses"&&(L.baseApi=a.value.baseApi,a.value.apiKey&&(L.apiKey=a.value.apiKey),L.userAgent=a.value.userAgent||"",L.priority=a.value.priority||50,L.dailyQuota=a.value.dailyQuota||0,L.quotaResetTime=a.value.quotaResetTime||"00:00"),c.account.platform==="bedrock"&&(a.value.credentialType&&(L.credentialType=a.value.credentialType),a.value.credentialType==="access_key"?(a.value.accessKeyId||a.value.secretAccessKey||a.value.sessionToken)&&(L.awsCredentials={},a.value.accessKeyId&&(L.awsCredentials.accessKeyId=a.value.accessKeyId),a.value.secretAccessKey&&(L.awsCredentials.secretAccessKey=a.value.secretAccessKey),a.value.sessionToken!==void 0&&(L.awsCredentials.sessionToken=a.value.sessionToken||null)):a.value.credentialType==="bearer_token"&&a.value.bearerToken&&a.value.bearerToken.trim()&&(L.bearerToken=a.value.bearerToken),a.value.region&&(L.region=a.value.region),L.defaultModel=a.value.defaultModel||null,L.smallFastModel=a.value.smallFastModel||null,L.priority=a.value.priority||50,L.rateLimitDuration=a.value.enableRateLimit?a.value.rateLimitDuration||60:0),c.account.platform==="azure_openai"&&(L.azureEndpoint=a.value.azureEndpoint,L.apiVersion=a.value.apiVersion||"2024-02-01",L.deploymentName=a.value.deploymentName,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[],L.priority=a.value.priority||50,a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey)),c.account.platform==="gemini-api"&&(L.baseUrl=a.value.baseUrl||"https://generativelanguage.googleapis.com",a.value.apiKey&&a.value.apiKey.trim()&&(L.apiKey=a.value.apiKey),L.priority=a.value.priority||50,L.supportedModels=Array.isArray(a.value.supportedModels)?a.value.supportedModels:[]),c.account.platform==="claude")await A.updateClaudeAccount(c.account.id,L);else if(c.account.platform==="claude-console")await A.updateClaudeConsoleAccount(c.account.id,L);else if(c.account.platform==="openai-responses")await A.updateOpenAIResponsesAccount(c.account.id,L);else if(c.account.platform==="bedrock")await A.updateBedrockAccount(c.account.id,L);else if(c.account.platform==="openai")await A.updateOpenAIAccount(c.account.id,L);else if(c.account.platform==="azure_openai")await A.updateAzureOpenAIAccount(c.account.id,L);else if(c.account.platform==="gemini")await A.updateGeminiAccount(c.account.id,L);else if(c.account.platform==="gemini-api")await A.updateGeminiApiAccount(c.account.id,L);else if(c.account.platform==="droid")await A.updateDroidAccount(c.account.id,L);else throw new Error(`不支持的平台: ${c.account.platform}`);z("success")}catch(S){const L=((pe=(i=S.response)==null?void 0:i.data)==null?void 0:pe.error)||S.message||"账户更新失败",$e=((qe=(me=S.response)==null?void 0:me.data)==null?void 0:qe.suggestion)||"",J=((Le=(He=S.response)==null?void 0:He.data)==null?void 0:Le.errorDetails)||null;let Se=L;$e&&(Se+=`
+${$e}`),J&&J.error_description?Se+=`
+详细信息: ${J.error_description}`:J&&J.error&&J.error.message&&(Se+=`
+详细信息: ${J.error.message}`),V(Se,"error","",8e3)}finally{E.value=!1}}};ve(()=>a.value.name,()=>{var d;I.value.name&&((d=a.value.name)!=null&&d.trim())&&(I.value.name="")}),ve(()=>a.value.accessToken,()=>{var d;I.value.accessToken&&((d=a.value.accessToken)!=null&&d.trim())&&(I.value.accessToken="")}),ve(()=>a.value.refreshToken,()=>{var d;I.value.refreshToken&&((d=a.value.refreshToken)!=null&&d.trim())&&(I.value.refreshToken="")}),ve(()=>a.value.apiUrl,()=>{var d;I.value.apiUrl&&((d=a.value.apiUrl)!=null&&d.trim())&&(I.value.apiUrl="")}),ve(()=>a.value.apiKey,()=>{var d;I.value.apiKey&&((d=a.value.apiKey)!=null&&d.trim())&&(I.value.apiKey="")}),ve(()=>a.value.azureEndpoint,()=>{var d;I.value.azureEndpoint&&((d=a.value.azureEndpoint)!=null&&d.trim())&&(I.value.azureEndpoint="")}),ve(()=>a.value.deploymentName,()=>{var d;I.value.deploymentName&&((d=a.value.deploymentName)!=null&&d.trim())&&(I.value.deploymentName="")});const Ct=v([]),Wt=v(!1),Ut=v(!1),Bt=Z(()=>{let d=a.value.platform;return a.value.platform==="claude-console"||a.value.platform==="ccr"?d="claude":a.value.platform==="openai-responses"?d="openai":a.value.platform==="gemini-api"&&(d="gemini"),Ct.value.filter(t=>t.platform===d)}),Gt=async()=>{Wt.value=!0;try{const d=await sr();Ct.value=d.data||[]}catch{V("加载分组列表失败","error"),Ct.value=[]}finally{Wt.value=!1}},Ft=async()=>{await Gt(),V("分组列表已刷新","success")},Rt=()=>{Ut.value=!0},$a=async()=>{await Gt()},Aa=async()=>{var t;if(!((t=c.account)!=null&&t.id))return;const d=[typeof A.fetchDroidAccounts=="function"?A.fetchDroidAccounts:null,typeof A.fetchAllAccounts=="function"?A.fetchAllAccounts:null].filter(Boolean);for(const ie of d)try{await ie();return}catch(ye){console.error("刷新账户列表失败:",ye)}};ve(()=>a.value.platform,d=>{d==="claude-console"||d==="ccr"||d==="bedrock"||d==="openai-responses"?a.value.addType="manual":d==="claude"||d==="gemini"||d==="openai"?a.value.addType="oauth":(d==="gemini-api"||d==="azure_openai")&&(a.value.addType="apikey"),a.value.accountType==="group"&&(a.value.groupId="",a.value.groupIds=[])}),ve(()=>a.value.groupIds,d=>{a.value.accountType==="group"&&(d&&d.length>0?a.value.groupId=d[0]:a.value.groupId="")},{deep:!0}),ve(()=>a.value.addType,(d,t)=>{d!==t&&(d==="apikey"?(a.value.accessToken="",a.value.refreshToken="",I.value.accessToken="",I.value.refreshToken="",a.value.authenticationMethod="api_key",a.value.apiKeyUpdateMode="append"):t==="apikey"&&(a.value.apiKeysInput="",a.value.apiKeyUpdateMode="append",I.value.apiKeys="",M.value||(a.value.authenticationMethod="")))}),ve(()=>a.value.apiKeyUpdateMode,(d,t)=>{d!==t&&I.value.apiKeys&&(I.value.apiKeys="")}),ve(()=>a.value.apiKeysInput,d=>{if(!I.value.apiKeys)return;const t=nt(d),ie=a.value.apiKeyUpdateMode;if(ie==="append"&&t.length>0){I.value.apiKeys="";return}if(ie==="replace"){(t.length>0||!d||d.trim()==="")&&(I.value.apiKeys="");return}ie==="delete"&&t.length>0&&(I.value.apiKeys="")}),ve(de,d=>{if(!d||typeof d!="string")return;const t=d.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const i=new URL(t).searchParams.get("code");i?(de.value=i,V("成功提取授权码!","success")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{V("链接格式错误,请检查是否为完整的 URL","error")}else V("请粘贴以 http://localhost:45462 开头的链接","error")}),ve(()=>a.value.platform,d=>{M.value||z("platform-changed",d)}),ve(()=>a.value.accountType,d=>{d==="group"&&Ct.value.length===0&&Gt()}),ve(()=>a.value.groupId,d=>{d==="__new__"&&(a.value.groupId="",Ut.value=!0)});const Ca=()=>{Oe.value.push({from:"",to:""})},yt=d=>{Oe.value.splice(d,1)},De=(d,t)=>{if(Oe.value.some(ye=>ye.from===d)){V(`模型 ${d} 的映射已存在`,"info");return}Oe.value.push({from:d,to:t}),V(`已添加映射: ${d} → ${t}`,"success")},la=()=>{const d={};return U.value==="whitelist"?re.value.forEach(t=>{d[t]=t}):Oe.value.forEach(t=>{t.from&&t.to&&(d[t.from]=t.to)}),Object.keys(d).length>0?d:null};ve(()=>c.account,d=>{if(d){st();const t=Qe(d.proxy),ie=typeof d.authenticationMethod=="string"?d.authenticationMethod.trim().toLowerCase():"",ye=ie==="api_key"?"apikey":ie==="manual"?"manual":"oauth";let i="";d.accountType==="group"&&(i=d.groupId||d.groupInfo&&d.groupInfo.id||"");let pe="claude_max";if(d.subscriptionInfo){const me=typeof d.subscriptionInfo=="string"?JSON.parse(d.subscriptionInfo):d.subscriptionInfo;me.accountType?pe=me.accountType:me.hasClaudeMax?pe="claude_max":me.hasClaudePro?pe="claude_pro":pe="claude_free"}a.value={platform:d.platform,addType:ye,name:d.name,description:d.description||"",accountType:d.accountType||"shared",subscriptionType:pe,autoStopOnWarning:d.autoStopOnWarning||!1,interceptWarmup:d.interceptWarmup===!0||d.interceptWarmup==="true",useUnifiedUserAgent:d.useUnifiedUserAgent||!1,useUnifiedClientId:d.useUnifiedClientId||!1,unifiedClientId:d.unifiedClientId||"",serialQueueEnabled:(d.maxConcurrency||0)>0,groupId:i,groupIds:[],projectId:d.projectId||"",accessToken:"",refreshToken:"",authenticationMethod:d.authenticationMethod||"",apiKeysInput:"",apiKeyUpdateMode:"append",proxy:t,apiUrl:d.apiUrl||"",apiKey:"",priority:d.priority||50,supportedModels:(()=>{const me=d.supportedModels;return me?typeof me=="object"&&!Array.isArray(me)?Object.keys(me):Array.isArray(me)?me:[]:[]})(),userAgent:d.userAgent||"",enableRateLimit:!!(d.rateLimitDuration&&d.rateLimitDuration>0),rateLimitDuration:d.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:d.region||"",sessionToken:"",defaultModel:d.defaultModel||"",smallFastModel:d.smallFastModel||"",azureEndpoint:d.azureEndpoint||"",apiVersion:d.apiVersion||"",deploymentName:d.deploymentName||"",baseApi:d.baseApi||"",baseUrl:d.baseUrl||"https://generativelanguage.googleapis.com",dailyQuota:d.dailyQuota||0,dailyUsage:d.dailyUsage||0,quotaResetTime:d.quotaResetTime||"00:00",maxConcurrentTasks:d.maxConcurrentTasks||0,disableAutoProtection:d.disableAutoProtection===!0},d.platform==="claude-console"&&B(),d.accountType==="group"&&Gt().then(async()=>{const me=[];if(d.groupInfos&&Array.isArray(d.groupInfos)&&d.groupInfos.length>0)d.groupInfos.forEach(qe=>{qe&&qe.id&&me.push(qe.id)}),me.length>0&&(a.value.groupId=me[0]);else if(d.groupInfo&&d.groupInfo.id)a.value.groupId=d.groupInfo.id,me.push(d.groupInfo.id);else if(d.groupId)a.value.groupId=d.groupId,me.push(d.groupId);else if(d.groupIds&&Array.isArray(d.groupIds)&&d.groupIds.length>0)a.value.groupId=d.groupIds[0],me.push(...d.groupIds);else{const qe=Ct.value.map(async He=>{try{((await Vs(He.id)).data||[]).some(L=>L.id===d.id)&&(me.push(He.id),a.value.groupId||(a.value.groupId=He.id))}catch{}});await Promise.all(qe)}a.value.groupIds=me})}},{immediate:!0});const dt=async()=>{try{const d=await Ds();d.success&&d.userAgent?C.value=d.userAgent:C.value=""}catch{C.value=""}},_t=async()=>{G.value=!0;try{(await js()).success?(C.value="",V("统一User-Agent缓存已清除","success")):V("清除缓存失败","error")}catch(d){V("清除缓存失败:"+(d.message||"未知错误"),"error")}finally{G.value=!1}},mt=()=>{const d=new Uint8Array(32);return crypto.getRandomValues(d),Array.from(d,t=>t.toString(16).padStart(2,"0")).join("")},oa=()=>{a.value.unifiedClientId=mt(),V("已生成新的客户端标识","success")},Ta=()=>{a.value.useUnifiedClientId&&(a.value.useUnifiedUserAgent=!0,a.value.unifiedClientId||(a.value.unifiedClientId=mt()))},Ia=Z(()=>{const d=new Date;return d.setMinutes(d.getMinutes()+1),d.toISOString().slice(0,16)}),pt=()=>{if(!a.value.expireDuration){a.value.expiresAt=null;return}if(a.value.expireDuration==="custom")return;const d=new Date,ie=a.value.expireDuration.match(/(\d+)([d])/);if(ie){const[,ye,i]=ie,pe=parseInt(ye);i==="d"&&d.setDate(d.getDate()+pe),a.value.expiresAt=d.toISOString()}},na=()=>{a.value.customExpireDate&&(a.value.expiresAt=new Date(a.value.customExpireDate).toISOString())},Ua=d=>d?new Date(d).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"";return ra(()=>{var d;K.value=ze(a.value.platform),M.value&&st(),Re(),dt(),M.value&&((d=c.account)==null?void 0:d.platform)==="claude-console"&&B()}),ve(()=>a.value.platform,d=>{d==="claude"&&dt()}),(d,t)=>{var ie,ye;return o(),Xe(Mt,{to:"body"},[se.value?(o(),n("div",Ni,[e("div",qi,[e("div",Wi,[e("div",Bi,[t[171]||(t[171]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",Gi,u(M.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=i=>d.$emit("close"))},t[172]||(t[172]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!M.value&&(a.value.addType==="oauth"||a.value.addType==="setup-token")?(o(),n("div",Fi,[e("div",Qi,[e("div",Hi,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[173]||(t[173]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[175]||(t[175]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Ji,[e("div",{class:$(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",N.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[174]||(t[174]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):m("",!0),N.value===1&&!M.value?(o(),n("div",Yi,[e("div",Zi,[M.value?m("",!0):(o(),n("div",Xi,[t[215]||(t[215]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",ed,[e("div",td,[e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=i=>q("claude"))},[e("div",ad,[e("div",rd,[t[177]||(t[177]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),K.value==="claude"?(o(),n("div",sd,t[176]||(t[176]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[178]||(t[178]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[179]||(t[179]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=i=>q("openai"))},[e("div",ld,[e("div",od,[t[181]||(t[181]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),K.value==="openai"?(o(),n("div",nd,t[180]||(t[180]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[182]||(t[182]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[183]||(t[183]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=i=>q("gemini"))},[e("div",id,[e("div",dd,[t[185]||(t[185]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),K.value==="gemini"?(o(),n("div",ud,t[184]||(t[184]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[186]||(t[186]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[187]||(t[187]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:$(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[K.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=i=>q("droid"))},[e("div",pd,[e("div",gd,[t[189]||(t[189]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),K.value==="droid"?(o(),n("div",cd,t[188]||(t[188]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)]),t[190]||(t[190]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[191]||(t[191]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),K.value?(o(),n("div",yd,[t[214]||(t[214]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",md,[K.value==="claude"?(o(),n(ke,{key:0},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[5]||(t[5]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude"},null,512),[[Ie,a.value.platform]]),t[193]||(t[193]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="claude"?(o(),n("div",xd,t[192]||(t[192]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[6]||(t[6]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[Ie,a.value.platform]]),t[195]||(t[195]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),a.value.platform==="claude-console"?(o(),n("div",fd,t[194]||(t[194]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[7]||(t[7]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[Ie,a.value.platform]]),t[197]||(t[197]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),a.value.platform==="bedrock"?(o(),n("div",bd,t[196]||(t[196]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[8]||(t[8]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"ccr"},null,512),[[Ie,a.value.platform]]),t[199]||(t[199]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),a.value.platform==="ccr"?(o(),n("div",vd,t[198]||(t[198]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="openai"?(o(),n(ke,{key:1},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[9]||(t[9]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai"},null,512),[[Ie,a.value.platform]]),t[201]||(t[201]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="openai"?(o(),n("div",kd,t[200]||(t[200]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[10]||(t[10]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[Ie,a.value.platform]]),t[203]||(t[203]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),a.value.platform==="openai-responses"?(o(),n("div",hd,t[202]||(t[202]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[11]||(t[11]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[Ie,a.value.platform]]),t[205]||(t[205]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),a.value.platform==="azure_openai"?(o(),n("div",wd,t[204]||(t[204]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="gemini"?(o(),n(ke,{key:2},[e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[12]||(t[12]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini"},null,512),[[Ie,a.value.platform]]),t[207]||(t[207]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="gemini"?(o(),n("div",$d,t[206]||(t[206]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-antigravity"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[13]||(t[13]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-antigravity"},null,512),[[Ie,a.value.platform]]),t[209]||(t[209]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-rocket text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Antigravity"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"OAuth")])],-1)),a.value.platform==="gemini-antigravity"?(o(),n("div",Ad,t[208]||(t[208]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2),e("label",{class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="gemini-api"?"border-amber-500 bg-amber-50 dark:border-amber-400 dark:bg-amber-900/30":"border-gray-300 bg-white hover:border-amber-400 hover:bg-amber-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-amber-500 dark:hover:bg-amber-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[14]||(t[14]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"gemini-api"},null,512),[[Ie,a.value.platform]]),t[211]||(t[211]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-key text-sm text-amber-600 dark:text-amber-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini API"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Key")])],-1)),a.value.platform==="gemini-api"?(o(),n("div",Cd,t[210]||(t[210]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)],64)):m("",!0),K.value==="droid"?(o(),n("label",{key:3,class:$(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[a.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[b(e("input",{"onUpdate:modelValue":t[15]||(t[15]=i=>a.value.platform=i),class:"sr-only",type:"radio",value:"droid"},null,512),[[Ie,a.value.platform]]),t[213]||(t[213]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),a.value.platform==="droid"?(o(),n("div",Td,t[212]||(t[212]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):m("",!0)],2)):m("",!0)])])):m("",!0)])])),!M.value&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("div",Id,[t[220]||(t[220]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Ud,[e("label",_d,[b(e("input",{"onUpdate:modelValue":t[16]||(t[16]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[Ie,a.value.addType]]),e("span",Kd,[t[216]||(t[216]=f(" OAuth 授权",-1)),a.value.platform==="claude"||a.value.platform==="openai"?(o(),n("span",Sd," (用量可视化)")):m("",!0)])]),a.value.platform==="claude"?(o(),n("label",Md,[b(e("input",{"onUpdate:modelValue":t[17]||(t[17]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[Ie,a.value.addType]]),t[217]||(t[217]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):m("",!0),e("label",Dd,[b(e("input",{"onUpdate:modelValue":t[18]||(t[18]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[Ie,a.value.addType]]),t[218]||(t[218]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),a.value.platform==="droid"?(o(),n("label",Pd,[b(e("input",{"onUpdate:modelValue":t[19]||(t[19]=i=>a.value.addType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[Ie,a.value.addType]]),t[219]||(t[219]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):m("",!0)])])):m("",!0),e("div",null,[t[221]||(t[221]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[20]||(t[20]=i=>a.value.name=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,a.value.name]]),I.value.name?(o(),n("p",jd,u(I.value.name),1)):m("",!0)]),e("div",null,[t[222]||(t[222]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[21]||(t[21]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[226]||(t[226]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Vd,[e("label",zd,[b(e("input",{"onUpdate:modelValue":t[22]||(t[22]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[223]||(t[223]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Ld,[b(e("input",{"onUpdate:modelValue":t[23]||(t[23]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[224]||(t[224]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Rd,[b(e("input",{"onUpdate:modelValue":t[24]||(t[24]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[225]||(t[225]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[227]||(t[227]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),!M.value&&a.value.platform!=="gemini-api"?(o(),n("div",Od,[t[231]||(t[231]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",Ed,[b(e("select",{"onUpdate:modelValue":t[25]||(t[25]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[228]||(t[228]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",Nd,[b(e("input",{"onUpdate:modelValue":t[26]||(t[26]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,qd),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",Wd,[t[229]||(t[229]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",Bd,t[230]||(t[230]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[232]||(t[232]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])):m("",!0),a.value.accountType==="group"?(o(),n("div",Gd,[t[234]||(t[234]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",Fd,[e("div",Qd,[e("div",Hd,[Bt.value.length===0?(o(),n("div",Jd," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[27]||(t[27]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,Yd),[[je,a.value.groupIds]]),e("span",Zd,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[233]||(t[233]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",Xd,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[28]||(t[28]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[236]||(t[236]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[f(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[f(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),f(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),f("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",e0,[e("div",null,[t[242]||(t[242]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"凭证类型 *",-1)),M.value?(o(),n("div",s0,[e("label",l0,[b(e("input",{"onUpdate:modelValue":t[31]||(t[31]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[239]||(t[239]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",o0,[b(e("input",{"onUpdate:modelValue":t[32]||(t[32]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",disabled:"",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[240]||(t[240]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])):(o(),n("div",t0,[e("label",a0,[b(e("input",{"onUpdate:modelValue":t[29]||(t[29]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"access_key"},null,512),[[Ie,a.value.credentialType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"AWS Access Key(访问密钥)",-1))]),e("label",r0,[b(e("input",{"onUpdate:modelValue":t[30]||(t[30]=i=>a.value.credentialType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"bearer_token"},null,512),[[Ie,a.value.credentialType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Bearer Token(长期令牌)",-1))])])),e("div",n0,[e("div",i0,[t[241]||(t[241]=e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("div",d0,[a.value.credentialType==="access_key"?(o(),n("p",u0," 使用 AWS Access Key ID 和 Secret Access Key 进行身份验证(支持临时凭证) ")):(o(),n("p",p0," 使用 AWS Bedrock API Keys 生成的 Bearer Token 进行身份验证,更简单、权限范围更小 ")),M.value?(o(),n("p",g0," 💡 编辑模式下凭证类型不可更改,如需切换类型请重新创建账户 ")):m("",!0)])])])]),a.value.credentialType==="access_key"?(o(),n("div",c0,[e("div",null,[e("label",y0,"AWS 访问密钥 ID "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[33]||(t[33]=i=>a.value.accessKeyId=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessKeyId}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Access Key ID",required:!M.value,type:"text"},null,10,m0),[[j,a.value.accessKeyId]]),I.value.accessKeyId?(o(),n("p",x0,u(I.value.accessKeyId),1)):m("",!0),M.value?(o(),n("p",f0," 💡 编辑模式下,留空则保持原有 Access Key ID 不变 ")):m("",!0)]),e("div",null,[e("label",b0,"AWS 秘密访问密钥 "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[34]||(t[34]=i=>a.value.secretAccessKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.secretAccessKey}]),placeholder:M.value?"留空则保持原有凭证不变":"请输入 AWS Secret Access Key",required:!M.value,type:"password"},null,10,v0),[[j,a.value.secretAccessKey]]),I.value.secretAccessKey?(o(),n("p",k0,u(I.value.secretAccessKey),1)):m("",!0),M.value?(o(),n("p",h0," 💡 编辑模式下,留空则保持原有 Secret Access Key 不变 ")):m("",!0)]),e("div",null,[t[243]||(t[243]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[35]||(t[35]=i=>a.value.sessionToken=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:M.value?"留空则保持原有 Session Token 不变":"如果使用临时凭证,请输入会话令牌",type:"password"},null,8,w0),[[j,a.value.sessionToken]]),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))])])):m("",!0),a.value.credentialType==="bearer_token"?(o(),n("div",$0,[e("label",A0,"Bearer Token "+u(M.value?"":"*"),1),b(e("input",{"onUpdate:modelValue":t[36]||(t[36]=i=>a.value.bearerToken=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.bearerToken}]),placeholder:M.value?"留空则保持原有 Bearer Token 不变":"请输入 AWS Bearer Token",required:!M.value,type:"password"},null,10,C0),[[j,a.value.bearerToken]]),I.value.bearerToken?(o(),n("p",T0,u(I.value.bearerToken),1)):m("",!0),M.value?(o(),n("p",I0," 💡 编辑模式下,留空则保持原有 Bearer Token 不变 ")):m("",!0),t[245]||(t[245]=e("div",{class:"mt-2 rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-key mt-0.5 text-green-600 dark:text-green-400"}),e("div",{class:"text-xs text-green-700 dark:text-green-300"},[e("p",{class:"mb-1 font-medium"},"Bearer Token 说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"输入 AWS Bedrock API Keys 生成的 Bearer Token"),e("li",null,"Bearer Token 仅限 Bedrock 服务访问,权限范围更小"),e("li",null,"相比 Access Key 更简单,无需 Secret Key"),e("li",null,[f(" 参考:"),e("a",{class:"text-green-600 underline dark:text-green-400",href:"https://aws.amazon.com/cn/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/",target:"_blank"},"AWS 官方文档")])])])])],-1))])):m("",!0),e("div",null,[t[246]||(t[246]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),b(e("input",{"onUpdate:modelValue":t[37]||(t[37]=i=>a.value.region=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[j,a.value.region]]),I.value.region?(o(),n("p",U0,u(I.value.region),1)):m("",!0),t[247]||(t[247]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600 dark:text-blue-400"}),e("div",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600 dark:text-blue-400"}," 💡 请输入完整的区域代码,如 us-east-1 ")])])],-1))]),e("div",null,[t[248]||(t[248]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[38]||(t[38]=i=>a.value.defaultModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[250]||(t[250]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[251]||(t[251]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[39]||(t[39]=i=>a.value.smallFastModel=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[252]||(t[252]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):m("",!0),a.value.platform==="azure_openai"&&!M.value?(o(),n("div",_0,[e("div",null,[t[253]||(t[253]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),b(e("input",{"onUpdate:modelValue":t[40]||(t[40]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",K0,u(I.value.azureEndpoint),1)):m("",!0),t[254]||(t[254]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[255]||(t[255]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[41]||(t[41]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[256]||(t[256]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),b(e("input",{"onUpdate:modelValue":t[42]||(t[42]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",S0,u(I.value.deploymentName),1)):m("",!0),t[258]||(t[258]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[43]||(t[43]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",M0,u(I.value.apiKey),1)):m("",!0),t[260]||(t[260]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",D0,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[44]||(t[44]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,P0),[[je,a.value.supportedModels]]),e("span",j0,u(i),1)])),64))]),t[262]||(t[262]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):m("",!0),a.value.platform==="bedrock"&&!M.value?(o(),n("div",V0,[e("div",null,[t[267]||(t[267]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",z0,[e("label",L0,[b(e("input",{"onUpdate:modelValue":t[45]||(t[45]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[263]||(t[263]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[264]||(t[264]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",R0,[t[265]||(t[265]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[46]||(t[46]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[266]||(t[266]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)])])):m("",!0),(a.value.platform==="claude-console"||a.value.platform==="ccr")&&!M.value?(o(),n("div",O0,[e("div",null,[t[268]||(t[268]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":t[47]||(t[47]=i=>a.value.apiUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[j,a.value.apiUrl]]),I.value.apiUrl?(o(),n("p",E0,u(I.value.apiUrl),1)):m("",!0)]),e("div",null,[t[269]||(t[269]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),b(e("input",{"onUpdate:modelValue":t[48]||(t[48]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",N0,u(I.value.apiKey),1)):m("",!0)]),e("div",q0,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[49]||(t[49]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[271]||(t[271]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[272]||(t[272]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[50]||(t[50]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[273]||(t[273]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[274]||(t[274]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[51]||(t[51]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[275]||(t[275]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[283]||(t[283]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",W0,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[52]||(t[52]=i=>U.value="whitelist")},t[276]||(t[276]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[53]||(t[53]=i=>U.value="mapping")},t[277]||(t[277]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",B0,[t[278]||(t[278]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",G0,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[54]||(t[54]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,F0),[[je,re.value]]),e("span",Q0,u(i.label),1)],2))),128))]),e("p",H0,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",J0,"(支持所有模型)")):m("",!0)])])):(o(),n("div",Y0,[t[282]||(t[282]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Z0,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,X0),[[j,i.from]]),t[280]||(t[280]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,eu),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[279]||(t[279]=[e("i",{class:"fas fa-trash"},null,-1)]),8,tu)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:Ca},t[281]||(t[281]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",au,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[55]||(t[55]=i=>De("claude-opus-4-5-20251101","claude-opus-4-5-20251101"))}," + Opus 4.5 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[56]||(t[56]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[57]||(t[57]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[58]||(t[58]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[59]||(t[59]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[60]||(t[60]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[61]||(t[61]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[62]||(t[62]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[63]||(t[63]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[285]||(t[285]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[290]||(t[290]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",ru,[e("label",su,[b(e("input",{"onUpdate:modelValue":t[64]||(t[64]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[286]||(t[286]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[287]||(t[287]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",lu,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[65]||(t[65]=i=>a.value.rateLimitDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[289]||(t[289]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",ou,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"上游错误处理",-1)),e("label",nu,[b(e("input",{"onUpdate:modelValue":t[66]||(t[66]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[293]||(t[293]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"&&!M.value?(o(),n("div",iu,[e("div",null,[t[294]||(t[294]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[67]||(t[67]=i=>a.value.baseApi=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[j,a.value.baseApi]]),t[295]||(t[295]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[296]||(t[296]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",du,[b(e("input",{"onUpdate:modelValue":t[68]||(t[68]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:R.value?"text":"password"},null,8,uu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[69]||(t[69]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[298]||(t[298]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[70]||(t[70]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[299]||(t[299]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),b(e("input",{"onUpdate:modelValue":t[71]||(t[71]=i=>a.value.rateLimitDuration=i),type:"hidden",value:"60"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]])])):m("",!0),a.value.platform==="gemini-api"&&!M.value?(o(),n("div",pu,[e("div",null,[t[300]||(t[300]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),b(e("input",{"onUpdate:modelValue":t[72]||(t[72]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",required:"",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",gu,u(I.value.baseUrl),1)):m("",!0),t[301]||(t[301]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[302]||(t[302]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[303]||(t[303]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[304]||(t[304]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",cu,[b(e("input",{"onUpdate:modelValue":t[73]||(t[73]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"AIzaSy...",required:"",type:R.value?"text":"password"},null,8,yu),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[74]||(t[74]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[305]||(t[305]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Google AI Studio 获取的 API 密钥 ",-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",mu,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",xu,[e("label",fu,[b(e("input",{"onUpdate:modelValue":t[75]||(t[75]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[306]||(t[306]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",bu,[b(e("input",{"onUpdate:modelValue":t[76]||(t[76]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[307]||(t[307]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[309]||(t[309]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",vu,[e("label",ku,[b(e("input",{"onUpdate:modelValue":t[77]||(t[77]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[310]||(t[310]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",hu,[e("label",wu,[b(e("input",{"onUpdate:modelValue":t[78]||(t[78]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[311]||(t[311]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",$u,[e("label",Au,[b(e("input",{"onUpdate:modelValue":t[79]||(t[79]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[312]||(t[312]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Cu,[e("label",Tu,[b(e("input",{"onUpdate:modelValue":t[80]||(t[80]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Iu,[t[314]||(t[314]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[315]||(t[315]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Uu,[e("div",_u,[e("p",Ku," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Du)):(o(),n("i",Mu)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Su)])])):(o(),n("div",Pu,t[313]||(t[313]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",ju,[e("label",Vu,[b(e("input",{"onUpdate:modelValue":t[81]||(t[81]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",zu,[t[319]||(t[319]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[320]||(t[320]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",Lu,[e("div",Ru,[e("div",{class:"mb-2 flex items-center justify-between"},[t[317]||(t[317]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[316]||(t[316]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Ou,[e("code",Eu,[e("span",Nu,u(a.value.unifiedClientId.substring(0,8)),1),e("span",qu,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Wu,u(a.value.unifiedClientId.substring(56)),1)])]),t[318]||(t[318]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[82]||(t[82]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.addType==="manual"&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",Bu,[e("div",Gu,[t[327]||(t[327]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[326]||(t[326]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),a.value.platform==="claude"?(o(),n("p",Fu," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Qu," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="openai"?(o(),n("p",Hu," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):a.value.platform==="droid"?(o(),n("p",Ju," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):m("",!0),e("div",Yu,[t[325]||(t[325]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),f(" 获取 Access Token 的方法: ")],-1)),a.value.platform==="claude"?(o(),n("p",Zu,t[323]||(t[323]=[f(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),f(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("p",Xu,t[324]||(t[324]=[f(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/.gemini/oauth_creds.json",-1),f(" 文件中的凭证。 ",-1)]))):a.value.platform==="openai"?(o(),n("p",ep," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):a.value.platform==="droid"?(o(),n("p",tp," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):m("",!0)]),a.value.platform!=="droid"?(o(),n("p",ap," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(o(),n("p",rp," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),a.value.platform==="openai"?(o(),n("div",sp,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[83]||(t[83]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[j,a.value.accessToken]]),t[329]||(t[329]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(o(),n("div",lp,[t[330]||(t[330]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[84]||(t[84]=i=>a.value.accessToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[j,a.value.accessToken]]),I.value.accessToken?(o(),n("p",op,u(I.value.accessToken),1)):m("",!0)])),a.value.platform==="openai"||a.value.platform==="droid"?(o(),n("div",np,[t[332]||(t[332]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),b(e("textarea",{"onUpdate:modelValue":t[85]||(t[85]=i=>a.value.refreshToken=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[j,a.value.refreshToken]]),I.value.refreshToken?(o(),n("p",ip,u(I.value.refreshToken),1)):m("",!0),e("p",dp,[t[331]||(t[331]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),a.value.platform==="openai"?(o(),n(ke,{key:0},[f(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(o(),n(ke,{key:1},[f(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(o(),n("div",up,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[86]||(t[86]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[j,a.value.refreshToken]])])),a.value.platform==="droid"?(o(),n("div",pp,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[87]||(t[87]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[335]||(t[335]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0)])):m("",!0),a.value.addType==="apikey"&&a.value.platform==="droid"?(o(),n("div",gp,[t[340]||(t[340]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[336]||(t[336]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),b(e("textarea",{"onUpdate:modelValue":t[88]||(t[88]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",cp,u(I.value.apiKeys),1)):m("",!0),t[337]||(t[337]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),e("div",null,[t[338]||(t[338]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[89]||(t[89]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[339]||(t[339]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))]),t[341]||(t[341]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),f("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。"),e("li",null," 若上游返回 4xx 错误码,该 Key 会被自动标记为异常;全部 Key 异常后账号将暂停调度。 ")])],-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[90]||(t[90]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",yp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[91]||(t[91]=i=>d.$emit("close"))}," 取消 "),(a.value.addType==="oauth"||a.value.addType==="setup-token")&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"&&a.value.platform!=="gemini-api"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ee}," 下一步 ",8,mp)):(o(),n("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:Ya},[E.value?(o(),n("div",fp)):m("",!0),f(" "+u(E.value?"创建中...":"创建"),1)],8,xp))])])])):m("",!0),N.value===2&&a.value.addType==="oauth"?(o(),Xe(ln,{key:2,ref_key:"oauthFlowRef",ref:ge,platform:a.value.platform,proxy:a.value.proxy,onBack:t[92]||(t[92]=i=>N.value=1),onSuccess:it},null,8,["platform","proxy"])):m("",!0),N.value===2&&a.value.addType==="setup-token"?(o(),n("div",bp,[a.value.platform==="claude"?(o(),n("div",vp,[e("div",kp,[e("div",hp,[t[363]||(t[363]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",wp,[t[362]||(t[362]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),e("div",$p,[t[344]||(t[344]=e("p",{class:"mb-3 text-sm font-medium text-blue-800 dark:text-blue-300"}," 选择授权方式: ",-1)),e("div",Ap,[e("label",Cp,[b(e("input",{"onUpdate:modelValue":t[93]||(t[93]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"manual",onChange:Lt},null,544),[[Ie,oe.value]]),t[342]||(t[342]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-link mr-1"}),f("手动授权 ")],-1))]),e("label",Tp,[b(e("input",{"onUpdate:modelValue":t[94]||(t[94]=i=>oe.value=i),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"radio",value:"cookie",onChange:Lt},null,544),[[Ie,oe.value]]),t[343]||(t[343]=e("span",{class:"text-sm text-blue-800 dark:text-blue-300"},[e("i",{class:"fas fa-cookie mr-1"}),f("Cookie 自动授权 ")],-1))])])]),oe.value==="manual"?(o(),n("div",Ip,[t[353]||(t[353]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Up,[e("div",_p,[t[347]||(t[347]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Kp,[t[346]||(t[346]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),D.value?(o(),n("div",Pp,[e("div",jp,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:D.value},null,8,Vp),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:Nt},[e("i",{class:$(le.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-blue-600 hover:text-blue-700",onClick:ut},t[345]||(t[345]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f("重新生成 ",-1)]))])):(o(),n("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:y.value,onClick:We},[y.value?(o(),n("div",Dp)):(o(),n("i",Mp)),f(" "+u(y.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,Sp))])])]),t[354]||(t[354]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),f("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",zp,[e("div",Lp,[t[352]||(t[352]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Rp,[t[350]||(t[350]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[351]||(t[351]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",Op,[e("div",null,[t[348]||(t[348]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),f("Authorization Code ")],-1)),b(e("textarea",{"onUpdate:modelValue":t[95]||(t[95]=i=>de.value=i),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[j,de.value]])]),t[349]||(t[349]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])):m("",!0),oe.value==="cookie"?(o(),n("div",Ep,[t[360]||(t[360]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 使用 sessionKey 自动完成授权,无需手动打开链接。 ",-1)),e("div",Np,[e("div",qp,[e("div",null,[e("label",Wp,[t[355]||(t[355]=e("i",{class:"fas fa-cookie text-blue-500"},null,-1)),t[356]||(t[356]=f("sessionKey ",-1)),X.value>1?(o(),n("span",Bp,u(X.value)+" 个 ",1)):m("",!0)]),b(e("textarea",{"onUpdate:modelValue":t[96]||(t[96]=i=>he.value=i),class:$(["form-input w-full resize-y border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value}]),placeholder:`每行一个 sessionKey,例如:
+sk-ant-sid01-xxxxx...
+sk-ant-sid01-yyyyy...`,rows:"3"},null,2),[[j,he.value]]),X.value>1?(o(),n("p",Gp,[t[357]||(t[357]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),f(" 将批量创建 "+u(X.value)+" 个账户 ",1)])):m("",!0),Q.value?(o(),n("p",Fp,u(Q.value),1)):m("",!0)]),e("div",null,[e("button",{class:"flex items-center text-xs text-blue-600 hover:text-blue-700",type:"button",onClick:t[97]||(t[97]=i=>H.value=!H.value)},[e("i",{class:$(H.value?"fas fa-chevron-down mr-1":"fas fa-chevron-right mr-1")},null,2),t[358]||(t[358]=f(" 如何获取 sessionKey? ",-1))]),H.value?(o(),n("div",Qp,t[359]||(t[359]=[e("ol",{class:"space-y-2 text-xs text-gray-600 dark:text-gray-300"},[e("li",null,[f("1. 在浏览器中登录 "),e("strong",null,"claude.ai")]),e("li",null,[f("2. 按 "),e("strong",null,"F12"),f(" 打开开发者工具")]),e("li",null,[f("3. 切换到 "),e("strong",null,'"Application"'),f(" (应用) 标签页")]),e("li",null,[f(" 4. 在左侧选择 "),e("strong",null,'"Cookies"'),f(" → "),e("strong",null,'"https://claude.ai"')]),e("li",null,[f("5. 找到键为 "),e("strong",null,'"sessionKey"'),f(" 的那一行")]),e("li",null,[f("6. 复制其 "),e("strong",null,'"Value"'),f(" (值) 列的内容")])],-1),e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(' sessionKey 通常以 "sk-ant-" 开头 ')],-1)]))):m("",!0)]),e("button",{class:"btn btn-primary w-full px-4 py-3",disabled:W.value||!he.value.trim(),type:"button",onClick:$t},[W.value?(o(),n("div",Jp)):(o(),n("i",Yp)),W.value&&h.value.total>1?(o(),n(ke,{key:2},[f(" 正在授权 "+u(h.value.current)+"/"+u(h.value.total)+"... ",1)],64)):W.value?(o(),n(ke,{key:3},[f(" 授权中... ")],64)):(o(),n(ke,{key:4},[f(" 开始自动授权 ")],64))],8,Hp)])]),t[361]||(t[361]=e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"提示:"),f("如果您设置了代理,Cookie授权也会使用相同的代理配置。 ")])],-1))])):m("",!0)])])])])):m("",!0),e("div",Zp,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[98]||(t[98]=i=>N.value=1)}," 上一步 "),oe.value==="manual"?(o(),n("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!gt.value||p.value,type:"button",onClick:qt},[p.value?(o(),n("div",eg)):m("",!0),f(" "+u(p.value?"验证中...":"完成授权"),1)],8,Xp)):m("",!0)])])):m("",!0),M.value?(o(),n("div",tg,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),b(e("input",{"onUpdate:modelValue":t[99]||(t[99]=i=>a.value.name=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[j,a.value.name]])]),e("div",null,[t[365]||(t[365]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":t[100]||(t[100]=i=>a.value.description=i),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,a.value.description]])]),e("div",null,[t[369]||(t[369]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",ag,[e("label",rg,[b(e("input",{"onUpdate:modelValue":t[101]||(t[101]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[Ie,a.value.accountType]]),t[366]||(t[366]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",sg,[b(e("input",{"onUpdate:modelValue":t[102]||(t[102]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[Ie,a.value.accountType]]),t[367]||(t[367]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",lg,[b(e("input",{"onUpdate:modelValue":t[103]||(t[103]=i=>a.value.accountType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[Ie,a.value.accountType]]),t[368]||(t[368]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[370]||(t[370]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),M.value?m("",!0):(o(),n("div",og,[t[374]||(t[374]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"到期时间 (可选)",-1)),e("div",ng,[b(e("select",{"onUpdate:modelValue":t[104]||(t[104]=i=>a.value.expireDuration=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:pt},t[371]||(t[371]=[e("option",{value:""},"永不过期",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[wa,a.value.expireDuration]]),a.value.expireDuration==="custom"?(o(),n("div",ig,[b(e("input",{"onUpdate:modelValue":t[105]||(t[105]=i=>a.value.customExpireDate=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:Ia.value,type:"datetime-local",onChange:na},null,40,dg),[[j,a.value.customExpireDate]])])):m("",!0),a.value.expiresAt?(o(),n("p",ug,[t[372]||(t[372]=e("i",{class:"fas fa-calendar-alt mr-1"},null,-1)),f(" 将于 "+u(Ua(a.value.expiresAt))+" 过期 ",1)])):(o(),n("p",pg,t[373]||(t[373]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f(" 账户永不过期 ",-1)])))]),t[375]||(t[375]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude Max/Pro 订阅的到期时间,到期后将停止调度此账户 ",-1))])),a.value.accountType==="group"?(o(),n("div",gg,[t[377]||(t[377]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",cg,[e("div",yg,[e("div",mg,[Bt.value.length===0?(o(),n("div",xg," 暂无可用分组 ")):m("",!0),(o(!0),n(ke,null,Ne(Bt.value,i=>(o(),n("label",{key:i.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[b(e("input",{"onUpdate:modelValue":t[106]||(t[106]=pe=>a.value.groupIds=pe),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i.id},null,8,fg),[[je,a.value.groupIds]]),e("span",bg,u(i.name)+" ("+u(i.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:Rt},t[376]||(t[376]=[e("i",{class:"fas fa-plus"},null,-1),f(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Ft},[e("i",{class:$(["fas fa-sync-alt",{"animate-spin":Wt.value}])},null,2)])])])):m("",!0),a.value.platform==="gemini"||a.value.platform==="gemini-antigravity"?(o(),n("div",vg,[t[378]||(t[378]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[107]||(t[107]=i=>a.value.projectId=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[j,a.value.projectId]]),t[379]||(t[379]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",kg,[t[382]||(t[382]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",hg,[e("label",wg,[b(e("input",{"onUpdate:modelValue":t[108]||(t[108]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[Ie,a.value.subscriptionType]]),t[380]||(t[380]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",$g,[b(e("input",{"onUpdate:modelValue":t[109]||(t[109]=i=>a.value.subscriptionType=i),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[Ie,a.value.subscriptionType]]),t[381]||(t[381]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[383]||(t[383]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):m("",!0),a.value.platform==="claude"?(o(),n("div",Ag,[e("label",Cg,[b(e("input",{"onUpdate:modelValue":t[110]||(t[110]=i=>a.value.autoStopOnWarning=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.autoStopOnWarning]]),t[384]||(t[384]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Tg,[e("label",Ig,[b(e("input",{"onUpdate:modelValue":t[111]||(t[111]=i=>a.value.serialQueueEnabled=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.serialQueueEnabled]]),t[385]||(t[385]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 启用账户级串行队列 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后强制该账户的用户消息串行处理,忽略全局串行队列设置。适用于并发限制较低的账户。 ")],-1))])])):m("",!0),a.value.platform==="claude"||a.value.platform==="claude-console"?(o(),n("div",Ug,[e("label",_g,[b(e("input",{"onUpdate:modelValue":t[112]||(t[112]=i=>a.value.interceptWarmup=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.interceptWarmup]]),t[386]||(t[386]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 拦截预热请求 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,对标题生成、Warmup 等低价值请求直接返回模拟响应,不消耗上游 API 额度 ")],-1))])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Kg,[e("label",Sg,[b(e("input",{"onUpdate:modelValue":t[113]||(t[113]=i=>a.value.useUnifiedUserAgent=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.useUnifiedUserAgent]]),e("div",Mg,[t[388]||(t[388]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[389]||(t[389]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),C.value?(o(),n("div",Dg,[e("div",Pg,[e("p",jg," 💡 当前统一版本:"+u(C.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:G.value,type:"button",onClick:_t},[G.value?(o(),n("div",Lg)):(o(),n("i",zg)),f(" "+u(G.value?"清除中...":"清除缓存"),1)],8,Vg)])])):(o(),n("div",Rg,t[387]||(t[387]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):m("",!0),a.value.platform==="claude"?(o(),n("div",Og,[e("label",Eg,[b(e("input",{"onUpdate:modelValue":t[114]||(t[114]=i=>a.value.useUnifiedClientId=i),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:Ta},null,544),[[je,a.value.useUnifiedClientId]]),e("div",Ng,[t[393]||(t[393]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[394]||(t[394]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),a.value.useUnifiedClientId?(o(),n("div",qg,[e("div",Wg,[e("div",{class:"mb-2 flex items-center justify-between"},[t[391]||(t[391]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:oa},t[390]||(t[390]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),f(" 重新生成 ",-1)]))]),e("div",Bg,[e("code",Gg,[e("span",Fg,u(a.value.unifiedClientId.substring(0,8)),1),e("span",Qg,u(a.value.unifiedClientId.substring(8,56)),1),e("span",Hg,u(a.value.unifiedClientId.substring(56)),1)])]),t[392]||(t[392]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),f(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):m("",!0)])])])):m("",!0),e("div",null,[t[395]||(t[395]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),b(e("input",{"onUpdate:modelValue":t[115]||(t[115]=i=>a.value.priority=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[j,a.value.priority,void 0,{number:!0}]]),t[396]||(t[396]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),a.value.platform==="claude-console"||a.value.platform==="ccr"?(o(),n("div",Jg,[e("div",null,[t[397]||(t[397]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),b(e("input",{"onUpdate:modelValue":t[116]||(t[116]=i=>a.value.apiUrl=i),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[j,a.value.apiUrl]])]),e("div",null,[t[398]||(t[398]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[117]||(t[117]=i=>a.value.apiKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.apiKey]]),t[399]||(t[399]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",Yg,[e("div",null,[t[400]||(t[400]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[118]||(t[118]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]]),t[401]||(t[401]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[402]||(t[402]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[119]||(t[119]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,a.value.quotaResetTime]]),t[403]||(t[403]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),M.value&&a.value.dailyQuota>0?(o(),n("div",Zg,[e("div",Xg,[t[404]||(t[404]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",ec," $"+u(ht().toFixed(4))+" / $"+u(a.value.dailyQuota.toFixed(2)),1)]),e("div",tc,[e("div",{class:$(["absolute left-0 top-0 h-full rounded-full transition-all",ct.value>=90?"bg-red-500":ct.value>=70?"bg-yellow-500":"bg-green-500"]),style:Ze({width:`${Math.min(ct.value,100)}%`})},null,6)]),e("div",ac,[e("span",rc," 剩余: $"+u(Math.max(0,a.value.dailyQuota-ht()).toFixed(2)),1),e("span",sc,u(ct.value.toFixed(1))+"% 已使用 ",1)])])):m("",!0),e("div",null,[t[405]||(t[405]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[120]||(t[120]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[406]||(t[406]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))]),e("div",null,[t[414]||(t[414]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",lc,[e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[121]||(t[121]=i=>U.value="whitelist")},t[407]||(t[407]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),f(" 模型白名单 ",-1)]),2),e("button",{class:$(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",U.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[122]||(t[122]=i=>U.value="mapping")},t[408]||(t[408]=[e("i",{class:"fas fa-random mr-2"},null,-1),f(" 模型映射 ",-1)]),2)]),U.value==="whitelist"?(o(),n("div",oc,[t[409]||(t[409]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",nc,[(o(!0),n(ke,null,Ne(ne.value,i=>(o(),n("label",{key:i.value,class:$(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",re.value.includes(i.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[b(e("input",{"onUpdate:modelValue":t[123]||(t[123]=pe=>re.value=pe),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:i.value},null,8,ic),[[je,re.value]]),e("span",dc,u(i.label),1)],2))),128))]),e("p",uc,[f(" 已选择 "+u(re.value.length)+" 个模型 ",1),re.value.length===0?(o(),n("span",pc,"(支持所有模型)")):m("",!0)])])):(o(),n("div",gc,[t[413]||(t[413]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",cc,[(o(!0),n(ke,null,Ne(Oe.value,(i,pe)=>(o(),n("div",{key:pe,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":me=>i.from=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,yc),[[j,i.from]]),t[411]||(t[411]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":me=>i.to=me,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,mc),[[j,i.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:me=>yt(pe)},t[410]||(t[410]=[e("i",{class:"fas fa-trash"},null,-1)]),8,xc)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:Ca},t[412]||(t[412]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)])),e("div",fc,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[124]||(t[124]=i=>De("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-indigo-100 px-3 py-1 text-xs text-indigo-700 transition-colors hover:bg-indigo-200 dark:bg-indigo-900/30 dark:text-indigo-400 dark:hover:bg-indigo-900/50",type:"button",onClick:t[125]||(t[125]=i=>De("claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929"))}," + Sonnet 4.5 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[126]||(t[126]=i=>De("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[127]||(t[127]=i=>De("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-emerald-100 px-3 py-1 text-xs text-emerald-700 transition-colors hover:bg-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:hover:bg-emerald-900/50",type:"button",onClick:t[128]||(t[128]=i=>De("claude-haiku-4-5-20251001","claude-haiku-4-5-20251001"))}," + Haiku 4.5 "),e("button",{class:"rounded-lg bg-cyan-100 px-3 py-1 text-xs text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/30 dark:text-cyan-400 dark:hover:bg-cyan-900/50",type:"button",onClick:t[129]||(t[129]=i=>De("deepseek-chat","deepseek-chat"))}," + DeepSeek "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[130]||(t[130]=i=>De("Qwen","Qwen"))}," + Qwen "),e("button",{class:"rounded-lg bg-pink-100 px-3 py-1 text-xs text-pink-700 transition-colors hover:bg-pink-200 dark:bg-pink-900/30 dark:text-pink-400 dark:hover:bg-pink-900/50",type:"button",onClick:t[131]||(t[131]=i=>De("Kimi","Kimi"))}," + Kimi "),e("button",{class:"rounded-lg bg-teal-100 px-3 py-1 text-xs text-teal-700 transition-colors hover:bg-teal-200 dark:bg-teal-900/30 dark:text-teal-400 dark:hover:bg-teal-900/50",type:"button",onClick:t[132]||(t[132]=i=>De("GLM","GLM"))}," + GLM "),e("button",{class:"rounded-lg bg-amber-100 px-3 py-1 text-xs text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/30 dark:text-amber-400 dark:hover:bg-amber-900/50",type:"button",onClick:t[133]||(t[133]=i=>De("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[415]||(t[415]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[134]||(t[134]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[416]||(t[416]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[421]||(t[421]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",bc,[e("label",vc,[b(e("input",{"onUpdate:modelValue":t[135]||(t[135]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[417]||(t[417]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[418]||(t[418]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",kc,[t[419]||(t[419]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[136]||(t[136]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[420]||(t[420]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)]),a.value.platform==="claude-console"?(o(),n("div",hc,[t[423]||(t[423]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 上游错误处理 ",-1)),e("label",wc,[b(e("input",{"onUpdate:modelValue":t[137]||(t[137]=i=>a.value.disableAutoProtection=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,a.value.disableAutoProtection]]),t[422]||(t[422]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"}," 上游错误不自动暂停调度 ",-1))]),t[424]||(t[424]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 勾选后遇到 401/400/429/529 等上游错误仅记录日志并透传,不自动禁用或限流 ",-1))])):m("",!0)])):m("",!0),a.value.platform==="openai-responses"?(o(),n("div",$c,[e("div",null,[t[425]||(t[425]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[138]||(t[138]=i=>a.value.baseApi=i),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[j,a.value.baseApi]])]),e("div",null,[t[426]||(t[426]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",Ac,[b(e("input",{"onUpdate:modelValue":t[139]||(t[139]=i=>a.value.apiKey=i),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Cc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[140]||(t[140]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[427]||(t[427]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[428]||(t[428]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),b(e("input",{"onUpdate:modelValue":t[141]||(t[141]=i=>a.value.userAgent=i),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,a.value.userAgent]]),t[429]||(t[429]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),b(e("input",{"onUpdate:modelValue":t[142]||(t[142]=i=>a.value.rateLimitDuration=i),type:"hidden"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),e("div",Tc,[e("div",null,[t[430]||(t[430]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),b(e("input",{"onUpdate:modelValue":t[143]||(t[143]=i=>a.value.dailyQuota=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,a.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[431]||(t[431]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),b(e("input",{"onUpdate:modelValue":t[144]||(t[144]=i=>a.value.quotaResetTime=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[j,a.value.quotaResetTime]])])]),e("div",null,[t[432]||(t[432]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 最大并发任务数 ",-1)),b(e("input",{"onUpdate:modelValue":t[145]||(t[145]=i=>a.value.maxConcurrentTasks=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",type:"number"},null,512),[[j,a.value.maxConcurrentTasks,void 0,{number:!0}]]),t[433]||(t[433]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 限制该账户的并发请求数量,0 表示不限制 ",-1))])])):m("",!0),a.value.platform==="gemini-api"?(o(),n("div",Ic,[e("div",null,[t[434]||(t[434]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址",-1)),b(e("input",{"onUpdate:modelValue":t[146]||(t[146]=i=>a.value.baseUrl=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500 dark:border-red-400":I.value.baseUrl}]),placeholder:"https://generativelanguage.googleapis.com/v1beta/models",type:"url"},null,2),[[j,a.value.baseUrl]]),I.value.baseUrl?(o(),n("p",Uc,u(I.value.baseUrl),1)):m("",!0),t[435]||(t[435]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},[f(" 填写 API 基础地址,必须以 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/models"),f(" 结尾。系统会自动拼接 "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"/{model}:generateContent")],-1)),t[436]||(t[436]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 官方: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://generativelanguage.googleapis.com/v1beta/models")],-1)),t[437]||(t[437]=e("p",{class:"mt-0.5 text-xs text-gray-400 dark:text-gray-500"},[f(" 上游为 CRS: "),e("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-600"},"https://your-crs.com/gemini/v1beta/models")],-1))]),e("div",null,[t[438]||(t[438]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥",-1)),e("div",_c,[b(e("input",{"onUpdate:modelValue":t[147]||(t[147]=i=>a.value.apiKey=i),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空表示不更新",type:R.value?"text":"password"},null,8,Kc),[[ka,a.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[148]||(t[148]=i=>R.value=!R.value)},[e("i",{class:$(R.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[439]||(t[439]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))])])):m("",!0),a.value.platform==="bedrock"?(o(),n("div",Sc,[e("div",null,[t[440]||(t[440]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),b(e("input",{"onUpdate:modelValue":t[149]||(t[149]=i=>a.value.accessKeyId=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[j,a.value.accessKeyId]]),t[441]||(t[441]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[442]||(t[442]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),b(e("input",{"onUpdate:modelValue":t[150]||(t[150]=i=>a.value.secretAccessKey=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.secretAccessKey]]),t[443]||(t[443]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[444]||(t[444]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),b(e("input",{"onUpdate:modelValue":t[151]||(t[151]=i=>a.value.region=i),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[j,a.value.region]]),t[445]||(t[445]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[446]||(t[446]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[152]||(t[152]=i=>a.value.sessionToken=i),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[j,a.value.sessionToken]])]),e("div",null,[t[447]||(t[447]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[153]||(t[153]=i=>a.value.defaultModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[j,a.value.defaultModel]]),t[448]||(t[448]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[449]||(t[449]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[154]||(t[154]=i=>a.value.smallFastModel=i),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[j,a.value.smallFastModel]]),t[450]||(t[450]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[455]||(t[455]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",Mc,[e("label",Dc,[b(e("input",{"onUpdate:modelValue":t[155]||(t[155]=i=>a.value.enableRateLimit=i),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[je,a.value.enableRateLimit]]),t[451]||(t[451]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[452]||(t[452]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),a.value.enableRateLimit?(o(),n("div",Pc,[t[453]||(t[453]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":t[156]||(t[156]=i=>a.value.rateLimitDuration=i),class:"form-input w-full",min:"1",type:"number"},null,512),[[j,a.value.rateLimitDuration,void 0,{number:!0}]]),t[454]||(t[454]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):m("",!0)])])):m("",!0),a.value.platform==="azure_openai"?(o(),n("div",jc,[e("div",null,[t[456]||(t[456]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),b(e("input",{"onUpdate:modelValue":t[157]||(t[157]=i=>a.value.azureEndpoint=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[j,a.value.azureEndpoint]]),I.value.azureEndpoint?(o(),n("p",Vc,u(I.value.azureEndpoint),1)):m("",!0)]),e("div",null,[t[457]||(t[457]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),b(e("input",{"onUpdate:modelValue":t[158]||(t[158]=i=>a.value.apiVersion=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[j,a.value.apiVersion]]),t[458]||(t[458]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[459]||(t[459]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),b(e("input",{"onUpdate:modelValue":t[159]||(t[159]=i=>a.value.deploymentName=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[j,a.value.deploymentName]]),I.value.deploymentName?(o(),n("p",zc,u(I.value.deploymentName),1)):m("",!0)]),e("div",null,[t[460]||(t[460]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":t[160]||(t[160]=i=>a.value.apiKey=i),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[j,a.value.apiKey]]),I.value.apiKey?(o(),n("p",Lc,u(I.value.apiKey),1)):m("",!0),t[461]||(t[461]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[462]||(t[462]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Rc,[(o(),n(ke,null,Ne(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],i=>e("label",{key:i,class:"flex cursor-pointer items-center"},[b(e("input",{"onUpdate:modelValue":t[161]||(t[161]=pe=>a.value.supportedModels=pe),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:i},null,8,Oc),[[je,a.value.supportedModels]]),e("span",Ec,u(i),1)])),64))]),t[463]||(t[463]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):m("",!0),M.value&&wt.value?(o(),n("div",Nc,[e("div",qc,[t[469]||(t[469]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",Wc,[e("div",Bc,[t[465]||(t[465]=e("h5",{class:"font-semibold text-purple-900 dark:text-purple-200"},"更新 API Key",-1)),e("button",{class:"flex items-center gap-1.5 rounded-lg bg-purple-600 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-purple-700 dark:bg-purple-500 dark:hover:bg-purple-600",type:"button",onClick:t[162]||(t[162]=i=>Ce.value=!0)},t[464]||(t[464]=[e("i",{class:"fas fa-list-ul"},null,-1),e("span",null,"管理 API Key",-1)]))]),e("p",Gc,[t[466]||(t[466]=f(" 当前已保存 ",-1)),e("strong",null,u(Vt.value),1),t[467]||(t[467]=f(" 条 API Key。您可以追加新的 Key,或通过下方模式快速覆盖、删除指定 Key。 ",-1))]),t[468]||(t[468]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;根据所选模式决定是追加、覆盖还是删除输入的 Key。 ",-1))])]),e("div",Fc,[e("div",null,[t[470]||(t[470]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),b(e("textarea",{"onUpdate:modelValue":t[163]||(t[163]=i=>a.value.apiKeysInput=i),class:$(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":I.value.apiKeys}]),placeholder:"根据模式填写;每行一个 API Key",rows:"6"},null,2),[[j,a.value.apiKeysInput]]),I.value.apiKeys?(o(),n("p",Qc,u(I.value.apiKeys),1)):m("",!0)]),e("div",Hc,[e("div",Jc,[t[471]||(t[471]=e("span",{class:"text-sm font-semibold text-purple-800 dark:text-purple-100"},"API Key 更新模式",-1)),e("span",Yc,u(Pt.value),1)]),e("div",Zc,[e("span",{class:"pointer-events-none absolute inset-y-0 rounded-2xl bg-gradient-to-r from-purple-500/90 via-purple-600 to-indigo-500/90 shadow-lg ring-1 ring-purple-100/80 transition-all duration-300 ease-out dark:from-purple-500/70 dark:via-purple-600/70 dark:to-indigo-500/70 dark:ring-purple-400/30",style:Ze(Dt.value)},null,4),(o(),n(ke,null,Ne(at,i=>e("button",{key:i.value,class:$(["relative z-10 flex items-center justify-center rounded-2xl px-2 text-xs font-semibold transition-all duration-200 ease-out focus:outline-none focus-visible:ring-2 focus-visible:ring-purple-500/60 dark:focus-visible:ring-purple-400/60",a.value.apiKeyUpdateMode===i.value?"text-white drop-shadow-sm":"text-purple-500/80 hover:text-purple-700 dark:text-purple-200/70 dark:hover:text-purple-100"]),type:"button",onClick:pe=>a.value.apiKeyUpdateMode=i.value},u(i.label),11,Xc)),64))]),e("p",ey,u(jt.value),1)]),t[472]||(t[472]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),f("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"追加模式会保留现有 Key 并在末尾追加新的 Key。"),e("li",null,"覆盖模式会先清空旧 Key 再写入上方的新列表。"),e("li",null,"删除模式会根据输入精准移除指定 Key,适合快速处理失效或被封禁的 Key。")])],-1))])])):m("",!0),!(M.value&&wt.value)&&a.value.platform!=="claude-console"&&a.value.platform!=="ccr"&&a.value.platform!=="bedrock"&&a.value.platform!=="azure_openai"&&a.value.platform!=="openai-responses"?(o(),n("div",ty,[t[475]||(t[475]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",ay,[e("div",null,[t[473]||(t[473]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[164]||(t[164]=i=>a.value.accessToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.accessToken]])]),e("div",null,[t[474]||(t[474]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),b(e("textarea",{"onUpdate:modelValue":t[165]||(t[165]=i=>a.value.refreshToken=i),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[j,a.value.refreshToken]])])])])):m("",!0),a.value.platform==="droid"?(o(),n("div",ry,[t[476]||(t[476]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":t[166]||(t[166]=i=>a.value.userAgent=i),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"factory-cli/0.32.1",type:"text"},null,512),[[j,a.value.userAgent]]),t[477]||(t[477]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空使用默认值 factory-cli/0.32.1,可根据需要自定义 ",-1))])):m("",!0),Ve(rr,{modelValue:a.value.proxy,"onUpdate:modelValue":t[167]||(t[167]=i=>a.value.proxy=i)},null,8,["modelValue"]),e("div",sy,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[168]||(t[168]=i=>d.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:E.value,type:"button",onClick:At},[E.value?(o(),n("div",oy)):m("",!0),f(" "+u(E.value?"更新中...":"更新"),1)],8,ly)])])):m("",!0)])])):m("",!0),Ve(Ja,{"cancel-text":T.value.cancelText,"confirm-text":T.value.confirmText,message:T.value.message,show:_.value,title:T.value.title,onCancel:Y,onConfirm:O},null,8,["cancel-text","confirm-text","message","show","title"]),Ut.value?(o(),Xe(jr,{key:1,onClose:t[169]||(t[169]=i=>Ut.value=!1),onRefresh:$a})):m("",!0),Ce.value?(o(),Xe(Ei,{key:2,"account-id":(ie=c.account)==null?void 0:ie.id,"account-name":(ye=c.account)==null?void 0:ye.name,onClose:t[170]||(t[170]=i=>Ce.value=!1),onRefresh:Aa},null,8,["account-id","account-name"])):m("",!0)])}}},mr=sa(ny,[["__scopeId","data-v-31bfe83b"]]),iy={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},dy={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto rounded-2xl bg-white/90 p-4 shadow-xl backdrop-blur-xl dark:bg-gray-800/95 dark:shadow-2xl sm:p-6 md:p-8"},uy={class:"mb-4 flex items-center justify-between sm:mb-6"},py={class:"flex items-center gap-2 sm:gap-3"},gy={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},cy={class:"space-y-6"},yy={key:0,class:"mt-1 text-xs text-red-500"},my={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},xy={key:0,class:"mt-1 text-xs text-red-500"},fy={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},by=["placeholder","required"],vy={key:0,class:"mt-1 text-xs text-red-500"},ky={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},hy={class:"mb-3"},wy={class:"inline-flex cursor-pointer items-center"},$y={key:0},Ay={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Cy={class:"mb-3 space-y-2"},Ty=["onUpdate:modelValue"],Iy=["onUpdate:modelValue"],Uy=["onClick"],_y={class:"mt-2 flex gap-3"},Ky=["disabled"],Sy={key:0,class:"loading-spinner mr-2"},My={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!0),_=Z(()=>!!c.account),T=v(!1),k=v({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),P=v(!0),O=v({}),Y=v([]),M=()=>{const y={};for(const p of Y.value){const D=(p.from||"").trim(),de=(p.to||"").trim();D&&de&&(y[D]=de)}return y},se=()=>{Y.value.push({from:"",to:""})},ge=y=>{Y.value.splice(y,1)},N=()=>{const y={};return(!k.value.name||k.value.name.trim().length===0)&&(y.name="名称不能为空"),(!k.value.apiUrl||k.value.apiUrl.trim().length===0)&&(y.apiUrl="API URL 不能为空"),!_.value&&(!k.value.apiKey||k.value.apiKey.trim().length===0)&&(y.apiKey="API Key 不能为空"),O.value=y,Object.keys(y).length===0},E=async()=>{if(N()){T.value=!0;try{if(_.value){const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,priority:k.value.priority,userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00",proxy:k.value.proxy||null,supportedModels:M()};k.value.apiKey&&k.value.apiKey.trim().length>0&&(y.apiKey=k.value.apiKey);const p=await zs(c.account.id,y);p.success?z("success"):V(p.message||"保存失败","error")}else{const y={name:k.value.name,description:k.value.description,apiUrl:k.value.apiUrl,apiKey:k.value.apiKey,priority:Number(k.value.priority||50),supportedModels:M(),userAgent:k.value.userAgent,rateLimitDuration:P.value?Number(k.value.rateLimitDuration||60):0,proxy:k.value.proxy,accountType:"shared",dailyQuota:Number(k.value.dailyQuota||0),quotaResetTime:k.value.quotaResetTime||"00:00"},p=await Ls(y);p.success?z("success"):V(p.message||"创建失败","error")}}catch(y){V(y.message||"请求失败","error")}finally{T.value=!1}}},R=()=>{if(!c.account)return;const y=c.account;k.value.name=y.name||"",k.value.description=y.description||"",k.value.apiUrl=y.apiUrl||"",k.value.priority=Number(y.priority||50),k.value.userAgent=y.userAgent||"",k.value.rateLimitDuration=Number(y.rateLimitDuration||60),k.value.dailyQuota=Number(y.dailyQuota||0),k.value.quotaResetTime=y.quotaResetTime||"00:00",k.value.proxy=y.proxy||null,P.value=k.value.rateLimitDuration>0,Y.value=[];const p=y.supportedModels||{};if(p&&typeof p=="object")for(const D of Object.keys(p))Y.value.push({from:D,to:p[D]})};return ra(()=>{_.value&&R()}),ve(()=>c.account,()=>{_.value&&R()}),(y,p)=>(o(),Xe(Mt,{to:"body"},[A.value?(o(),n("div",iy,[e("div",dy,[e("div",uy,[e("div",py,[p[13]||(p[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",gy,u(_.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[0]||(p[0]=D=>y.$emit("close"))},p[14]||(p[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",cy,[e("div",null,[p[15]||(p[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=D=>k.value.name=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[j,k.value.name]]),O.value.name?(o(),n("p",yy,u(O.value.name),1)):m("",!0)]),e("div",null,[p[16]||(p[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),b(e("textarea",{"onUpdate:modelValue":p[2]||(p[2]=D=>k.value.description=D),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[j,k.value.description]])]),e("div",my,[e("div",null,[p[17]||(p[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>k.value.apiUrl=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[j,k.value.apiUrl]]),O.value.apiUrl?(o(),n("p",xy,u(O.value.apiUrl),1)):m("",!0)]),e("div",null,[e("label",fy,"API Key "+u(_.value?"(留空不更新)":"*"),1),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=D=>k.value.apiKey=D),class:$(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":O.value.apiKey}]),placeholder:_.value?"留空表示不更新":"必填",required:!_.value,type:"password"},null,10,by),[[j,k.value.apiKey]]),O.value.apiKey?(o(),n("p",vy,u(O.value.apiKey),1)):m("",!0)])]),e("div",ky,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=D=>k.value.priority=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[j,k.value.priority,void 0,{number:!0}]]),p[19]||(p[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[p[20]||(p[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),b(e("input",{"onUpdate:modelValue":p[6]||(p[6]=D=>k.value.userAgent=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[j,k.value.userAgent]])])]),e("div",null,[p[24]||(p[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",hy,[e("label",wy,[b(e("input",{"onUpdate:modelValue":p[7]||(p[7]=D=>P.value=D),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[je,P.value]]),p[21]||(p[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),P.value?(o(),n("div",$y,[p[22]||(p[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[8]||(p[8]=D=>k.value.rateLimitDuration=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[j,k.value.rateLimitDuration,void 0,{number:!0}]]),p[23]||(p[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):m("",!0)]),e("div",Ay,[e("div",null,[p[25]||(p[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),b(e("input",{"onUpdate:modelValue":p[9]||(p[9]=D=>k.value.dailyQuota=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[j,k.value.dailyQuota,void 0,{number:!0}]]),p[26]||(p[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[p[27]||(p[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),b(e("input",{"onUpdate:modelValue":p[10]||(p[10]=D=>k.value.quotaResetTime=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[j,k.value.quotaResetTime]]),p[28]||(p[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[p[32]||(p[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),p[33]||(p[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),f(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Cy,[(o(!0),n(ke,null,Ne(Y.value,(D,de)=>(o(),n("div",{key:de,class:"flex items-center gap-2"},[b(e("input",{"onUpdate:modelValue":le=>D.from=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Ty),[[j,D.from]]),p[30]||(p[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),b(e("input",{"onUpdate:modelValue":le=>D.to=le,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Iy),[[j,D.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:le=>ge(de)},p[29]||(p[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Uy)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:se},p[31]||(p[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),f(" 添加模型映射 ",-1)]))]),e("div",null,[Ve(rr,{modelValue:k.value.proxy,"onUpdate:modelValue":p[11]||(p[11]=D=>k.value.proxy=D)},null,8,["modelValue"])]),e("div",_y,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:p[12]||(p[12]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:T.value,type:"button",onClick:E},[T.value?(o(),n("div",Sy)):m("",!0),f(" "+u(T.value?_.value?"保存中...":"创建中...":_.value?"保存":"创建"),1)],8,Ky)])])])])):m("",!0)]))}},xr=sa(My,[["__scopeId","data-v-3b48d107"]]),Dy={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Py={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},jy={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},Vy={class:"flex flex-1 items-start gap-3"},zy={class:"space-y-1"},Ly={class:"flex flex-wrap items-center gap-2"},Ry={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},Oy={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},Ey={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},Ny={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},qy={key:0},Wy={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},By={key:0,class:"flex h-[50vh] items-center justify-center"},Gy={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},Fy={class:"flex items-start justify-between"},Qy={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},Hy={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},Jy={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Yy={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},Zy={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Xy={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},em={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},tm={class:"flex items-center justify-between"},am={class:"font-semibold text-gray-900 dark:text-gray-100"},rm={class:"mt-2 flex items-center justify-between"},sm={class:"font-semibold text-gray-900 dark:text-gray-100"},lm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},om={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},nm={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},im={class:"flex items-center justify-between"},dm={class:"font-semibold text-gray-900 dark:text-gray-100"},um={class:"mt-2 flex items-center justify-between"},pm={class:"font-semibold text-gray-900 dark:text-gray-100"},gm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},cm={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},ym={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},mm={class:"flex items-center justify-between"},xm={class:"font-semibold text-gray-900 dark:text-gray-100"},fm={class:"mt-2 flex items-center justify-between"},bm={class:"font-semibold text-gray-900 dark:text-gray-100"},vm={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},km={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},hm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},wm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},$m={class:"flex items-center justify-between"},Am={class:"font-semibold text-gray-900 dark:text-gray-100"},Cm={class:"flex items-center justify-between"},Tm={class:"font-semibold text-gray-900 dark:text-gray-100"},Im={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Um={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},_m={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},Km={class:"flex items-center justify-between"},Sm={class:"font-semibold text-gray-900 dark:text-gray-100"},Mm={class:"flex items-center justify-between"},Dm={class:"font-semibold text-gray-900 dark:text-gray-100"},Pm={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},jm={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},Vm={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},zm={class:"flex items-center justify-between"},Lm={class:"font-semibold text-gray-900 dark:text-gray-100"},Rm={class:"flex items-center justify-between"},Om={class:"font-semibold text-gray-900 dark:text-gray-100"},Em={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Nm={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},qm={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},Wm={class:"text-xs text-gray-400 dark:text-gray-500"},Bm={class:"h-[260px] sm:h-[300px]"},Gm={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=Rs(),{isDarkMode:_}=Qr(A),T=Hr(),k=v(null);let P=null;const O={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini","gemini-api":"Gemini API",droid:"Droid",bedrock:"Claude AWS Bedrock"},Y=Z(()=>{var H;return O[(H=c.account)==null?void 0:H.platform]||"未知平台"}),M=Z(()=>{var H;return(H=c.account)!=null&&H.accountType?c.account.accountType==="dedicated"?"专属":c.account.accountType==="group"?"分组":"共享":"共享"}),se=Z(()=>({text:_.value?"#e5e7eb":"#374151",grid:_.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),ge=Z(()=>{var H;return((H=c.summary)==null?void 0:H.totalTokens)||0}),N=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.inputTokens)||0}),E=Z(()=>{var H,h;return((h=(H=c.overview)==null?void 0:H.total)==null?void 0:h.outputTokens)||0}),R=H=>{const h=Number(H||0);return Number.isNaN(h)?"$0.000000":h>=1?`$${h.toFixed(2)}`:h>=.01?`$${h.toFixed(3)}`:`$${h.toFixed(6)}`},y=H=>Math.round((Number(H)||0)*100)/100,p=H=>{if(!H)return"-";const h=new Date(H);if(Number.isNaN(h.getTime())){const G=H.split("-");return G.length===3?`${G[1]}-${G[2]}`:H}const X=String(h.getMonth()+1).padStart(2,"0"),C=String(h.getDate()).padStart(2,"0");return`${X}-${C}`},D=H=>{if(!H)return"暂无";const h=new Date(H);return Number.isNaN(h.getTime())?H:`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}-${String(h.getDate()).padStart(2,"0")} ${String(h.getHours()).padStart(2,"0")}:${String(h.getMinutes()).padStart(2,"0")}`},de=(H,h)=>{if(!H)return 0;const X=c.history.find(C=>C.date===H);return X&&X[h]||0},le=Z(()=>{var H,h;return c.generatedAt||((H=c.summary)==null?void 0:H.generatedAt)||((h=c.summary)==null?void 0:h.generated_at)||""}),ae=Z(()=>{var H,h,X,C,G,K,Ce,ze;return[{key:"totalCost",label:"30天总费用",value:((H=c.summary)==null?void 0:H.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:Je(((h=c.summary)==null?void 0:h.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((X=c.summary)==null?void 0:X.avgDailyCostFormatted)||R(((C=c.summary)==null?void 0:C.avgDailyCost)||0),subtitle:(G=c.summary)!=null&&G.actualDaysUsed&&((K=c.summary)==null?void 0:K.actualDaysUsed)<((Ce=c.summary)==null?void 0:Ce.days)?`基于 ${c.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:Je(y(((ze=c.summary)==null?void 0:ze.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),oe=async()=>{if(await ar(),!c.show||!k.value)return;if(P&&P.destroy(),!c.history||c.history.length===0){P=null;return}const H=c.history.map(C=>C.label),h=c.history.map(C=>C.cost||0),X=c.history.map(C=>C.requests||0);P=new Xs(k.value,{type:"line",data:{labels:H,datasets:[{label:"费用 (USD)",data:h,borderColor:se.value.cost,backgroundColor:se.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:X,borderColor:se.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:se.value.text}},tooltip:{callbacks:{label(C){return C.dataset.label==="费用 (USD)"?`${C.dataset.label}: ${R(C.parsed.y)}`:`${C.dataset.label}: ${Je(C.parsed.y)} 次`}}}},scales:{x:{ticks:{color:se.value.text},grid:{color:se.value.grid}},y:{position:"left",ticks:{color:se.value.text,callback:C=>R(C)},grid:{color:se.value.grid}},y1:{position:"right",ticks:{color:se.value.text,callback:C=>Je(C)},grid:{drawOnChartArea:!1}}}}})},he=()=>{P&&(P.destroy(),P=null)},W=()=>{he(),z("close")},Q=()=>{var H;(H=c.account)!=null&&H.id&&T.push({path:`/accounts/${c.account.id}/usage-records`,query:{platform:c.account.platform||c.account.accountType}})};return ve(()=>c.show,H=>{H&&!c.loading?oe():H||he()}),ve(()=>c.loading,H=>{!H&&c.show&&oe()}),ve(()=>c.history,()=>{c.show&&!c.loading&&oe()},{deep:!0}),ve(_,()=>{c.show&&!c.loading&&oe()}),Ha(()=>{he()}),(H,h)=>{var X,C,G,K,Ce,ze,Ke,Fe,Qe,xe,g,a,U,re,ne,Re,Oe,st,nt,at,Dt,Pt,jt,I,Tt,gt,ht,ct,Vt,wt,B,q,Ee,We,ut,Nt,qt,$t,zt,Lt,It;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Dy,[e("div",{class:"absolute inset-0",onClick:W}),e("div",Py,[e("div",jy,[e("div",Vy,[h[2]||(h[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",zy,[e("div",Ly,[e("h3",Ry,u(((X=F.account)==null?void 0:X.name)||((C=F.account)==null?void 0:C.email)||"账号使用详情"),1),(G=F.account)!=null&&G.platform?(o(),n("span",Oy,[h[0]||(h[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),f(u(Y.value),1)])):m("",!0),(K=F.account)!=null&&K.accountType?(o(),n("span",Ey,[h[1]||(h[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),f(u(M.value),1)])):m("",!0)]),e("p",Ny,[f(" 近 "+u(((Ce=F.summary)==null?void 0:Ce.days)||30)+" 天内的费用与请求趋势 ",1),(ze=F.summary)!=null&&ze.actualDaysUsed&&((Ke=F.summary)==null?void 0:Ke.actualDaysUsed)<((Fe=F.summary)==null?void 0:Fe.days)?(o(),n("span",qy," (日均基于实际使用 "+u(F.summary.actualDaysUsed)+" 天) ",1)):m("",!0)])])]),e("div",{class:"flex items-center gap-2"},[e("button",{class:"flex items-center gap-2 rounded-full bg-purple-100 px-3 py-2 text-xs font-semibold text-purple-700 transition hover:bg-purple-200 dark:bg-purple-500/10 dark:text-purple-200 dark:hover:bg-purple-500/20",onClick:Q},h[3]||(h[3]=[e("i",{class:"fas fa-clock"},null,-1),f(" 请求时间线 ",-1)])),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:W},h[4]||(h[4]=[e("i",{class:"fas fa-times"},null,-1)]))])]),e("div",Wy,[F.loading?(o(),n("div",By,h[5]||(h[5]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(o(),n(ke,{key:1},[e("div",Gy,[(o(!0),n(ke,null,Ne(ae.value,it=>(o(),n("div",{key:it.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",Fy,[e("div",null,[e("p",Qy,u(it.label),1),e("p",Hy,u(it.value),1),e("p",Jy,u(it.subtitle),1)]),e("div",Yy,[e("i",{class:$(["fas",it.icon,it.iconClass])},null,2)])])]))),128))]),e("div",Zy,[e("div",Xy,[h[9]||(h[9]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),f(" 今日概览 ")],-1)),e("div",em,[e("div",tm,[h[6]||(h[6]=e("span",null,"费用",-1)),e("span",am,u(((xe=(Qe=F.summary)==null?void 0:Qe.today)==null?void 0:xe.costFormatted)||"$0.000000"),1)]),e("div",rm,[h[7]||(h[7]=e("span",null,"请求",-1)),e("span",sm,u(Ye(Je)(((a=(g=F.summary)==null?void 0:g.today)==null?void 0:a.requests)||0)),1)]),e("div",lm,[h[8]||(h[8]=e("span",null,"Tokens",-1)),e("span",null,u(Ye(Je)(((re=(U=F.summary)==null?void 0:U.today)==null?void 0:re.tokens)||0)),1)])])]),e("div",om,[h[13]||(h[13]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),f(" 最高费用日 ")],-1)),e("div",nm,[e("div",im,[h[10]||(h[10]=e("span",null,"日期",-1)),e("span",dm,u(p((Re=(ne=F.summary)==null?void 0:ne.highestCostDay)==null?void 0:Re.date)),1)]),e("div",um,[h[11]||(h[11]=e("span",null,"费用",-1)),e("span",pm,u(((st=(Oe=F.summary)==null?void 0:Oe.highestCostDay)==null?void 0:st.formattedCost)||"$0.000000"),1)]),e("div",gm,[h[12]||(h[12]=e("span",null,"请求",-1)),e("span",null,u(Ye(Je)(de((at=(nt=F.summary)==null?void 0:nt.highestCostDay)==null?void 0:at.date,"requests"))),1)])])]),e("div",cm,[h[17]||(h[17]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),f(" 最高请求日 ")],-1)),e("div",ym,[e("div",mm,[h[14]||(h[14]=e("span",null,"日期",-1)),e("span",xm,u(p((Pt=(Dt=F.summary)==null?void 0:Dt.highestRequestDay)==null?void 0:Pt.date)),1)]),e("div",fm,[h[15]||(h[15]=e("span",null,"请求",-1)),e("span",bm,u(Ye(Je)(((I=(jt=F.summary)==null?void 0:jt.highestRequestDay)==null?void 0:I.requests)||0)),1)]),e("div",vm,[h[16]||(h[16]=e("span",null,"费用",-1)),e("span",null,u(R(de((gt=(Tt=F.summary)==null?void 0:Tt.highestRequestDay)==null?void 0:gt.date,"cost"))),1)])])])]),e("div",km,[e("div",hm,[h[21]||(h[21]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),f(" 累计 Token ")],-1)),e("div",wm,[e("div",$m,[h[18]||(h[18]=e("span",null,"30天总计",-1)),e("span",Am,u(Ye(Je)(ge.value)),1)]),e("div",Cm,[h[19]||(h[19]=e("span",null,"日均 Token",-1)),e("span",Tm,u(Ye(Je)(Math.round(((ht=F.summary)==null?void 0:ht.avgDailyTokens)||0))),1)]),e("div",Im,[h[20]||(h[20]=e("span",null,"输入 / 输出",-1)),e("span",null,u(Ye(Je)(N.value))+" / "+u(Ye(Je)(E.value)),1)])])]),e("div",Um,[h[25]||(h[25]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),f(" 平均速率 ")],-1)),e("div",_m,[e("div",Km,[h[22]||(h[22]=e("span",null,"RPM",-1)),e("span",Sm,u(((Vt=(ct=F.overview)==null?void 0:ct.averages)==null?void 0:Vt.rpm)??0),1)]),e("div",Mm,[h[23]||(h[23]=e("span",null,"TPM",-1)),e("span",Dm,u(((B=(wt=F.overview)==null?void 0:wt.averages)==null?void 0:B.tpm)??0),1)]),e("div",Pm,[h[24]||(h[24]=e("span",null,"日均请求 / Token",-1)),e("span",null,u(Ye(Je)(Math.round((((Ee=(q=F.overview)==null?void 0:q.averages)==null?void 0:Ee.dailyRequests)||0)*100)/100))+" / "+u(Ye(Je)(Math.round((((ut=(We=F.overview)==null?void 0:We.averages)==null?void 0:ut.dailyTokens)||0)*100)/100)),1)])])]),e("div",jm,[h[29]||(h[29]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),f(" 最近统计 ")],-1)),e("div",Vm,[e("div",zm,[h[26]||(h[26]=e("span",null,"今日请求",-1)),e("span",Lm,u(Ye(Je)(((qt=(Nt=F.overview)==null?void 0:Nt.daily)==null?void 0:qt.requests)||0)),1)]),e("div",Rm,[h[27]||(h[27]=e("span",null,"今日 Token",-1)),e("span",Om,u(Ye(Je)(((zt=($t=F.overview)==null?void 0:$t.daily)==null?void 0:zt.allTokens)||0)),1)]),e("div",Em,[h[28]||(h[28]=e("span",null,"今日费用",-1)),e("span",null,u(R(((It=(Lt=F.overview)==null?void 0:Lt.daily)==null?void 0:It.cost)||0)),1)])])])]),e("div",Nm,[e("div",qm,[h[30]||(h[30]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),f(" 30天费用与请求趋势 ")],-1)),e("span",Wm," 最新更新时间:"+u(D(le.value)),1)]),e("div",Bm,[e("canvas",{ref_key:"chartCanvas",ref:k,class:"h-full w-full"},null,512)])])],64))])])])):m("",!0)])}}},Fm=sa(Gm,[["__scopeId","data-v-c29b5f70"]]),Qm={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hm={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Jm={class:"mb-6 flex items-center justify-between"},Ym={class:"flex items-center gap-3"},Zm={class:"text-sm text-gray-600 dark:text-gray-400"},Xm={class:"space-y-6"},ex={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},tx={class:"flex items-center justify-between"},ax={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},rx={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},sx={class:"mb-3 grid grid-cols-3 gap-2"},lx=["onClick"],ox={key:0,class:"animate-fadeIn"},nx=["min"],ix={key:1,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},dx={class:"flex items-center justify-between"},ux={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},px={class:"flex gap-3 pt-2"},gx=["disabled"],cx={key:0,class:"loading-spinner mr-2"},yx={key:1,class:"fas fa-save mr-2"},mx={__name:"AccountExpiryEditModal",props:{show:{type:Boolean,required:!0},account:{type:Object,required:!0}},emits:["close","save"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(!1),T=hr({expireDuration:"",customExpireDate:"",expiresAt:null}),k=[{value:"",label:"永不过期"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],P=Z(()=>{const y=new Date;return y.setMinutes(y.getMinutes()+1),y.toISOString().slice(0,16)});ve(()=>z.show,y=>{y&&O()}),ve(()=>{var y;return(y=z.account)==null?void 0:y.id},y=>{y&&z.show&&O()});const O=()=>{_.value=!1,z.account.expiresAt?(T.expireDuration="custom",T.customExpireDate=new Date(z.account.expiresAt).toISOString().slice(0,16),T.expiresAt=z.account.expiresAt):(T.expireDuration="",T.customExpireDate="",T.expiresAt=null)},Y=y=>{if(T.expireDuration=y,!y){T.expiresAt=null;return}if(y==="custom")return;const p=new Date,D=y.match(/(\d+)([dhmy])/);if(D){const[,de,le]=D,ae=parseInt(de);switch(le){case"d":p.setDate(p.getDate()+ae);break;case"h":p.setHours(p.getHours()+ae);break;case"m":p.setMonth(p.getMonth()+ae);break;case"y":p.setFullYear(p.getFullYear()+ae);break}T.expiresAt=p.toISOString()}},M=()=>{if(T.customExpireDate)try{const[y,p]=T.customExpireDate.split("T"),[D,de,le]=y.split("-").map(Number),[ae,oe]=p.split(":").map(Number),he=new Date(D,de-1,le,ae,oe,0,0);if(isNaN(he.getTime())){console.error("Invalid date:",T.customExpireDate);return}T.expiresAt=he.toISOString()}catch(y){console.error("Failed to parse custom expire date:",y)}},se=y=>y?new Date(y).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",ge=y=>y?new Date(y){if(!y)return null;const p=new Date,de=new Date(y)-p,le=Math.ceil(de/(1e3*60*60*24));return de<0?{text:"已过期",class:"text-red-600"}:le<=7?{text:`${le} 天后过期`,class:"text-orange-600"}:le<=30?{text:`${le} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(le/30)} 个月后过期`,class:"text-green-600"}},E=()=>{_.value=!0,A("save",{accountId:z.account.id,expiresAt:T.expiresAt})};return _e({resetSaving:()=>{_.value=!1}}),(y,p)=>(o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Qm,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:p[0]||(p[0]=D=>y.$emit("close"))}),e("div",Hm,[e("div",Jm,[e("div",Ym,[p[6]||(p[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[p[5]||(p[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改到期时间",-1)),e("p",Zm,' 为 "'+u(F.account.name||"Account")+'" 设置新的到期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:p[1]||(p[1]=D=>y.$emit("close"))},p[7]||(p[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Xm,[e("div",ex,[e("div",tx,[e("div",null,[p[10]||(p[10]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",ax,[F.account.expiresAt?(o(),n(ke,{key:0},[f(u(se(F.account.expiresAt))+" ",1),N(F.account.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(F.account.expiresAt).class])}," ("+u(N(F.account.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[8]||(p[8]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),p[9]||(p[9]=f(" 永不过期 ",-1))],64))])]),e("div",rx,[e("i",{class:$(["fas fa-hourglass-half text-lg",F.account.expiresAt&&ge(F.account.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),e("div",null,[p[12]||(p[12]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",sx,[(o(),n(ke,null,Ne(k,D=>e("button",{key:D.value,class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration===D.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:de=>Y(D.value)},u(D.label),11,lx)),64)),e("button",{class:$(["rounded-lg px-3 py-2 text-sm font-medium transition-all",T.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:p[2]||(p[2]=D=>Y("custom"))},p[11]||(p[11]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),f(" 自定义 ",-1)]),2)])]),T.expireDuration==="custom"?(o(),n("div",ox,[p[13]||(p[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=D=>T.customExpireDate=D),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:P.value,type:"datetime-local",onChange:M},null,40,nx),[[j,T.customExpireDate]]),p[14]||(p[14]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为到期时间 ",-1))])):m("",!0),T.expiresAt!==F.account.expiresAt?(o(),n("div",ix,[e("div",dx,[e("div",null,[p[17]||(p[17]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),f(" 新的到期时间 ")],-1)),e("p",ux,[T.expiresAt?(o(),n(ke,{key:0},[f(u(se(T.expiresAt))+" ",1),N(T.expiresAt)?(o(),n("span",{key:0,class:$(["ml-2 text-xs font-normal",N(T.expiresAt).class])}," ("+u(N(T.expiresAt).text)+") ",3)):m("",!0)],64)):(o(),n(ke,{key:1},[p[15]||(p[15]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),p[16]||(p[16]=f(" 永不过期 ",-1))],64))])]),p[18]||(p[18]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):m("",!0),e("div",px,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:p[4]||(p[4]=D=>y.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:_.value||T.expiresAt===F.account.expiresAt,onClick:E},[_.value?(o(),n("div",cx)):(o(),n("i",yx)),f(" "+u(_.value?"保存中...":"保存更改"),1)],8,gx)])])])])):m("",!0)]))}},xx=sa(mx,[["__scopeId","data-v-f19e4a71"]]),fx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},bx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},vx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},kx={class:"flex items-center gap-3"},hx={class:"text-xs text-gray-500 dark:text-gray-400"},wx=["disabled"],$x={class:"px-5 py-4"},Ax={class:"mb-4 space-y-2"},Cx={class:"flex items-center justify-between text-sm"},Tx={key:0,class:"flex items-center justify-between text-sm"},Ix={class:"flex items-center justify-between text-sm"},Ux=["disabled"],_x=["value"],Kx={class:"flex items-center gap-3"},Sx={class:"text-xs text-gray-500 dark:text-gray-400"},Mx={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Dx={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Px={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},jx={class:"max-h-40 overflow-y-auto p-3"},Vx={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},zx={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Lx={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Rx={key:2,class:"text-sm text-red-600 dark:text-red-400"},Ox={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Ex={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},Nx=["disabled"],qx=["disabled"],Wx={__name:"AccountTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close"],setup(F,{emit:_e}){const c=F,z=_e,A=v("idle"),_=v(""),T=v(""),k=v(0),P=v(null),O=v(null),Y=v(""),M=Z(()=>{if(!c.account)return[];const G=c.account.platform;return{claude:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],"claude-console":["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],bedrock:["claude-sonnet-4-5-20250929","claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],gemini:["gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash"],"openai-responses":["gpt-4o-mini","gpt-4o","o3-mini"],"azure-openai":[c.account.deploymentName||"gpt-4o-mini"],droid:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"],ccr:["claude-sonnet-4-20250514","claude-3-5-haiku-20241022"]}[G]||[]}),se=Z(()=>{if(!c.account)return"";const G=c.account.platform;return{claude:"claude-sonnet-4-5-20250929","claude-console":"claude-sonnet-4-5-20250929",bedrock:"claude-sonnet-4-5-20250929",gemini:"gemini-2.5-flash","openai-responses":"gpt-4o-mini","azure-openai":c.account.deploymentName||"gpt-4o-mini",droid:"claude-sonnet-4-20250514",ccr:"claude-sonnet-4-20250514"}[G]||""});ve(()=>c.account,()=>{Y.value=se.value},{immediate:!0});const ge=Z(()=>c.account?["claude","claude-console"].includes(c.account.platform):!1),N=Z(()=>{if(!c.account)return"未知";const G=c.account.platform;return{claude:"Claude OAuth","claude-console":"Claude Console",bedrock:"AWS Bedrock",gemini:"Gemini","openai-responses":"OpenAI Responses","azure-openai":"Azure OpenAI",droid:"Droid",ccr:"CCR"}[G]||G}),E=Z(()=>{if(!c.account)return"fas fa-question";const G=c.account.platform;return{claude:"fas fa-brain","claude-console":"fas fa-brain",bedrock:"fab fa-aws",gemini:"fas fa-gem","openai-responses":"fas fa-code","azure-openai":"fab fa-microsoft",droid:"fas fa-robot",ccr:"fas fa-key"}[G]||"fas fa-robot"}),R=Z(()=>{if(!c.account)return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.platform;return{claude:"bg-indigo-100 text-indigo-700 dark:bg-indigo-500/20 dark:text-indigo-300","claude-console":"bg-purple-100 text-purple-700 dark:bg-purple-500/20 dark:text-purple-300",bedrock:"bg-orange-100 text-orange-700 dark:bg-orange-500/20 dark:text-orange-300",gemini:"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300","openai-responses":"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300","azure-openai":"bg-cyan-100 text-cyan-700 dark:bg-cyan-500/20 dark:text-cyan-300",droid:"bg-pink-100 text-pink-700 dark:bg-pink-500/20 dark:text-pink-300",ccr:"bg-amber-100 text-amber-700 dark:bg-amber-500/20 dark:text-amber-300"}[G]||"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),y=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"Access Key":G==="bearer_token"?"Bearer Token":"Unknown"}),p=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"";const G=c.account.credentialType;return G==="access_key"?"fas fa-key":G==="bearer_token"?"fas fa-ticket":"fas fa-question"}),D=Z(()=>{if(!c.account||c.account.platform!=="bedrock")return"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300";const G=c.account.credentialType;return G==="access_key"?"bg-blue-100 text-blue-700 dark:bg-blue-500/20 dark:text-blue-300":G==="bearer_token"?"bg-green-100 text-green-700 dark:bg-green-500/20 dark:text-green-300":"bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"}),de=Z(()=>{switch(A.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),le=Z(()=>{const G=N.value||"API";switch(A.value){case"idle":return"点击下方按钮开始测试账户连通性";case"testing":return"正在发送测试请求并等待响应";case"success":return`账户可以正常访问 ${G}`;case"error":return T.value||`无法连接到 ${G}`;default:return""}}),ae=Z(()=>{switch(A.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),oe=Z(()=>{switch(A.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),he=Z(()=>{switch(A.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),W=Z(()=>{switch(A.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),Q=Z(()=>{switch(A.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});function H(){if(!c.account)return"";const G=c.account.platform;return{claude:`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test`,"claude-console":`${kt.apiPrefix}/admin/claude-console-accounts/${c.account.id}/test`,bedrock:`${kt.apiPrefix}/admin/bedrock-accounts/${c.account.id}/test`,gemini:`${kt.apiPrefix}/admin/gemini-accounts/${c.account.id}/test`,"openai-responses":`${kt.apiPrefix}/admin/openai-responses-accounts/${c.account.id}/test`,"azure-openai":`${kt.apiPrefix}/admin/azure-openai-accounts/${c.account.id}/test`,droid:`${kt.apiPrefix}/admin/droid-accounts/${c.account.id}/test`,ccr:`${kt.apiPrefix}/admin/ccr-accounts/${c.account.id}/test`}[G]||""}async function h(){var K;if(!c.account)return;A.value="testing",_.value="",T.value="",k.value=0,P.value=Date.now(),O.value&&O.value.close();const G=H();if(!G){A.value="error",T.value="不支持的账户类型";return}try{const Ce=localStorage.getItem("authToken"),ze=await fetch(G,{method:"POST",headers:{"Content-Type":"application/json",Authorization:Ce?`Bearer ${Ce}`:""},body:JSON.stringify({model:Y.value})});if(!ze.ok){const Ke=await ze.json().catch(()=>({}));throw new Error(Ke.message||`HTTP ${ze.status}`)}if(ge.value){const Ke=ze.body.getReader(),Fe=new TextDecoder;let Qe=!1;for(;!Qe;){const{done:xe,value:g}=await Ke.read();if(xe){Qe=!0;continue}const U=Fe.decode(g).split(`
+`);for(const re of U)if(re.startsWith("data: "))try{const ne=JSON.parse(re.substring(6));X(ne)}catch{}}}else{const Ke=await ze.json();k.value=Date.now()-P.value,Ke.success?(A.value="success",_.value=((K=Ke.data)==null?void 0:K.responseText)||"Test passed"):(A.value="error",T.value=Ke.message||"Test failed")}}catch(Ce){A.value="error",T.value=Ce.message||"连接失败",k.value=Date.now()-P.value}}function X(G){switch(G.type){case"test_start":break;case"content":_.value+=G.text;break;case"message_stop":break;case"test_complete":k.value=Date.now()-P.value,G.success?A.value="success":(A.value="error",T.value=G.error||"测试失败");break;case"error":A.value="error",T.value=G.error||"未知错误",k.value=Date.now()-P.value;break}}function C(){A.value!=="testing"&&(O.value&&(O.value.close(),O.value=null),A.value="idle",_.value="",T.value="",k.value=0,z("close"))}return ve(()=>c.show,G=>{var K;G&&(A.value="idle",_.value="",T.value="",k.value=0,((K=c.account)==null?void 0:K.platform)==="bedrock"?c.account.credentialType==="bearer_token"?Y.value="us.anthropic.claude-sonnet-4-5-20250929-v1:0":Y.value="us.anthropic.claude-3-5-haiku-20241022-v1:0":Y.value="claude-sonnet-4-5-20250929")}),Ha(()=>{O.value&&O.value.close()}),(G,K)=>{var Ce,ze;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",fx,[e("div",{class:"absolute inset-0",onClick:C}),e("div",bx,[e("div",vx,[e("div",kx,[e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",A.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":A.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:$(["fas",A.value==="idle"?"fa-vial":A.value==="testing"?"fa-spinner fa-spin":A.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[K[1]||(K[1]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"账户连通性测试",-1)),e("p",hx,u(((Ce=F.account)==null?void 0:Ce.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:A.value==="testing",onClick:C},K[2]||(K[2]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,wx)]),e("div",$x,[e("div",Ax,[e("div",Cx,[K[3]||(K[3]=e("span",{class:"text-gray-500 dark:text-gray-400"},"平台类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",R.value])},[e("i",{class:$(E.value)},null,2),f(" "+u(N.value),1)],2)]),((ze=c.account)==null?void 0:ze.platform)==="bedrock"?(o(),n("div",Tx,[K[4]||(K[4]=e("span",{class:"text-gray-500 dark:text-gray-400"},"账号类型",-1)),e("span",{class:$(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",D.value])},[e("i",{class:$(p.value)},null,2),f(" "+u(y.value),1)],2)])):m("",!0),e("div",Ix,[K[5]||(K[5]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),b(e("select",{"onUpdate:modelValue":K[0]||(K[0]=Ke=>Y.value=Ke),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-xs font-medium text-gray-700 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300",disabled:A.value==="testing"},[(o(!0),n(ke,null,Ne(M.value,Ke=>(o(),n("option",{key:Ke,value:Ke},u(Ke),9,_x))),128))],8,Ux),[[wa,Y.value]])])]),e("div",{class:$(["mb-4 rounded-xl border p-4 transition-all duration-300",ae.value])},[e("div",Kx,[e("div",{class:$(["flex h-8 w-8 items-center justify-center rounded-lg",oe.value])},[e("i",{class:$(["fas text-sm",he.value,W.value])},null,2)],2),e("div",null,[e("p",{class:$(["font-medium",Q.value])},u(de.value),3),e("p",Sx,u(le.value),1)])])],2),A.value!=="idle"?(o(),n("div",Mx,[e("div",Dx,[K[6]||(K[6]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),_.value?(o(),n("span",Px,u(_.value.length)+" 字符 ",1)):m("",!0)]),e("div",jx,[_.value?(o(),n("p",Vx,[f(u(_.value)+" ",1),A.value==="testing"?(o(),n("span",zx)):m("",!0)])):A.value==="testing"?(o(),n("p",Lx,K[7]||(K[7]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),f(" 等待响应中... ",-1)]))):A.value==="error"&&T.value?(o(),n("p",Rx,u(T.value),1)):m("",!0)])])):m("",!0),k.value>0?(o(),n("div",Ox,[K[8]||(K[8]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+u((k.value/1e3).toFixed(2))+" 秒",1)])):m("",!0)]),e("div",Ex,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:A.value==="testing",onClick:C}," 关闭 ",8,Nx),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",A.value==="testing"?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:A.value==="testing",onClick:h},[e("i",{class:$(["fas",A.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),f(" "+u(A.value==="testing"?"测试中...":A.value==="idle"?"开始测试":"重新测试"),1)],10,qx)])])])):m("",!0)])}}},Bx={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Gx={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Fx={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Qx={class:"flex items-center gap-3"},Hx={class:"text-xs text-gray-500 dark:text-gray-400"},Jx=["disabled"],Yx={class:"px-5 py-4"},Zx={key:0,class:"flex items-center justify-center py-8"},Xx={class:"mb-5 flex items-center justify-between"},ef={class:"mb-5"},tf=["disabled"],af={class:"mb-5"},rf={class:"flex flex-wrap gap-2"},sf=["disabled","onClick"],lf={class:"mb-5"},of=["disabled"],nf={class:"mt-2 flex flex-wrap gap-2"},df=["disabled","onClick"],uf={key:0,class:"mb-4"},pf={class:"max-h-40 space-y-2 overflow-y-auto rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},gf={class:"flex items-center gap-2"},cf={class:"text-gray-600 dark:text-gray-400"},yf={key:0,class:"text-gray-500 dark:text-gray-500"},mf=["title"],xf={key:1,class:"mb-4 rounded-lg border border-gray-200 bg-gray-50 p-4 text-center text-sm text-gray-500 dark:border-gray-700 dark:bg-gray-800/50 dark:text-gray-400"},ff={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},bf=["disabled"],vf=["disabled"],kf={__name:"AccountScheduledTestModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:null}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v({enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"}),k=v([]),P=[{label:"每天 8:00",value:"0 8 * * *"},{label:"每天 12:00",value:"0 12 * * *"},{label:"每天 18:00",value:"0 18 * * *"},{label:"每6小时",value:"0 */6 * * *"},{label:"每12小时",value:"0 */12 * * *"},{label:"工作日 9:00",value:"0 9 * * 1-5"}],O=[{label:"Claude Sonnet 4.5",value:"claude-sonnet-4-5-20250929"},{label:"Claude Haiku 4.5",value:"claude-haiku-4-5-20251001"},{label:"Claude Opus 4.5",value:"claude-opus-4-5-20251101"}];function Y(N){return N?new Date(N).toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"未知"}async function M(){var N,E;if(c.account){A.value=!0;try{const R=localStorage.getItem("authToken"),y=c.account.platform;let p="";if(y==="claude")p=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{A.value=!1;return}const D=await fetch(p,{headers:{Authorization:R?`Bearer ${R}`:""}});if(D.ok){const ae=await D.json();ae.success&&((N=ae.data)!=null&&N.config)&&(T.value={enabled:ae.data.config.enabled||!1,cronExpression:ae.data.config.cronExpression||"0 8 * * *",model:ae.data.config.model||"claude-sonnet-4-5-20250929"})}const de=p.replace("/test-config","/test-history"),le=await fetch(de,{headers:{Authorization:R?`Bearer ${R}`:""}});if(le.ok){const ae=await le.json();ae.success&&((E=ae.data)!=null&&E.history)&&(k.value=ae.data.history)}}catch(R){V("加载配置失败: "+R.message,"error")}finally{A.value=!1}}}async function se(){if(c.account){_.value=!0;try{const N=localStorage.getItem("authToken"),E=c.account.platform;let R="";if(E==="claude")R=`${kt.apiPrefix}/admin/claude-accounts/${c.account.id}/test-config`;else{_.value=!1;return}const y=await fetch(R,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:N?`Bearer ${N}`:""},body:JSON.stringify({enabled:T.value.enabled,cronExpression:T.value.cronExpression,model:T.value.model})});if(y.ok)V("配置已保存","success"),z("saved"),ge();else{const p=await y.json().catch(()=>({}));V(p.message||"保存失败","error")}}catch(N){V("保存失败: "+N.message,"error")}finally{_.value=!1}}}function ge(){_.value||z("close")}return ve(()=>c.show,N=>{N&&(T.value={enabled:!1,cronExpression:"0 8 * * *",model:"claude-sonnet-4-5-20250929"},k.value=[],M())}),(N,E)=>{var R;return o(),Xe(Mt,{to:"body"},[F.show?(o(),n("div",Bx,[e("div",{class:"absolute inset-0",onClick:ge}),e("div",Gx,[e("div",Fx,[e("div",Qx,[E[4]||(E[4]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-500 text-white shadow-lg"},[e("i",{class:"fas fa-clock"})],-1)),e("div",null,[E[3]||(E[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},"定时测试配置",-1)),e("p",Hx,u(((R=F.account)==null?void 0:R.name)||"未知账户"),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:_.value,onClick:ge},E[5]||(E[5]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Jx)]),e("div",Yx,[A.value?(o(),n("div",Zx,E[6]||(E[6]=[e("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),e("span",{class:"text-gray-500 dark:text-gray-400"},"加载配置中...",-1)]))):(o(),n(ke,{key:1},[e("div",Xx,[E[7]||(E[7]=e("div",null,[e("p",{class:"font-medium text-gray-700 dark:text-gray-300"},"启用定时测试"),e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"按计划自动测试账户连通性")],-1)),e("button",{class:$(["relative h-6 w-11 rounded-full transition-colors duration-200",T.value.enabled?"bg-green-500":"bg-gray-300 dark:bg-gray-600"]),onClick:E[0]||(E[0]=y=>T.value.enabled=!T.value.enabled)},[e("span",{class:$(["absolute top-0.5 h-5 w-5 rounded-full bg-white shadow-md transition-transform duration-200",T.value.enabled?"left-5":"left-0.5"])},null,2)],2)]),e("div",ef,[E[8]||(E[8]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," Cron 表达式 ",-1)),b(e("input",{"onUpdate:modelValue":E[1]||(E[1]=y=>T.value.cronExpression=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"0 8 * * *",type:"text"},null,8,tf),[[j,T.value.cronExpression]]),E[9]||(E[9]=e("p",{class:"mt-1.5 text-xs text-gray-500 dark:text-gray-400"},' 格式: 分 时 日 月 周 (例: "0 8 * * *" = 每天8:00) ',-1))]),e("div",af,[E[10]||(E[10]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 快捷设置 ",-1)),e("div",rf,[(o(),n(ke,null,Ne(P,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.cronExpression===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.cronExpression=y.value},u(y.label),11,sf)),64))])]),e("div",lf,[E[11]||(E[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 测试模型 ",-1)),b(e("input",{"onUpdate:modelValue":E[2]||(E[2]=y=>T.value.model=y),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 placeholder-gray-400 transition focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:placeholder-gray-500",disabled:!T.value.enabled,placeholder:"claude-sonnet-4-5-20250929",type:"text"},null,8,of),[[j,T.value.model]]),e("div",nf,[(o(),n(ke,null,Ne(O,y=>e("button",{key:y.value,class:$(["rounded-lg border px-3 py-1.5 text-xs font-medium transition",T.value.model===y.value?"border-blue-500 bg-blue-50 text-blue-700 dark:border-blue-400 dark:bg-blue-900/30 dark:text-blue-300":"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700",!T.value.enabled&&"cursor-not-allowed opacity-50"]),disabled:!T.value.enabled,onClick:p=>T.value.model=y.value},u(y.label),11,df)),64))])]),k.value.length>0?(o(),n("div",uf,[E[12]||(E[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最近测试记录 ",-1)),e("div",pf,[(o(!0),n(ke,null,Ne(k.value,(y,p)=>(o(),n("div",{key:p,class:"flex items-center justify-between text-xs"},[e("div",gf,[e("i",{class:$(["fas",y.success?"fa-check-circle text-green-500":"fa-times-circle text-red-500"])},null,2),e("span",cf,u(Y(y.timestamp)),1)]),y.latencyMs?(o(),n("span",yf,u(y.latencyMs)+"ms ",1)):y.error?(o(),n("span",{key:1,class:"max-w-[150px] truncate text-red-500",title:y.error},u(y.error),9,mf)):m("",!0)]))),128))])])):(o(),n("div",xf,E[13]||(E[13]=[e("i",{class:"fas fa-history mb-2 text-2xl text-gray-300 dark:text-gray-600"},null,-1),e("p",null,"暂无测试记录",-1)])))],64))]),e("div",ff,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:_.value,onClick:ge}," 取消 ",8,bf),e("button",{class:$(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",_.value?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:_.value||A.value,onClick:se},[e("i",{class:$(["fas",_.value?"fa-spinner fa-spin":"fa-save"])},null,2),f(" "+u(_.value?"保存中...":"保存配置"),1)],10,vf)])])])):m("",!0)])}}},hf={class:"min-w-[200px] space-y-1"},wf={key:0,class:"flex items-center gap-2"},$f={key:1,class:"flex items-center gap-2"},Af={class:"text-xs text-red-600 dark:text-red-400"},Cf=["disabled"],Tf={key:2,class:"space-y-1"},If={key:0,class:"text-xs text-red-500"},Uf={class:"flex items-center justify-between gap-2"},_f={class:"flex items-center gap-2"},Kf={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Sf=["disabled","title"],Mf={key:1,class:"space-y-2"},Df={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Pf={class:"space-y-1"},jf=["title"],Vf={class:"flex w-[94px] flex-col gap-0.5"},zf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-600"},Lf={class:"flex items-center justify-between text-[11px] text-gray-500 dark:text-gray-300"},Rf={key:0,class:"text-gray-400 dark:text-gray-400"},Of={key:2,class:"space-y-1"},Ef={class:"flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},Nf={class:"h-1.5 w-full rounded-full bg-gray-200 dark:bg-gray-700"},qf={class:"flex items-center justify-between text-xs"},Wf={class:"text-gray-500 dark:text-gray-400"},Bf={key:0,class:"text-gray-400 dark:text-gray-500"},Gf={key:3,class:"flex items-center gap-2"},Ff={key:4,class:"text-xs text-gray-400 dark:text-gray-500"},Qf={key:3,class:"text-xs text-gray-400 dark:text-gray-500"},fr={__name:"BalanceDisplay",props:{accountId:{type:String,required:!0},platform:{type:String,required:!0},initialBalance:{type:Object,default:null},hideRefresh:{type:Boolean,default:!1},autoLoad:{type:Boolean,default:!0},queryMode:{type:String,default:"local"}},emits:["refreshed","error"],setup(F,{expose:_e,emit:c}){const z=F,A=c,_=v(z.initialBalance),T=v(!1),k=v(!1),P=v(null),O=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300":W==="api","bg-gray-100 text-gray-600 dark:bg-gray-700/60 dark:text-gray-300":W==="cache","bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300":W==="local"}}),Y=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.source;return{api:"API",cache:"缓存",local:"本地"}[W]||"未知"}),M=Z(()=>{var Q;const W=(Q=_.value)==null?void 0:Q.quota;return!W||W.unlimited||typeof W.percentage!="number"||!Number.isFinite(W.percentage)?null:{used:W.used??0,remaining:W.remaining??0,percentage:W.percentage,resetAt:W.resetAt||null}}),se=Z(()=>{var W,Q;return((Q=(W=_.value)==null?void 0:W.quota)==null?void 0:Q.type)==="antigravity"}),ge=Z(()=>{var C,G;if(!se.value)return[];const W=(G=(C=_.value)==null?void 0:C.quota)==null?void 0:G.buckets,Q=Array.isArray(W)?W:[],H=new Map(Q.map(K=>[K==null?void 0:K.category,K])),h=["Gemini Pro","Claude","Gemini Flash","Gemini Image"],X={"Gemini Pro":{dotClass:"bg-blue-500",barClass:"bg-blue-500 dark:bg-blue-400"},Claude:{dotClass:"bg-purple-500",barClass:"bg-purple-500 dark:bg-purple-400"},"Gemini Flash":{dotClass:"bg-cyan-500",barClass:"bg-cyan-500 dark:bg-cyan-400"},"Gemini Image":{dotClass:"bg-emerald-500",barClass:"bg-emerald-500 dark:bg-emerald-400"}};return h.map(K=>{var Fe,Qe;const Ce=H.get(K)||null,ze=Ce==null?void 0:Ce.remaining,Ke=Number.isFinite(Number(ze))?Math.max(0,Math.min(100,Number(ze))):null;return{category:K,remainingPercent:Ke,remainingText:Ke===null?"—":`${Math.round(Ke)}%`,resetAt:(Ce==null?void 0:Ce.resetAt)||null,dotClass:((Fe=X[K])==null?void 0:Fe.dotClass)||"bg-gray-400",barClass:((Qe=X[K])==null?void 0:Qe.barClass)||"bg-gray-400"}})}),N=Z(()=>{var Q;const W=((Q=M.value)==null?void 0:Q.percentage)||0;return W>=90?"bg-red-500 dark:bg-red-600":W>=70?"bg-yellow-500 dark:bg-yellow-600":"bg-green-500 dark:bg-green-600"}),E=Z(()=>{if(z.queryMode==="api"||z.queryMode==="auto")return!0;const W=_.value;return!W||W.scriptEnabled===!1?!1:!!W.scriptConfigured}),R=Z(()=>{var W;return k.value?"刷新中...":E.value?se.value?"刷新配额(调用 Antigravity API)":"刷新余额(调用脚本配置的余额 API)":((W=_.value)==null?void 0:W.scriptEnabled)===!1?"余额脚本功能已禁用":"请先配置余额脚本"}),y=Z(()=>{var Q,H,h,X;if((H=(Q=_.value)==null?void 0:Q.balance)!=null&&H.formattedAmount)return _.value.balance.formattedAmount;const W=Number(((X=(h=_.value)==null?void 0:h.statistics)==null?void 0:X.dailyCost)||0);return`今日成本 ${ae(W)}`}),p=async()=>{if(!z.autoLoad||!z.accountId||!z.platform)return;T.value=!0,P.value=null;const W={platform:z.platform,queryApi:z.queryMode==="api"?!0:z.queryMode==="auto"?"auto":!1},Q=await Mr(z.accountId,W);Q!=null&&Q.success?_.value=Q.data:P.value=(Q==null?void 0:Q.error)||"加载失败",T.value=!1},D=async()=>{if(!z.accountId||!z.platform||k.value||!E.value)return;k.value=!0,P.value=null;const W=await Dr(z.accountId,{platform:z.platform});W!=null&&W.success?(_.value=W.data,A("refreshed",W.data)):P.value=(W==null?void 0:W.error)||"刷新失败",k.value=!1},de=async()=>{await p()},le=W=>{if(W===1/0)return"∞";const Q=Number(W);return Number.isFinite(Q)?se.value?`${Math.round(Q)}%`:Je(Q):"N/A"},ae=W=>{const Q=Number(W);return Number.isFinite(Q)?Q>=1?`$${Q.toFixed(2)}`:Q>=.01?`$${Q.toFixed(3)}`:`$${Q.toFixed(6)}`:"$0.00"},oe=W=>{const Q=new Date(W),H=new Date,h=Q.getTime()-H.getTime();if(!Number.isFinite(h))return"未知";if(h<0)return"已过期";const X=Math.floor(h/(1e3*60)),C=Math.floor(X/60),G=X%60;return C>=24?`${Math.floor(C/24)}天后`:`${C}小时${G}分钟`},he=W=>{const Q=new Date(W);return Number.isNaN(Q.getTime())?"未知":Q.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})};return ve(()=>z.initialBalance,W=>{W&&(_.value=W)}),ra(()=>{z.initialBalance||p()}),_e({refresh:D,reload:de}),(W,Q)=>{var H;return o(),n("div",hf,[T.value?(o(),n("div",wf,Q[0]||(Q[0]=[e("i",{class:"fas fa-spinner fa-spin text-gray-400 dark:text-gray-500"},null,-1),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):P.value?(o(),n("div",$f,[Q[1]||(Q[1]=e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)),e("span",Af,u(P.value),1),e("button",{class:"text-xs text-blue-500 hover:text-blue-600 dark:text-blue-400",disabled:k.value,onClick:de}," 重试 ",8,Cf)])):_.value?(o(),n("div",Tf,[_.value.status==="error"&&_.value.error?(o(),n("div",If,u(_.value.error),1)):m("",!0),e("div",Uf,[e("div",_f,[e("i",{class:$(["fas",_.value.balance?"fa-wallet text-green-600 dark:text-green-400":"fa-chart-line text-gray-500 dark:text-gray-400"])},null,2),e("span",Kf,u(y.value),1),e("span",{class:$(["rounded px-1.5 py-0.5 text-xs",O.value])},u(Y.value),3)]),F.hideRefresh?m("",!0):(o(),n("button",{key:0,class:"text-xs text-gray-500 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-40 dark:text-gray-400 dark:hover:text-blue-400",disabled:k.value||!E.value,title:R.value,onClick:D},[e("i",{class:$(["fas fa-sync-alt",{"fa-spin":k.value}])},null,2)],8,Sf))]),M.value&&se.value?(o(),n("div",Mf,[e("div",Df,[Q[2]||(Q[2]=e("span",null,"剩余",-1)),e("span",null,u(le(M.value.remaining)),1)]),e("div",Pf,[(o(!0),n(ke,null,Ne(ge.value,h=>(o(),n("div",{key:h.category,class:"flex items-center gap-2 rounded-md bg-gray-50 px-2 py-1.5 dark:bg-gray-700/60"},[e("span",{class:$(["h-2 w-2 shrink-0 rounded-full",h.dotClass])},null,2),e("span",{class:"min-w-0 flex-1 truncate text-xs font-medium text-gray-800 dark:text-gray-100",title:h.category},u(h.category),9,jf),e("div",Vf,[e("div",zf,[e("div",{class:$(["h-1.5 rounded-full transition-all",h.barClass]),style:Ze({width:`${h.remainingPercent??0}%`})},null,6)]),e("div",Lf,[e("span",null,u(h.remainingText),1),h.resetAt?(o(),n("span",Rf,u(oe(h.resetAt)),1)):m("",!0)])])]))),128))])])):M.value?(o(),n("div",Of,[e("div",Ef,[e("span",null,"已用: "+u(le(M.value.used)),1),e("span",null,"剩余: "+u(le(M.value.remaining)),1)]),e("div",Nf,[e("div",{class:$(["h-1.5 rounded-full transition-all",N.value]),style:Ze({width:`${Math.min(100,M.value.percentage)}%`})},null,6)]),e("div",qf,[e("span",Wf,u(M.value.percentage.toFixed(1))+"% 已使用 ",1),M.value.resetAt?(o(),n("span",Bf," 重置: "+u(oe(M.value.resetAt)),1)):m("",!0)])])):(H=_.value.quota)!=null&&H.unlimited?(o(),n("div",Gf,Q[3]||(Q[3]=[e("i",{class:"fas fa-infinity text-blue-500 dark:text-blue-400"},null,-1),e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},"无限制",-1)]))):m("",!0),_.value.cacheExpiresAt&&_.value.source==="cache"?(o(),n("div",Ff," 缓存至: "+u(he(_.value.cacheExpiresAt)),1)):m("",!0)])):(o(),n("div",Qf,"暂无余额数据"))])}}},Hf={class:"space-y-4"},Jf={class:"grid gap-3 md:grid-cols-2"},Yf={class:"space-y-2"},Zf={class:"space-y-2"},Xf={class:"space-y-2"},eb={class:"space-y-2"},tb={class:"space-y-2"},ab={class:"space-y-2"},rb={key:0,class:"rounded-lg bg-gray-50 p-3 text-sm dark:bg-gray-800/60"},sb={class:"flex items-center justify-between"},lb={class:"mt-2 text-xs text-gray-600 dark:text-gray-300"},ob={key:0},nb={key:1,class:"text-red-500"},ib={class:"text-xs text-gray-500 dark:text-gray-400"},db={class:"mt-1 whitespace-pre-wrap break-all"},ub={class:"text-xs text-gray-500 dark:text-gray-400"},pb={class:"mt-1 whitespace-pre-wrap break-all"},gb={class:"flex items-center gap-2"},br=`({
+ request: {
+ url: "{{baseUrl}}/api/user/self",
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ "Authorization": "Bearer {{apiKey}}",
+ "New-Api-User": "{{extra}}"
+ }
+ },
+ extractor: function (response) {
+ if (response && response.success && response.data) {
+ const quota = response.data.quota || 0;
+ const used = response.data.used_quota || 0;
+ return {
+ planName: response.data.group || "默认套餐",
+ remaining: quota / 500000,
+ used: used / 500000,
+ total: (quota + used) / 500000,
+ unit: "USD"
+ };
+ }
+ return {
+ isValid: false,
+ invalidMessage: (response && response.message) || "查询失败"
+ };
+ }
+})`,cb={__name:"AccountBalanceScriptModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})}},emits:["close","saved"],setup(F,{emit:_e}){const c=F,z=_e,A=v(!1),_=v(!1),T=v(null),k=hr({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:""}),P=()=>({baseUrl:"",apiKey:"",token:"",extra:"",timeoutSeconds:10,autoIntervalMinutes:0,scriptBody:br}),O=()=>z("close"),Y=()=>{Object.assign(k,P()),T.value=null,A.value=!1,_.value=!1},M=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;const y=await Ns(c.account.id,c.account.platform);y!=null&&y.success&&y.data&&Object.assign(k,y.data)},se=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;A.value=!0;const y=await Es(c.account.id,c.account.platform,{...k});y!=null&&y.success?(V("已保存","success"),z("saved")):V((y==null?void 0:y.message)||"保存失败","error"),A.value=!1},ge=async()=>{var p,D;if(!((p=c.account)!=null&&p.id)||!((D=c.account)!=null&&D.platform))return;_.value=!0,T.value=null;const y=await Os(c.account.id,c.account.platform,{...k});y!=null&&y.success?(T.value=y.data,V("测试完成","success")):V((y==null?void 0:y.error)||"测试失败","error"),_.value=!1},N=()=>{k.scriptBody=br},E=y=>y==null||Number.isNaN(Number(y))?"—":Number(y).toFixed(2),R=y=>{try{return JSON.stringify(y,null,2)}catch{return String(y)}};return ve(()=>c.show,y=>{y&&(Y(),M())}),(y,p)=>{var le;const D=qr,de=kr;return o(),Xe(de,{"append-to-body":!0,class:"balance-script-dialog","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":F.show,title:`配置余额脚本 - ${((le=F.account)==null?void 0:le.name)||""}`,top:"5vh",width:"720px",onClose:O},{footer:ot(()=>[e("div",gb,[Ve(D,{loading:_.value,onClick:ge},{default:ot(()=>p[20]||(p[20]=[f("测试脚本",-1)])),_:1,__:[20]},8,["loading"]),Ve(D,{loading:A.value,type:"primary",onClick:se},{default:ot(()=>p[21]||(p[21]=[f("保存配置",-1)])),_:1,__:[21]},8,["loading"]),Ve(D,{onClick:O},{default:ot(()=>p[22]||(p[22]=[f("取消",-1)])),_:1,__:[22]})])]),default:ot(()=>{var ae,oe,he,W,Q,H;return[e("div",Hf,[e("div",Jf,[e("div",Yf,[p[7]||(p[7]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"API Key",-1)),b(e("input",{"onUpdate:modelValue":p[0]||(p[0]=h=>k.apiKey=h),class:"input-text",placeholder:"access token / key"},null,512),[[j,k.apiKey]])]),e("div",Zf,[p[8]||(p[8]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"请求地址(baseUrl)",-1)),b(e("input",{"onUpdate:modelValue":p[1]||(p[1]=h=>k.baseUrl=h),class:"input-text",placeholder:"https://api.example.com"},null,512),[[j,k.baseUrl]])]),e("div",Xf,[p[9]||(p[9]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"Token(可选)",-1)),b(e("input",{"onUpdate:modelValue":p[2]||(p[2]=h=>k.token=h),class:"input-text",placeholder:"Bearer token"},null,512),[[j,k.token]])]),e("div",eb,[p[10]||(p[10]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"额外参数 (extra / userId)",-1)),b(e("input",{"onUpdate:modelValue":p[3]||(p[3]=h=>k.extra=h),class:"input-text",placeholder:"用户ID等"},null,512),[[j,k.extra]])]),e("div",tb,[p[11]||(p[11]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"超时时间(秒)",-1)),b(e("input",{"onUpdate:modelValue":p[4]||(p[4]=h=>k.timeoutSeconds=h),class:"input-text",min:"1",type:"number"},null,512),[[j,k.timeoutSeconds,void 0,{number:!0}]])]),e("div",ab,[p[12]||(p[12]=e("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-200"},"自动查询间隔(分钟)",-1)),b(e("input",{"onUpdate:modelValue":p[5]||(p[5]=h=>k.autoIntervalMinutes=h),class:"input-text",min:"0",type:"number"},null,512),[[j,k.autoIntervalMinutes,void 0,{number:!0}]]),p[13]||(p[13]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"0 表示仅手动刷新",-1))]),p[14]||(p[14]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400 md:col-span-2"}," 可用变量:"+u("{")+u("{")+"baseUrl"+u("}")+u("}")+"、"+u("{")+u("{")+"apiKey"+u("}")+u("}")+"、"+u("{")+u("{")+"token"+u("}")+u("}")+"、"+u("{")+u("{")+"accountId"+u("}")+u("}")+"、"+u("{")+u("{")+"platform"+u("}")+u("}")+"、"+u("{")+u("{")+"extra"+u("}")+u("}"),-1))]),e("div",null,[e("div",{class:"mb-2 flex items-center justify-between"},[p[15]||(p[15]=e("div",{class:"text-sm font-semibold text-gray-800 dark:text-gray-100"},"提取器代码",-1)),e("button",{class:"rounded bg-gray-200 px-2 py-1 text-xs dark:bg-gray-700",onClick:N}," 使用示例 ")]),b(e("textarea",{"onUpdate:modelValue":p[6]||(p[6]=h=>k.scriptBody=h),class:"min-h-[260px] w-full rounded-xl bg-gray-900 font-mono text-sm text-gray-100 shadow-inner focus:outline-none focus:ring-2 focus:ring-indigo-500",spellcheck:"false"},null,512),[[j,k.scriptBody]]),p[16]||(p[16]=e("div",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," extractor 可返回:isValid、invalidMessage、remaining、unit、planName、total、used、extra ",-1))]),T.value?(o(),n("div",rb,[e("div",sb,[p[17]||(p[17]=e("span",{class:"font-semibold"},"测试结果",-1)),e("span",{class:$(["rounded px-2 py-0.5 text-xs",((ae=T.value.mapped)==null?void 0:ae.status)==="success"?"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-200"])},u(((oe=T.value.mapped)==null?void 0:oe.status)||"unknown"),3)]),e("div",lb,[e("div",null,"余额: "+u(E((he=T.value.mapped)==null?void 0:he.balance)),1),e("div",null,"单位: "+u(((W=T.value.mapped)==null?void 0:W.currency)||"—"),1),(Q=T.value.mapped)!=null&&Q.planName?(o(),n("div",ob,"套餐: "+u(T.value.mapped.planName),1)):m("",!0),(H=T.value.mapped)!=null&&H.errorMessage?(o(),n("div",nb," 错误: "+u(T.value.mapped.errorMessage),1)):m("",!0)]),e("details",ib,[p[18]||(p[18]=e("summary",{class:"cursor-pointer"},"查看 extractor 输出",-1)),e("pre",db,u(R(T.value.extracted)),1)]),e("details",ub,[p[19]||(p[19]=e("summary",{class:"cursor-pointer"},"查看原始响应",-1)),e("pre",pb,u(R(T.value.response)),1)])])):m("",!0)])]}),_:1},8,["model-value","title"])}}},yb=sa(cb,[["__scopeId","data-v-5e76f743"]]),mb={class:"accounts-container"},xb={class:"card p-4 sm:p-6"},fb={class:"mb-4 flex flex-col gap-4 sm:mb-6"},bb={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},vb={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},kb={class:"group relative min-w-[160px]"},hb={class:"group relative min-w-[140px]"},wb={class:"group relative min-w-[160px]"},$b={class:"group relative min-w-[120px]"},Ab={class:"group relative min-w-[200px]"},Cb={class:"relative flex items-center"},Tb={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Ib={class:"relative"},Ub={class:"relative"},_b=["disabled"],Kb={class:"relative"},Sb=["disabled"],Mb={class:"relative"},Db={class:"relative"},Pb={key:0,class:"py-12 text-center"},jb={key:1,class:"py-12 text-center"},Vb={key:2,class:"table-wrapper hidden md:block"},zb={class:"w-full"},Lb={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Rb={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Ob={class:"flex items-center"},Eb=["indeterminate"],Nb={key:1,class:"fas fa-sort ml-1 text-gray-400"},qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Wb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Bb={class:"min-w-[210px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Gb={class:"flex items-center gap-2"},Fb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Qb={key:1,class:"fas fa-sort ml-1 text-gray-400"},Hb={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Jb={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},Yb={class:"flex items-center"},Zb=["value"],Xb={class:"flex items-center"},ev={class:"min-w-0"},tv={class:"flex items-center gap-2"},av=["onClick"],rv={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},sv={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},lv={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},ov={key:0,class:"my-2 flex flex-wrap items-center gap-2"},nv=["title"],iv=["title"],dv={class:"px-3 py-4"},uv={class:"flex items-center gap-1"},pv={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},gv={class:"text-xs font-medium text-yellow-700"},cv={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},yv={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},mv={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},xv={class:"text-xs font-medium text-gray-950"},fv={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},bv={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},vv={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},kv={class:"text-xs font-semibold text-indigo-800"},hv={class:"text-xs font-medium text-indigo-700"},wv={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},$v={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},Av={class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},Cv={key:9,class:"flex items-center gap-1.5 rounded-lg border border-amber-200 bg-gradient-to-r from-amber-100 to-yellow-100 px-2.5 py-1 dark:border-amber-700 dark:from-amber-900/20 dark:to-yellow-900/20"},Tv={key:10,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},Iv={class:"w-[100px] min-w-[100px] max-w-[100px] whitespace-nowrap px-3 py-4"},Uv={class:"flex flex-col gap-1"},_v={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Kv={key:0},Sv={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Mv=["title"],Dv={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Pv={class:"whitespace-nowrap px-3 py-4 text-sm"},jv={key:0,class:"space-y-1"},Vv={class:"flex items-center gap-2"},zv={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Lv={class:"flex items-center gap-2"},Rv={class:"text-xs text-gray-600 dark:text-gray-300"},Ov={class:"flex items-center gap-2"},Ev={class:"text-xs text-gray-600 dark:text-gray-300"},Nv={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},qv={key:1,class:"text-xs text-gray-400"},Wv={class:"whitespace-nowrap px-3 py-4"},Bv={class:"mt-1 text-xs"},Gv=["onClick"],Fv={class:"whitespace-nowrap px-3 py-4"},Qv={key:0,class:"space-y-2"},Hv={key:0,class:"space-y-2"},Jv={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Yv={class:"flex items-center gap-2"},Zv={class:"flex-1"},Xv={class:"flex items-center gap-2"},e1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},t1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},a1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},r1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},s1={class:"flex items-center gap-2"},l1={class:"flex-1"},o1={class:"flex items-center gap-2"},n1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},i1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},d1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},u1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},p1={class:"flex items-center gap-2"},g1={class:"flex-1"},c1={class:"flex items-center gap-2"},y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},m1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},x1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},f1={key:1,class:"space-y-2"},b1={key:0,class:"flex items-center gap-3 text-xs"},v1={class:"flex items-center gap-1"},k1={class:"font-medium text-gray-900 dark:text-gray-100"},h1={class:"flex items-center gap-1"},w1={class:"font-medium text-gray-900 dark:text-gray-100"},$1={class:"flex items-center gap-2"},A1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},C1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},T1={class:"text-xs text-gray-600 dark:text-gray-400"},I1={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},U1={key:2,class:"text-xs text-gray-400"},_1={key:1,class:"space-y-3"},K1={class:"flex items-center justify-between text-xs"},S1={class:"font-medium text-gray-700 dark:text-gray-200"},M1={class:"flex items-center gap-2"},D1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},P1={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},j1={class:"text-xs text-gray-600 dark:text-gray-400"},V1={class:"ml-2 text-gray-400"},z1={key:1,class:"text-sm text-gray-400"},L1={class:"space-y-1"},R1={class:"flex items-center justify-between text-xs"},O1={key:0,class:"font-medium text-gray-700 dark:text-gray-200"},E1={key:0,class:"flex items-center gap-2"},N1={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},q1={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-500 dark:bg-gray-700 dark:text-gray-300"},W1={key:2,class:"space-y-2"},B1={key:0,class:"space-y-2"},G1={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},F1={class:"flex items-center gap-2"},Q1={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},H1={class:"flex-1"},J1={class:"flex items-center gap-2"},Y1={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Z1={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},X1={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ek={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},tk={class:"flex items-center gap-2"},ak={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},rk={class:"flex-1"},sk={class:"flex items-center gap-2"},lk={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ok={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},nk={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},ik={key:1,class:"text-sm text-gray-400"},dk={key:3,class:"text-sm text-gray-400"},uk={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},pk={class:"whitespace-nowrap px-3 py-4"},gk={key:0,class:"flex items-center gap-2"},ck={class:"h-2 w-16 rounded-full bg-gray-200"},yk={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},mk={key:1,class:"text-sm text-gray-400"},xk={class:"px-3 py-4 text-sm text-gray-600"},fk=["title"],bk={key:1,class:"text-gray-400"},vk={class:"whitespace-nowrap px-3 py-4"},kk={class:"flex flex-col gap-1"},hk={key:0},wk=["onClick"],$k=["onClick"],Ak=["onClick"],Ck=["onClick"],Tk={class:"operations-column sticky right-0 z-10 whitespace-nowrap px-3 py-4 text-sm font-medium"},Ik={key:0,class:"flex items-center gap-1"},Uk=["disabled","title","onClick"],_k=["disabled","title","onClick"],Kk={class:"ml-1"},Sk=["onClick"],Mk=["onClick"],Dk=["onClick"],Pk=["onClick"],jk=["onClick"],Vk={key:1,class:"flex items-center gap-1"},zk=["disabled","title","onClick"],Lk={class:"ml-1"},Rk=["onClick"],Ok={key:3,class:"space-y-3 md:hidden"},Ek={class:"mb-3 flex items-start justify-between"},Nk={class:"flex items-center gap-3"},qk=["value"],Wk=["onClick"],Bk={class:"mt-0.5 flex items-center gap-2"},Gk={class:"text-xs text-gray-500 dark:text-gray-400"},Fk={class:"text-xs text-gray-500 dark:text-gray-400"},Qk={class:"mb-3 grid grid-cols-2 gap-3"},Hk={class:"space-y-1"},Jk={class:"flex items-center gap-1.5"},Yk={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Zk={class:"flex items-center gap-1.5"},Xk={class:"text-xs text-gray-600 dark:text-gray-400"},e2={class:"flex items-center gap-1.5"},t2={class:"text-xs text-gray-600 dark:text-gray-400"},a2={key:0,class:"space-y-1"},r2={class:"flex items-center gap-1.5"},s2={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},l2={class:"flex items-center gap-1.5"},o2={class:"text-xs text-gray-600 dark:text-gray-400"},n2={key:1,class:"text-sm font-semibold text-gray-400"},i2={class:"mb-3"},d2={class:"mt-1 text-xs"},u2=["onClick"],p2={class:"mb-3 space-y-2"},g2={key:0,class:"space-y-2"},c2={key:0,class:"space-y-2"},y2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},m2={class:"flex items-center gap-2"},x2={class:"flex-1"},f2={class:"flex items-center gap-2"},b2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},v2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},k2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},h2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},w2={class:"flex items-center gap-2"},$2={class:"flex-1"},A2={class:"flex items-center gap-2"},C2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},T2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},I2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},U2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},_2={class:"flex items-center gap-2"},K2={class:"flex-1"},S2={class:"flex items-center gap-2"},M2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},D2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},P2={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},j2={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},V2={class:"flex items-center justify-between text-xs"},z2={class:"flex items-center gap-1"},L2={class:"font-medium text-gray-700 dark:text-gray-200"},R2={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},O2={class:"flex items-center justify-between text-xs"},E2={class:"text-gray-500 dark:text-gray-400"},N2={key:0,class:"font-medium text-indigo-600"},q2={key:1,class:"text-gray-500"},W2={key:2,class:"text-xs text-gray-400"},B2={key:1,class:"space-y-2"},G2={key:0,class:"space-y-2"},F2={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Q2={class:"flex items-center gap-2"},H2={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},J2={class:"flex-1"},Y2={class:"flex items-center gap-2"},Z2={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},X2={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},e3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},t3={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},a3={class:"flex items-center gap-2"},r3={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},s3={class:"flex-1"},l3={class:"flex items-center gap-2"},o3={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},n3={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},i3={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},d3={key:1,class:"text-xs text-gray-400"},u3={class:"flex items-center justify-between text-xs"},p3={class:"text-gray-700 dark:text-gray-200"},g3={key:2,class:"flex items-center justify-between text-xs"},c3={class:"text-gray-700 dark:text-gray-200"},y3={class:"flex items-center justify-between text-xs"},m3={class:"font-medium text-gray-700 dark:text-gray-200"},x3={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},f3=["disabled","onClick"],b3=["onClick"],v3=["onClick"],k3=["onClick"],h3=["onClick"],w3=["onClick"],$3={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},A3={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},C3={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},T3={class:"flex items-center gap-2"},I3=["value"],U3={class:"flex items-center gap-2"},_3=["disabled"],K3={class:"flex items-center gap-1"},S3={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},M3=["onClick"],D3={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},P3=["disabled"],j3={class:"space-y-4"},V3={class:"overflow-x-auto"},z3={class:"w-full border-collapse text-sm",style:{"min-width":"1000px"}},L3={class:"border border-gray-300 px-4 py-2 font-medium dark:border-gray-600"},R3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},O3={class:"text-green-600 dark:text-green-400"},E3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},N3={class:"text-yellow-600 dark:text-yellow-400"},q3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},W3={class:"text-orange-600 dark:text-orange-400"},B3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},G3={class:"text-orange-600 dark:text-orange-400"},F3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Q3={class:"text-orange-600 dark:text-orange-400"},H3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},J3={class:"text-orange-600 dark:text-orange-400"},Y3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},Z3={class:"text-orange-600 dark:text-orange-400"},X3={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},e5={class:"text-red-600 dark:text-red-400"},t5={class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"},a5={class:"bg-blue-50 font-bold dark:bg-blue-900/30"},r5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},s5={class:"text-green-600 dark:text-green-400"},l5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},o5={class:"text-yellow-600 dark:text-yellow-400"},n5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},i5={class:"text-orange-600 dark:text-orange-400"},d5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},u5={class:"text-orange-600 dark:text-orange-400"},p5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},g5={class:"text-orange-600 dark:text-orange-400"},c5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},y5={class:"text-orange-600 dark:text-orange-400"},m5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},x5={class:"text-orange-600 dark:text-orange-400"},f5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},b5={class:"text-red-600 dark:text-red-400"},v5={class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"},vr="accountsPageSize",k5={__name:"AccountsView",setup(F){const _e=v(!1),c=v({title:"",message:"",confirmText:"继续",cancelText:"取消"});let z=null;const A=(r,s,x="继续",w="取消")=>new Promise(l=>{c.value={title:r,message:s,confirmText:x,cancelText:w},z=l,_e.value=!0}),_=()=>{_e.value=!1,z==null||z(!0),z=null},T=()=>{_e.value=!1,z==null||z(!1),z=null},k=v([]),P=v(!1),O=v(!1),Y=v("name"),M=v("asc"),se=v([]),ge=v({}),N=v([]),E=v("all"),R=v("all"),y=v("all"),p=v(""),D=()=>{const r=localStorage.getItem(vr);if(r){const s=parseInt(r,10);if([10,20,50,100].includes(s))return s}return 10},de=[10,20,50,100],le=v(D()),ae=v(1),oe=v([]),he=v(!1),W=v(!1),Q=v(!1),H=v(!1),h=v(!1),X=v(null),C=v([]),G=v({}),K=v({}),Ce=v(""),ze=["claude","claude-console","openai","openai-responses","gemini","droid","gemini-api","bedrock"],Ke=v(null),Fe=v(null),Qe=v(!1),xe=v(null),g=v(!1),a=v(null),U=v(!1),re=v(!1),ne=v(null),Re=v(!1),Oe=v(!1),st=v(!1),nt=v(!1),at=v(!1),Dt=v(new Map),Pt=v([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"},{value:"rateLimitTime",label:"按限流时间排序",icon:"fa-hourglass"}]),jt=[{value:"group-claude",label:"Claude(全部)",icon:"fa-brain",children:[{value:"claude",label:"Claude 官方/OAuth",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"ccr",label:"CCR Relay",icon:"fa-code-branch"}]},{value:"group-openai",label:"Codex / OpenAI(全部)",icon:"fa-openai",children:[{value:"openai",label:"OpenAI 官方",icon:"fa-openai"},{value:"openai-responses",label:"OpenAI-Responses (Codex)",icon:"fa-server"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"}]},{value:"group-gemini",label:"Gemini(全部)",icon:"fab fa-google",children:[{value:"gemini",label:"Gemini OAuth",icon:"fab fa-google"},{value:"gemini-api",label:"Gemini API",icon:"fa-key"}]},{value:"group-droid",label:"Droid(全部)",icon:"fa-robot",children:[{value:"droid",label:"Droid",icon:"fa-robot"}]}],I={"group-claude":["claude","claude-console","bedrock","ccr"],"group-openai":["openai","openai-responses","azure_openai"],"group-gemini":["gemini","gemini-api"],"group-droid":["droid"]},Tt={claude:()=>wr(),"claude-console":()=>$r(),bedrock:()=>Ar(),gemini:()=>Cr(),openai:()=>Tr(),azure_openai:()=>Ir(),"openai-responses":()=>Ur(),ccr:()=>Ws(),droid:()=>_r(),"gemini-api":()=>qs()},gt=Object.keys(Tt),ht=r=>r==="all"?gt:I[r]?I[r]:gt.includes(r)?[r]:gt,ct=Z(()=>{const r=[{value:"all",label:"所有平台",icon:"fa-globe",indent:0}];return jt.forEach(s=>{var x;r.push({...s,indent:0,isGroup:!0}),(x=s.children)==null||x.forEach(w=>{r.push({...w,indent:1,parent:s.value})})}),r}),Vt=v([{value:"normal",label:"正常",icon:"fa-check-circle"},{value:"unschedulable",label:"不可调度",icon:"fa-ban"},{value:"rateLimited",label:"限流",icon:"fa-hourglass-half"},{value:"other",label:"其他",icon:"fa-exclamation-triangle"},{value:"all",label:"全部状态",icon:"fa-list"}]),wt=Z(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return N.value.forEach(s=>{r.push({value:s.id,label:`${s.name} (${s.platform==="claude"?"Claude":s.platform==="gemini"?"Gemini":s.platform==="openai"?"OpenAI":"Droid"})`,icon:s.platform==="claude"?"fa-brain":s.platform==="gemini"?"fa-robot":s.platform==="openai"?"fa-openai":"fa-robot"})}),r}),B=Z(()=>Q.value),q=v(!1),Ee=v(null),We=v(!1),ut=v(null),Nt=r=>{const s=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(w=>{if(typeof w=="string"){const l=w.trim();l&&s.add(l)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(w=>{if(w&&typeof w.name=="string"){const l=w.name.trim();l&&s.add(l)}}),Object.entries(r||{}).forEach(([w,l])=>{if(typeof l=="string"){const te=w.toLowerCase();if(te.includes("name")||te.includes("email")){const we=l.trim();we&&s.add(we)}}}),Array.from(s)},qt=(r,s)=>s?Nt(r).some(x=>x.toLowerCase().includes(s)):!0,$t=r=>!!r&&ze.includes(r.platform),zt=r=>{var x;return["claude","claude-console","openai","openai-responses","gemini","gemini-api","ccr"].includes(r.platform)&&(r.status==="unauthorized"||r.status!=="active"||((x=r.rateLimitStatus)==null?void 0:x.isRateLimited)||r.rateLimitStatus==="limited"||!r.isActive)},Lt=r=>{const s=[];return zt(r)&&s.push({key:"reset",label:"重置状态",icon:"fa-redo",color:"orange",handler:()=>ba(r)}),$t(r)&&s.push({key:"usage",label:"详情",icon:"fa-chart-line",color:"indigo",handler:()=>It(r)}),At(r)&&(s.push({key:"test",label:"测试",icon:"fa-vial",color:"blue",handler:()=>Ct(r)}),s.push({key:"scheduled-test",label:"定时测试",icon:"fa-clock",color:"amber",handler:()=>Ut(r)})),s.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Zt(r)}),s},It=async r=>{if(!$t(r)){V("该账户类型暂不支持查看详情","warning");return}X.value=r,H.value=!0,h.value=!0,C.value=[],G.value={},K.value={},Ce.value="";const s=await Js(r.id,r.platform,30);if(s.success){const x=s.data||{};C.value=x.history||[],G.value=x.summary||{},K.value=x.overview||{},Ce.value=x.generatedAt||""}else V(s.error||"加载账号使用详情失败","error");h.value=!1},it=()=>{H.value=!1,h.value=!1,X.value=null},Ya=["claude","claude-console","bedrock","gemini","openai-responses","azure-openai","droid","ccr"],At=r=>!!r&&Ya.includes(r.platform),Ct=r=>{if(!At(r)){V("该账户类型暂不支持测试","warning");return}xe.value=r,Qe.value=!0},Wt=()=>{Qe.value=!1,xe.value=null},Ut=r=>{if(!At(r)){V("该账户类型暂不支持定时测试","warning");return}a.value=r,g.value=!0},Bt=()=>{g.value=!1,a.value=null},Gt=()=>{V("定时测试配置已保存","success")},Ft=v(!1),Rt=v(null),$a=r=>{Rt.value=r,Ft.value=!0},Aa=()=>{Ft.value=!1,Rt.value=null},Ca=async()=>{V("余额脚本已保存","success");const r=Rt.value;if(Aa(),!(!(r!=null&&r.id)||!(r!=null&&r.platform)))try{const s=await Mr(r.id,{platform:r.platform,queryApi:!1});s!=null&&s.success&&s.data&&Qt(r.id,s.data)}catch(s){console.debug("Failed to reload balance after saving script:",s)}},yt=Z(()=>{let r=k.value;const s=p.value.trim();if(s){const w=s.toLowerCase();r=r.filter(l=>qt(l,w))}return y.value!=="all"&&(r=r.filter(w=>{const l=xt(w),te=w.status==="blocked"||w.status==="unauthorized";return y.value==="rateLimited"?w.isActive&&l:y.value==="normal"?w.isActive&&!l&&!te&&w.schedulable!==!1:y.value==="unschedulable"?w.isActive&&!l&&!te&&w.schedulable===!1:y.value==="other"?!l&&(!w.isActive||te):!0})),Y.value?[...r].sort((w,l)=>{var ce,Te,ee,fe,Ae,ue,be,Ge,Be,ir,dr,ur;let te=w[Y.value],we=l[Y.value];if(Y.value==="dailyTokens"?(te=((Te=(ce=w.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0,we=((fe=(ee=l.usage)==null?void 0:ee.daily)==null?void 0:fe.allTokens)||0):Y.value==="dailyRequests"?(te=((ue=(Ae=w.usage)==null?void 0:Ae.daily)==null?void 0:ue.requests)||0,we=((Ge=(be=l.usage)==null?void 0:be.daily)==null?void 0:Ge.requests)||0):Y.value==="totalTokens"&&(te=((ir=(Be=w.usage)==null?void 0:Be.total)==null?void 0:ir.allTokens)||0,we=((ur=(dr=l.usage)==null?void 0:dr.total)==null?void 0:ur.allTokens)||0),Y.value==="lastUsed"&&(te=w.lastUsedAt?new Date(w.lastUsedAt).getTime():0,we=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0),Y.value==="status"&&(te=w.isActive?1:0,we=l.isActive?1:0),Y.value==="rateLimitTime"){const er=xt(w),tr=xt(l),pr=er?ft(w):0,gr=tr?ft(l):0;return!er&&tr?-1:er&&!tr?1:prgr?1:0}return tewe?M.value==="asc"?1:-1:0}):r}),De=Z(()=>{const r=yt.value.length;return Math.ceil(r/le.value)||0}),la=Z(()=>[{value:"claude",label:"Claude"},{value:"claude-console",label:"Claude Console"},{value:"gemini",label:"Gemini"},{value:"gemini-api",label:"Gemini API"},{value:"openai",label:"OpenAI"},{value:"azure_openai",label:"Azure OpenAI"},{value:"bedrock",label:"Bedrock"},{value:"openai-responses",label:"OpenAI-Responses"},{value:"ccr",label:"CCR"},{value:"droid",label:"Droid"}].map(s=>{const x=k.value.filter(ue=>ue.platform===s.value),w=x.filter(ue=>xt(ue)),l=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable!==!1}).length,te=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&ue.isActive&&!Ge&&ue.schedulable===!1}).length,we=x.filter(ue=>{const be=xt(ue),Ge=ue.status==="blocked"||ue.status==="unauthorized";return!be&&(!ue.isActive||Ge)}).length,ce=w.filter(ue=>{const be=ft(ue);return be>0&&be<=60}).length,Te=w.filter(ue=>{const be=ft(ue);return be>60&&be<=300}).length,ee=w.filter(ue=>{const be=ft(ue);return be>300&&be<=720}).length,fe=w.filter(ue=>{const be=ft(ue);return be>720&&be<=1440}).length,Ae=w.filter(ue=>ft(ue)>1440).length;return{platform:s.value,platformLabel:s.label,normal:l,unschedulable:te,rateLimit0_1h:ce,rateLimit1_5h:Te,rateLimit5_12h:ee,rateLimit12_24h:fe,rateLimitOver24h:Ae,other:we,total:x.length}}).filter(s=>s.total>0)),dt=Z(()=>la.value.reduce((r,s)=>(r.normal+=s.normal,r.unschedulable+=s.unschedulable,r.rateLimit0_1h+=s.rateLimit0_1h,r.rateLimit1_5h+=s.rateLimit1_5h,r.rateLimit5_12h+=s.rateLimit5_12h,r.rateLimit12_24h+=s.rateLimit12_24h,r.rateLimitOver24h+=s.rateLimitOver24h,r.other+=s.other,r.total+=s.total,r),{normal:0,unschedulable:0,rateLimit0_1h:0,rateLimit1_5h:0,rateLimit5_12h:0,rateLimit12_24h:0,rateLimitOver24h:0,other:0,total:0})),_t=Z(()=>{const r=De.value,s=ae.value,x=[];if(r<=7)for(let w=1;w<=r;w++)x.push(w);else{let w=Math.max(1,s-2),l=Math.min(r,s+2);s<=3?l=5:s>=r-2&&(w=r-4);for(let te=w;te<=l;te++)x.push(te)}return x}),mt=Z(()=>{const r=_t.value;return r.length===0?!1:r[0]>1}),oa=Z(()=>{const r=_t.value;return r.length===0?!1:r[r.length-1]{const r=_t.value;return r.length===0?!1:mt.value&&r[0]>2}),Ia=Z(()=>{const r=_t.value;return r.length===0?!1:oa.value&&r[r.length-1]{const r=(ae.value-1)*le.value,s=r+le.value;return yt.value.slice(r,s)}),na=Z(()=>{const r=pt.value;return!Array.isArray(r)||r.length===0?!1:r.some(s=>{const x=s==null?void 0:s.balanceInfo;return(x==null?void 0:x.scriptEnabled)!==!1&&!!(x!=null&&x.scriptConfigured)})}),Ua=Z(()=>P.value?"正在加载账户...":O.value?"刷新中...":na.value?"刷新当前页余额(仅对已配置余额脚本的账户生效)":"当前页未配置余额脚本,无法刷新"),Qt=(r,s)=>{k.value=k.value.map(x=>x.id!==r?x:{...x,balanceInfo:s})},ia=(r,s)=>{const x=(s==null?void 0:s.message)||"余额查询失败";V(x,"error")},_a=async()=>{if(O.value)return;const r=pt.value;if(!r||r.length===0)return;const s=r.filter(w=>{const l=w==null?void 0:w.balanceInfo;return(l==null?void 0:l.scriptEnabled)!==!1&&!!(l!=null&&l.scriptConfigured)});if(s.length===0){V("当前页没有配置余额脚本的账户","warning");return}const x=r.length-s.length;O.value=!0;try{const w=await Promise.all(s.map(async Te=>{try{const ee=await Dr(Te.id,{platform:Te.platform});return{id:Te.id,success:!!(ee!=null&&ee.success),data:(ee==null?void 0:ee.data)||null}}catch(ee){return{id:Te.id,success:!1,error:(ee==null?void 0:ee.message)||"刷新失败"}}})),l=w.reduce((Te,ee)=>(ee.success&&ee.data&&(Te[ee.id]=ee.data),Te),{}),te=w.filter(Te=>Te.success).length,we=w.length-te,ce=x>0?`,跳过 ${x} 个未配置脚本`:"";Object.keys(l).length>0&&(k.value=k.value.map(Te=>{const ee=l[Te.id];return ee?{...Te,balanceInfo:ee}:Te})),we===0?V(`成功刷新 ${te} 个账户余额${ce}`,"success"):V(`刷新完成:${te} 成功,${we} 失败${ce}`,"warning")}finally{O.value=!1}},rt=()=>{const r=pt.value.map(w=>w.id),s=r.filter(w=>oe.value.includes(w)).length,x=r.length;s===0?(he.value=!1,W.value=!1):s===x?(he.value=!0,W.value=!1):(he.value=!1,W.value=!0)},Ka=()=>{if(he.value)pt.value.forEach(r=>{oe.value.includes(r.id)||oe.value.push(r.id)});else{const r=new Set(pt.value.map(s=>s.id));oe.value=oe.value.filter(s=>!r.has(s))}rt()},Sa=()=>{Q.value=!Q.value,Q.value?rt():(oe.value=[],he.value=!1,W.value=!1)},da=()=>{const r=new Set(k.value.map(s=>s.id));oe.value=oe.value.filter(s=>r.has(s)),rt()},Ma=async()=>{const r=k.value;if(!Array.isArray(r)||r.length===0)return;const s=Array.from(new Set(r.map(l=>l.platform).filter(Boolean)));if(s.length===0)return;const w=(await Promise.all(s.map(async l=>{try{const te=await Fs(l,{queryApi:!1});return{platform:l,success:!!(te!=null&&te.success),data:(te==null?void 0:te.data)||[]}}catch(te){return console.debug(`Failed to load balance cache for ${l}:`,te),{platform:l,success:!1,data:[]}}}))).reduce((l,te)=>(te.success&&(Array.isArray(te.data)?te.data:[]).forEach(ce=>{var ee;const Te=(ee=ce==null?void 0:ce.data)==null?void 0:ee.accountId;Te&&(l[Te]=ce.data)}),l),{});Object.keys(w).length!==0&&(k.value=k.value.map(l=>({...l,balanceInfo:w[l.id]||l.balanceInfo||null})))},lt=async(r=!1)=>{P.value=!0;try{const s={};R.value!=="all"&&!I[R.value]&&(s.platform=R.value),E.value!=="all"&&(s.groupId=E.value);const x=ht(R.value);await Promise.all([ua(r),pa(r)]);const w=await Promise.all(x.map(async ee=>{const fe=Tt[ee];if(!fe)return{platform:ee,success:!0,data:[]};try{const Ae=await fe(s);return{platform:ee,success:Ae==null?void 0:Ae.success,data:Ae==null?void 0:Ae.data}}catch(Ae){return console.debug(`Failed to load ${ee} accounts:`,Ae),{platform:ee,success:!1,data:[]}}})),l=[],te=ge.value||{};let we=[];const ce=(ee,fe)=>{const Ae=Array.isArray(fe)?fe:[];if(Ae.length!==0)switch(ee){case"claude":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude",boundApiKeysCount:Ge}});l.push(...ue);break}case"claude-console":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.claudeConsoleAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"claude-console",boundApiKeysCount:Ge}});l.push(...ue);break}case"bedrock":{const ue=Ae.map(be=>({...be,platform:"bedrock",boundApiKeysCount:0}));l.push(...ue);break}case"gemini":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"gemini",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.openaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"azure_openai":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.azureOpenaiAccountId)==null?void 0:Be[be.id])||0;return{...be,platform:"azure_openai",boundApiKeysCount:Ge}});l.push(...ue);break}case"openai-responses":{we=Ae;break}case"ccr":{const ue=Ae.map(be=>({...be,platform:"ccr",boundApiKeysCount:0}));l.push(...ue);break}case"droid":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.droidAccountId)==null?void 0:Be[be.id])||be.boundApiKeysCount||0;return{...be,platform:"droid",boundApiKeysCount:Ge}});l.push(...ue);break}case"gemini-api":{const ue=Ae.map(be=>{var Be;const Ge=((Be=te.geminiAccountId)==null?void 0:Be[`api:${be.id}`])||0;return{...be,platform:"gemini-api",boundApiKeysCount:Ge}});l.push(...ue);break}default:break}};if(w.forEach(({platform:ee,success:fe,data:Ae})=>{fe&&ce(ee,Ae||[])}),we.length>0){const ee=we.map(fe=>{var ue;const Ae=((ue=te.openaiAccountId)==null?void 0:ue[`responses:${fe.id}`])||0;return{...fe,platform:"openai-responses",boundApiKeysCount:Ae}});l.push(...ee)}let Te=l;E.value!=="all"&&(E.value==="ungrouped"?Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0):Te=l.filter(ee=>!ee.groupInfos||ee.groupInfos.length===0?!1:ee.groupInfos.some(fe=>fe.id===E.value))),Te=Te.map(ee=>{const fe=ga(ee.proxyConfig||ee.proxy);return{...ee,proxyConfig:fe||null}}),k.value=Te,da(),Te.some(ee=>ee.platform==="claude")&&Da().catch(ee=>{console.debug("Claude usage loading failed:",ee)}),Ma().catch(ee=>{console.debug("Balance cache loading failed:",ee)})}catch{V("加载账户失败","error")}finally{P.value=!1}},Da=async()=>{const r=await Gs();if(r.success&&r.data){const s=r.data;k.value=k.value.map(x=>x.platform==="claude"&&s[x.id]?{...x,claudeUsage:s[x.id]}:x)}};let Ht="name";const Kt=r=>{r&&(Y.value===r?M.value=M.value==="asc"?"desc":"asc":(Y.value=r,M.value="asc"),Ht=r)},Pa=r=>{r===Ht?M.value=M.value==="asc"?"desc":"asc":M.value="asc",Ht=r},ja=r=>{if(!r)return"从未使用";const s=new Date(r),w=new Date-s;return w<6e4?"刚刚":w<36e5?`${Math.floor(w/6e4)} 分钟前`:w<864e5?`${Math.floor(w/36e5)} 小时前`:w<6048e5?`${Math.floor(w/864e5)} 天前`:s.toLocaleDateString("zh-CN")},Va=()=>{p.value="",ae.value=1},ua=async(r=!1)=>{if(!r&&st.value)return;const s=await Bs();s.success&&(ge.value=s.data||{},st.value=!0)},za=async(r=!1)=>{var x;if(!r&&Oe.value)return;const s=await Ys();s.success&&(se.value=((x=s.data)==null?void 0:x.items)||s.data||[],Oe.value=!0)},pa=async(r=!1)=>{if(!r&&nt.value)return;const s=await sr();s.success&&(N.value=s.data||[],nt.value=!0)},La=()=>{Oe.value=!1,st.value=!1,nt.value=!1,at.value=!1,Dt.value.clear()},Ra=()=>{ae.value=1,lt()},Oa=()=>{ae.value=1,lt()};function ga(r){if(!r)return null;let s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return null}if(!s||typeof s!="object")return null;const x=s.proxy&&typeof s.proxy=="object"?s.proxy:s,w=typeof x.host=="string"?x.host.trim():x.host!==void 0&&x.host!==null?String(x.host).trim():"",l=x.port!==void 0&&x.port!==null?String(x.port).trim():"";if(!w||!l)return null;const te=typeof x.type=="string"&&x.type.trim()?x.type.trim():"socks5",we=typeof x.username=="string"?x.username:x.username!==void 0&&x.username!==null?String(x.username):"",ce=typeof x.password=="string"?x.password:x.password!==void 0&&x.password!==null?String(x.password):"";return{type:te,host:w,port:l,username:we,password:ce}}const Jt=r=>{const s=ga(r);if(!s)return null;const x=s.type.toLowerCase()==="socks5"?"S5":s.type.toUpperCase();let w=s.host;w.length>15&&(w=w.substring(0,12)+"...");let l=`${x}://${w}:${s.port}`;return s.username&&(l=`${x}://***@${w}:${s.port}`),l},ca=(r,s)=>{if(!r||!s)return"--";const x=new Date(r),w=new Date(s),l=x.getHours().toString().padStart(2,"0"),te=x.getMinutes().toString().padStart(2,"0"),we=w.getHours().toString().padStart(2,"0"),ce=w.getMinutes().toString().padStart(2,"0");return`${l}:${te} - ${we}:${ce}`},ya=r=>{if(!r||r<=0)return"已结束";const s=Math.floor(r/60),x=r%60;return s>0?`${s}小时${x}分钟`:`${x}分钟`},Ea=r=>{if(!r||r<=0)return"";r=Math.floor(r);const s=Math.floor(r/1440),x=r%1440,w=Math.floor(x/60),l=x%60;return s>0?w>0?`${s}天${w}小时`:`${s}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:`${l}分钟`},xt=r=>r?!!(r.rateLimitStatus&&(typeof r.rateLimitStatus=="string"&&r.rateLimitStatus==="limited"||typeof r.rateLimitStatus=="object"&&r.rateLimitStatus.isRateLimited===!0)):!1,ft=r=>{if(!r||!r.rateLimitStatus)return 0;if(typeof r.rateLimitStatus=="object"){const s=r.rateLimitStatus;if(Number.isFinite(s.minutesRemaining))return Math.max(0,Math.ceil(s.minutesRemaining));if(Number.isFinite(s.remainingMinutes))return Math.max(0,Math.ceil(s.remainingMinutes));if(Number.isFinite(s.remainingSeconds))return Math.max(0,Math.ceil(s.remainingSeconds/60));if(s.rateLimitResetAt){const x=new Date(s.rateLimitResetAt).getTime()-Date.now();return x>0?Math.ceil(x/6e4):0}}if(r.rateLimitUntil){const s=new Date().getTime(),w=new Date(r.rateLimitUntil).getTime()-s;return w>0?Math.ceil(w/6e4):0}return 0},Na=()=>{Ee.value=null,q.value=!0},ma=()=>{q.value=!1,Ee.value=null},Yt=r=>{ut.value=r,We.value=!0},xa=r=>!r||!r.id?[]:se.value.filter(s=>{const x=r.id;return s.claudeAccountId===x||s.claudeConsoleAccountId===x||s.geminiAccountId===x||s.openaiAccountId===x||s.azureOpenaiAccountId===x||s.openaiAccountId===`responses:${x}`||s.geminiAccountId===`api:${x}`}),qa=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;case"gemini-api":return`/admin/gemini-api-accounts/${r.id}`;default:return null}},fa=async r=>{const s=qa(r);if(!s)return{success:!1,message:"不支持的账户类型"};const x=await Sr(s);return x.success?{success:!0,data:x}:{success:!1,message:x.message||"删除失败"}},Zt=async r=>{const x=xa(r).length;let w=`确定要删除账户 "${r.name}" 吗?`;if(x>0&&(w+=`
+
+⚠️ 注意:此账号有 ${x} 个 API Key 绑定。`,w+=`
+删除后,这些 API Key 将自动切换为共享池模式。`),w+=`
+
+此操作不可恢复。`,!await A("删除账户",w,"删除","取消"))return;const te=await fa(r);if(te.success){const we=te.data;let ce="账户已成功删除";(we==null?void 0:we.unboundKeys)>0&&(ce+=`,${we.unboundKeys} 个 API Key 已切换为共享池模式`),V(ce,"success"),oe.value=oe.value.filter(Te=>Te!==r.id),rt(),at.value=!1,Oe.value=!1,st.value=!1,lt(),za(!0),ua(!0)}else V(te.message||"删除失败","error")},Wa=async()=>{var ee;if(oe.value.length===0){V("请先选择要删除的账户","warning");return}const r=new Map(k.value.map(fe=>[fe.id,fe])),s=oe.value.map(fe=>r.get(fe)).filter(fe=>!!fe);if(s.length===0){V("选中的账户已不存在","warning"),oe.value=[],rt();return}let x=`确定要删除选中的 ${s.length} 个账户吗?此操作不可恢复。`;const w=s.map(fe=>({account:fe,boundKeys:xa(fe)})).filter(fe=>fe.boundKeys.length>0);if(w.length>0&&(x+=`
+
+⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,w.forEach(({account:fe,boundKeys:Ae})=>{const ue=fe.name||fe.email||fe.accountName||fe.id;x+=`
+- ${ue}: ${Ae.length} 个`}),x+=`
+删除后,这些 API Key 将切换为共享池模式。`),x+=`
+
+请再次确认是否继续。`,!await A("批量删除账户",x,"删除","取消"))return;let te=0,we=0,ce=0;const Te=[];for(const fe of s){const Ae=await fa(fe);Ae.success?(te+=1,ce+=((ee=Ae.data)==null?void 0:ee.unboundKeys)||0):(we+=1,Te.push({name:fe.name||fe.email||fe.accountName||fe.id,message:Ae.message||"删除失败"}))}if(te>0){let fe=`成功删除 ${te} 个账户`;ce>0&&(fe+=`,${ce} 个 API Key 已切换为共享池模式`),V(fe,we>0?"warning":"success"),oe.value=[],he.value=!1,W.value=!1,at.value=!1,Oe.value=!1,await lt(!0)}if(we>0){const fe=Te.map(Ae=>`${Ae.name}: ${Ae.message}`).join(`
+`);V(`有 ${we} 个账户删除失败:
+${fe}`,te>0?"warning":"error")}rt()},ba=async r=>{if(!(r.isResetting||!await A("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消")))try{r.isResetting=!0;let x="";if(r.platform==="openai")x=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")x=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")x=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")x=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")x=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")x=`/admin/droid-accounts/${r.id}/reset-status`;else if(r.platform==="gemini-api")x=`/admin/gemini-api-accounts/${r.id}/reset-status`;else if(r.platform==="gemini")x=`/admin/gemini-accounts/${r.id}/reset-status`;else{V("不支持的账户类型","error"),r.isResetting=!1;return}const w=await Hs(x);w.success?(V("账户状态已重置","success"),lt(!0)):V(w.message||"状态重置失败","error"),r.isResetting=!1}catch(x){V(x.message||"状态重置失败","error"),r.isResetting=!1}},Xt=async r=>{if(r.isTogglingSchedulable)return;r.isTogglingSchedulable=!0;let s;if(r.platform==="claude")s=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")s=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")s=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")s=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")s=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")s=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")s=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")s=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")s=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini-api")s=`/admin/gemini-api-accounts/${r.id}/toggle-schedulable`;else{V("该账户类型暂不支持调度控制","warning"),r.isTogglingSchedulable=!1;return}const x=await Kr(s);x.success?(r.schedulable=x.schedulable,V(x.schedulable?"已启用调度":"已禁用调度","success")):V(x.message||"操作失败","error"),r.isTogglingSchedulable=!1},d=()=>{q.value=!1,V("账户创建成功","success"),La(),lt()},t=()=>{We.value=!1,V("账户更新成功","success"),at.value=!1,lt()},ie=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",ye=()=>"OAuth",i=()=>"OAuth",pe=r=>{if(!r||typeof r!="object")return"OAuth";const s=r.isApiKeyMode??r.is_api_key_mode??r.apiKeyMode??r.api_key_mode;if(s===!0||s==="true"||s===1||s==="1")return"API Key";const x=r.authenticationMethod||r.authMethod||r.authentication_mode||r.authenticationMode||r.authentication_method||r.auth_type||r.authType||r.authentication_type||r.authenticationType||r.droidAuthType||r.droidAuthenticationMethod||r.method||r.auth||"";return typeof x=="string"&&x.trim().toLowerCase().replace(/[\s_-]/g,"")==="apikey"?"API Key":"OAuth"},me=r=>pe(r)==="API Key",qe=r=>{if(!r||typeof r!="object")return 0;if(Array.isArray(r.apiKeys))return r.apiKeys.filter(x=>x.status!=="error").length;if(typeof r.apiKeys=="string"&&r.apiKeys.trim())try{const x=JSON.parse(r.apiKeys);if(Array.isArray(x))return x.filter(w=>w.status!=="error").length}catch{}const s=[r.apiKeyCount,r.api_key_count,r.apiKeysCount,r.api_keys_count];for(const x of s){const w=Number(x);if(Number.isFinite(w)&&w>=0)return w}return 0},He=r=>{const s=qe(r),x="ml-1 inline-flex items-center gap-1 rounded-md border px-1.5 py-[1px] text-[10px] font-medium shadow-sm backdrop-blur-sm";return s>0?[x,"border-cyan-200 bg-cyan-50/90 text-cyan-700 dark:border-cyan-500/40 dark:bg-cyan-900/40 dark:text-cyan-200"]:[x,"border-rose-200 bg-rose-50/90 text-rose-600 dark:border-rose-500/40 dark:bg-rose-900/40 dark:text-rose-200"]},Le=r=>{if(r.subscriptionInfo)try{const s=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return s.hasClaudeMax===!0?"Claude Max":s.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},S=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},L=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",$e=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",J=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",Se=(r,s=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(s&&(s.isRateLimited||s.status==="rate_limited"||s.rateLimitStatus&&s.rateLimitStatus.isRateLimited||s.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const w=String(r).toLowerCase();return w==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":w==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},Me=r=>r.authType==="oauth",Pe=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,Ue=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,et=r=>{const s=(r==null?void 0:r.utilization)||0;return s<60?"bg-gradient-to-r from-blue-500 to-indigo-600":s<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},tt=r=>{if(!r||!r.remainingSeconds)return"-";const s=r.remainingSeconds,x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60);return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${Math.floor(s%60)}秒`},bt=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,x=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,w=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,l=r.resetAt?Date.parse(r.resetAt):null;return x!==null&&(w!==null&&w<=0||l!==null&&!Number.isNaN(l)&&Date.now()>=l)?0:s===null?null:Math.max(0,Math.min(100,s))},ea=r=>{const s=bt(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},Ot=r=>{const s=bt(r);return s===null?"--":`${s.toFixed(1)}%`},ta=r=>{const s=bt(r);return s===null?"0%":`${s}%`},aa=r=>r==="secondary"?"周限":"5h",St=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const x=Math.floor(s/86400),w=Math.floor(s%86400/3600),l=Math.floor(s%3600/60),te=s%60;return x>0?w>0?`${x}天${w}小时`:`${x}天`:w>0?l>0?`${w}小时${l}分钟`:`${w}小时`:l>0?`${l}分钟`:`${te}秒`},Ba=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),Za=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?0:s/x*100},Vr=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",Xa=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return 0;const x=Number((r==null?void 0:r.activeTaskCount)||0);return Math.min(100,x/s*100)},zr=r=>r>=100?"bg-red-500":r>=80?"bg-yellow-500":"bg-green-500",Lr=r=>{const s=Number((r==null?void 0:r.maxConcurrentTasks)||0);if(!s||s<=0)return"text-gray-500 dark:text-gray-400";const x=Number((r==null?void 0:r.activeTaskCount)||0);return x>=s?"text-red-600 dark:text-red-400":x>=s*.8?"text-yellow-600 dark:text-yellow-400":"text-gray-700 dark:text-gray-200"},Rr=r=>{var w,l;const s=Number(((l=(w=r==null?void 0:r.usage)==null?void 0:w.daily)==null?void 0:l.cost)||0),x=Number((r==null?void 0:r.dailyQuota)||0);return!x||x<=0?"0.00":Math.max(0,x-s).toFixed(2)},lr=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?Ba(r.usage.daily.cost):"0.0000";ve(p,()=>{ae.value=1,rt()}),ve(le,r=>{localStorage.setItem(vr,r.toString()),rt()}),ve(()=>yt.value.length,()=>{ae.value>De.value&&(ae.value=De.value||1),rt()}),ve(ae,()=>{rt()}),ve(pt,()=>{rt(),ar(()=>{va()})}),ve(k,()=>{da()});const or=r=>r?new Date(r).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit"}):"",Or=r=>r?new Date(r){if(!r)return!1;const s=new Date,w=(new Date(r)-s)/(1e3*60*60*24);return w>0&&w<=7},Ga=r=>{Ke.value=r},nr=()=>{Ke.value=null},Nr=async({accountId:r,expiresAt:s})=>{try{const x=k.value.find(te=>te.id===r);if(!x){V("未找到账户","error");return}let w="";switch(x.platform){case"claude":case"claude-oauth":w=`/admin/claude-accounts/${r}`;break;case"gemini":w=`/admin/gemini-accounts/${r}`;break;case"claude-console":w=`/admin/claude-console-accounts/${r}`;break;case"bedrock":w=`/admin/bedrock-accounts/${r}`;break;case"ccr":w=`/admin/ccr-accounts/${r}`;break;case"openai":w=`/admin/openai-accounts/${r}`;break;case"droid":w=`/admin/droid-accounts/${r}`;break;case"azure_openai":w=`/admin/azure-openai-accounts/${r}`;break;case"openai-responses":w=`/admin/openai-responses-accounts/${r}`;break;default:V(`不支持的平台类型: ${x.platform}`,"error");return}const l=await Zs(w,{expiresAt:s||null});l.success?(V("账户到期时间已更新","success"),x.expiresAt=s||null,nr()):(V(l.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving())}catch(x){V(x.message||"更新失败","error"),Fe.value&&Fe.value.resetSaving()}},va=()=>{ne.value&&(Re.value=ne.value.scrollWidth>ne.value.clientWidth)};let Fa=null;return ra(()=>{lt(!0),ar(()=>{ne.value&&(Fa=new ResizeObserver(()=>{va()}),Fa.observe(ne.value),va())}),window.addEventListener("resize",va)}),Ha(()=>{Fa&&Fa.disconnect(),window.removeEventListener("resize",va)}),(r,s)=>{const x=Wr,w=kr;return o(),n("div",mb,[e("div",xb,[e("div",fb,[s[45]||(s[45]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",bb,[e("div",vb,[e("div",kb,[s[29]||(s[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:Y.value,"onUpdate:modelValue":s[0]||(s[0]=l=>Y.value=l),icon:M.value==="asc"?"fa-sort-amount-up":"fa-sort-amount-down","icon-color":"text-indigo-500",options:Pt.value,placeholder:"选择排序",onChange:Pa},null,8,["modelValue","icon","options"])]),e("div",hb,[s[30]||(s[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:R.value,"onUpdate:modelValue":s[1]||(s[1]=l=>R.value=l),icon:"fa-server","icon-color":"text-blue-500",options:ct.value,placeholder:"选择平台",onChange:Ra},null,8,["modelValue","options"])]),e("div",wb,[s[31]||(s[31]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:E.value,"onUpdate:modelValue":s[2]||(s[2]=l=>E.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:wt.value,placeholder:"选择分组",onChange:Oa},null,8,["modelValue","options"])]),e("div",$b,[s[32]||(s[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-emerald-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Ve(Qa,{modelValue:y.value,"onUpdate:modelValue":s[3]||(s[3]=l=>y.value=l),icon:"fa-check-circle","icon-color":"text-green-500",options:Vt.value,placeholder:"选择状态"},null,8,["modelValue","options"])]),e("div",Ab,[s[35]||(s[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Cb,[b(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>p.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[j,p.value]]),s[34]||(s[34]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),p.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Va},s[33]||(s[33]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):m("",!0)])])]),e("div",Tb,[e("div",Ib,[Ve(x,{content:"查看账户统计汇总",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[5]||(s[5]=l=>U.value=!0)},s[36]||(s[36]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-violet-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-chart-bar relative text-violet-500"},null,-1),e("span",{class:"relative"},"统计",-1)]))]),_:1})]),e("div",Ub,[Ve(x,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value,onClick:[s[6]||(s[6]=vt(l=>lt(!0),["ctrl","exact"])),s[7]||(s[7]=vt(l=>lt(!1),["exact"])),s[8]||(s[8]=vt(l=>lt(!0),["meta","exact"]))]},[s[37]||(s[37]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-green-500",P.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),s[38]||(s[38]=e("span",{class:"relative"},"刷新",-1))],8,_b)]),_:1})]),e("div",Kb,[Ve(x,{content:Ua.value,effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:P.value||O.value||!na.value,onClick:_a},[s[39]||(s[39]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:$(["fas relative text-blue-500",O.value?"fa-spinner fa-spin":"fa-wallet"])},null,2),s[40]||(s[40]=e("span",{class:"relative"},"刷新余额",-1))],8,Sb)]),_:1},8,["content"])]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Sa},[e("i",{class:$(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(Q.value?"取消选择":"选择"),1)]),e("div",Mb,[Ve(x,{content:"管理账户分组",effect:"dark",placement:"bottom"},{default:ot(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",onClick:s[9]||(s[9]=l=>re.value=!0)},s[41]||(s[41]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-layer-group relative text-purple-500"},null,-1),e("span",{class:"relative"},"分组",-1)]))]),_:1})]),oe.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:Wa},[s[42]||(s[42]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),s[43]||(s[43]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Db,"删除选中 ("+u(oe.value.length)+")",1)])):m("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:vt(Na,["stop"])},s[44]||(s[44]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),P.value?(o(),n("div",Pb,s[46]||(s[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):yt.value.length===0?(o(),n("div",jb,s[47]||(s[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(o(),n("div",Vb,[e("div",{ref_key:"tableContainerRef",ref:ne,class:"table-container"},[e("table",zb,[e("thead",Lb,[e("tr",null,[B.value?(o(),n("th",Rb,[e("div",Ob,[b(e("input",{"onUpdate:modelValue":s[10]||(s[10]=l=>he.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:W.value,type:"checkbox",onChange:Ka},null,40,Eb),[[je,he.value]])])])):m("",!0),e("th",{class:$(["name-column sticky z-20 min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",B.value?"left-[50px]":"left-0"]),onClick:s[11]||(s[11]=l=>Kt("name"))},[s[48]||(s[48]=f(" 名称 ",-1)),Y.value==="name"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Nb))],2),e("th",{class:"min-w-[220px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[12]||(s[12]=l=>Kt("platform"))},[s[49]||(s[49]=f(" 平台/类型 ",-1)),Y.value==="platform"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",qb))]),e("th",{class:"w-[120px] min-w-[180px] max-w-[200px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[13]||(s[13]=l=>Kt("status"))},[s[50]||(s[50]=f(" 状态 ",-1)),Y.value==="status"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Wb))]),s[56]||(s[56]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),s[57]||(s[57]=e("th",{class:"min-w-[220px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 余额/配额 ",-1)),e("th",Bb,[e("div",Gb,[s[53]||(s[53]=e("span",null,"会话窗口",-1)),Ve(x,{placement:"top"},{content:ot(()=>s[51]||(s[51]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},'当"重置剩余"为 0 时,进度条与百分比会同步清零。')])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Sonnet窗口:7天Sonnet模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:ot(()=>[s[52]||(s[52]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[52]})])]),s[58]||(s[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[14]||(s[14]=l=>Kt("priority"))},[s[54]||(s[54]=f(" 优先级 ",-1)),Y.value==="priority"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Fb))]),s[59]||(s[59]=e("th",{class:"min-w-[150px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),e("th",{class:"min-w-[110px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:s[15]||(s[15]=l=>Kt("expiresAt"))},[s[55]||(s[55]=f(" 到期时间 ",-1)),Y.value==="expiresAt"?(o(),n("i",{key:0,class:$(["fas",M.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",Qb))]),e("th",{class:$(["operations-column sticky right-0 z-20 px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",Re.value?"min-w-[170px]":"min-w-[200px]"])}," 操作 ",2)])]),e("tbody",Hb,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we;return o(),n("tr",{key:l.id,class:"table-row"},[B.value?(o(),n("td",Jb,[e("div",Yb,[b(e("input",{"onUpdate:modelValue":s[16]||(s[16]=ce=>oe.value=ce),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,Zb),[[je,oe.value]])])])):m("",!0),e("td",{class:$(["name-column sticky z-10 px-3 py-4",B.value?"left-[50px]":"left-0"])},[e("div",Xb,[s[64]||(s[64]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",ev,[e("div",tv,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ce=>Ye(cr)(l.name),["stop"])},u(l.name),9,av),l.accountType==="dedicated"?(o(),n("span",rv,s[60]||(s[60]=[e("i",{class:"fas fa-lock mr-1"},null,-1),f("专属 ",-1)]))):l.accountType==="group"?(o(),n("span",sv,s[61]||(s[61]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),f("分组调度 ",-1)]))):(o(),n("span",lv,s[62]||(s[62]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),f("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(o(),n("div",ov,[(o(!0),n(ke,null,Ne(l.groupInfos,ce=>(o(),n("span",{key:ce.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${ce.name}`},[s[63]||(s[63]=e("i",{class:"fas fa-folder mr-1"},null,-1)),f(u(ce.name),1)],8,nv))),128))])):m("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},u(l.id),9,iv)])])],2),e("td",dv,[e("div",uv,[l.platform==="gemini"?(o(),n("div",pv,[s[65]||(s[65]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),s[66]||(s[66]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),s[67]||(s[67]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",gv,u(ye()),1)])):l.platform==="claude-console"?(o(),n("div",cv,s[68]||(s[68]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(o(),n("div",yv,s[69]||(s[69]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(o(),n("div",mv,[s[70]||(s[70]=e("div",{class:"fa-openai"},null,-1)),s[71]||(s[71]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),s[72]||(s[72]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",xv,u(i()),1)])):l.platform==="azure_openai"?(o(),n("div",fv,s[73]||(s[73]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(o(),n("div",bv,s[74]||(s[74]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Api",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(o(),n("div",vv,[s[75]||(s[75]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",kv,u(Le(l)),1),s[76]||(s[76]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",hv,u(ie(l)),1)])):l.platform==="ccr"?(o(),n("div",wv,s[77]||(s[77]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(o(),n("div",$v,[s[79]||(s[79]=e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1)),s[80]||(s[80]=e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1)),s[81]||(s[81]=e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1)),e("span",Av,u(pe(l)),1),me(l)?(o(),n("span",{key:0,class:$(He(l))},[s[78]||(s[78]=e("i",{class:"fas fa-key text-[9px]"},null,-1)),e("span",null,"x"+u(qe(l)),1)],2)):m("",!0)])):l.platform==="gemini-api"?(o(),n("div",Cv,s[82]||(s[82]=[e("i",{class:"fas fa-robot text-xs text-amber-700 dark:text-amber-400"},null,-1),e("span",{class:"text-xs font-semibold text-amber-800 dark:text-amber-300"},"Gemini-API",-1),e("span",{class:"mx-1 h-4 w-px bg-amber-300 dark:bg-amber-600"},null,-1),e("span",{class:"text-xs font-medium text-amber-700 dark:text-amber-400"},"API Key",-1)]))):(o(),n("div",Tv,s[83]||(s[83]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",Iv,[e("div",Uv,[e("span",{class:$(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:$(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),f(" "+u(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(o(),n("span",_v,[s[84]||(s[84]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),s[85]||(s[85]=f(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(o(),n("span",Kv,"("+u(Ea(l.rateLimitStatus.minutesRemaining))+")",1)):m("",!0)])):m("",!0),l.schedulable===!1?(o(),n("span",Sv,[s[87]||(s[87]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),s[88]||(s[88]=f(" 不可调度 ",-1)),S(l)?(o(),Xe(x,{key:0,content:S(l),effect:"dark",placement:"top"},{default:ot(()=>s[86]||(s[86]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[86]},1032,["content"])):m("",!0)])):m("",!0),l.status==="blocked"&&l.errorMessage?(o(),n("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},u(l.errorMessage),9,Mv)):m("",!0),l.accountType==="dedicated"?(o(),n("span",Dv," 绑定: "+u(l.boundApiKeysCount||0)+" 个API Key ",1)):m("",!0)])]),e("td",Pv,[l.usage&&l.usage.daily?(o(),n("div",jv,[e("div",Vv,[s[89]||(s[89]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",zv,u(l.usage.daily.requests||0)+" 次",1)]),e("div",Lv,[s[90]||(s[90]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Rv,u(Ye(Je)(l.usage.daily.allTokens||0)),1)]),e("div",Ov,[s[91]||(s[91]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Ev,"$"+u(lr(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(o(),n("div",Nv," 平均 "+u(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):m("",!0)])):(o(),n("div",qv,"暂无数据"))]),e("td",Wv,[Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ce=>ia(l.id,ce),onRefreshed:ce=>Qt(l.id,ce)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",Bv,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ce=>$a(l)}," 配置余额脚本 ",8,Gv))])]),e("td",Fv,[l.platform==="claude"?(o(),n("div",Qv,[Me(l)&&l.claudeUsage?(o(),n("div",Hv,[e("div",Jv,[e("div",Yv,[s[92]||(s[92]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Zv,[e("div",Xv,[e("div",e1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",t1,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",a1," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",r1,[e("div",s1,[s[93]||(s[93]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",l1,[e("div",o1,[e("div",n1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",i1,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",d1," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",u1,[e("div",p1,[s[94]||(s[94]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," sonnet ",-1)),e("div",g1,[e("div",c1,[e("div",y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",m1,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",x1," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",f1,[l.usage&&l.usage.sessionWindow?(o(),n("div",b1,[e("div",v1,[s[95]||(s[95]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",k1,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",h1,[s[96]||(s[96]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",w1," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):m("",!0),e("div",$1,[e("div",A1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",C1,u(l.sessionWindow.progress)+"% ",1)]),e("div",T1,[e("div",null,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("div",I1," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):m("",!0)])])):(o(),n("div",U1,"暂无统计"))])):l.platform==="claude-console"?(o(),n("div",_1,[e("div",null,[Number(l.dailyQuota)>0?(o(),n(ke,{key:0},[e("div",K1,[s[97]||(s[97]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",S1,u(Za(l).toFixed(1))+"% ",1)]),e("div",M1,[e("div",D1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",Vr(Za(l))]),style:Ze({width:Math.min(100,Za(l))+"%"})},null,6)]),e("span",P1," $"+u(Ba(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.cost)||0))+" / $"+u(Number(l.dailyQuota).toFixed(2)),1)]),e("div",j1,[f(" 剩余 $"+u(Rr(l))+" ",1),e("span",V1,"重置 "+u(l.quotaResetTime||"00:00"),1)])],64)):(o(),n("div",z1,s[98]||(s[98]=[e("i",{class:"fas fa-minus"},null,-1)])))]),e("div",L1,[e("div",R1,[s[99]||(s[99]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发状态",-1)),Number(l.maxConcurrentTasks||0)>0?(o(),n("span",O1,u(Xa(l).toFixed(0))+"% ",1)):m("",!0)]),Number(l.maxConcurrentTasks||0)>0?(o(),n("div",E1,[e("div",N1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",zr(Xa(l))]),style:Ze({width:Math.min(100,Xa(l))+"%"})},null,6)]),e("span",{class:$(["min-w-[48px] text-xs font-medium",Lr(l)])},u(Number(l.activeTaskCount||0))+" / "+u(Number(l.maxConcurrentTasks||0)),3)])):(o(),n("div",q1,s[100]||(s[100]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),f("并发无限制 ",-1)])))])])):l.platform==="openai"?(o(),n("div",W1,[l.codexUsage?(o(),n("div",B1,[e("div",G1,[e("div",F1,[e("span",Q1,u(aa("primary")),1),e("div",H1,[e("div",J1,[e("div",Y1,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",Z1,u(Ot(l.codexUsage.primary)),1)])])]),e("div",X1," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",ek,[e("div",tk,[e("span",ak,u(aa("secondary")),1),e("div",rk,[e("div",sk,[e("div",lk,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",ok,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",nk," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):(o(),n("div",ik,s[101]||(s[101]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(o(),n("div",dk,s[102]||(s[102]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",uk,u(ja(l.lastUsedAt)),1),e("td",pk,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"||l.platform==="gemini-api"?(o(),n("div",gk,[e("div",ck,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Ze({width:101-(l.priority||50)+"%"})},null,4)]),e("span",yk,u(l.priority||50),1)])):(o(),n("div",mk,s[103]||(s[103]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",xk,[Jt(l.proxy)?(o(),n("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:Jt(l.proxy)},u(Jt(l.proxy)),9,fk)):(o(),n("div",bk,"无代理"))]),e("td",vk,[e("div",kk,[l.expiresAt?(o(),n("span",hk,[Or(l.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[104]||(s[104]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),f(" 已过期 ",-1)]),8,wk)):Er(l.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},[s[105]||(s[105]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),f(" "+u(or(l.expiresAt)),1)],8,$k)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},u(or(l.expiresAt)),9,Ak))])):(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:vt(ce=>Ga(l),["stop"])},s[106]||(s[106]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),f(" 永不过期 ",-1)]),8,Ck))])]),e("td",Tk,[Re.value?(o(),n("div",Vk,[e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Lk,u(l.schedulable?"调度":"停用"),1)],10,zk),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[113]||(s[113]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Rk),Ve(el,{actions:Lt(l)},null,8,["actions"])])):(o(),n("div",Ik,[zt(l)?(o(),n("button",{key:0,class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:ce=>ba(l)},[e("i",{class:$(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),s[107]||(s[107]=e("span",{class:"ml-1"},"重置状态",-1))],10,Uk)):m("",!0),e("button",{class:$(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ce=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",Kk,u(l.schedulable?"调度":"停用"),1)],10,_k),$t(l)?(o(),n("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:ce=>It(l)},s[108]||(s[108]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,Sk)):m("",!0),At(l)?(o(),n("button",{key:2,class:"rounded bg-cyan-100 px-2.5 py-1 text-xs font-medium text-cyan-700 transition-colors hover:bg-cyan-200 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",title:"测试账户连通性",onClick:ce=>Ct(l)},s[109]||(s[109]=[e("i",{class:"fas fa-vial"},null,-1),e("span",{class:"ml-1"},"测试",-1)]),8,Mk)):m("",!0),At(l)?(o(),n("button",{key:3,class:"rounded bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-700 transition-colors hover:bg-amber-200 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",title:"定时测试配置",onClick:ce=>Ut(l)},s[110]||(s[110]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"定时",-1)]),8,Dk)):m("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ce=>Yt(l)},s[111]||(s[111]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Pk),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:ce=>Zt(l)},s[112]||(s[112]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,jk)]))])])}),128))])])],512)])),!P.value&&yt.value.length>0?(o(),n("div",Ok,[(o(!0),n(ke,null,Ne(pt.value,l=>{var te,we,ce,Te;return o(),n("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",Ek,[e("div",Nk,[B.value?b((o(),n("input",{key:0,"onUpdate:modelValue":s[17]||(s[17]=ee=>oe.value=ee),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:rt},null,40,qk)),[[je,oe.value]]):m("",!0),e("div",{class:$(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:$(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:hover:text-blue-400",title:"点击复制",onClick:vt(ee=>Ye(cr)(l.name||l.email),["stop"])},u(l.name||l.email),9,Wk),e("div",Bk,[e("span",Gk,u(l.platform),1),s[114]||(s[114]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Fk,u(l.type),1)])])]),e("span",{class:$(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",$e(l)])},[e("div",{class:$(["mr-1.5 h-1.5 w-1.5 rounded-full",J(l)])},null,2),f(" "+u(L(l)),1)],2)]),e("div",Qk,[e("div",null,[s[118]||(s[118]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Hk,[e("div",Jk,[s[115]||(s[115]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Yk,u(((we=(te=l.usage)==null?void 0:te.daily)==null?void 0:we.requests)||0)+" 次 ",1)]),e("div",Zk,[s[116]||(s[116]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Xk,u(Ye(Je)(((Te=(ce=l.usage)==null?void 0:ce.daily)==null?void 0:Te.allTokens)||0)),1)]),e("div",e2,[s[117]||(s[117]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",t2," $"+u(lr(l)),1)])])]),e("div",null,[s[121]||(s[121]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(o(),n("div",a2,[e("div",r2,[s[119]||(s[119]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",s2,u(Ye(Je)(l.usage.sessionWindow.totalTokens)),1)]),e("div",l2,[s[120]||(s[120]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",o2," $"+u(Ba(l.usage.sessionWindow.totalCost)),1)])])):(o(),n("div",n2,"-"))])]),e("div",i2,[s[122]||(s[122]=e("p",{class:"mb-1 text-xs text-gray-500 dark:text-gray-400"},"余额/配额",-1)),Ve(fr,{"account-id":l.id,"initial-balance":l.balanceInfo,platform:l.platform,"query-mode":l.platform==="gemini"&&l.oauthProvider==="antigravity"?"auto":"local",onError:ee=>ia(l.id,ee),onRefreshed:ee=>Qt(l.id,ee)},null,8,["account-id","initial-balance","platform","query-mode","onError","onRefreshed"]),e("div",d2,[l.platform==="gemini"&&l.oauthProvider==="antigravity"?m("",!0):(o(),n("button",{key:0,class:"text-blue-500 hover:underline dark:text-blue-300",onClick:ee=>$a(l)}," 配置余额脚本 ",8,u2))])]),e("div",p2,[l.platform==="claude"?(o(),n("div",g2,[Me(l)&&l.claudeUsage?(o(),n("div",c2,[e("div",y2,[e("div",m2,[s[123]||(s[123]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",x2,[e("div",f2,[e("div",b2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.fiveHour)]),style:Ze({width:Ue(l.claudeUsage.fiveHour)})},null,6)]),e("span",v2,u(Pe(l.claudeUsage.fiveHour)),1)])])]),e("div",k2," 重置剩余 "+u(tt(l.claudeUsage.fiveHour)),1)]),e("div",h2,[e("div",w2,[s[124]||(s[124]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",$2,[e("div",A2,[e("div",C2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDay)]),style:Ze({width:Ue(l.claudeUsage.sevenDay)})},null,6)]),e("span",T2,u(Pe(l.claudeUsage.sevenDay)),1)])])]),e("div",I2," 重置剩余 "+u(tt(l.claudeUsage.sevenDay)),1)]),e("div",U2,[e("div",_2,[s[125]||(s[125]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",K2,[e("div",S2,[e("div",M2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",et(l.claudeUsage.sevenDayOpus)]),style:Ze({width:Ue(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",D2,u(Pe(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",P2," 重置剩余 "+u(tt(l.claudeUsage.sevenDayOpus)),1)])])):!Me(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(o(),n("div",j2,[e("div",V2,[e("div",z2,[s[127]||(s[127]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Ve(x,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:ot(()=>s[126]||(s[126]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[126]})]),e("span",L2,u(l.sessionWindow.progress)+"% ",1)]),e("div",R2,[e("div",{class:$(["h-full transition-all duration-300",Se(l.sessionWindow.sessionWindowStatus,l)]),style:Ze({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",O2,[e("span",E2,u(ca(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(o(),n("span",N2," 剩余 "+u(ya(l.sessionWindow.remainingTime)),1)):(o(),n("span",q2," 已结束 "))])])):(o(),n("div",W2,"暂无统计"))])):l.platform==="openai"?(o(),n("div",B2,[l.codexUsage?(o(),n("div",G2,[e("div",F2,[e("div",Q2,[e("span",H2,u(aa("primary")),1),e("div",J2,[e("div",Y2,[e("div",Z2,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.primary)]),style:Ze({width:ta(l.codexUsage.primary)})},null,6)]),e("span",X2,u(Ot(l.codexUsage.primary)),1)])])]),e("div",e3," 重置剩余 "+u(St(l.codexUsage.primary)),1)]),e("div",t3,[e("div",a3,[e("span",r3,u(aa("secondary")),1),e("div",s3,[e("div",l3,[e("div",o3,[e("div",{class:$(["h-2 rounded-full transition-all duration-300",ea(l.codexUsage.secondary)]),style:Ze({width:ta(l.codexUsage.secondary)})},null,6)]),e("span",n3,u(Ot(l.codexUsage.secondary)),1)])])]),e("div",i3," 重置剩余 "+u(St(l.codexUsage.secondary)),1)])])):m("",!0),l.codexUsage?m("",!0):(o(),n("div",d3,"暂无统计"))])):m("",!0),e("div",u3,[s[128]||(s[128]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",p3,u(l.lastUsedAt?Ye(Qs)(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(o(),n("div",g3,[s[129]||(s[129]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",c3,u(l.proxyConfig.type.toUpperCase()),1)])):m("",!0),e("div",y3,[s[130]||(s[130]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",m3,u(l.priority||50),1)])]),e("div",x3,[e("button",{class:$(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:ee=>Xt(l)},[e("i",{class:$(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),f(" "+u(l.schedulable?"暂停":"启用"),1)],10,f3),$t(l)?(o(),n("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:ee=>It(l)},s[131]||(s[131]=[e("i",{class:"fas fa-chart-line"},null,-1),f(" 详情 ",-1)]),8,b3)):m("",!0),At(l)?(o(),n("button",{key:1,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-cyan-50 px-3 py-2 text-xs text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-900/40 dark:text-cyan-300 dark:hover:bg-cyan-800/50",onClick:ee=>Ct(l)},s[132]||(s[132]=[e("i",{class:"fas fa-vial"},null,-1),f(" 测试 ",-1)]),8,v3)):m("",!0),At(l)?(o(),n("button",{key:2,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-amber-50 px-3 py-2 text-xs text-amber-600 transition-colors hover:bg-amber-100 dark:bg-amber-900/40 dark:text-amber-300 dark:hover:bg-amber-800/50",onClick:ee=>Ut(l)},s[133]||(s[133]=[e("i",{class:"fas fa-clock"},null,-1),f(" 定时 ",-1)]),8,k3)):m("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:ee=>Yt(l)},s[134]||(s[134]=[e("i",{class:"fas fa-edit mr-1"},null,-1),f(" 编辑 ",-1)]),8,h3),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:ee=>Zt(l)},s[135]||(s[135]=[e("i",{class:"fas fa-trash"},null,-1)]),8,w3)])])}),128))])):m("",!0)]),!P.value&&yt.value.length>0?(o(),n("div",$3,[e("div",A3,[e("span",C3," 共 "+u(yt.value.length)+" 条记录 ",1),e("div",T3,[s[136]||(s[136]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),b(e("select",{"onUpdate:modelValue":s[18]||(s[18]=l=>le.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:s[19]||(s[19]=l=>ae.value=1)},[(o(),n(ke,null,Ne(de,l=>e("option",{key:l,value:l},u(l),9,I3)),64))],544),[[wa,le.value]]),s[137]||(s[137]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",U3,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===1,onClick:s[20]||(s[20]=l=>ae.value--)},s[138]||(s[138]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,_3),e("div",K3,[mt.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[21]||(s[21]=l=>ae.value=1)}," 1 ")):m("",!0),Ta.value?(o(),n("span",S3," ... ")):m("",!0),(o(!0),n(ke,null,Ne(_t.value,l=>(o(),n("button",{key:l,class:$(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===ae.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:te=>ae.value=l},u(l),11,M3))),128)),Ia.value?(o(),n("span",D3," ... ")):m("",!0),oa.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:s[22]||(s[22]=l=>ae.value=De.value)},u(De.value),1)):m("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ae.value===De.value||De.value===0,onClick:s[23]||(s[23]=l=>ae.value++)},s[139]||(s[139]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,P3)])])):m("",!0),q.value&&(!Ee.value||Ee.value!=="ccr")?(o(),Xe(mr,{key:1,onClose:ma,onPlatformChanged:s[24]||(s[24]=l=>Ee.value=l),onSuccess:d})):q.value&&Ee.value==="ccr"?(o(),Xe(xr,{key:2,onClose:ma,onSuccess:d})):m("",!0),We.value&&ut.value&&ut.value.platform==="ccr"?(o(),Xe(xr,{key:3,account:ut.value,onClose:s[25]||(s[25]=l=>We.value=!1),onSuccess:t},null,8,["account"])):We.value?(o(),Xe(mr,{key:4,account:ut.value,onClose:s[26]||(s[26]=l=>We.value=!1),onSuccess:t},null,8,["account"])):m("",!0),Ve(Ja,{"cancel-text":c.value.cancelText,"confirm-text":c.value.confirmText,message:c.value.message,show:_e.value,title:c.value.title,onCancel:T,onConfirm:_},null,8,["cancel-text","confirm-text","message","show","title"]),H.value?(o(),Xe(Fm,{key:5,account:X.value||{},"generated-at":Ce.value,history:C.value,loading:h.value,overview:K.value,show:H.value,summary:G.value,onClose:it},null,8,["account","generated-at","history","loading","overview","show","summary"])):m("",!0),Ve(xx,{ref_key:"expiryEditModalRef",ref:Fe,account:Ke.value||{id:null,expiresAt:null,name:""},show:!!Ke.value,onClose:nr,onSave:Nr},null,8,["account","show"]),Ve(Wx,{account:xe.value,show:Qe.value,onClose:Wt},null,8,["account","show"]),Ve(kf,{account:a.value,show:g.value,onClose:Bt,onSaved:Gt},null,8,["account","show"]),Ve(yb,{account:Rt.value,show:Ft.value,onClose:Aa,onSaved:Ca},null,8,["account","show"]),Ve(w,{modelValue:U.value,"onUpdate:modelValue":s[27]||(s[27]=l=>U.value=l),style:{maxWidth:"1200px"},title:"账户统计汇总",width:"90%"},{default:ot(()=>[e("div",j3,[e("div",V3,[e("table",z3,[s[141]||(s[141]=e("thead",{class:"bg-gray-100 dark:bg-gray-700"},[e("tr",null,[e("th",{class:"border border-gray-300 px-4 py-2 text-left dark:border-gray-600"}," 平台类型 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 正常 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 不可调度 "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流0-1h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流1-5h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流5-12h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流12-24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 限流>24h "),e("th",{class:"border border-gray-300 px-4 py-2 text-center dark:border-gray-600"}," 其他 "),e("th",{class:"border border-gray-300 bg-blue-50 px-4 py-2 text-center font-bold dark:border-gray-600 dark:bg-blue-900/30"}," 合计 ")])],-1)),e("tbody",null,[(o(!0),n(ke,null,Ne(la.value,l=>(o(),n("tr",{key:l.platform},[e("td",L3,u(l.platformLabel),1),e("td",R3,[e("span",O3,u(l.normal),1)]),e("td",E3,[e("span",N3,u(l.unschedulable),1)]),e("td",q3,[e("span",W3,u(l.rateLimit0_1h),1)]),e("td",B3,[e("span",G3,u(l.rateLimit1_5h),1)]),e("td",F3,[e("span",Q3,u(l.rateLimit5_12h),1)]),e("td",H3,[e("span",J3,u(l.rateLimit12_24h),1)]),e("td",Y3,[e("span",Z3,u(l.rateLimitOver24h),1)]),e("td",X3,[e("span",e5,u(l.other),1)]),e("td",t5,u(l.total),1)]))),128)),e("tr",a5,[s[140]||(s[140]=e("td",{class:"border border-gray-300 px-4 py-2 dark:border-gray-600"},"合计",-1)),e("td",r5,[e("span",s5,u(dt.value.normal),1)]),e("td",l5,[e("span",o5,u(dt.value.unschedulable),1)]),e("td",n5,[e("span",i5,u(dt.value.rateLimit0_1h),1)]),e("td",d5,[e("span",u5,u(dt.value.rateLimit1_5h),1)]),e("td",p5,[e("span",g5,u(dt.value.rateLimit5_12h),1)]),e("td",c5,[e("span",y5,u(dt.value.rateLimit12_24h),1)]),e("td",m5,[e("span",x5,u(dt.value.rateLimitOver24h),1)]),e("td",f5,[e("span",b5,u(dt.value.other),1)]),e("td",v5,u(dt.value.total),1)])])])]),s[142]||(s[142]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 注:限流时间列表示剩余限流时间在指定范围内的账户数量 ",-1))])]),_:1},8,["modelValue"]),re.value?(o(),Xe(jr,{key:6,onClose:s[28]||(s[28]=l=>re.value=!1),onRefresh:pa})):m("",!0)])}}},U5=sa(k5,[["__scopeId","data-v-f3c6543e"]]);export{U5 as default};
diff --git a/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css b/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css
deleted file mode 100644
index 270f0c8e..00000000
--- a/web/admin-spa/dist/assets/ActionDropdown-BAe-X9zd.css
+++ /dev/null
@@ -1 +0,0 @@
-.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar{width:6px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:3px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:3px}.max-h-60[data-v-8ae1c2f4]::-webkit-scrollbar-thumb:hover{background:#9ca3af}
diff --git a/assets/ActionDropdown-4ngn0-GS.js b/web/admin-spa/dist/assets/ActionDropdown-GADQlLlI.js
similarity index 98%
rename from assets/ActionDropdown-4ngn0-GS.js
rename to web/admin-spa/dist/assets/ActionDropdown-GADQlLlI.js
index 8eb0f86a..aef3e0e2 100644
--- a/assets/ActionDropdown-4ngn0-GS.js
+++ b/web/admin-spa/dist/assets/ActionDropdown-GADQlLlI.js
@@ -1 +1 @@
-import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-B3t2NHq9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
+import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-DV7DYXbz.js";import{_ as J}from"./index-BahP9Xx9.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
diff --git a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-B36TikZ_.js b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-B36TikZ_.js
deleted file mode 100644
index ab056744..00000000
--- a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-B36TikZ_.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BUfCkBQO.js";import{b as F}from"./vendor-Dr8jvgFu.js";import{c as U,aW as ue,r as b,_ as z,o as L,q as ge,x as i,z as e,R as g,P as r,u as p,J as h,O as I,Q as $,ac as O,aU as pe,y as d,I as A}from"./vue-vendor-R8HMg95E.js";import{c as J,s as Y}from"./index-B3t2NHq9.js";import{f as x,R as xe}from"./RecordDetailModal-CIaCpUK_.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},De={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Se={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ye={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ne={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ue={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Me={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Be={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},He={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ke={class:"flex flex-col"},qe={class:"font-semibold"},Le={class:"text-xs text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},We={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ue(),W=pe(),_=U(()=>Q.params.keyId),N=b(!1),D=b(!1),S=b([]),M=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=U(()=>P.name||P.id||_.value),H=U(()=>!s.dateRange||s.dateRange.length!==2?"":`${T(s.dateRange[0])} ~ ${T(s.dateRange[1])}`),T=o=>o?F(o).format("YYYY-MM-DD HH:mm:ss"):"--",C=o=>{const t=typeof o=="number"?o:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},K=o=>{const t={page:o,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=F(s.dateRange[0]).toISOString(),t.endDate=F(s.dateRange[1]).toISOString()),t},G=o=>{var m,k,v,a;S.value=o.records||[];const t=o.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=o.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const c=o.summary||{};y.totalRequests=c.totalRequests||0,y.totalTokens=c.totalTokens||0,y.totalCost=c.totalCost||0,y.avgCost=c.avgCost||0,P.id=((m=o.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=o.apiKeyInfo)==null?void 0:k.name)||"",M.value=((v=o.availableFilters)==null?void 0:v.models)||[],B.value=((a=o.availableFilters)==null?void 0:a.accounts)||[]},w=async(o=n.currentPage)=>{N.value=!0;try{const t=await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:K(o)});G(t.data||{})}catch(t){Y(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{N.value=!1}},X=o=>{n.currentPage=o,w(o)},ee=o=>{n.pageSize=o,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=o=>{E.value=o,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{W.push("/api-keys")},oe=async()=>{var o;if(!D.value){D.value=!0;try{const t=[];let l=1,c=1;const m=50;for(;l<=c&&l<=m;){const V=(await J.get(`/admin/api-keys/${_.value}/usage-records`,{params:{...K(l),pageSize:200}})).data||{};t.push(...V.records||[]),c=((o=V.pagination)==null?void 0:o.totalPages)||1,l+=1}if(t.length===0){Y("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[T(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||C(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(`
-`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),Y("导出 CSV 成功","success")}catch(t){Y(`导出失败:${t.message||"未知错误"}`,"error")}finally{D.value=!1}}};return L(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),L(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ge(()=>{w()}),(o,t)=>{const l=le,c=ce,m=ne,k=de,v=ie;return d(),i("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,r(Z.value),1),e("p",_e,"ID: "+r(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),H.value?(d(),i("span",be,r(H.value),1)):(d(),i("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,r(p(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,r(p(x)(y.totalTokens)),1)]),e("div",De,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",Se,r(C(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,r(C(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[g(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),g(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),i($,null,O(M.value,a=>(d(),A(c,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),i($,null,O(B.value,a=>(d(),A(c,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),g(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[g(c,{label:"时间降序",value:"desc"}),g(c,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),g(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),I(" 重置 ",-1)])),_:1,__:[10]}),g(k,{loading:D.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),I(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[N.value?(d(),i("div",Ye,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),I(" 加载中... ",-1)]))):(d(),i("div",Ne,[S.value.length===0?(d(),i("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),i("div",Ee,[e("div",Fe,[e("table",Ue,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Me,[(d(!0),i($,null,O(S.value,a=>(d(),i("tr",{key:a.timestamp+a.model},[e("td",Be,r(T(a.timestamp)),1),e("td",He,[e("div",Ke,[e("span",qe,r(a.accountName||"未知账户"),1),e("span",Le,r(a.accountTypeName||"未知渠道"),1)])]),e("td",Ae,r(a.model),1),e("td",Je,r(p(x)(a.inputTokens)),1),e("td",Qe,r(p(x)(a.outputTokens)),1),e("td",We,r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("td",Ze,r(p(x)(a.totalTokens)),1),e("td",Ge,r(a.costFormatted||C(a.cost)),1),e("td",Xe,[g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[I("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),i($,null,O(S.value,a=>(d(),i("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,r(a.accountName||"未知账户"),1),e("p",st,r(T(a.timestamp)),1)]),g(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[I("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+r(a.model),1),e("div",null,"总 Token:"+r(p(x)(a.totalTokens)),1),e("div",null,"输入:"+r(p(x)(a.inputTokens)),1),e("div",null,"输出:"+r(p(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+r(p(x)(a.cacheCreateTokens))+" / "+r(p(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+r(a.costFormatted||C(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+r(n.totalRecords)+" 条记录 ",1),g(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:X,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),g(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default};
diff --git a/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-DEBCoJV1.js b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-DEBCoJV1.js
new file mode 100644
index 00000000..d34e476a
--- /dev/null
+++ b/web/admin-spa/dist/assets/ApiKeyUsageRecordsView-DEBCoJV1.js
@@ -0,0 +1,2 @@
+import{E as le,a as ne,b as de,c as ie,d as ce}from"./element-plus-BSjV1f9S.js";import{b as A}from"./vendor-Dr8jvgFu.js";import{c as F,aX as ge,r as b,_ as z,o as H,q as ue,x as c,z as e,R as p,P as o,u as i,J as h,O as C,Q as $,ac as O,aU as pe,y as d,I as L}from"./vue-vendor-DV7DYXbz.js";import{c as I,f as x,a3 as J,s as N}from"./index-BahP9Xx9.js";import{R as xe}from"./RecordDetailModal-iWzEw88d.js";const ye={class:"space-y-4 p-4 lg:p-6"},me={class:"flex flex-wrap items-center justify-between gap-3"},ke={class:"flex items-center gap-3"},fe={class:"text-xl font-bold text-gray-900 dark:text-gray-100"},_e={class:"text-xs text-gray-500 dark:text-gray-400"},ve={class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},be={key:0},he={key:1},we={class:"grid gap-3 md:grid-cols-2 xl:grid-cols-4"},Re={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Te={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Ce={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ie={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},Se={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},De={class:"mt-1 text-2xl font-bold text-yellow-600 dark:text-yellow-400"},Pe={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ve={class:"mt-1 text-2xl font-bold text-gray-900 dark:text-gray-100"},ze={class:"rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},$e={class:"flex flex-wrap items-center gap-3"},Oe={class:"rounded-xl border border-gray-200 bg-white shadow-sm dark:border-gray-800 dark:bg-gray-900"},Ne={key:0,class:"flex items-center justify-center p-10 text-gray-500 dark:text-gray-400"},Ue={key:1},je={key:0,class:"flex flex-col items-center gap-2 p-10 text-gray-500 dark:text-gray-400"},Ee={key:1,class:"space-y-4"},Fe={class:"hidden overflow-x-auto md:block"},Ye={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-800"},Be={class:"divide-y divide-gray-200 bg-white dark:divide-gray-800 dark:bg-gray-900"},Ke={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Me={class:"px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},qe={class:"flex flex-col"},Ae={class:"font-semibold"},He={class:"text-xs text-gray-500 dark:text-gray-400"},Le={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Je={class:"whitespace-nowrap px-4 py-3 text-sm text-blue-600 dark:text-blue-400"},Qe={class:"whitespace-nowrap px-4 py-3 text-sm text-green-600 dark:text-green-400"},Xe={class:"whitespace-nowrap px-4 py-3 text-sm text-purple-600 dark:text-purple-400"},Ze={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-800 dark:text-gray-100"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-yellow-600 dark:text-yellow-400"},We={class:"whitespace-nowrap px-4 py-3 text-right text-sm"},et={class:"space-y-3 md:hidden"},tt={class:"flex items-center justify-between"},at={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},st={class:"text-xs text-gray-500 dark:text-gray-400"},ot={class:"mt-3 grid grid-cols-2 gap-2 text-sm text-gray-700 dark:text-gray-300"},rt={class:"text-yellow-600 dark:text-yellow-400"},lt={class:"flex items-center justify-between px-4 pb-4"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},xt={__name:"ApiKeyUsageRecordsView",setup(dt){const Q=ge(),X=pe(),_=F(()=>Q.params.keyId),U=b(!1),S=b(!1),D=b([]),Y=b([]),B=b([]),n=z({currentPage:1,pageSize:50,totalRecords:0}),s=z({dateRange:null,model:"",accountId:"",sortOrder:"desc"}),y=z({totalRequests:0,totalTokens:0,totalCost:0,avgCost:0}),P=z({id:_.value,name:""}),j=b(!1),E=b(null),Z=F(()=>P.name||P.id||_.value),K=F(()=>!s.dateRange||s.dateRange.length!==2?"":`${I(s.dateRange[0])} ~ ${I(s.dateRange[1])}`),T=r=>{const t=typeof r=="number"?r:0;return t>=1?`$${t.toFixed(2)}`:t>=.001?`$${t.toFixed(4)}`:`$${t.toFixed(6)}`},M=r=>{const t={page:r,pageSize:n.pageSize,sortOrder:s.sortOrder};return s.model&&(t.model=s.model),s.accountId&&(t.accountId=s.accountId),s.dateRange&&s.dateRange.length===2&&(t.startDate=A(s.dateRange[0]).toISOString(),t.endDate=A(s.dateRange[1]).toISOString()),t},G=r=>{var m,k,v,a;D.value=r.records||[];const t=r.pagination||{};n.currentPage=t.currentPage||1,n.pageSize=t.pageSize||n.pageSize,n.totalRecords=t.totalRecords||0;const l=r.filters||{};if(l.model!==void 0&&(s.model=l.model||""),l.accountId!==void 0&&(s.accountId=l.accountId||""),l.sortOrder&&(s.sortOrder=l.sortOrder),l.startDate&&l.endDate){const f=[l.startDate,l.endDate],R=s.dateRange||[];(R[0]!==f[0]||R[1]!==f[1])&&(s.dateRange=f)}const g=r.summary||{};y.totalRequests=g.totalRequests||0,y.totalTokens=g.totalTokens||0,y.totalCost=g.totalCost||0,y.avgCost=g.avgCost||0,P.id=((m=r.apiKeyInfo)==null?void 0:m.id)||_.value,P.name=((k=r.apiKeyInfo)==null?void 0:k.name)||"",Y.value=((v=r.availableFilters)==null?void 0:v.models)||[],B.value=((a=r.availableFilters)==null?void 0:a.accounts)||[]},w=async(r=n.currentPage)=>{U.value=!0;try{const t=await J(_.value,M(r));G(t.data||{})}catch(t){N(`加载请求记录失败:${t.message||"未知错误"}`,"error")}finally{U.value=!1}},W=r=>{n.currentPage=r,w(r)},ee=r=>{n.pageSize=r,n.currentPage=1,w(1)},te=()=>{s.model="",s.accountId="",s.dateRange=null,s.sortOrder="desc",n.currentPage=1,w(1)},q=r=>{E.value=r,j.value=!0},ae=()=>{j.value=!1,E.value=null},se=()=>{X.push("/api-keys")},oe=async()=>{var r;if(!S.value){S.value=!0;try{const t=[];let l=1,g=1;const m=50;for(;l<=g&&l<=m;){const V=(await J(_.value,{...M(l),pageSize:200})).data||{};t.push(...V.records||[]),g=((r=V.pagination)==null?void 0:r.totalPages)||1,l+=1}if(t.length===0){N("没有可导出的记录","info");return}const v=[["时间","账户","渠道","模型","输入Token","输出Token","缓存创建Token","缓存读取Token","总Token","费用"].join(",")];t.forEach(u=>{const V=[I(u.timestamp),u.accountName||"",u.accountTypeName||"",u.model||"",u.inputTokens||0,u.outputTokens||0,u.cacheCreateTokens||0,u.cacheReadTokens||0,u.totalTokens||0,u.costFormatted||T(u.cost)];v.push(V.map(re=>`"${String(re).replace(/"/g,'""')}"`).join(","))});const a=new Blob([v.join(`
+`)],{type:"text/csv;charset=utf-8;"}),f=URL.createObjectURL(a),R=document.createElement("a");R.href=f,R.download=`api-key-${_.value}-usage-records.csv`,R.click(),URL.revokeObjectURL(f),N("导出 CSV 成功","success")}catch(t){N(`导出失败:${t.message||"未知错误"}`,"error")}finally{S.value=!1}}};return H(()=>[s.model,s.accountId,s.sortOrder],()=>{n.currentPage=1,w(1)}),H(()=>s.dateRange,()=>{n.currentPage=1,w(1)},{deep:!0}),ue(()=>{w()}),(r,t)=>{const l=le,g=ce,m=ne,k=de,v=ie;return d(),c("div",ye,[e("div",me,[e("div",ke,[e("button",{class:"rounded-full border border-gray-200 px-3 py-2 text-sm text-gray-700 transition hover:bg-gray-100 dark:border-gray-700 dark:text-gray-200 dark:hover:bg-gray-800",onClick:se}," ← 返回 "),e("div",null,[t[4]||(t[4]=e("p",{class:"text-xs font-semibold uppercase tracking-wide text-blue-600 dark:text-blue-400"}," API Key 请求详情时间线 ",-1)),e("h2",fe,o(Z.value),1),e("p",_e,"ID: "+o(_.value),1)])]),e("div",ve,[t[5]||(t[5]=e("i",{class:"fas fa-clock text-blue-500"},null,-1)),K.value?(d(),c("span",be,o(K.value),1)):(d(),c("span",he,"显示近 5000 条记录"))])]),e("div",we,[e("div",Re,[t[6]||(t[6]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总请求",-1)),e("p",Te,o(i(x)(y.totalRequests)),1)]),e("div",Ce,[t[7]||(t[7]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总 Token",-1)),e("p",Ie,o(i(x)(y.totalTokens)),1)]),e("div",Se,[t[8]||(t[8]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"总费用",-1)),e("p",De,o(T(y.totalCost)),1)]),e("div",Pe,[t[9]||(t[9]=e("p",{class:"text-xs uppercase text-gray-500 dark:text-gray-400"},"平均费用/次",-1)),e("p",Ve,o(T(y.avgCost)),1)])]),e("div",ze,[e("div",$e,[p(l,{modelValue:s.dateRange,"onUpdate:modelValue":t[0]||(t[0]=a=>s.dateRange=a),class:"max-w-[320px]",clearable:"","end-placeholder":"结束时间",format:"YYYY-MM-DD HH:mm:ss","start-placeholder":"开始时间",type:"datetimerange","unlink-panels":"","value-format":"YYYY-MM-DDTHH:mm:ss[Z]"},null,8,["modelValue"]),p(m,{modelValue:s.model,"onUpdate:modelValue":t[1]||(t[1]=a=>s.model=a),class:"w-[180px]",clearable:"",filterable:"",placeholder:"所有模型"},{default:h(()=>[(d(!0),c($,null,O(Y.value,a=>(d(),L(g,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),p(m,{modelValue:s.accountId,"onUpdate:modelValue":t[2]||(t[2]=a=>s.accountId=a),class:"w-[220px]",clearable:"",filterable:"",placeholder:"所有账户"},{default:h(()=>[(d(!0),c($,null,O(B.value,a=>(d(),L(g,{key:a.id,label:`${a.name}(${a.accountTypeName})`,value:a.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),p(m,{modelValue:s.sortOrder,"onUpdate:modelValue":t[3]||(t[3]=a=>s.sortOrder=a),class:"w-[140px]",placeholder:"排序"},{default:h(()=>[p(g,{label:"时间降序",value:"desc"}),p(g,{label:"时间升序",value:"asc"})]),_:1},8,["modelValue"]),p(k,{onClick:te},{default:h(()=>t[10]||(t[10]=[e("i",{class:"fas fa-undo mr-2"},null,-1),C(" 重置 ",-1)])),_:1,__:[10]}),p(k,{loading:S.value,type:"primary",onClick:oe},{default:h(()=>t[11]||(t[11]=[e("i",{class:"fas fa-file-export mr-2"},null,-1),C(" 导出 CSV ",-1)])),_:1,__:[11]},8,["loading"])])]),e("div",Oe,[U.value?(d(),c("div",Ne,t[12]||(t[12]=[e("i",{class:"fas fa-spinner fa-spin mr-2"},null,-1),C(" 加载中... ",-1)]))):(d(),c("div",Ue,[D.value.length===0?(d(),c("div",je,t[13]||(t[13]=[e("i",{class:"fas fa-inbox text-2xl"},null,-1),e("p",null,"暂无记录",-1)]))):(d(),c("div",Ee,[e("div",Fe,[e("table",Ye,[t[15]||(t[15]=e("thead",{class:"bg-gray-50 dark:bg-gray-800"},[e("tr",null,[e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 时间 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 账户 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 模型 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输入 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 输出 "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 缓存(创/读) "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 总 Token "),e("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 费用 "),e("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),e("tbody",Be,[(d(!0),c($,null,O(D.value,a=>(d(),c("tr",{key:a.timestamp+a.model},[e("td",Ke,o(i(I)(a.timestamp)),1),e("td",Me,[e("div",qe,[e("span",Ae,o(a.accountName||"未知账户"),1),e("span",He,o(a.accountTypeName||"未知渠道"),1)])]),e("td",Le,o(a.model),1),e("td",Je,o(i(x)(a.inputTokens)),1),e("td",Qe,o(i(x)(a.outputTokens)),1),e("td",Xe,o(i(x)(a.cacheCreateTokens))+" / "+o(i(x)(a.cacheReadTokens)),1),e("td",Ze,o(i(x)(a.totalTokens)),1),e("td",Ge,o(a.costFormatted||T(a.cost)),1),e("td",We,[p(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[14]||(t[14]=[C("详情",-1)])),_:2,__:[14]},1032,["onClick"])])]))),128))])])]),e("div",et,[(d(!0),c($,null,O(D.value,a=>(d(),c("div",{key:a.timestamp+a.model,class:"rounded-lg border border-gray-200 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900"},[e("div",tt,[e("div",null,[e("p",at,o(a.accountName||"未知账户"),1),e("p",st,o(i(I)(a.timestamp)),1)]),p(k,{size:"small",onClick:f=>q(a)},{default:h(()=>t[16]||(t[16]=[C("详情",-1)])),_:2,__:[16]},1032,["onClick"])]),e("div",ot,[e("div",null,"模型:"+o(a.model),1),e("div",null,"总 Token:"+o(i(x)(a.totalTokens)),1),e("div",null,"输入:"+o(i(x)(a.inputTokens)),1),e("div",null,"输出:"+o(i(x)(a.outputTokens)),1),e("div",null," 缓存创/读:"+o(i(x)(a.cacheCreateTokens))+" / "+o(i(x)(a.cacheReadTokens)),1),e("div",rt," 费用:"+o(a.costFormatted||T(a.cost)),1)])]))),128))]),e("div",lt,[e("div",nt," 共 "+o(n.totalRecords)+" 条记录 ",1),p(v,{background:"","current-page":n.currentPage,layout:"prev, pager, next, sizes","page-size":n.pageSize,"page-sizes":[20,50,100,200],total:n.totalRecords,onCurrentChange:W,onSizeChange:ee},null,8,["current-page","page-size","total"])])]))]))]),p(xe,{record:E.value,show:j.value,onClose:ae},null,8,["record","show"])])}}};export{xt as default};
diff --git a/web/admin-spa/dist/assets/ApiKeysView-DZf3x888.js b/web/admin-spa/dist/assets/ApiKeysView-DZf3x888.js
new file mode 100644
index 00000000..6d3bda45
--- /dev/null
+++ b/web/admin-spa/dist/assets/ApiKeysView-DZf3x888.js
@@ -0,0 +1,20 @@
+import{E as Sa}from"./element-plus-BSjV1f9S.js";import{aP as Es,r as A,c as j,q as wt,V as Os,o as Re,x as n,y as o,z as e,I as he,C as F,P as u,R as ne,J as js,L as $,B as Rt,K as _,aq as le,Q as re,ac as ge,u as Ae,T as Gs,a5 as Oe,D as Ma,_ as ut,Y as $e,an as De,O as K,aa as tt,al as Ie,aV as kt,f as bt,aU as Ua}from"./vue-vendor-DV7DYXbz.js";import{r as Ra,t as Va,v as zs,w as Vt,x as Pa,y as qs,z as Ea,A as Oa,_ as st,c as Pe,s as R,B as ja,C as Pt,D as Et,E as Ot,F as jt,G as Gt,H as zt,I as qt,J as Ft,K as Bt,L as Ga,M as za,f as vt,N as qa,O as Fa,P as Ba,Q as Wa,u as Na,R as Ha,S as Ya,T as Qa,U as Ja,V as Xa,W as Za,X as er,Y as tr,Z as rs,$ as sr,a0 as ar,a1 as rr,a2 as or}from"./index-BahP9Xx9.js";import{Q as et}from"./vendor-Dr8jvgFu.js";import{C as at}from"./ConfirmModal-C2rCOkXI.js";import{_ as lr}from"./WindowCountdown-Cz478C_V.js";import{C as Ut,_ as nr}from"./ActionDropdown-GADQlLlI.js";const Fs=Es("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0;const h=await Ra();return h.success?this.supportedClients=h.data||[]:this.error=h.message,this.loading=!1,this.supportedClients}}}),ls=Es("apiKeys",()=>{const h=A([]),J=A(!1),c=A(null),P=A("all"),Y=A(""),I=A("asc"),z=async()=>{J.value=!0;const G=await Va();G.success?h.value=G.data||[]:c.value=G.message,J.value=!1},S=async G=>{J.value=!0;const ee=await zs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},W=async(G,ee)=>{J.value=!0;const te=await Vt(G,ee);return te.success?await z():c.value=te.message,J.value=!1,te};return{apiKeys:h,loading:J,error:c,statsTimeRange:P,sortBy:Y,sortOrder:I,fetchApiKeys:z,createApiKey:S,updateApiKey:W,toggleApiKey:async G=>{J.value=!0;const ee=await Pa(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},renewApiKey:(G,ee)=>W(G,ee),deleteApiKey:async G=>{J.value=!0;const ee=await qs(G);return ee.success?await z():c.value=ee.message,J.value=!1,ee},fetchApiKeyStats:async(G,ee="all")=>{const te=await Ea(G,{timeRange:ee});return te.success?te.stats:null},fetchTags:async()=>{const G=await Oa();return G.success?G.data||[]:[]},sortApiKeys:G=>{Y.value===G?I.value=I.value==="asc"?"desc":"asc":(Y.value=G,I.value="asc")},reset:()=>{h.value=[],J.value=!1,c.value=null,P.value="all",Y.value="",I.value="asc"}}}),ir={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},dr={class:"relative"},ur={class:"custom-scrollbar flex-1 overflow-y-auto"},cr={key:0,class:"border-b border-gray-200 dark:border-gray-600"},gr=["onClick"],pr={class:"text-gray-700 dark:text-gray-300"},mr={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},xr={class:"text-gray-700 dark:text-gray-300"},yr={key:1},fr=["onClick"],br={class:"flex items-center justify-between"},vr={class:"text-gray-700 dark:text-gray-300"},kr={class:"text-xs text-gray-500 dark:text-gray-400"},wr={key:2},hr={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ar=["onClick"],Cr={class:"flex items-center justify-between"},$r={class:"text-gray-700 dark:text-gray-300"},Ir={class:"text-xs text-gray-400 dark:text-gray-500"},Kr={key:3},Lr=["onClick"],Dr={class:"flex items-center justify-between"},Tr={class:"text-gray-700 dark:text-gray-300"},_r={class:"text-xs text-gray-400 dark:text-gray-500"},Sr={key:4},Mr=["onClick"],Ur={class:"flex items-center justify-between"},Rr={class:"text-gray-700 dark:text-gray-300"},Vr={class:"text-xs text-gray-400 dark:text-gray-500"},Pr={key:5},Er=["onClick"],Or={class:"flex items-center justify-between"},jr={class:"text-gray-700 dark:text-gray-300"},Gr={class:"text-xs text-gray-400 dark:text-gray-500"},zr={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},qr={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:h=>["claude","gemini","openai","bedrock","droid"].includes(h)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(""),z=A(null),S=A(null),W=A({}),X=A(null),Q=A(""),v=j(()=>c.specialOptions||[]),L=j(()=>{const d=v.value.find(b=>b.value===c.modelValue);if(d)return d.label;if(!c.modelValue)return c.defaultOptionText;if(c.modelValue.startsWith("group:")){const b=c.modelValue.substring(6),oe=c.groups.find(xe=>xe.id===b);return oe?`${oe.name} (${oe.memberCount||0} 个成员)`:""}if(c.modelValue.startsWith("console:")){const b=c.modelValue.substring(8),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="claude-console");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("responses:")){const b=c.modelValue.substring(10),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="openai-responses");return oe?`${oe.name} (${f(oe)})`:""}if(c.modelValue.startsWith("api:")){const b=c.modelValue.substring(4),oe=c.accounts.find(xe=>xe.id===b&&xe.platform==="gemini-api");return oe?`${oe.name} (${f(oe)})`:""}const p=c.accounts.find(b=>b.id===c.modelValue);return p?`${p.name} (${f(p)})`:""}),f=d=>{if(!d)return"未知";if(!(d.isActive==="true"||d.isActive===!0))switch(d.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return d.status==="rate_limited"?"限流中":"正常"},M=j(()=>[...c.accounts].sort((d,p)=>{const b=new Date(d.createdAt||0);return new Date(p.createdAt||0)-b})),se=j(()=>{let d=c.groups.filter(p=>p.platform?p.platform===c.platform:!0);if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),G=j(()=>{let d=[];if(c.platform==="claude"?d=M.value.filter(p=>p.platform==="claude-oauth"):c.platform==="openai"?d=M.value.filter(p=>p.platform==="openai"):c.platform==="droid"?d=M.value.filter(p=>p.platform==="droid"):c.platform==="gemini"?d=M.value.filter(p=>p.platform==="gemini"):d=M.value.filter(p=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(p.platform)),I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),ee=j(()=>{if(c.platform!=="claude")return[];let d=M.value.filter(p=>p.platform==="claude-console");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),te=j(()=>{if(c.platform!=="openai")return[];let d=M.value.filter(p=>p.platform==="openai-responses");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),H=j(()=>{if(c.platform!=="gemini")return[];let d=M.value.filter(p=>p.platform==="gemini-api");if(I.value){const p=I.value.toLowerCase();d=d.filter(b=>b.name.toLowerCase().includes(p))}return d}),C=j(()=>se.value.length>0||G.value.length>0||ee.value.length>0||te.value.length>0||H.value.length>0),T=()=>{if(!Y.value||!S.value||!X.value)return;const d=X.value;if(!d)return;const p=d.getBoundingClientRect(),b=window.innerHeight,oe=window.innerWidth,xe=b-p.bottom,Te=p.top,Ce=8,N=xe-Ce,i=Te-Ce;let k=!1,ie=N;Q.value==="above"&&i>=150?(k=!0,ie=i):Q.value==="below"&&N>=150?(k=!1,ie=N):i>N&&N<200&&(k=!0,ie=i),Q.value=k?"above":"below";let ae=p.left;const E=p.width;ae+E>oe-Ce&&(ae=oe-E-Ce),ae{if(!Y.value&&X.value){const d=X.value.getBoundingClientRect(),b=window.innerHeight-d.bottom,oe=8;W.value={position:"fixed",left:`${d.left}px`,width:`${d.width}px`,maxHeight:`${Math.min(b-oe,400)}px`,top:`${d.bottom}px`}}Y.value=!Y.value,Y.value&&Ma(()=>{var d;T(),(d=z.value)==null||d.focus()})},Z=d=>{P("update:modelValue",d||""),Y.value=!1,I.value=""},V=()=>{},D=()=>{var d;I.value="",(d=z.value)==null||d.focus()},U=d=>{var p,b;!((p=X.value)!=null&&p.contains(d.target))&&!((b=S.value)!=null&&b.contains(d.target))&&(Y.value=!1)},x=()=>{Y.value&&T()};return wt(()=>{document.addEventListener("click",U),window.addEventListener("scroll",x,!0),window.addEventListener("resize",T)}),Os(()=>{document.removeEventListener("click",U),window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",T)}),Re(Y,d=>{d||(I.value="",Q.value="")}),(d,p)=>(o(),n("div",{ref_key:"triggerRef",ref:X,class:"relative"},[e("div",{class:F(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":h.disabled}]),onClick:p[0]||(p[0]=b=>!h.disabled&&a())},[e("span",{class:F(h.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},u(L.value),3),e("i",{class:F(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":Y.value}])},null,2)],2),(o(),he(Oe,{to:"body"},[ne(Gs,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:js(()=>[Y.value?(o(),n("div",{key:0,ref_key:"dropdownRef",ref:S,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:Rt(W.value)},[e("div",ir,[e("div",dr,[_(e("input",{ref_key:"searchInput",ref:z,"onUpdate:modelValue":p[1]||(p[1]=b=>I.value=b),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:V},null,544),[[le,I.value]]),p[4]||(p[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),I.value?(o(),n("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:D},p[3]||(p[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):$("",!0)])]),e("div",ur,[v.value.length>0?(o(),n("div",cr,[(o(!0),n(re,null,ge(v.value,b=>(o(),n("div",{key:`special-${b.value}`,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===b.value}]),onClick:oe=>Z(b.value)},[e("span",pr,u(b.label),1),b.description?(o(),n("span",mr,u(b.description),1)):$("",!0)],10,gr))),128))])):$("",!0),e("div",{class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!h.modelValue}]),onClick:p[2]||(p[2]=b=>Z(null))},[e("span",xr,u(h.defaultOptionText),1)],2),se.value.length>0?(o(),n("div",yr,[p[5]||(p[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(o(!0),n(re,null,ge(se.value,b=>(o(),n("div",{key:`group:${b.id}`,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`group:${b.id}`}]),onClick:oe=>Z(`group:${b.id}`)},[e("div",br,[e("span",vr,u(b.name),1),e("span",kr,u(b.memberCount||0)+" 个成员",1)])],10,fr))),128))])):$("",!0),G.value.length>0?(o(),n("div",wr,[e("div",hr,u(h.platform==="claude"?"Claude OAuth 专属账号":h.platform==="openai"?"OpenAI 专属账号":h.platform==="droid"?"Droid 专属账号":h.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(o(!0),n(re,null,ge(G.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===b.id}]),onClick:oe=>Z(b.id)},[e("div",Cr,[e("div",null,[e("span",$r,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Ir,u(Ae(Pe)(b.createdAt)),1)])],10,Ar))),128))])):$("",!0),h.platform==="claude"&&ee.value.length>0?(o(),n("div",Kr,[p[6]||(p[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(o(!0),n(re,null,ge(ee.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`console:${b.id}`}]),onClick:oe=>Z(`console:${b.id}`)},[e("div",Dr,[e("div",null,[e("span",Tr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",_r,u(Ae(Pe)(b.createdAt)),1)])],10,Lr))),128))])):$("",!0),h.platform==="openai"&&te.value.length>0?(o(),n("div",Sr,[p[7]||(p[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(o(!0),n(re,null,ge(te.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`responses:${b.id}`}]),onClick:oe=>Z(`responses:${b.id}`)},[e("div",Ur,[e("div",null,[e("span",Rr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Vr,u(Ae(Pe)(b.createdAt)),1)])],10,Mr))),128))])):$("",!0),h.platform==="gemini"&&H.value.length>0?(o(),n("div",Pr,[p[8]||(p[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(o(!0),n(re,null,ge(H.value,b=>(o(),n("div",{key:b.id,class:F(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":h.modelValue===`api:${b.id}`}]),onClick:oe=>Z(`api:${b.id}`)},[e("div",Or,[e("div",null,[e("span",jr,u(b.name),1),e("span",{class:F(["ml-2 rounded-full px-2 py-0.5 text-xs",b.isActive==="true"||b.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":b.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},u(f(b)),3)]),e("span",Gr,u(Ae(Pe)(b.createdAt)),1)])],10,Er))),128))])):$("",!0),I.value&&!C.value?(o(),n("div",zr,p[9]||(p[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):$("",!0)])],4)):$("",!0)]),_:1})]))],512))}},_e=st(qr,[["__scopeId","data-v-15b77cd6"]]),Fr={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Br={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},Wr={class:"mb-4 flex items-center justify-between"},Nr={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},Hr={class:"flex items-center gap-3 sm:gap-4"},Yr={class:"flex cursor-pointer items-center"},Qr={class:"flex cursor-pointer items-center"},Jr={key:0,class:"mt-3"},Xr={class:"flex items-center gap-4"},Zr={class:"flex-1"},eo={class:"flex items-center gap-2"},to={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},so=["placeholder"],ao={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},ro={class:"space-y-4"},oo={key:0},lo={class:"flex flex-wrap gap-2"},no=["onClick"],io={key:1},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={class:"flex gap-2"},po=["onKeypress"],mo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},xo={class:"space-y-2"},yo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},fo={class:"space-y-2"},bo={class:"flex gap-2"},vo={class:"space-y-2"},ko={class:"flex gap-2"},wo={class:"space-y-2"},ho={class:"flex gap-2"},Ao={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Co={class:"flex items-center justify-between"},$o={class:"flex items-center gap-2"},Io={key:0,class:"mt-3 space-y-2"},Ko={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},Lo=["onUpdate:modelValue"],Do={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},To={class:"flex items-center gap-4"},_o={class:"flex cursor-pointer items-center"},So={class:"flex cursor-pointer items-center"},Mo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Uo={key:0},Ro={key:1},Vo={key:0},Po={key:0,class:"mt-3"},Eo=["min"],Oo={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},jo={key:1},Go={class:"flex items-center gap-2"},zo=["max","placeholder"],qo={class:"mt-2 flex flex-wrap gap-2"},Fo=["onClick"],Bo={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Wo={class:"flex flex-wrap gap-4"},No={class:"flex cursor-pointer items-center"},Ho={class:"flex cursor-pointer items-center"},Yo={class:"flex cursor-pointer items-center"},Qo={class:"flex cursor-pointer items-center"},Jo={class:"mb-2 flex items-center justify-between"},Xo=["disabled"],Zo={class:"grid grid-cols-1 gap-3"},el={class:"mb-2 flex items-center"},tl={key:0,class:"space-y-3"},sl={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},al=["onClick"],rl={key:0,class:"text-sm text-gray-400"},ol={class:"space-y-3"},ll={class:"flex flex-wrap gap-2"},nl=["onClick"],il={key:0,class:"text-sm italic text-gray-400"},dl={class:"flex gap-2"},ul=["onKeydown"],cl={class:"mb-2 flex items-center"},gl={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},pl={class:"space-y-1"},ml=["id","value"],xl=["for"],yl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},fl={class:"block text-xs text-gray-500 dark:text-gray-400"},bl={class:"flex gap-3 pt-2"},vl=["disabled"],kl={key:0,class:"loading-spinner mr-2"},wl={key:1,class:"fas fa-plus mr-2"},hl={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(E,l,y="确认",de="取消",Ue="primary")=>new Promise(Se=>{X.value={title:E,message:l,confirmText:y,cancelText:de,type:Ue},Q.value=Se,W.value=!0}),L=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!0)},f=()=>{var E;W.value=!1,(E=Q.value)==null||E.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A({name:""}),G=A(""),ee=A([]),te=j(()=>ee.value.filter(E=>!a.tags.includes(E))),H=A([]),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({createType:"single",batchCount:10,name:"",description:"",serviceRates:{},rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]}),Z=()=>{};wt(async()=>{if(H.value=await Y.loadSupportedClients(),ee.value=await I.fetchTags(),c.accounts){const E=(c.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),l=[];c.accounts.openai&&c.accounts.openai.forEach(y=>{l.push({...y,platform:y.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(y=>{l.push({...y,platform:y.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:E,openai:l,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}});const V=async()=>{var E,l;S.value=!0;try{const[y,de,Ue,Se,Be,ye,Qe,ce,Ve]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ze=[];y.success&&((E=y.data)==null||E.forEach(pe=>{ze.push({...pe,platform:"claude-oauth",isDedicated:pe.accountType==="dedicated"})})),de.success&&((l=de.data)==null||l.forEach(pe=>{ze.push({...pe,platform:"claude-console",isDedicated:pe.accountType==="dedicated"})})),M.value.claude=ze;const We=[];Ue.success&&(Ue.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini",isDedicated:pe.accountType==="dedicated"})}),Se.success&&(Se.data||[]).forEach(pe=>{We.push({...pe,platform:"gemini-api",isDedicated:pe.accountType==="dedicated"})}),M.value.gemini=We;const Ne=[];if(Be.success&&(Be.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai",isDedicated:pe.accountType==="dedicated"})}),ye.success&&(ye.data||[]).forEach(pe=>{Ne.push({...pe,platform:"openai-responses",isDedicated:pe.accountType==="dedicated"})}),M.value.openai=Ne,Qe.success&&(M.value.bedrock=(Qe.data||[]).map(pe=>({...pe,isDedicated:pe.accountType==="dedicated"}))),ce.success&&(M.value.droid=(ce.data||[]).map(pe=>({...pe,platform:"droid",isDedicated:pe.accountType==="dedicated"}))),Ve.success){const pe=Ve.data||[];M.value.claudeGroups=pe.filter(Ee=>Ee.platform==="claude"),M.value.geminiGroups=pe.filter(Ee=>Ee.platform==="gemini"),M.value.openaiGroups=pe.filter(Ee=>Ee.platform==="openai"),M.value.droidGroups=pe.filter(Ee=>Ee.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},D=j(()=>{const E=new Date;return E.setMinutes(E.getMinutes()+1),E.toISOString().slice(0,16)}),U=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const E=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,de,Ue]=y,Se=parseInt(de);switch(Ue){case"d":E.setDate(E.getDate()+Se);break;case"h":E.setHours(E.getHours()+Se);break;case"m":E.setMonth(E.getMonth()+Se);break;case"y":E.setFullYear(E.getFullYear()+Se);break}a.expiresAt=E.toISOString()}},x=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},d=E=>new Date(E).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),p=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},b=E=>{a.restrictedModels.splice(E,1)},oe=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),xe=j(()=>oe.value.filter(E=>!a.restrictedModels.includes(E))),Te=E=>{a.restrictedModels.includes(E)||a.restrictedModels.push(E)},Ce=()=>{if(G.value&&G.value.trim()){const E=G.value.trim();a.tags.includes(E)||a.tags.push(E),G.value=""}},N=E=>{a.tags.includes(E)||a.tags.push(E)},i=E=>{a.tags.splice(E,1)},k=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],ie=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},ae=async()=>{if(se.value.name="",!a.name||!a.name.trim()){se.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){R("批量创建数量必须在 2-500 之间","error");return}if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
+
+是否继续?`,"继续创建","返回修改","warning"))){z.value=!0;try{const E={};if(C.value)for(const[y,de]of Object.entries(a.serviceRates))de!=null&&de!==""&&(E[y]=de);const l={description:a.description||void 0,serviceRates:E,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(l.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete l.claudeAccountId):(l.claudeAccountId=a.claudeAccountId,delete l.claudeConsoleAccountId)),a.geminiAccountId&&(l.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(l.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(l.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(l.droidAccountId=a.droidAccountId),a.createType==="single"){const y={...l,name:a.name},de=await zs(y);de.success?(R("API Key 创建成功","success"),P("success",de.data),P("close")):R(de.message||"创建失败","error")}else{const y={...l,createType:"batch",baseName:a.name,count:a.batchCount},de=await ja(y);de.success?(R(`成功创建 ${de.data.length} 个 API Key`,"success"),P("batch-success",de.data),P("close")):R(de.message||"批量创建失败","error")}}catch{R("创建失败","error")}finally{z.value=!1}}};return(E,l)=>(o(),he(Oe,{to:"body"},[e("div",Fr,[e("div",Br,[e("div",Wr,[l[49]||(l[49]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=y=>E.$emit("close"))},l[48]||(l[48]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:$e(ae,["prevent"])},[e("div",Nr,[e("div",{class:F(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[l[52]||(l[52]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",Hr,[e("label",Yr,[_(e("input",{"onUpdate:modelValue":l[1]||(l[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[De,a.createType]]),l[50]||(l[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),K(" 单个创建 ")],-1))]),e("label",Qr,[_(e("input",{"onUpdate:modelValue":l[2]||(l[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[De,a.createType]]),l[51]||(l[51]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),K(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(o(),n("div",Jr,[e("div",Xr,[e("div",Zr,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",eo,[_(e("input",{"onUpdate:modelValue":l[3]||(l[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[le,a.batchCount,void 0,{number:!0}]]),l[53]||(l[53]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",to,[l[55]||(l[55]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+u(a.name||"MyKey")+"_1, "+u(a.name||"MyKey")+"_2 ...",1)])])):$("",!0)]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[K("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":l[4]||(l[4]=y=>a.name=y),class:F(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":se.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:l[5]||(l[5]=y=>se.value.name="")},null,42,so),[[le,a.name]])]),se.value.name?(o(),n("p",ao,u(se.value.name),1)):$("",!0)]),e("div",null,[l[64]||(l[64]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",ro,[a.tags.length>0?(o(),n("div",oo,[l[58]||(l[58]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",lo,[(o(!0),n(re,null,ge(a.tags,(y,de)=>(o(),n("span",{key:"selected-"+de,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[K(u(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:Ue=>i(de)},l[57]||(l[57]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,no)]))),128))])])):$("",!0),te.value.length>0?(o(),n("div",io,[l[60]||(l[60]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",uo,[(o(!0),n(re,null,ge(te.value,y=>(o(),n("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:de=>N(y)},[l[59]||(l[59]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(y),1)],8,co))),128))])])):$("",!0),e("div",null,[l[62]||(l[62]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",go,[_(e("input",{"onUpdate:modelValue":l[6]||(l[6]=y=>G.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(Ce,["prevent"]),["enter"])},null,40,po),[[le,G.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ce},l[61]||(l[61]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[63]||(l[63]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",mo,[l[72]||(l[72]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",xo,[e("div",yo,[e("div",null,[l[65]||(l[65]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":l[7]||(l[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitWindow]]),l[66]||(l[66]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[67]||(l[67]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":l[8]||(l[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitRequests]]),l[68]||(l[68]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[69]||(l[69]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":l[9]||(l[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[le,a.rateLimitCost]]),l[70]||(l[70]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[71]||(l[71]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",fo,[e("div",bo,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[11]||(l[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[12]||(l[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[13]||(l[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[14]||(l[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.dailyCostLimit]]),l[73]||(l[73]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[76]||(l[76]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",vo,[e("div",ko,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[16]||(l[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[17]||(l[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[18]||(l[18]=y=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[19]||(l[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.totalCostLimit]]),l[75]||(l[75]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",wo,[e("div",ho,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[21]||(l[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[22]||(l[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[23]||(l[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":l[24]||(l[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.weeklyOpusCostLimit]]),l[77]||(l[77]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),_(e("input",{"onUpdate:modelValue":l[25]||(l[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[le,a.concurrencyLimit]]),l[80]||(l[80]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),_(e("textarea",{"onUpdate:modelValue":l[26]||(l[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[le,a.description]])]),e("div",Ao,[e("div",Co,[e("div",$o,[_(e("input",{id:"enableServiceRates","onUpdate:modelValue":l[27]||(l[27]=y=>C.value=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),l[82]||(l[82]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableServiceRates"}," 自定义服务倍率 ",-1))]),l[83]||(l[83]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Io,[(o(),n(re,null,ge(T,y=>e("div",{key:y.key,class:"flex items-center gap-2"},[e("span",Ko,u(y.label),1),_(e("input",{"onUpdate:modelValue":de=>a.serviceRates[y.key]=de,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,Lo),[[le,a.serviceRates[y.key],void 0,{number:!0}]]),l[84]||(l[84]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[l[92]||(l[92]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Do,[e("div",To,[e("label",_o,[_(e("input",{"onUpdate:modelValue":l[28]||(l[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[De,a.expirationMode]]),l[85]||(l[85]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",So,[_(e("input",{"onUpdate:modelValue":l[29]||(l[29]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[De,a.expirationMode]]),l[86]||(l[86]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Mo,[a.expirationMode==="fixed"?(o(),n("span",Uo,l[87]||(l[87]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(o(),n("span",Ro,l[88]||(l[88]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),K(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(o(),n("div",Vo,[_(e("select",{"onUpdate:modelValue":l[30]||(l[30]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:U},l[89]||(l[89]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[kt,a.expireDuration]]),a.expireDuration==="custom"?(o(),n("div",Po,[_(e("input",{"onUpdate:modelValue":l[31]||(l[31]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:D.value,type:"datetime-local",onChange:x},null,40,Eo),[[le,a.customExpireDate]])])):$("",!0),a.expiresAt?(o(),n("p",Oo," 将于 "+u(d(a.expiresAt))+" 过期 ",1)):$("",!0)])):(o(),n("div",jo,[e("div",Go,[_(e("input",{"onUpdate:modelValue":l[32]||(l[32]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,zo),[[le,a.activationDays,void 0,{number:!0}]]),_(e("select",{"onUpdate:modelValue":l[33]||(l[33]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:ie},l[90]||(l[90]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[kt,a.activationUnit]])]),e("div",qo,[(o(!0),n(re,null,ge(k(),y=>(o(),n("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:de=>a.activationDays=y.value},u(y.label),9,Fo))),128))]),e("p",Bo,[l[91]||(l[91]=e("i",{class:"fas fa-clock mr-1"},null,-1)),K(" Key 将在首次使用后激活,激活后 "+u(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+u(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[l[97]||(l[97]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Wo,[e("label",No,[_(e("input",{"onUpdate:modelValue":l[34]||(l[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),l[93]||(l[93]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Ho,[_(e("input",{"onUpdate:modelValue":l[35]||(l[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),l[94]||(l[94]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Yo,[_(e("input",{"onUpdate:modelValue":l[36]||(l[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),l[95]||(l[95]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Qo,[_(e("input",{"onUpdate:modelValue":l[37]||(l[37]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid",onChange:Z},null,544),[[Ie,a.permissions]]),l[96]||(l[96]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[98]||(l[98]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",Jo,[l[99]||(l[99]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:S.value,title:"刷新账号列表",type:"button",onClick:V},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,Xo)]),e("div",Zo,[e("div",null,[l[100]||(l[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[38]||(l[38]=y=>a.claudeAccountId=y),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[101]||(l[101]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[39]||(l[39]=y=>a.geminiAccountId=y),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[102]||(l[102]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[40]||(l[40]=y=>a.openaiAccountId=y),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[103]||(l[103]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[41]||(l[41]=y=>a.bedrockAccountId=y),accounts:M.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[104]||(l[104]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[42]||(l[42]=y=>a.droidAccountId=y),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[105]||(l[105]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",el,[_(e("input",{id:"enableModelRestriction","onUpdate:modelValue":l[43]||(l[43]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ie,a.enableModelRestriction]]),l[106]||(l[106]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",tl,[e("div",null,[l[109]||(l[109]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",sl,[(o(!0),n(re,null,ge(a.restrictedModels,(y,de)=>(o(),n("span",{key:de,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[K(u(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:Ue=>b(de)},l[107]||(l[107]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,al)]))),128)),a.restrictedModels.length===0?(o(),n("span",rl," 暂无限制的模型 ")):$("",!0)]),e("div",ol,[e("div",ll,[(o(!0),n(re,null,ge(xe.value,y=>(o(),n("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:de=>Te(y)},u(y),9,nl))),128)),xe.value.length===0?(o(),n("span",il," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",dl,[_(e("input",{"onUpdate:modelValue":l[44]||(l[44]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:tt($e(p,["prevent"]),["enter"])},null,40,ul),[[le,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:p},l[108]||(l[108]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[110]||(l[110]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",cl,[_(e("input",{id:"enableClientRestriction","onUpdate:modelValue":l[45]||(l[45]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[Ie,a.enableClientRestriction]]),l[111]||(l[111]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",gl,[e("div",null,[l[112]||(l[112]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",pl,[(o(!0),n(re,null,ge(H.value,y=>(o(),n("div",{key:y.id,class:"flex items-start"},[_(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":l[46]||(l[46]=de=>a.allowedClients=de),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,ml),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",yl,u(y.name),1),e("span",fl,u(y.description),1)],8,xl)]))),128))])])])):$("",!0)]),e("div",bl,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[47]||(l[47]=y=>E.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",kl)):(o(),n("i",wl)),K(" "+u(z.value?"创建中...":"创建"),1)],8,vl)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Al={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Cl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},$l={class:"mb-4 flex items-center justify-between sm:mb-6"},Il={class:"rounded-lg border border-purple-200 bg-gradient-to-r from-purple-50 to-indigo-50 p-3 dark:border-purple-700 dark:from-purple-900/20 dark:to-indigo-900/20 sm:p-4"},Kl={class:"flex items-center justify-between"},Ll={class:"flex items-center gap-2"},Dl={key:0,class:"mt-3 space-y-2"},Tl={class:"w-20 text-xs text-gray-600 dark:text-gray-400"},_l=["onUpdate:modelValue"],Sl=["value"],Ml={key:0,class:"text-gray-500"},Ul={class:"space-y-4"},Rl={key:0},Vl={class:"flex flex-wrap gap-2"},Pl=["onClick"],El={key:1},Ol={class:"flex flex-wrap gap-2"},jl=["onClick"],Gl={class:"flex gap-2"},zl=["onKeypress"],ql={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Fl={class:"space-y-2"},Bl={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wl={class:"space-y-3"},Nl={class:"flex gap-2"},Hl={class:"space-y-3"},Yl={class:"flex gap-2"},Ql={class:"space-y-3"},Jl={class:"flex gap-2"},Xl={class:"mb-3 flex items-center"},Zl={class:"flex flex-wrap gap-4"},en={class:"flex cursor-pointer items-center"},tn={class:"flex cursor-pointer items-center"},sn={class:"flex cursor-pointer items-center"},an={class:"flex cursor-pointer items-center"},rn={class:"mb-3 flex items-center justify-between"},on=["disabled"],ln={class:"grid grid-cols-1 gap-3"},nn={class:"mb-3 flex items-center"},dn={key:0,class:"space-y-3"},un={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},cn=["onClick"],gn={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},pn={class:"space-y-3"},mn={class:"flex flex-wrap gap-2"},xn=["onClick"],yn={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},fn={class:"flex gap-2"},bn=["onKeydown"],vn={class:"mb-3 flex items-center"},kn={key:0,class:"space-y-3"},wn={class:"space-y-2"},hn=["id","value"],An=["for"],Cn={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},$n={class:"block text-xs text-gray-500 dark:text-gray-400"},In={class:"flex gap-3 pt-4"},Kn=["disabled"],Ln={key:0,class:"loading-spinner mr-2"},Dn={key:1,class:"fas fa-save mr-2"},Tn={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=Fs(),I=ls(),z=A(!1),S=A(!1),W=A(!1),X=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Q=A(null),v=(N,i,k="确认",ie="取消",ae="primary")=>new Promise(E=>{X.value={title:N,message:i,confirmText:k,cancelText:ie,type:ae},Q.value=E,W.value=!0}),L=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!0)},f=()=>{var N;W.value=!1,(N=Q.value)==null||N.call(Q,!1)},M=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),se=A([]),G=A([]),ee=A(""),te=A([]),H=j(()=>te.value.filter(N=>!a.tags.includes(N))),C=A(!1),T=[{key:"claude",label:"Claude"},{key:"gemini",label:"Gemini"},{key:"codex",label:"Codex"},{key:"droid",label:"Droid"},{key:"bedrock",label:"Bedrock"},{key:"azure",label:"Azure"},{key:"ccr",label:"CCR"}],a=ut({name:"",serviceRates:{},tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),Z=()=>{},V=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},D=N=>{a.restrictedModels.splice(N,1)},U=A(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),x=j(()=>U.value.filter(N=>!a.restrictedModels.includes(N))),d=N=>{a.restrictedModels.includes(N)||a.restrictedModels.push(N)},p=()=>{if(ee.value&&ee.value.trim()){const N=ee.value.trim();a.tags.includes(N)||a.tags.push(N),ee.value=""}},b=N=>{a.tags.includes(N)||a.tags.push(N)},oe=N=>{a.tags.splice(N,1)},xe=async()=>{if(!(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)&&!await v("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
+
+是否继续?`,"继续保存","返回修改","warning"))){z.value=!0;try{const N={};if(C.value)for(const[ie,ae]of Object.entries(a.serviceRates))ae!=null&&ae!==""&&(N[ie]=ae);const i={name:a.name,serviceRates:N,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):0,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):0,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):0,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,permissions:a.permissions,tags:a.tags};a.claudeAccountId?a.claudeAccountId.startsWith("console:")?(i.claudeConsoleAccountId=a.claudeAccountId.substring(8),i.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),i.claudeAccountId=a.claudeAccountId,i.claudeConsoleAccountId=null):(i.claudeAccountId=null,i.claudeConsoleAccountId=null),a.geminiAccountId?i.geminiAccountId=a.geminiAccountId:i.geminiAccountId=null,a.openaiAccountId?i.openaiAccountId=a.openaiAccountId:i.openaiAccountId=null,a.bedrockAccountId?i.bedrockAccountId=a.bedrockAccountId:i.bedrockAccountId=null,a.droidAccountId?i.droidAccountId=a.droidAccountId:i.droidAccountId=null,i.enableModelRestriction=a.enableModelRestriction,i.restrictedModels=a.restrictedModels,i.enableClientRestriction=a.enableClientRestriction,i.allowedClients=a.allowedClients,i.isActive=a.isActive,a.ownerId!==void 0&&(i.ownerId=a.ownerId);const k=await Vt(c.apiKey.id,i);k.success?(P("success"),P("close")):R(k.message||"更新失败","error")}catch{R("更新失败","error")}finally{z.value=!1}}},Te=async()=>{var N,i;S.value=!0;try{const[k,ie,ae,E,l,y,de,Ue,Se]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),Be=[];k.success&&((N=k.data)==null||N.forEach(ce=>{Be.push({...ce,platform:"claude-oauth",isDedicated:ce.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(ce=>{Be.push({...ce,platform:"claude-console",isDedicated:ce.accountType==="dedicated"})})),M.value.claude=Be;const ye=[];ae.success&&(ae.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini",isDedicated:ce.accountType==="dedicated"})}),E.success&&(E.data||[]).forEach(ce=>{ye.push({...ce,platform:"gemini-api",isDedicated:ce.accountType==="dedicated"})}),M.value.gemini=ye;const Qe=[];if(l.success&&(l.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai",isDedicated:ce.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(ce=>{Qe.push({...ce,platform:"openai-responses",isDedicated:ce.accountType==="dedicated"})}),M.value.openai=Qe,de.success&&(M.value.bedrock=(de.data||[]).map(ce=>({...ce,isDedicated:ce.accountType==="dedicated"}))),Ue.success&&(M.value.droid=(Ue.data||[]).map(ce=>({...ce,platform:"droid",isDedicated:ce.accountType==="dedicated"}))),Se.success){const ce=Se.data||[];M.value.claudeGroups=ce.filter(Ve=>Ve.platform==="claude"),M.value.geminiGroups=ce.filter(Ve=>Ve.platform==="gemini"),M.value.openaiGroups=ce.filter(Ve=>Ve.platform==="openai"),M.value.droidGroups=ce.filter(Ve=>Ve.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{S.value=!1}},Ce=async()=>{try{const N=await Ga();N.success&&(G.value=N.data||[])}catch{G.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return wt(async()=>{try{const[k,ie]=await Promise.all([Y.loadSupportedClients(),I.fetchTags(),Ce()]);se.value=k||[],te.value=ie||[]}catch{se.value=[],te.value=[]}if(c.accounts){const k=(c.accounts.gemini||[]).map(ae=>({...ae,platform:ae.platform||"gemini"})),ie=[];c.accounts.openai&&c.accounts.openai.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(ae=>{ie.push({...ae,platform:ae.platform||"openai-responses"})}),M.value={claude:c.accounts.claude||[],gemini:k,openai:ie,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(ae=>({...ae,platform:ae.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}a.name=c.apiKey.name,a.serviceRates=c.apiKey.serviceRates||{},C.value=Object.keys(a.serviceRates).length>0,a.tokenLimit=c.apiKey.tokenLimit||"",a.rateLimitCost=c.apiKey.rateLimitCost||"",c.apiKey.tokenLimit>0&&c.apiKey.rateLimitCost,a.rateLimitWindow=c.apiKey.rateLimitWindow||"",a.rateLimitRequests=c.apiKey.rateLimitRequests||"",a.concurrencyLimit=c.apiKey.concurrencyLimit||"",a.dailyCostLimit=c.apiKey.dailyCostLimit||"",a.totalCostLimit=c.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=c.apiKey.weeklyOpusCostLimit||"";const N=["claude","gemini","openai","droid"];let i=c.apiKey.permissions;if(typeof i=="string")if(i==="all"||i==="")i=[];else if(i.startsWith("["))try{i=JSON.parse(i)}catch{i=N.includes(i)?[i]:[]}else i.includes(",")?i=i.split(",").map(k=>k.trim()).filter(k=>N.includes(k)):N.includes(i)?i=[i]:i=[];Array.isArray(i)?a.permissions=i.filter(k=>N.includes(k)):a.permissions=[],c.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${c.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=c.apiKey.claudeAccountId||"",a.geminiAccountId=c.apiKey.geminiAccountId||"",a.openaiAccountId=c.apiKey.openaiAccountId||"",a.bedrockAccountId=c.apiKey.bedrockAccountId||"",a.droidAccountId=c.apiKey.droidAccountId||"",a.restrictedModels=c.apiKey.restrictedModels||[],a.allowedClients=c.apiKey.allowedClients||[],a.tags=c.apiKey.tags||[],a.enableModelRestriction=c.apiKey.enableModelRestriction===!0||c.apiKey.enableModelRestriction==="true",a.enableClientRestriction=c.apiKey.enableClientRestriction===!0||c.apiKey.enableClientRestriction==="true",a.isActive=c.apiKey.isActive===void 0||c.apiKey.isActive===!0||c.apiKey.isActive==="true",a.ownerId=c.apiKey.userId||"admin"}),(N,i)=>(o(),he(Oe,{to:"body"},[e("div",Al,[e("div",Cl,[e("div",$l,[i[40]||(i[40]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=k=>N.$emit("close"))},i[39]||(i[39]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(xe,["prevent"])},[e("div",null,[i[41]||(i[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[_(e("input",{"onUpdate:modelValue":i[1]||(i[1]=k=>a.name=k),class:"form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",maxlength:"100",placeholder:"请输入API Key名称",required:"",type:"text"},null,512),[[le,a.name]])]),i[42]||(i[42]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",Il,[e("div",Kl,[e("div",Ll,[_(e("input",{id:"editEnableServiceRates","onUpdate:modelValue":i[2]||(i[2]=k=>C.value=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500",type:"checkbox"},null,512),[[Ie,C.value]]),i[43]||(i[43]=e("label",{class:"cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableServiceRates"}," 自定义服务倍率 ",-1))]),i[44]||(i[44]=e("span",{class:"text-xs text-gray-500 dark:text-gray-400"}," 与全局倍率相乘,用于 VIP 折扣等(如全局1.5 × Key倍率0.8 = 1.2) ",-1))]),C.value?(o(),n("div",Dl,[(o(),n(re,null,ge(T,k=>e("div",{key:k.key,class:"flex items-center gap-2"},[e("span",Tl,u(k.label),1),_(e("input",{"onUpdate:modelValue":ie=>a.serviceRates[k.key]=ie,class:"form-input w-24 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"1.0",step:"0.1",type:"number"},null,8,_l),[[le,a.serviceRates[k.key],void 0,{number:!0}]]),i[45]||(i[45]=e("span",{class:"text-xs text-gray-400"},"默认 1.0",-1))])),64))])):$("",!0)]),e("div",null,[i[46]||(i[46]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"所有者",-1)),_(e("select",{"onUpdate:modelValue":i[3]||(i[3]=k=>a.ownerId=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(o(!0),n(re,null,ge(G.value,k=>(o(),n("option",{key:k.id,value:k.id},[K(u(k.displayName)+" ("+u(k.username)+") ",1),k.role==="admin"?(o(),n("span",Ml,"- 管理员")):$("",!0)],8,Sl))),128))],512),[[kt,a.ownerId]]),i[47]||(i[47]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制 ",-1))]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"标签",-1)),e("div",Ul,[a.tags.length>0?(o(),n("div",Rl,[i[49]||(i[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Vl,[(o(!0),n(re,null,ge(a.tags,(k,ie)=>(o(),n("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[K(u(k)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:ae=>oe(ie)},i[48]||(i[48]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Pl)]))),128))])])):$("",!0),H.value.length>0?(o(),n("div",El,[i[51]||(i[51]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Ol,[(o(!0),n(re,null,ge(H.value,k=>(o(),n("button",{key:"available-"+k,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>b(k)},[i[50]||(i[50]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(k),1)],8,jl))),128))])])):$("",!0),e("div",null,[i[53]||(i[53]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",Gl,[_(e("input",{"onUpdate:modelValue":i[4]||(i[4]=k=>ee.value=k),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(p,["prevent"]),["enter"])},null,40,zl),[[le,ee.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:p},i[52]||(i[52]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[54]||(i[54]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",ql,[i[63]||(i[63]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",Fl,[e("div",Bl,[e("div",null,[i[56]||(i[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),_(e("input",{"onUpdate:modelValue":i[5]||(i[5]=k=>a.rateLimitWindow=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitWindow]]),i[57]||(i[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[58]||(i[58]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":i[6]||(i[6]=k=>a.rateLimitRequests=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[le,a.rateLimitRequests]]),i[59]||(i[59]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[60]||(i[60]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":i[7]||(i[7]=k=>a.rateLimitCost=k),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[le,a.rateLimitCost]]),i[61]||(i[61]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[62]||(i[62]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),K(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),K(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),K(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[65]||(i[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wl,[e("div",Nl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[8]||(i[8]=k=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[9]||(i[9]=k=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=k=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=k=>a.dailyCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[12]||(i[12]=k=>a.dailyCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.dailyCostLimit]]),i[64]||(i[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[67]||(i[67]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Hl,[e("div",Yl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=k=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[14]||(i[14]=k=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=k=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=k=>a.totalCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[17]||(i[17]=k=>a.totalCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.totalCostLimit]]),i[66]||(i[66]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[69]||(i[69]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",Ql,[e("div",Jl,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=k=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[19]||(i[19]=k=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=k=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=k=>a.weeklyOpusCostLimit="")}," 自定义 ")]),_(e("input",{"onUpdate:modelValue":i[22]||(i[22]=k=>a.weeklyOpusCostLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[le,a.weeklyOpusCostLimit]]),i[68]||(i[68]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[i[70]||(i[70]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":i[23]||(i[23]=k=>a.concurrencyLimit=k),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[le,a.concurrencyLimit]]),i[71]||(i[71]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Xl,[_(e("input",{id:"editIsActive","onUpdate:modelValue":i[24]||(i[24]=k=>a.isActive=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.isActive]]),i[72]||(i[72]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),i[73]||(i[73]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Zl,[e("label",en,[_(e("input",{"onUpdate:modelValue":i[25]||(i[25]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude",onChange:Z},null,544),[[Ie,a.permissions]]),i[74]||(i[74]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",tn,[_(e("input",{"onUpdate:modelValue":i[26]||(i[26]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini",onChange:Z},null,544),[[Ie,a.permissions]]),i[75]||(i[75]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",sn,[_(e("input",{"onUpdate:modelValue":i[27]||(i[27]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai",onChange:Z},null,544),[[Ie,a.permissions]]),i[76]||(i[76]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",an,[_(e("input",{"onUpdate:modelValue":i[28]||(i[28]=k=>a.permissions=k),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid",onChange:Z},null,544),[[Ie,a.permissions]]),i[77]||(i[77]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",rn,[i[80]||(i[80]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:S.value,title:"刷新账号列表",type:"button",onClick:Te},[e("i",{class:F(["fas",S.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(S.value?"刷新中...":"刷新账号"),1)],8,on)]),e("div",ln,[e("div",null,[i[81]||(i[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[29]||(i[29]=k=>a.claudeAccountId=k),accounts:M.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:M.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[82]||(i[82]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[30]||(i[30]=k=>a.geminiAccountId=k),accounts:M.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:M.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[83]||(i[83]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[31]||(i[31]=k=>a.openaiAccountId=k),accounts:M.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:M.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[84]||(i[84]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[32]||(i[32]=k=>a.bedrockAccountId=k),accounts:M.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[85]||(i[85]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[33]||(i[33]=k=>a.droidAccountId=k),accounts:M.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:M.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[86]||(i[86]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",nn,[_(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":i[34]||(i[34]=k=>a.enableModelRestriction=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.enableModelRestriction]]),i[87]||(i[87]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(o(),n("div",dn,[e("div",null,[i[90]||(i[90]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",un,[(o(!0),n(re,null,ge(a.restrictedModels,(k,ie)=>(o(),n("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800 dark:bg-red-900/30 dark:text-red-400"},[K(u(k)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",type:"button",onClick:ae=>D(ie)},i[88]||(i[88]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,cn)]))),128)),a.restrictedModels.length===0?(o(),n("span",gn," 暂无限制的模型 ")):$("",!0)]),e("div",pn,[e("div",mn,[(o(!0),n(re,null,ge(x.value,k=>(o(),n("button",{key:k,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 sm:text-sm",type:"button",onClick:ie=>d(k)},u(k),9,xn))),128)),x.value.length===0?(o(),n("span",yn," 所有常用模型已在限制列表中 ")):$("",!0)]),e("div",fn,[_(e("input",{"onUpdate:modelValue":i[35]||(i[35]=k=>a.modelInput=k),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:tt($e(V,["prevent"]),["enter"])},null,40,bn),[[le,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:V},i[89]||(i[89]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[91]||(i[91]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):$("",!0)]),e("div",null,[e("div",vn,[_(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":i[36]||(i[36]=k=>a.enableClientRestriction=k),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[Ie,a.enableClientRestriction]]),i[92]||(i[92]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(o(),n("div",kn,[e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),i[94]||(i[94]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",wn,[(o(!0),n(re,null,ge(se.value,k=>(o(),n("div",{key:k.id,class:"flex items-start"},[_(e("input",{id:`edit_client_${k.id}`,"onUpdate:modelValue":i[37]||(i[37]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:k.id},null,8,hn),[[Ie,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${k.id}`},[e("span",Cn,u(k.name),1),e("span",$n,u(k.description),1)],8,An)]))),128))])])])):$("",!0)]),e("div",In,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[38]||(i[38]=k=>N.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"submit"},[z.value?(o(),n("div",Ln)):(o(),n("i",Dn)),K(" "+u(z.value?"保存中...":"保存修改"),1)],8,Kn)])],32)])]),ne(at,{"cancel-text":X.value.cancelText,"confirm-text":X.value.confirmText,message:X.value.message,show:W.value,title:X.value.title,type:X.value.type,onCancel:f,onConfirm:L},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_n={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Sn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Mn={class:"mb-6 flex items-center justify-between"},Un={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rn={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Vn={class:"flex items-start gap-3"},Pn={class:"text-sm text-gray-700"},En={class:"mt-1 text-xs text-gray-600"},On={key:0,class:"mt-3"},jn=["min"],Gn={key:1,class:"mt-2 text-xs text-gray-500"},zn={class:"flex gap-3 pt-4"},qn=["disabled"],Fn={key:0,class:"loading-spinner mr-2"},Bn={key:1,class:"fas fa-clock mr-2"},Wn={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=ut({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),z=j(()=>{const v=new Date;return c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>v?new Date(c.apiKey.expiresAt).toISOString().slice(0,16):(v.setMinutes(v.getMinutes()+1),v.toISOString().slice(0,16))}),S=v=>new Date(v).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),W=()=>{if(!I.renewDuration){I.newExpiresAt=null;return}if(I.renewDuration==="permanent"){I.newExpiresAt=null;return}if(I.renewDuration==="custom")return;const v=c.apiKey.expiresAt&&new Date(c.apiKey.expiresAt)>new Date?new Date(c.apiKey.expiresAt):new Date,f=I.renewDuration.match(/(\d+)([dhmy])/);if(f){const[,M,se]=f,G=parseInt(M);switch(se){case"d":v.setDate(v.getDate()+G);break;case"h":v.setHours(v.getHours()+G);break;case"m":v.setMonth(v.getMonth()+G);break;case"y":v.setFullYear(v.getFullYear()+G);break}I.newExpiresAt=v.toISOString()}},X=()=>{I.customExpireDate&&(I.newExpiresAt=new Date(I.customExpireDate).toISOString())},Q=async()=>{Y.value=!0;try{const v={expiresAt:I.renewDuration==="permanent"?null:I.newExpiresAt},L=await Vt(c.apiKey.id,v);L.success?(R("API Key 续期成功","success"),P("success"),P("close")):R(L.message||"续期失败","error")}catch{R("续期失败","error")}finally{Y.value=!1}};return W(),(v,L)=>(o(),he(Oe,{to:"body"},[e("div",_n,[e("div",Sn,[e("div",Mn,[L[5]||(L[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:L[0]||(L[0]=f=>v.$emit("close"))},L[4]||(L[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Un,[e("div",Rn,[e("div",Vn,[L[7]||(L[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[L[6]||(L[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pn,u(h.apiKey.name),1),e("p",En," 当前过期时间:"+u(h.apiKey.expiresAt?S(h.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[L[9]||(L[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),_(e("select",{"onUpdate:modelValue":L[1]||(L[1]=f=>I.renewDuration=f),class:"form-input w-full",onChange:W},L[8]||(L[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[kt,I.renewDuration]]),I.renewDuration==="custom"?(o(),n("div",On,[_(e("input",{"onUpdate:modelValue":L[2]||(L[2]=f=>I.customExpireDate=f),class:"form-input w-full",min:z.value,type:"datetime-local",onChange:X},null,40,jn),[[le,I.customExpireDate]])])):$("",!0),I.newExpiresAt?(o(),n("p",Gn," 新的过期时间:"+u(S(I.newExpiresAt)),1)):$("",!0)])]),e("div",zn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:L[3]||(L[3]=f=>v.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:Y.value||!I.renewDuration,type:"button",onClick:Q},[Y.value?(o(),n("div",Fn)):(o(),n("i",Bn)),K(" "+u(Y.value?"续期中...":"确认续期"),1)],8,qn)])])])]))}},Nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yn={class:"mb-6 space-y-4"},Qn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jn={class:"font-medium text-gray-900 dark:text-gray-100"},Xn={key:0},Zn={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},ei={class:"text-gray-700 dark:text-gray-300"},ti={class:"relative"},si={class:"flex min-h-[60px] items-center break-all rounded-lg border border-gray-700 bg-gray-900 p-4 pr-14 font-mono text-sm text-white dark:border-gray-600 dark:bg-gray-900"},ai={class:"absolute right-3 top-3"},ri=["title"],oi={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(C,T,a="确认",Z="取消",V="primary")=>new Promise(D=>{z.value={title:C,message:T,confirmText:a,cancelText:Z,type:V},S.value=D,I.value=!0}),X=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!0)},Q=()=>{var C;I.value=!1,(C=S.value)==null||C.call(S,!1)},v=()=>{if(typeof window<"u"){const C=window.location.protocol,T=window.location.host;let a=C+"//"+T;const Z=window.location.href,V=Z.indexOf("/",8);return V!==-1&&(a=Z.substring(0,V)),a}return""},L=j(()=>v()+"/api"),f=()=>{Y.value=!Y.value},M=()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";return C?Y.value||C.length<=12?C:C.substring(0,8)+"●".repeat(Math.max(0,C.length-12))+C.substring(C.length-4):""},se=async(C,T)=>{try{await navigator.clipboard.writeText(C),R(T,"success")}catch{const Z=document.createElement("textarea");Z.value=C,document.body.appendChild(Z),Z.select();try{document.execCommand("copy"),R(T,"success")}catch{R("复制失败,请手动复制","error")}finally{document.body.removeChild(Z)}}},G=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}const T=`export ANTHROPIC_BASE_URL="${L.value}"
+export ANTHROPIC_AUTH_TOKEN="${C}"`;await se(T,"配置信息已复制到剪贴板")},ee=async()=>{const C=c.apiKey.apiKey||c.apiKey.key||"";if(!C){R("API Key 不存在","error");return}await se(C,"API Key 已复制")},te=async()=>{await W("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
+
+确定要关闭吗?`,"确定关闭","取消","warning")&&P("close")},H=async()=>{await W("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。
+
+建议您先复制API Key再关闭。`,"仍然关闭","返回复制","warning")&&P("close")};return(C,T)=>(o(),he(Oe,{to:"body"},[e("div",Nn,[e("div",Hn,[e("div",{class:"mb-6 flex items-center justify-between"},[T[1]||(T[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:H},T[0]||(T[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),T[9]||(T[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Yn,[e("div",null,[T[2]||(T[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Qn,[e("span",Jn,u(h.apiKey.name),1)])]),h.apiKey.description?(o(),n("div",Xn,[T[3]||(T[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zn,[e("span",ei,u(h.apiKey.description||"无描述"),1)])])):$("",!0),e("div",null,[T[4]||(T[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",ti,[e("div",si,u(M()),1),e("div",ai,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:Y.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:f},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,ri)])]),T[5]||(T[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:ee},T[6]||(T[6]=[e("i",{class:"fas fa-key"},null,-1),K(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:G},T[7]||(T[7]=[e("i",{class:"fas fa-copy"},null,-1),K(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:te},T[8]||(T[8]=[e("i",{class:"fas fa-check-circle"},null,-1),K(" 我已保存 ",-1)]))])])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},li=st(oi,[["__scopeId","data-v-42e73733"]]),ni={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ii={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},di={class:"mb-6 flex items-center justify-between"},ui={class:"flex items-center gap-3"},ci={class:"text-sm text-gray-600"},gi={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},pi={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},mi={class:"flex items-center justify-between"},xi={class:"mt-1 text-2xl font-bold text-blue-900"},yi={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},fi={class:"flex items-center justify-between"},bi={class:"mt-1 truncate text-lg font-bold text-green-900"},vi={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},ki={class:"flex items-center justify-between"},wi={class:"mt-1 text-lg font-bold text-purple-900"},hi={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Ai={class:"flex items-center justify-between"},Ci={class:"mt-1 text-lg font-bold text-orange-900"},$i={class:"mb-6"},Ii={class:"mb-3 flex items-center justify-between"},Ki={class:"flex items-center gap-2"},Li={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},Di={class:"font-mono text-xs text-gray-300"},Ti={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),S=A(null),W=(H,C,T="确认",a="取消",Z="primary")=>new Promise(V=>{z.value={title:H,message:C,confirmText:T,cancelText:a,type:Z},S.value=V,I.value=!0}),X=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!0)},Q=()=>{var H;I.value=!1,(H=S.value)==null||H.call(S,!1)},v=j(()=>{if(c.apiKeys.length>0){const H=c.apiKeys[0],C=H.name.match(/^(.+)_\d+$/);return C?C[1]:H.name}return""}),L=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[H]||H},f=()=>{if(c.apiKeys.length===0)return"未知";const H=c.apiKeys[0].expiresAt;if(!H)return"永不过期";const C=new Date(H),a=Math.ceil((C-new Date)/(1e3*60*60*24));return a<=7?`${a}天`:a<=30?`${Math.ceil(a/7)}周`:a<=365?`${Math.ceil(a/30)}个月`:`${Math.ceil(a/365)}年`},M=()=>{Y.value=!Y.value},se=()=>{const C=c.apiKeys.slice(0,10).map(T=>`${T.name}: ${T.apiKey||T.key||""}`);return c.apiKeys.length>10&&C.push(`... 还有 ${c.apiKeys.length-10} 个 API Key`),C.join(`
+`)},G=()=>{const H=c.apiKeys.map(V=>`${V.name}: ${V.apiKey||V.key||""}`).join(`
+`),C=new Blob([H],{type:"text/plain;charset=utf-8"}),T=URL.createObjectURL(C),a=document.createElement("a");a.href=T;const Z=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);a.download=`api-keys-${v.value}-${Z}.txt`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(T),R("API Keys 文件已下载","success")},ee=async()=>{await W("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
+
+确定要关闭吗?`,"确定关闭","返回下载","warning")&&P("close")},te=async()=>{await W("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。
+
+强烈建议您先下载保存。`,"仍然关闭","返回下载","warning")&&P("close")};return(H,C)=>(o(),he(Oe,{to:"body"},[e("div",ni,[e("div",ii,[e("div",di,[e("div",ui,[C[1]||(C[1]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-layer-group text-lg text-white"})],-1)),e("div",null,[C[0]||(C[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",ci,"成功创建 "+u(h.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:te},C[2]||(C[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),C[14]||(C[14]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900"},"重要提醒"),e("p",{class:"text-sm text-amber-800"}," 这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。 ")])])],-1)),e("div",gi,[e("div",pi,[e("div",mi,[e("div",null,[C[3]||(C[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",xi,u(h.apiKeys.length),1)]),C[4]||(C[4]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500 bg-opacity-20"},[e("i",{class:"fas fa-key text-blue-600"})],-1))])]),e("div",yi,[e("div",fi,[e("div",null,[C[5]||(C[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",bi,u(v.value),1)]),C[6]||(C[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-green-500 bg-opacity-20"},[e("i",{class:"fas fa-tag text-green-600"})],-1))])]),e("div",vi,[e("div",ki,[e("div",null,[C[7]||(C[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",wi,u(L()),1)]),C[8]||(C[8]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-purple-500 bg-opacity-20"},[e("i",{class:"fas fa-shield-alt text-purple-600"})],-1))])]),e("div",hi,[e("div",Ai,[e("div",null,[C[9]||(C[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",Ci,u(f()),1)]),C[10]||(C[10]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-orange-500 bg-opacity-20"},[e("i",{class:"fas fa-clock text-orange-600"})],-1))])])]),e("div",$i,[e("div",Ii,[C[12]||(C[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ki,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:M},[e("i",{class:F(["fas",Y.value?"fa-eye-slash":"fa-eye"])},null,2),K(" "+u(Y.value?"隐藏":"显示")+"预览 ",1)]),C[11]||(C[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),Y.value?(o(),n("div",Li,[e("pre",Di,u(se()),1)])):$("",!0)]),e("div",{class:"flex gap-3"},[e("button",{class:"btn btn-primary flex flex-1 items-center justify-center gap-2 px-6 py-3 font-semibold",onClick:G},C[13]||(C[13]=[e("i",{class:"fas fa-download"},null,-1),K(" 下载所有 API Keys ",-1)])),e("button",{class:"rounded-xl border border-gray-300 bg-gray-200 px-6 py-3 font-semibold text-gray-800 transition-colors hover:bg-gray-300",onClick:ee}," 我已保存 ")]),C[15]||(C[15]=e("div",{class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"flex items-start text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 flex-shrink-0"}),e("span",null," 下载的文件格式为文本文件(.txt),每行包含一个 API Key。 请将文件保存在安全的位置,避免泄露。 ")])],-1))])]),ne(at,{"cancel-text":z.value.cancelText,"confirm-text":z.value.confirmText,message:z.value.message,show:I.value,title:z.value.title,type:z.value.type,onCancel:Q,onConfirm:X},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},_i=st(Ti,[["__scopeId","data-v-fa69edb5"]]),Si={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Mi={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Ui={class:"mb-4 flex items-center justify-between sm:mb-6"},Ri={class:"flex items-center gap-2 sm:gap-3"},Vi={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Pi={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},Ei={class:"flex items-start gap-3"},Oi={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},ji={class:"space-y-4"},Gi={class:"flex flex-wrap gap-4"},zi={class:"flex cursor-pointer items-center"},qi={class:"flex cursor-pointer items-center"},Fi={class:"flex cursor-pointer items-center"},Bi={class:"flex cursor-pointer items-center"},Wi={key:0,class:"space-y-3"},Ni={key:0},Hi={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Yi={class:"flex flex-wrap gap-2"},Qi=["onClick"],Ji={key:1},Xi={class:"flex flex-wrap gap-2"},Zi=["onClick"],ed={class:"flex gap-2"},td=["onKeypress"],sd={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ad={class:"space-y-2"},rd={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},od={class:"mb-3 flex items-center gap-4"},ld={class:"flex gap-4"},nd={class:"flex cursor-pointer items-center"},id={class:"flex cursor-pointer items-center"},dd={class:"flex cursor-pointer items-center"},ud={class:"flex flex-wrap gap-4"},cd={class:"flex cursor-pointer items-center"},gd={class:"flex cursor-pointer items-center"},pd={class:"flex cursor-pointer items-center"},md={class:"flex cursor-pointer items-center"},xd={class:"flex cursor-pointer items-center"},yd={class:"flex cursor-pointer items-center"},fd={class:"mb-3 flex items-center justify-between"},bd=["disabled"],vd={class:"grid grid-cols-1 gap-3"},kd={class:"flex gap-3 pt-4"},wd=["disabled"],hd={key:0,class:"loading-spinner mr-2"},Ad={key:1,class:"fas fa-save mr-2"},os="__KEEP_ORIGINAL__",Cd={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(h,{emit:J}){const c=h,P=J,Y=ls(),I=A(!1),z=A(!1),S=A({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),W=A(""),X=A([]),Q=A("none"),v=j(()=>c.selectedKeys.length),L=j(()=>X.value.filter(x=>!f.tags.includes(x))),f=ut({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),M=[{value:os,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],se=x=>j({get:()=>f[x]===""?os:f[x],set:d=>{!d||d===os?f[x]="":f[x]=d}}),G=se("claudeAccountId"),ee=se("geminiAccountId"),te=se("openaiAccountId"),H=se("bedrockAccountId"),C=se("droidAccountId"),T=x=>!f.permissions||f.permissions==="all"||Array.isArray(f.permissions)&&f.permissions.length===0?!0:Array.isArray(f.permissions)?f.permissions.includes(x):f.permissions===x,a=()=>{if(W.value&&W.value.trim()){const x=W.value.trim();f.tags.includes(x)||f.tags.push(x),W.value=""}},Z=x=>{f.tags.includes(x)||f.tags.push(x)},V=x=>{f.tags.splice(x,1)},D=async()=>{var x,d;z.value=!0;try{const[p,b,oe,xe,Te,Ce,N,i,k]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),ie=[];p.success&&((x=p.data)==null||x.forEach(l=>{ie.push({...l,platform:"claude-oauth",isDedicated:l.accountType==="dedicated"})})),b.success&&((d=b.data)==null||d.forEach(l=>{ie.push({...l,platform:"claude-console",isDedicated:l.accountType==="dedicated"})})),S.value.claude=ie;const ae=[];oe.success&&(oe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini",isDedicated:l.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(l=>{ae.push({...l,platform:"gemini-api",isDedicated:l.accountType==="dedicated"})}),S.value.gemini=ae;const E=[];if(Te.success&&(Te.data||[]).forEach(l=>{E.push({...l,platform:"openai",isDedicated:l.accountType==="dedicated"})}),Ce.success&&(Ce.data||[]).forEach(l=>{E.push({...l,platform:"openai-responses",isDedicated:l.accountType==="dedicated"})}),S.value.openai=E,N.success&&(S.value.bedrock=(N.data||[]).map(l=>({...l,isDedicated:l.accountType==="dedicated"}))),i.success&&(S.value.droid=(i.data||[]).map(l=>({...l,platform:"droid",isDedicated:l.accountType==="dedicated"}))),k.success){const l=k.data||[];S.value.claudeGroups=l.filter(y=>y.platform==="claude"),S.value.geminiGroups=l.filter(y=>y.platform==="gemini"),S.value.openaiGroups=l.filter(y=>y.platform==="openai"),S.value.droidGroups=l.filter(y=>y.platform==="droid")}R("账号列表已刷新","success")}catch{R("刷新账号列表失败","error")}finally{z.value=!1}},U=async()=>{I.value=!0;try{const x={};f.rateLimitCost!==""&&f.rateLimitCost!==null&&(x.rateLimitCost=parseFloat(f.rateLimitCost)),f.rateLimitWindow!==""&&f.rateLimitWindow!==null&&(x.rateLimitWindow=parseInt(f.rateLimitWindow)),f.rateLimitRequests!==""&&f.rateLimitRequests!==null&&(x.rateLimitRequests=parseInt(f.rateLimitRequests)),f.concurrencyLimit!==""&&f.concurrencyLimit!==null&&(x.concurrencyLimit=parseInt(f.concurrencyLimit)),f.dailyCostLimit!==""&&f.dailyCostLimit!==null&&(x.dailyCostLimit=parseFloat(f.dailyCostLimit)),f.totalCostLimit!==""&&f.totalCostLimit!==null&&(x.totalCostLimit=parseFloat(f.totalCostLimit)),f.weeklyOpusCostLimit!==""&&f.weeklyOpusCostLimit!==null&&(x.weeklyOpusCostLimit=parseFloat(f.weeklyOpusCostLimit)),f.permissions!==""&&(x.permissions=f.permissions),f.claudeAccountId!==""&&(f.claudeAccountId==="SHARED_POOL"?(x.claudeAccountId=null,x.claudeConsoleAccountId=null):f.claudeAccountId.startsWith("console:")?(x.claudeConsoleAccountId=f.claudeAccountId.substring(8),x.claudeAccountId=null):(f.claudeAccountId.startsWith("group:"),x.claudeAccountId=f.claudeAccountId,x.claudeConsoleAccountId=null)),f.geminiAccountId!==""&&(f.geminiAccountId==="SHARED_POOL"?x.geminiAccountId=null:x.geminiAccountId=f.geminiAccountId),f.openaiAccountId!==""&&(f.openaiAccountId==="SHARED_POOL"?x.openaiAccountId=null:x.openaiAccountId=f.openaiAccountId),f.bedrockAccountId!==""&&(f.bedrockAccountId==="SHARED_POOL"?x.bedrockAccountId=null:x.bedrockAccountId=f.bedrockAccountId),f.droidAccountId!==""&&(f.droidAccountId==="SHARED_POOL"?x.droidAccountId=null:x.droidAccountId=f.droidAccountId),f.isActive!==null&&(x.isActive=f.isActive),Q.value!=="none"&&(x.tags=f.tags,x.tagOperation=Q.value);const d=await za({keyIds:c.selectedKeys,updates:x});if(d.success){const{successCount:p,failedCount:b,errors:oe}=d.data;if(p>0){if(R(`成功批量编辑 ${p} 个 API Keys`,"success"),b>0){const xe=oe.map(Te=>`${Te.keyId}: ${Te.error}`).join(`
+`);R(`${b} 个编辑失败:
+${xe}`,"warning")}}else R("所有 API Keys 编辑失败","error");P("success"),P("close")}else R(d.message||"批量编辑失败","error")}catch(x){R("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",x)}finally{I.value=!1}};return wt(async()=>{if(X.value=await Y.fetchTags(),c.accounts){const x=(c.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),d=[];c.accounts.openai&&c.accounts.openai.forEach(p=>{d.push({...p,platform:p.platform||"openai"})}),c.accounts.openaiResponses&&c.accounts.openaiResponses.forEach(p=>{d.push({...p,platform:p.platform||"openai-responses"})}),S.value={claude:c.accounts.claude||[],gemini:x,openai:d,bedrock:c.accounts.bedrock||[],droid:(c.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:c.accounts.claudeGroups||[],geminiGroups:c.accounts.geminiGroups||[],openaiGroups:c.accounts.openaiGroups||[],droidGroups:c.accounts.droidGroups||[]}}}),(x,d)=>(o(),he(Oe,{to:"body"},[e("div",Si,[e("div",Mi,[e("div",Ui,[e("div",Ri,[d[28]||(d[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vi," 批量编辑 API Keys ("+u(v.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:d[0]||(d[0]=p=>x.$emit("close"))},d[29]||(d[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:$e(U,["prevent"])},[e("div",Pi,[e("div",Ei,[d[31]||(d[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[d[30]||(d[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",Oi," 以下设置将应用到所选的 "+u(v.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[d[41]||(d[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",ji,[e("div",Gi,[e("label",zi,[_(e("input",{"onUpdate:modelValue":d[1]||(d[1]=p=>Q.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[De,Q.value]]),d[32]||(d[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",qi,[_(e("input",{"onUpdate:modelValue":d[2]||(d[2]=p=>Q.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[De,Q.value]]),d[33]||(d[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Fi,[_(e("input",{"onUpdate:modelValue":d[3]||(d[3]=p=>Q.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[De,Q.value]]),d[34]||(d[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bi,[_(e("input",{"onUpdate:modelValue":d[4]||(d[4]=p=>Q.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[De,Q.value]]),d[35]||(d[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),Q.value!=="none"?(o(),n("div",Wi,[f.tags.length>0?(o(),n("div",Ni,[e("div",Hi,u(Q.value==="replace"?"新标签列表:":Q.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Yi,[(o(!0),n(re,null,ge(f.tags,(p,b)=>(o(),n("span",{key:"selected-"+b,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[K(u(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:oe=>V(b)},d[36]||(d[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Qi)]))),128))])])):$("",!0),L.value.length>0?(o(),n("div",Ji,[d[38]||(d[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Xi,[(o(!0),n(re,null,ge(L.value,p=>(o(),n("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:b=>Z(p)},[d[37]||(d[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),K(" "+u(p),1)],8,Zi))),128))])])):$("",!0),e("div",null,[d[40]||(d[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ed,[_(e("input",{"onUpdate:modelValue":d[5]||(d[5]=p=>W.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:tt($e(a,["prevent"]),["enter"])},null,40,td),[[le,W.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:a},d[39]||(d[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):$("",!0)])]),e("div",sd,[d[45]||(d[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ad,[e("div",rd,[e("div",null,[d[42]||(d[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),_(e("input",{"onUpdate:modelValue":d[6]||(d[6]=p=>f.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[le,f.rateLimitWindow]])]),e("div",null,[d[43]||(d[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),_(e("input",{"onUpdate:modelValue":d[7]||(d[7]=p=>f.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[le,f.rateLimitRequests]])]),e("div",null,[d[44]||(d[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),_(e("input",{"onUpdate:modelValue":d[8]||(d[8]=p=>f.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[le,f.rateLimitCost]])])])])]),e("div",null,[d[46]||(d[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[9]||(d[9]=p=>f.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.dailyCostLimit]])]),e("div",null,[d[47]||(d[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[10]||(d[10]=p=>f.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.totalCostLimit]])]),e("div",null,[d[48]||(d[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Claude 模型周费用限制 (美元) ",-1)),_(e("input",{"onUpdate:modelValue":d[11]||(d[11]=p=>f.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[le,f.weeklyOpusCostLimit]]),d[49]||(d[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效 ",-1))]),e("div",null,[d[50]||(d[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),_(e("input",{"onUpdate:modelValue":d[12]||(d[12]=p=>f.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[le,f.concurrencyLimit]])]),e("div",null,[e("div",od,[d[54]||(d[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ld,[e("label",nd,[_(e("input",{"onUpdate:modelValue":d[13]||(d[13]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[De,f.isActive]]),d[51]||(d[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",id,[_(e("input",{"onUpdate:modelValue":d[14]||(d[14]=p=>f.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[De,f.isActive]]),d[52]||(d[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",dd,[_(e("input",{"onUpdate:modelValue":d[15]||(d[15]=p=>f.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[De,f.isActive]]),d[53]||(d[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[d[61]||(d[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ud,[e("label",cd,[_(e("input",{"onUpdate:modelValue":d[16]||(d[16]=p=>f.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[De,f.permissions]]),d[55]||(d[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",gd,[_(e("input",{"onUpdate:modelValue":d[17]||(d[17]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[De,f.permissions]]),d[56]||(d[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",pd,[_(e("input",{"onUpdate:modelValue":d[18]||(d[18]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[De,f.permissions]]),d[57]||(d[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",md,[_(e("input",{"onUpdate:modelValue":d[19]||(d[19]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[De,f.permissions]]),d[58]||(d[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",xd,[_(e("input",{"onUpdate:modelValue":d[20]||(d[20]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[De,f.permissions]]),d[59]||(d[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",yd,[_(e("input",{"onUpdate:modelValue":d[21]||(d[21]=p=>f.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[De,f.permissions]]),d[60]||(d[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",fd,[d[62]||(d[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:z.value,title:"刷新账号列表",type:"button",onClick:D},[e("i",{class:F(["fas",z.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,u(z.value?"刷新中...":"刷新账号"),1)],8,bd)]),e("div",vd,[e("div",null,[d[63]||(d[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ne(_e,{modelValue:Ae(G),"onUpdate:modelValue":d[22]||(d[22]=p=>bt(G)?G.value=p:null),accounts:S.value.claude,"default-option-text":"请选择Claude账号",disabled:!T("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[64]||(d[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ne(_e,{modelValue:Ae(ee),"onUpdate:modelValue":d[23]||(d[23]=p=>bt(ee)?ee.value=p:null),accounts:S.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!T("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[65]||(d[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ne(_e,{modelValue:Ae(te),"onUpdate:modelValue":d[24]||(d[24]=p=>bt(te)?te.value=p:null),accounts:S.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!T("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":M},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[d[66]||(d[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ne(_e,{modelValue:Ae(H),"onUpdate:modelValue":d[25]||(d[25]=p=>bt(H)?H.value=p:null),accounts:S.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!T("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":M},null,8,["modelValue","accounts","disabled"])]),e("div",null,[d[67]||(d[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ne(_e,{modelValue:Ae(C),"onUpdate:modelValue":d[26]||(d[26]=p=>bt(C)?C.value=p:null),accounts:S.value.droid,"default-option-text":"请选择Droid账号",disabled:!T("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":M},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",kd,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:d[27]||(d[27]=p=>x.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:I.value,type:"submit"},[I.value?(o(),n("div",hd)):(o(),n("i",Ad)),K(" "+u(I.value?"保存中...":"批量保存"),1)],8,wd)])],32)])])]))}},$d={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Id={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Kd={class:"mb-6 flex items-center justify-between"},Ld={class:"flex items-center gap-3"},Dd={class:"text-sm text-gray-600 dark:text-gray-400"},Td={class:"space-y-6"},_d={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Sd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Ud={class:"ml-2 text-xs font-normal text-gray-600"},Rd={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Vd={key:0,class:"mb-4"},Pd={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ed={class:"mb-3 grid grid-cols-3 gap-2"},Od=["onClick"],jd={key:1,class:"animate-fadeIn"},Gd=["min"],zd={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},qd={class:"flex items-center justify-between"},Fd={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Bd={class:"flex gap-3 pt-2"},Wd=["disabled"],Nd={key:0,class:"loading-spinner mr-2"},Hd={key:1,class:"fas fa-save mr-2"},Yd={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(h,{expose:J,emit:c}){const P=h,Y=c,I=A(!1),z=A(!1),S=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),W=A(null),X=(V,D,U="确认",x="取消",d="primary")=>new Promise(p=>{S.value={title:V,message:D,confirmText:U,cancelText:x,type:d},W.value=p,z.value=!0}),Q=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!0)},v=()=>{var V;z.value=!1,(V=W.value)==null||V.call(W,!1)},L=ut({expireDuration:"",customExpireDate:"",expiresAt:null}),f=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],M=j(()=>{const V=new Date;return V.setMinutes(V.getMinutes()+1),V.toISOString().slice(0,16)});Re(()=>P.show,V=>{V&&se()}),Re(()=>{var V;return(V=P.apiKey)==null?void 0:V.id},V=>{V&&P.show&&se()});const se=()=>{I.value=!1,P.apiKey.expiresAt?(L.expireDuration="custom",L.customExpireDate=new Date(P.apiKey.expiresAt).toISOString().slice(0,16),L.expiresAt=P.apiKey.expiresAt):(L.expireDuration="",L.customExpireDate="",L.expiresAt=null)},G=V=>{if(L.expireDuration=V,!V){L.expiresAt=null;return}if(V==="custom")return;const D=new Date,U=V.match(/(\d+)([dhmy])/);if(U){const[,x,d]=U,p=parseInt(x);switch(d){case"d":D.setDate(D.getDate()+p);break;case"h":D.setHours(D.getHours()+p);break;case"m":D.setMonth(D.getMonth()+p);break;case"y":D.setFullYear(D.getFullYear()+p);break}L.expiresAt=D.toISOString()}},ee=()=>{L.customExpireDate&&(L.expiresAt=new Date(L.customExpireDate).toISOString())},te=V=>V?new Date(V).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",H=V=>V?new Date(V){if(!V)return null;const D=new Date,x=new Date(V)-D,d=Math.ceil(x/(1e3*60*60*24));return x<0?{text:"已过期",class:"text-red-600"}:d<=7?{text:`${d} 天后过期`,class:"text-orange-600"}:d<=30?{text:`${d} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(d/30)} 个月后过期`,class:"text-green-600"}},T=()=>{I.value=!0,Y("save",{keyId:P.apiKey.id,expiresAt:L.expiresAt})},a=async()=>{await X("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${P.apiKey.activationDays||(P.apiKey.activationUnit==="hours"?24:30)} ${P.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消","warning")&&(I.value=!0,Y("save",{keyId:P.apiKey.id,activateNow:!0}))};return J({resetSaving:()=>{I.value=!1}}),(V,D)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",$d,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:D[0]||(D[0]=U=>V.$emit("close"))}),e("div",Id,[e("div",Kd,[e("div",Ld,[D[6]||(D[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[D[5]||(D[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Dd,' 为 "'+u(h.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:D[1]||(D[1]=U=>V.$emit("close"))},D[7]||(D[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Td,[e("div",_d,[e("div",Sd,[e("div",null,[D[12]||(D[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Md,[h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n(re,{key:0},[D[8]||(D[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),D[9]||(D[9]=K(" 未激活 ",-1)),e("span",Ud," (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):h.apiKey.expiresAt?(o(),n(re,{key:1},[K(u(te(h.apiKey.expiresAt))+" ",1),C(h.apiKey.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(h.apiKey.expiresAt).class])}," ("+u(C(h.apiKey.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:2},[D[10]||(D[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),D[11]||(D[11]=K(" 永不过期 ",-1))],64))])]),e("div",Rd,[e("i",{class:F(["fas fa-hourglass-half text-lg",h.apiKey.expiresAt&&H(h.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),h.apiKey.expirationMode==="activation"&&!h.apiKey.isActivated?(o(),n("div",Vd,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:a},[D[13]||(D[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),K(" 立即激活 (激活后 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Pd,[D[14]||(D[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),K(" 点击立即激活此 API Key,激活后将在 "+u(h.apiKey.activationDays||(h.apiKey.activationUnit==="hours"?24:30))+" "+u(h.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):$("",!0),e("div",null,[D[16]||(D[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",Ed,[(o(),n(re,null,ge(f,U=>e("button",{key:U.value,class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.expireDuration===U.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:x=>G(U.value)},u(U.label),11,Od)),64)),e("button",{class:F(["rounded-lg px-3 py-2 text-sm font-medium transition-all",L.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:D[2]||(D[2]=U=>G("custom"))},D[15]||(D[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),K(" 自定义 ",-1)]),2)])]),L.expireDuration==="custom"?(o(),n("div",jd,[D[17]||(D[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),_(e("input",{"onUpdate:modelValue":D[3]||(D[3]=U=>L.customExpireDate=U),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:M.value,type:"datetime-local",onChange:ee},null,40,Gd),[[le,L.customExpireDate]]),D[18]||(D[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):$("",!0),L.expiresAt!==h.apiKey.expiresAt?(o(),n("div",zd,[e("div",qd,[e("div",null,[D[21]||(D[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),K(" 新的过期时间 ")],-1)),e("p",Fd,[L.expiresAt?(o(),n(re,{key:0},[K(u(te(L.expiresAt))+" ",1),C(L.expiresAt)?(o(),n("span",{key:0,class:F(["ml-2 text-xs font-normal",C(L.expiresAt).class])}," ("+u(C(L.expiresAt).text)+") ",3)):$("",!0)],64)):(o(),n(re,{key:1},[D[19]||(D[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),D[20]||(D[20]=K(" 永不过期 ",-1))],64))])]),D[22]||(D[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):$("",!0),e("div",Bd,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:D[4]||(D[4]=U=>V.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:I.value||L.expiresAt===h.apiKey.expiresAt,onClick:T},[I.value?(o(),n("div",Nd)):(o(),n("i",Hd)),K(" "+u(I.value?"保存中...":"保存更改"),1)],8,Wd)])])])])):$("",!0),ne(at,{"cancel-text":S.value.cancelText,"confirm-text":S.value.confirmText,message:S.value.message,show:z.value,title:S.value.title,type:S.value.type,onCancel:v,onConfirm:Q},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}},Qd=st(Yd,[["__scopeId","data-v-20d23095"]]),Jd={class:"w-full"},Xd={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},Zd={key:1,class:"space-y-1.5"},e0={class:"flex items-center justify-between text-[11px] font-medium"},t0={class:"text-gray-700 dark:text-gray-200"},s0={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},a0={class:"relative z-10 flex h-full items-center justify-between px-3"},r0={class:"flex items-center gap-1.5"},o0={class:"flex items-center gap-1.5"},l0={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},n0={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:h=>["daily","opus","window","total"].includes(h)},variant:{type:String,default:"full",validator:h=>["full","compact"].includes(h)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(h){const J=h,c=j(()=>J.variant==="compact"),P=j(()=>{if(!J.limit||J.limit<=0)return 0;const L=J.current/J.limit*100;return Math.min(L,100)}),Y=j(()=>{switch(J.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),I=j(()=>{switch(J.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),z=j(()=>{const L=P.value;return J.type==="daily"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":J.type==="opus"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":J.type==="window"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":J.type==="total"?L>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":L>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),S=j(()=>{const L=P.value;if(L>=95)return"bg-rose-500 dark:bg-rose-400";if(L>=80)return"bg-amber-400 dark:bg-amber-300";switch(J.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-gray-400 dark:bg-gray-500"}}),W=j(()=>{const L=P.value;if(L>=95)return"text-rose-600 dark:text-rose-300";if(L>=80)return"text-amber-600 dark:text-amber-300";switch(J.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),X=j(()=>{const L=P.value;let f="";if(L>=90)f="text-red-700 dark:text-red-400";else if(L>=70)f="text-orange-700 dark:text-orange-400";else switch(J.type){case"daily":f="text-green-700 dark:text-green-400";break;case"opus":f="text-purple-700 dark:text-purple-400";break;case"window":f="text-blue-700 dark:text-blue-400";break;default:f="text-gray-600 dark:text-gray-400"}let M="";switch(J.type){case"daily":M="fas fa-calendar-day";break;case"opus":M="fas fa-gem";break;case"window":M="fas fa-clock";break;case"total":M="fas fa-wallet";break;default:M="fas fa-infinity"}return`${M} ${f}`}),Q=j(()=>{if(P.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(J.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),v=j(()=>{const L=P.value;if(L>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(L>=90)return"text-red-700 dark:text-red-300";if(L>=70)return"text-orange-700 dark:text-orange-300";switch(J.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(L,f)=>(o(),n("div",Jd,[!h.limit||h.limit<=0?(o(),n("div",Xd,f[0]||(f[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):c.value?(o(),n("div",Zd,[e("div",e0,[e("div",{class:F(["flex items-center gap-1.5",W.value])},[e("i",{class:F(["text-[11px]",X.value])},null,2),e("span",null,u(h.label),1)],2),e("span",t0,"$"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),1)]),e("div",s0,[e("div",{class:F(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",S.value]),style:Rt({width:P.value+"%"})},null,6)])])):(o(),n("div",{key:2,class:F(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",Y.value])},[e("div",{class:F(["absolute inset-0",I.value])},null,2),e("div",{class:F(["absolute inset-0 h-full transition-all duration-500 ease-out",z.value]),style:Rt({width:P.value+"%"})},null,6),f[1]||(f[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",a0,[e("div",r0,[e("i",{class:F(["text-xs",X.value])},null,2),e("span",{class:F(["text-xs font-semibold",Q.value])},u(h.label),3)]),e("div",o0,[e("span",{class:F(["text-xs font-bold tabular-nums",v.value])}," $"+u(h.current.toFixed(2))+" / $"+u(h.limit.toFixed(2)),3)])]),h.showShine&&P.value>0?(o(),n("div",l0)):$("",!0)],2))]))}},Fe=st(n0,[["__scopeId","data-v-1393272b"]]),i0={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},d0={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},u0={class:"mb-4 flex items-center justify-between sm:mb-6"},c0={class:"flex items-center gap-2 sm:gap-3"},g0={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},p0={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},m0={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},x0={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},y0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},f0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},b0={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},v0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},k0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},w0={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},h0={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},A0={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},C0={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},$0={class:"space-y-1 text-sm"},I0={class:"flex justify-between"},K0={class:"font-semibold text-gray-900 dark:text-gray-100"},L0={class:"flex justify-between"},D0={class:"font-semibold text-gray-900 dark:text-gray-100"},T0={class:"mb-6"},_0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},S0={class:"flex items-center justify-between"},M0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},U0={class:"flex items-center justify-between"},R0={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},V0={key:0,class:"flex items-center justify-between"},P0={class:"text-sm font-semibold text-purple-600"},E0={key:1,class:"flex items-center justify-between"},O0={class:"text-sm font-semibold text-purple-600"},j0={key:0,class:"mb-6"},G0={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},z0={key:0,class:"space-y-1.5"},q0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},F0={key:1,class:"space-y-1.5"},B0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},W0={key:2,class:"space-y-1.5"},N0={class:"text-right text-xs text-gray-500 dark:text-gray-400"},H0={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Y0={class:"font-semibold text-purple-600 dark:text-purple-300"},Q0={key:4,class:"space-y-2"},J0={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(h,{emit:J}){const c=h,P=J,Y=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.requests)||0}),I=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.requests)||0}),z=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.tokens)||0}),S=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.daily)==null?void 0:x.tokens)||0}),W=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cost)||0}),X=j(()=>c.apiKey.dailyCost||0),Q=j(()=>c.apiKey.totalCostLimit||0),v=j(()=>c.apiKey.weeklyOpusCost||0),L=j(()=>c.apiKey.weeklyOpusCostLimit||0),f=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.inputTokens)||0}),M=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.outputTokens)||0}),se=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheCreateTokens)||0}),G=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.total)==null?void 0:x.cacheReadTokens)||0}),ee=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.rpm)||0}),te=j(()=>{var U,x;return((x=(U=c.apiKey.usage)==null?void 0:U.averages)==null?void 0:x.tpm)||0}),H=j(()=>c.apiKey.dailyCostLimit>0||c.apiKey.totalCostLimit>0||c.apiKey.concurrencyLimit>0||c.apiKey.weeklyOpusCostLimit>0||c.apiKey.rateLimitWindow>0||c.apiKey.tokenLimit>0),C=j(()=>!c.apiKey.dailyCostLimit||c.apiKey.dailyCostLimit===0?0:X.value/c.apiKey.dailyCostLimit*100),T=j(()=>!Q.value||Q.value===0?0:W.value/Q.value*100),a=j(()=>!L.value||L.value===0?0:v.value/L.value*100),Z=U=>U>=1e6?(U/1e6).toFixed(1)+"M":U>=1e3?(U/1e3).toFixed(1)+"K":U.toString(),V=()=>{P("close")},D=()=>{var U;P("open-timeline",(U=c.apiKey)==null?void 0:U.id)};return(U,x)=>(o(),he(Oe,{to:"body"},[h.show?(o(),n("div",i0,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:V}),e("div",d0,[e("div",u0,[e("div",c0,[x[0]||(x[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",g0," 使用统计详情 - "+u(h.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:V},x[1]||(x[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",p0,[e("div",m0,[e("div",x0,[x[2]||(x[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",y0,u(Ae(vt)(Y.value)),1),e("div",f0," 今日: "+u(Ae(vt)(I.value))+" 次 ",1)]),e("div",b0,[x[3]||(x[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",v0,u(Z(z.value)),1),e("div",k0," 今日: "+u(Z(S.value)),1)]),e("div",w0,[x[4]||(x[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",h0," $"+u(W.value.toFixed(4)),1),e("div",A0," 今日: $"+u(X.value.toFixed(4)),1)]),e("div",C0,[x[7]||(x[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",$0,[e("div",I0,[x[5]||(x[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",K0,u(ee.value),1)]),e("div",L0,[x[6]||(x[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",D0,u(te.value),1)])])])]),e("div",T0,[x[12]||(x[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),K(" Token 使用分布 ")],-1)),e("div",_0,[e("div",S0,[x[8]||(x[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",M0,u(Z(f.value)),1)]),e("div",U0,[x[9]||(x[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",R0,u(Z(M.value)),1)]),se.value>0?(o(),n("div",V0,[x[10]||(x[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",P0,u(Z(se.value)),1)])):$("",!0),G.value>0?(o(),n("div",E0,[x[11]||(x[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",O0,u(Z(G.value)),1)])):$("",!0)])]),H.value?(o(),n("div",j0,[x[15]||(x[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),K(" 限制设置 ")],-1)),e("div",G0,[h.apiKey.dailyCostLimit>0?(o(),n("div",z0,[ne(Fe,{current:X.value,label:"每日费用限制",limit:h.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",q0," 已使用 "+u(Math.min(C.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.weeklyOpusCostLimit>0?(o(),n("div",F0,[ne(Fe,{current:v.value,label:"Opus 周费用限制",limit:h.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",B0," 已使用 "+u(Math.min(a.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.totalCostLimit>0?(o(),n("div",W0,[ne(Fe,{current:W.value,label:"总费用限制",limit:h.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",N0," 已使用 "+u(Math.min(T.value,100).toFixed(1))+"% ",1)])):$("",!0),h.apiKey.concurrencyLimit>0?(o(),n("div",H0,[x[13]||(x[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Y0,u(h.apiKey.currentConcurrency||0)+" / "+u(h.apiKey.concurrencyLimit),1)])):$("",!0),h.apiKey.rateLimitWindow>0?(o(),n("div",Q0,[x[14]||(x[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),K(" 时间窗口限制 ")],-1)),ne(lr,{"cost-limit":h.apiKey.rateLimitCost,"current-cost":h.apiKey.currentWindowCost,"current-requests":h.apiKey.currentWindowRequests,"current-tokens":h.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":h.apiKey.rateLimitWindow,"request-limit":h.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":h.apiKey.tokenLimit,"window-end-time":h.apiKey.windowEndTime,"window-remaining-seconds":h.apiKey.windowRemainingSeconds,"window-start-time":h.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):$("",!0)])])):$("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:D}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:V}," 关闭 ")])])])):$("",!0)]))}},X0={class:"max-h-[60vh] overflow-y-auto px-6 py-4"},Z0={class:"mb-4 flex gap-2"},eu=["disabled"],tu={key:0,class:"fas fa-spinner fa-spin mr-1"},su={key:1,class:"fas fa-plus mr-1"},au={key:0,class:"py-8 text-center"},ru={key:1,class:"py-8 text-center"},ou={key:2,class:"space-y-2"},lu={class:"flex items-center gap-3"},nu={class:"font-medium text-gray-700 dark:text-gray-200"},iu={class:"rounded-full bg-purple-100 px-2 py-0.5 text-xs text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},du={class:"flex gap-1"},uu=["disabled","onClick"],cu=["disabled","onClick"],gu={class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800"},pu={class:"mb-4"},mu={class:"flex justify-end gap-3"},xu=["disabled"],yu={key:0,class:"fas fa-spinner fa-spin mr-1"},fu={__name:"TagManagementModal",props:{show:{type:Boolean,default:!1}},emits:["close","updated"],setup(h,{emit:J}){const c=h,P=J,Y=A(!1),I=A(!1),z=A(!1),S=A([]),W=A(""),X=A(!1),Q=A(!1),v=A(null),L=A(null),f=A(""),M=async()=>{Y.value=!0;const T=await Ba();Y.value=!1,T.success&&(S.value=T.data)},se=async()=>{if(!W.value.trim())return;z.value=!0;const T=await qa(W.value.trim());z.value=!1,T.success?(R("标签创建成功","success"),W.value="",M(),P("updated")):R(T.error||"创建失败","error")},G=T=>{v.value=T,X.value=!0},ee=async()=>{if(!v.value)return;X.value=!1,I.value=!0;const T=v.value.name,a=await Wa(T);I.value=!1,a.success?(R(`标签「${T}」已删除`,"success"),S.value=S.value.filter(Z=>Z.name!==T),v.value=null,P("updated")):R(a.error||"删除失败","error")},te=T=>{L.value=T,f.value=T.name,Q.value=!0},H=async()=>{if(!L.value||!f.value.trim())return;I.value=!0;const T=L.value.name,a=await Fa(T,f.value.trim());I.value=!1,a.success?(R("标签已重命名","success"),Q.value=!1,L.value=null,M(),P("updated")):R(a.error||"重命名失败","error")},C=()=>{v.value=null,P("close")};return Re(()=>c.show,T=>{T&&(v.value=null,W.value="",M())}),(T,a)=>{var Z,V;return o(),n(re,null,[(o(),he(Oe,{to:"body"},[ne(Gs,{name:"modal"},{default:js(()=>[h.show?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:$e(C,["self"])},[e("div",{class:"w-full max-w-lg rounded-2xl bg-white shadow-2xl dark:bg-gray-800",onClick:a[1]||(a[1]=$e(()=>{},["stop"]))},[e("div",{class:"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},[a[7]||(a[7]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},[e("i",{class:"fas fa-tags mr-2 text-purple-500"}),K(" 标签管理 ")],-1)),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:C},a[6]||(a[6]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",X0,[e("div",Z0,[_(e("input",{"onUpdate:modelValue":a[0]||(a[0]=D=>W.value=D),class:"flex-1 rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-purple-500 focus:outline-none focus:ring-1 focus:ring-purple-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"输入新标签名称",type:"text",onKeyup:tt(se,["enter"])},null,544),[[le,W.value]]),e("button",{class:"rounded-lg bg-purple-500 px-4 py-2 text-sm font-medium text-white hover:bg-purple-600 disabled:opacity-50",disabled:!W.value.trim()||z.value||I.value,onClick:se},[z.value?(o(),n("i",tu)):(o(),n("i",su)),a[8]||(a[8]=K(" 新增 ",-1))],8,eu)]),Y.value?(o(),n("div",au,a[9]||(a[9]=[e("i",{class:"fas fa-spinner fa-spin text-2xl text-gray-400"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):S.value.length===0?(o(),n("div",ru,a[10]||(a[10]=[e("i",{class:"fas fa-tag text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"暂无标签",-1)]))):(o(),n("div",ou,[(o(!0),n(re,null,ge(S.value,D=>(o(),n("div",{key:D.name,class:"flex items-center justify-between rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-700 dark:bg-gray-700/50"},[e("div",lu,[a[11]||(a[11]=e("i",{class:"fas fa-tag text-purple-500"},null,-1)),e("span",nu,u(D.name),1),e("span",iu,u(D.count)+" 个 Key ",1)]),e("div",du,[e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-blue-100 hover:text-blue-600 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",disabled:I.value,title:"重命名",onClick:U=>te(D)},a[12]||(a[12]=[e("i",{class:"fas fa-edit"},null,-1)]),8,uu),e("button",{class:"rounded-lg p-2 text-gray-400 hover:bg-red-100 hover:text-red-600 dark:hover:bg-red-900/30 dark:hover:text-red-400",disabled:I.value,title:"删除标签",onClick:U=>G(D)},a[13]||(a[13]=[e("i",{class:"fas fa-trash"},null,-1)]),8,cu)])]))),128))]))]),e("div",{class:"flex justify-end border-t border-gray-200 px-6 py-4 dark:border-gray-700"},[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:C}," 关闭 ")])])])):$("",!0)]),_:1})])),ne(at,{"cancel-text":"取消","confirm-text":"确定删除",message:`此操作将从 ${((Z=v.value)==null?void 0:Z.count)||0} 个 API Key 中移除该标签,不可恢复。`,show:X.value,title:`删除标签「${((V=v.value)==null?void 0:V.name)||""}」`,type:"danger",onCancel:a[2]||(a[2]=D=>X.value=!1),onConfirm:ee},null,8,["message","show","title"]),(o(),he(Oe,{to:"body"},[Q.value?(o(),n("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:a[5]||(a[5]=$e(D=>Q.value=!1,["self"]))},[e("div",gu,[a[16]||(a[16]=e("h3",{class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},"重命名标签",-1)),e("div",pu,[a[14]||(a[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 新名称 ",-1)),_(e("input",{"onUpdate:modelValue":a[3]||(a[3]=D=>f.value=D),class:"w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"请输入新标签名称",type:"text",onKeyup:tt(H,["enter"])},null,544),[[le,f.value]])]),e("div",mu,[e("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[4]||(a[4]=D=>Q.value=!1)}," 取消 "),e("button",{class:"rounded-lg bg-blue-500 px-4 py-2 text-sm font-medium text-white hover:bg-blue-600 disabled:opacity-50",disabled:!f.value.trim()||I.value,onClick:H},[I.value?(o(),n("i",yu)):$("",!0),a[15]||(a[15]=K(" 确定 ",-1))],8,xu)])])])):$("",!0)]))],64)}}},bu=st(fu,[["__scopeId","data-v-8e455166"]]),vu={class:"tab-content"},ku={class:"card p-4 sm:p-6"},wu={class:"mb-4 flex flex-col gap-4 sm:mb-6"},hu={class:"border-b border-gray-200 dark:border-gray-700"},Au={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},Cu={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},$u={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},Iu={key:0,class:"tab-panel"},Ku={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},Lu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Du={class:"group relative min-w-[140px]"},Tu={key:0,class:"flex items-center"},_u={class:"group relative min-w-[140px]"},Su={class:"relative"},Mu={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},Uu={class:"group relative min-w-[140px]"},Ru={class:"relative"},Vu={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},Pu={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},Eu={class:"sm:w-44"},Ou={class:"group relative flex-1"},ju={class:"relative flex items-center"},Gu=["placeholder"],zu={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},qu=["disabled"],Fu={class:"relative"},Bu={class:"relative"},Wu={key:0,class:"py-12 text-center"},Nu={key:1,class:"py-12 text-center"},Hu={key:2,class:"table-wrapper hidden md:block"},Yu={class:"table-container"},Qu={class:"w-full"},Ju={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Xu={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},Zu={class:"flex items-center"},ec=["indeterminate"],tc={key:1,class:"fas fa-sort ml-1 text-gray-400"},sc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ac=["title"],rc={key:1,class:"fas fa-sort ml-1 text-gray-400"},oc={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},lc={key:1,class:"fas fa-sort ml-1 text-gray-400"},nc={key:1,class:"fas fa-sort ml-1 text-gray-400"},ic={key:1,class:"fas fa-sort ml-1 text-gray-400"},dc={class:F(["table-row","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:shadow-sm"])},uc={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},cc={class:"flex items-center"},gc=["value"],pc={class:"min-w-0"},mc=["onClick"],xc={key:0,class:"mt-1 text-xs text-red-600"},yc={class:"px-3 py-3"},fc={class:"space-y-1"},bc={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},vc={key:0,class:"flex items-center gap-1 text-xs"},kc={class:"truncate text-gray-600 dark:text-gray-400"},wc={key:1,class:"flex items-center gap-1 text-xs"},hc={class:"truncate text-gray-600 dark:text-gray-400"},Ac={key:2,class:"flex items-center gap-1 text-xs"},Cc={class:"truncate text-gray-600 dark:text-gray-400"},$c={key:3,class:"flex items-center gap-1 text-xs"},Ic={class:"truncate text-gray-600 dark:text-gray-400"},Kc={key:4,class:"flex items-center gap-1 text-xs"},Lc={class:"truncate text-gray-600 dark:text-gray-400"},Dc={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Tc={class:"px-3 py-3"},_c={class:"flex flex-wrap gap-1"},Sc={key:0,class:"text-xs text-gray-400"},Mc={class:"whitespace-nowrap px-3 py-3"},Uc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Rc={key:0,class:"flex items-center justify-end"},Vc={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},Pc={key:2,class:"text-gray-400"},Ec={class:"px-2 py-2",style:{"font-size":"12px"}},Oc={class:"flex flex-col gap-2"},jc={key:0,class:"space-y-2"},Gc={key:2,class:"space-y-1.5"},zc={class:"flex items-center justify-between text-[10px]"},qc={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},Fc={class:"font-medium"},Bc={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Wc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Nc={key:0,class:"flex items-center justify-end"},Hc={key:1,class:"flex items-center justify-end gap-1"},Yc={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Qc={key:2,class:"text-gray-400"},Jc={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xc={key:0,class:"flex items-center justify-end"},Zc={key:1,class:"flex items-center justify-end gap-1"},eg={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},tg={key:2,class:"text-gray-400"},sg={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ag={class:"flex flex-col leading-tight"},rg=["title"],og={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lg={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ng=["title"],ig={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dg={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ug={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},cg={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},gg={class:"inline-flex items-center gap-1.5"},pg={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},mg={key:1},xg=["onClick"],yg=["onClick"],fg=["onClick"],bg=["onClick"],vg={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},kg={class:"hidden gap-1 2xl:flex"},wg=["onClick"],hg=["onClick"],Ag=["onClick"],Cg=["onClick"],$g=["title","onClick"],Ig={class:"ml-1"},Kg=["onClick"],Lg={class:"flex items-center gap-1 2xl:hidden"},Dg=["onClick"],Tg=["onClick"],_g={key:0},Sg={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},Mg={key:0,class:"py-4 text-center"},Ug={class:"space-y-4"},Rg={class:"mb-4 flex items-center justify-between"},Vg={class:"flex items-center gap-2"},Pg={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Eg={class:"flex items-center gap-1"},Og={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},jg=["onClick"],Gg={key:0,class:"py-8 text-center"},zg={class:"mb-3 flex items-center justify-center gap-2"},qg=["onClick"],Fg={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Bg={class:"mb-3 flex items-start justify-between"},Wg={class:"flex-1"},Ng={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Hg={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},Yg={class:"mb-3 space-y-2"},Qg={class:"flex items-center justify-between text-sm"},Jg={class:"font-semibold text-gray-900 dark:text-gray-100"},Xg={class:"flex items-center justify-between text-sm"},Zg={class:"font-semibold text-green-600"},ep={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},tp={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},sp={class:"font-medium"},ap={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},rp={class:"font-medium"},op={key:0,class:"flex items-center justify-between text-xs text-purple-600"},lp={class:"font-medium"},np={key:1,class:"flex items-center justify-between text-xs text-purple-600"},ip={class:"font-medium"},dp={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},up={class:"mt-1 text-right"},cp={class:"text-xs font-medium text-indigo-600"},gp={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},pp={class:"flex items-center justify-between text-sm"},mp={class:"flex gap-4 text-xs"},xp={class:"text-gray-600 dark:text-gray-400"},yp={class:"font-semibold text-gray-800 dark:text-gray-200"},fp={class:"text-gray-600 dark:text-gray-400"},bp={class:"font-semibold text-gray-800 dark:text-gray-200"},vp={key:3,class:"space-y-3 md:hidden"},kp={class:"mb-3 flex items-start justify-between"},wp={class:"flex items-center gap-3"},hp=["value"],Ap=["onClick"],Cp={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},$p={class:"mb-3 space-y-1.5"},Ip={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},Kp={class:"text-gray-600 dark:text-gray-400"},Lp={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},Dp={class:"text-gray-600 dark:text-gray-400"},Tp={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},_p={class:"text-gray-600 dark:text-gray-400"},Sp={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},Mp={class:"text-gray-600 dark:text-gray-400"},Up={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},Rp={class:"text-gray-600 dark:text-gray-400"},Vp={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},Pp={key:6,class:"text-xs text-red-600"},Ep={class:"mb-3 space-y-2"},Op={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},jp={class:"mb-2 flex items-center justify-between"},Gp={class:"text-xs text-gray-600 dark:text-gray-400"},zp=["onClick"],qp={class:"grid grid-cols-2 gap-3"},Fp={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Bp={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Wp={key:2,class:"text-sm font-semibold text-gray-400"},Np={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Hp={key:1,class:"text-sm font-semibold text-green-600"},Yp={key:2,class:"text-sm font-semibold text-gray-400"},Qp={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Jp={class:"flex items-center justify-between"},Xp={class:"font-medium text-gray-700 dark:text-gray-300"},Zp={class:"mt-1 flex items-center justify-between"},em={key:0,class:"text-gray-400 dark:text-gray-500"},tm=["title"],sm={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},am={key:2,class:"text-gray-400 dark:text-gray-500"},rm={class:"space-y-2"},om={key:0,class:"space-y-2"},lm={key:2,class:"space-y-2"},nm={class:"flex items-center justify-between text-xs"},im={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},dm={class:"font-medium"},um={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},cm={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},gm={class:"mb-1 flex justify-between"},pm={class:"flex items-center justify-between"},mm={class:"flex items-center gap-1"},xm=["onClick"],ym={key:0,class:"mb-3 flex flex-wrap gap-1"},fm={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},bm=["onClick"],vm=["onClick"],km=["onClick"],wm=["onClick"],hm=["onClick"],Am={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Cm={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},$m={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Im={class:"flex items-center gap-2"},Km=["value"],Lm={class:"flex items-center gap-2"},Dm=["disabled"],Tm={class:"flex items-center gap-1"},_m={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Sm=["onClick"],Mm={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},Um=["disabled"],Rm={key:1,class:"tab-panel"},Vm={key:0,class:"py-12 text-center"},Pm={key:1,class:"py-12 text-center"},Em={key:2},Om={class:"mb-4 flex justify-end"},jm={class:"table-wrapper"},Gm={class:"table-container"},zm={class:"w-full"},qm={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},Fm={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Bm={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Wm={class:"name-column sticky left-0 z-10 px-3 py-3"},Nm={class:"flex items-center"},Hm={class:"min-w-0"},Ym=["onClick"],Qm={class:"px-3 py-3"},Jm={class:"space-y-1"},Xm={key:0,class:"flex items-center gap-1 text-xs"},Zm={key:1,class:"flex items-center gap-1 text-xs"},ex={key:2,class:"flex items-center gap-1 text-xs"},tx={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},sx={key:0,class:"px-3 py-3"},ax={class:"text-xs"},rx={key:0,class:"text-blue-600"},ox={key:1,class:"text-green-600"},lx={key:2,class:"text-gray-500 dark:text-gray-400"},nx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},ix={class:"px-3 py-3"},dx={class:"text-xs"},ux={key:0,class:"text-blue-600"},cx={key:1,class:"text-green-600"},gx={key:2,class:"text-gray-500 dark:text-gray-400"},px={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},mx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},xx={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},yx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},fx={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},bx={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},vx={class:"flex items-center justify-end gap-1"},kx={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},wx={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},hx={class:"flex flex-col leading-tight"},Ax=["title"],Cx={key:1,class:"text-gray-400",style:{"font-size":"13px"}},$x={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Ix=["title"],Kx={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Lx={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Dx={class:"operations-column operations-cell px-3 py-3"},Tx={class:"flex items-center gap-2"},_x=["onClick"],Sx=["onClick"],Ps=16,Mx={__name:"ApiKeysView",setup(h){const J=Ua(),c=Na(),P=A([]),Y=j(()=>{var s;return((s=c.oemSettings)==null?void 0:s.ldapEnabled)||!1}),I=A([]),z=A(!1),S=A(!1),W=A(!1),X=A(!1),Q=A("today"),v=ut({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),L=j(()=>W.value),f=()=>{W.value=!W.value,W.value||(I.value=[],z.value=!1,S.value=!1)},M=j(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),se=A("active"),G=A([]),ee=A(!1),te=A("createdAt"),H=A("desc"),C=A({}),T=A({}),a=A({page:1,pageSize:20,total:0,totalPages:0}),Z=A(new Map),V=A(new Set),D=A(new Map),U=A(new Set),x=A({}),d=A({}),p=A([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),b=A({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),oe=A(!1),xe=A(!1),Te=A(null),Ce=A(null),N=A(!1),i=A(null),k=A(""),ie=A([]),ae=A([]),E=A([]),l=A(""),y=A("apiKey"),de=j(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),Ue=j(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return ie.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Se=j(()=>E.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),Be=j(()=>k.value?P.value.filter(s=>s.tags&&s.tags.includes(k.value)).length:0),ye=A(1),ce=A((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),Ve=[10,20,50,100],ze=A(!1),We=A(!1),Ne=A(!1),pe=A(!1),Ee=A(!1),ht=A(!1),Wt=A(!1),ns=A(null),is=A(null),ds=A(null),us=A([]),At=A(!1),rt=A({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),Je=A(null),ot=(s,t,m="确认",r="取消",w="primary")=>new Promise(q=>{rt.value={title:s,message:t,confirmText:m,cancelText:r,type:w},Je.value=q,At.value=!0}),Bs=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!0)},Ws=()=>{var s;At.value=!1,(s=Je.value)==null||s.call(Je,!1)},Ct=j(()=>P.value),Xe=j(()=>a.value.totalPages||0),ct=j(()=>{const s=[],t=ye.value,m=Xe.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),w=Math.min(m,t+2);t<=3?w=5:t>=m-2&&(r=m-4);for(let q=r;q<=w;q++)s.push(q)}return s}),cs=j(()=>{const s=ct.value;return s.length===0?!1:s[0]>1}),gs=j(()=>{const s=ct.value;return s.length===0?!1:s[s.length-1]{const s=ct.value;return s.length===0?!1:cs.value&&s[0]>2}),Hs=j(()=>{const s=ct.value;return s.length===0?!1:gs.value&&s[s.length-1]P.value),$t=async(s=!1)=>{var t,m;if(!(xe.value&&!s)){oe.value=!0;try{const[r,w,q,B,O,me,fe,g,ke]=await Promise.all([Pt(),Et(),Ot(),jt(),Gt(),zt(),qt(),Ft(),Bt()]),we=[];r.success&&((t=r.data)==null||t.forEach(ue=>{we.push({...ue,platform:"claude-oauth",isDedicated:ue.accountType==="dedicated"})})),w.success&&((m=w.data)==null||m.forEach(ue=>{we.push({...ue,platform:"claude-console",isDedicated:ue.accountType==="dedicated"})})),b.value.claude=we;const Le=[];if(q.success&&(q.data||[]).forEach(ue=>{Le.push({...ue,platform:"gemini",isDedicated:ue.accountType==="dedicated"})}),B.success&&(b.value.geminiApi=(B.data||[]).map(ue=>({...ue,platform:"gemini-api",isDedicated:ue.accountType==="dedicated"})),b.value.geminiApi.forEach(ue=>{Le.push(ue)})),b.value.gemini=Le,O.success&&(b.value.openai=(O.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),me.success&&(b.value.openaiResponses=(me.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),fe.success&&(b.value.bedrock=(fe.data||[]).map(ue=>({...ue,isDedicated:ue.accountType==="dedicated"}))),g.success&&(b.value.droid=(g.data||[]).map(ue=>({...ue,platform:"droid",isDedicated:ue.accountType==="dedicated"}))),ke.success){const ue=ke.data||[];b.value.claudeGroups=ue.filter(be=>be.platform==="claude"),b.value.geminiGroups=ue.filter(be=>be.platform==="gemini"),b.value.openaiGroups=ue.filter(be=>be.platform==="openai"),b.value.droidGroups=ue.filter(be=>be.platform==="droid")}xe.value=!0}catch{}finally{oe.value=!1}}},Ys=async()=>{try{const s=await Qa();s.success&&(E.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},Ke=async(s=!0)=>{var t,m,r;X.value=!0;try{s&&(Z.value.clear(),D.value.clear());const w=new URLSearchParams;w.set("page",ye.value.toString()),w.set("pageSize",ce.value.toString()),w.set("searchMode",y.value),l.value&&w.set("search",l.value),k.value&&w.set("tag",k.value),ae.value.length>0&&w.set("models",ae.value.join(","));const B=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes(te.value)?te.value:"createdAt";w.set("sortBy",B),w.set("sortOrder",H.value),B==="cost"&&(v.type==="custom"&&v.customStart&&v.customEnd?(w.set("costTimeRange","custom"),w.set("costStartDate",v.customStart),w.set("costEndDate",v.customEnd)):w.set("costTimeRange",v.preset||"7days")),v.type==="custom"&&v.customStart&&v.customEnd?(w.set("startDate",v.customStart),w.set("endDate",v.customEnd),w.set("timeRange","custom")):v.preset==="all"?w.set("timeRange","all"):w.set("timeRange",v.preset);const O=await Ya(w.toString());O.success&&(P.value=((t=O.data)==null?void 0:t.items)||[],(m=O.data)!=null&&m.pagination&&(a.value=O.data.pagination,ye.value>a.value.totalPages&&a.value.totalPages>0&&(ye.value=a.value.totalPages)),(r=O.data)!=null&&r.availableTags&&(ie.value=O.data.availableTags),Qs(),Js())}catch{R("加载 API Keys 失败","error")}finally{X.value=!1}},Qs=async()=>{const s=P.value;if(!s||s.length===0)return;let t=v.preset,m=null,r=null;v.type==="custom"&&v.customStart&&v.customEnd&&(t="custom",m=v.customStart,r=v.customEnd);const w=s.filter(B=>{const O=Z.value.get(B.id);return!O||O.timeRange!==t||t==="custom"&&(O.startDate!==m||O.endDate!==r)});if(w.length===0)return;const q=w.map(B=>B.id);q.forEach(B=>V.value.add(B));try{const B={keyIds:q,timeRange:t};t==="custom"&&(B.startDate=m,B.endDate=r);const O=await er(B);if(O.success&&O.data)for(const[me,fe]of Object.entries(O.data))Z.value.set(me,{stats:fe,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(B){console.error("加载统计数据失败:",B)}finally{q.forEach(B=>V.value.delete(B))}},ve=s=>{const t=Z.value.get(s);return(t==null?void 0:t.stats)||null},Ze=s=>V.value.has(s),Js=async()=>{const s=P.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||D.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>U.value.add(r));try{const r=await tr({keyIds:m});if(r.success&&r.data)for(const[w,q]of Object.entries(r.data))D.value.set(w,q)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>U.value.delete(r))}},Xs=s=>D.value.get(s)||null,It=s=>U.value.has(s),Kt=async()=>{se.value="deleted",ee.value=!0;try{const s=await Ja();s.success&&(G.value=s.apiKeys||[])}catch{R("加载已删除的 API Keys 失败","error")}finally{ee.value=!1}},nt=s=>{if(s==="cost"){if(!Lt.value){R("费用排序索引正在更新中,请稍后重试","warning");return}v.type==="custom"&&R("正在计算费用排序,可能需要几秒钟...","info")}te.value===s?H.value=H.value==="asc"?"desc":"asc":(te.value=s,H.value=s==="cost"?"desc":"asc")},Lt=j(()=>{if(v.type==="custom")return!0;const s=v.preset,t=T.value[s];return(t==null?void 0:t.status)==="ready"}),Zs=j(()=>{if(v.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=v.preset,t=T.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let it=null;const ps=async()=>{try{const s=await Ha();s.success&&(T.value=s.data||{},ea())}catch(s){console.error("Failed to fetch cost sort status:",s)}},ea=()=>{it&&clearTimeout(it);const t=Object.values(T.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;it=setTimeout(ps,t)},Me=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),gt=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const O=s.substring(6),me=b.value.claudeGroups.find(we=>we.id===O);if(me)return`分组-${me.name}`;const fe=b.value.geminiGroups.find(we=>we.id===O);if(fe)return`分组-${fe.name}`;const g=b.value.openaiGroups.find(we=>we.id===O);if(g)return`分组-${g.name}`;const ke=b.value.droidGroups.find(we=>we.id===O);return ke?`分组-${ke.name}`:`分组-${O.substring(0,8)}`}const t=b.value.claude.find(O=>O.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const O=s.replace("api:",""),me=b.value.gemini.find(fe=>fe.id===O&&fe.platform==="gemini-api");return me?`${me.name}`:`${O.substring(0,8)}`}const m=b.value.gemini.find(O=>O.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const O=s.replace("responses:",""),me=b.value.openaiResponses.find(fe=>fe.id===O);return me?`${me.name}`:`${O.substring(0,8)}`}const r=b.value.openai.find(O=>O.id===s);if(r)return`${r.name}`;const w=b.value.openaiResponses.find(O=>O.id===s);if(w)return`${w.name}`;const q=b.value.bedrock.find(O=>O.id===s);if(q)return`${q.name}`;const B=b.value.droid.find(O=>O.id===s);return B?`${B.name}`:`${s.substring(0,8)}`},ta=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),ms=s=>{if(s.claudeAccountId){const t=gt(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=b.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=b.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},xs=s=>{if(s.geminiAccountId){const t=gt(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),w=b.value.gemini.find(q=>q.id===r&&q.platform==="gemini-api");return w?w.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=b.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ys=s=>{if(s.openaiAccountId){const t=gt(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=b.value.openaiResponses.find(w=>w.id===r)}else m=b.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},fs=s=>{if(s.bedrockAccountId){const t=gt(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=b.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},bs=s=>{if(s.droidAccountId){const t=gt(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=b.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},pt=s=>s?new Date(s)!s||pt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,vs=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",ks=async s=>{C.value[s]?C.value[s]=!1:(C.value[s]=!0,d.value[s]||As(s),await Dt(s,!0))},Dt=async(s,t=!1)=>{if(!t&&x.value[s]&&x.value[s].length>0)return;const m=He(s);try{const r={};m.customStart&&m.customEnd?(r.startDate=m.customStart,r.endDate=m.customEnd,r.period="custom"):r.period=m.preset==="today"||m.preset==="7days"?"daily":"monthly";const w=await rr(s,r);w.success&&(x.value[s]=w.data||[])}catch{R("加载模型统计失败","error"),x.value[s]=[]}},ws=(s,t)=>{const m=t.reduce((r,w)=>r+(w.allTokens||0),0);return m===0?0:Math.round(s/m*100)},sa=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",aa=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.requests)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.requests)||0}},ra=s=>{if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(v.preset==="today")return s.dailyCost||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},oa=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.tokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.tokens)||0}},la=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.inputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.inputTokens)||0}},na=s=>{var t,m,r,w,q,B;if(v.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(v.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(v.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(v.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return v.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((w=(r=s.usage)==null?void 0:r.total)==null?void 0:w.outputTokens)||0:((B=(q=s.usage)==null?void 0:q.total)==null?void 0:B.outputTokens)||0}},ia=s=>{if(!x.value[s.id])return ra(s);const t=x.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const w=r.formatted.total.replace("$","").replace(",",""),q=parseFloat(w);isNaN(q)||(m+=q)}}),m},da=s=>{if(hs(s),te.value==="cost"){if(s==="custom")return;const t=T.value[s];(!t||t.status!=="ready")&&(te.value="createdAt",H.value="desc",R("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},hs=s=>{if(v.preset=s,s==="custom"){if(v.type="custom",!v.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=w=>w.getFullYear()+"-"+String(w.getMonth()+1).padStart(2,"0")+"-"+String(w.getDate()).padStart(2,"0")+" 00:00:00";v.customRange=[r(m),r(t)],v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")v.type="preset",v.customStart=null,v.customEnd=null;else{v.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),v.customStart=m.toISOString().split("T")[0],v.customEnd=t.toISOString().split("T")[0]}Ke()},ua=s=>{s&&s.length===2?(v.type="custom",v.preset="custom",v.customRange=s,v.customStart=s[0].split(" ")[0],v.customEnd=s[1].split(" ")[0],Ke()):s===null&&hs("today")},As=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),d.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},He=s=>(d.value[s]||As(s),d.value[s]),Cs=(s,t)=>{const m=He(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(w=>w.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const w=new Date,q=new Date(w);q.setDate(w.getDate()-6);const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)],m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0]}}else{const w=new Date,q=new Date(w);q.setDate(w.getDate()-(r.days-1)),m.customStart=q.toISOString().split("T")[0],m.customEnd=w.toISOString().split("T")[0];const B=O=>O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[B(q),B(w)]}Dt(t,!0)},ca=(s,t)=>{const m=He(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],Dt(s,!0)):t===null&&Cs("7days",s)},$s=s=>s>new Date,ga=s=>{const t=He(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,Dt(s,!0),R("已重置筛选条件并刷新数据","info")},pa=()=>{ze.value=!0,xe.value||$t()},Nt=s=>{ns.value=s,We.value=!0,xe.value||$t()},Ht=s=>{is.value=s,Ne.value=!0},ma=s=>{ze.value=!1,ds.value=s,pe.value=!0,Ke()},xa=s=>{ze.value=!1,us.value=s,Ee.value=!0,Ke()},ya=()=>{if(I.value.length===0){R("请先选择要编辑的 API Keys","warning");return}ht.value=!0,xe.value||$t()},fa=()=>{ht.value=!1,I.value=[],je(),Ke()},ba=()=>{We.value=!1,R("API Key 更新成功","success"),Ke()},va=()=>{Ne.value=!1,R("API Key 续期成功","success"),Ke()},ka=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Nt(s)}];return s.expiresAt&&(pt(s.expiresAt)||mt(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>Ht(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Yt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>Qt(s.id)}),t},Yt=async s=>{let t=!0;if(s.isActive&&(t=await ot("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消","warning")),!!t)try{const m=await Vt(s.id,{isActive:!s.isActive});if(m.success){R(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=P.value.find(w=>w.id===s.id);r&&(r.isActive=!s.isActive)}else R(m.message||"操作失败","error")}catch{R("操作失败","error")}},Qt=async s=>{if(await ot("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消","danger"))try{const m=await qs(s);if(m.success){R("API Key 已删除","success");const r=I.value.indexOf(s);r>-1&&I.value.splice(r,1),je(),Ke()}else R(m.message||"删除失败","error")}catch{R("删除失败","error")}},wa=async s=>{var m,r;if(await ot("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消","primary"))try{const w=await sr(s);w.success?(R("API Key 已成功恢复","success"),await Kt(),await Ke()):R(w.error||"恢复失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ha=async s=>{var m,r;if(await ot("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消","danger"))try{const w=await ar(s);w.success?(R("API Key 已彻底删除","success"),Kt()):R(w.error||"彻底删除失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},Aa=async()=>{var m,r;const s=G.value.length;if(s===0){R("没有需要清空的 API Keys","info");return}if(await ot("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消","danger"))try{const w=await Za();w.success?(R(w.message||"已清空所有已删除的 API Keys","success"),w.details&&w.details.failedCount>0&&R(`${w.details.failedCount} 个清空失败`,"warning"),Kt()):R(w.error||"清空失败","error")}catch(w){R(((r=(m=w.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},Ca=async()=>{const s=I.value.length;if(s===0){R("请先选择要删除的 API Keys","warning");return}if(!await ot("批量删除 API Keys",`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`,"确定删除","取消","danger"))return;const m=[...I.value];try{const r=await Xa({keyIds:m});if(r.success){const{successCount:w,failedCount:q,errors:B}=r.data;if(w>0){if(R(`成功删除 ${w} 个 API Keys`,"success"),q>0){const O=B.map(me=>`${me.keyId}: ${me.error}`).join(`
+`);R(`${q} 个删除失败:
+${O}`,"warning")}}else R("所有 API Keys 删除失败","error");I.value=[],je(),Ke()}else R(r.message||"批量删除失败","error")}catch{R("批量删除失败","error")}},$a=()=>{if(z.value)lt.value.forEach(s=>{I.value.includes(s.id)||I.value.push(s.id)});else{const s=new Set(lt.value.map(t=>t.id));I.value=I.value.filter(t=>!s.has(t))}je()},je=()=>{const s=lt.value.length,t=lt.value.filter(m=>I.value.includes(m.id)).length;t===0?(z.value=!1,S.value=!1):t===s?(z.value=!0,S.value=!1):(z.value=!1,S.value=!0)},xt=s=>{Te.value=s},Is=()=>{Te.value=null},Ia=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await or(s,{expiresAt:t||null,activateNow:m||!1});if(r.success){R(m?"API Key已激活":"过期时间已更新","success");const w=P.value.find(q=>q.id===s);w&&(m&&r.updates?(w.isActivated=!0,w.activatedAt=r.updates.activatedAt,w.expiresAt=r.updates.expiresAt):(w.expiresAt=t||null,t&&!w.isActivated&&(w.isActivated=!0))),Is()}else R(r.message||"更新失败","error"),Ce.value&&Ce.value.resetSaving()}catch{R("更新失败","error"),Ce.value&&Ce.value.resetSaving()}},Ks=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},Tt=s=>{var r,w,q,B,O,me,fe,g,ke,we,Le,ue,be,Mt,qe;const t=ve(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((q=(w=s.usage)==null?void 0:w.total)==null?void 0:q.requests)??0,tokens:(t==null?void 0:t.tokens)??((O=(B=s.usage)==null?void 0:B.total)==null?void 0:O.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((fe=(me=s.usage)==null?void 0:me.total)==null?void 0:fe.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((ke=(g=s.usage)==null?void 0:g.total)==null?void 0:ke.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((Le=(we=s.usage)==null?void 0:we.total)==null?void 0:Le.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((be=(ue=s.usage)==null?void 0:ue.total)==null?void 0:be.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((qe=(Mt=s.usage)==null?void 0:Mt.total)==null?void 0:qe.cacheReadTokens)??0}}};i.value=m,N.value=!0},Ka=s=>{var m;const t=s||((m=i.value)==null?void 0:m.id);t&&(N.value=!1,J.push(`/api-keys/${t}/usage-records`))},Jt=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Xt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},La=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,Ls=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},_t=s=>{if(!s)return null;const t=Xs(s.id);return t!==null?t:s.lastUsage||null},Zt=s=>{if(It(s==null?void 0:s.id))return!1;const t=_t(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},es=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const w=La.test(t),q=!m||m===t,B=Ls(r);return w&&q&&(!r||r==="unknown"||B==="other")},Da=s=>s?es(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",yt=s=>Da(_t(s)),ts=s=>{const t=yt(s);return t.length>Ps?`${t.slice(0,Ps)}...`:t},St=s=>{const t=_t(s);if(es(t))return Xt.deleted;const m=(t==null?void 0:t.accountCategory)||Ls(t==null?void 0:t.accountType);return Xt[m]||Xt.other},ss=s=>{const t=_t(s);return es(t)},Ta=()=>{l.value="",ye.value=1},_a=()=>{try{const s=Ct.value.map(g=>{var Ds,Ts,_s,Ss,Ms,Us,Rs,Vs;const ke=aa(g),we=ia(g),Le=oa(g),ue=la(g),be=na(g),Mt={ID:g.id||"",名称:g.name||"",描述:g.description||"",状态:g.isActive?"启用":"禁用",API密钥:g.apiKey||"",过期模式:g.expirationMode==="activation"?"首次使用后激活":g.expirationMode==="fixed"?"固定时间":"无",激活期限:g.activationDays||"",激活单位:g.activationUnit==="hours"?"小时":g.activationUnit==="days"?"天":"",已激活:g.isActivated?"是":"否",激活时间:g.activatedAt?Pe(g.activatedAt):"",过期时间:g.expiresAt?Pe(g.expiresAt):"",服务权限:(()=>{const Ge=g.permissions;return!Ge||Ge==="all"?"全部服务":Array.isArray(Ge)?Ge.length===0?"全部服务":Ge.join(", "):Ge})(),令牌限制:g.tokenLimit==="0"||g.tokenLimit===0?"无限制":g.tokenLimit||"",并发限制:g.concurrencyLimit==="0"||g.concurrencyLimit===0?"无限制":g.concurrencyLimit||"","速率窗口(分钟)":g.rateLimitWindow==="0"||g.rateLimitWindow===0?"无限制":g.rateLimitWindow||"",速率请求限制:g.rateLimitRequests==="0"||g.rateLimitRequests===0?"无限制":g.rateLimitRequests||"","日费用限制($)":g.dailyCostLimit==="0"||g.dailyCostLimit===0?"无限制":`$${g.dailyCostLimit}`||"","总费用限制($)":g.totalCostLimit==="0"||g.totalCostLimit===0?"无限制":`$${g.totalCostLimit}`||"",Claude专属账户:g.claudeAccountId||"",Claude控制台账户:g.claudeConsoleAccountId||"",Gemini专属账户:g.geminiAccountId||"",OpenAI专属账户:g.openaiAccountId||"","Azure OpenAI专属账户":g.azureOpenaiAccountId||"",Bedrock专属账户:g.bedrockAccountId||"",Droid专属账户:g.droidAccountId||"",启用模型限制:g.enableModelRestriction?"是":"否",限制的模型:g.restrictedModels&&g.restrictedModels.length>0?g.restrictedModels.join("; "):"",启用客户端限制:g.enableClientRestriction?"是":"否",允许的客户端:g.allowedClients&&g.allowedClients.length>0?g.allowedClients.join("; "):"",创建时间:g.createdAt?Pe(g.createdAt):"",创建者:g.createdBy||"",用户ID:g.userId||"",用户名:g.userUsername||"",标签:g.tags&&g.tags.length>0?g.tags.join(", "):"无",请求总数:ke,"总费用($)":we.toFixed(2),Token数:Me(Le),输入Token:Me(ue),输出Token:Me(be),最后使用时间:g.lastUsedAt?Pe(g.lastUsedAt):"从未使用",最后使用账号:yt(g),最后使用类型:St(g)},qe={};let dt=null;return v.preset==="today"?dt=(Ts=(Ds=g.usage)==null?void 0:Ds.daily)==null?void 0:Ts.models:v.preset==="7days"?dt=(Ss=(_s=g.usage)==null?void 0:_s.weekly)==null?void 0:Ss.models:v.preset==="30days"?dt=(Us=(Ms=g.usage)==null?void 0:Ms.monthly)==null?void 0:Us.models:v.preset==="all"&&(dt=(Vs=(Rs=g.usage)==null?void 0:Rs.total)==null?void 0:Vs.models),dt&&Object.entries(dt).forEach(([Ge,ft])=>{let Ye=Ge;Ge.includes(":")&&(Ye=Ge.split(":").pop()),Ye=Ye.replace(/[:/]/g,"_"),qe[`${Ye}_请求数`]=ft.requests||0,qe[`${Ye}_费用($)`]=(ft.cost||0).toFixed(2),qe[`${Ye}_Token`]=Me(ft.totalTokens||0),qe[`${Ye}_输入Token`]=Me(ft.inputTokens||0),qe[`${Ye}_输出Token`]=Me(ft.outputTokens||0)}),{...Mt,...qe}}),t=et.utils.book_new(),m=et.utils.json_to_sheet(s),r=et.utils.decode_range(m["!ref"]),w=Object.keys(s[0]||{}),q=w.map(g=>g==="ID"?{wch:40}:g==="名称"?{wch:25}:g==="描述"?{wch:30}:g==="API密钥"?{wch:45}:g==="标签"?{wch:20}:g.includes("时间")?{wch:20}:g.includes("限制")?{wch:15}:g.includes("费用")?{wch:15}:g.includes("Token")?{wch:15}:g.includes("请求")?{wch:12}:g.includes("账户")?{wch:30}:g.includes("权限")||g.includes("模型")||g.includes("客户端")?{wch:20}:g.includes("激活")||g.includes("过期")?{wch:18}:{wch:15});m["!cols"]=q;for(let g=r.s.c;g<=r.e.c;++g){const ke=et.utils.encode_cell({r:0,c:g});if(!m[ke])continue;const we=w[g],Le=we&&we.includes("_");m[ke].s={fill:{fgColor:{rgb:Le?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let g=1;g<=r.e.r;++g)for(let ke=r.s.c;ke<=r.e.c;++ke){const we=et.utils.encode_cell({r:g,c:ke});if(!m[we])continue;const Le=w[ke],ue=m[we].v,be={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};g%2===0&&(be.fill={fgColor:{rgb:"F2F2F2"}}),Le==="名称"?be.alignment={horizontal:"left",vertical:"center"}:Le==="标签"?(be.alignment={horizontal:"left",vertical:"center"},ue==="无"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le==="最后使用时间"?(be.alignment={horizontal:"right",vertical:"center"},ue==="从未使用"&&(be.font={...be.font,color:{rgb:"999999"},italic:!0})):Le&&Le.includes("费用")?(be.alignment={horizontal:"right",vertical:"center"},be.font={...be.font,color:{rgb:"0066CC"},bold:!0}):Le&&(Le.includes("Token")||Le.includes("请求"))&&(be.alignment={horizontal:"right",vertical:"center"}),m[we].s=be}et.utils.book_append_sheet(t,m,"用量统计");const B=new Date,O=B.getFullYear()+String(B.getMonth()+1).padStart(2,"0")+String(B.getDate()).padStart(2,"0")+"_"+String(B.getHours()).padStart(2,"0")+String(B.getMinutes()).padStart(2,"0")+String(B.getSeconds()).padStart(2,"0");let me="";v.type==="preset"?me={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[v.preset]||v.preset:me="自定义时间";const fe=`API_Keys_用量统计_${me}_${O}.xlsx`;et.writeFile(t,fe),R(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{R("导出失败,请重试","error")}};Re([k,Q],()=>{ye.value=1,I.value=[],je()});let as=null;return Re(l,()=>{as&&clearTimeout(as),as=setTimeout(()=>{ye.value=1,Ke(!1)},300)}),Re(y,()=>{ye.value=1,Ke(!1)}),Re(k,()=>{ye.value=1,Ke(!1)}),Re(ae,()=>{ye.value=1,Ke(!1)}),Re([te,H],()=>{Ke(!1)}),Re([ye,ce],([s,t],[m,r])=>{(s!==m||t!==r)&&Ke(!1),je()}),Re(ce,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Re(P,()=>{const s=new Set(P.value.map(t=>t.id));I.value=I.value.filter(t=>s.has(t)),je()}),wt(async()=>{ps(),await Promise.all([Ke(),Ys()]),je(),$t()}),Os(()=>{it&&(clearTimeout(it),it=null)}),(s,t)=>{const m=Sa;return o(),n("div",vu,[e("div",ku,[e("div",wu,[t[159]||(t[159]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",hu,[e("nav",Au,[e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>se.value="active")},[t[32]||(t[32]=K(" 活跃 API Keys ",-1)),P.value.length>0?(o(),n("span",Cu,u(P.value.length),1)):$("",!0)],2),e("button",{class:F(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",se.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:Kt},[t[33]||(t[33]=K(" 已删除 API Keys ",-1)),G.value.length>0?(o(),n("span",$u,u(G.value.length),1)):$("",!0)],2)])]),se.value==="active"?(o(),n("div",Iu,[e("div",Ku,[e("div",Lu,[e("div",Du,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ne(Ut,{modelValue:v.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>v.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:M.value,placeholder:"选择时间范围",onChange:da},null,8,["modelValue","options"])]),v.type==="custom"?(o(),n("div",Tu,[ne(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":v.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":ua},null,8,["default-time","model-value"])])):$("",!0),e("div",_u,[t[35]||(t[35]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Su,[ne(Ut,{modelValue:k.value,"onUpdate:modelValue":t[2]||(t[2]=r=>k.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:Ue.value,placeholder:"所有标签"},null,8,["modelValue","options"]),k.value?(o(),n("span",Mu,u(Be.value),1)):$("",!0)])]),e("div",Uu,[t[36]||(t[36]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",Ru,[ne(Ut,{modelValue:ae.value,"onUpdate:modelValue":t[3]||(t[3]=r=>ae.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Se.value,placeholder:"所有模型"},null,8,["modelValue","options"]),ae.value.length>0?(o(),n("span",Vu,u(ae.value.length),1)):$("",!0)])]),e("div",Pu,[e("div",Eu,[ne(Ut,{modelValue:y.value,"onUpdate:modelValue":t[4]||(t[4]=r=>y.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:de.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",Ou,[t[39]||(t[39]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",ju,[_(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>l.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:y.value==="bindingAccount"?"搜索所属账号...":Y.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,Gu),[[le,l.value]]),t[38]||(t[38]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),l.value?(o(),n("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Ta},t[37]||(t[37]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):$("",!0)])])])]),e("div",zu,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:X.value,onClick:t[6]||(t[6]=r=>Ke())},[t[40]||(t[40]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:F(["fas relative text-green-500",X.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[41]||(t[41]=e("span",{class:"relative"},"刷新",-1))],8,qu),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:f},[e("i",{class:F(W.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,u(W.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:_a},t[42]||(t[42]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:t[7]||(t[7]=r=>Wt.value=!0)},t[43]||(t[43]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-tags relative text-purple-500"},null,-1),e("span",{class:"relative"},"管理标签",-1)])),I.value.length>0?(o(),n("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>ya())},[t[44]||(t[44]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[45]||(t[45]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",Fu,"编辑选中 ("+u(I.value.length)+")",1)])):$("",!0),I.value.length>0?(o(),n("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[9]||(t[9]=r=>Ca())},[t[46]||(t[46]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[47]||(t[47]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Bu,"删除选中 ("+u(I.value.length)+")",1)])):$("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:$e(pa,["stop"])},t[48]||(t[48]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),X.value?(o(),n("div",Wu,t[49]||(t[49]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):P.value.length===0?(o(),n("div",Nu,t[50]||(t[50]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(o(),n("div",Hu,[e("div",Yu,[e("table",Qu,[e("thead",Ju,[e("tr",null,[L.value?(o(),n("th",Xu,[e("div",Zu,[_(e("input",{"onUpdate:modelValue":t[10]||(t[10]=r=>z.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:$a},null,40,ec),[[Ie,z.value]])])])):$("",!0),e("th",{class:F(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",L.value?"left-[50px]":"left-0"]),onClick:t[11]||(t[11]=r=>nt("name"))},[t[51]||(t[51]=K(" 名称 ",-1)),te.value==="name"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",tc))],2),t[57]||(t[57]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[12]||(t[12]=r=>nt("status"))},[t[52]||(t[52]=K(" 状态 ",-1)),te.value==="status"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",sc))]),e("th",{class:F(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":Lt.value,"cursor-not-allowed opacity-60":!Lt.value}]),title:Zs.value,onClick:t[13]||(t[13]=r=>nt("cost"))},[t[53]||(t[53]=K(" 费用 ",-1)),te.value==="cost"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):Lt.value?(o(),n("i",rc)):(o(),n("i",oc))],10,ac),t[59]||(t[59]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[60]||(t[60]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[61]||(t[61]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>nt("lastUsedAt"))},[t[54]||(t[54]=K(" 最后使用 ",-1)),te.value==="lastUsedAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",lc))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>nt("createdAt"))},[t[55]||(t[55]=K(" 创建时间 ",-1)),te.value==="createdAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",nc))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[16]||(t[16]=r=>nt("expiresAt"))},[t[56]||(t[56]=K(" 过期时间 ",-1)),te.value==="expiresAt"?(o(),n("i",{key:0,class:F(["fas",H.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(o(),n("i",ic))]),t[62]||(t[62]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n(re,{key:r.id},[e("tr",dc,[L.value?(o(),n("td",uc,[e("div",cc,[_(e("input",{"onUpdate:modelValue":t[17]||(t[17]=g=>I.value=g),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,gc),[[Ie,I.value]])])])):$("",!0),e("td",{class:F(["name-column sticky z-10 px-3 py-3",L.value?"left-[50px]":"left-0"])},[e("div",pc,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,mc),Y.value&&r.ownerDisplayName?(o(),n("div",xc,[t[63]||(t[63]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)])],2),e("td",yc,[e("div",fc,[oe.value&&ta(r)?(o(),n("div",bc,t[64]||(t[64]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):(o(),n(re,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",vc,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),K(" Claude ")],-1)),e("span",kc,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",wc,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Gemini ")],-1)),e("span",hc,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Ac,[t[67]||(t[67]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),K(" OpenAI ")],-1)),e("span",Cc,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",$c,[t[68]||(t[68]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),K(" Bedrock ")],-1)),e("span",Ic,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Kc,[t[69]||(t[69]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Droid ")],-1)),e("span",Lc,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Dc,t[70]||(t[70]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)]))):$("",!0)],64))])]),e("td",Tc,[e("div",_c,[(o(!0),n(re,null,ge(r.tags||[],g=>(o(),n("span",{key:g,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(g),1))),128)),!r.tags||r.tags.length===0?(o(),n("span",Sc,"无标签")):$("",!0)])]),e("td",Mc,[e("span",{class:F(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:F(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"禁用"),1)],2)]),e("td",Uc,[Ze(r.id)?(o(),n("div",Rc,t[71]||(t[71]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("span",Vc,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("span",Pc,"-"))]),e("td",Ec,[e("div",Oc,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",jc,t[72]||(t[72]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(o(),n("div",Gc,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zc,[e("div",qc,[t[73]||(t[73]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",Fc,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",Bc,t[74]||(t[74]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Wc,[Ze(r.id)?(o(),n("div",Nc,t[75]||(t[75]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("div",Hc,[e("span",Yc,u(Me(ve(r.id).tokens||0)),1)])):(o(),n("span",Qc,"-"))]),e("td",Jc,[Ze(r.id)?(o(),n("div",Xc,t[76]||(t[76]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ve(r.id)?(o(),n("div",Zc,[e("span",eg,u(Ae(vt)(ve(r.id).requests||0)),1),t[77]||(t[77]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(o(),n("span",tg,"-"))]),e("td",sg,[e("div",ag,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,rg)):(o(),n("span",og,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",lg,t[78]||(t[78]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",ig," ("+u(St(r))+") ",1))],8,ng)):(o(),n("span",dg," 暂无使用账号 "))])]),e("td",ug,u(new Date(r.createdAt).toLocaleDateString()),1),e("td",cg,[e("div",gg,[r.expirationMode==="activation"&&!r.isActivated?(o(),n("span",pg,[t[79]||(t[79]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),K(" 未激活 ( "+u(r.activationDays||(r.activationUnit==="hours"?24:30))+u(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(o(),n("span",mg,[pt(r.expiresAt)?(o(),n("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},t[80]||(t[80]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),K(" 已过期 ",-1)]),8,xg)):mt(r.expiresAt)?(o(),n("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},[t[81]||(t[81]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),K(" "+u(vs(r.expiresAt)),1)],8,yg)):(o(),n("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},u(vs(r.expiresAt)),9,fg))])):(o(),n("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:$e(g=>xt(r),["stop"])},t[82]||(t[82]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),K(" 永不过期 ",-1)]),8,bg))])]),e("td",vg,[e("div",kg,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:g=>Tt(r)},t[83]||(t[83]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,wg),r&&r.id?(o(),n("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:g=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[84]||(t[84]=e("span",{class:"ml-1"},"模型",-1))],8,hg)):$("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:g=>Nt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,Ag),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:g=>Ht(r)},t[86]||(t[86]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,Cg)):$("",!0),e("button",{class:F([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:g=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",Ig,u(r.isActive?"禁用":"激活"),1)],10,$g),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:g=>Qt(r.id)},t[87]||(t[87]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,Kg)]),e("div",Lg,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:g=>Tt(r)},t[88]||(t[88]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,Dg),r&&r.id?(o(),n("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:g=>ks(r.id)},[e("i",{class:F(["fas",C.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,Tg)):$("",!0),ne(nr,{actions:ka(r)},null,8,["actions"])])])]),r&&r.id&&C.value[r.id]?(o(),n("tr",_g,[e("td",Sg,[x.value[r.id]?$("",!0):(o(),n("div",Mg,t[89]||(t[89]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",Ug,[e("div",Rg,[t[90]||(t[90]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),K(" 模型使用分布 ")],-1)),e("div",Vg,[x.value[r.id]&&x.value[r.id].length>0?(o(),n("span",Pg,u(x.value[r.id].length)+" 个模型 ",1)):$("",!0),e("div",Eg,[e("div",Og,[(o(!0),n(re,null,ge(He(r.id).presetOptions,g=>(o(),n("button",{key:g.value,class:F(["rounded px-2 py-1 text-xs font-medium transition-colors",He(r.id).preset===g.value&&He(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:ke=>Cs(g.value,r.id)},u(g.label),11,jg))),128))]),ne(m,{class:"api-key-date-picker",clearable:!0,"default-time":p.value,"disabled-date":$s,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":He(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":g=>ca(r.id,g)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),x.value[r.id]&&x.value[r.id].length===0?(o(),n("div",Gg,[e("div",zg,[t[92]||(t[92]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[93]||(t[93]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:g=>ga(r.id)},t[91]||(t[91]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,qg)]),t[94]||(t[94]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",Fg,[(o(!0),n(re,null,ge(x.value[r.id],g=>(o(),n("div",{key:g.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Bg,[e("div",Wg,[e("span",Ng,u(g.model),1),e("span",Hg,u(g.requests)+" 次请求",1)])]),e("div",Yg,[e("div",Qg,[t[95]||(t[95]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),K(" 总Token: ")],-1)),e("span",Jg,u(Me(g.allTokens)),1)]),e("div",Xg,[t[96]||(t[96]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),K(" 费用: ")],-1)),e("span",Zg,u(sa(g)),1)]),e("div",ep,[e("div",tp,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),K(" 输入: ")],-1)),e("span",sp,u(Me(g.inputTokens)),1)]),e("div",ap,[t[98]||(t[98]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),K(" 输出: ")],-1)),e("span",rp,u(Me(g.outputTokens)),1)]),g.cacheCreateTokens>0?(o(),n("div",op,[t[99]||(t[99]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),K(" 缓存创建: ")],-1)),e("span",lp,u(Me(g.cacheCreateTokens)),1)])):$("",!0),g.cacheReadTokens>0?(o(),n("div",np,[t[100]||(t[100]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),K(" 缓存读取: ")],-1)),e("span",ip,u(Me(g.cacheReadTokens)),1)])):$("",!0)])]),e("div",dp,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:Rt({width:ws(g.allTokens,x.value[r.id])+"%"})},null,4)]),e("div",up,[e("span",cp,u(ws(g.allTokens,x.value[r.id]))+"% ",1)])]))),128))])):$("",!0),x.value[r.id]&&x.value[r.id].length>0?(o(),n("div",gp,[e("div",pp,[t[103]||(t[103]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),K(" 总计统计 ")],-1)),e("div",mp,[e("span",xp,[t[101]||(t[101]=K(" 总请求: ",-1)),e("span",yp,u(x.value[r.id].reduce((g,ke)=>g+ke.requests,0)),1)]),e("span",fp,[t[102]||(t[102]=K(" 总Token: ",-1)),e("span",bp,u(Me(x.value[r.id].reduce((g,ke)=>g+ke.allTokens,0))),1)])])])])):$("",!0)])])])):$("",!0)],64)}),128))])])])])),!X.value&&Ct.value.length>0?(o(),n("div",vp,[(o(!0),n(re,null,ge(lt.value,r=>{var w,q,B,O,me,fe;return o(),n("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",kp,[e("div",wp,[L.value?_((o(),n("input",{key:0,"onUpdate:modelValue":t[18]||(t[18]=g=>I.value=g),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:je},null,40,hp)),[[Ie,I.value]]):$("",!0),e("div",null,[e("h4",{class:"cursor-pointer text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ap),e("p",Cp,u(r.id),1)])]),e("span",{class:F(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:F(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),K(" "+u(r.isActive?"活跃":"已停用"),1)],2)]),e("div",$p,[r.claudeAccountId||r.claudeConsoleAccountId?(o(),n("div",Ip,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),K(" Claude ")],-1)),e("span",Kp,u(ms(r)),1)])):$("",!0),r.geminiAccountId?(o(),n("div",Lp,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),K(" Gemini ")],-1)),e("span",Dp,u(xs(r)),1)])):$("",!0),r.openaiAccountId?(o(),n("div",Tp,[t[106]||(t[106]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),K(" OpenAI ")],-1)),e("span",_p,u(ys(r)),1)])):$("",!0),r.bedrockAccountId?(o(),n("div",Sp,[t[107]||(t[107]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),K(" Bedrock ")],-1)),e("span",Mp,u(fs(r)),1)])):$("",!0),r.droidAccountId?(o(),n("div",Up,[t[108]||(t[108]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),K(" Droid ")],-1)),e("span",Rp,u(bs(r)),1)])):$("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(o(),n("div",Vp,t[109]||(t[109]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 使用共享池 ",-1)]))):$("",!0),Y.value&&r.ownerDisplayName?(o(),n("div",Pp,[t[110]||(t[110]=e("i",{class:"fas fa-user mr-1"},null,-1)),K(" "+u(r.ownerDisplayName),1)])):$("",!0)]),e("div",Ep,[e("div",Op,[e("div",jp,[e("span",Gp,u(v.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:g=>Tt(r)},t[111]||(t[111]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),K("详情 ",-1)]),8,zp)]),e("div",qp,[e("div",null,[Ze(r.id)?(o(),n("div",Fp)):ve(r.id)?(o(),n("p",Bp,u(Ae(vt)(ve(r.id).requests||0))+" 次 ",1)):(o(),n("p",Wp,"-")),t[112]||(t[112]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[Ze(r.id)?(o(),n("div",Np)):ve(r.id)?(o(),n("p",Hp,u(ve(r.id).formattedCost||"$0.00"),1)):(o(),n("p",Yp,"-")),t[113]||(t[113]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Qp,[e("div",Jp,[t[114]||(t[114]=e("span",null,"最后使用",-1)),e("span",Xp,u(r.lastUsedAt?Jt(r.lastUsedAt):"从未使用"),1)]),e("div",Zp,[t[116]||(t[116]=e("span",null,"账号",-1)),r.lastUsedAt&&It(r.id)?(o(),n("span",em,t[115]||(t[115]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",sm," ("+u(St(r))+") ",1))],8,tm)):(o(),n("span",am,"暂无使用账号"))])])]),e("div",rm,[Ze(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(o(),n("div",om,t[117]||(t[117]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(o(),n(re,{key:1},[r.dailyCostLimit>0?(o(),he(Fe,{key:0,current:((w=ve(r.id))==null?void 0:w.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(o(),he(Fe,{key:1,current:((q=ve(r.id))==null?void 0:q.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(o(),n("div",lm,[ne(Fe,{current:((B=ve(r.id))==null?void 0:B.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",nm,[e("div",im,[t[118]||(t[118]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",dm,u(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:F(["font-bold",(((O=ve(r.id))==null?void 0:O.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},u((((me=ve(r.id))==null?void 0:me.windowRemainingSeconds)||0)>0?Ks(((fe=ve(r.id))==null?void 0:fe.windowRemainingSeconds)||0):"未激活"),3)])])):(o(),n("div",um,t[119]||(t[119]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",cm,[e("div",gm,[t[120]||(t[120]=e("span",null,"创建时间",-1)),e("span",null,u(Ae(Pe)(r.createdAt)),1)]),e("div",pm,[t[122]||(t[122]=e("span",null,"过期时间",-1)),e("div",mm,[e("span",{class:F(mt(r.expiresAt)?"font-semibold text-orange-600":"")},u(r.expiresAt?Ae(Pe)(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:$e(g=>xt(r),["stop"])},t[121]||(t[121]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,xm)])])]),r.tags&&r.tags.length>0?(o(),n("div",ym,[(o(!0),n(re,null,ge(r.tags,g=>(o(),n("span",{key:g,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},u(g),1))),128))])):$("",!0),e("div",fm,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:g=>Tt(r)},t[123]||(t[123]=[e("i",{class:"fas fa-chart-line"},null,-1),K(" 查看详情 ",-1)]),8,bm),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:g=>Nt(r)},t[124]||(t[124]=[e("i",{class:"fas fa-edit mr-1"},null,-1),K(" 编辑 ",-1)]),8,vm),r.expiresAt&&(pt(r.expiresAt)||mt(r.expiresAt))?(o(),n("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:g=>Ht(r)},t[125]||(t[125]=[e("i",{class:"fas fa-clock mr-1"},null,-1),K(" 续期 ",-1)]),8,km)):$("",!0),e("button",{class:F([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:g=>Yt(r)},[e("i",{class:F(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),K(" "+u(r.isActive?"禁用":"激活"),1)],10,wm),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:g=>Qt(r.id)},t[126]||(t[126]=[e("i",{class:"fas fa-trash"},null,-1)]),8,hm)])])}),128))])):$("",!0),Ct.value.length>0?(o(),n("div",Am,[e("div",Cm,[e("span",$m," 共 "+u(Ct.value.length)+" 条记录 ",1),e("div",Im,[t[127]||(t[127]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),_(e("select",{"onUpdate:modelValue":t[19]||(t[19]=r=>ce.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(o(),n(re,null,ge(Ve,r=>e("option",{key:r,value:r},u(r),9,Km)),64))],512),[[kt,ce.value]]),t[128]||(t[128]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",Lm,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ye.value===1,onClick:t[20]||(t[20]=r=>ye.value--)},t[129]||(t[129]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,Dm),e("div",Tm,[cs.value?(o(),n("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ye.value=1)}," 1 ")):$("",!0),Ns.value?(o(),n("span",_m,"...")):$("",!0),(o(!0),n(re,null,ge(ct.value,r=>(o(),n("button",{key:r,class:F(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ye.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:w=>ye.value=r},u(r),11,Sm))),128)),Hs.value?(o(),n("span",Mm,"...")):$("",!0),gs.value?(o(),n("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[22]||(t[22]=r=>ye.value=Xe.value)},u(Xe.value),1)):$("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ye.value===Xe.value||Xe.value===0,onClick:t[23]||(t[23]=r=>ye.value++)},t[130]||(t[130]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,Um)])])):$("",!0)])):se.value==="deleted"?(o(),n("div",Rm,[ee.value?(o(),n("div",Vm,t[131]||(t[131]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):G.value.length===0?(o(),n("div",Pm,t[132]||(t[132]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(o(),n("div",Em,[e("div",Om,[G.value.length>0?(o(),n("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:Aa},[t[133]||(t[133]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),K(" 清空所有已删除 ("+u(G.value.length)+") ",1)])):$("",!0)]),e("div",jm,[e("div",Gm,[e("table",zm,[e("thead",qm,[e("tr",null,[t[134]||(t[134]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),Y.value?(o(),n("th",Fm," 创建者 ")):$("",!0),t[136]||(t[136]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[140]||(t[140]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[141]||(t[141]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[142]||(t[142]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[143]||(t[143]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Bm,[(o(!0),n(re,null,ge(G.value,r=>{var w,q,B,O,me,fe;return o(),n("tr",{key:r.id,class:"table-row"},[e("td",Wm,[e("div",Nm,[t[144]||(t[144]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Hm,[e("div",{class:"cursor-pointer truncate text-sm font-semibold text-gray-900 hover:text-blue-600 dark:text-gray-100 dark:hover:text-blue-400",title:"点击复制",onClick:$e(g=>Ae(rs)(r.name),["stop"])},u(r.name),9,Ym)])])]),e("td",Qm,[e("div",Jm,[r.claudeAccountId?(o(),n("div",Xm,t[145]||(t[145]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),K(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(o(),n("div",Zm,t[146]||(t[146]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),K(" Claude Console ")],-1)]))):r.geminiAccountId?(o(),n("div",ex,t[147]||(t[147]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),K(" Gemini ")],-1)]))):(o(),n("div",tx,t[148]||(t[148]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),K(" 共享池 ",-1)])))])]),Y.value?(o(),n("td",sx,[e("div",ax,[r.createdBy==="admin"?(o(),n("span",rx,t[149]||(t[149]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),K(" 管理员 ",-1)]))):r.userUsername?(o(),n("span",ox,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.userUsername),1)])):(o(),n("span",lx,t[151]||(t[151]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),K(" 未知 ",-1)])))])])):$("",!0),e("td",nx,u(Ae(Pe)(r.createdAt)),1),e("td",ix,[e("div",dx,[r.deletedByType==="admin"?(o(),n("span",ux,[t[152]||(t[152]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):r.deletedByType==="user"?(o(),n("span",cx,[t[153]||(t[153]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)])):(o(),n("span",gx,[t[154]||(t[154]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),K(" "+u(r.deletedBy),1)]))])]),e("td",px,u(Ae(Pe)(r.deletedAt)),1),e("td",mx,[e("span",xx," $"+u((((q=(w=r.usage)==null?void 0:w.total)==null?void 0:q.cost)||0).toFixed(2)),1)]),e("td",yx,[e("span",fx,u(Me(((O=(B=r.usage)==null?void 0:B.total)==null?void 0:O.tokens)||0)),1)]),e("td",bx,[e("div",vx,[e("span",kx,u(Ae(vt)(((fe=(me=r.usage)==null?void 0:me.total)==null?void 0:fe.requests)||0)),1),t[155]||(t[155]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",wx,[e("div",hx,[r.lastUsedAt?(o(),n("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},u(Jt(r.lastUsedAt)),9,Ax)):(o(),n("span",Cx,"从未使用")),r.lastUsedAt&&It(r.id)?(o(),n("span",$x,t[156]||(t[156]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),K(" 加载中... ",-1)]))):Zt(r)?(o(),n("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:yt(r)},[K(u(ts(r))+" ",1),ss(r)?$("",!0):(o(),n("span",Kx," ("+u(St(r))+") ",1))],8,Ix)):(o(),n("span",Lx," 暂无使用账号 "))])]),e("td",Dx,[e("div",Tx,[r.canRestore?(o(),n("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:g=>wa(r.id)},t[157]||(t[157]=[e("i",{class:"fas fa-undo mr-1"},null,-1),K(" 恢复 ",-1)]),8,_x)):$("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:g=>ha(r.id)},t[158]||(t[158]=[e("i",{class:"fas fa-times mr-1"},null,-1),K(" 彻底删除 ",-1)]),8,Sx)])])])}),128))])])])])]))])):$("",!0)])]),ze.value?(o(),he(hl,{key:0,accounts:b.value,onBatchSuccess:xa,onClose:t[24]||(t[24]=r=>ze.value=!1),onSuccess:ma},null,8,["accounts"])):$("",!0),We.value?(o(),he(Tn,{key:1,accounts:b.value,"api-key":ns.value,onClose:t[25]||(t[25]=r=>We.value=!1),onSuccess:ba},null,8,["accounts","api-key"])):$("",!0),Ne.value?(o(),he(Wn,{key:2,"api-key":is.value,onClose:t[26]||(t[26]=r=>Ne.value=!1),onSuccess:va},null,8,["api-key"])):$("",!0),pe.value?(o(),he(li,{key:3,"api-key":ds.value,onClose:t[27]||(t[27]=r=>pe.value=!1)},null,8,["api-key"])):$("",!0),Ee.value?(o(),he(_i,{key:4,"api-keys":us.value,onClose:t[28]||(t[28]=r=>Ee.value=!1)},null,8,["api-keys"])):$("",!0),ht.value?(o(),he(Cd,{key:5,accounts:b.value,"selected-keys":I.value,onClose:t[29]||(t[29]=r=>ht.value=!1),onSuccess:fa},null,8,["accounts","selected-keys"])):$("",!0),ne(Qd,{ref_key:"expiryEditModalRef",ref:Ce,"api-key":Te.value||{id:null,expiresAt:null,name:""},show:!!Te.value,onClose:Is,onSave:Ia},null,8,["api-key","show"]),ne(J0,{"api-key":i.value||{},show:N.value,onClose:t[30]||(t[30]=r=>N.value=!1),onOpenTimeline:Ka},null,8,["api-key","show"]),ne(bu,{show:Wt.value,onClose:t[31]||(t[31]=r=>Wt.value=!1),onUpdated:Ke},null,8,["show"]),ne(at,{"cancel-text":rt.value.cancelText,"confirm-text":rt.value.confirmText,message:rt.value.message,show:At.value,title:rt.value.title,type:rt.value.type,onCancel:Ws,onConfirm:Bs},null,8,["cancel-text","confirm-text","message","show","title","type"])])}}},Gx=st(Mx,[["__scopeId","data-v-4ed7ad31"]]);export{Gx as default};
diff --git a/web/admin-spa/dist/assets/ApiKeysView-M9vmNqGR.css b/web/admin-spa/dist/assets/ApiKeysView-M9vmNqGR.css
new file mode 100644
index 00000000..2949c381
--- /dev/null
+++ b/web/admin-spa/dist/assets/ApiKeysView-M9vmNqGR.css
@@ -0,0 +1 @@
+.custom-scrollbar[data-v-15b77cd6]{scrollbar-width:thin;scrollbar-color:#cbd5e0 #f7fafc}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-track{background:#f7fafc}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-thumb{background-color:#cbd5e0;border-radius:3px}.custom-scrollbar[data-v-15b77cd6]::-webkit-scrollbar-thumb:hover{background-color:#a0aec0}pre[data-v-42e73733],pre[data-v-fa69edb5]{white-space:pre-wrap;word-wrap:break-word}@keyframes fadeIn-20d23095{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-20d23095]{animation:fadeIn-20d23095 .2s ease-out}.loading-spinner[data-v-20d23095]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-20d23095 .8s linear infinite;display:inline-block}@keyframes spin-20d23095{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shine-1393272b{0%{transform:translate(-100%)}to{transform:translate(200%)}}.tabular-nums[data-v-1393272b]{font-variant-numeric:tabular-nums}.modal-enter-active[data-v-8e455166],.modal-leave-active[data-v-8e455166]{transition:opacity .2s ease}.modal-enter-from[data-v-8e455166],.modal-leave-to[data-v-8e455166]{opacity:0}.tab-content[data-v-4ed7ad31]{min-height:calc(100vh - 300px)}.table-wrapper[data-v-4ed7ad31]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05);width:100%;position:relative}.dark .table-wrapper[data-v-4ed7ad31]{border-color:#ffffff1a}.table-container[data-v-4ed7ad31]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-4ed7ad31]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-4ed7ad31]::-webkit-scrollbar{height:8px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-track{background:var(--bg-gradient-mid)}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb{background:var(--bg-gradient-end)}.dark .table-container[data-v-4ed7ad31]::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.table-container tbody tr:hover>td[data-v-4ed7ad31]{background-color:rgba(var(--primary-rgb),.06)!important}.dark .table-container tbody tr:hover>td[data-v-4ed7ad31]{background-color:rgba(var(--primary-rgb),.16)!important}.table-container tbody tr:nth-child(odd)>td[data-v-4ed7ad31]{background-color:#fff}.table-container tbody tr:nth-child(2n)>td[data-v-4ed7ad31]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd)>td[data-v-4ed7ad31]{background-color:var(--bg-gradient-start)}.dark .table-container tbody tr:nth-child(2n)>td[data-v-4ed7ad31]{background-color:var(--bg-gradient-mid)}.operations-column[data-v-4ed7ad31]{position:sticky;right:0;z-index:12}.table-container thead .operations-column[data-v-4ed7ad31]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-4ed7ad31]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .operations-column[data-v-4ed7ad31]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-4ed7ad31]{box-shadow:-8px 0 12px -8px #1e293b73}.checkbox-column[data-v-4ed7ad31],.name-column[data-v-4ed7ad31]{position:sticky;z-index:12}.table-container thead .checkbox-column[data-v-4ed7ad31],.table-container thead .name-column[data-v-4ed7ad31]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-4ed7ad31],.dark .table-container thead .name-column[data-v-4ed7ad31]{background:linear-gradient(to bottom,var(--bg-gradient-mid),var(--bg-gradient-start))}.table-container tbody .name-column[data-v-4ed7ad31]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-4ed7ad31]{box-shadow:8px 0 12px -8px #1e293b73}.loading-spinner[data-v-4ed7ad31]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-4ed7ad31 1s linear infinite}@keyframes spin-4ed7ad31{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.api-key-date-picker[data-v-4ed7ad31] .el-input__inner{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.api-key-date-picker[data-v-4ed7ad31] .el-input__inner:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.api-key-date-picker[data-v-4ed7ad31] .el-range-separator{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper{height:38px;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.custom-date-range-picker[data-v-4ed7ad31] .el-input__wrapper:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__inner{height:100%;padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__inner:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-4ed7ad31] .el-input__prefix,.custom-date-range-picker[data-v-4ed7ad31] .el-input__suffix{display:flex;align-items:center}.custom-date-range-picker[data-v-4ed7ad31] .el-range-separator{margin-left:.5rem;margin-right:.5rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}
diff --git a/web/admin-spa/dist/assets/ApiKeysView-PDywvTD3.js b/web/admin-spa/dist/assets/ApiKeysView-PDywvTD3.js
deleted file mode 100644
index 114375f4..00000000
--- a/web/admin-spa/dist/assets/ApiKeysView-PDywvTD3.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import{E as ua}from"./element-plus-BUfCkBQO.js";import{aP as ws,r as I,c as R,q as ut,V as hs,o as Te,x as d,y as n,z as e,I as we,C as O,P as c,R as ae,J as ca,L as w,B as $t,K as D,aq as te,Q as Z,ac as oe,T as ga,a5 as Ee,D as pa,_ as Ye,Y as _e,an as Ie,O as h,aa as it,aV as dt,al as $e,f as lt,u as nt,aU as ma}from"./vue-vendor-R8HMg95E.js";import{c as E,_ as Se,s as V,u as xa}from"./index-B3t2NHq9.js";import{Q as Fe}from"./vendor-Dr8jvgFu.js";import{_ as ya}from"./WindowCountdown-DF7xS2EZ.js";import{C as Ct,_ as fa}from"./ActionDropdown-4ngn0-GS.js";const zt=ws("clients",{state:()=>({supportedClients:[],loading:!1,error:null}),actions:{async loadSupportedClients(){if(this.supportedClients.length>0)return this.supportedClients;this.loading=!0,this.error=null;try{const k=await E.get("/admin/supported-clients");return k.success?this.supportedClients=k.data||[]:(this.error=k.message||"加载支持的客户端失败",console.error("Failed to load supported clients:",this.error)),this.supportedClients}catch(k){return this.error=k.message||"加载支持的客户端失败",console.error("Error loading supported clients:",k),[]}finally{this.loading=!1}}}}),qt=ws("apiKeys",()=>{const k=I([]),N=I(!1),g=I(null),F=I("all"),j=I(""),L=I("asc"),C=async()=>{N.value=!0,g.value=null;try{const _=await E.get("/admin/api-keys");if(_.success)k.value=_.data||[];else throw new Error(_.message||"获取API Keys失败")}catch(_){throw g.value=_.message,_}finally{N.value=!1}};return{apiKeys:k,loading:N,error:g,statsTimeRange:F,sortBy:j,sortOrder:L,fetchApiKeys:C,createApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.post("/admin/api-keys",_);if(q.success)return await C(),q.data;throw new Error(q.message||"创建API Key失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},updateApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await C(),K;throw new Error(K.message||"更新API Key失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},toggleApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.put(`/admin/api-keys/${_}/toggle`);if(q.success)return await C(),q;throw new Error(q.message||"切换状态失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},renewApiKey:async(_,q)=>{N.value=!0,g.value=null;try{const K=await E.put(`/admin/api-keys/${_}`,q);if(K.success)return await C(),K;throw new Error(K.message||"续期失败")}catch(K){throw g.value=K.message,K}finally{N.value=!1}},deleteApiKey:async _=>{N.value=!0,g.value=null;try{const q=await E.delete(`/admin/api-keys/${_}`);if(q.success)return await C(),q;throw new Error(q.message||"删除失败")}catch(q){throw g.value=q.message,q}finally{N.value=!1}},fetchApiKeyStats:async(_,q="all")=>{try{const K=await E.get(`/admin/api-keys/${_}/stats`,{params:{timeRange:q}});if(K.success)return K.stats;throw new Error(K.message||"获取统计失败")}catch(K){return console.error("获取API Key统计失败:",K),null}},fetchTags:async()=>{try{const _=await E.get("/admin/api-keys/tags");if(_.success)return _.data||[];throw new Error(_.message||"获取标签失败")}catch(_){return console.error("获取标签失败:",_),[]}},sortApiKeys:_=>{j.value===_?L.value=L.value==="asc"?"desc":"asc":(j.value=_,L.value="asc")},reset:()=>{k.value=[],N.value=!1,g.value=null,F.value="all",j.value="",L.value="asc"}}}),ba={class:"flex-shrink-0 border-b border-gray-200 p-3 dark:border-gray-600"},va={class:"relative"},ka={class:"custom-scrollbar flex-1 overflow-y-auto"},wa={key:0,class:"border-b border-gray-200 dark:border-gray-600"},ha=["onClick"],Aa={class:"text-gray-700 dark:text-gray-300"},Ca={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},$a={class:"text-gray-700 dark:text-gray-300"},Ia={key:1},Ka=["onClick"],La={class:"flex items-center justify-between"},Da={class:"text-gray-700 dark:text-gray-300"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={key:2},Sa={class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"},Ua=["onClick"],Ra={class:"flex items-center justify-between"},Ma={class:"text-gray-700 dark:text-gray-300"},Pa={class:"text-xs text-gray-400 dark:text-gray-500"},Va={key:3},Ea=["onClick"],Oa={class:"flex items-center justify-between"},ja={class:"text-gray-700 dark:text-gray-300"},Ga={class:"text-xs text-gray-400 dark:text-gray-500"},za={key:4},qa=["onClick"],Fa={class:"flex items-center justify-between"},Wa={class:"text-gray-700 dark:text-gray-300"},Ba={class:"text-xs text-gray-400 dark:text-gray-500"},Na={key:5},Ha=["onClick"],Ya={class:"flex items-center justify-between"},Qa={class:"text-gray-700 dark:text-gray-300"},Ja={class:"text-xs text-gray-400 dark:text-gray-500"},Xa={key:6,class:"px-4 py-8 text-center text-gray-500 dark:text-gray-400"},Za={__name:"AccountSelector",props:{modelValue:{type:String,default:""},platform:{type:String,required:!0,validator:k=>["claude","gemini","openai","bedrock","droid"].includes(k)},accounts:{type:Array,default:()=>[]},groups:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},placeholder:{type:String,default:"请选择账号"},defaultOptionText:{type:String,default:"使用共享账号池"},specialOptions:{type:Array,default:()=>[]}},emits:["update:modelValue"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=I(""),C=I(null),W=I(null),S=I({}),Q=I(null),H=I(""),B=R(()=>g.specialOptions||[]),f=R(()=>{const p=B.value.find(u=>u.value===g.modelValue);if(p)return p.label;if(!g.modelValue)return g.defaultOptionText;if(g.modelValue.startsWith("group:")){const u=g.modelValue.substring(6),i=g.groups.find(y=>y.id===u);return i?`${i.name} (${i.memberCount||0} 个成员)`:""}if(g.modelValue.startsWith("console:")){const u=g.modelValue.substring(8),i=g.accounts.find(y=>y.id===u&&y.platform==="claude-console");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("responses:")){const u=g.modelValue.substring(10),i=g.accounts.find(y=>y.id===u&&y.platform==="openai-responses");return i?`${i.name} (${x(i)})`:""}if(g.modelValue.startsWith("api:")){const u=g.modelValue.substring(4),i=g.accounts.find(y=>y.id===u&&y.platform==="gemini-api");return i?`${i.name} (${x(i)})`:""}const A=g.accounts.find(u=>u.id===g.modelValue);return A?`${A.name} (${x(A)})`:""}),x=p=>{if(!p)return"未知";if(!(p.isActive==="true"||p.isActive===!0))switch(p.status){case"unauthorized":return"未授权";case"error":return"Token错误";case"created":return"待验证";case"rate_limited":return"限流中";case"quota_exceeded":return"额度超限";default:return"异常"}return p.status==="rate_limited"?"限流中":"正常"},a=R(()=>[...g.accounts].sort((p,A)=>{const u=new Date(p.createdAt||0);return new Date(A.createdAt||0)-u})),z=R(()=>{let p=g.groups.filter(A=>A.platform?A.platform===g.platform:!0);if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),_=R(()=>{let p=[];if(g.platform==="claude"?p=a.value.filter(A=>A.platform==="claude-oauth"):g.platform==="openai"?p=a.value.filter(A=>A.platform==="openai"):g.platform==="droid"?p=a.value.filter(A=>A.platform==="droid"):g.platform==="gemini"?p=a.value.filter(A=>A.platform==="gemini"):p=a.value.filter(A=>!["claude-oauth","claude-console","openai-responses","gemini-api"].includes(A.platform)),L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),q=R(()=>{if(g.platform!=="claude")return[];let p=a.value.filter(A=>A.platform==="claude-console");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),K=R(()=>{if(g.platform!=="openai")return[];let p=a.value.filter(A=>A.platform==="openai-responses");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),$=R(()=>{if(g.platform!=="gemini")return[];let p=a.value.filter(A=>A.platform==="gemini-api");if(L.value){const A=L.value.toLowerCase();p=p.filter(u=>u.name.toLowerCase().includes(A))}return p}),X=R(()=>z.value.length>0||_.value.length>0||q.value.length>0||K.value.length>0||$.value.length>0),le=p=>{if(!p)return"";const A=new Date(p),i=(new Date-A)/(1e3*60*60);return i<24?"今天创建":i<48?"昨天创建":i<168?`${Math.floor(i/24)} 天前`:A.toLocaleDateString("zh-CN",{month:"2-digit",day:"2-digit"})},ue=()=>{if(!j.value||!W.value||!Q.value)return;const p=Q.value;if(!p)return;const A=p.getBoundingClientRect(),u=window.innerHeight,i=window.innerWidth,y=u-A.bottom,ie=A.top,me=8,xe=y-me,he=ie-me;let ce=!1,Ae=xe;H.value==="above"&&he>=150?(ce=!0,Ae=he):H.value==="below"&&xe>=150?(ce=!1,Ae=xe):he>xe&&xe<200&&(ce=!0,Ae=he),H.value=ce?"above":"below";let Y=A.left;const J=A.width;Y+J>i-me&&(Y=i-J-me),Y{if(!j.value&&Q.value){const p=Q.value.getBoundingClientRect(),u=window.innerHeight-p.bottom,i=8;S.value={position:"fixed",left:`${p.left}px`,width:`${p.width}px`,maxHeight:`${Math.min(u-i,400)}px`,top:`${p.bottom}px`}}j.value=!j.value,j.value&&pa(()=>{var p;ue(),(p=C.value)==null||p.focus()})},pe=p=>{F("update:modelValue",p||""),j.value=!1,L.value=""},Ke=()=>{},T=()=>{var p;L.value="",(p=C.value)==null||p.focus()},l=p=>{var A,u;!((A=Q.value)!=null&&A.contains(p.target))&&!((u=W.value)!=null&&u.contains(p.target))&&(j.value=!1)},o=()=>{j.value&&ue()};return ut(()=>{document.addEventListener("click",l),window.addEventListener("scroll",o,!0),window.addEventListener("resize",ue)}),hs(()=>{document.removeEventListener("click",l),window.removeEventListener("scroll",o,!0),window.removeEventListener("resize",ue)}),Te(j,p=>{p||(L.value="",H.value="")}),(p,A)=>(n(),d("div",{ref_key:"triggerRef",ref:Q,class:"relative"},[e("div",{class:O(["form-input flex w-full cursor-pointer items-center justify-between border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"opacity-50":k.disabled}]),onClick:A[0]||(A[0]=u=>!k.disabled&&fe())},[e("span",{class:O(k.modelValue?"text-gray-900 dark:text-gray-200":"text-gray-500 dark:text-gray-400")},c(f.value),3),e("i",{class:O(["fas fa-chevron-down text-gray-400 transition-transform duration-200 dark:text-gray-500",{"rotate-180":j.value}])},null,2)],2),(n(),we(Ee,{to:"body"},[ae(ga,{"enter-active-class":"transition ease-out duration-100","enter-from-class":"transform opacity-0 scale-95","enter-to-class":"transform opacity-100 scale-100","leave-active-class":"transition ease-in duration-75","leave-from-class":"transform opacity-100 scale-100","leave-to-class":"transform opacity-0 scale-95"},{default:ca(()=>[j.value?(n(),d("div",{key:0,ref_key:"dropdownRef",ref:W,class:"absolute z-50 flex flex-col rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:$t(S.value)},[e("div",ba,[e("div",va,[D(e("input",{ref_key:"searchInput",ref:C,"onUpdate:modelValue":A[1]||(A[1]=u=>L.value=u),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"搜索账号名称...",style:{"padding-left":"40px","padding-right":"36px"},type:"text",onInput:Ke},null,544),[[te,L.value]]),A[4]||(A[4]=e("i",{class:"fas fa-search pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-gray-400 dark:text-gray-500"},null,-1)),L.value?(n(),d("button",{key:0,class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:T},A[3]||(A[3]=[e("i",{class:"fas fa-times text-sm"},null,-1)]))):w("",!0)])]),e("div",ka,[B.value.length>0?(n(),d("div",wa,[(n(!0),d(Z,null,oe(B.value,u=>(n(),d("div",{key:`special-${u.value}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.value}]),onClick:i=>pe(u.value)},[e("span",Aa,c(u.label),1),u.description?(n(),d("span",Ca,c(u.description),1)):w("",!0)],10,ha))),128))])):w("",!0),e("div",{class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":!k.modelValue}]),onClick:A[2]||(A[2]=u=>pe(null))},[e("span",$a,c(k.defaultOptionText),1)],2),z.value.length>0?(n(),d("div",Ia,[A[5]||(A[5]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," 调度分组 ",-1)),(n(!0),d(Z,null,oe(z.value,u=>(n(),d("div",{key:`group:${u.id}`,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`group:${u.id}`}]),onClick:i=>pe(`group:${u.id}`)},[e("div",La,[e("span",Da,c(u.name),1),e("span",_a,c(u.memberCount||0)+" 个成员",1)])],10,Ka))),128))])):w("",!0),_.value.length>0?(n(),d("div",Ta,[e("div",Sa,c(k.platform==="claude"?"Claude OAuth 专属账号":k.platform==="openai"?"OpenAI 专属账号":k.platform==="droid"?"Droid 专属账号":k.platform==="gemini"?"Gemini OAuth 专属账号":"OAuth 专属账号"),1),(n(!0),d(Z,null,oe(_.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===u.id}]),onClick:i=>pe(u.id)},[e("div",Ra,[e("div",null,[e("span",Ma,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Pa,c(le(u.createdAt)),1)])],10,Ua))),128))])):w("",!0),k.platform==="claude"&&q.value.length>0?(n(),d("div",Va,[A[6]||(A[6]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Claude Console 专属账号 ",-1)),(n(!0),d(Z,null,oe(q.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`console:${u.id}`}]),onClick:i=>pe(`console:${u.id}`)},[e("div",Oa,[e("div",null,[e("span",ja,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="unauthorized"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ga,c(le(u.createdAt)),1)])],10,Ea))),128))])):w("",!0),k.platform==="openai"&&K.value.length>0?(n(),d("div",za,[A[7]||(A[7]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," OpenAI-Responses 专属账号 ",-1)),(n(!0),d(Z,null,oe(K.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`responses:${u.id}`}]),onClick:i=>pe(`responses:${u.id}`)},[e("div",Fa,[e("div",null,[e("span",Wa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ba,c(le(u.createdAt)),1)])],10,qa))),128))])):w("",!0),k.platform==="gemini"&&$.value.length>0?(n(),d("div",Na,[A[8]||(A[8]=e("div",{class:"bg-gray-50 px-4 py-2 text-xs font-semibold text-gray-500 dark:bg-gray-700 dark:text-gray-400"}," Gemini-API 专属账号 ",-1)),(n(!0),d(Z,null,oe($.value,u=>(n(),d("div",{key:u.id,class:O(["cursor-pointer px-4 py-2 transition-colors hover:bg-gray-50 dark:hover:bg-gray-700",{"bg-blue-50 dark:bg-blue-900/20":k.modelValue===`api:${u.id}`}]),onClick:i=>pe(`api:${u.id}`)},[e("div",Ya,[e("div",null,[e("span",Qa,c(u.name),1),e("span",{class:O(["ml-2 rounded-full px-2 py-0.5 text-xs",u.isActive==="true"||u.isActive===!0?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400":u.status==="rate_limited"?"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"])},c(x(u)),3)]),e("span",Ja,c(le(u.createdAt)),1)])],10,Ha))),128))])):w("",!0),L.value&&!X.value?(n(),d("div",Xa,A[9]||(A[9]=[e("i",{class:"fas fa-search mb-2 text-2xl"},null,-1),e("p",{class:"text-sm"},"没有找到匹配的账号",-1)]))):w("",!0)])],4)):w("",!0)]),_:1})]))],512))}},Le=Se(Za,[["__scopeId","data-v-32c162ec"]]),er={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},tr={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6"},sr={class:"mb-4 flex items-center justify-between"},ar={class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-3 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20 sm:p-4"},rr={class:"flex items-center gap-3 sm:gap-4"},or={class:"flex cursor-pointer items-center"},lr={class:"flex cursor-pointer items-center"},nr={key:0,class:"mt-3"},ir={class:"flex items-center gap-4"},dr={class:"flex-1"},ur={class:"flex items-center gap-2"},cr={class:"mt-2 flex items-start text-xs text-amber-600 dark:text-amber-400"},gr=["placeholder"],pr={key:0,class:"mt-1 text-xs text-red-500 dark:text-red-400"},mr={class:"space-y-4"},xr={key:0},yr={class:"flex flex-wrap gap-2"},fr=["onClick"],br={key:1},vr={class:"flex flex-wrap gap-2"},kr=["onClick"],wr={class:"flex gap-2"},hr=["onKeypress"],Ar={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},Cr={class:"space-y-2"},$r={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Ir={class:"space-y-2"},Kr={class:"flex gap-2"},Lr={class:"space-y-2"},Dr={class:"flex gap-2"},_r={class:"space-y-2"},Tr={class:"flex gap-2"},Sr={class:"mb-3 rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800"},Ur={class:"flex items-center gap-4"},Rr={class:"flex cursor-pointer items-center"},Mr={class:"flex cursor-pointer items-center"},Pr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Vr={key:0},Er={key:1},Or={key:0},jr={key:0,class:"mt-3"},Gr=["min"],zr={key:1,class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},qr={key:1},Fr={class:"flex items-center gap-2"},Wr=["max","placeholder"],Br={class:"mt-2 flex flex-wrap gap-2"},Nr=["onClick"],Hr={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Yr={class:"flex flex-wrap gap-4"},Qr={class:"flex cursor-pointer items-center"},Jr={class:"flex cursor-pointer items-center"},Xr={class:"flex cursor-pointer items-center"},Zr={class:"flex cursor-pointer items-center"},eo={class:"mb-2 flex items-center justify-between"},to=["disabled"],so={class:"grid grid-cols-1 gap-3"},ao={class:"mb-2 flex items-center"},ro={key:0,class:"space-y-3"},oo={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2"},lo=["onClick"],no={key:0,class:"text-sm text-gray-400"},io={class:"space-y-3"},uo={class:"flex flex-wrap gap-2"},co=["onClick"],go={key:0,class:"text-sm italic text-gray-400"},po={class:"flex gap-2"},mo=["onKeydown"],xo={class:"mb-2 flex items-center"},yo={key:0,class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-700 dark:bg-green-900/20"},fo={class:"space-y-1"},bo=["id","value"],vo=["for"],ko={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},wo={class:"block text-xs text-gray-500 dark:text-gray-400"},ho={class:"flex gap-3 pt-2"},Ao=["disabled"],Co={key:0,class:"loading-spinner mr-2"},$o={key:1,class:"fas fa-plus mr-2"},Io={__name:"CreateApiKeyModal",props:{accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success","batch-success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),C=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I({name:""}),H=I(""),B=I([]),f=R(()=>B.value.filter(u=>!a.tags.includes(u))),x=I([]),a=Ye({createType:"single",batchCount:10,name:"",description:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",expireDuration:"",customExpireDate:"",expiresAt:null,expirationMode:"fixed",activationDays:30,activationUnit:"days",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[]});ut(async()=>{if(x.value=await j.loadSupportedClients(),B.value=await L.fetchTags(),g.accounts){const u=(g.accounts.gemini||[]).map(y=>({...y,platform:y.platform||"gemini"})),i=[];g.accounts.openai&&g.accounts.openai.forEach(y=>{i.push({...y,platform:y.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(y=>{i.push({...y,platform:y.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:u,openai:i,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(y=>({...y,platform:y.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}});const z=async()=>{var u,i;W.value=!0;try{const[y,ie,me,xe,he,ce,Ae,Y,J]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),be=[];y.success&&((u=y.data)==null||u.forEach(re=>{be.push({...re,platform:"claude-oauth",isDedicated:re.accountType==="dedicated"})})),ie.success&&((i=ie.data)==null||i.forEach(re=>{be.push({...re,platform:"claude-console",isDedicated:re.accountType==="dedicated"})})),S.value.claude=be;const Re=[];me.success&&(me.data||[]).forEach(re=>{Re.push({...re,platform:"gemini",isDedicated:re.accountType==="dedicated"})}),xe.success&&(xe.data||[]).forEach(re=>{Re.push({...re,platform:"gemini-api",isDedicated:re.accountType==="dedicated"})}),S.value.gemini=Re;const Qe=[];if(he.success&&(he.data||[]).forEach(re=>{Qe.push({...re,platform:"openai",isDedicated:re.accountType==="dedicated"})}),ce.success&&(ce.data||[]).forEach(re=>{Qe.push({...re,platform:"openai-responses",isDedicated:re.accountType==="dedicated"})}),S.value.openai=Qe,Ae.success&&(S.value.bedrock=(Ae.data||[]).map(re=>({...re,isDedicated:re.accountType==="dedicated"}))),Y.success&&(S.value.droid=(Y.data||[]).map(re=>({...re,platform:"droid",isDedicated:re.accountType==="dedicated"}))),J.success){const re=J.data||[];S.value.claudeGroups=re.filter(Me=>Me.platform==="claude"),S.value.geminiGroups=re.filter(Me=>Me.platform==="gemini"),S.value.openaiGroups=re.filter(Me=>Me.platform==="openai"),S.value.droidGroups=re.filter(Me=>Me.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},_=R(()=>{const u=new Date;return u.setMinutes(u.getMinutes()+1),u.toISOString().slice(0,16)}),q=()=>{if(!a.expireDuration){a.expiresAt=null;return}if(a.expireDuration==="custom")return;const u=new Date,y=a.expireDuration.match(/(\d+)([dhmy])/);if(y){const[,ie,me]=y,xe=parseInt(ie);switch(me){case"d":u.setDate(u.getDate()+xe);break;case"h":u.setHours(u.getHours()+xe);break;case"m":u.setMonth(u.getMonth()+xe);break;case"y":u.setFullYear(u.getFullYear()+xe);break}a.expiresAt=u.toISOString()}},K=()=>{a.customExpireDate&&(a.expiresAt=new Date(a.customExpireDate).toISOString())},$=u=>new Date(u).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),X=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},le=u=>{a.restrictedModels.splice(u,1)},ue=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),fe=R(()=>ue.value.filter(u=>!a.restrictedModels.includes(u))),pe=u=>{a.restrictedModels.includes(u)||a.restrictedModels.push(u)},Ke=()=>{if(H.value&&H.value.trim()){const u=H.value.trim();a.tags.includes(u)||a.tags.push(u),H.value=""}},T=u=>{a.tags.includes(u)||a.tags.push(u)},l=u=>{a.tags.splice(u,1)},o=()=>a.activationUnit==="hours"?[{value:1,label:"1小时"},{value:3,label:"3小时"},{value:6,label:"6小时"},{value:12,label:"12小时"}]:[{value:30,label:"30天"},{value:90,label:"90天"},{value:180,label:"180天"},{value:365,label:"365天"}],p=()=>{a.activationUnit==="hours"?a.activationDays>24&&(a.activationDays=24):a.activationDays<1&&(a.activationDays=1)},A=async()=>{if(Q.value.name="",!a.name||!a.name.trim()){Q.value.name="请输入API Key名称";return}if(a.createType==="batch"&&(!a.batchCount||a.batchCount<2||a.batchCount>500)){V("批量创建数量必须在 2-500 之间","error");return}if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let u=!1;if(window.showConfirm?u=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-
-是否继续?`,"继续创建","返回修改"):u=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-是否继续?`),!u)return}C.value=!0;try{const u={description:a.description||void 0,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):null,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):null,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):null,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,expiresAt:a.expirationMode==="fixed"&&a.expiresAt||void 0,expirationMode:a.expirationMode,activationDays:a.expirationMode==="activation"?a.activationDays:void 0,activationUnit:a.expirationMode==="activation"?a.activationUnit:void 0,permissions:a.permissions,tags:a.tags.length>0?a.tags:void 0,enableModelRestriction:a.enableModelRestriction,restrictedModels:a.restrictedModels,enableClientRestriction:a.enableClientRestriction,allowedClients:a.allowedClients};if(a.claudeAccountId&&(a.claudeAccountId.startsWith("console:")?(u.claudeConsoleAccountId=a.claudeAccountId.substring(8),delete u.claudeAccountId):(u.claudeAccountId=a.claudeAccountId,delete u.claudeConsoleAccountId)),a.geminiAccountId&&(u.geminiAccountId=a.geminiAccountId),a.openaiAccountId&&(u.openaiAccountId=a.openaiAccountId),a.bedrockAccountId&&(u.bedrockAccountId=a.bedrockAccountId),a.droidAccountId&&(u.droidAccountId=a.droidAccountId),a.createType==="single"){const i={...u,name:a.name},y=await E.post("/admin/api-keys",i);y.success?(V("API Key 创建成功","success"),F("success",y.data),F("close")):V(y.message||"创建失败","error")}else{const i={...u,createType:"batch",baseName:a.name,count:a.batchCount},y=await E.post("/admin/api-keys/batch",i);y.success?(V(`成功创建 ${y.data.length} 个 API Key`,"success"),F("batch-success",y.data),F("close")):V(y.message||"批量创建失败","error")}}catch{V("创建失败","error")}finally{C.value=!1}};return(u,i)=>(n(),we(Ee,{to:"body"},[e("div",er,[e("div",tr,[e("div",sr,[i[48]||(i[48]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-key text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 创建新的 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:i[0]||(i[0]=y=>u.$emit("close"))},i[47]||(i[47]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4",onSubmit:_e(A,["prevent"])},[e("div",ar,[e("div",{class:O(["flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",a.createType==="batch"?"mb-3":""])},[i[51]||(i[51]=e("label",{class:"flex h-full items-center text-xs font-semibold text-gray-700 dark:text-gray-300 sm:text-sm"},"创建类型",-1)),e("div",rr,[e("label",or,[D(e("input",{"onUpdate:modelValue":i[1]||(i[1]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"single"},null,512),[[Ie,a.createType]]),i[49]||(i[49]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-key mr-1 text-xs"}),h(" 单个创建 ")],-1))]),e("label",lr,[D(e("input",{"onUpdate:modelValue":i[2]||(i[2]=y=>a.createType=y),class:"mr-1.5 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 sm:mr-2",type:"radio",value:"batch"},null,512),[[Ie,a.createType]]),i[50]||(i[50]=e("span",{class:"flex items-center text-xs text-gray-700 dark:text-gray-300 sm:text-sm"},[e("i",{class:"fas fa-layer-group mr-1 text-xs"}),h(" 批量创建 ")],-1))])])],2),a.createType==="batch"?(n(),d("div",nr,[e("div",ir,[e("div",dr,[i[53]||(i[53]=e("label",{class:"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400"},"创建数量",-1)),e("div",ur,[D(e("input",{"onUpdate:modelValue":i[3]||(i[3]=y=>a.batchCount=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"500",min:"2",placeholder:"输入数量 (2-500)",required:"",type:"number"},null,512),[[te,a.batchCount,void 0,{number:!0}]]),i[52]||(i[52]=e("div",{class:"whitespace-nowrap text-xs text-gray-500 dark:text-gray-400"}," 最大支持 500 个 ",-1))])])]),e("p",cr,[i[54]||(i[54]=e("i",{class:"fas fa-info-circle mr-1 mt-0.5 flex-shrink-0"},null,-1)),e("span",null,"批量创建时,每个 Key 的名称会自动添加序号后缀,例如:"+c(a.name||"MyKey")+"_1, "+c(a.name||"MyKey")+"_2 ...",1)])])):w("",!0)]),e("div",null,[i[55]||(i[55]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"},[h("名称 "),e("span",{class:"text-red-500"},"*")],-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":i[4]||(i[4]=y=>a.name=y),class:O(["form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":Q.value.name}]),placeholder:a.createType==="batch"?"输入基础名称(将自动添加序号)":"为您的 API Key 取一个名称",required:"",type:"text",onInput:i[5]||(i[5]=y=>Q.value.name="")},null,42,gr),[[te,a.name]])]),Q.value.name?(n(),d("p",pr,c(Q.value.name),1)):w("",!0)]),e("div",null,[i[63]||(i[63]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"标签",-1)),e("div",mr,[a.tags.length>0?(n(),d("div",xr,[i[57]||(i[57]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",yr,[(n(!0),d(Z,null,oe(a.tags,(y,ie)=>(n(),d("span",{key:"selected-"+ie,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(y)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:me=>l(ie)},i[56]||(i[56]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,fr)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",br,[i[59]||(i[59]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",vr,[(n(!0),d(Z,null,oe(f.value,y=>(n(),d("button",{key:"available-"+y,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:ie=>T(y)},[i[58]||(i[58]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(y),1)],8,kr))),128))])])):w("",!0),e("div",null,[i[61]||(i[61]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",wr,[D(e("input",{"onUpdate:modelValue":i[6]||(i[6]=y=>H.value=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(Ke,["prevent"]),["enter"])},null,40,hr),[[te,H.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:Ke},i[60]||(i[60]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[62]||(i[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",Ar,[i[71]||(i[71]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",Cr,[e("div",$r,[e("div",null,[i[64]||(i[64]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":i[7]||(i[7]=y=>a.rateLimitWindow=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),i[65]||(i[65]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[i[66]||(i[66]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":i[8]||(i[8]=y=>a.rateLimitRequests=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),i[67]||(i[67]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[i[68]||(i[68]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":i[9]||(i[9]=y=>a.rateLimitCost=y),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),i[69]||(i[69]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),i[70]||(i[70]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[i[73]||(i[73]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Ir,[e("div",Kr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[10]||(i[10]=y=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[11]||(i[11]=y=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[12]||(i[12]=y=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[13]||(i[13]=y=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[14]||(i[14]=y=>a.dailyCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),i[72]||(i[72]=e("p",{class:"dark:text灰-400 text-xs text-gray-500"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[75]||(i[75]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",Lr,[e("div",Dr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[15]||(i[15]=y=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[16]||(i[16]=y=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[17]||(i[17]=y=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[18]||(i[18]=y=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[19]||(i[19]=y=>a.totalCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),i[74]||(i[74]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[i[77]||(i[77]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",_r,[e("div",Tr,[e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[20]||(i[20]=y=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[21]||(i[21]=y=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[22]||(i[22]=y=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded bg-gray-100 px-2 py-1 text-xs font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[23]||(i[23]=y=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":i[24]||(i[24]=y=>a.weeklyOpusCostLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),i[76]||(i[76]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[i[78]||(i[78]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制 (可选)",-1)),D(e("input",{"onUpdate:modelValue":i[25]||(i[25]=y=>a.concurrencyLimit=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),i[79]||(i[79]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数,0 或留空表示无限制 ",-1))]),e("div",null,[i[80]||(i[80]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注 (可选)",-1)),D(e("textarea",{"onUpdate:modelValue":i[26]||(i[26]=y=>a.description=y),class:"form-input w-full resize-none border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"描述此 API Key 的用途...",rows:"2"},null,512),[[te,a.description]])]),e("div",null,[i[88]||(i[88]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"过期设置",-1)),e("div",Sr,[e("div",Ur,[e("label",Rr,[D(e("input",{"onUpdate:modelValue":i[27]||(i[27]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"fixed"},null,512),[[Ie,a.expirationMode]]),i[81]||(i[81]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"固定时间过期",-1))]),e("label",Mr,[D(e("input",{"onUpdate:modelValue":i[28]||(i[28]=y=>a.expirationMode=y),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"activation"},null,512),[[Ie,a.expirationMode]]),i[82]||(i[82]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"首次使用后激活",-1))])]),e("p",Pr,[a.expirationMode==="fixed"?(n(),d("span",Vr,i[83]||(i[83]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 固定时间模式:Key 创建后立即生效,按设定时间过期(支持小时和天数) ",-1)]))):(n(),d("span",Er,i[84]||(i[84]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),h(" 激活模式:Key 首次使用时激活,激活后按设定时间过期(支持小时和天数,适合批量销售) ",-1)])))])]),a.expirationMode==="fixed"?(n(),d("div",Or,[D(e("select",{"onUpdate:modelValue":i[29]||(i[29]=y=>a.expireDuration=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:q},i[85]||(i[85]=[e("option",{value:""},"永不过期",-1),e("option",{value:"1h"},"1 小时",-1),e("option",{value:"3h"},"3 小时",-1),e("option",{value:"6h"},"6 小时",-1),e("option",{value:"12h"},"12 小时",-1),e("option",{value:"1d"},"1 天",-1),e("option",{value:"7d"},"7 天",-1),e("option",{value:"30d"},"30 天",-1),e("option",{value:"90d"},"90 天",-1),e("option",{value:"180d"},"180 天",-1),e("option",{value:"365d"},"365 天",-1),e("option",{value:"custom"},"自定义日期",-1)]),544),[[dt,a.expireDuration]]),a.expireDuration==="custom"?(n(),d("div",jr,[D(e("input",{"onUpdate:modelValue":i[30]||(i[30]=y=>a.customExpireDate=y),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:_.value,type:"datetime-local",onChange:K},null,40,Gr),[[te,a.customExpireDate]])])):w("",!0),a.expiresAt?(n(),d("p",zr," 将于 "+c($(a.expiresAt))+" 过期 ",1)):w("",!0)])):(n(),d("div",qr,[e("div",Fr,[D(e("input",{"onUpdate:modelValue":i[31]||(i[31]=y=>a.activationDays=y),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:a.activationUnit==="hours"?8760:3650,min:"1",placeholder:a.activationUnit==="hours"?"输入小时数":"输入天数",type:"number"},null,8,Wr),[[te,a.activationDays,void 0,{number:!0}]]),D(e("select",{"onUpdate:modelValue":i[32]||(i[32]=y=>a.activationUnit=y),class:"form-input w-20 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",onChange:p},i[86]||(i[86]=[e("option",{value:"hours"},"小时",-1),e("option",{value:"days"},"天",-1)]),544),[[dt,a.activationUnit]])]),e("div",Br,[(n(!0),d(Z,null,oe(o(),y=>(n(),d("button",{key:y.value,class:"rounded-md border border-gray-300 px-3 py-1 text-xs hover:bg-gray-100 dark:border-gray-600 dark:hover:bg-gray-700",type:"button",onClick:ie=>a.activationDays=y.value},c(y.label),9,Nr))),128))]),e("p",Hr,[i[87]||(i[87]=e("i",{class:"fas fa-clock mr-1"},null,-1)),h(" Key 将在首次使用后激活,激活后 "+c(a.activationDays||(a.activationUnit==="hours"?24:30))+" "+c(a.activationUnit==="hours"?"小时":"天")+"过期 ",1)])]))]),e("div",null,[i[93]||(i[93]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Yr,[e("label",Qr,[D(e("input",{"onUpdate:modelValue":i[33]||(i[33]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[$e,a.permissions]]),i[89]||(i[89]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",Jr,[D(e("input",{"onUpdate:modelValue":i[34]||(i[34]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[$e,a.permissions]]),i[90]||(i[90]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",Xr,[D(e("input",{"onUpdate:modelValue":i[35]||(i[35]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[$e,a.permissions]]),i[91]||(i[91]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",Zr,[D(e("input",{"onUpdate:modelValue":i[36]||(i[36]=y=>a.permissions=y),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[$e,a.permissions]]),i[92]||(i[92]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),i[94]||(i[94]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",eo,[i[95]||(i[95]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定 (可选)",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:z},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,to)]),e("div",so,[e("div",null,[i[96]||(i[96]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":i[37]||(i[37]=y=>a.claudeAccountId=y),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[97]||(i[97]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":i[38]||(i[38]=y=>a.geminiAccountId=y),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[98]||(i[98]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":i[39]||(i[39]=y=>a.openaiAccountId=y),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[i[99]||(i[99]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":i[40]||(i[40]=y=>a.bedrockAccountId=y),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[i[100]||(i[100]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":i[41]||(i[41]=y=>a.droidAccountId=y),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),i[101]||(i[101]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择专属账号后,此API Key将只使用该账号,不选择则使用共享账号池 ",-1))]),e("div",null,[e("div",ao,[D(e("input",{id:"enableModelRestriction","onUpdate:modelValue":i[42]||(i[42]=y=>a.enableModelRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[$e,a.enableModelRestriction]]),i[102]||(i[102]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",ro,[e("div",null,[i[105]||(i[105]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600"},"限制的模型列表",-1)),e("div",oo,[(n(!0),d(Z,null,oe(a.restrictedModels,(y,ie)=>(n(),d("span",{key:ie,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800"},[h(c(y)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800",type:"button",onClick:me=>le(ie)},i[103]||(i[103]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,lo)]))),128)),a.restrictedModels.length===0?(n(),d("span",no," 暂无限制的模型 ")):w("",!0)]),e("div",io,[e("div",uo,[(n(!0),d(Z,null,oe(fe.value,y=>(n(),d("button",{key:y,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 sm:text-sm",type:"button",onClick:ie=>pe(y)},c(y),9,co))),128)),fe.value.length===0?(n(),d("span",go," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",po,[D(e("input",{"onUpdate:modelValue":i[43]||(i[43]=y=>a.modelInput=y),class:"form-input flex-1",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(X,["prevent"]),["enter"])},null,40,mo),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:X},i[104]||(i[104]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),i[106]||(i[106]=e("p",{class:"mt-2 text-xs text-gray-500"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",xo,[D(e("input",{id:"enableClientRestriction","onUpdate:modelValue":i[44]||(i[44]=y=>a.enableClientRestriction=y),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[$e,a.enableClientRestriction]]),i[107]||(i[107]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"enableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",yo,[e("div",null,[i[108]||(i[108]=e("label",{class:"mb-2 block text-xs font-medium text-gray-700 dark:text-gray-300"},"允许的客户端",-1)),e("div",fo,[(n(!0),d(Z,null,oe(x.value,y=>(n(),d("div",{key:y.id,class:"flex items-start"},[D(e("input",{id:`client_${y.id}`,"onUpdate:modelValue":i[45]||(i[45]=ie=>a.allowedClients=ie),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:y.id},null,8,bo),[[$e,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`client_${y.id}`},[e("span",ko,c(y.name),1),e("span",wo,c(y.description),1)],8,vo)]))),128))])])])):w("",!0)]),e("div",ho,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 text-sm font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:i[46]||(i[46]=y=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 text-sm font-semibold",disabled:C.value,type:"submit"},[C.value?(n(),d("div",Co)):(n(),d("i",$o)),h(" "+c(C.value?"创建中...":"创建"),1)],8,Ao)])],32)])])]))}},Ko=Se(Io,[["__scopeId","data-v-8a33ec2e"]]),Lo={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Do={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},_o={class:"mb-4 flex items-center justify-between sm:mb-6"},To=["value"],So={key:0,class:"text-gray-500"},Uo={class:"space-y-4"},Ro={key:0},Mo={class:"flex flex-wrap gap-2"},Po=["onClick"],Vo={key:1},Eo={class:"flex flex-wrap gap-2"},Oo=["onClick"],jo={class:"flex gap-2"},Go=["onKeypress"],zo={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},qo={class:"space-y-2"},Fo={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},Wo={class:"space-y-3"},Bo={class:"flex gap-2"},No={class:"space-y-3"},Ho={class:"flex gap-2"},Yo={class:"space-y-3"},Qo={class:"flex gap-2"},Jo={class:"mb-3 flex items-center"},Xo={class:"flex flex-wrap gap-4"},Zo={class:"flex cursor-pointer items-center"},el={class:"flex cursor-pointer items-center"},tl={class:"flex cursor-pointer items-center"},sl={class:"flex cursor-pointer items-center"},al={class:"mb-3 flex items-center justify-between"},rl=["disabled"],ol={class:"grid grid-cols-1 gap-3"},ll={class:"mb-3 flex items-center"},nl={key:0,class:"space-y-3"},il={class:"mb-3 flex min-h-[32px] flex-wrap gap-2 rounded-lg border border-gray-200 bg-gray-50 p-2 dark:border-gray-600 dark:bg-gray-700"},dl=["onClick"],ul={key:0,class:"text-sm text-gray-400 dark:text-gray-500"},cl={class:"space-y-3"},gl={class:"flex flex-wrap gap-2"},pl=["onClick"],ml={key:0,class:"text-sm italic text-gray-400 dark:text-gray-500"},xl={class:"flex gap-2"},yl=["onKeydown"],fl={class:"mb-3 flex items-center"},bl={key:0,class:"space-y-3"},vl={class:"space-y-2"},kl=["id","value"],wl=["for"],hl={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Al={class:"block text-xs text-gray-500 dark:text-gray-400"},Cl={class:"flex gap-3 pt-4"},$l=["disabled"],Il={key:0,class:"loading-spinner mr-2"},Kl={key:1,class:"fas fa-save mr-2"},Ll={__name:"EditApiKeyModal",props:{apiKey:{type:Object,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[],openaiResponses:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=zt(),L=qt(),C=I(!1),W=I(!1),S=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),Q=I([]),H=I([]),B=I(""),f=I([]),x=R(()=>f.value.filter(T=>!a.tags.includes(T))),a=Ye({name:"",tokenLimit:"",rateLimitWindow:"",rateLimitRequests:"",rateLimitCost:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:[],claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",enableModelRestriction:!1,restrictedModels:[],modelInput:"",enableClientRestriction:!1,allowedClients:[],tags:[],isActive:!0,ownerId:""}),z=()=>{a.modelInput&&!a.restrictedModels.includes(a.modelInput)&&(a.restrictedModels.push(a.modelInput),a.modelInput="")},_=T=>{a.restrictedModels.splice(T,1)},q=I(["claude-opus-4-20250514","claude-opus-4-1-20250805"]),K=R(()=>q.value.filter(T=>!a.restrictedModels.includes(T))),$=T=>{a.restrictedModels.includes(T)||a.restrictedModels.push(T)},X=()=>{if(B.value&&B.value.trim()){const T=B.value.trim();a.tags.includes(T)||a.tags.push(T),B.value=""}},le=T=>{a.tags.includes(T)||a.tags.push(T)},ue=T=>{a.tags.splice(T,1)},fe=async()=>{if(a.rateLimitWindow&&(!a.rateLimitCost||parseFloat(a.rateLimitCost)===0)){let T=!1;if(window.showConfirm?T=await window.showConfirm("费用限制提醒",`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-
-是否继续?`,"继续保存","返回修改"):T=confirm(`您设置了时间窗口但费用限制为0,这意味着不会有费用限制。
-是否继续?`),!T)return}C.value=!0;try{const T={name:a.name,tokenLimit:0,rateLimitWindow:a.rateLimitWindow!==""&&a.rateLimitWindow!==null?parseInt(a.rateLimitWindow):0,rateLimitRequests:a.rateLimitRequests!==""&&a.rateLimitRequests!==null?parseInt(a.rateLimitRequests):0,rateLimitCost:a.rateLimitCost!==""&&a.rateLimitCost!==null?parseFloat(a.rateLimitCost):0,concurrencyLimit:a.concurrencyLimit!==""&&a.concurrencyLimit!==null?parseInt(a.concurrencyLimit):0,dailyCostLimit:a.dailyCostLimit!==""&&a.dailyCostLimit!==null?parseFloat(a.dailyCostLimit):0,totalCostLimit:a.totalCostLimit!==""&&a.totalCostLimit!==null?parseFloat(a.totalCostLimit):0,weeklyOpusCostLimit:a.weeklyOpusCostLimit!==""&&a.weeklyOpusCostLimit!==null?parseFloat(a.weeklyOpusCostLimit):0,permissions:a.permissions,tags:a.tags};a.claudeAccountId?a.claudeAccountId.startsWith("console:")?(T.claudeConsoleAccountId=a.claudeAccountId.substring(8),T.claudeAccountId=null):(a.claudeAccountId.startsWith("group:"),T.claudeAccountId=a.claudeAccountId,T.claudeConsoleAccountId=null):(T.claudeAccountId=null,T.claudeConsoleAccountId=null),a.geminiAccountId?T.geminiAccountId=a.geminiAccountId:T.geminiAccountId=null,a.openaiAccountId?T.openaiAccountId=a.openaiAccountId:T.openaiAccountId=null,a.bedrockAccountId?T.bedrockAccountId=a.bedrockAccountId:T.bedrockAccountId=null,a.droidAccountId?T.droidAccountId=a.droidAccountId:T.droidAccountId=null,T.enableModelRestriction=a.enableModelRestriction,T.restrictedModels=a.restrictedModels,T.enableClientRestriction=a.enableClientRestriction,T.allowedClients=a.allowedClients,T.isActive=a.isActive,a.ownerId!==void 0&&(T.ownerId=a.ownerId);const l=await E.put(`/admin/api-keys/${g.apiKey.id}`,T);l.success?(F("success"),F("close")):V(l.message||"更新失败","error")}catch{V("更新失败","error")}finally{C.value=!1}},pe=async()=>{var T,l;W.value=!0;try{const[o,p,A,u,i,y,ie,me,xe]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),he=[];o.success&&((T=o.data)==null||T.forEach(Y=>{he.push({...Y,platform:"claude-oauth",isDedicated:Y.accountType==="dedicated"})})),p.success&&((l=p.data)==null||l.forEach(Y=>{he.push({...Y,platform:"claude-console",isDedicated:Y.accountType==="dedicated"})})),S.value.claude=he;const ce=[];A.success&&(A.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini",isDedicated:Y.accountType==="dedicated"})}),u.success&&(u.data||[]).forEach(Y=>{ce.push({...Y,platform:"gemini-api",isDedicated:Y.accountType==="dedicated"})}),S.value.gemini=ce;const Ae=[];if(i.success&&(i.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai",isDedicated:Y.accountType==="dedicated"})}),y.success&&(y.data||[]).forEach(Y=>{Ae.push({...Y,platform:"openai-responses",isDedicated:Y.accountType==="dedicated"})}),S.value.openai=Ae,ie.success&&(S.value.bedrock=(ie.data||[]).map(Y=>({...Y,isDedicated:Y.accountType==="dedicated"}))),me.success&&(S.value.droid=(me.data||[]).map(Y=>({...Y,platform:"droid",isDedicated:Y.accountType==="dedicated"}))),xe.success){const Y=xe.data||[];S.value.claudeGroups=Y.filter(J=>J.platform==="claude"),S.value.geminiGroups=Y.filter(J=>J.platform==="gemini"),S.value.openaiGroups=Y.filter(J=>J.platform==="openai"),S.value.droidGroups=Y.filter(J=>J.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{W.value=!1}},Ke=async()=>{try{const T=await E.get("/admin/users");T.success&&(H.value=T.data||[])}catch{H.value=[{id:"admin",username:"admin",displayName:"Admin",email:"",role:"admin"}]}};return ut(async()=>{try{const[o,p]=await Promise.all([j.loadSupportedClients(),L.fetchTags(),Ke()]);Q.value=o||[],f.value=p||[]}catch{Q.value=[],f.value=[]}if(g.accounts){const o=(g.accounts.gemini||[]).map(A=>({...A,platform:A.platform||"gemini"})),p=[];g.accounts.openai&&g.accounts.openai.forEach(A=>{p.push({...A,platform:A.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(A=>{p.push({...A,platform:A.platform||"openai-responses"})}),S.value={claude:g.accounts.claude||[],gemini:o,openai:p,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(A=>({...A,platform:A.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}a.name=g.apiKey.name,a.tokenLimit=g.apiKey.tokenLimit||"",a.rateLimitCost=g.apiKey.rateLimitCost||"",g.apiKey.tokenLimit>0&&g.apiKey.rateLimitCost,a.rateLimitWindow=g.apiKey.rateLimitWindow||"",a.rateLimitRequests=g.apiKey.rateLimitRequests||"",a.concurrencyLimit=g.apiKey.concurrencyLimit||"",a.dailyCostLimit=g.apiKey.dailyCostLimit||"",a.totalCostLimit=g.apiKey.totalCostLimit||"",a.weeklyOpusCostLimit=g.apiKey.weeklyOpusCostLimit||"";const T=["claude","gemini","openai","droid"];let l=g.apiKey.permissions;if(typeof l=="string")if(l==="all"||l==="")l=[];else if(l.startsWith("["))try{l=JSON.parse(l)}catch{l=T.includes(l)?[l]:[]}else l.includes(",")?l=l.split(",").map(o=>o.trim()).filter(o=>T.includes(o)):T.includes(l)?l=[l]:l=[];Array.isArray(l)?a.permissions=l.filter(o=>T.includes(o)):a.permissions=[],g.apiKey.claudeConsoleAccountId?a.claudeAccountId=`console:${g.apiKey.claudeConsoleAccountId}`:a.claudeAccountId=g.apiKey.claudeAccountId||"",a.geminiAccountId=g.apiKey.geminiAccountId||"",a.openaiAccountId=g.apiKey.openaiAccountId||"",a.bedrockAccountId=g.apiKey.bedrockAccountId||"",a.droidAccountId=g.apiKey.droidAccountId||"",a.restrictedModels=g.apiKey.restrictedModels||[],a.allowedClients=g.apiKey.allowedClients||[],a.tags=g.apiKey.tags||[],a.enableModelRestriction=g.apiKey.enableModelRestriction===!0||g.apiKey.enableModelRestriction==="true",a.enableClientRestriction=g.apiKey.enableClientRestriction===!0||g.apiKey.enableClientRestriction==="true",a.isActive=g.apiKey.isActive===void 0||g.apiKey.isActive===!0||g.apiKey.isActive==="true",a.ownerId=g.apiKey.userId||"admin"}),(T,l)=>(n(),we(Ee,{to:"body"},[e("div",Lo,[e("div",Do,[e("div",_o,[l[39]||(l[39]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 编辑 API Key ")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:l[0]||(l[0]=o=>T.$emit("close"))},l[38]||(l[38]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(fe,["prevent"])},[e("div",null,[l[40]||(l[40]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"名称",-1)),e("div",null,[D(e("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>a.name=o),class:"form-input flex-1 border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",maxlength:"100",placeholder:"请输入API Key名称",required:"",type:"text"},null,512),[[te,a.name]])]),l[41]||(l[41]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 用于识别此 API Key 的用途 ",-1))]),e("div",null,[l[42]||(l[42]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"所有者",-1)),D(e("select",{"onUpdate:modelValue":l[2]||(l[2]=o=>a.ownerId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},[(n(!0),d(Z,null,oe(H.value,o=>(n(),d("option",{key:o.id,value:o.id},[h(c(o.displayName)+" ("+c(o.username)+") ",1),o.role==="admin"?(n(),d("span",So,"- 管理员")):w("",!0)],8,To))),128))],512),[[dt,a.ownerId]]),l[43]||(l[43]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400 sm:mt-2"}," 分配此 API Key 给指定用户或管理员,管理员分配时不受用户 API Key 数量限制 ",-1))]),e("div",null,[l[51]||(l[51]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"},"标签",-1)),e("div",Uo,[a.tags.length>0?(n(),d("div",Ro,[l[45]||(l[45]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 已选择的标签: ",-1)),e("div",Mo,[(n(!0),d(Z,null,oe(a.tags,(o,p)=>(n(),d("span",{key:"selected-"+p,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},[h(c(o)+" ",1),e("button",{class:"ml-1 hover:text-blue-900 dark:hover:text-blue-300",type:"button",onClick:A=>ue(p)},l[44]||(l[44]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Po)]))),128))])])):w("",!0),x.value.length>0?(n(),d("div",Vo,[l[47]||(l[47]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Eo,[(n(!0),d(Z,null,oe(x.value,o=>(n(),d("button",{key:"available-"+o,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-400",type:"button",onClick:p=>le(o)},[l[46]||(l[46]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(o),1)],8,Oo))),128))])])):w("",!0),e("div",null,[l[49]||(l[49]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",jo,[D(e("input",{"onUpdate:modelValue":l[3]||(l[3]=o=>B.value=o),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(X,["prevent"]),["enter"])},null,40,Go),[[te,B.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600",type:"button",onClick:X},l[48]||(l[48]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[50]||(l[50]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 用于标记不同团队或用途,方便筛选管理 ",-1))])]),e("div",zo,[l[59]||(l[59]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"}," 速率限制设置 (可选) ")],-1)),e("div",qo,[e("div",Fo,[e("div",null,[l[52]||(l[52]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"时间窗口 (分钟)",-1)),D(e("input",{"onUpdate:modelValue":l[4]||(l[4]=o=>a.rateLimitWindow=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitWindow]]),l[53]||(l[53]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"时间段单位",-1))]),e("div",null,[l[54]||(l[54]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":l[5]||(l[5]=o=>a.rateLimitRequests=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"无限制",type:"number"},null,512),[[te,a.rateLimitRequests]]),l[55]||(l[55]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大请求",-1))]),e("div",null,[l[56]||(l[56]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":l[6]||(l[6]=o=>a.rateLimitCost=o),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"无限制",step:"0.01",type:"number"},null,512),[[te,a.rateLimitCost]]),l[57]||(l[57]=e("p",{class:"ml-2 mt-0.5 text-xs text-gray-500 dark:text-gray-400"},"窗口内最大费用",-1))])]),l[58]||(l[58]=e("div",{class:"rounded-lg bg-blue-100 p-2 dark:bg-blue-900/30"},[e("h5",{class:"mb-1 text-xs font-semibold text-blue-800 dark:text-blue-400"}," 💡 使用示例 "),e("div",{class:"space-y-0.5 text-xs text-blue-700 dark:text-blue-300"},[e("div",null,[e("strong",null,"示例1:"),h(" 时间窗口=60,请求次数=1000 → 每60分钟最多1000次请求 ")]),e("div",null,[e("strong",null,"示例2:"),h(" 时间窗口=1,费用=0.1 → 每分钟最多$0.1费用")]),e("div",null,[e("strong",null,"示例3:"),h(" 窗口=30,请求=50,费用=5 → 每30分钟50次请求且不超$5费用 ")])])],-1))])]),e("div",null,[l[61]||(l[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日费用限制 (美元)",-1)),e("div",Wo,[e("div",Bo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[7]||(l[7]=o=>a.dailyCostLimit="50")}," $50 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[8]||(l[8]=o=>a.dailyCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[9]||(l[9]=o=>a.dailyCostLimit="200")}," $200 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[10]||(l[10]=o=>a.dailyCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[11]||(l[11]=o=>a.dailyCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.dailyCostLimit]]),l[60]||(l[60]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 每日的费用限制,超过限制将拒绝请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[63]||(l[63]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"总费用限制 (美元)",-1)),e("div",No,[e("div",Ho,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[12]||(l[12]=o=>a.totalCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[13]||(l[13]=o=>a.totalCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[14]||(l[14]=o=>a.totalCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[15]||(l[15]=o=>a.totalCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[16]||(l[16]=o=>a.totalCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.totalCostLimit]]),l[62]||(l[62]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 的累计总费用限制,达到限制后将拒绝所有后续请求,0 或留空表示无限制 ",-1))])]),e("div",null,[l[65]||(l[65]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Claude 模型周费用限制 (美元)",-1)),e("div",Yo,[e("div",Qo,[e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[17]||(l[17]=o=>a.weeklyOpusCostLimit="100")}," $100 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[18]||(l[18]=o=>a.weeklyOpusCostLimit="500")}," $500 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[19]||(l[19]=o=>a.weeklyOpusCostLimit="1000")}," $1000 "),e("button",{class:"rounded-lg bg-gray-100 px-3 py-1 text-sm font-medium hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[20]||(l[20]=o=>a.weeklyOpusCostLimit="")}," 自定义 ")]),D(e("input",{"onUpdate:modelValue":l[21]||(l[21]=o=>a.weeklyOpusCostLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",step:"0.01",type:"number"},null,512),[[te,a.weeklyOpusCostLimit]]),l[64]||(l[64]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效,0 或留空表示无限制 ",-1))])]),e("div",null,[l[66]||(l[66]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":l[22]||(l[22]=o=>a.concurrencyLimit=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"0",placeholder:"0 表示无限制",type:"number"},null,512),[[te,a.concurrencyLimit]]),l[67]||(l[67]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此 API Key 可同时处理的最大请求数 ",-1))]),e("div",null,[e("div",Jo,[D(e("input",{id:"editIsActive","onUpdate:modelValue":l[23]||(l[23]=o=>a.isActive=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.isActive]]),l[68]||(l[68]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editIsActive"}," 激活账号 ",-1))]),l[69]||(l[69]=e("p",{class:"mb-4 text-xs text-gray-500 dark:text-gray-400"}," 取消勾选将禁用此 API Key,暂停所有请求,客户端返回 401 错误 ",-1))]),e("div",null,[l[74]||(l[74]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",Xo,[e("label",Zo,[D(e("input",{"onUpdate:modelValue":l[24]||(l[24]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"claude"},null,512),[[$e,a.permissions]]),l[70]||(l[70]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude",-1))]),e("label",el,[D(e("input",{"onUpdate:modelValue":l[25]||(l[25]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"gemini"},null,512),[[$e,a.permissions]]),l[71]||(l[71]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Gemini",-1))]),e("label",tl,[D(e("input",{"onUpdate:modelValue":l[26]||(l[26]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"openai"},null,512),[[$e,a.permissions]]),l[72]||(l[72]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"OpenAI",-1))]),e("label",sl,[D(e("input",{"onUpdate:modelValue":l[27]||(l[27]=o=>a.permissions=o),class:"mr-2 rounded text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:"droid"},null,512),[[$e,a.permissions]]),l[73]||(l[73]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Droid",-1))])]),l[75]||(l[75]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 不选择任何服务表示允许访问全部服务 ",-1))]),e("div",null,[e("div",al,[l[76]||(l[76]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:W.value,title:"刷新账号列表",type:"button",onClick:pe},[e("i",{class:O(["fas",W.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(W.value?"刷新中...":"刷新账号"),1)],8,rl)]),e("div",ol,[e("div",null,[l[77]||(l[77]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:a.claudeAccountId,"onUpdate:modelValue":l[28]||(l[28]=o=>a.claudeAccountId=o),accounts:S.value.claude,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:S.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[78]||(l[78]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:a.geminiAccountId,"onUpdate:modelValue":l[29]||(l[29]=o=>a.geminiAccountId=o),accounts:S.value.gemini,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("gemini"),groups:S.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[79]||(l[79]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:a.openaiAccountId,"onUpdate:modelValue":l[30]||(l[30]=o=>a.openaiAccountId=o),accounts:S.value.openai,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("openai"),groups:S.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai"},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[l[80]||(l[80]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:a.bedrockAccountId,"onUpdate:modelValue":l[31]||(l[31]=o=>a.bedrockAccountId=o),accounts:S.value.bedrock,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("claude"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock"},null,8,["modelValue","accounts","disabled"])]),e("div",null,[l[81]||(l[81]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:a.droidAccountId,"onUpdate:modelValue":l[32]||(l[32]=o=>a.droidAccountId=o),accounts:S.value.droid,"default-option-text":"使用共享账号池",disabled:a.permissions.length>0&&!a.permissions.includes("droid"),groups:S.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid"},null,8,["modelValue","accounts","disabled","groups"])])]),l[82]||(l[82]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 修改绑定账号将影响此API Key的请求路由 ",-1))]),e("div",null,[e("div",ll,[D(e("input",{id:"editEnableModelRestriction","onUpdate:modelValue":l[33]||(l[33]=o=>a.enableModelRestriction=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.enableModelRestriction]]),l[83]||(l[83]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableModelRestriction"}," 启用模型限制 ",-1))]),a.enableModelRestriction?(n(),d("div",nl,[e("div",null,[l[86]||(l[86]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"限制的模型列表",-1)),e("div",il,[(n(!0),d(Z,null,oe(a.restrictedModels,(o,p)=>(n(),d("span",{key:p,class:"inline-flex items-center rounded-full bg-red-100 px-3 py-1 text-sm text-red-800 dark:bg-red-900/30 dark:text-red-400"},[h(c(o)+" ",1),e("button",{class:"ml-2 text-red-600 hover:text-red-800 dark:text-red-400 dark:hover:text-red-300",type:"button",onClick:A=>_(p)},l[84]||(l[84]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,dl)]))),128)),a.restrictedModels.length===0?(n(),d("span",ul," 暂无限制的模型 ")):w("",!0)]),e("div",cl,[e("div",gl,[(n(!0),d(Z,null,oe(K.value,o=>(n(),d("button",{key:o,class:"flex-shrink-0 rounded-lg bg-gray-100 px-3 py-1 text-xs text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600 sm:text-sm",type:"button",onClick:p=>$(o)},c(o),9,pl))),128)),K.value.length===0?(n(),d("span",ml," 所有常用模型已在限制列表中 ")):w("",!0)]),e("div",xl,[D(e("input",{"onUpdate:modelValue":l[34]||(l[34]=o=>a.modelInput=o),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"输入模型名称,按回车添加",type:"text",onKeydown:it(_e(z,["prevent"]),["enter"])},null,40,yl),[[te,a.modelInput]]),e("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-white transition-colors hover:bg-red-600",type:"button",onClick:z},l[85]||(l[85]=[e("i",{class:"fas fa-plus"},null,-1)]))])]),l[87]||(l[87]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 设置此API Key无法访问的模型,例如:claude-opus-4-20250514 ",-1))])])):w("",!0)]),e("div",null,[e("div",fl,[D(e("input",{id:"editEnableClientRestriction","onUpdate:modelValue":l[35]||(l[35]=o=>a.enableClientRestriction=o),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[$e,a.enableClientRestriction]]),l[88]||(l[88]=e("label",{class:"ml-2 cursor-pointer text-sm font-semibold text-gray-700 dark:text-gray-300",for:"editEnableClientRestriction"}," 启用客户端限制 ",-1))]),a.enableClientRestriction?(n(),d("div",bl,[e("div",null,[l[89]||(l[89]=e("label",{class:"mb-2 block text-sm font-medium text-gray-600 dark:text-gray-400"},"允许的客户端",-1)),l[90]||(l[90]=e("p",{class:"mb-3 text-xs text-gray-500 dark:text-gray-400"}," 勾选允许使用此API Key的客户端 ",-1)),e("div",vl,[(n(!0),d(Z,null,oe(Q.value,o=>(n(),d("div",{key:o.id,class:"flex items-start"},[D(e("input",{id:`edit_client_${o.id}`,"onUpdate:modelValue":l[36]||(l[36]=p=>a.allowedClients=p),class:"mt-0.5 h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.id},null,8,kl),[[$e,a.allowedClients]]),e("label",{class:"ml-2 flex-1 cursor-pointer",for:`edit_client_${o.id}`},[e("span",hl,c(o.name),1),e("span",Al,c(o.description),1)],8,wl)]))),128))])])])):w("",!0)]),e("div",Cl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:l[37]||(l[37]=o=>T.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:C.value,type:"submit"},[C.value?(n(),d("div",Il)):(n(),d("i",Kl)),h(" "+c(C.value?"保存中...":"保存修改"),1)],8,$l)])],32)])])]))}},Dl=Se(Ll,[["__scopeId","data-v-0d72eff4"]]),_l={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Tl={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-8"},Sl={class:"mb-6 flex items-center justify-between"},Ul={class:"modal-scroll-content custom-scrollbar flex-1 space-y-6"},Rl={class:"rounded-lg border border-blue-200 bg-blue-50 p-4"},Ml={class:"flex items-start gap-3"},Pl={class:"text-sm text-gray-700"},Vl={class:"mt-1 text-xs text-gray-600"},El={key:0,class:"mt-3"},Ol=["min"],jl={key:1,class:"mt-2 text-xs text-gray-500"},Gl={class:"flex gap-3 pt-4"},zl=["disabled"],ql={key:0,class:"loading-spinner mr-2"},Fl={key:1,class:"fas fa-clock mr-2"},Wl={__name:"RenewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=Ye({renewDuration:"30d",customExpireDate:"",newExpiresAt:null}),C=R(()=>{const B=new Date;return g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>B?new Date(g.apiKey.expiresAt).toISOString().slice(0,16):(B.setMinutes(B.getMinutes()+1),B.toISOString().slice(0,16))}),W=B=>new Date(B).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}),S=()=>{if(!L.renewDuration){L.newExpiresAt=null;return}if(L.renewDuration==="permanent"){L.newExpiresAt=null;return}if(L.renewDuration==="custom")return;const B=g.apiKey.expiresAt&&new Date(g.apiKey.expiresAt)>new Date?new Date(g.apiKey.expiresAt):new Date,x=L.renewDuration.match(/(\d+)([dhmy])/);if(x){const[,a,z]=x,_=parseInt(a);switch(z){case"d":B.setDate(B.getDate()+_);break;case"h":B.setHours(B.getHours()+_);break;case"m":B.setMonth(B.getMonth()+_);break;case"y":B.setFullYear(B.getFullYear()+_);break}L.newExpiresAt=B.toISOString()}},Q=()=>{L.customExpireDate&&(L.newExpiresAt=new Date(L.customExpireDate).toISOString())},H=async()=>{j.value=!0;try{const B={expiresAt:L.renewDuration==="permanent"?null:L.newExpiresAt},f=await E.put(`/admin/api-keys/${g.apiKey.id}`,B);f.success?(V("API Key 续期成功","success"),F("success"),F("close")):V(f.message||"续期失败","error")}catch{V("续期失败","error")}finally{j.value=!1}};return S(),(B,f)=>(n(),we(Ee,{to:"body"},[e("div",_l,[e("div",Tl,[e("div",Sl,[f[5]||(f[5]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-clock text-white"})]),e("h3",{class:"text-xl font-bold text-gray-900"},"续期 API Key")],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:f[0]||(f[0]=x=>B.$emit("close"))},f[4]||(f[4]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Ul,[e("div",Rl,[e("div",Ml,[f[7]||(f[7]=e("div",{class:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[f[6]||(f[6]=e("h4",{class:"mb-1 font-semibold text-gray-800"},"API Key 信息",-1)),e("p",Pl,c(k.apiKey.name),1),e("p",Vl," 当前过期时间:"+c(k.apiKey.expiresAt?W(k.apiKey.expiresAt):"永不过期"),1)])])]),e("div",null,[f[9]||(f[9]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"续期时长",-1)),D(e("select",{"onUpdate:modelValue":f[1]||(f[1]=x=>L.renewDuration=x),class:"form-input w-full",onChange:S},f[8]||(f[8]=[e("option",{value:"7d"},"延长 7 天",-1),e("option",{value:"30d"},"延长 30 天",-1),e("option",{value:"90d"},"延长 90 天",-1),e("option",{value:"180d"},"延长 180 天",-1),e("option",{value:"365d"},"延长 365 天",-1),e("option",{value:"custom"},"自定义日期",-1),e("option",{value:"permanent"},"设为永不过期",-1)]),544),[[dt,L.renewDuration]]),L.renewDuration==="custom"?(n(),d("div",El,[D(e("input",{"onUpdate:modelValue":f[2]||(f[2]=x=>L.customExpireDate=x),class:"form-input w-full",min:C.value,type:"datetime-local",onChange:Q},null,40,Ol),[[te,L.customExpireDate]])])):w("",!0),L.newExpiresAt?(n(),d("p",jl," 新的过期时间:"+c(W(L.newExpiresAt)),1)):w("",!0)])]),e("div",Gl,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200",type:"button",onClick:f[3]||(f[3]=x=>B.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:j.value||!L.renewDuration,type:"button",onClick:H},[j.value?(n(),d("div",ql)):(n(),d("i",Fl)),h(" "+c(j.value?"续期中...":"确认续期"),1)],8,zl)])])])]))}},Bl=Se(Wl,[["__scopeId","data-v-2fba52a3"]]),Nl={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Hl={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-lg overflow-y-auto p-8"},Yl={class:"mb-6 space-y-4"},Ql={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},Jl={class:"font-medium text-gray-900 dark:text-gray-100"},Xl={key:0},Zl={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-600 dark:bg-gray-800"},en={class:"text-gray-700 dark:text-gray-300"},tn={class:"relative"},sn={class:"flex min-h-[60px] items-center break-all rounded-lg border border-gray-700 bg-gray-900 p-4 pr-14 font-mono text-sm text-white dark:border-gray-600 dark:bg-gray-900"},an={class:"absolute right-3 top-3"},rn=["title"],on={__name:"NewApiKeyModal",props:{apiKey:{type:Object,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=()=>{if(typeof window<"u"){const a=window.location.protocol,z=window.location.host;let _=a+"//"+z;const q=window.location.href,K=q.indexOf("/",8);return K!==-1&&(_=q.substring(0,K)),_}return""},C=R(()=>L()+"/api"),W=()=>{j.value=!j.value},S=()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";return a?j.value||a.length<=12?a:a.substring(0,8)+"●".repeat(Math.max(0,a.length-12))+a.substring(a.length-4):""},Q=async(a,z)=>{try{await navigator.clipboard.writeText(a),V(z,"success")}catch{const q=document.createElement("textarea");q.value=a,document.body.appendChild(q),q.select();try{document.execCommand("copy"),V(z,"success")}catch{V("复制失败,请手动复制","error")}finally{document.body.removeChild(q)}}},H=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}const z=`export ANTHROPIC_BASE_URL="${C.value}"
-export ANTHROPIC_AUTH_TOKEN="${a}"`;await Q(z,"配置信息已复制到剪贴板")},B=async()=>{const a=g.apiKey.apiKey||g.apiKey.key||"";if(!a){V("API Key 不存在","error");return}await Q(a,"API Key 已复制")},f=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
-
-确定要关闭吗?`,"确定关闭","取消")&&F("close"):confirm(`关闭后将无法再次查看完整的API Key,请确保已经妥善保存。
-
-确定要关闭吗?`)&&F("close")},x=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有保存API Key,关闭后将无法再次查看。
-
-建议您先复制API Key再关闭。`,"仍然关闭","返回复制")&&F("close"):confirm(`您还没有保存API Key,关闭后将无法再次查看。
-
-确定要关闭吗?`)&&F("close")};return(a,z)=>(n(),we(Ee,{to:"body"},[e("div",Nl,[e("div",Hl,[e("div",{class:"mb-6 flex items-center justify-between"},[z[1]||(z[1]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-check text-lg text-white"})]),e("div",null,[e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"API Key 创建成功"),e("p",{class:"text-sm text-gray-600 dark:text-gray-400"},"请妥善保存您的 API Key")])],-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"直接关闭(不推荐)",onClick:x},z[0]||(z[0]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),z[9]||(z[9]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4 dark:border-amber-500 dark:bg-amber-900/20"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400 dark:bg-amber-500"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900 dark:text-amber-400"},"重要提醒"),e("p",{class:"text-sm text-amber-800 dark:text-amber-300"}," 这是您唯一能看到完整 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即复制并妥善保存。 ")])])],-1)),e("div",Yl,[e("div",null,[z[2]||(z[2]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 名称",-1)),e("div",Ql,[e("span",Jl,c(k.apiKey.name),1)])]),k.apiKey.description?(n(),d("div",Xl,[z[3]||(z[3]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"备注",-1)),e("div",Zl,[e("span",en,c(k.apiKey.description||"无描述"),1)])])):w("",!0),e("div",null,[z[4]||(z[4]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),e("div",tn,[e("div",sn,c(S()),1),e("div",an,[e("button",{class:"btn-icon-sm bg-gray-700 hover:bg-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600",title:j.value?"隐藏API Key":"显示完整API Key",type:"button",onClick:W},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye","text-gray-300"])},null,2)],8,rn)])]),z[5]||(z[5]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 点击眼睛图标切换显示模式,使用下方按钮复制环境变量配置 ",-1))])]),e("div",{class:"flex flex-col gap-3 sm:gap-4"},[e("div",{class:"flex flex-col gap-3 sm:flex-row sm:gap-4"},[e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-blue-200 bg-blue-50 px-5 py-3 text-sm font-semibold text-blue-700 transition-colors hover:border-blue-300 hover:bg-blue-100 dark:border-blue-500/50 dark:bg-blue-500/10 dark:text-blue-200 dark:hover:bg-blue-500/20 sm:flex-1 sm:text-base",onClick:B},z[6]||(z[6]=[e("i",{class:"fas fa-key"},null,-1),h(" 仅复制密钥 ",-1)])),e("button",{class:"btn btn-primary flex w-full items-center justify-center gap-2 px-5 py-3 text-sm font-semibold sm:flex-1 sm:text-base",onClick:H},z[7]||(z[7]=[e("i",{class:"fas fa-copy"},null,-1),h(" 复制Claude配置 ",-1)]))]),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-xl border border-gray-300 bg-gray-200 px-5 py-3 text-sm font-semibold text-gray-800 transition-colors hover:border-gray-400 hover:bg-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600 sm:text-base",onClick:f},z[8]||(z[8]=[e("i",{class:"fas fa-check-circle"},null,-1),h(" 我已保存 ",-1)]))])])])]))}},ln=Se(on,[["__scopeId","data-v-a3d3d870"]]),nn={class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},dn={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-8"},un={class:"mb-6 flex items-center justify-between"},cn={class:"flex items-center gap-3"},gn={class:"text-sm text-gray-600"},pn={class:"mb-6 grid grid-cols-2 gap-4 md:grid-cols-4"},mn={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4"},xn={class:"flex items-center justify-between"},yn={class:"mt-1 text-2xl font-bold text-blue-900"},fn={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4"},bn={class:"flex items-center justify-between"},vn={class:"mt-1 truncate text-lg font-bold text-green-900"},kn={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4"},wn={class:"flex items-center justify-between"},hn={class:"mt-1 text-lg font-bold text-purple-900"},An={class:"rounded-lg border border-orange-200 bg-gradient-to-br from-orange-50 to-orange-100 p-4"},Cn={class:"flex items-center justify-between"},$n={class:"mt-1 text-lg font-bold text-orange-900"},In={class:"mb-6"},Kn={class:"mb-3 flex items-center justify-between"},Ln={class:"flex items-center gap-2"},Dn={key:0,class:"custom-scrollbar max-h-48 overflow-y-auto rounded-lg bg-gray-900 p-4"},_n={class:"font-mono text-xs text-gray-300"},Tn={__name:"BatchApiKeyModal",props:{apiKeys:{type:Array,required:!0}},emits:["close"],setup(k,{emit:N}){const g=k,F=N,j=I(!1),L=R(()=>{if(g.apiKeys.length>0){const x=g.apiKeys[0],a=x.name.match(/^(.+)_\d+$/);return a?a[1]:x.name}return""}),C=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].permissions;return{all:"全部服务",claude:"仅 Claude",gemini:"仅 Gemini"}[x]||x},W=()=>{if(g.apiKeys.length===0)return"未知";const x=g.apiKeys[0].expiresAt;if(!x)return"永不过期";const a=new Date(x),_=Math.ceil((a-new Date)/(1e3*60*60*24));return _<=7?`${_}天`:_<=30?`${Math.ceil(_/7)}周`:_<=365?`${Math.ceil(_/30)}个月`:`${Math.ceil(_/365)}年`},S=()=>{j.value=!j.value},Q=()=>{const a=g.apiKeys.slice(0,10).map(z=>`${z.name}: ${z.apiKey||z.key||""}`);return g.apiKeys.length>10&&a.push(`... 还有 ${g.apiKeys.length-10} 个 API Key`),a.join(`
-`)},H=()=>{const x=g.apiKeys.map(K=>`${K.name}: ${K.apiKey||K.key||""}`).join(`
-`),a=new Blob([x],{type:"text/plain;charset=utf-8"}),z=URL.createObjectURL(a),_=document.createElement("a");_.href=z;const q=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);_.download=`api-keys-${L.value}-${q}.txt`,document.body.appendChild(_),_.click(),document.body.removeChild(_),URL.revokeObjectURL(z),V("API Keys 文件已下载","success")},B=async()=>{window.showConfirm?await window.showConfirm("关闭提醒",`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
-
-确定要关闭吗?`,"确定关闭","返回下载")&&F("close"):confirm(`关闭后将无法再次查看这些 API Key,请确保已经下载并妥善保存。
-
-确定要关闭吗?`)&&F("close")},f=async()=>{window.showConfirm?await window.showConfirm("确定要关闭吗?",`您还没有下载 API Keys,关闭后将无法再次查看。
-
-强烈建议您先下载保存。`,"仍然关闭","返回下载")&&F("close"):confirm(`您还没有下载 API Keys,关闭后将无法再次查看。
-
-确定要关闭吗?`)&&F("close")};return(x,a)=>(n(),we(Ee,{to:"body"},[e("div",nn,[e("div",dn,[e("div",un,[e("div",cn,[a[1]||(a[1]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-layer-group text-lg text-white"})],-1)),e("div",null,[a[0]||(a[0]=e("h3",{class:"text-xl font-bold text-gray-900"},"批量创建成功",-1)),e("p",gn,"成功创建 "+c(k.apiKeys.length)+" 个 API Key",1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",title:"直接关闭(不推荐)",onClick:f},a[2]||(a[2]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),a[14]||(a[14]=e("div",{class:"mb-6 border-l-4 border-amber-400 bg-amber-50 p-4"},[e("div",{class:"flex items-start"},[e("div",{class:"mt-0.5 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-amber-400"},[e("i",{class:"fas fa-exclamation-triangle text-sm text-white"})]),e("div",{class:"ml-3"},[e("h5",{class:"mb-1 font-semibold text-amber-900"},"重要提醒"),e("p",{class:"text-sm text-amber-800"}," 这是您唯一能看到所有 API Key 的机会。关闭此窗口后,系统将不再显示完整的 API Key。请立即下载并妥善保存。 ")])])],-1)),e("div",pn,[e("div",mn,[e("div",xn,[e("div",null,[a[3]||(a[3]=e("p",{class:"text-xs font-medium text-blue-600"},"创建数量",-1)),e("p",yn,c(k.apiKeys.length),1)]),a[4]||(a[4]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-blue-500 bg-opacity-20"},[e("i",{class:"fas fa-key text-blue-600"})],-1))])]),e("div",fn,[e("div",bn,[e("div",null,[a[5]||(a[5]=e("p",{class:"text-xs font-medium text-green-600"},"基础名称",-1)),e("p",vn,c(L.value),1)]),a[6]||(a[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-green-500 bg-opacity-20"},[e("i",{class:"fas fa-tag text-green-600"})],-1))])]),e("div",kn,[e("div",wn,[e("div",null,[a[7]||(a[7]=e("p",{class:"text-xs font-medium text-purple-600"},"权限范围",-1)),e("p",hn,c(C()),1)]),a[8]||(a[8]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-purple-500 bg-opacity-20"},[e("i",{class:"fas fa-shield-alt text-purple-600"})],-1))])]),e("div",An,[e("div",Cn,[e("div",null,[a[9]||(a[9]=e("p",{class:"text-xs font-medium text-orange-600"},"过期时间",-1)),e("p",$n,c(W()),1)]),a[10]||(a[10]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-lg bg-orange-500 bg-opacity-20"},[e("i",{class:"fas fa-clock text-orange-600"})],-1))])])]),e("div",In,[e("div",Kn,[a[12]||(a[12]=e("label",{class:"text-sm font-semibold text-gray-700"},"API Keys 预览",-1)),e("div",Ln,[e("button",{class:"flex items-center gap-1 text-xs text-blue-600 hover:text-blue-800",type:"button",onClick:S},[e("i",{class:O(["fas",j.value?"fa-eye-slash":"fa-eye"])},null,2),h(" "+c(j.value?"隐藏":"显示")+"预览 ",1)]),a[11]||(a[11]=e("span",{class:"text-xs text-gray-500"},"(最多显示前10个)",-1))])]),j.value?(n(),d("div",Dn,[e("pre",_n,c(Q()),1)])):w("",!0)]),e("div",{class:"flex gap-3"},[e("button",{class:"btn btn-primary flex flex-1 items-center justify-center gap-2 px-6 py-3 font-semibold",onClick:H},a[13]||(a[13]=[e("i",{class:"fas fa-download"},null,-1),h(" 下载所有 API Keys ",-1)])),e("button",{class:"rounded-xl border border-gray-300 bg-gray-200 px-6 py-3 font-semibold text-gray-800 transition-colors hover:bg-gray-300",onClick:B}," 我已保存 ")]),a[15]||(a[15]=e("div",{class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"flex items-start text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-2 mt-0.5 flex-shrink-0"}),e("span",null," 下载的文件格式为文本文件(.txt),每行包含一个 API Key。 请将文件保存在安全的位置,避免泄露。 ")])],-1))])])]))}},Sn=Se(Tn,[["__scopeId","data-v-b0b904b9"]]),Un={class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Rn={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-4xl flex-col p-4 sm:p-6 md:p-8"},Mn={class:"mb-4 flex items-center justify-between sm:mb-6"},Pn={class:"flex items-center gap-2 sm:gap-3"},Vn={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},En={class:"rounded-lg bg-blue-50 p-4 dark:bg-blue-900/20"},On={class:"flex items-start gap-3"},jn={class:"mt-1 text-sm text-blue-700 dark:text-blue-400"},Gn={class:"space-y-4"},zn={class:"flex flex-wrap gap-4"},qn={class:"flex cursor-pointer items-center"},Fn={class:"flex cursor-pointer items-center"},Wn={class:"flex cursor-pointer items-center"},Bn={class:"flex cursor-pointer items-center"},Nn={key:0,class:"space-y-3"},Hn={key:0},Yn={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Qn={class:"flex flex-wrap gap-2"},Jn=["onClick"],Xn={key:1},Zn={class:"flex flex-wrap gap-2"},ei=["onClick"],ti={class:"flex gap-2"},si=["onKeypress"],ai={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/20"},ri={class:"space-y-2"},oi={class:"grid grid-cols-1 gap-2 lg:grid-cols-3"},li={class:"mb-3 flex items-center gap-4"},ni={class:"flex gap-4"},ii={class:"flex cursor-pointer items-center"},di={class:"flex cursor-pointer items-center"},ui={class:"flex cursor-pointer items-center"},ci={class:"flex flex-wrap gap-4"},gi={class:"flex cursor-pointer items-center"},pi={class:"flex cursor-pointer items-center"},mi={class:"flex cursor-pointer items-center"},xi={class:"flex cursor-pointer items-center"},yi={class:"flex cursor-pointer items-center"},fi={class:"flex cursor-pointer items-center"},bi={class:"mb-3 flex items-center justify-between"},vi=["disabled"],ki={class:"grid grid-cols-1 gap-3"},wi={class:"flex gap-3 pt-4"},hi=["disabled"],Ai={key:0,class:"loading-spinner mr-2"},Ci={key:1,class:"fas fa-save mr-2"},Gt="__KEEP_ORIGINAL__",$i={__name:"BatchEditApiKeyModal",props:{selectedKeys:{type:Array,required:!0},accounts:{type:Object,default:()=>({claude:[],gemini:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]})}},emits:["close","success"],setup(k,{emit:N}){const g=k,F=N,j=qt(),L=I(!1),C=I(!1),W=I({claude:[],gemini:[],openai:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),S=I(""),Q=I([]),H=I("none"),B=R(()=>g.selectedKeys.length),f=R(()=>Q.value.filter(l=>!x.tags.includes(l))),x=Ye({rateLimitCost:"",rateLimitWindow:"",rateLimitRequests:"",concurrencyLimit:"",dailyCostLimit:"",totalCostLimit:"",weeklyOpusCostLimit:"",permissions:"",claudeAccountId:"",geminiAccountId:"",openaiAccountId:"",bedrockAccountId:"",droidAccountId:"",tags:[],isActive:null}),a=[{value:Gt,label:"不修改"},{value:"SHARED_POOL",label:"使用共享账号池"}],z=l=>R({get:()=>x[l]===""?Gt:x[l],set:o=>{!o||o===Gt?x[l]="":x[l]=o}}),_=z("claudeAccountId"),q=z("geminiAccountId"),K=z("openaiAccountId"),$=z("bedrockAccountId"),X=z("droidAccountId"),le=l=>!x.permissions||x.permissions==="all"?!0:x.permissions===l,ue=()=>{if(S.value&&S.value.trim()){const l=S.value.trim();x.tags.includes(l)||x.tags.push(l),S.value=""}},fe=l=>{x.tags.includes(l)||x.tags.push(l)},pe=l=>{x.tags.splice(l,1)},Ke=async()=>{var l,o;C.value=!0;try{const[p,A,u,i,y,ie,me,xe,he]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),ce=[];p.success&&((l=p.data)==null||l.forEach(J=>{ce.push({...J,platform:"claude-oauth",isDedicated:J.accountType==="dedicated"})})),A.success&&((o=A.data)==null||o.forEach(J=>{ce.push({...J,platform:"claude-console",isDedicated:J.accountType==="dedicated"})})),W.value.claude=ce;const Ae=[];u.success&&(u.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini",isDedicated:J.accountType==="dedicated"})}),i.success&&(i.data||[]).forEach(J=>{Ae.push({...J,platform:"gemini-api",isDedicated:J.accountType==="dedicated"})}),W.value.gemini=Ae;const Y=[];if(y.success&&(y.data||[]).forEach(J=>{Y.push({...J,platform:"openai",isDedicated:J.accountType==="dedicated"})}),ie.success&&(ie.data||[]).forEach(J=>{Y.push({...J,platform:"openai-responses",isDedicated:J.accountType==="dedicated"})}),W.value.openai=Y,me.success&&(W.value.bedrock=(me.data||[]).map(J=>({...J,isDedicated:J.accountType==="dedicated"}))),xe.success&&(W.value.droid=(xe.data||[]).map(J=>({...J,platform:"droid",isDedicated:J.accountType==="dedicated"}))),he.success){const J=he.data||[];W.value.claudeGroups=J.filter(be=>be.platform==="claude"),W.value.geminiGroups=J.filter(be=>be.platform==="gemini"),W.value.openaiGroups=J.filter(be=>be.platform==="openai"),W.value.droidGroups=J.filter(be=>be.platform==="droid")}V("账号列表已刷新","success")}catch{V("刷新账号列表失败","error")}finally{C.value=!1}},T=async()=>{L.value=!0;try{const l={};x.rateLimitCost!==""&&x.rateLimitCost!==null&&(l.rateLimitCost=parseFloat(x.rateLimitCost)),x.rateLimitWindow!==""&&x.rateLimitWindow!==null&&(l.rateLimitWindow=parseInt(x.rateLimitWindow)),x.rateLimitRequests!==""&&x.rateLimitRequests!==null&&(l.rateLimitRequests=parseInt(x.rateLimitRequests)),x.concurrencyLimit!==""&&x.concurrencyLimit!==null&&(l.concurrencyLimit=parseInt(x.concurrencyLimit)),x.dailyCostLimit!==""&&x.dailyCostLimit!==null&&(l.dailyCostLimit=parseFloat(x.dailyCostLimit)),x.totalCostLimit!==""&&x.totalCostLimit!==null&&(l.totalCostLimit=parseFloat(x.totalCostLimit)),x.weeklyOpusCostLimit!==""&&x.weeklyOpusCostLimit!==null&&(l.weeklyOpusCostLimit=parseFloat(x.weeklyOpusCostLimit)),x.permissions!==""&&(l.permissions=x.permissions),x.claudeAccountId!==""&&(x.claudeAccountId==="SHARED_POOL"?(l.claudeAccountId=null,l.claudeConsoleAccountId=null):x.claudeAccountId.startsWith("console:")?(l.claudeConsoleAccountId=x.claudeAccountId.substring(8),l.claudeAccountId=null):(x.claudeAccountId.startsWith("group:"),l.claudeAccountId=x.claudeAccountId,l.claudeConsoleAccountId=null)),x.geminiAccountId!==""&&(x.geminiAccountId==="SHARED_POOL"?l.geminiAccountId=null:l.geminiAccountId=x.geminiAccountId),x.openaiAccountId!==""&&(x.openaiAccountId==="SHARED_POOL"?l.openaiAccountId=null:l.openaiAccountId=x.openaiAccountId),x.bedrockAccountId!==""&&(x.bedrockAccountId==="SHARED_POOL"?l.bedrockAccountId=null:l.bedrockAccountId=x.bedrockAccountId),x.droidAccountId!==""&&(x.droidAccountId==="SHARED_POOL"?l.droidAccountId=null:l.droidAccountId=x.droidAccountId),x.isActive!==null&&(l.isActive=x.isActive),H.value!=="none"&&(l.tags=x.tags,l.tagOperation=H.value);const o=await E.put("/admin/api-keys/batch",{keyIds:g.selectedKeys,updates:l});if(o.success){const{successCount:p,failedCount:A,errors:u}=o.data;if(p>0){if(V(`成功批量编辑 ${p} 个 API Keys`,"success"),A>0){const i=u.map(y=>`${y.keyId}: ${y.error}`).join(`
-`);V(`${A} 个编辑失败:
-${i}`,"warning")}}else V("所有 API Keys 编辑失败","error");F("success"),F("close")}else V(o.message||"批量编辑失败","error")}catch(l){V("批量编辑失败","error"),console.error("批量编辑 API Keys 失败:",l)}finally{L.value=!1}};return ut(async()=>{if(Q.value=await j.fetchTags(),g.accounts){const l=(g.accounts.gemini||[]).map(p=>({...p,platform:p.platform||"gemini"})),o=[];g.accounts.openai&&g.accounts.openai.forEach(p=>{o.push({...p,platform:p.platform||"openai"})}),g.accounts.openaiResponses&&g.accounts.openaiResponses.forEach(p=>{o.push({...p,platform:p.platform||"openai-responses"})}),W.value={claude:g.accounts.claude||[],gemini:l,openai:o,bedrock:g.accounts.bedrock||[],droid:(g.accounts.droid||[]).map(p=>({...p,platform:p.platform||"droid"})),claudeGroups:g.accounts.claudeGroups||[],geminiGroups:g.accounts.geminiGroups||[],openaiGroups:g.accounts.openaiGroups||[],droidGroups:g.accounts.droidGroups||[]}}}),(l,o)=>(n(),we(Ee,{to:"body"},[e("div",Un,[e("div",Rn,[e("div",Mn,[e("div",Pn,[o[28]||(o[28]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-edit text-sm text-white sm:text-base"})],-1)),e("h3",Vn," 批量编辑 API Keys ("+c(B.value)+" 个) ",1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:o[0]||(o[0]=p=>l.$emit("close"))},o[29]||(o[29]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-4 sm:space-y-6",onSubmit:_e(T,["prevent"])},[e("div",En,[e("div",On,[o[31]||(o[31]=e("i",{class:"fas fa-info-circle mt-1 text-blue-500"},null,-1)),e("div",null,[o[30]||(o[30]=e("p",{class:"text-sm font-medium text-blue-800 dark:text-blue-300"},"批量编辑说明",-1)),e("p",jn," 以下设置将应用到所选的 "+c(B.value)+" 个 API Key。只有填写或修改的字段才会被更新,空白字段将保持原值不变。 ",1)])])]),e("div",null,[o[41]||(o[41]=e("label",{class:"mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"}," 标签 (批量操作) ",-1)),e("div",Gn,[e("div",zn,[e("label",qn,[D(e("input",{"onUpdate:modelValue":o[1]||(o[1]=p=>H.value=p),class:"mr-2",type:"radio",value:"replace"},null,512),[[Ie,H.value]]),o[32]||(o[32]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"替换标签",-1))]),e("label",Fn,[D(e("input",{"onUpdate:modelValue":o[2]||(o[2]=p=>H.value=p),class:"mr-2",type:"radio",value:"add"},null,512),[[Ie,H.value]]),o[33]||(o[33]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"添加标签",-1))]),e("label",Wn,[D(e("input",{"onUpdate:modelValue":o[3]||(o[3]=p=>H.value=p),class:"mr-2",type:"radio",value:"remove"},null,512),[[Ie,H.value]]),o[34]||(o[34]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"移除标签",-1))]),e("label",Bn,[D(e("input",{"onUpdate:modelValue":o[4]||(o[4]=p=>H.value=p),class:"mr-2",type:"radio",value:"none"},null,512),[[Ie,H.value]]),o[35]||(o[35]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改标签",-1))])]),H.value!=="none"?(n(),d("div",Nn,[x.tags.length>0?(n(),d("div",Hn,[e("div",Yn,c(H.value==="replace"?"新标签列表:":H.value==="add"?"要添加的标签:":"要移除的标签:"),1),e("div",Qn,[(n(!0),d(Z,null,oe(x.tags,(p,A)=>(n(),d("span",{key:"selected-"+A,class:"inline-flex items-center gap-1 rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},[h(c(p)+" ",1),e("button",{class:"ml-1 hover:text-blue-900",type:"button",onClick:u=>pe(A)},o[36]||(o[36]=[e("i",{class:"fas fa-times text-xs"},null,-1)]),8,Jn)]))),128))])])):w("",!0),f.value.length>0?(n(),d("div",Xn,[o[38]||(o[38]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 点击选择已有标签: ",-1)),e("div",Zn,[(n(!0),d(Z,null,oe(f.value,p=>(n(),d("button",{key:"available-"+p,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-3 py-1 text-sm text-gray-700 transition-colors hover:bg-blue-100 hover:text-blue-700 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-blue-900/30 dark:hover:text-blue-300",type:"button",onClick:A=>fe(p)},[o[37]||(o[37]=e("i",{class:"fas fa-tag text-xs text-gray-500 dark:text-gray-400"},null,-1)),h(" "+c(p),1)],8,ei))),128))])])):w("",!0),e("div",null,[o[40]||(o[40]=e("div",{class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"}," 创建新标签: ",-1)),e("div",ti,[D(e("input",{"onUpdate:modelValue":o[5]||(o[5]=p=>S.value=p),class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入新标签名称",type:"text",onKeypress:it(_e(ue,["prevent"]),["enter"])},null,40,si),[[te,S.value]]),e("button",{class:"rounded-lg bg-green-500 px-4 py-2 text-white transition-colors hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700",type:"button",onClick:ue},o[39]||(o[39]=[e("i",{class:"fas fa-plus"},null,-1)]))])])])):w("",!0)])]),e("div",ai,[o[45]||(o[45]=e("div",{class:"mb-2 flex items-center gap-2"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded bg-blue-500"},[e("i",{class:"fas fa-tachometer-alt text-xs text-white"})]),e("h4",{class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},"速率限制设置")],-1)),e("div",ri,[e("div",oi,[e("div",null,[o[42]||(o[42]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"}," 时间窗口 (分钟) ",-1)),D(e("input",{"onUpdate:modelValue":o[6]||(o[6]=p=>x.rateLimitWindow=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitWindow]])]),e("div",null,[o[43]||(o[43]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"请求次数限制",-1)),D(e("input",{"onUpdate:modelValue":o[7]||(o[7]=p=>x.rateLimitRequests=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"1",placeholder:"不修改",type:"number"},null,512),[[te,x.rateLimitRequests]])]),e("div",null,[o[44]||(o[44]=e("label",{class:"mb-1 block text-xs font-medium text-gray-700 dark:text-gray-300"},"费用限制 (美元)",-1)),D(e("input",{"onUpdate:modelValue":o[8]||(o[8]=p=>x.rateLimitCost=p),class:"form-input w-full border-gray-300 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改",step:"0.01",type:"number"},null,512),[[te,x.rateLimitCost]])])])])]),e("div",null,[o[46]||(o[46]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[9]||(o[9]=p=>x.dailyCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.dailyCostLimit]])]),e("div",null,[o[47]||(o[47]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 总费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[10]||(o[10]=p=>x.totalCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.totalCostLimit]])]),e("div",null,[o[48]||(o[48]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," Claude 模型周费用限制 (美元) ",-1)),D(e("input",{"onUpdate:modelValue":o[11]||(o[11]=p=>x.weeklyOpusCostLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",step:"0.01",type:"number"},null,512),[[te,x.weeklyOpusCostLimit]]),o[49]||(o[49]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置 Claude 模型的周费用限制(周一到周日),仅对 Claude 模型请求生效 ",-1))]),e("div",null,[o[50]||(o[50]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"并发限制",-1)),D(e("input",{"onUpdate:modelValue":o[12]||(o[12]=p=>x.concurrencyLimit=p),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",min:"0",placeholder:"不修改 (0 表示无限制)",type:"number"},null,512),[[te,x.concurrencyLimit]])]),e("div",null,[e("div",li,[o[54]||(o[54]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"激活状态",-1)),e("div",ni,[e("label",ii,[D(e("input",{"onUpdate:modelValue":o[13]||(o[13]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!0},null,512),[[Ie,x.isActive]]),o[51]||(o[51]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"激活",-1))]),e("label",di,[D(e("input",{"onUpdate:modelValue":o[14]||(o[14]=p=>x.isActive=p),class:"mr-2",type:"radio",value:!1},null,512),[[Ie,x.isActive]]),o[52]||(o[52]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"禁用",-1))]),e("label",ui,[D(e("input",{"onUpdate:modelValue":o[15]||(o[15]=p=>x.isActive=p),class:"mr-2",type:"radio",value:null},null,512),[[Ie,x.isActive]]),o[53]||(o[53]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"不修改",-1))])])])]),e("div",null,[o[61]||(o[61]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"服务权限",-1)),e("div",ci,[e("label",gi,[D(e("input",{"onUpdate:modelValue":o[16]||(o[16]=p=>x.permissions=p),class:"mr-2",type:"radio",value:""},null,512),[[Ie,x.permissions]]),o[55]||(o[55]=e("span",{class:"text-sm text-gray-700"},"不修改",-1))]),e("label",pi,[D(e("input",{"onUpdate:modelValue":o[17]||(o[17]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"all"},null,512),[[Ie,x.permissions]]),o[56]||(o[56]=e("span",{class:"text-sm text-gray-700"},"全部服务",-1))]),e("label",mi,[D(e("input",{"onUpdate:modelValue":o[18]||(o[18]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"claude"},null,512),[[Ie,x.permissions]]),o[57]||(o[57]=e("span",{class:"text-sm text-gray-700"},"仅 Claude",-1))]),e("label",xi,[D(e("input",{"onUpdate:modelValue":o[19]||(o[19]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"gemini"},null,512),[[Ie,x.permissions]]),o[58]||(o[58]=e("span",{class:"text-sm text-gray-700"},"仅 Gemini",-1))]),e("label",yi,[D(e("input",{"onUpdate:modelValue":o[20]||(o[20]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"openai"},null,512),[[Ie,x.permissions]]),o[59]||(o[59]=e("span",{class:"text-sm text-gray-700"},"仅 OpenAI",-1))]),e("label",fi,[D(e("input",{"onUpdate:modelValue":o[21]||(o[21]=p=>x.permissions=p),class:"mr-2",type:"radio",value:"droid"},null,512),[[Ie,x.permissions]]),o[60]||(o[60]=e("span",{class:"text-sm text-gray-700"},"仅 Droid",-1))])])]),e("div",null,[e("div",bi,[o[62]||(o[62]=e("label",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"专属账号绑定",-1)),e("button",{class:"flex items-center gap-1 text-sm text-blue-600 transition-colors hover:text-blue-800 disabled:cursor-not-allowed disabled:opacity-50 dark:text-blue-400 dark:hover:text-blue-300",disabled:C.value,title:"刷新账号列表",type:"button",onClick:Ke},[e("i",{class:O(["fas",C.value?"fa-spinner fa-spin":"fa-sync-alt","text-xs"])},null,2),e("span",null,c(C.value?"刷新中...":"刷新账号"),1)],8,vi)]),e("div",ki,[e("div",null,[o[63]||(o[63]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Claude 专属账号",-1)),ae(Le,{modelValue:nt(_),"onUpdate:modelValue":o[22]||(o[22]=p=>lt(_)?_.value=p:null),accounts:W.value.claude,"default-option-text":"请选择Claude账号",disabled:!le("claude"),groups:W.value.claudeGroups,placeholder:"请选择Claude账号",platform:"claude","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[64]||(o[64]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Gemini 专属账号",-1)),ae(Le,{modelValue:nt(q),"onUpdate:modelValue":o[23]||(o[23]=p=>lt(q)?q.value=p:null),accounts:W.value.gemini,"default-option-text":"请选择Gemini账号",disabled:!le("gemini"),groups:W.value.geminiGroups,placeholder:"请选择Gemini账号",platform:"gemini","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[65]||(o[65]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"OpenAI 专属账号",-1)),ae(Le,{modelValue:nt(K),"onUpdate:modelValue":o[24]||(o[24]=p=>lt(K)?K.value=p:null),accounts:W.value.openai,"default-option-text":"请选择OpenAI账号",disabled:!le("openai"),groups:W.value.openaiGroups,placeholder:"请选择OpenAI账号",platform:"openai","special-options":a},null,8,["modelValue","accounts","disabled","groups"])]),e("div",null,[o[66]||(o[66]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Bedrock 专属账号",-1)),ae(Le,{modelValue:nt($),"onUpdate:modelValue":o[25]||(o[25]=p=>lt($)?$.value=p:null),accounts:W.value.bedrock,"default-option-text":"请选择Bedrock账号",disabled:!le("openai"),groups:[],placeholder:"请选择Bedrock账号",platform:"bedrock","special-options":a},null,8,["modelValue","accounts","disabled"])]),e("div",null,[o[67]||(o[67]=e("label",{class:"mb-1 block text-sm font-medium text-gray-600 dark:text-gray-400"},"Droid 专属账号",-1)),ae(Le,{modelValue:nt(X),"onUpdate:modelValue":o[26]||(o[26]=p=>lt(X)?X.value=p:null),accounts:W.value.droid,"default-option-text":"请选择Droid账号",disabled:!le("droid"),groups:W.value.droidGroups,placeholder:"请选择Droid账号",platform:"droid","special-options":a},null,8,["modelValue","accounts","disabled","groups"])])])]),e("div",wi,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:o[27]||(o[27]=p=>l.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:L.value,type:"submit"},[L.value?(n(),d("div",Ai)):(n(),d("i",Ci)),h(" "+c(L.value?"保存中...":"批量保存"),1)],8,hi)])],32)])])]))}},Ii=Se($i,[["__scopeId","data-v-e5e64131"]]),Ki={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},Li={class:"modal-content relative mx-auto w-full max-w-lg p-8"},Di={class:"mb-6 flex items-center justify-between"},_i={class:"flex items-center gap-3"},Ti={class:"text-sm text-gray-600 dark:text-gray-400"},Si={class:"space-y-6"},Ui={class:"rounded-lg border border-gray-200 bg-gradient-to-r from-gray-50 to-gray-100 p-4 dark:border-gray-600 dark:from-gray-700 dark:to-gray-800"},Ri={class:"flex items-center justify-between"},Mi={class:"text-sm font-semibold text-gray-800 dark:text-gray-200"},Pi={class:"ml-2 text-xs font-normal text-gray-600"},Vi={class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},Ei={key:0,class:"mb-4"},Oi={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ji={class:"mb-3 grid grid-cols-3 gap-2"},Gi=["onClick"],zi={key:1,class:"animate-fadeIn"},qi=["min"],Fi={key:2,class:"rounded-lg border border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-indigo-900/20"},Wi={class:"flex items-center justify-between"},Bi={class:"text-sm font-semibold text-blue-900 dark:text-blue-200"},Ni={class:"flex gap-3 pt-2"},Hi=["disabled"],Yi={key:0,class:"loading-spinner mr-2"},Qi={key:1,class:"fas fa-save mr-2"},Ji={__name:"ExpiryEditModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","save"],setup(k,{expose:N,emit:g}){const F=k,j=g,L=I(!1),C=Ye({expireDuration:"",customExpireDate:"",expiresAt:null}),W=[{value:"",label:"永不过期"},{value:"1d",label:"1 天"},{value:"7d",label:"7 天"},{value:"30d",label:"30 天"},{value:"90d",label:"90 天"},{value:"180d",label:"180 天"},{value:"365d",label:"1 年"},{value:"730d",label:"2 年"}],S=R(()=>{const K=new Date;return K.setMinutes(K.getMinutes()+1),K.toISOString().slice(0,16)});Te(()=>F.show,K=>{K&&Q()}),Te(()=>{var K;return(K=F.apiKey)==null?void 0:K.id},K=>{K&&F.show&&Q()});const Q=()=>{L.value=!1,F.apiKey.expiresAt?(C.expireDuration="custom",C.customExpireDate=new Date(F.apiKey.expiresAt).toISOString().slice(0,16),C.expiresAt=F.apiKey.expiresAt):(C.expireDuration="",C.customExpireDate="",C.expiresAt=null)},H=K=>{if(C.expireDuration=K,!K){C.expiresAt=null;return}if(K==="custom")return;const $=new Date,X=K.match(/(\d+)([dhmy])/);if(X){const[,le,ue]=X,fe=parseInt(le);switch(ue){case"d":$.setDate($.getDate()+fe);break;case"h":$.setHours($.getHours()+fe);break;case"m":$.setMonth($.getMonth()+fe);break;case"y":$.setFullYear($.getFullYear()+fe);break}C.expiresAt=$.toISOString()}},B=()=>{C.customExpireDate&&(C.expiresAt=new Date(C.customExpireDate).toISOString())},f=K=>K?new Date(K).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",x=K=>K?new Date(K){if(!K)return null;const $=new Date,le=new Date(K)-$,ue=Math.ceil(le/(1e3*60*60*24));return le<0?{text:"已过期",class:"text-red-600"}:ue<=7?{text:`${ue} 天后过期`,class:"text-orange-600"}:ue<=30?{text:`${ue} 天后过期`,class:"text-yellow-600"}:{text:`${Math.ceil(ue/30)} 个月后过期`,class:"text-green-600"}},z=()=>{L.value=!0,j("save",{keyId:F.apiKey.id,expiresAt:C.expiresAt})},_=async()=>{let K=!0;window.showConfirm?K=await window.showConfirm("激活 API Key",`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`,"确定激活","取消"):K=confirm(`确定要立即激活此 API Key 吗?激活后将在 ${F.apiKey.activationDays||(F.apiKey.activationUnit==="hours"?24:30)} ${F.apiKey.activationUnit==="hours"?"小时":"天"}后自动过期。`),K&&(L.value=!0,j("save",{keyId:F.apiKey.id,activateNow:!0}))};return N({resetSaving:()=>{L.value=!1}}),(K,$)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",Ki,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:$[0]||($[0]=X=>K.$emit("close"))}),e("div",Li,[e("div",Di,[e("div",_i,[$[6]||($[6]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600"},[e("i",{class:"fas fa-clock text-white"})],-1)),e("div",null,[$[5]||($[5]=e("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改过期时间",-1)),e("p",Ti,' 为 "'+c(k.apiKey.name||"API Key")+'" 设置新的过期时间 ',1)])]),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:$[1]||($[1]=X=>K.$emit("close"))},$[7]||($[7]=[e("i",{class:"fas fa-times text-xl"},null,-1)]))]),e("div",Si,[e("div",Ui,[e("div",Ri,[e("div",null,[$[12]||($[12]=e("p",{class:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400"},"当前状态",-1)),e("p",Mi,[k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d(Z,{key:0},[$[8]||($[8]=e("i",{class:"fas fa-pause-circle mr-1 text-blue-500"},null,-1)),$[9]||($[9]=h(" 未激活 ",-1)),e("span",Pi," (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)],64)):k.apiKey.expiresAt?(n(),d(Z,{key:1},[h(c(f(k.apiKey.expiresAt))+" ",1),a(k.apiKey.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(k.apiKey.expiresAt).class])}," ("+c(a(k.apiKey.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:2},[$[10]||($[10]=e("i",{class:"fas fa-infinity mr-1 text-gray-500"},null,-1)),$[11]||($[11]=h(" 永不过期 ",-1))],64))])]),e("div",Vi,[e("i",{class:O(["fas fa-hourglass-half text-lg",k.apiKey.expiresAt&&x(k.apiKey.expiresAt)?"text-red-500":"text-gray-400"])},null,2)])])]),k.apiKey.expirationMode==="activation"&&!k.apiKey.isActivated?(n(),d("div",Ei,[e("button",{class:"w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-3 font-semibold text-white transition-all hover:from-blue-600 hover:to-blue-700 hover:shadow-lg",onClick:_},[$[13]||($[13]=e("i",{class:"fas fa-rocket mr-2"},null,-1)),h(" 立即激活 (激活后 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"过期) ",1)]),e("p",Oi,[$[14]||($[14]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),h(" 点击立即激活此 API Key,激活后将在 "+c(k.apiKey.activationDays||(k.apiKey.activationUnit==="hours"?24:30))+" "+c(k.apiKey.activationUnit==="hours"?"小时":"天")+"后过期 ",1)])])):w("",!0),e("div",null,[$[16]||($[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择新的期限",-1)),e("div",ji,[(n(),d(Z,null,oe(W,X=>e("button",{key:X.value,class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",C.expireDuration===X.value?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:le=>H(X.value)},c(X.label),11,Gi)),64)),e("button",{class:O(["rounded-lg px-3 py-2 text-sm font-medium transition-all",C.expireDuration==="custom"?"bg-blue-500 text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:$[2]||($[2]=X=>H("custom"))},$[15]||($[15]=[e("i",{class:"fas fa-calendar-alt mr-1"},null,-1),h(" 自定义 ",-1)]),2)])]),C.expireDuration==="custom"?(n(),d("div",zi,[$[17]||($[17]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择日期和时间",-1)),D(e("input",{"onUpdate:modelValue":$[3]||($[3]=X=>C.customExpireDate=X),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:S.value,type:"datetime-local",onChange:B},null,40,qi),[[te,C.customExpireDate]]),$[18]||($[18]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 选择一个未来的日期和时间作为过期时间 ",-1))])):w("",!0),C.expiresAt!==k.apiKey.expiresAt?(n(),d("div",Fi,[e("div",Wi,[e("div",null,[$[21]||($[21]=e("p",{class:"mb-1 text-xs font-medium text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-arrow-right mr-1"}),h(" 新的过期时间 ")],-1)),e("p",Bi,[C.expiresAt?(n(),d(Z,{key:0},[h(c(f(C.expiresAt))+" ",1),a(C.expiresAt)?(n(),d("span",{key:0,class:O(["ml-2 text-xs font-normal",a(C.expiresAt).class])}," ("+c(a(C.expiresAt).text)+") ",3)):w("",!0)],64)):(n(),d(Z,{key:1},[$[19]||($[19]=e("i",{class:"fas fa-infinity mr-1"},null,-1)),$[20]||($[20]=h(" 永不过期 ",-1))],64))])]),$[22]||($[22]=e("div",{class:"flex h-12 w-12 items-center justify-center rounded-lg bg-white shadow-sm dark:bg-gray-700"},[e("i",{class:"fas fa-check text-lg text-green-500"})],-1))])])):w("",!0),e("div",Ni,[e("button",{class:"flex-1 rounded-lg bg-gray-100 px-4 py-2.5 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:$[4]||($[4]=X=>K.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-4 py-2.5 font-semibold",disabled:L.value||C.expiresAt===k.apiKey.expiresAt,onClick:z},[L.value?(n(),d("div",Yi)):(n(),d("i",Qi)),h(" "+c(L.value?"保存中...":"保存更改"),1)],8,Hi)])])])])):w("",!0)]))}},Xi=Se(Ji,[["__scopeId","data-v-fb30c1d3"]]),Zi={class:"w-full"},ed={key:0,class:"flex items-center justify-center rounded-lg px-3 py-2 text-xs"},td={key:1,class:"space-y-1.5"},sd={class:"flex items-center justify-between text-[11px] font-medium"},ad={class:"text-gray-700 dark:text-gray-200"},rd={class:"relative h-1.5 overflow-hidden rounded-full bg-gray-200/85 dark:bg-gray-700/70"},od={class:"relative z-10 flex h-full items-center justify-between px-3"},ld={class:"flex items-center gap-1.5"},nd={class:"flex items-center gap-1.5"},id={key:0,class:"pointer-events-none absolute inset-0 opacity-0 transition-opacity duration-700 group-hover:opacity-30",style:{background:"linear-gradient(105deg, transparent 35%, rgba(255,255,255,0.55) 48%, transparent 63%)",animation:"shine 2.8s infinite"}},dd={__name:"LimitProgressBar",props:{type:{type:String,required:!0,validator:k=>["daily","opus","window","total"].includes(k)},variant:{type:String,default:"full",validator:k=>["full","compact"].includes(k)},label:{type:String,required:!0},current:{type:Number,default:0},limit:{type:Number,required:!0},showShine:{type:Boolean,default:!1}},setup(k){const N=k,g=R(()=>N.variant==="compact"),F=R(()=>{if(!N.limit||N.limit<=0)return 0;const f=N.current/N.limit*100;return Math.min(f,100)}),j=R(()=>{switch(N.type){case"daily":return"border-emerald-200/80 bg-white/80 shadow-[0_10px_24px_rgba(16,185,129,0.18)] group-hover:shadow-[0_14px_30px_rgba(16,185,129,0.22)] dark:border-emerald-500/40 dark:bg-emerald-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"opus":return"border-violet-200/80 bg-white/80 shadow-[0_10px_24px_rgba(139,92,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(139,92,246,0.22)] dark:border-violet-500/40 dark:bg-violet-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"window":return"border-sky-200/80 bg-white/80 shadow-[0_10px_24px_rgba(56,189,248,0.18)] group-hover:shadow-[0_14px_30px_rgba(56,189,248,0.22)] dark:border-sky-500/40 dark:bg-sky-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";case"total":return"border-blue-200/80 bg-white/80 shadow-[0_10px_24px_rgba(59,130,246,0.18)] group-hover:shadow-[0_14px_30px_rgba(59,130,246,0.22)] dark:border-blue-500/40 dark:bg-blue-950/40 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]";default:return"border-gray-200/80 bg-white/80 shadow-[0_10px_24px_rgba(148,163,184,0.18)] group-hover:shadow-[0_14px_30px_rgba(148,163,184,0.22)] dark:border-gray-600/50 dark:bg-gray-900/50 dark:shadow-[0_12px_28px_rgba(0,0,0,0.45)]"}}),L=R(()=>{switch(N.type){case"daily":return"bg-gradient-to-r from-emerald-50 via-green-50 to-emerald-100 dark:from-emerald-900/40 dark:via-emerald-900/20 dark:to-emerald-800/30";case"opus":return"bg-gradient-to-r from-violet-50 via-violet-100 to-fuchsia-100 dark:from-violet-900/40 dark:via-violet-900/20 dark:to-fuchsia-900/30";case"window":return"bg-gradient-to-r from-sky-50 via-sky-100 to-cyan-100 dark:from-sky-900/40 dark:via-sky-900/20 dark:to-cyan-900/30";case"total":return"bg-gradient-to-r from-blue-50 via-blue-100 to-sky-100 dark:from-blue-900/40 dark:via-blue-900/20 dark:to-sky-900/30";default:return"bg-gradient-to-r from-gray-100 via-gray-50 to-gray-200 dark:from-gray-900/30 dark:via-gray-900/10 dark:to-gray-800/30"}}),C=R(()=>{const f=F.value;return N.type==="daily"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-emerald-400 via-emerald-500 to-teal-500 dark:from-emerald-400 dark:via-emerald-500 dark:to-teal-500":N.type==="opus"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-violet-400 via-purple-500 to-fuchsia-500 dark:from-violet-400 dark:via-purple-500 dark:to-fuchsia-500":N.type==="window"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-400 via-cyan-400 to-blue-500 dark:from-sky-400 dark:via-cyan-400 dark:to-blue-500":N.type==="total"?f>=90?"bg-gradient-to-r from-rose-500 via-red-500 to-rose-600 dark:from-rose-500 dark:via-red-500 dark:to-rose-600":f>=70?"bg-gradient-to-r from-amber-400 via-orange-400 to-amber-500 dark:from-amber-400 dark:via-orange-400 dark:to-amber-500":"bg-gradient-to-r from-sky-500 via-blue-500 to-cyan-500 dark:from-sky-500 dark:via-blue-500 dark:to-cyan-500":"bg-gray-300 dark:bg-gray-400"}),W=R(()=>{const f=F.value;if(f>=95)return"bg-rose-500 dark:bg-rose-400";if(f>=80)return"bg-amber-400 dark:bg-amber-300";switch(N.type){case"daily":return"bg-emerald-500 dark:bg-emerald-400";case"opus":return"bg-violet-500 dark:bg-violet-400";case"window":return"bg-sky-500 dark:bg-sky-400";case"total":return"bg-blue-500 dark:bg-blue-400";default:return"bg-slate-400 dark:bg-slate-500"}}),S=R(()=>{const f=F.value;if(f>=95)return"text-rose-600 dark:text-rose-300";if(f>=80)return"text-amber-600 dark:text-amber-300";switch(N.type){case"daily":return"text-emerald-600 dark:text-emerald-300";case"opus":return"text-violet-600 dark:text-violet-300";case"window":return"text-sky-600 dark:text-sky-300";case"total":return"text-blue-600 dark:text-blue-300";default:return"text-gray-600 dark:text-gray-300"}}),Q=R(()=>{const f=F.value;let x="";if(f>=90)x="text-red-700 dark:text-red-400";else if(f>=70)x="text-orange-700 dark:text-orange-400";else switch(N.type){case"daily":x="text-green-700 dark:text-green-400";break;case"opus":x="text-purple-700 dark:text-purple-400";break;case"window":x="text-blue-700 dark:text-blue-400";break;default:x="text-gray-600 dark:text-gray-400"}let a="";switch(N.type){case"daily":a="fas fa-calendar-day";break;case"opus":a="fas fa-gem";break;case"window":a="fas fa-clock";break;case"total":a="fas fa-wallet";break;default:a="fas fa-infinity"}return`${a} ${x}`}),H=R(()=>{if(F.value>40)return"text-white drop-shadow-[0_1px_2px_rgba(0,0,0,0.8)]";switch(N.type){case"daily":return"text-gray-900 dark:text-gray-100";case"opus":return"text-purple-900 dark:text-purple-100";case"window":return"text-blue-900 dark:text-blue-100";case"total":return"text-blue-900 dark:text-blue-100";default:return"text-gray-900 dark:text-gray-100"}}),B=R(()=>{const f=F.value;if(f>70)return"text-white drop-shadow-[0_2px_4px_rgba(0,0,0,0.9)]";if(f>=90)return"text-red-700 dark:text-red-300";if(f>=70)return"text-orange-700 dark:text-orange-300";switch(N.type){case"daily":return"text-green-800 dark:text-green-200";case"opus":return"text-purple-800 dark:text-purple-200";case"window":return"text-blue-800 dark:text-blue-200";case"total":return"text-blue-800 dark:text-blue-200";default:return"text-gray-900 dark:text-gray-100"}});return(f,x)=>(n(),d("div",Zi,[!k.limit||k.limit<=0?(n(),d("div",ed,x[0]||(x[0]=[e("div",{class:"flex items-center gap-1.5 text-gray-600 dark:text-gray-300"},[e("i",{class:"fas fa-infinity text-sm text-gray-500 dark:text-gray-400"}),e("span",{class:"font-medium"},"无限制")],-1)]))):g.value?(n(),d("div",td,[e("div",sd,[e("div",{class:O(["flex items-center gap-1.5",S.value])},[e("i",{class:O(["text-[11px]",Q.value])},null,2),e("span",null,c(k.label),1)],2),e("span",ad,"$"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),1)]),e("div",rd,[e("div",{class:O(["absolute inset-y-0 rounded-full transition-all duration-500 ease-out",W.value]),style:$t({width:F.value+"%"})},null,6)])])):(n(),d("div",{key:2,class:O(["group relative h-9 w-full overflow-hidden rounded-xl border transition-all duration-300 ease-out",j.value])},[e("div",{class:O(["absolute inset-0",L.value])},null,2),e("div",{class:O(["absolute inset-0 h-full transition-all duration-500 ease-out",C.value]),style:$t({width:F.value+"%"})},null,6),x[1]||(x[1]=e("div",{class:"pointer-events-none absolute inset-0 rounded-xl border border-white/50 opacity-40 mix-blend-overlay dark:border-white/10"},null,-1)),e("div",od,[e("div",ld,[e("i",{class:O(["text-xs",Q.value])},null,2),e("span",{class:O(["text-xs font-semibold",H.value])},c(k.label),3)]),e("div",nd,[e("span",{class:O(["text-xs font-bold tabular-nums",B.value])}," $"+c(k.current.toFixed(2))+" / $"+c(k.limit.toFixed(2)),3)])]),k.showShine&&F.value>0?(n(),d("div",id)):w("",!0)],2))]))}},Ve=Se(dd,[["__scopeId","data-v-8a01dc56"]]),ud={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},cd={class:"modal-content relative mx-auto flex max-h-[90vh] w-[95%] max-w-5xl flex-col p-4 sm:w-full sm:p-6 md:p-8"},gd={class:"mb-4 flex items-center justify-between sm:mb-6"},pd={class:"flex items-center gap-2 sm:gap-3"},md={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},xd={class:"modal-scroll-content custom-scrollbar flex-1 overflow-y-auto"},yd={class:"mb-6 grid grid-cols-1 gap-4 md:grid-cols-2"},fd={class:"rounded-lg border border-blue-200 bg-gradient-to-br from-blue-50 to-blue-100 p-4 dark:border-blue-700 dark:from-blue-900/20 dark:to-blue-800/20"},bd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},vd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},kd={class:"rounded-lg border border-green-200 bg-gradient-to-br from-green-50 to-green-100 p-4 dark:border-green-700 dark:from-green-900/20 dark:to-green-800/20"},wd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},hd={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Ad={class:"rounded-lg border border-yellow-200 bg-gradient-to-br from-yellow-50 to-yellow-100 p-4 dark:border-yellow-700 dark:from-yellow-900/20 dark:to-yellow-800/20"},Cd={class:"text-2xl font-bold text-gray-900 dark:text-gray-100"},$d={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},Id={class:"rounded-lg border border-purple-200 bg-gradient-to-br from-purple-50 to-purple-100 p-4 dark:border-purple-700 dark:from-purple-900/20 dark:to-purple-800/20"},Kd={class:"space-y-1 text-sm"},Ld={class:"flex justify-between"},Dd={class:"font-semibold text-gray-900 dark:text-gray-100"},_d={class:"flex justify-between"},Td={class:"font-semibold text-gray-900 dark:text-gray-100"},Sd={class:"mb-6"},Ud={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Rd={class:"flex items-center justify-between"},Md={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Pd={class:"flex items-center justify-between"},Vd={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Ed={key:0,class:"flex items-center justify-between"},Od={class:"text-sm font-semibold text-purple-600"},jd={key:1,class:"flex items-center justify-between"},Gd={class:"text-sm font-semibold text-purple-600"},zd={key:0,class:"mb-6"},qd={class:"space-y-3 rounded-lg bg-gray-50 p-4 dark:bg-gray-700/50"},Fd={key:0,class:"space-y-1.5"},Wd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Bd={key:1,class:"space-y-1.5"},Nd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Hd={key:2,class:"space-y-1.5"},Yd={class:"text-right text-xs text-gray-500 dark:text-gray-400"},Qd={key:3,class:"flex items-center justify-between rounded-lg border border-purple-200/70 bg-white/60 px-3 py-2 text-sm shadow-sm dark:border-purple-500/40 dark:bg-purple-950/20"},Jd={class:"font-semibold text-purple-600 dark:text-purple-300"},Xd={key:4,class:"space-y-2"},Zd={__name:"UsageDetailModal",props:{show:{type:Boolean,required:!0},apiKey:{type:Object,required:!0}},emits:["close","open-timeline"],setup(k,{emit:N}){const g=k,F=N,j=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.requests)||0}),L=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.requests)||0}),C=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.tokens)||0}),W=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.daily)==null?void 0:o.tokens)||0}),S=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cost)||0}),Q=R(()=>g.apiKey.dailyCost||0),H=R(()=>g.apiKey.totalCostLimit||0),B=R(()=>g.apiKey.weeklyOpusCost||0),f=R(()=>g.apiKey.weeklyOpusCostLimit||0),x=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.inputTokens)||0}),a=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.outputTokens)||0}),z=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheCreateTokens)||0}),_=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.total)==null?void 0:o.cacheReadTokens)||0}),q=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.rpm)||0}),K=R(()=>{var l,o;return((o=(l=g.apiKey.usage)==null?void 0:l.averages)==null?void 0:o.tpm)||0}),$=R(()=>g.apiKey.dailyCostLimit>0||g.apiKey.totalCostLimit>0||g.apiKey.concurrencyLimit>0||g.apiKey.weeklyOpusCostLimit>0||g.apiKey.rateLimitWindow>0||g.apiKey.tokenLimit>0),X=R(()=>!g.apiKey.dailyCostLimit||g.apiKey.dailyCostLimit===0?0:Q.value/g.apiKey.dailyCostLimit*100),le=R(()=>!H.value||H.value===0?0:S.value/H.value*100),ue=R(()=>!f.value||f.value===0?0:B.value/f.value*100),fe=l=>!l&&l!==0?"0":l.toLocaleString("zh-CN"),pe=l=>l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString(),Ke=()=>{F("close")},T=()=>{var l;F("open-timeline",(l=g.apiKey)==null?void 0:l.id)};return(l,o)=>(n(),we(Ee,{to:"body"},[k.show?(n(),d("div",ud,[e("div",{class:"fixed inset-0 bg-gray-900 bg-opacity-50 backdrop-blur-sm",onClick:Ke}),e("div",cd,[e("div",gd,[e("div",pd,[o[0]||(o[0]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-chart-line text-sm text-white sm:text-base"})],-1)),e("h3",md," 使用统计详情 - "+c(k.apiKey.name),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:Ke},o[1]||(o[1]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",xd,[e("div",yd,[e("div",fd,[o[2]||(o[2]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总请求数"),e("i",{class:"fas fa-paper-plane text-blue-500"})],-1)),e("div",bd,c(fe(j.value)),1),e("div",vd," 今日: "+c(fe(L.value))+" 次 ",1)]),e("div",kd,[o[3]||(o[3]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总Token数"),e("i",{class:"fas fa-coins text-green-500"})],-1)),e("div",wd,c(pe(C.value)),1),e("div",hd," 今日: "+c(pe(W.value)),1)]),e("div",Ad,[o[4]||(o[4]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"总费用"),e("i",{class:"fas fa-dollar-sign text-yellow-600"})],-1)),e("div",Cd," $"+c(S.value.toFixed(4)),1),e("div",$d," 今日: $"+c(Q.value.toFixed(4)),1)]),e("div",Id,[o[7]||(o[7]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"平均速率"),e("i",{class:"fas fa-tachometer-alt text-purple-500"})],-1)),e("div",Kd,[e("div",Ld,[o[5]||(o[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"RPM:",-1)),e("span",Dd,c(q.value),1)]),e("div",_d,[o[6]||(o[6]=e("span",{class:"text-gray-600 dark:text-gray-400"},"TPM:",-1)),e("span",Td,c(K.value),1)])])])]),e("div",Sd,[o[12]||(o[12]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" Token 使用分布 ")],-1)),e("div",Ud,[e("div",Rd,[o[8]||(o[8]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-2 text-green-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输入 Token")],-1)),e("span",Md,c(pe(x.value)),1)]),e("div",Pd,[o[9]||(o[9]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-2 text-blue-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"输出 Token")],-1)),e("span",Vd,c(pe(a.value)),1)]),z.value>0?(n(),d("div",Ed,[o[10]||(o[10]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存创建 Token")],-1)),e("span",Od,c(pe(z.value)),1)])):w("",!0),_.value>0?(n(),d("div",jd,[o[11]||(o[11]=e("div",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-2 text-purple-500"}),e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"缓存读取 Token")],-1)),e("span",Gd,c(pe(_.value)),1)])):w("",!0)])]),$.value?(n(),d("div",zd,[o[15]||(o[15]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-red-500"}),h(" 限制设置 ")],-1)),e("div",qd,[k.apiKey.dailyCostLimit>0?(n(),d("div",Fd,[ae(Ve,{current:Q.value,label:"每日费用限制",limit:k.apiKey.dailyCostLimit,"show-shine":!0,type:"daily"},null,8,["current","limit"]),e("div",Wd," 已使用 "+c(Math.min(X.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.weeklyOpusCostLimit>0?(n(),d("div",Bd,[ae(Ve,{current:B.value,label:"Opus 周费用限制",limit:k.apiKey.weeklyOpusCostLimit,"show-shine":!0,type:"opus"},null,8,["current","limit"]),e("div",Nd," 已使用 "+c(Math.min(ue.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.totalCostLimit>0?(n(),d("div",Hd,[ae(Ve,{current:S.value,label:"总费用限制",limit:k.apiKey.totalCostLimit,"show-shine":!0,type:"total"},null,8,["current","limit"]),e("div",Yd," 已使用 "+c(Math.min(le.value,100).toFixed(1))+"% ",1)])):w("",!0),k.apiKey.concurrencyLimit>0?(n(),d("div",Qd,[o[13]||(o[13]=e("span",{class:"text-gray-600 dark:text-gray-300"},"并发限制",-1)),e("span",Jd,c(k.apiKey.currentConcurrency||0)+" / "+c(k.apiKey.concurrencyLimit),1)])):w("",!0),k.apiKey.rateLimitWindow>0?(n(),d("div",Xd,[o[14]||(o[14]=e("h5",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-clock mr-1 text-blue-500"}),h(" 时间窗口限制 ")],-1)),ae(ya,{"cost-limit":k.apiKey.rateLimitCost,"current-cost":k.apiKey.currentWindowCost,"current-requests":k.apiKey.currentWindowRequests,"current-tokens":k.apiKey.currentWindowTokens,label:"窗口状态","rate-limit-window":k.apiKey.rateLimitWindow,"request-limit":k.apiKey.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":k.apiKey.tokenLimit,"window-end-time":k.apiKey.windowEndTime,"window-remaining-seconds":k.apiKey.windowRemainingSeconds,"window-start-time":k.apiKey.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"])])):w("",!0)])])):w("",!0)]),e("div",{class:"mt-4 flex justify-end gap-2 sm:mt-6 sm:gap-3"},[e("button",{class:"btn btn-primary px-4 py-2 text-sm",type:"button",onClick:T}," 查看请求时间线 "),e("button",{class:"btn btn-secondary px-4 py-2 text-sm",type:"button",onClick:Ke}," 关闭 ")])])])):w("",!0)]))}},e0=Se(Zd,[["__scopeId","data-v-e4a6a155"]]),t0={class:"tab-content"},s0={class:"card p-4 sm:p-6"},a0={class:"mb-4 flex flex-col gap-4 sm:mb-6"},r0={class:"border-b border-gray-200 dark:border-gray-700"},o0={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},l0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},n0={key:0,class:"ml-2 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-900 dark:bg-gray-700 dark:text-gray-100"},i0={key:0,class:"tab-panel"},d0={class:"mb-4 flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"},u0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},c0={class:"group relative min-w-[140px]"},g0={key:0,class:"flex items-center"},p0={class:"group relative min-w-[140px]"},m0={class:"relative"},x0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-purple-500 text-xs text-white shadow-sm"},y0={class:"group relative min-w-[140px]"},f0={class:"relative"},b0={key:0,class:"absolute -right-2 -top-2 z-10 flex h-5 w-5 items-center justify-center rounded-full bg-orange-500 text-xs text-white shadow-sm"},v0={class:"flex min-w-[240px] flex-col gap-2 sm:flex-row sm:items-center"},k0={class:"sm:w-44"},w0={class:"group relative flex-1"},h0={class:"relative flex items-center"},A0=["placeholder"],C0={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},$0=["disabled"],I0={class:"relative"},K0={class:"relative"},L0={key:0,class:"py-12 text-center"},D0={key:1,class:"py-12 text-center"},_0={key:2,class:"table-wrapper hidden md:block"},T0={class:"table-container"},S0={class:"w-full"},U0={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},R0={key:0,class:"checkbox-column sticky left-0 z-20 min-w-[50px] px-3 py-4 text-left"},M0={class:"flex items-center"},P0=["indeterminate"],V0={key:1,class:"fas fa-sort ml-1 text-gray-400"},E0={key:1,class:"fas fa-sort ml-1 text-gray-400"},O0=["title"],j0={key:1,class:"fas fa-sort ml-1 text-gray-400"},G0={key:2,class:"fas fa-clock ml-1 text-gray-400",title:"索引更新中"},z0={key:1,class:"fas fa-sort ml-1 text-gray-400"},q0={key:1,class:"fas fa-sort ml-1 text-gray-400"},F0={key:1,class:"fas fa-sort ml-1 text-gray-400"},W0={key:0,class:"checkbox-column sticky left-0 z-10 px-3 py-3"},B0={class:"flex items-center"},N0=["value"],H0={class:"min-w-0"},Y0=["title"],Q0={key:0,class:"mt-1 text-xs text-red-600"},J0={class:"px-3 py-3"},X0={class:"space-y-1"},Z0={key:0,class:"flex items-center gap-1 text-xs text-gray-400 dark:text-gray-500"},eu={key:0,class:"flex items-center gap-1 text-xs"},tu={class:"truncate text-gray-600 dark:text-gray-400"},su={key:1,class:"flex items-center gap-1 text-xs"},au={class:"truncate text-gray-600 dark:text-gray-400"},ru={key:2,class:"flex items-center gap-1 text-xs"},ou={class:"truncate text-gray-600 dark:text-gray-400"},lu={key:3,class:"flex items-center gap-1 text-xs"},nu={class:"truncate text-gray-600 dark:text-gray-400"},iu={key:4,class:"flex items-center gap-1 text-xs"},du={class:"truncate text-gray-600 dark:text-gray-400"},uu={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},cu={class:"px-3 py-3"},gu={class:"flex flex-wrap gap-1"},pu={key:0,class:"text-xs text-gray-400"},mu={class:"whitespace-nowrap px-3 py-3"},xu={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},yu={key:0,class:"flex items-center justify-end"},fu={key:1,class:"font-semibold text-blue-600 dark:text-blue-400",style:{"font-size":"14px"}},bu={key:2,class:"text-gray-400"},vu={class:"px-2 py-2",style:{"font-size":"12px"}},ku={class:"flex flex-col gap-2"},wu={key:0,class:"space-y-2"},hu={key:2,class:"space-y-1.5"},Au={class:"flex items-center justify-between text-[10px]"},Cu={class:"flex items-center gap-1 text-sky-600 dark:text-sky-300"},$u={class:"font-medium"},Iu={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Ku={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Lu={key:0,class:"flex items-center justify-end"},Du={key:1,class:"flex items-center justify-end gap-1"},_u={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Tu={key:2,class:"text-gray-400"},Su={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Uu={key:0,class:"flex items-center justify-end"},Ru={key:1,class:"flex items-center justify-end gap-1"},Mu={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},Pu={key:2,class:"text-gray-400"},Vu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Eu={class:"flex flex-col leading-tight"},Ou=["title"],ju={key:1,class:"text-gray-400",style:{"font-size":"13px"}},Gu={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},zu=["title"],qu={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Fu={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},Wu={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Bu={class:"whitespace-nowrap px-3 py-3 text-sm text-gray-700 dark:text-gray-300"},Nu={class:"inline-flex items-center gap-1.5"},Hu={key:0,class:"inline-flex items-center text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Yu={key:1},Qu=["onClick"],Ju=["onClick"],Xu=["onClick"],Zu=["onClick"],ec={class:"operations-column operations-cell whitespace-nowrap px-3 py-3",style:{"font-size":"13px"}},tc={class:"hidden gap-1 2xl:flex"},sc=["onClick"],ac=["onClick"],rc=["onClick"],oc=["onClick"],lc=["title","onClick"],nc={class:"ml-1"},ic=["onClick"],dc={class:"flex items-center gap-1 2xl:hidden"},uc=["onClick"],cc=["onClick"],gc={key:0},pc={class:"bg-gray-50 px-3 py-3 dark:bg-gray-700",colspan:"13"},mc={key:0,class:"py-4 text-center"},xc={class:"space-y-4"},yc={class:"mb-4 flex items-center justify-between"},fc={class:"flex items-center gap-2"},bc={key:0,class:"rounded-full bg-gray-100 px-2 py-1 text-xs text-gray-500 dark:bg-gray-700 dark:text-gray-400"},vc={class:"flex items-center gap-1"},kc={class:"flex gap-1 rounded bg-gray-100 p-1 dark:bg-gray-700"},wc=["onClick"],hc={key:0,class:"py-8 text-center"},Ac={class:"mb-3 flex items-center justify-center gap-2"},Cc=["onClick"],$c={key:1,class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3"},Ic={class:"mb-3 flex items-start justify-between"},Kc={class:"flex-1"},Lc={class:"mb-1 block text-sm font-semibold text-gray-800 dark:text-gray-200"},Dc={class:"rounded-full bg-blue-50 px-2 py-1 text-xs text-gray-500 dark:bg-blue-900/30 dark:text-gray-400"},_c={class:"mb-3 space-y-2"},Tc={class:"flex items-center justify-between text-sm"},Sc={class:"font-semibold text-gray-900 dark:text-gray-100"},Uc={class:"flex items-center justify-between text-sm"},Rc={class:"font-semibold text-green-600"},Mc={class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-600"},Pc={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Vc={class:"font-medium"},Ec={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Oc={class:"font-medium"},jc={key:0,class:"flex items-center justify-between text-xs text-purple-600"},Gc={class:"font-medium"},zc={key:1,class:"flex items-center justify-between text-xs text-purple-600"},qc={class:"font-medium"},Fc={class:"mt-3 h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Wc={class:"mt-1 text-right"},Bc={class:"text-xs font-medium text-indigo-600"},Nc={key:2,class:"mt-4 rounded-lg border border-indigo-100 bg-gradient-to-r from-indigo-50 to-purple-50 p-3 dark:border-indigo-700 dark:from-indigo-900/20 dark:to-purple-900/20"},Hc={class:"flex items-center justify-between text-sm"},Yc={class:"flex gap-4 text-xs"},Qc={class:"text-gray-600 dark:text-gray-400"},Jc={class:"font-semibold text-gray-800 dark:text-gray-200"},Xc={class:"text-gray-600 dark:text-gray-400"},Zc={class:"font-semibold text-gray-800 dark:text-gray-200"},eg={key:3,class:"space-y-3 md:hidden"},tg={class:"mb-3 flex items-start justify-between"},sg={class:"flex items-center gap-3"},ag=["value"],rg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},og={class:"mt-0.5 text-xs text-gray-500 dark:text-gray-400"},lg={class:"mb-3 space-y-1.5"},ng={key:0,class:"flex flex-wrap items-center gap-1 text-xs"},ig={class:"text-gray-600 dark:text-gray-400"},dg={key:1,class:"flex flex-wrap items-center gap-1 text-xs"},ug={class:"text-gray-600 dark:text-gray-400"},cg={key:2,class:"flex flex-wrap items-center gap-1 text-xs"},gg={class:"text-gray-600 dark:text-gray-400"},pg={key:3,class:"flex flex-wrap items-center gap-1 text-xs"},mg={class:"text-gray-600 dark:text-gray-400"},xg={key:4,class:"flex flex-wrap items-center gap-1 text-xs"},yg={class:"text-gray-600 dark:text-gray-400"},fg={key:5,class:"text-xs text-gray-500 dark:text-gray-400"},bg={key:6,class:"text-xs text-red-600"},vg={class:"mb-3 space-y-2"},kg={class:"rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},wg={class:"mb-2 flex items-center justify-between"},hg={class:"text-xs text-gray-600 dark:text-gray-400"},Ag=["onClick"],Cg={class:"grid grid-cols-2 gap-3"},$g={key:0,class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Ig={key:1,class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Kg={key:2,class:"text-sm font-semibold text-gray-400"},Lg={key:0,class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},Dg={key:1,class:"text-sm font-semibold text-green-600"},_g={key:2,class:"text-sm font-semibold text-gray-400"},Tg={class:"mt-2 text-xs text-gray-600 dark:text-gray-400"},Sg={class:"flex items-center justify-between"},Ug={class:"font-medium text-gray-700 dark:text-gray-300"},Rg={class:"mt-1 flex items-center justify-between"},Mg={key:0,class:"text-gray-400 dark:text-gray-500"},Pg=["title"],Vg={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},Eg={key:2,class:"text-gray-400 dark:text-gray-500"},Og={class:"space-y-2"},jg={key:0,class:"space-y-2"},Gg={key:2,class:"space-y-2"},zg={class:"flex items-center justify-between text-xs"},qg={class:"flex items-center gap-1.5 text-sky-600 dark:text-sky-300"},Fg={class:"font-medium"},Wg={key:3,class:"flex items-center justify-center gap-1.5 py-2 text-gray-500 dark:text-gray-400"},Bg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Ng={class:"mb-1 flex justify-between"},Hg={class:"flex items-center justify-between"},Yg={class:"flex items-center gap-1"},Qg=["onClick"],Jg={key:0,class:"mb-3 flex flex-wrap gap-1"},Xg={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3 dark:border-gray-600"},Zg=["onClick"],ep=["onClick"],tp=["onClick"],sp=["onClick"],ap=["onClick"],rp={key:4,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},op={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},lp={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},np={class:"flex items-center gap-2"},ip=["value"],dp={class:"flex items-center gap-2"},up=["disabled"],cp={class:"flex items-center gap-1"},gp={key:1,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},pp=["onClick"],mp={key:2,class:"hidden px-2 text-gray-500 dark:text-gray-400 sm:inline"},xp=["disabled"],yp={key:1,class:"tab-panel"},fp={key:0,class:"py-12 text-center"},bp={key:1,class:"py-12 text-center"},vp={key:2},kp={class:"mb-4 flex justify-end"},wp={class:"table-wrapper"},hp={class:"table-container"},Ap={class:"w-full"},Cp={class:"sticky top-0 z-10 bg-gradient-to-b from-gray-50 to-gray-100/90 backdrop-blur-sm dark:from-gray-700 dark:to-gray-800/90"},$p={key:0,class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Ip={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Kp={class:"name-column sticky left-0 z-10 px-3 py-3"},Lp={class:"flex items-center"},Dp={class:"min-w-0"},_p=["title"],Tp={class:"px-3 py-3"},Sp={class:"space-y-1"},Up={key:0,class:"flex items-center gap-1 text-xs"},Rp={key:1,class:"flex items-center gap-1 text-xs"},Mp={key:2,class:"flex items-center gap-1 text-xs"},Pp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Vp={key:0,class:"px-3 py-3"},Ep={class:"text-xs"},Op={key:0,class:"text-blue-600"},jp={key:1,class:"text-green-600"},Gp={key:2,class:"text-gray-500 dark:text-gray-400"},zp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},qp={class:"px-3 py-3"},Fp={class:"text-xs"},Wp={key:0,class:"text-blue-600"},Bp={key:1,class:"text-green-600"},Np={key:2,class:"text-gray-500 dark:text-gray-400"},Hp={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},Yp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Qp={class:"font-medium text-blue-600 dark:text-blue-400",style:{"font-size":"13px"}},Jp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},Xp={class:"font-medium text-purple-600 dark:text-purple-400",style:{"font-size":"13px"}},Zp={class:"whitespace-nowrap px-3 py-3 text-right",style:{"font-size":"13px"}},em={class:"flex items-center justify-end gap-1"},tm={class:"font-medium text-gray-900 dark:text-gray-100",style:{"font-size":"13px"}},sm={class:"whitespace-nowrap px-3 py-3 text-gray-700 dark:text-gray-300",style:{"font-size":"13px"}},am={class:"flex flex-col leading-tight"},rm=["title"],om={key:1,class:"text-gray-400",style:{"font-size":"13px"}},lm={key:2,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},nm=["title"],im={key:0,class:"ml-1 text-gray-400 dark:text-gray-500"},dm={key:4,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},um={class:"operations-column operations-cell px-3 py-3"},cm={class:"flex items-center gap-2"},gm=["onClick"],pm=["onClick"],ks=16,mm={__name:"ApiKeysView",setup(k){const N=ma(),g=zt(),F=xa(),j=I([]),L=R(()=>{var s;return((s=F.oemSettings)==null?void 0:s.ldapEnabled)||!1}),C=I([]),W=I(!1),S=I(!1),Q=I(!1),H=I(!1),B=I("today"),f=Ye({type:"preset",preset:"today",customStart:"",customEnd:"",customRange:null}),x=R(()=>Q.value),a=()=>{Q.value=!Q.value,Q.value||(C.value=[],W.value=!1,S.value=!1)},z=R(()=>[{value:"today",label:"今日",icon:"fa-calendar-day"},{value:"7days",label:"最近7天",icon:"fa-calendar-week"},{value:"30days",label:"最近30天",icon:"fa-calendar-alt"},{value:"all",label:"全部时间",icon:"fa-infinity"},{value:"custom",label:"自定义范围",icon:"fa-calendar-check"}]),_=I("active"),q=I([]),K=I(!1),$=I("createdAt"),X=I("desc"),le=I({}),ue=I({}),fe=I({page:1,pageSize:20,total:0,totalPages:0}),pe=I(new Map),Ke=I(new Set),T=I(new Map),l=I(new Set),o=I({}),p=I({}),A=I([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),u=I({claude:[],gemini:[],geminiApi:[],openai:[],openaiResponses:[],bedrock:[],droid:[],claudeGroups:[],geminiGroups:[],openaiGroups:[],droidGroups:[]}),i=I(!1),y=I(!1),ie=I(null),me=I(null),xe=I(!1),he=I(null),ce=I(""),Ae=I([]),Y=I([]),J=I([]),be=I(""),Re=I("apiKey"),Qe=R(()=>[{value:"apiKey",label:"按Key名称",icon:"fa-key"},{value:"bindingAccount",label:"按所属账号",icon:"fa-id-badge"}]),re=R(()=>{const s=[{value:"",label:"所有标签",icon:"fa-asterisk"}];return Ae.value.forEach(t=>{s.push({value:t,label:t,icon:"fa-tag"})}),s}),Me=R(()=>J.value.map(s=>({value:s,label:s,icon:"fa-cube"}))),As=R(()=>ce.value?j.value.filter(s=>s.tags&&s.tags.includes(ce.value)).length:0),ve=I(1),Je=I((()=>{const s=localStorage.getItem("apiKeysPageSize");if(s){const t=parseInt(s,10);if([10,20,50,100].includes(t))return t}return 10})()),Cs=[10,20,50,100],Xe=I(!1),ct=I(!1),gt=I(!1),It=I(!1),Kt=I(!1),pt=I(!1),Ft=I(null),Wt=I(null),Bt=I(null),Nt=I([]),mt=R(()=>j.value),ze=R(()=>fe.value.totalPages||0),Ze=R(()=>{const s=[],t=ve.value,m=ze.value;if(m<=7)for(let r=1;r<=m;r++)s.push(r);else{let r=Math.max(1,t-2),v=Math.min(m,t+2);t<=3?v=5:t>=m-2&&(r=m-4);for(let M=r;M<=v;M++)s.push(M)}return s}),Ht=R(()=>{const s=Ze.value;return s.length===0?!1:s[0]>1}),Yt=R(()=>{const s=Ze.value;return s.length===0?!1:s[s.length-1]{const s=Ze.value;return s.length===0?!1:Ht.value&&s[0]>2}),Is=R(()=>{const s=Ze.value;return s.length===0?!1:Yt.value&&s[s.length-1]j.value),xt=async(s=!1)=>{var t,m;if(!(y.value&&!s)){i.value=!0;try{const[r,v,M,P,U,se,ne,b,G]=await Promise.all([E.get("/admin/claude-accounts"),E.get("/admin/claude-console-accounts"),E.get("/admin/gemini-accounts"),E.get("/admin/gemini-api-accounts"),E.get("/admin/openai-accounts"),E.get("/admin/openai-responses-accounts"),E.get("/admin/bedrock-accounts"),E.get("/admin/droid-accounts"),E.get("/admin/account-groups")]),de=[];r.success&&((t=r.data)==null||t.forEach(ee=>{de.push({...ee,platform:"claude-oauth",isDedicated:ee.accountType==="dedicated"})})),v.success&&((m=v.data)==null||m.forEach(ee=>{de.push({...ee,platform:"claude-console",isDedicated:ee.accountType==="dedicated"})})),u.value.claude=de;const ke=[];if(M.success&&(M.data||[]).forEach(ee=>{ke.push({...ee,platform:"gemini",isDedicated:ee.accountType==="dedicated"})}),P.success&&(u.value.geminiApi=(P.data||[]).map(ee=>({...ee,platform:"gemini-api",isDedicated:ee.accountType==="dedicated"})),u.value.geminiApi.forEach(ee=>{ke.push(ee)})),u.value.gemini=ke,U.success&&(u.value.openai=(U.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),se.success&&(u.value.openaiResponses=(se.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),ne.success&&(u.value.bedrock=(ne.data||[]).map(ee=>({...ee,isDedicated:ee.accountType==="dedicated"}))),b.success&&(u.value.droid=(b.data||[]).map(ee=>({...ee,platform:"droid",isDedicated:ee.accountType==="dedicated"}))),G.success){const ee=G.data||[];u.value.claudeGroups=ee.filter(ge=>ge.platform==="claude"),u.value.geminiGroups=ee.filter(ge=>ge.platform==="gemini"),u.value.openaiGroups=ee.filter(ge=>ge.platform==="openai"),u.value.droidGroups=ee.filter(ge=>ge.platform==="droid")}y.value=!0}catch{}finally{i.value=!1}}},Ks=async()=>{try{const s=await E.get("/admin/api-keys/used-models");s.success&&(J.value=s.data||[])}catch(s){console.error("Failed to load used models:",s)}},Ce=async(s=!0)=>{var t,m,r;H.value=!0;try{s&&(pe.value.clear(),T.value.clear());const v=new URLSearchParams;v.set("page",ve.value.toString()),v.set("pageSize",Je.value.toString()),v.set("searchMode",Re.value),be.value&&v.set("search",be.value),ce.value&&v.set("tag",ce.value),Y.value.length>0&&v.set("models",Y.value.join(","));const P=["name","createdAt","expiresAt","lastUsedAt","isActive","status","cost"].includes($.value)?$.value:"createdAt";v.set("sortBy",P),v.set("sortOrder",X.value),P==="cost"&&(f.type==="custom"&&f.customStart&&f.customEnd?(v.set("costTimeRange","custom"),v.set("costStartDate",f.customStart),v.set("costEndDate",f.customEnd)):v.set("costTimeRange",f.preset||"7days")),f.type==="custom"&&f.customStart&&f.customEnd?(v.set("startDate",f.customStart),v.set("endDate",f.customEnd),v.set("timeRange","custom")):f.preset==="all"?v.set("timeRange","all"):v.set("timeRange",f.preset);const U=await E.get(`/admin/api-keys?${v.toString()}`);U.success&&(j.value=((t=U.data)==null?void 0:t.items)||[],(m=U.data)!=null&&m.pagination&&(fe.value=U.data.pagination,ve.value>fe.value.totalPages&&fe.value.totalPages>0&&(ve.value=fe.value.totalPages)),(r=U.data)!=null&&r.availableTags&&(Ae.value=U.data.availableTags),Ls(),Ds())}catch{V("加载 API Keys 失败","error")}finally{H.value=!1}},Ls=async()=>{const s=j.value;if(!s||s.length===0)return;let t=f.preset,m=null,r=null;f.type==="custom"&&f.customStart&&f.customEnd&&(t="custom",m=f.customStart,r=f.customEnd);const v=s.filter(P=>{const U=pe.value.get(P.id);return!U||U.timeRange!==t||t==="custom"&&(U.startDate!==m||U.endDate!==r)});if(v.length===0)return;const M=v.map(P=>P.id);M.forEach(P=>Ke.value.add(P));try{const P={keyIds:M,timeRange:t};t==="custom"&&(P.startDate=m,P.endDate=r);const U=await E.post("/admin/api-keys/batch-stats",P);if(U.success&&U.data)for(const[se,ne]of Object.entries(U.data))pe.value.set(se,{stats:ne,timeRange:t,startDate:m,endDate:r,timestamp:Date.now()})}catch(P){console.error("加载统计数据失败:",P)}finally{M.forEach(P=>Ke.value.delete(P))}},ye=s=>{const t=pe.value.get(s);return(t==null?void 0:t.stats)||null},qe=s=>Ke.value.has(s),Ds=async()=>{const s=j.value;if(!s||s.length===0)return;const t=s.filter(r=>!(!r.lastUsedAt||T.value.has(r.id)));if(t.length===0)return;const m=t.map(r=>r.id);m.forEach(r=>l.value.add(r));try{const r=await E.post("/admin/api-keys/batch-last-usage",{keyIds:m});if(r.success&&r.data)for(const[v,M]of Object.entries(r.data))T.value.set(v,M)}catch(r){console.error("加载最后使用账号数据失败:",r)}finally{m.forEach(r=>l.value.delete(r))}},_s=s=>T.value.get(s)||null,yt=s=>l.value.has(s),ft=async()=>{_.value="deleted",K.value=!0;try{const s=await E.get("/admin/api-keys/deleted");s.success&&(q.value=s.apiKeys||[])}catch{V("加载已删除的 API Keys 失败","error")}finally{K.value=!1}},Be=s=>{if(s==="cost"){if(!bt.value){V("费用排序索引正在更新中,请稍后重试","warning");return}f.type==="custom"&&V("正在计算费用排序,可能需要几秒钟...","info")}$.value===s?X.value=X.value==="asc"?"desc":"asc":($.value=s,X.value=s==="cost"?"desc":"asc")},bt=R(()=>{if(f.type==="custom")return!0;const s=f.preset,t=ue.value[s];return(t==null?void 0:t.status)==="ready"}),Ts=R(()=>{if(f.type==="custom")return"点击按费用排序(实时计算,可能需要几秒钟)";const s=f.preset,t=ue.value[s];return t?t.status==="updating"?"费用排序索引正在更新中...":t.status==="ready"?`点击按费用排序(索引更新于: ${t.lastUpdate?new Date(t.lastUpdate).toLocaleString():"未知"})`:"费用排序索引状态未知":"费用排序索引未初始化"});let Ne=null;const Qt=async()=>{try{const s=await E.get("/admin/api-keys/cost-sort-status");s.success&&(ue.value=s.data||{},Ss())}catch(s){console.error("Failed to fetch cost sort status:",s)}},Ss=()=>{Ne&&clearTimeout(Ne);const t=Object.values(ue.value).some(m=>(m==null?void 0:m.status)==="updating")?1e4:6e4;Ne=setTimeout(Qt,t)},Lt=s=>!s&&s!==0?"0":s.toLocaleString("zh-CN"),De=s=>!s&&s!==0?"0":s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),et=s=>{if(!s)return"未知账户";if(s.startsWith("group:")){const U=s.substring(6),se=u.value.claudeGroups.find(de=>de.id===U);if(se)return`分组-${se.name}`;const ne=u.value.geminiGroups.find(de=>de.id===U);if(ne)return`分组-${ne.name}`;const b=u.value.openaiGroups.find(de=>de.id===U);if(b)return`分组-${b.name}`;const G=u.value.droidGroups.find(de=>de.id===U);return G?`分组-${G.name}`:`分组-${U.substring(0,8)}`}const t=u.value.claude.find(U=>U.id===s);if(t)return`${t.name}`;if(s.startsWith("api:")){const U=s.replace("api:",""),se=u.value.gemini.find(ne=>ne.id===U&&ne.platform==="gemini-api");return se?`${se.name}`:`${U.substring(0,8)}`}const m=u.value.gemini.find(U=>U.id===s);if(m)return`${m.name}`;if(s.startsWith("responses:")){const U=s.replace("responses:",""),se=u.value.openaiResponses.find(ne=>ne.id===U);return se?`${se.name}`:`${U.substring(0,8)}`}const r=u.value.openai.find(U=>U.id===s);if(r)return`${r.name}`;const v=u.value.openaiResponses.find(U=>U.id===s);if(v)return`${v.name}`;const M=u.value.bedrock.find(U=>U.id===s);if(M)return`${M.name}`;const P=u.value.droid.find(U=>U.id===s);return P?`${P.name}`:`${s.substring(0,8)}`},Us=s=>!!(s.claudeAccountId||s.claudeConsoleAccountId||s.geminiAccountId||s.openaiAccountId||s.bedrockAccountId||s.droidAccountId),Jt=s=>{if(s.claudeAccountId){const t=et(s.claudeAccountId);if(s.claudeAccountId.startsWith("group:"))return t;const m=u.value.claude.find(r=>r.id===s.claudeAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}if(s.claudeConsoleAccountId){const t=u.value.claude.find(m=>m.id===s.claudeConsoleAccountId&&m.platform==="claude-console");return t?`Console-${t.name}`:"⚠️ Console账户不存在"}return""},Xt=s=>{if(s.geminiAccountId){const t=et(s.geminiAccountId);if(s.geminiAccountId.startsWith("group:"))return t;if(s.geminiAccountId.startsWith("api:")){const r=s.geminiAccountId.replace("api:",""),v=u.value.gemini.find(M=>M.id===r&&M.platform==="gemini-api");return v?v.accountType==="dedicated"?`🔒 API专属-${t}`:`API-${t}`:`⚠️ ${t} (账户不存在)`}const m=u.value.gemini.find(r=>r.id===s.geminiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},Zt=s=>{if(s.openaiAccountId){const t=et(s.openaiAccountId);if(s.openaiAccountId.startsWith("group:"))return t;let m=null;if(s.openaiAccountId.startsWith("responses:")){const r=s.openaiAccountId.replace("responses:","");m=u.value.openaiResponses.find(v=>v.id===r)}else m=u.value.openai.find(r=>r.id===s.openaiAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},es=s=>{if(s.bedrockAccountId){const t=et(s.bedrockAccountId);if(s.bedrockAccountId.startsWith("group:"))return t;const m=u.value.bedrock.find(r=>r.id===s.bedrockAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},ts=s=>{if(s.droidAccountId){const t=et(s.droidAccountId);if(s.droidAccountId.startsWith("group:"))return t;const m=u.value.droid.find(r=>r.id===s.droidAccountId);return m?m.accountType==="dedicated"?`🔒 专属-${t}`:t:`⚠️ ${t} (账户不存在)`}return""},tt=s=>s?new Date(s)!s||tt(s)?!1:(new Date(s)-new Date)/(1e3*60*60*24)<=7,ss=s=>s?new Date(s).toLocaleDateString("zh-CN"):"",as=async s=>{le.value[s]?le.value[s]=!1:(le.value[s]=!0,p.value[s]||ls(s),await vt(s,!0))},vt=async(s,t=!1)=>{if(!t&&o.value[s]&&o.value[s].length>0)return;const m=Oe(s);try{let r=`/admin/api-keys/${s}/model-stats`;const v=new URLSearchParams;if(m.customStart&&m.customEnd)v.append("startDate",m.customStart),v.append("endDate",m.customEnd),v.append("period","custom");else{const P=m.preset==="today"||m.preset==="7days"?"daily":"monthly";v.append("period",P)}r+="?"+v.toString();const M=await E.get(r);M.success&&(o.value[s]=M.data||[])}catch{V("加载模型统计失败","error"),o.value[s]=[]}},rs=(s,t)=>{const m=t.reduce((r,v)=>r+(v.allTokens||0),0);return m===0?0:Math.round(s/m*100)},Rs=s=>s.formatted&&s.formatted.total?s.formatted.total:s.cost!==void 0?`$${s.cost.toFixed(6)}`:"$0.000000",Ms=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.requests!==void 0)return s.usage.custom.requests;if(s.usage.total&&s.usage.total.requests!==void 0)return s.usage.total.requests}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.requests)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].requests!==void 0?s.usage["7days"].requests:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].requests!==void 0)return s.usage["30days"].requests;if(s.usage.monthly&&s.usage.monthly.requests!==void 0)return s.usage.monthly.requests}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.requests!==void 0?s.usage.all.requests:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.requests)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.requests)||0}},Ps=s=>{if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.cost!==void 0)return s.usage.custom.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return 0}else{if(f.preset==="today")return s.dailyCost||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].cost!==void 0?s.usage["7days"].cost:s.weeklyCost||s.periodCost||0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].cost!==void 0)return s.usage["30days"].cost;if(s.usage.monthly&&s.usage.monthly.cost!==void 0)return s.usage.monthly.cost;if(s.usage.total&&s.usage.total.cost!==void 0)return s.usage.total.cost}return s.monthlyCost||s.periodCost||0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.cost!==void 0?s.usage.all.cost:s.totalCost||0:s.periodCost||s.totalCost||0}},Vs=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.tokens!==void 0)return s.usage.custom.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.tokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].tokens!==void 0?s.usage["7days"].tokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].tokens!==void 0)return s.usage["30days"].tokens;if(s.usage.monthly&&s.usage.monthly.tokens!==void 0)return s.usage.monthly.tokens;if(s.usage.total&&s.usage.total.tokens!==void 0)return s.usage.total.tokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.tokens!==void 0?s.usage.all.tokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.tokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.tokens)||0}},Es=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.inputTokens!==void 0)return s.usage.custom.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.inputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].inputTokens!==void 0?s.usage["7days"].inputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].inputTokens!==void 0)return s.usage["30days"].inputTokens;if(s.usage.monthly&&s.usage.monthly.inputTokens!==void 0)return s.usage.monthly.inputTokens;if(s.usage.total&&s.usage.total.inputTokens!==void 0)return s.usage.total.inputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.inputTokens!==void 0?s.usage.all.inputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.inputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.inputTokens)||0}},Os=s=>{var t,m,r,v,M,P;if(f.type==="custom"){if(s.usage){if(s.usage.custom&&s.usage.custom.outputTokens!==void 0)return s.usage.custom.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else{if(f.preset==="today")return((m=(t=s.usage)==null?void 0:t.daily)==null?void 0:m.outputTokens)||0;if(f.preset==="7days")return s.usage&&s.usage["7days"]&&s.usage["7days"].outputTokens!==void 0?s.usage["7days"].outputTokens:0;if(f.preset==="30days"){if(s.usage){if(s.usage["30days"]&&s.usage["30days"].outputTokens!==void 0)return s.usage["30days"].outputTokens;if(s.usage.monthly&&s.usage.monthly.outputTokens!==void 0)return s.usage.monthly.outputTokens;if(s.usage.total&&s.usage.total.outputTokens!==void 0)return s.usage.total.outputTokens}return 0}else return f.preset==="all"?s.usage&&s.usage.all&&s.usage.all.outputTokens!==void 0?s.usage.all.outputTokens:((v=(r=s.usage)==null?void 0:r.total)==null?void 0:v.outputTokens)||0:((P=(M=s.usage)==null?void 0:M.total)==null?void 0:P.outputTokens)||0}},js=s=>{if(!o.value[s.id])return Ps(s);const t=o.value[s.id]||[];let m=0;return t.forEach(r=>{if(r.cost!==void 0)m+=r.cost;else if(r.formatted&&r.formatted.total){const v=r.formatted.total.replace("$","").replace(",",""),M=parseFloat(v);isNaN(M)||(m+=M)}}),m},Gs=s=>{if(os(s),$.value==="cost"){if(s==="custom")return;const t=ue.value[s];(!t||t.status!=="ready")&&($.value="createdAt",X.value="desc",V("当前时间范围的费用排序索引未就绪,已切换到默认排序","info"))}},os=s=>{if(f.preset=s,s==="custom"){if(f.type="custom",!f.customRange){const t=new Date,m=new Date(t);m.setDate(t.getDate()-6);const r=v=>v.getFullYear()+"-"+String(v.getMonth()+1).padStart(2,"0")+"-"+String(v.getDate()).padStart(2,"0")+" 00:00:00";f.customRange=[r(m),r(t)],f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}}else if(s==="all")f.type="preset",f.customStart=null,f.customEnd=null;else{f.type="preset";const t=new Date,m=new Date(t);s==="today"?m.setHours(0,0,0,0):s==="7days"?m.setDate(t.getDate()-6):s==="30days"&&m.setDate(t.getDate()-29),f.customStart=m.toISOString().split("T")[0],f.customEnd=t.toISOString().split("T")[0]}Ce()},zs=s=>{s&&s.length===2?(f.type="custom",f.preset="custom",f.customRange=s,f.customStart=s[0].split(" ")[0],f.customEnd=s[1].split(" ")[0],Ce()):s===null&&os("today")},ls=s=>{const t=new Date;new Date(t).setHours(0,0,0,0),p.value[s]={type:"preset",preset:"today",customStart:t.toISOString().split("T")[0],customEnd:t.toISOString().split("T")[0],customRange:null,presetOptions:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30},{value:"custom",label:"自定义",days:-1}]}},Oe=s=>(p.value[s]||ls(s),p.value[s]),ns=(s,t)=>{const m=Oe(t);m.type="preset",m.preset=s;const r=m.presetOptions.find(v=>v.value===s);if(r)if(s==="custom"){if(m.type="custom",!m.customRange){const v=new Date,M=new Date(v);M.setDate(v.getDate()-6);const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)],m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0]}}else{const v=new Date,M=new Date(v);M.setDate(v.getDate()-(r.days-1)),m.customStart=M.toISOString().split("T")[0],m.customEnd=v.toISOString().split("T")[0];const P=U=>U.getFullYear()+"-"+String(U.getMonth()+1).padStart(2,"0")+"-"+String(U.getDate()).padStart(2,"0")+" 00:00:00";m.customRange=[P(M),P(v)]}vt(t,!0)},qs=(s,t)=>{const m=Oe(s);t&&t.length===2?(m.type="custom",m.preset="custom",m.customRange=t,m.customStart=t[0].split(" ")[0],m.customEnd=t[1].split(" ")[0],vt(s,!0)):t===null&&ns("7days",s)},is=s=>s>new Date,Fs=s=>{const t=Oe(s);t.type="preset",t.preset="today";const m=new Date;new Date(m).setHours(0,0,0,0),t.customStart=m.toISOString().split("T")[0],t.customEnd=m.toISOString().split("T")[0],t.customRange=null,vt(s,!0),V("已重置筛选条件并刷新数据","info")},Ws=()=>{Xe.value=!0,y.value||xt()},Dt=s=>{Ft.value=s,ct.value=!0,y.value||xt()},_t=s=>{Wt.value=s,gt.value=!0},Bs=s=>{Xe.value=!1,Bt.value=s,It.value=!0,Ce()},Ns=s=>{Xe.value=!1,Nt.value=s,Kt.value=!0,Ce()},Hs=()=>{if(C.value.length===0){V("请先选择要编辑的 API Keys","warning");return}pt.value=!0,y.value||xt()},Ys=()=>{pt.value=!1,C.value=[],Ue(),Ce()},Qs=()=>{ct.value=!1,V("API Key 更新成功","success"),Ce()},Js=()=>{gt.value=!1,V("API Key 续期成功","success"),Ce()},Xs=s=>{const t=[{key:"edit",label:"编辑",icon:"fa-edit",color:"blue",handler:()=>Dt(s)}];return s.expiresAt&&(tt(s.expiresAt)||st(s.expiresAt))&&t.push({key:"renew",label:"续期",icon:"fa-clock",color:"green",handler:()=>_t(s)}),t.push({key:"toggle",label:s.isActive?"禁用":"激活",icon:s.isActive?"fa-ban":"fa-check-circle",color:s.isActive?"orange":"green",handler:()=>Tt(s)}),t.push({key:"delete",label:"删除",icon:"fa-trash",color:"red",handler:()=>St(s.id)}),t},Tt=async s=>{let t=!0;if(s.isActive&&(window.showConfirm?t=await window.showConfirm("禁用 API Key",`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`,"确定禁用","取消"):t=confirm(`确定要禁用 API Key "${s.name}" 吗?禁用后所有使用此 Key 的请求将返回 401 错误。`)),!!t)try{const m=await E.put(`/admin/api-keys/${s.id}`,{isActive:!s.isActive});if(m.success){V(`API Key 已${s.isActive?"禁用":"激活"}`,"success");const r=j.value.find(v=>v.id===s.id);r&&(r.isActive=!s.isActive)}else V(m.message||"操作失败","error")}catch{V("操作失败","error")}},St=async s=>{let t=!1;if(window.showConfirm?t=await window.showConfirm("删除 API Key","确定要删除这个 API Key 吗?此操作不可恢复。","确定删除","取消"):t=confirm("确定要删除这个 API Key 吗?此操作不可恢复。"),!!t)try{const m=await E.delete(`/admin/api-keys/${s}`);if(m.success){V("API Key 已删除","success");const r=C.value.indexOf(s);r>-1&&C.value.splice(r,1),Ue(),Ce()}else V(m.message||"删除失败","error")}catch{V("删除失败","error")}},Zs=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("恢复 API Key","确定要恢复这个 API Key 吗?恢复后可以重新使用。","确定恢复","取消"):t=confirm("确定要恢复这个 API Key 吗?恢复后可以重新使用。"),!!t)try{const v=await E.post(`/admin/api-keys/${s}/restore`);v.success?(V("API Key 已成功恢复","success"),await ft(),await Ce()):V(v.error||"恢复失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"恢复失败","error")}},ea=async s=>{var m,r;let t=!1;if(window.showConfirm?t=await window.showConfirm("彻底删除 API Key","确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。","确定彻底删除","取消"):t=confirm("确定要彻底删除这个 API Key 吗?此操作不可恢复,所有相关数据将被永久删除。"),!!t)try{const v=await E.delete(`/admin/api-keys/${s}/permanent`);v.success?(V("API Key 已彻底删除","success"),ft()):V(v.error||"彻底删除失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"彻底删除失败","error")}},ta=async()=>{var m,r;const s=q.value.length;if(s===0){V("没有需要清空的 API Keys","info");return}let t=!1;if(window.showConfirm?t=await window.showConfirm("清空所有已删除的 API Keys",`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复,所有相关数据将被永久删除。`,"确定清空全部","取消"):t=confirm(`确定要彻底删除全部 ${s} 个已删除的 API Keys 吗?此操作不可恢复。`),!!t)try{const v=await E.delete("/admin/api-keys/deleted/clear-all");v.success?(V(v.message||"已清空所有已删除的 API Keys","success"),v.details&&v.details.failedCount>0&&V(`${v.details.failedCount} 个清空失败`,"warning"),ft()):V(v.error||"清空失败","error")}catch(v){V(((r=(m=v.response)==null?void 0:m.data)==null?void 0:r.error)||"清空失败","error")}},sa=async()=>{const s=C.value.length;if(s===0){V("请先选择要删除的 API Keys","warning");return}let t=!1;const m=`确定要删除选中的 ${s} 个 API Key 吗?此操作不可恢复。`;if(window.showConfirm?t=await window.showConfirm("批量删除 API Keys",m,"确定删除","取消"):t=confirm(m),!t)return;const r=[...C.value];try{const v=await E.delete("/admin/api-keys/batch",{data:{keyIds:r}});if(v.success){const{successCount:M,failedCount:P,errors:U}=v.data;if(M>0){if(V(`成功删除 ${M} 个 API Keys`,"success"),P>0){const se=U.map(ne=>`${ne.keyId}: ${ne.error}`).join(`
-`);V(`${P} 个删除失败:
-${se}`,"warning")}}else V("所有 API Keys 删除失败","error");C.value=[],Ue(),Ce()}else V(v.message||"批量删除失败","error")}catch{V("批量删除失败","error")}},aa=()=>{if(W.value)We.value.forEach(s=>{C.value.includes(s.id)||C.value.push(s.id)});else{const s=new Set(We.value.map(t=>t.id));C.value=C.value.filter(t=>!s.has(t))}Ue()},Ue=()=>{const s=We.value.length,t=We.value.filter(m=>C.value.includes(m.id)).length;t===0?(W.value=!1,S.value=!1):t===s?(W.value=!0,S.value=!1):(W.value=!1,S.value=!0)},at=s=>{ie.value=s},ds=()=>{ie.value=null},ra=async({keyId:s,expiresAt:t,activateNow:m})=>{try{const r=await E.patch(`/admin/api-keys/${s}/expiration`,{expiresAt:t||null,activateNow:m||!1});if(r.success){V(m?"API Key已激活":"过期时间已更新","success");const v=j.value.find(M=>M.id===s);v&&(m&&r.updates?(v.isActivated=!0,v.activatedAt=r.updates.activatedAt,v.expiresAt=r.updates.expiresAt):(v.expiresAt=t||null,t&&!v.isActivated&&(v.isActivated=!0))),ds()}else V(r.message||"更新失败","error"),me.value&&me.value.resetSaving()}catch{V("更新失败","error"),me.value&&me.value.resetSaving()}},je=s=>s?new Date(s).toLocaleDateString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).replace(/\//g,"-"):"",us=s=>{if(s==null)return"--:--";const t=Math.floor(s/3600),m=Math.floor(s%3600/60),r=s%60;return t>0?`${t}h${m}m`:m>0?`${m}m${r}s`:`${r}s`},kt=s=>{var r,v,M,P,U,se,ne,b,G,de,ke,ee,ge,At,Pe;const t=ye(s.id),m={...s,dailyCost:(t==null?void 0:t.dailyCost)??s.dailyCost??0,currentWindowCost:(t==null?void 0:t.currentWindowCost)??s.currentWindowCost??0,windowRemainingSeconds:(t==null?void 0:t.windowRemainingSeconds)??s.windowRemainingSeconds,windowStartTime:(t==null?void 0:t.windowStartTime)??s.windowStartTime??null,windowEndTime:(t==null?void 0:t.windowEndTime)??s.windowEndTime??null,usage:{...s.usage,total:{...(r=s.usage)==null?void 0:r.total,requests:(t==null?void 0:t.requests)??((M=(v=s.usage)==null?void 0:v.total)==null?void 0:M.requests)??0,tokens:(t==null?void 0:t.tokens)??((U=(P=s.usage)==null?void 0:P.total)==null?void 0:U.tokens)??0,cost:(t==null?void 0:t.allTimeCost)??((ne=(se=s.usage)==null?void 0:se.total)==null?void 0:ne.cost)??0,inputTokens:(t==null?void 0:t.inputTokens)??((G=(b=s.usage)==null?void 0:b.total)==null?void 0:G.inputTokens)??0,outputTokens:(t==null?void 0:t.outputTokens)??((ke=(de=s.usage)==null?void 0:de.total)==null?void 0:ke.outputTokens)??0,cacheCreateTokens:(t==null?void 0:t.cacheCreateTokens)??((ge=(ee=s.usage)==null?void 0:ee.total)==null?void 0:ge.cacheCreateTokens)??0,cacheReadTokens:(t==null?void 0:t.cacheReadTokens)??((Pe=(At=s.usage)==null?void 0:At.total)==null?void 0:Pe.cacheReadTokens)??0}}};he.value=m,xe.value=!0},oa=s=>{var m;const t=s||((m=he.value)==null?void 0:m.id);t&&(xe.value=!1,N.push(`/api-keys/${t}/usage-records`))},Ut=s=>{if(!s)return"从未使用";const t=new Date(s),r=new Date-t;return r<6e4?"刚刚":r<36e5?`${Math.floor(r/6e4)} 分钟前`:r<864e5?`${Math.floor(r/36e5)} 小时前`:r<6048e5?`${Math.floor(r/864e5)} 天前`:t.toLocaleDateString("zh-CN")},Rt={claude:"Claude",openai:"OpenAI",gemini:"Gemini",droid:"Droid",deleted:"已删除",other:"其他"},la=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,cs=s=>{if(!s)return"other";const t=String(s).toLowerCase();return t==="claude-console"||t==="claude_console"||t==="claude"?"claude":t==="openai"||t==="openai-responses"||t==="openai_responses"||t==="azure-openai"||t==="azure_openai"?"openai":t==="gemini"||t==="gemini-api"||t==="gemini_api"?"gemini":t==="droid"?"droid":"other"},wt=s=>{if(!s)return null;const t=_s(s.id);return t!==null?t:s.lastUsage||null},Mt=s=>{if(yt(s==null?void 0:s.id))return!1;const t=wt(s);return!!(t&&(t.accountName||t.accountId||t.rawAccountId))},Pt=s=>{if(!s)return!1;if(s.accountCategory==="deleted")return!0;const t=typeof s.rawAccountId=="string"?s.rawAccountId.trim():"",m=typeof s.accountName=="string"?s.accountName.trim():"",r=typeof s.accountType=="string"?s.accountType.trim().toLowerCase():"";if(!t)return!1;const v=la.test(t),M=!m||m===t,P=cs(r);return v&&M&&(!r||r==="unknown"||P==="other")},na=s=>s?Pt(s)?"已删除":s.accountName||s.accountId||s.rawAccountId||"未知账号":"未知账号",rt=s=>na(wt(s)),Vt=s=>{const t=rt(s);return t.length>ks?`${t.slice(0,ks)}...`:t},ht=s=>{const t=wt(s);if(Pt(t))return Rt.deleted;const m=(t==null?void 0:t.accountCategory)||cs(t==null?void 0:t.accountType);return Rt[m]||Rt.other},Et=s=>{const t=wt(s);return Pt(t)},ia=()=>{be.value="",ve.value=1},da=()=>{try{const s=mt.value.map(b=>{var gs,ps,ms,xs,ys,fs,bs,vs;const G=Ms(b),de=js(b),ke=Vs(b),ee=Es(b),ge=Os(b),At={ID:b.id||"",名称:b.name||"",描述:b.description||"",状态:b.isActive?"启用":"禁用",API密钥:b.apiKey||"",过期模式:b.expirationMode==="activation"?"首次使用后激活":b.expirationMode==="fixed"?"固定时间":"无",激活期限:b.activationDays||"",激活单位:b.activationUnit==="hours"?"小时":b.activationUnit==="days"?"天":"",已激活:b.isActivated?"是":"否",激活时间:b.activatedAt?je(b.activatedAt):"",过期时间:b.expiresAt?je(b.expiresAt):"",服务权限:b.permissions==="all"?"全部服务":b.permissions==="claude"?"仅Claude":b.permissions==="gemini"?"仅Gemini":b.permissions==="openai"?"仅OpenAI":b.permissions==="droid"?"仅Droid":b.permissions||"",令牌限制:b.tokenLimit==="0"||b.tokenLimit===0?"无限制":b.tokenLimit||"",并发限制:b.concurrencyLimit==="0"||b.concurrencyLimit===0?"无限制":b.concurrencyLimit||"","速率窗口(分钟)":b.rateLimitWindow==="0"||b.rateLimitWindow===0?"无限制":b.rateLimitWindow||"",速率请求限制:b.rateLimitRequests==="0"||b.rateLimitRequests===0?"无限制":b.rateLimitRequests||"","日费用限制($)":b.dailyCostLimit==="0"||b.dailyCostLimit===0?"无限制":`$${b.dailyCostLimit}`||"","总费用限制($)":b.totalCostLimit==="0"||b.totalCostLimit===0?"无限制":`$${b.totalCostLimit}`||"",Claude专属账户:b.claudeAccountId||"",Claude控制台账户:b.claudeConsoleAccountId||"",Gemini专属账户:b.geminiAccountId||"",OpenAI专属账户:b.openaiAccountId||"","Azure OpenAI专属账户":b.azureOpenaiAccountId||"",Bedrock专属账户:b.bedrockAccountId||"",Droid专属账户:b.droidAccountId||"",启用模型限制:b.enableModelRestriction?"是":"否",限制的模型:b.restrictedModels&&b.restrictedModels.length>0?b.restrictedModels.join("; "):"",启用客户端限制:b.enableClientRestriction?"是":"否",允许的客户端:b.allowedClients&&b.allowedClients.length>0?b.allowedClients.join("; "):"",创建时间:b.createdAt?je(b.createdAt):"",创建者:b.createdBy||"",用户ID:b.userId||"",用户名:b.userUsername||"",标签:b.tags&&b.tags.length>0?b.tags.join(", "):"无",请求总数:G,"总费用($)":de.toFixed(2),Token数:De(ke),输入Token:De(ee),输出Token:De(ge),最后使用时间:b.lastUsedAt?je(b.lastUsedAt):"从未使用",最后使用账号:rt(b),最后使用类型:ht(b)},Pe={};let He=null;return f.preset==="today"?He=(ps=(gs=b.usage)==null?void 0:gs.daily)==null?void 0:ps.models:f.preset==="7days"?He=(xs=(ms=b.usage)==null?void 0:ms.weekly)==null?void 0:xs.models:f.preset==="30days"?He=(fs=(ys=b.usage)==null?void 0:ys.monthly)==null?void 0:fs.models:f.preset==="all"&&(He=(vs=(bs=b.usage)==null?void 0:bs.total)==null?void 0:vs.models),He&&Object.entries(He).forEach(([jt,ot])=>{let Ge=jt;jt.includes(":")&&(Ge=jt.split(":").pop()),Ge=Ge.replace(/[:/]/g,"_"),Pe[`${Ge}_请求数`]=ot.requests||0,Pe[`${Ge}_费用($)`]=(ot.cost||0).toFixed(2),Pe[`${Ge}_Token`]=De(ot.totalTokens||0),Pe[`${Ge}_输入Token`]=De(ot.inputTokens||0),Pe[`${Ge}_输出Token`]=De(ot.outputTokens||0)}),{...At,...Pe}}),t=Fe.utils.book_new(),m=Fe.utils.json_to_sheet(s),r=Fe.utils.decode_range(m["!ref"]),v=Object.keys(s[0]||{}),M=v.map(b=>b==="ID"?{wch:40}:b==="名称"?{wch:25}:b==="描述"?{wch:30}:b==="API密钥"?{wch:45}:b==="标签"?{wch:20}:b.includes("时间")?{wch:20}:b.includes("限制")?{wch:15}:b.includes("费用")?{wch:15}:b.includes("Token")?{wch:15}:b.includes("请求")?{wch:12}:b.includes("账户")?{wch:30}:b.includes("权限")||b.includes("模型")||b.includes("客户端")?{wch:20}:b.includes("激活")||b.includes("过期")?{wch:18}:{wch:15});m["!cols"]=M;for(let b=r.s.c;b<=r.e.c;++b){const G=Fe.utils.encode_cell({r:0,c:b});if(!m[G])continue;const de=v[b],ke=de&&de.includes("_");m[G].s={fill:{fgColor:{rgb:ke?"70AD47":"4472C4"}},font:{color:{rgb:"FFFFFF"},bold:!0,sz:12},alignment:{horizontal:"center",vertical:"center"},border:{top:{style:"thin",color:{rgb:"2F5597"}},bottom:{style:"thin",color:{rgb:"2F5597"}},left:{style:"thin",color:{rgb:"2F5597"}},right:{style:"thin",color:{rgb:"2F5597"}}}}}for(let b=1;b<=r.e.r;++b)for(let G=r.s.c;G<=r.e.c;++G){const de=Fe.utils.encode_cell({r:b,c:G});if(!m[de])continue;const ke=v[G],ee=m[de].v,ge={font:{sz:11},border:{top:{style:"thin",color:{rgb:"D3D3D3"}},bottom:{style:"thin",color:{rgb:"D3D3D3"}},left:{style:"thin",color:{rgb:"D3D3D3"}},right:{style:"thin",color:{rgb:"D3D3D3"}}}};b%2===0&&(ge.fill={fgColor:{rgb:"F2F2F2"}}),ke==="名称"?ge.alignment={horizontal:"left",vertical:"center"}:ke==="标签"?(ge.alignment={horizontal:"left",vertical:"center"},ee==="无"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke==="最后使用时间"?(ge.alignment={horizontal:"right",vertical:"center"},ee==="从未使用"&&(ge.font={...ge.font,color:{rgb:"999999"},italic:!0})):ke&&ke.includes("费用")?(ge.alignment={horizontal:"right",vertical:"center"},ge.font={...ge.font,color:{rgb:"0066CC"},bold:!0}):ke&&(ke.includes("Token")||ke.includes("请求"))&&(ge.alignment={horizontal:"right",vertical:"center"}),m[de].s=ge}Fe.utils.book_append_sheet(t,m,"用量统计");const P=new Date,U=P.getFullYear()+String(P.getMonth()+1).padStart(2,"0")+String(P.getDate()).padStart(2,"0")+"_"+String(P.getHours()).padStart(2,"0")+String(P.getMinutes()).padStart(2,"0")+String(P.getSeconds()).padStart(2,"0");let se="";f.type==="preset"?se={today:"今日","7days":"最近7天","30days":"最近30天",all:"全部时间"}[f.preset]||f.preset:se="自定义时间";const ne=`API_Keys_用量统计_${se}_${U}.xlsx`;Fe.writeFile(t,ne),V(`成功导出 ${s.length} 条API Key用量数据`,"success")}catch{V("导出失败,请重试","error")}};Te([ce,B],()=>{ve.value=1,C.value=[],Ue()});let Ot=null;return Te(be,()=>{Ot&&clearTimeout(Ot),Ot=setTimeout(()=>{ve.value=1,Ce(!1)},300)}),Te(Re,()=>{ve.value=1,Ce(!1)}),Te(ce,()=>{ve.value=1,Ce(!1)}),Te(Y,()=>{ve.value=1,Ce(!1)}),Te([$,X],()=>{Ce(!1)}),Te([ve,Je],([s,t],[m,r])=>{(s!==m||t!==r)&&Ce(!1),Ue()}),Te(Je,s=>{localStorage.setItem("apiKeysPageSize",s.toString())}),Te(j,()=>{const s=new Set(j.value.map(t=>t.id));C.value=C.value.filter(t=>s.has(t)),Ue()}),ut(async()=>{Qt(),await Promise.all([g.loadSupportedClients(),Ce(),Ks()]),Ue(),xt()}),hs(()=>{Ne&&(clearTimeout(Ne),Ne=null)}),(s,t)=>{const m=ua;return n(),d("div",t0,[e("div",s0,[e("div",a0,[t[156]||(t[156]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," API Keys 管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理和监控您的 API 密钥 ")],-1)),e("div",r0,[e("nav",o0,[e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.value==="active"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=r=>_.value="active")},[t[30]||(t[30]=h(" 活跃 API Keys ",-1)),j.value.length>0?(n(),d("span",l0,c(j.value.length),1)):w("",!0)],2),e("button",{class:O(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",_.value==="deleted"?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:ft},[t[31]||(t[31]=h(" 已删除 API Keys ",-1)),q.value.length>0?(n(),d("span",n0,c(q.value.length),1)):w("",!0)],2)])]),_.value==="active"?(n(),d("div",i0,[e("div",d0,[e("div",u0,[e("div",c0,[t[32]||(t[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-purple-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),ae(Ct,{modelValue:f.preset,"onUpdate:modelValue":t[1]||(t[1]=r=>f.preset=r),icon:"fa-calendar-alt","icon-color":"text-blue-500",options:z.value,placeholder:"选择时间范围",onChange:Gs},null,8,["modelValue","options"])]),f.type==="custom"?(n(),d("div",g0,[ae(m,{class:"api-key-date-picker custom-date-range-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":f.customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"320px",height:"38px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":zs},null,8,["default-time","model-value"])])):w("",!0),e("div",p0,[t[33]||(t[33]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",m0,[ae(Ct,{modelValue:ce.value,"onUpdate:modelValue":t[2]||(t[2]=r=>ce.value=r),icon:"fa-tags","icon-color":"text-purple-500",options:re.value,placeholder:"所有标签"},null,8,["modelValue","options"]),ce.value?(n(),d("span",x0,c(As.value),1)):w("",!0)])]),e("div",y0,[t[34]||(t[34]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-orange-500 to-amber-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",f0,[ae(Ct,{modelValue:Y.value,"onUpdate:modelValue":t[3]||(t[3]=r=>Y.value=r),icon:"fa-cube","icon-color":"text-orange-500",multiple:!0,options:Me.value,placeholder:"所有模型"},null,8,["modelValue","options"]),Y.value.length>0?(n(),d("span",b0,c(Y.value.length),1)):w("",!0)])]),e("div",v0,[e("div",k0,[ae(Ct,{modelValue:Re.value,"onUpdate:modelValue":t[4]||(t[4]=r=>Re.value=r),icon:"fa-filter","icon-color":"text-cyan-500",options:Qe.value,placeholder:"选择搜索类型"},null,8,["modelValue","options"])]),e("div",w0,[t[37]||(t[37]=e("div",{class:"pointer-events-none absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",h0,[D(e("input",{"onUpdate:modelValue":t[5]||(t[5]=r=>be.value=r),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:Re.value==="bindingAccount"?"搜索所属账号...":L.value?"搜索名称或所有者...":"搜索名称...",type:"text"},null,8,A0),[[te,be.value]]),t[36]||(t[36]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),be.value?(n(),d("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:ia},t[35]||(t[35]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):w("",!0)])])])]),e("div",C0,[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",disabled:H.value,onClick:t[6]||(t[6]=r=>Ce())},[t[38]||(t[38]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:O(["fas relative text-green-500",H.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),t[39]||(t[39]=e("span",{class:"relative"},"刷新",-1))],8,$0),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:a},[e("i",{class:O(Q.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,c(Q.value?"取消选择":"选择"),1)]),e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:border-gray-500 sm:w-auto",onClick:da},t[40]||(t[40]=[e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-emerald-500 to-green-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1),e("i",{class:"fas fa-file-excel relative text-emerald-500"},null,-1),e("span",{class:"relative"},"导出数据",-1)])),C.value.length>0?(n(),d("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-blue-200 bg-blue-50 px-4 py-2 text-sm font-medium text-blue-700 shadow-sm transition-all duration-200 hover:border-blue-300 hover:bg-blue-100 hover:shadow-md dark:border-blue-700 dark:bg-blue-900/30 dark:text-blue-300 dark:hover:bg-blue-900/50 sm:w-auto",onClick:t[7]||(t[7]=r=>Hs())},[t[41]||(t[41]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[42]||(t[42]=e("i",{class:"fas fa-edit relative text-blue-600 dark:text-blue-400"},null,-1)),e("span",I0,"编辑选中 ("+c(C.value.length)+")",1)])):w("",!0),C.value.length>0?(n(),d("button",{key:1,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:t[8]||(t[8]=r=>sa())},[t[43]||(t[43]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),t[44]||(t[44]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",K0,"删除选中 ("+c(C.value.length)+")",1)])):w("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-5 py-2 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-blue-600 hover:to-blue-700 hover:shadow-lg sm:w-auto",onClick:_e(Ws,["stop"])},t[45]||(t[45]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"创建新 Key",-1)]))])]),H.value?(n(),d("div",L0,t[46]||(t[46]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载 API Keys...",-1)]))):j.value.length===0?(n(),d("div",D0,t[47]||(t[47]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-key text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮创建您的第一个 API Key",-1)]))):(n(),d("div",_0,[e("div",T0,[e("table",S0,[e("thead",U0,[e("tr",null,[x.value?(n(),d("th",R0,[e("div",M0,[D(e("input",{"onUpdate:modelValue":t[9]||(t[9]=r=>W.value=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:S.value,type:"checkbox",onChange:aa},null,40,P0),[[$e,W.value]])])])):w("",!0),e("th",{class:O(["name-column sticky z-20 min-w-[140px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",x.value?"left-[50px]":"left-0"]),onClick:t[10]||(t[10]=r=>Be("name"))},[t[48]||(t[48]=h(" 名称 ",-1)),$.value==="name"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",V0))],2),t[54]||(t[54]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),t[55]||(t[55]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 标签 ",-1)),e("th",{class:"min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[11]||(t[11]=r=>Be("status"))},[t[49]||(t[49]=h(" 状态 ",-1)),$.value==="status"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",E0))]),e("th",{class:O(["min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300",{"cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-600":bt.value,"cursor-not-allowed opacity-60":!bt.value}]),title:Ts.value,onClick:t[12]||(t[12]=r=>Be("cost"))},[t[50]||(t[50]=h(" 费用 ",-1)),$.value==="cost"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):bt.value?(n(),d("i",j0)):(n(),d("i",G0))],10,O0),t[56]||(t[56]=e("th",{class:"min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 限制 ",-1)),t[57]||(t[57]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[58]||(t[58]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[13]||(t[13]=r=>Be("lastUsedAt"))},[t[51]||(t[51]=h(" 最后使用 ",-1)),$.value==="lastUsedAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",z0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[14]||(t[14]=r=>Be("createdAt"))},[t[52]||(t[52]=h(" 创建时间 ",-1)),$.value==="createdAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",q0))]),e("th",{class:"min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:t[15]||(t[15]=r=>Be("expiresAt"))},[t[53]||(t[53]=h(" 过期时间 ",-1)),$.value==="expiresAt"?(n(),d("i",{key:0,class:O(["fas",X.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),d("i",F0))]),t[59]||(t[59]=e("th",{class:"operations-column sticky right-0 min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),d(Z,null,oe(We.value,(r,v)=>{var M,P,U,se,ne,b;return n(),d(Z,{key:r.id},[e("tr",{class:O(["table-row transition-all duration-150",v%2===0?"bg-white dark:bg-gray-800/40":"bg-gray-50/70 dark:bg-gray-700/30","border-b-2 border-gray-200/80 dark:border-gray-700/50","hover:bg-blue-50/60 hover:shadow-sm dark:hover:bg-blue-900/20"])},[x.value?(n(),d("td",W0,[e("div",B0,[D(e("input",{"onUpdate:modelValue":t[16]||(t[16]=G=>C.value=G),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,N0),[[$e,C.value]])])])):w("",!0),e("td",{class:O(["name-column sticky z-10 px-3 py-3",x.value?"left-[50px]":"left-0"])},[e("div",H0,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,Y0),L.value&&r.ownerDisplayName?(n(),d("div",Q0,[t[60]||(t[60]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)])],2),e("td",J0,[e("div",X0,[i.value&&Us(r)?(n(),d("div",Z0,t[61]||(t[61]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):(n(),d(Z,{key:1},[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",eu,[t[62]||(t[62]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-1.5 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1 text-[10px]"}),h(" Claude ")],-1)),e("span",tu,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",su,[t[63]||(t[63]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-1.5 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Gemini ")],-1)),e("span",au,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",ru,[t[64]||(t[64]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-1.5 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1 text-[10px]"}),h(" OpenAI ")],-1)),e("span",ou,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",lu,[t[65]||(t[65]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-1.5 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1 text-[10px]"}),h(" Bedrock ")],-1)),e("span",nu,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",iu,[t[66]||(t[66]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-1.5 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Droid ")],-1)),e("span",du,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",uu,t[67]||(t[67]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)]))):w("",!0)],64))])]),e("td",cu,[e("div",gu,[(n(!0),d(Z,null,oe(r.tags||[],G=>(n(),d("span",{key:G,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(G),1))),128)),!r.tags||r.tags.length===0?(n(),d("span",pu,"无标签")):w("",!0)])]),e("td",mu,[e("span",{class:O(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-2 h-2 w-2 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"禁用"),1)],2)]),e("td",xu,[qe(r.id)?(n(),d("div",yu,t[68]||(t[68]=[e("div",{class:"h-5 w-14 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("span",fu,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("span",bu,"-"))]),e("td",vu,[e("div",ku,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",wu,t[69]||(t[69]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((M=ye(r.id))==null?void 0:M.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((P=ye(r.id))==null?void 0:P.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",hu,[ae(Ve,{current:((U=ye(r.id))==null?void 0:U.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",Au,[e("div",Cu,[t[70]||(t[70]=e("i",{class:"fas fa-clock text-[10px]"},null,-1)),e("span",$u,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0)>0?us(((b=ye(r.id))==null?void 0:b.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Iu,t[71]||(t[71]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("td",Ku,[qe(r.id)?(n(),d("div",Lu,t[72]||(t[72]=[e("div",{class:"h-5 w-16 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Du,[e("span",_u,c(De(ye(r.id).tokens||0)),1)])):(n(),d("span",Tu,"-"))]),e("td",Su,[qe(r.id)?(n(),d("div",Uu,t[73]||(t[73]=[e("div",{class:"h-5 w-12 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):ye(r.id)?(n(),d("div",Ru,[e("span",Mu,c(Lt(ye(r.id).requests||0)),1),t[74]||(t[74]=e("span",{class:"text-xs text-gray-500"},"次",-1))])):(n(),d("span",Pu,"-"))]),e("td",Vu,[e("div",Eu,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,Ou)):(n(),d("span",ju,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",Gu,t[75]||(t[75]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",qu," ("+c(ht(r))+") ",1))],8,zu)):(n(),d("span",Fu," 暂无使用账号 "))])]),e("td",Wu,c(new Date(r.createdAt).toLocaleDateString()),1),e("td",Bu,[e("div",Nu,[r.expirationMode==="activation"&&!r.isActivated?(n(),d("span",Hu,[t[76]||(t[76]=e("i",{class:"fas fa-pause-circle mr-1 text-xs"},null,-1)),h(" 未激活 ( "+c(r.activationDays||(r.activationUnit==="hours"?24:30))+c(r.activationUnit==="hours"?"小时":"天")+") ",1)])):r.expiresAt?(n(),d("span",Yu,[tt(r.expiresAt)?(n(),d("span",{key:0,class:"inline-flex cursor-pointer items-center text-red-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[77]||(t[77]=[e("i",{class:"fas fa-exclamation-circle mr-1 text-xs"},null,-1),h(" 已过期 ",-1)]),8,Qu)):st(r.expiresAt)?(n(),d("span",{key:1,class:"inline-flex cursor-pointer items-center text-orange-600 hover:underline",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},[t[78]||(t[78]=e("i",{class:"fas fa-clock mr-1 text-xs"},null,-1)),h(" "+c(ss(r.expiresAt)),1)],8,Ju)):(n(),d("span",{key:2,class:"cursor-pointer text-gray-600 hover:underline dark:text-gray-400",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},c(ss(r.expiresAt)),9,Xu))])):(n(),d("span",{key:2,class:"inline-flex cursor-pointer items-center text-gray-400 hover:underline dark:text-gray-500",style:{"font-size":"13px"},onClick:_e(G=>at(r),["stop"])},t[79]||(t[79]=[e("i",{class:"fas fa-infinity mr-1 text-xs"},null,-1),h(" 永不过期 ",-1)]),8,Zu))])]),e("td",ec,[e("div",tc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[80]||(t[80]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,sc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2),t[81]||(t[81]=e("span",{class:"ml-1"},"模型",-1))],8,ac)):w("",!0),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-blue-600 transition-colors hover:bg-blue-50 hover:text-blue-900 dark:hover:bg-blue-900/20",title:"编辑",onClick:G=>Dt(r)},t[82]||(t[82]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,rc),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:1,class:"rounded px-2 py-1 text-xs font-medium text-green-600 transition-colors hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20",title:"续期",onClick:G=>_t(r)},t[83]||(t[83]=[e("i",{class:"fas fa-clock"},null,-1),e("span",{class:"ml-1"},"续期",-1)]),8,oc)):w("",!0),e("button",{class:O([r.isActive?"text-orange-600 hover:bg-orange-50 hover:text-orange-900 dark:hover:bg-orange-900/20":"text-green-600 hover:bg-green-50 hover:text-green-900 dark:hover:bg-green-900/20","rounded px-2 py-1 text-xs font-medium transition-colors"]),title:r.isActive?"禁用":"激活",onClick:G=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle"])},null,2),e("span",nc,c(r.isActive?"禁用":"激活"),1)],10,lc),e("button",{class:"rounded px-2 py-1 text-xs font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900 dark:hover:bg-red-900/20",title:"删除",onClick:G=>St(r.id)},t[84]||(t[84]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,ic)]),e("div",dc,[e("button",{class:"rounded px-2 py-1 text-xs font-medium text-purple-600 transition-colors hover:bg-purple-50 hover:text-purple-900 dark:hover:bg-purple-900/20",title:"查看详细统计",onClick:G=>kt(r)},t[85]||(t[85]=[e("i",{class:"fas fa-chart-line"},null,-1)]),8,uc),r&&r.id?(n(),d("button",{key:0,class:"rounded px-2 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-900 dark:hover:bg-indigo-900/20",title:"模型使用分布",onClick:G=>as(r.id)},[e("i",{class:O(["fas",le.value[r.id]?"fa-chevron-up":"fa-chevron-down"])},null,2)],8,cc)):w("",!0),ae(fa,{actions:Xs(r)},null,8,["actions"])])])],2),r&&r.id&&le.value[r.id]?(n(),d("tr",gc,[e("td",pc,[o.value[r.id]?w("",!0):(n(),d("div",mc,t[86]||(t[86]=[e("div",{class:"loading-spinner mx-auto"},null,-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"}," 加载模型统计... ",-1)]))),e("div",xc,[e("div",yc,[t[87]||(t[87]=e("h5",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-pie mr-2 text-indigo-500"}),h(" 模型使用分布 ")],-1)),e("div",fc,[o.value[r.id]&&o.value[r.id].length>0?(n(),d("span",bc,c(o.value[r.id].length)+" 个模型 ",1)):w("",!0),e("div",vc,[e("div",kc,[(n(!0),d(Z,null,oe(Oe(r.id).presetOptions,G=>(n(),d("button",{key:G.value,class:O(["rounded px-2 py-1 text-xs font-medium transition-colors",Oe(r.id).preset===G.value&&Oe(r.id).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-200"]),onClick:de=>ns(G.value,r.id)},c(G.label),11,wc))),128))]),ae(m,{class:"api-key-date-picker",clearable:!0,"default-time":A.value,"disabled-date":is,"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","model-value":Oe(r.id).customRange,"range-separator":"至",size:"small","start-placeholder":"开始日期",style:{width:"280px"},type:"datetimerange","unlink-panels":!1,"value-format":"YYYY-MM-DD HH:mm:ss","onUpdate:modelValue":G=>qs(r.id,G)},null,8,["default-time","model-value","onUpdate:modelValue"])])])]),o.value[r.id]&&o.value[r.id].length===0?(n(),d("div",hc,[e("div",Ac,[t[89]||(t[89]=e("i",{class:"fas fa-chart-line text-lg text-gray-400"},null,-1)),t[90]||(t[90]=e("p",{class:"text-sm text-gray-500 dark:text-gray-400"}," 暂无模型使用数据 ",-1)),e("button",{class:"ml-2 flex items-center gap-1 text-sm text-blue-500 transition-colors hover:text-blue-700",title:"重置筛选条件并刷新",onClick:G=>Fs(r.id)},t[88]||(t[88]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),e("span",{class:"text-xs"},"刷新",-1)]),8,Cc)]),t[91]||(t[91]=e("p",{class:"text-xs text-gray-400"}," 尝试调整时间范围或点击刷新重新加载数据 ",-1))])):o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",$c,[(n(!0),d(Z,null,oe(o.value[r.id],G=>(n(),d("div",{key:G.model,class:"rounded-xl border border-gray-200 bg-gradient-to-br from-white to-gray-50 p-4 transition-all duration-200 hover:border-indigo-300 hover:shadow-lg dark:border-gray-600 dark:from-gray-800 dark:to-gray-700 dark:hover:border-indigo-500"},[e("div",Ic,[e("div",Kc,[e("span",Lc,c(G.model),1),e("span",Dc,c(G.requests)+" 次请求",1)])]),e("div",_c,[e("div",Tc,[t[92]||(t[92]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-xs text-yellow-500"}),h(" 总Token: ")],-1)),e("span",Sc,c(De(G.allTokens)),1)]),e("div",Uc,[t[93]||(t[93]=e("span",{class:"flex items-center text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-xs text-green-500"}),h(" 费用: ")],-1)),e("span",Rc,c(Rs(G)),1)]),e("div",Mc,[e("div",Pc,[t[94]||(t[94]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-down mr-1 text-green-500"}),h(" 输入: ")],-1)),e("span",Vc,c(De(G.inputTokens)),1)]),e("div",Ec,[t[95]||(t[95]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-arrow-up mr-1 text-blue-500"}),h(" 输出: ")],-1)),e("span",Oc,c(De(G.outputTokens)),1)]),G.cacheCreateTokens>0?(n(),d("div",jc,[t[96]||(t[96]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-save mr-1"}),h(" 缓存创建: ")],-1)),e("span",Gc,c(De(G.cacheCreateTokens)),1)])):w("",!0),G.cacheReadTokens>0?(n(),d("div",zc,[t[97]||(t[97]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-download mr-1"}),h(" 缓存读取: ")],-1)),e("span",qc,c(De(G.cacheReadTokens)),1)])):w("",!0)])]),e("div",Fc,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-indigo-500 to-purple-600 transition-all duration-500",style:$t({width:rs(G.allTokens,o.value[r.id])+"%"})},null,4)]),e("div",Wc,[e("span",Bc,c(rs(G.allTokens,o.value[r.id]))+"% ",1)])]))),128))])):w("",!0),o.value[r.id]&&o.value[r.id].length>0?(n(),d("div",Nc,[e("div",Hc,[t[100]||(t[100]=e("span",{class:"flex items-center font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-calculator mr-2 text-indigo-500"}),h(" 总计统计 ")],-1)),e("div",Yc,[e("span",Qc,[t[98]||(t[98]=h(" 总请求: ",-1)),e("span",Jc,c(o.value[r.id].reduce((G,de)=>G+de.requests,0)),1)]),e("span",Xc,[t[99]||(t[99]=h(" 总Token: ",-1)),e("span",Zc,c(De(o.value[r.id].reduce((G,de)=>G+de.allTokens,0))),1)])])])])):w("",!0)])])])):w("",!0)],64)}),128))])])])])),!H.value&&mt.value.length>0?(n(),d("div",eg,[(n(!0),d(Z,null,oe(We.value,r=>{var v,M,P,U,se,ne;return n(),d("div",{key:r.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",tg,[e("div",sg,[x.value?D((n(),d("input",{key:0,"onUpdate:modelValue":t[17]||(t[17]=b=>C.value=b),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:r.id,onChange:Ue},null,40,ag)),[[$e,C.value]]):w("",!0),e("div",null,[e("h4",rg,c(r.name),1),e("p",og,c(r.id),1)])]),e("span",{class:O(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},[e("div",{class:O(["mr-1.5 h-1.5 w-1.5 rounded-full",r.isActive?"bg-green-500":"bg-red-500"])},null,2),h(" "+c(r.isActive?"活跃":"已停用"),1)],2)]),e("div",lg,[r.claudeAccountId||r.claudeConsoleAccountId?(n(),d("div",ng,[t[101]||(t[101]=e("span",{class:"inline-flex items-center rounded bg-indigo-100 px-2 py-0.5 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300"},[e("i",{class:"fas fa-brain mr-1"}),h(" Claude ")],-1)),e("span",ig,c(Jt(r)),1)])):w("",!0),r.geminiAccountId?(n(),d("div",dg,[t[102]||(t[102]=e("span",{class:"inline-flex items-center rounded bg-yellow-100 px-2 py-0.5 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Gemini ")],-1)),e("span",ug,c(Xt(r)),1)])):w("",!0),r.openaiAccountId?(n(),d("div",cg,[t[103]||(t[103]=e("span",{class:"inline-flex items-center rounded bg-gray-100 px-2 py-0.5 text-gray-700 dark:bg-gray-700 dark:text-gray-300"},[e("i",{class:"fa-openai mr-1"}),h(" OpenAI ")],-1)),e("span",gg,c(Zt(r)),1)])):w("",!0),r.bedrockAccountId?(n(),d("div",pg,[t[104]||(t[104]=e("span",{class:"inline-flex items-center rounded bg-orange-100 px-2 py-0.5 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300"},[e("i",{class:"fas fa-cloud mr-1"}),h(" Bedrock ")],-1)),e("span",mg,c(es(r)),1)])):w("",!0),r.droidAccountId?(n(),d("div",xg,[t[105]||(t[105]=e("span",{class:"inline-flex items-center rounded bg-cyan-100 px-2 py-0.5 text-cyan-700 dark:bg-cyan-900/30 dark:text-cyan-300"},[e("i",{class:"fas fa-robot mr-1"}),h(" Droid ")],-1)),e("span",yg,c(ts(r)),1)])):w("",!0),!r.claudeAccountId&&!r.claudeConsoleAccountId&&!r.geminiAccountId&&!r.openaiAccountId&&!r.bedrockAccountId&&!r.droidAccountId?(n(),d("div",fg,t[106]||(t[106]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 使用共享池 ",-1)]))):w("",!0),L.value&&r.ownerDisplayName?(n(),d("div",bg,[t[107]||(t[107]=e("i",{class:"fas fa-user mr-1"},null,-1)),h(" "+c(r.ownerDisplayName),1)])):w("",!0)]),e("div",vg,[e("div",kg,[e("div",wg,[e("span",hg,c(f.type==="custom"?"累计统计":"今日使用"),1),e("button",{class:"text-xs text-blue-600 hover:text-blue-800",onClick:b=>kt(r)},t[108]||(t[108]=[e("i",{class:"fas fa-chart-line mr-1"},null,-1),h("详情 ",-1)]),8,Ag)]),e("div",Cg,[e("div",null,[qe(r.id)?(n(),d("div",$g)):ye(r.id)?(n(),d("p",Ig,c(Lt(ye(r.id).requests||0))+" 次 ",1)):(n(),d("p",Kg,"-")),t[109]||(t[109]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"请求",-1))]),e("div",null,[qe(r.id)?(n(),d("div",Lg)):ye(r.id)?(n(),d("p",Dg,c(ye(r.id).formattedCost||"$0.00"),1)):(n(),d("p",_g,"-")),t[110]||(t[110]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"费用",-1))])]),e("div",Tg,[e("div",Sg,[t[111]||(t[111]=e("span",null,"最后使用",-1)),e("span",Ug,c(r.lastUsedAt?Ut(r.lastUsedAt):"从未使用"),1)]),e("div",Rg,[t[113]||(t[113]=e("span",null,"账号",-1)),r.lastUsedAt&&yt(r.id)?(n(),d("span",Mg,t[112]||(t[112]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:1,class:"truncate text-gray-500 dark:text-gray-400",style:{"max-width":"180px"},title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",Vg," ("+c(ht(r))+") ",1))],8,Pg)):(n(),d("span",Eg,"暂无使用账号"))])])]),e("div",Og,[qe(r.id)&&(r.dailyCostLimit>0||r.totalCostLimit>0||r.rateLimitWindow>0&&r.rateLimitCost>0)?(n(),d("div",jg,t[114]||(t[114]=[e("div",{class:"h-4 w-full animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1),e("div",{class:"h-3 w-2/3 animate-pulse rounded bg-gradient-to-r from-gray-200 via-gray-300 to-gray-200 dark:from-gray-700 dark:via-gray-600 dark:to-gray-700"},null,-1)]))):(n(),d(Z,{key:1},[r.dailyCostLimit>0?(n(),we(Ve,{key:0,current:((v=ye(r.id))==null?void 0:v.dailyCost)||0,label:"每日限制",limit:r.dailyCostLimit,type:"daily",variant:"compact"},null,8,["current","limit"])):r.totalCostLimit>0?(n(),we(Ve,{key:1,current:((M=ye(r.id))==null?void 0:M.allTimeCost)||0,label:"总费用限制",limit:r.totalCostLimit,type:"total",variant:"compact"},null,8,["current","limit"])):r.rateLimitWindow>0&&r.rateLimitCost>0&&(!r.dailyCostLimit||r.dailyCostLimit===0)&&(!r.totalCostLimit||r.totalCostLimit===0)?(n(),d("div",Gg,[ae(Ve,{current:((P=ye(r.id))==null?void 0:P.currentWindowCost)||0,label:"窗口费用",limit:r.rateLimitCost,type:"window",variant:"compact"},null,8,["current","limit"]),e("div",zg,[e("div",qg,[t[115]||(t[115]=e("i",{class:"fas fa-clock text-xs"},null,-1)),e("span",Fg,c(r.rateLimitWindow)+"分钟窗口",1)]),e("span",{class:O(["font-bold",(((U=ye(r.id))==null?void 0:U.windowRemainingSeconds)||0)>0?"text-sky-700 dark:text-sky-300":"text-gray-400 dark:text-gray-500"])},c((((se=ye(r.id))==null?void 0:se.windowRemainingSeconds)||0)>0?us(((ne=ye(r.id))==null?void 0:ne.windowRemainingSeconds)||0):"未激活"),3)])])):(n(),d("div",Wg,t[116]||(t[116]=[e("i",{class:"fas fa-infinity text-base"},null,-1),e("span",{class:"text-xs font-medium"},"无限制",-1)])))],64))])]),e("div",Bg,[e("div",Ng,[t[117]||(t[117]=e("span",null,"创建时间",-1)),e("span",null,c(je(r.createdAt)),1)]),e("div",Hg,[t[119]||(t[119]=e("span",null,"过期时间",-1)),e("div",Yg,[e("span",{class:O(st(r.expiresAt)?"font-semibold text-orange-600":"")},c(r.expiresAt?je(r.expiresAt):"永不过期"),3),e("button",{class:"inline-flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-all duration-200 hover:bg-blue-50 hover:text-blue-500 dark:hover:bg-blue-900/20",title:"编辑过期时间",onClick:_e(b=>at(r),["stop"])},t[118]||(t[118]=[e("svg",{class:"h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Qg)])])]),r.tags&&r.tags.length>0?(n(),d("div",Jg,[(n(!0),d(Z,null,oe(r.tags,b=>(n(),d("span",{key:b,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},c(b),1))),128))])):w("",!0),e("div",Xg,[e("button",{class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-1.5 text-xs text-blue-600 transition-colors hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50",onClick:b=>kt(r)},t[120]||(t[120]=[e("i",{class:"fas fa-chart-line"},null,-1),h(" 查看详情 ",-1)]),8,Zg),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:b=>Dt(r)},t[121]||(t[121]=[e("i",{class:"fas fa-edit mr-1"},null,-1),h(" 编辑 ",-1)]),8,ep),r.expiresAt&&(tt(r.expiresAt)||st(r.expiresAt))?(n(),d("button",{key:0,class:"flex-1 rounded-lg bg-orange-50 px-3 py-1.5 text-xs text-orange-600 transition-colors hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50",onClick:b=>_t(r)},t[122]||(t[122]=[e("i",{class:"fas fa-clock mr-1"},null,-1),h(" 续期 ",-1)]),8,tp)):w("",!0),e("button",{class:O([r.isActive?"bg-orange-50 text-orange-600 hover:bg-orange-100 dark:bg-orange-900/30 dark:hover:bg-orange-900/50":"bg-green-50 text-green-600 hover:bg-green-100 dark:bg-green-900/30 dark:hover:bg-green-900/50","rounded-lg px-3 py-1.5 text-xs transition-colors"]),onClick:b=>Tt(r)},[e("i",{class:O(["fas",r.isActive?"fa-ban":"fa-check-circle","mr-1"])},null,2),h(" "+c(r.isActive?"禁用":"激活"),1)],10,sp),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:hover:bg-red-900/50",onClick:b=>St(r.id)},t[123]||(t[123]=[e("i",{class:"fas fa-trash"},null,-1)]),8,ap)])])}),128))])):w("",!0),mt.value.length>0?(n(),d("div",rp,[e("div",op,[e("span",lp," 共 "+c(mt.value.length)+" 条记录 ",1),e("div",np,[t[124]||(t[124]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),D(e("select",{"onUpdate:modelValue":t[18]||(t[18]=r=>Je.value=r),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm"},[(n(),d(Z,null,oe(Cs,r=>e("option",{key:r,value:r},c(r),9,ip)),64))],512),[[dt,Je.value]]),t[125]||(t[125]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",dp,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===1,onClick:t[19]||(t[19]=r=>ve.value--)},t[126]||(t[126]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,up),e("div",cp,[Ht.value?(n(),d("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[20]||(t[20]=r=>ve.value=1)}," 1 ")):w("",!0),$s.value?(n(),d("span",gp,"...")):w("",!0),(n(!0),d(Z,null,oe(Ze.value,r=>(n(),d("button",{key:r,class:O(["rounded-md px-2 py-1 text-xs font-medium sm:px-3 sm:text-sm",r===ve.value?"bg-blue-600 text-white":"border border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:v=>ve.value=r},c(r),11,pp))),128)),Is.value?(n(),d("span",mp,"...")):w("",!0),Yt.value?(n(),d("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:t[21]||(t[21]=r=>ve.value=ze.value)},c(ze.value),1)):w("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:ve.value===ze.value||ze.value===0,onClick:t[22]||(t[22]=r=>ve.value++)},t[127]||(t[127]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,xp)])])):w("",!0)])):_.value==="deleted"?(n(),d("div",yp,[K.value?(n(),d("div",fp,t[128]||(t[128]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载已删除的 API Keys...",-1)]))):q.value.length===0?(n(),d("div",bp,t[129]||(t[129]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-trash text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无已删除的 API Keys",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"已删除的 API Keys 会出现在这里",-1)]))):(n(),d("div",vp,[e("div",kp,[q.value.length>0?(n(),d("button",{key:0,class:"rounded-lg bg-red-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-red-700 dark:bg-red-600 dark:hover:bg-red-700",onClick:ta},[t[130]||(t[130]=e("i",{class:"fas fa-trash-alt mr-2"},null,-1)),h(" 清空所有已删除 ("+c(q.value.length)+") ",1)])):w("",!0)]),e("div",wp,[e("div",hp,[e("table",Ap,[e("thead",Cp,[e("tr",null,[t[131]||(t[131]=e("th",{class:"name-column sticky left-0 z-20 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 名称 ",-1)),t[132]||(t[132]=e("th",{class:"min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 所属账号 ",-1)),L.value?(n(),d("th",$p," 创建者 ")):w("",!0),t[133]||(t[133]=e("th",{class:"min-w-[120px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 创建时间 ",-1)),t[134]||(t[134]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除者 ",-1)),t[135]||(t[135]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 删除时间 ",-1)),t[136]||(t[136]=e("th",{class:"min-w-[70px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 费用 ",-1)),t[137]||(t[137]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," Token ",-1)),t[138]||(t[138]=e("th",{class:"min-w-[80px] px-3 py-4 text-right text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 请求数 ",-1)),t[139]||(t[139]=e("th",{class:"min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),t[140]||(t[140]=e("th",{class:"operations-column sticky right-0 min-w-[140px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Ip,[(n(!0),d(Z,null,oe(q.value,r=>{var v,M,P,U,se,ne;return n(),d("tr",{key:r.id,class:"table-row"},[e("td",Kp,[e("div",Lp,[t[141]||(t[141]=e("div",{class:"mr-2 flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-red-500 to-red-600"},[e("i",{class:"fas fa-trash text-[10px] text-white"})],-1)),e("div",Dp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:r.name},c(r.name),9,_p)])])]),e("td",Tp,[e("div",Sp,[r.claudeAccountId?(n(),d("div",Up,t[142]||(t[142]=[e("span",{class:"inline-flex items-center rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300"},[e("i",{class:"fas fa-robot mr-1 text-[10px]"}),h(" Claude OAuth ")],-1)]))):r.claudeConsoleAccountId?(n(),d("div",Rp,t[143]||(t[143]=[e("span",{class:"inline-flex items-center rounded bg-green-100 px-1.5 py-0.5 text-green-700 dark:bg-green-900/30 dark:text-green-300"},[e("i",{class:"fas fa-terminal mr-1 text-[10px]"}),h(" Claude Console ")],-1)]))):r.geminiAccountId?(n(),d("div",Mp,t[144]||(t[144]=[e("span",{class:"inline-flex items-center rounded bg-purple-100 px-1.5 py-0.5 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300"},[e("i",{class:"fa-google mr-1 text-[10px]"}),h(" Gemini ")],-1)]))):(n(),d("div",Pp,t[145]||(t[145]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),h(" 共享池 ",-1)])))])]),L.value?(n(),d("td",Vp,[e("div",Ep,[r.createdBy==="admin"?(n(),d("span",Op,t[146]||(t[146]=[e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1),h(" 管理员 ",-1)]))):r.userUsername?(n(),d("span",jp,[t[147]||(t[147]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.userUsername),1)])):(n(),d("span",Gp,t[148]||(t[148]=[e("i",{class:"fas fa-question-circle mr-1 text-xs"},null,-1),h(" 未知 ",-1)])))])])):w("",!0),e("td",zp,c(je(r.createdAt)),1),e("td",qp,[e("div",Fp,[r.deletedByType==="admin"?(n(),d("span",Wp,[t[149]||(t[149]=e("i",{class:"fas fa-user-shield mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):r.deletedByType==="user"?(n(),d("span",Bp,[t[150]||(t[150]=e("i",{class:"fas fa-user mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)])):(n(),d("span",Np,[t[151]||(t[151]=e("i",{class:"fas fa-cog mr-1 text-xs"},null,-1)),h(" "+c(r.deletedBy),1)]))])]),e("td",Hp,c(je(r.deletedAt)),1),e("td",Yp,[e("span",Qp," $"+c((((M=(v=r.usage)==null?void 0:v.total)==null?void 0:M.cost)||0).toFixed(2)),1)]),e("td",Jp,[e("span",Xp,c(De(((U=(P=r.usage)==null?void 0:P.total)==null?void 0:U.tokens)||0)),1)]),e("td",Zp,[e("div",em,[e("span",tm,c(Lt(((ne=(se=r.usage)==null?void 0:se.total)==null?void 0:ne.requests)||0)),1),t[152]||(t[152]=e("span",{class:"text-xs text-gray-500"},"次",-1))])]),e("td",sm,[e("div",am,[r.lastUsedAt?(n(),d("span",{key:0,class:"cursor-help",style:{"font-size":"13px"},title:new Date(r.lastUsedAt).toLocaleString("zh-CN")},c(Ut(r.lastUsedAt)),9,rm)):(n(),d("span",om,"从未使用")),r.lastUsedAt&&yt(r.id)?(n(),d("span",lm,t[153]||(t[153]=[e("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),h(" 加载中... ",-1)]))):Mt(r)?(n(),d("span",{key:3,class:"mt-1 text-xs text-gray-500 dark:text-gray-400",title:rt(r)},[h(c(Vt(r))+" ",1),Et(r)?w("",!0):(n(),d("span",im," ("+c(ht(r))+") ",1))],8,nm)):(n(),d("span",dm," 暂无使用账号 "))])]),e("td",um,[e("div",cm,[r.canRestore?(n(),d("button",{key:0,class:"rounded-lg bg-green-50 px-3 py-1.5 text-xs font-medium text-green-600 transition-colors hover:bg-green-100 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",title:"恢复 API Key",onClick:b=>Zs(r.id)},t[154]||(t[154]=[e("i",{class:"fas fa-undo mr-1"},null,-1),h(" 恢复 ",-1)]),8,gm)):w("",!0),e("button",{class:"rounded-lg bg-red-50 px-3 py-1.5 text-xs font-medium text-red-600 transition-colors hover:bg-red-100 dark:bg-red-900/30 dark:text-red-400 dark:hover:bg-red-900/50",title:"彻底删除 API Key",onClick:b=>ea(r.id)},t[155]||(t[155]=[e("i",{class:"fas fa-times mr-1"},null,-1),h(" 彻底删除 ",-1)]),8,pm)])])])}),128))])])])])]))])):w("",!0)])]),Xe.value?(n(),we(Ko,{key:0,accounts:u.value,onBatchSuccess:Ns,onClose:t[23]||(t[23]=r=>Xe.value=!1),onSuccess:Bs},null,8,["accounts"])):w("",!0),ct.value?(n(),we(Dl,{key:1,accounts:u.value,"api-key":Ft.value,onClose:t[24]||(t[24]=r=>ct.value=!1),onSuccess:Qs},null,8,["accounts","api-key"])):w("",!0),gt.value?(n(),we(Bl,{key:2,"api-key":Wt.value,onClose:t[25]||(t[25]=r=>gt.value=!1),onSuccess:Js},null,8,["api-key"])):w("",!0),It.value?(n(),we(ln,{key:3,"api-key":Bt.value,onClose:t[26]||(t[26]=r=>It.value=!1)},null,8,["api-key"])):w("",!0),Kt.value?(n(),we(Sn,{key:4,"api-keys":Nt.value,onClose:t[27]||(t[27]=r=>Kt.value=!1)},null,8,["api-keys"])):w("",!0),pt.value?(n(),we(Ii,{key:5,accounts:u.value,"selected-keys":C.value,onClose:t[28]||(t[28]=r=>pt.value=!1),onSuccess:Ys},null,8,["accounts","selected-keys"])):w("",!0),ae(Xi,{ref_key:"expiryEditModalRef",ref:me,"api-key":ie.value||{id:null,expiresAt:null,name:""},show:!!ie.value,onClose:ds,onSave:ra},null,8,["api-key","show"]),ae(e0,{"api-key":he.value||{},show:xe.value,onClose:t[29]||(t[29]=r=>xe.value=!1),onOpenTimeline:oa},null,8,["api-key","show"])])}}},hm=Se(mm,[["__scopeId","data-v-79881b9b"]]);export{hm as default};
diff --git a/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css b/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css
deleted file mode 100644
index 0790b919..00000000
--- a/web/admin-spa/dist/assets/ApiKeysView-sn4JYbr5.css
+++ /dev/null
@@ -1 +0,0 @@
-.custom-scrollbar[data-v-32c162ec]{scrollbar-width:thin;scrollbar-color:#cbd5e0 #f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar{width:6px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-track{background:#f7fafc}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb{background-color:#cbd5e0;border-radius:3px}.custom-scrollbar[data-v-32c162ec]::-webkit-scrollbar-thumb:hover{background-color:#a0aec0}pre[data-v-a3d3d870],pre[data-v-b0b904b9]{white-space:pre-wrap;word-wrap:break-word}@keyframes fadeIn-fb30c1d3{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.animate-fadeIn[data-v-fb30c1d3]{animation:fadeIn-fb30c1d3 .2s ease-out}.loading-spinner[data-v-fb30c1d3]{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-top:2px solid white;border-radius:50%;animation:spin-fb30c1d3 .8s linear infinite;display:inline-block}@keyframes spin-fb30c1d3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shine-8a01dc56{0%{transform:translate(-100%)}to{transform:translate(200%)}}.tabular-nums[data-v-8a01dc56]{font-variant-numeric:tabular-nums}.tab-content[data-v-79881b9b]{min-height:calc(100vh - 300px)}.table-wrapper[data-v-79881b9b]{overflow:hidden;border-radius:12px;border:1px solid rgba(0,0,0,.05);width:100%;position:relative}.dark .table-wrapper[data-v-79881b9b]{border-color:#ffffff1a}.table-container[data-v-79881b9b]{overflow-x:auto;overflow-y:hidden;margin:0;padding:0;max-width:100%;position:relative;-webkit-overflow-scrolling:touch}.table-container table[data-v-79881b9b]{min-width:1400px;border-collapse:collapse;table-layout:auto}.table-container[data-v-79881b9b]::-webkit-scrollbar{height:8px}.table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#f3f4f6;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}.table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#9ca3af}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-track{background:#374151}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb{background:#4b5563}.dark .table-container[data-v-79881b9b]::-webkit-scrollbar-thumb:hover{background:#6b7280}.table-row[data-v-79881b9b]{transition:background-color .2s ease}.table-row[data-v-79881b9b]:hover{background-color:#00000005}.dark .table-row[data-v-79881b9b]:hover{background-color:#ffffff05}.operations-column[data-v-79881b9b]{position:sticky;right:0;z-index:12}.table-container thead .operations-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .operations-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .operations-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .operations-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .operations-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #0f172a29}.dark .table-container tbody .operations-column[data-v-79881b9b]{box-shadow:-8px 0 12px -8px #1e293b73}.checkbox-column[data-v-79881b9b],.name-column[data-v-79881b9b]{position:sticky;z-index:12}.table-container thead .checkbox-column[data-v-79881b9b],.table-container thead .name-column[data-v-79881b9b]{z-index:30;background:linear-gradient(to bottom,#f9fafb,#f3f4f6)}.dark .table-container thead .checkbox-column[data-v-79881b9b],.dark .table-container thead .name-column[data-v-79881b9b]{background:linear-gradient(to bottom,#374151,#1f2937)}.table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#fff}.table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#f9fafb}.dark .table-container tbody tr:nth-child(odd) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(odd) .name-column[data-v-79881b9b]{background-color:#1f2937}.dark .table-container tbody tr:nth-child(2n) .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:nth-child(2n) .name-column[data-v-79881b9b]{background-color:#374151}.table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#eff6ff}.dark .table-container tbody tr:hover .checkbox-column[data-v-79881b9b],.dark .table-container tbody tr:hover .name-column[data-v-79881b9b]{background-color:#1e3a5f}.table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #0f172a29}.dark .table-container tbody .name-column[data-v-79881b9b]{box-shadow:8px 0 12px -8px #1e293b73}.loading-spinner[data-v-79881b9b]{width:24px;height:24px;border:2px solid #e5e7eb;border-top:2px solid #3b82f6;border-radius:50%;animation:spin-79881b9b 1s linear infinite}@keyframes spin-79881b9b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.api-key-date-picker[data-v-79881b9b] .el-input__inner{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-input__inner:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1));--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.api-key-date-picker[data-v-79881b9b] .el-range-separator{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper{height:38px;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:hover{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.custom-date-range-picker[data-v-79881b9b] .el-input__wrapper:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner{height:100%;padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__inner:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.custom-date-range-picker[data-v-79881b9b] .el-input__prefix,.custom-date-range-picker[data-v-79881b9b] .el-input__suffix{display:flex;align-items:center}.custom-date-range-picker[data-v-79881b9b] .el-range-separator{margin-left:.5rem;margin-right:.5rem;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}
diff --git a/web/admin-spa/dist/assets/ApiStatsView-ANGMgUyF.css b/web/admin-spa/dist/assets/ApiStatsView-ANGMgUyF.css
deleted file mode 100644
index 3b2187d0..00000000
--- a/web/admin-spa/dist/assets/ApiStatsView-ANGMgUyF.css
+++ /dev/null
@@ -1 +0,0 @@
-.api-input-wide-card[data-v-11e74200]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-11e74200]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-11e74200]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-11e74200]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-11e74200]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-11e74200]{align-items:end;gap:1rem}.wide-card-input[data-v-11e74200]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-11e74200]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-11e74200]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-11e74200]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa26,0 10px 15px -3px #0006;background:#1f2937f2;color:#f3f4f6}.btn[data-v-11e74200]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-11e74200]{padding:14px 24px;font-size:16px}.btn-primary[data-v-11e74200]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d}.btn-primary[data-v-11e74200]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px #667eea4d,0 10px 10px -5px #667eea1a}.btn-primary[data-v-11e74200]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-11e74200]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:#1f2937cc!important;border:1px solid rgba(75,85,99,.5)!important;color:#d1d5db!important}.security-notice[data-v-11e74200]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:#1f2937e6!important;border-color:#4b556399!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-11e74200]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-11e74200]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-11e74200]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-11e74200]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:#1f2937;box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-11e74200]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:#9ca3af}.mode-switch-btn[data-v-11e74200]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-11e74200]{color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);box-shadow:0 2px 4px #667eea33}.mode-switch-btn.active[data-v-11e74200]:hover{box-shadow:0 4px 6px #667eea4d}.mode-switch-btn i[data-v-11e74200]{font-size:.875rem}.fade-enter-active[data-v-11e74200],.fade-leave-active[data-v-11e74200]{transition:all .3s ease}.fade-enter-from[data-v-11e74200],.fade-leave-to[data-v-11e74200]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-11e74200]{animation:spin-11e74200 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-11e74200{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-11e74200]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-11e74200]{justify-content:center}.api-input-wide-card[data-v-11e74200]{padding:1.25rem}.wide-card-title[data-v-11e74200]{margin-bottom:1.25rem}.wide-card-title h2[data-v-11e74200]{font-size:1.5rem}.wide-card-title p[data-v-11e74200]{font-size:.875rem}.api-input-grid[data-v-11e74200]{gap:1rem}.wide-card-input[data-v-11e74200]{padding:12px 14px;font-size:15px}.btn-query[data-v-11e74200]{padding:12px 20px;font-size:15px}.security-notice[data-v-11e74200]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-11e74200]{padding:5px 8px}.toggle-icon[data-v-11e74200]{width:18px;height:18px}.hint-text[data-v-11e74200]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-11e74200]{padding:1rem}.wide-card-title h2[data-v-11e74200]{font-size:1.25rem}.wide-card-title p[data-v-11e74200]{font-size:.8rem}.wide-card-input[data-v-11e74200]{padding:10px 12px;font-size:14px}.btn-query[data-v-11e74200]{padding:10px 16px;font-size:14px}}.card-section[data-v-b72df2cd]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;border-width:1px;border-color:#e2e8f0b3;background-color:#ffffffe6;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.card-section[data-v-b72df2cd]:is(.dark *){border-color:#33415599;background-color:#0f172ab3}@media (min-width: 768px){.card-section[data-v-b72df2cd]{padding:1.5rem}}.dark{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.section-header[data-v-b72df2cd]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-b72df2cd]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-b72df2cd]{font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.header-title[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}@media (min-width: 768px){.header-title[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem}}.header-tag[data-v-b72df2cd]{margin-left:auto;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.header-tag[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.info-grid[data-v-b72df2cd]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{gap:1rem}}.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-b72df2cd]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem}.info-item[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.info-item[data-v-b72df2cd]{min-height:86px}.info-label[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.info-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.contributor-item[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.metric-grid[data-v-b72df2cd]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-b72df2cd]{gap:1rem}}.metric-card[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#ffffffb3;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.metric-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.metric-value[data-v-b72df2cd]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-b72df2cd]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-b72df2cd]{margin-top:.25rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.metric-label[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.account-card[data-v-b72df2cd]{border-radius:1rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fffc;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-b72df2cd]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a99}.account-icon[data-v-b72df2cd]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-b72df2cd]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-b72df2cd]{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.account-name[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.account-sub[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.rate-badge[data-v-b72df2cd]{border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1));padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500}.rate-badge[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.progress-row[data-v-b72df2cd]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-b72df2cd]{height:.375rem;flex:1 1 0%;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.progress-track[data-v-b72df2cd]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.progress-bar[data-v-b72df2cd]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.progress-value[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-row[data-v-b72df2cd]{border-radius:.75rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1));background-color:#fff9;padding:.75rem}.quota-row[data-v-b72df2cd]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1));background-color:#0f172a80}.quota-header[data-v-b72df2cd]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-b72df2cd]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-b72df2cd]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-b72df2cd]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]{font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.quota-percent[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]{margin-top:.25rem;font-size:11px;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.quota-foot[data-v-b72df2cd]:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.card[data-v-d9e5c1dd]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-d9e5c1dd]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-d9e5c1dd]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-21526aa3]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-21526aa3]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-21526aa3]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-39572a8e]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-39572a8e]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-39572a8e]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-b3b8dc5f]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.model-usage-item[data-v-b3b8dc5f]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-b3b8dc5f]{padding:16px}}.model-usage-item[data-v-b3b8dc5f]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-b3b8dc5f]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-b3b8dc5f]{animation:spin-b3b8dc5f 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-b3b8dc5f{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-b3b8dc5f]{padding:10px}.model-usage-item .grid[data-v-b3b8dc5f]{grid-template-columns:1fr}}.gradient-bg[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2,#f093fb);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg-dark[data-v-c1f23841]{background:linear-gradient(135deg,#1e293b,#334155,#475569);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(240,147,251,.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(102,126,234,.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(118,75,162,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-c1f23841]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(100,116,139,.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(71,85,105,.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(30,41,59,.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-c1f23841]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-c1f23841]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-c1f23841]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-c1f23841],.user-login-button span[data-v-c1f23841]{position:relative;z-index:1}.admin-button-refined[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px #667eea40,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-c1f23841]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#764ba2,#667eea);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-c1f23841]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,#764ba2,#667eea);box-shadow:0 8px 20px #764ba259,inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-c1f23841]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,#667eea,#764ba2);border-color:#9333ea66;box-shadow:0 8px 20px #667eea4d,inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-c1f23841]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-c1f23841],.admin-button-refined span[data-v-c1f23841]{position:relative;z-index:1}.period-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-c1f23841]{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;box-shadow:0 10px 15px -3px #667eea4d,0 4px 6px -2px #667eea0d;transform:translateY(-1px)}.period-btn[data-v-c1f23841]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-c1f23841]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-c1f23841]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-c1f23841]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-c1f23841]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-c1f23841]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-c1f23841]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-c1f23841]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-c1f23841]{background:#fff;color:#764ba2;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-c1f23841]{font-size:.875rem}.tab-content[data-v-c1f23841]{animation:tabFadeIn-c1f23841 .4s ease-out}@keyframes tabFadeIn-c1f23841{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-c1f23841]{animation:fadeIn-c1f23841 .6s ease-out}@keyframes fadeIn-c1f23841{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}
diff --git a/web/admin-spa/dist/assets/ApiStatsView-BDCKkmc6.css b/web/admin-spa/dist/assets/ApiStatsView-BDCKkmc6.css
new file mode 100644
index 00000000..50f9baa6
--- /dev/null
+++ b/web/admin-spa/dist/assets/ApiStatsView-BDCKkmc6.css
@@ -0,0 +1 @@
+.api-input-wide-card[data-v-411fd161]{background:var(--surface-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;transition:all .3s cubic-bezier(.4,0,.2,1)}.dark{box-shadow:0 25px 50px -12px #0009,0 0 0 1px #4b556333,inset 0 1px #6b728026}.api-input-wide-card[data-v-411fd161]:hover{box-shadow:0 32px 64px -12px #00000059,0 0 0 1px #ffffff14,inset 0 1px #ffffff26;transform:translateY(-1px)}.dark{box-shadow:0 32px 64px -12px #000000b3,0 0 0 1px #4b556340,inset 0 1px #6b72804d!important}.wide-card-title h2[data-v-411fd161]{text-shadow:0 1px 2px rgba(0,0,0,.1);font-weight:700}.dark{color:#f9fafb;text-shadow:0 1px 2px rgba(0,0,0,.3)}.wide-card-title p[data-v-411fd161]{color:#6b7280;text-shadow:0 1px 1px rgba(0,0,0,.05)}.dark{color:#9ca3af;text-shadow:0 1px 1px rgba(0,0,0,.2)}.wide-card-title .fas.fa-chart-line[data-v-411fd161]{color:#3b82f6;text-shadow:0 1px 2px rgba(59,130,246,.2)}.api-input-grid[data-v-411fd161]{align-items:end;gap:1rem}.wide-card-input[data-v-411fd161]{background:var(--input-bg);border:2px solid var(--input-border);border-radius:12px;padding:14px 16px;font-size:16px;transition:all .3s ease;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:var(--text-primary);box-shadow:0 4px 6px -1px #0000001a}.dark{box-shadow:0 4px 6px -1px #0006;color:#e5e7eb}.wide-card-input[data-v-411fd161]::-moz-placeholder{color:#9ca3af}.wide-card-input[data-v-411fd161]::placeholder{color:#9ca3af}.dark{color:#64748b}.wide-card-input[data-v-411fd161]:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 3px #60a5fa33,0 10px 15px -3px #0000001a;background:#fff;color:#1f2937}.dark{border-color:var(--primary-color);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.15),0 10px 15px -3px #0006;background:var(--glass-strong-color);color:#f3f4f6}.btn[data-v-411fd161]{font-weight:500;border-radius:12px;border:none;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden;letter-spacing:.025em}.btn-query[data-v-411fd161]{padding:14px 24px;font-size:16px}.btn-primary[data-v-411fd161]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05)}.btn-primary[data-v-411fd161]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 20px 25px -5px rgba(var(--primary-rgb),.3),0 10px 10px -5px rgba(var(--primary-rgb),.1)}.btn-primary[data-v-411fd161]:disabled{opacity:.6;cursor:not-allowed;transform:none}.security-notice[data-v-411fd161]{background:#ffffff80;border:1px solid rgba(255,255,255,.4);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:8px;padding:12px 16px;color:#374151;font-size:.875rem;transition:all .3s ease}.dark{background:var(--glass-strong-color)!important;border:1px solid var(--border-color)!important;color:#d1d5db!important}.security-notice[data-v-411fd161]:hover{background:#fff9;border-color:#ffffff80;color:#1f2937}.dark{background:var(--glass-strong-color)!important;border-color:var(--border-color)!important;color:#e5e7eb!important}.security-notice .fas.fa-shield-alt[data-v-411fd161]{color:#10b981;text-shadow:0 1px 2px rgba(16,185,129,.2)}.control-bar[data-v-411fd161]{padding-bottom:.5rem;border-bottom:1px solid rgba(229,231,235,.3)}.dark{border-bottom-color:#4b55634d}.button-group[data-v-411fd161]{display:flex;align-items:center;gap:.5rem}.mode-switch-group[data-v-411fd161]{display:inline-flex;padding:4px;background:#f3f4f6;border-radius:.5rem;box-shadow:inset 0 1px 2px #0000000d}.dark{background:var(--bg-gradient-start);box-shadow:inset 0 1px 2px #0000004d}.mode-switch-btn[data-v-411fd161]{display:inline-flex;align-items:center;padding:6px 12px;font-size:.875rem;font-weight:500;color:#6b7280;background:transparent;border:none;border-radius:.375rem;cursor:pointer;transition:all .2s ease;white-space:nowrap}.dark{color:var(--text-secondary)}.mode-switch-btn[data-v-411fd161]:hover:not(.active){color:#374151;background:#0000000d}.dark{color:#d1d5db;background:#ffffff0d}.mode-switch-btn.active[data-v-411fd161]{color:#fff;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);box-shadow:0 2px 4px rgba(var(--primary-rgb),.2)}.mode-switch-btn.active[data-v-411fd161]:hover{box-shadow:0 4px 6px rgba(var(--primary-rgb),.3)}.mode-switch-btn i[data-v-411fd161]{font-size:.875rem}.fade-enter-active[data-v-411fd161],.fade-leave-active[data-v-411fd161]{transition:all .3s ease}.fade-enter-from[data-v-411fd161],.fade-leave-to[data-v-411fd161]{opacity:0;transform:translate(-10px)}.loading-spinner[data-v-411fd161]{animation:spin-411fd161 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-411fd161{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.control-bar[data-v-411fd161]{flex-direction:column;align-items:stretch;gap:1rem}.button-group[data-v-411fd161]{justify-content:center}.api-input-wide-card[data-v-411fd161]{padding:1.25rem}.wide-card-title[data-v-411fd161]{margin-bottom:1.25rem}.wide-card-title h2[data-v-411fd161]{font-size:1.5rem}.wide-card-title p[data-v-411fd161]{font-size:.875rem}.api-input-grid[data-v-411fd161]{gap:1rem}.wide-card-input[data-v-411fd161]{padding:12px 14px;font-size:15px}.btn-query[data-v-411fd161]{padding:12px 20px;font-size:15px}.security-notice[data-v-411fd161]{padding:10px 14px;font-size:.8rem}}@media (max-width: 480px){.mode-toggle-btn[data-v-411fd161]{padding:5px 8px}.toggle-icon[data-v-411fd161]{width:18px;height:18px}.hint-text[data-v-411fd161]{font-size:.7rem;padding:4px 8px}.api-input-wide-card[data-v-411fd161]{padding:1rem}.wide-card-title h2[data-v-411fd161]{font-size:1.25rem}.wide-card-title p[data-v-411fd161]{font-size:.8rem}.wide-card-input[data-v-411fd161]{padding:10px 12px;font-size:14px}.btn-query[data-v-411fd161]{padding:10px 16px;font-size:14px}}.card-section[data-v-99d8ab54]{display:flex;height:100%;flex-direction:column;gap:1rem;border-radius:1rem;padding:1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 768px){.card-section[data-v-99d8ab54]{padding:1.5rem}}.card-section[data-v-99d8ab54]{background:var(--surface-color);border:1px solid var(--border-color)}.section-header[data-v-99d8ab54]{margin-bottom:1rem;display:flex;align-items:center;gap:.75rem}.header-icon[data-v-99d8ab54]{font-size:1rem;line-height:1.5rem}@media (min-width: 768px){.header-icon[data-v-99d8ab54]{font-size:1.125rem;line-height:1.75rem}}.header-title[data-v-99d8ab54]{font-size:1.125rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.header-title[data-v-99d8ab54]{font-size:1.25rem;line-height:1.75rem}}.header-title[data-v-99d8ab54]{color:var(--text-primary, #1e293b)}.header-tag[data-v-99d8ab54]{margin-left:auto;border-radius:9999px;padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background:rgba(var(--primary-rgb),.1);color:var(--primary-color)}.info-grid[data-v-99d8ab54]{display:grid;gap:.75rem}@media (min-width: 768px){.info-grid[data-v-99d8ab54]{gap:1rem}}.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width: 768px){.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width: 1280px){.info-grid[data-v-99d8ab54]{grid-template-columns:repeat(3,minmax(0,1fr))}}.info-item[data-v-99d8ab54]{border-radius:.75rem;padding:1rem;background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color);min-height:86px}.info-label[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;text-transform:uppercase;letter-spacing:.025em;color:var(--text-secondary, #64748b)}.info-value[data-v-99d8ab54]{margin-top:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--text-primary, #1e293b)}.contributor-item[data-v-99d8ab54]{display:flex;align-items:center;justify-content:space-between;border-radius:.5rem;padding:.5rem .75rem;font-size:.75rem;line-height:1rem;background:rgba(var(--primary-rgb),.05);color:var(--text-secondary, #64748b)}.dark{background:rgba(var(--primary-rgb),.1);color:var(--text-secondary, #cbd5e1)}.metric-grid[data-v-99d8ab54]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}@media (min-width: 768px){.metric-grid[data-v-99d8ab54]{gap:1rem}}.metric-card[data-v-99d8ab54]{border-radius:.75rem;padding:1rem;text-align:center;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color)}.metric-value[data-v-99d8ab54]{font-size:1.25rem;line-height:1.75rem;font-weight:600}@media (min-width: 768px){.metric-value[data-v-99d8ab54]{font-size:1.5rem;line-height:2rem}}.metric-label[data-v-99d8ab54]{margin-top:.25rem;font-size:.75rem;line-height:1rem;color:var(--text-secondary, #64748b)}.dark{color:var(--text-secondary, #cbd5e1)}.account-card[data-v-99d8ab54]{border-radius:1rem;padding:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.account-card[data-v-99d8ab54]:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.account-card[data-v-99d8ab54]{background:var(--surface-color);border:1px solid var(--border-color)}.account-icon[data-v-99d8ab54]{display:inline-flex;height:2.5rem;width:2.5rem;align-items:center;justify-content:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.icon-claude[data-v-99d8ab54]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #a855f7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(168 85 247 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position)}.icon-openai[data-v-99d8ab54]{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #0ea5e9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(14 165 233 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.account-name[data-v-99d8ab54]{font-size:.875rem;line-height:1.25rem;font-weight:600;color:var(--text-primary, #1e293b)}.dark{color:var(--text-primary, #f1f5f9)}.account-sub[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;color:var(--text-secondary, #64748b)}.dark{color:var(--text-secondary, #94a3b8)}.rate-badge[data-v-99d8ab54]{border-radius:9999px;padding:.125rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background:rgba(var(--primary-rgb),.1)}.progress-row[data-v-99d8ab54]{display:flex;align-items:center;gap:.5rem}.progress-track[data-v-99d8ab54]{height:.375rem;flex:1 1 0%;border-radius:9999px;background:rgba(var(--primary-rgb),.15)}.dark{background:rgba(var(--primary-rgb),.25)}.progress-bar[data-v-99d8ab54]{height:.375rem;border-radius:9999px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.progress-value[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;font-weight:600;color:var(--text-secondary, #475569)}.quota-row[data-v-99d8ab54]{border-radius:.75rem;padding:.75rem;background:rgba(var(--primary-rgb),.03);border:1px solid var(--border-color)}.dark{background:rgba(var(--primary-rgb),.08)}.quota-header[data-v-99d8ab54]{margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between}.quota-tag[data-v-99d8ab54]{display:inline-flex;min-width:34px;justify-content:center;border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:600}.tag-indigo[data-v-99d8ab54]{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.tag-indigo[data-v-99d8ab54]:is(.dark *){background-color:#6366f133;--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.tag-blue[data-v-99d8ab54]{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity, 1))}.tag-blue[data-v-99d8ab54]:is(.dark *){background-color:#0ea5e933;--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.quota-percent[data-v-99d8ab54]{font-size:.75rem;line-height:1rem;font-weight:600;color:var(--text-secondary, #475569)}.dark{color:var(--text-secondary, #e2e8f0)}.quota-foot[data-v-99d8ab54]{margin-top:.25rem;font-size:11px;color:var(--text-tertiary, #94a3b8)}.dark{color:var(--text-tertiary, #cbd5e1)}.card[data-v-f3f6aa17]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-f3f6aa17]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-f3f6aa17]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-e03e5fe5]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-e03e5fe5]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-e03e5fe5]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-37821008]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-37821008]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-37821008]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.card[data-v-0571e613]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-0571e613]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-0571e613]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.model-usage-item[data-v-0571e613]{background:var(--surface-color);border:1px solid var(--border-color);border-radius:12px;padding:12px;transition:all .3s ease;position:relative;overflow:hidden}@media (min-width: 768px){.model-usage-item[data-v-0571e613]{padding:16px}}.model-usage-item[data-v-0571e613]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.model-usage-item[data-v-0571e613]:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;border-color:#ffffff4d}.dark{box-shadow:0 10px 15px -3px #0006,0 4px 6px -2px #00000040;border-color:#4b556399}.loading-spinner[data-v-0571e613]{animation:spin-0571e613 1s linear infinite;filter:drop-shadow(0 0 4px rgba(255,255,255,.5))}@keyframes spin-0571e613{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (max-width: 768px){.model-usage-item .grid[data-v-0571e613]{grid-template-columns:1fr 1fr}}@media (max-width: 480px){.model-usage-item[data-v-0571e613]{padding:10px}.model-usage-item .grid[data-v-0571e613]{grid-template-columns:1fr}}.card[data-v-79d7a9ef]{background:var(--surface-color);border-radius:16px;border:1px solid var(--border-color);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d;overflow:hidden;position:relative;transition:all .3s cubic-bezier(.4,0,.2,1)}.card[data-v-79d7a9ef]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent)}.card[data-v-79d7a9ef]:hover{transform:translateY(-2px);box-shadow:0 20px 25px -5px #00000026,0 10px 10px -5px #00000014}.dark{box-shadow:0 20px 25px -5px #00000080,0 10px 10px -5px #00000059}.gradient-bg[data-v-8fdf3cb4],.gradient-bg-dark[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--bg-gradient-start) 0%,var(--bg-gradient-mid) 50%,var(--bg-gradient-end) 100%);background-attachment:fixed;min-height:100vh;position:relative}.gradient-bg[data-v-8fdf3cb4]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--primary-rgb),.2) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--secondary-rgb),.1) 0%,transparent 50%);pointer-events:none;z-index:0}.gradient-bg-dark[data-v-8fdf3cb4]:before{content:"";position:fixed;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle at 20% 80%,rgba(var(--accent-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 80% 20%,rgba(var(--primary-rgb),.1) 0%,transparent 50%),radial-gradient(circle at 40% 40%,rgba(var(--secondary-rgb),.1) 0%,transparent 50%);pointer-events:none;z-index:0}.glass-strong[data-v-8fdf3cb4]{background:var(--glass-strong-color);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);border:1px solid var(--border-color);box-shadow:0 25px 50px -12px #00000040,0 0 0 1px #ffffff0d,inset 0 1px #ffffff1a;position:relative;z-index:1}.dark{box-shadow:0 25px 50px -12px #000000b3,0 0 0 1px #3741514d,inset 0 1px #4b556333}.header-title[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-weight:700;letter-spacing:-.025em}.user-login-button[data-v-8fdf3cb4]{background:linear-gradient(135deg,#34d399,#10b981);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);text-decoration:none;box-shadow:0 4px 12px #34d39940,inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:linear-gradient(135deg,#34d399,#10b981);border:1px solid rgba(52,211,153,.4);color:#fff;box-shadow:0 4px 12px #34d3994d,inset 0 1px 1px #ffffff1a}.user-login-button[data-v-8fdf3cb4]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,#10b981,#34d399);opacity:0;transition:opacity .3s ease}.user-login-button[data-v-8fdf3cb4]:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 20px #34d39959,inset 0 1px 1px #ffffff4d;border-color:#fff6}.user-login-button[data-v-8fdf3cb4]:hover:before{opacity:1}.dark{box-shadow:0 8px 20px #34d39966,inset 0 1px 1px #fff3;border-color:#34d39980}.user-login-button[data-v-8fdf3cb4]:active{transform:translateY(-1px) scale(1)}.user-login-button i[data-v-8fdf3cb4],.user-login-button span[data-v-8fdf3cb4]{position:relative;z-index:1}.admin-button-refined[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.3);color:#fff;text-decoration:none;box-shadow:0 4px 12px rgba(var(--primary-rgb),.25),inset 0 1px 1px #fff3;position:relative;overflow:hidden;font-weight:600}.dark{background:#374151cc;border:1px solid rgba(107,114,128,.4);color:#f3f4f6;box-shadow:0 4px 12px #0000004d,inset 0 1px 1px #ffffff0d}.admin-button-refined[data-v-8fdf3cb4]:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(135deg,var(--secondary-color) 0%,var(--primary-color) 100%);opacity:0;transition:opacity .3s ease}.admin-button-refined[data-v-8fdf3cb4]:hover{transform:translateY(-2px) scale(1.02);background:linear-gradient(135deg,var(--secondary-color) 0%,var(--primary-color) 100%);box-shadow:0 8px 20px rgba(var(--secondary-rgb),.35),inset 0 1px 1px #ffffff4d;border-color:#fff6;color:#fff}.admin-button-refined[data-v-8fdf3cb4]:hover:before{opacity:1}.dark{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border-color:rgba(var(--secondary-rgb),.4);box-shadow:0 8px 20px rgba(var(--primary-rgb),.3),inset 0 1px 1px #ffffff1a;color:#fff}.admin-button-refined[data-v-8fdf3cb4]:active{transform:translateY(-1px) scale(1)}.admin-button-refined i[data-v-8fdf3cb4],.admin-button-refined span[data-v-8fdf3cb4]{position:relative;z-index:1}.period-btn[data-v-8fdf3cb4]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer}.period-btn.active[data-v-8fdf3cb4]{background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);color:#fff;box-shadow:0 10px 15px -3px rgba(var(--primary-rgb),.3),0 4px 6px -2px rgba(var(--primary-rgb),.05);transform:translateY(-1px)}.period-btn[data-v-8fdf3cb4]:not(.active){color:#374151;background:#fff9;border:1px solid rgba(229,231,235,.5)}html.dark{color:#e5e7eb;background:#37415166;border:1px solid rgba(75,85,99,.5)}.period-btn[data-v-8fdf3cb4]:not(.active):hover{background:#fffc;color:#1f2937;border-color:#d1d5dbcc}html.dark{background:#4b556399;color:#fff;border-color:#6b7280cc}.test-btn[data-v-8fdf3cb4]{position:relative;overflow:hidden;border-radius:12px;font-weight:500;letter-spacing:.025em;transition:all .3s ease;border:none;cursor:pointer;background:linear-gradient(135deg,#06b6d4,#0891b2);color:#fff;box-shadow:0 4px 10px -2px #06b6d44d,0 2px 4px -1px #06b6d41a}.test-btn[data-v-8fdf3cb4]:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 15px -3px #06b6d466,0 4px 6px -2px #06b6d426}.test-btn[data-v-8fdf3cb4]:disabled{opacity:.5;cursor:not-allowed;transform:none}.tab-pill-button[data-v-8fdf3cb4]{padding:.5rem 1rem;border-radius:9999px;font-weight:500;font-size:.875rem;color:#fffc;background:transparent;border:none;cursor:pointer;transition:all .2s ease;position:relative;display:inline-flex;align-items:center;white-space:nowrap;flex:1;justify-content:center}html.dark{color:#d1d5dbcc}@media (min-width: 768px){.tab-pill-button[data-v-8fdf3cb4]{padding:.625rem 1.25rem;flex:none}}.tab-pill-button[data-v-8fdf3cb4]:hover{color:#fff;background:#ffffff1a}html.dark{color:#f3f4f6;background:#64748b33}.tab-pill-button.active[data-v-8fdf3cb4]{background:#fff;color:var(--secondary-color);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}html.dark{background:#475569e6;color:#f3f4f6;box-shadow:0 4px 6px -1px #0000004d,0 2px 4px -1px #0003}.tab-pill-button i[data-v-8fdf3cb4]{font-size:.875rem}.tab-content[data-v-8fdf3cb4]{animation:tabFadeIn-8fdf3cb4 .4s ease-out}@keyframes tabFadeIn-8fdf3cb4{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in[data-v-8fdf3cb4]{animation:fadeIn-8fdf3cb4 .6s ease-out}@keyframes fadeIn-8fdf3cb4{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-8fdf3cb4],.fade-leave-active[data-v-8fdf3cb4]{transition:opacity .3s ease}.fade-enter-from[data-v-8fdf3cb4],.fade-leave-to[data-v-8fdf3cb4]{opacity:0}
diff --git a/web/admin-spa/dist/assets/ApiStatsView-D5wlfbRX.js b/web/admin-spa/dist/assets/ApiStatsView-D5wlfbRX.js
new file mode 100644
index 00000000..76233beb
--- /dev/null
+++ b/web/admin-spa/dist/assets/ApiStatsView-D5wlfbRX.js
@@ -0,0 +1,6 @@
+import{aP as Oe,r as T,c as j,aY as ce,x as l,y as a,z as e,O as k,L as b,P as o,u as t,C as R,K as xe,aW as Fe,aa as $e,f as Me,aq as Se,Y as Ce,Q as X,ac as se,B as be,R as ee,q as De,o as Te,V as qe,I as ve,aV as Pe,a5 as Ue,aX as We,J as _e,T as Ve,av as ze,al as Be}from"./vue-vendor-DV7DYXbz.js";import{bf as Re,bg as Le,bh as ke,b1 as Ge,bi as He,bj as Je,bk as Qe,_ as me,f as O,Z as Ee,c as Ye,aH as Xe,aO as Ze,a as et,bl as tt,s as Ie,bm as st,bn as at}from"./index-BahP9Xx9.js";import{L as rt}from"./LogoTitle-DF7a1vCs.js";import{T as lt}from"./ThemeToggle-DROshBR1.js";import"./vendor-Dr8jvgFu.js";import{_ as nt}from"./WindowCountdown-Cz478C_V.js";import{T as ot}from"./TutorialView-Cpvhof5r.js";import"./element-plus-BSjV1f9S.js";const ge=Oe("apistats",()=>{const E=T(""),K=T(null),i=T(!1),_=T(!1),g=T(!0),v=T(""),h=T("daily"),$=T(null),M=T([]),L=T([]),w=T([]),u=T([]),x=T(null),f=T(null),c=T(null),n=T({siteName:"",siteIcon:"",siteIconData:""}),C=T(!1),P=T([]),D=T([]),U=T(null),F=T([]),Q=T([]),W=T(null),G=T({}),te=j(()=>{const y={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return C.value&&U.value?h.value==="daily"?U.value.dailyUsage||y:h.value==="monthly"?U.value.monthlyUsage||y:U.value.alltimeUsage||y:h.value==="daily"?x.value||y:h.value==="monthly"?f.value||y:c.value||y}),ne=j(()=>{if(!$.value||!te.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const y=te.value,S=$.value.limits;return{tokenUsage:S.tokenLimit>0?Math.min(y.allTokens/S.tokenLimit*100,100):0,costUsage:S.dailyCostLimit>0?Math.min(y.cost/S.dailyCostLimit*100,100):0,requestUsage:S.rateLimitRequests>0?Math.min(y.requests/S.rateLimitRequests*100,100):0}});async function oe(){if(C.value)return J();const y=E.value.trim();if(!y){v.value="请输入 API Key";return}if(y.length<10||y.length>512){v.value="API Key 格式无效:长度应在 10-512 个字符之间";return}i.value=!0,v.value="",$.value=null,M.value=[],K.value=null;try{const S=await Re(y);if(S.success){K.value=S.data.id;const I=await Le(K.value);if(I.success)$.value=I.data,G.value=I.data.serviceRates||{},await Y(),v.value="",de(),re();else throw new Error(I.message||"查询失败")}else throw new Error(S.message||"获取 API Key ID 失败")}catch(S){console.error("Query stats error:",S),v.value=S.message||"查询统计数据失败,请检查您的 API Key 是否正确",$.value=null,M.value=[],K.value=null}finally{i.value=!1}}async function Y(){K.value&&(await Promise.all([H("daily"),H("monthly")]),await Z())}async function Z(){if(K.value){_.value=!0;try{const[y,S,I]=await Promise.all([ke(K.value,"daily"),ke(K.value,"monthly"),ke(K.value,"alltime")]);L.value=y.success?y.data||[]:[],w.value=S.success?S.data||[]:[],u.value=I.success?I.data||[]:[],M.value=L.value}catch(y){console.error("Load all model stats error:",y),L.value=[],w.value=[],u.value=[],M.value=[]}finally{_.value=!1}}}async function H(y){try{const S=await ke(K.value,y);if(S.success){const I=S.data||[],V={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};I.forEach(p=>{var d;V.requests+=p.requests||0,V.inputTokens+=p.inputTokens||0,V.outputTokens+=p.outputTokens||0,V.cacheCreateTokens+=p.cacheCreateTokens||0,V.cacheReadTokens+=p.cacheReadTokens||0,V.allTokens+=p.allTokens||0,V.cost+=((d=p.costs)==null?void 0:d.total)||0}),V.formattedCost=B(V.cost),y==="daily"?x.value=V:y==="monthly"?f.value=V:y==="alltime"&&(c.value=V)}else console.warn(`Failed to load ${y} stats:`,S.message)}catch(S){console.error(`Load ${y} stats error:`,S)}}async function r(y="daily"){if(K.value){_.value=!0;try{const S=await ke(K.value,y);if(S.success)M.value=S.data||[];else throw new Error(S.message||"加载模型统计失败")}catch(S){console.error("Load model stats error:",S),M.value=[]}finally{_.value=!1}}}async function s(y){if(!(h.value===y||_.value)){if(h.value=y,C.value&&D.value.length>0){await ae(y);return}(y==="daily"&&!x.value||y==="monthly"&&!f.value||y==="alltime"&&!c.value)&&await H(y),await r(y)}}async function m(){var y,S;if(K.value){i.value=!0,v.value="",$.value=null,M.value=[];try{const I=await Le(K.value);if(I.success)$.value=I.data,G.value=I.data.serviceRates||{},console.log("API Stats - Full response:",I.data),console.log("API Stats - limits data:",I.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(y=I.data.limits)==null?void 0:y.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(S=I.data.limits)==null?void 0:S.weeklyOpusCost),await Y(),v.value="";else throw new Error(I.message||"查询失败")}catch(I){console.error("Load stats with apiId error:",I),v.value=I.message||"查询统计数据失败",$.value=null,M.value=[]}finally{i.value=!1}}}async function A(){g.value=!0;try{const y=await Ge();y&&y.success&&y.data&&(n.value={...n.value,...y.data})}catch(y){console.error("Error loading OEM settings:",y),n.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{g.value=!1}}async function N(){try{const y=await He();y&&y.success&&y.data&&(W.value=y.data)}catch(y){console.error("Error loading service rates:",y),W.value=null}}function B(y){return typeof y!="number"||y===0?"$0.000000":y>=1?"$"+y.toFixed(2):y>=.01?"$"+y.toFixed(4):"$"+y.toFixed(6)}function de(){if(K.value){const y=new URL(window.location);y.searchParams.set("apiId",K.value),window.history.pushState({},"",y)}}function re(){E.value&&localStorage.setItem("lastApiKey",E.value)}function ie(){return localStorage.getItem("lastApiKey")}async function J(){const y=ue();if(y.length===0){v.value="请输入至少一个有效的 API Key";return}i.value=!0,v.value="",U.value=null,F.value=[],Q.value=[],M.value=[],P.value=y,D.value=[],G.value={};try{const S=await Promise.allSettled(y.map(d=>Re(d))),I=[],V=[];if(S.forEach((d,z)=>{d.status==="fulfilled"&&d.value.success?(I.push(d.value.data.id),V.push(y[z])):Q.value.push(y[z])}),I.length===0)throw new Error("所有 API Key 都无效");D.value=I,P.value=V;const p=await Je(I);if(p.success)U.value=p.data.aggregated,F.value=p.data.individual,$.value=p.data.aggregated,x.value=p.data.aggregated.dailyUsage||null,f.value=p.data.aggregated.monthlyUsage||null,await ae(h.value),ye();else throw new Error(p.message||"批量查询失败")}catch(S){console.error("Batch query error:",S),v.value=S.message||"批量查询统计数据失败",U.value=null,F.value=[]}finally{i.value=!1}}async function ae(y="daily"){if(D.value.length!==0){_.value=!0;try{const S=await Qe(D.value,y);if(S.success)M.value=S.data||[];else throw new Error(S.message||"加载批量模型统计失败")}catch(S){console.error("Load batch model stats error:",S),M.value=[]}finally{_.value=!1}}}function ue(){if(!E.value)return[];const y=E.value.split(/[,\n]+/).map(I=>I.trim()).filter(I=>I.length>=10&&I.length<=512);return[...new Set(y)].slice(0,30)}function ye(){if(D.value.length>0){const y=new URL(window.location);y.searchParams.set("apiIds",D.value.join(",")),y.searchParams.set("batch","true"),window.history.pushState({},"",y)}}function fe(){E.value=""}function pe(){$.value=null,M.value=[],L.value=[],w.value=[],u.value=[],x.value=null,f.value=null,c.value=null,v.value="",h.value="daily",K.value=null,G.value={},P.value=[],D.value=[],U.value=null,F.value=[],Q.value=[]}function he(){E.value="",C.value=!1,pe()}return{apiKey:E,apiId:K,loading:i,modelStatsLoading:_,oemLoading:g,error:v,statsPeriod:h,statsData:$,modelStats:M,dailyModelStats:L,monthlyModelStats:w,alltimeModelStats:u,dailyStats:x,monthlyStats:f,alltimeStats:c,oemSettings:n,multiKeyMode:C,apiKeys:P,apiIds:D,aggregatedStats:U,individualStats:F,invalidKeys:Q,serviceRates:W,keyServiceRates:G,currentPeriodData:te,usagePercentages:ne,queryStats:oe,queryBatchStats:J,loadAllPeriodStats:Y,loadAllModelStats:Z,loadPeriodStats:H,loadModelStats:r,loadBatchModelStats:ae,switchPeriod:s,loadStatsWithApiId:m,loadOemSettings:A,loadServiceRates:N,loadApiKeyFromStorage:ie,clearData:pe,clearInput:fe,reset:he}}),it={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},dt={class:"mx-auto max-w-4xl"},ut={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},ct={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},mt={class:"button-group flex items-center gap-2"},gt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},xt={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},yt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},ft={class:"lg:col-span-3"},pt={key:0,class:"relative"},vt=["disabled","type"],bt={key:1,class:"relative"},kt=["disabled"],ht={class:"lg:col-span-1"},_t=["disabled"],wt={key:0,class:"fas fa-spinner loading-spinner"},$t={key:1,class:"fas fa-search"},Ct={class:"security-notice mt-4"},Tt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},St={__name:"ApiKeyInput",setup(E){const K=ge(),{apiKey:i,loading:_,multiKeyMode:g}=ce(K),{queryStats:v,clearInput:h}=K,$=T(!1),M=j(()=>{if(!g.value||!i.value)return[];const w=i.value.split(/[,\n]+/).map(x=>x.trim()).filter(x=>x.length>0);return[...new Set(w)].slice(0,30)}),L=j(()=>g.value?M.value.length>0:i.value&&i.value.trim().length>0);return(w,u)=>(a(),l("div",it,[u[16]||(u[16]=e("div",{class:"wide-card-title mb-6"},[e("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[e("i",{class:"fas fa-chart-line mr-3"}),k(" 使用统计查询 ")]),e("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),e("div",dt,[e("div",ut,[e("label",ct,[u[9]||(u[9]=e("i",{class:"fas fa-key mr-2"},null,-1)),k(" "+o(t(g)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),e("div",mt,[e("div",gt,[e("button",{class:R(["mode-switch-btn",{active:!t(g)}]),title:"单一模式",onClick:u[0]||(u[0]=x=>g.value=!1)},u[10]||(u[10]=[e("i",{class:"fas fa-key"},null,-1),e("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),e("button",{class:R(["mode-switch-btn",{active:t(g)}]),title:"聚合模式",onClick:u[1]||(u[1]=x=>g.value=!0)},[u[11]||(u[11]=e("i",{class:"fas fa-layer-group"},null,-1)),u[12]||(u[12]=e("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),t(g)&&M.value.length>0?(a(),l("span",xt,o(M.value.length),1)):b("",!0)],2)])])]),e("div",yt,[e("div",ft,[t(g)?(a(),l("div",bt,[xe(e("textarea",{"onUpdate:modelValue":u[5]||(u[5]=x=>Me(i)?i.value=x:null),class:"wide-card-input w-full resize-y",disabled:t(_),placeholder:`请输入您的 API Keys,支持以下格式:
+cr_xxx
+cr_yyy
+或
+cr_xxx, cr_yyy`,rows:"4",onKeyup:u[6]||(u[6]=$e(Ce((...x)=>t(v)&&t(v)(...x),["ctrl"]),["enter"]))},null,40,kt),[[Se,t(i)]]),t(i)&&!t(_)?(a(),l("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:u[7]||(u[7]=(...x)=>t(h)&&t(h)(...x))},u[13]||(u[13]=[e("i",{class:"fas fa-times-circle"},null,-1)]))):b("",!0)])):(a(),l("div",pt,[xe(e("input",{"onUpdate:modelValue":u[2]||(u[2]=x=>Me(i)?i.value=x:null),class:"wide-card-input w-full pr-10",disabled:t(_),placeholder:"请输入您的 API Key (cr_...)",type:$.value?"text":"password",onKeyup:u[3]||(u[3]=$e((...x)=>t(v)&&t(v)(...x),["enter"]))},null,40,vt),[[Fe,t(i)]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",type:"button",onClick:u[4]||(u[4]=x=>$.value=!$.value)},[e("i",{class:R($.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]))]),e("div",ht,[e("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:t(_)||!L.value,onClick:u[8]||(u[8]=(...x)=>t(v)&&t(v)(...x))},[t(_)?(a(),l("i",wt)):(a(),l("i",$t)),k(" "+o(t(_)?"查询中...":"查询统计"),1)],8,_t)])]),e("div",Ct,[u[14]||(u[14]=e("i",{class:"fas fa-shield-alt mr-2"},null,-1)),k(" "+o(t(g)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),t(g)?(a(),l("div",Tt,u[15]||(u[15]=[e("i",{class:"fas fa-lightbulb mr-2"},null,-1),e("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):b("",!0)])]))}},At=me(St,[["__scopeId","data-v-411fd161"]]),Kt={class:"space-y-4 sm:space-y-6 md:space-y-8"},Mt={class:"grid grid-cols-1 items-stretch gap-3 sm:gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Pt={class:"card-section"},Rt={class:"section-header"},Lt={class:"header-title"},It={key:0,class:"info-grid"},jt={class:"info-item"},Dt={class:"info-value"},qt={class:"info-item"},Ut={class:"info-value text-green-600 dark:text-emerald-400"},Et={key:0,class:"info-item"},Nt={class:"info-value text-red-500 dark:text-red-400"},Ot={class:"info-item"},Ft={class:"info-value"},Wt={class:"info-item"},Vt={class:"info-value"},zt={class:"info-item"},Bt={class:"info-value text-indigo-600 dark:text-indigo-300"},Gt={key:1,class:"info-item xl:col-span-2"},Ht={class:"space-y-2"},Jt={class:"truncate"},Qt={class:"font-semibold"},Yt={key:1,class:"info-grid"},Xt={class:"info-value flex items-center gap-1 break-all"},Zt={class:"info-item"},es={class:"info-item"},ts={class:"info-value"},ss={key:0,class:"info-item xl:col-span-2"},as={class:"flex flex-wrap gap-2"},rs={class:"info-item"},ls={class:"info-value break-all"},ns={class:"info-item xl:col-span-2"},os={class:"info-value"},is={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},ds={key:0,class:"text-red-500 dark:text-red-400"},us={key:1,class:"text-orange-500 dark:text-orange-400"},cs={key:2},ms={key:2,class:"text-gray-400 dark:text-gray-500"},gs={class:"card-section"},xs={class:"section-header"},ys={class:"header-tag"},fs={class:"metric-grid"},ps={class:"metric-card"},vs={class:"metric-value text-green-600 dark:text-emerald-300"},bs={class:"metric-label"},ks={class:"metric-card"},hs={class:"metric-value text-blue-600 dark:text-sky-300"},_s={class:"metric-label"},ws={class:"metric-card"},$s={class:"metric-value text-purple-600 dark:text-violet-300"},Cs={class:"metric-label"},Ts={class:"metric-card"},Ss={class:"metric-value text-amber-500 dark:text-amber-300"},As={class:"metric-label"},Ks={key:0,class:"card-section"},Ms={class:"flex items-center justify-between gap-3"},Ps={class:"flex items-center gap-3"},Rs={class:"account-name"},Ls={class:"account-sub"},Is={key:0,class:"mt-3 space-y-2"},js={class:"progress-row"},Ds={class:"progress-track"},qs={class:"progress-value"},Us={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},Es={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Ns={key:1,class:"mt-3"},Os={key:0,class:"space-y-2"},Fs={class:"quota-header"},Ws={class:"quota-percent"},Vs={class:"progress-track"},zs={class:"quota-foot"},Bs={key:1,class:"rounded-xl bg-gray-100 px-3 py-2 text-xs text-gray-500 dark:bg-gray-800 dark:text-gray-300"},Gs={__name:"StatsOverview",setup(E){const K=ge(),{statsData:i,statsPeriod:_,currentPeriodData:g,multiKeyMode:v,aggregatedStats:h,individualStats:$,invalidKeys:M}=ce(K),L=j(()=>!$.value||$.value.length===0?[]:[...$.value].sort((r,s)=>{var m,A;return(((m=s.usage)==null?void 0:m.allTokens)||0)-(((A=r.usage)==null?void 0:A.allTokens)||0)}).slice(0,3)),w=j(()=>{var r;return((r=i.value)==null?void 0:r.serviceRates)&&Object.keys(i.value.serviceRates).length>0}),u=r=>{var m;return!h.value||!h.value.usage.allTokens?0:((((m=r.usage)==null?void 0:m.allTokens)||0)/h.value.usage.allTokens*100).toFixed(1)},x=r=>r?new Date(r).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",f=r=>r?new Date(r){if(!r)return!1;const A=(new Date(r)-new Date)/(1e3*60*60*24);return A>0&&A<=7},n=r=>{const s={claude:"Claude",gemini:"Gemini",codex:"Codex",droid:"Droid",bedrock:"Bedrock",azure:"Azure",ccr:"CCR"};if(!r)return"全部服务";let m=r;if(typeof r=="string"){if(r==="all"||r==="[]")return"全部服务";try{m=JSON.parse(r)}catch{return s[r]||r}}return Array.isArray(m)&&m.length===0?"全部服务":Array.isArray(m)?m.map(A=>s[A]||A).join(", "):s[r]||r},C=j(()=>{var m,A;const r=(A=(m=i.value)==null?void 0:m.accounts)==null?void 0:A.details;if(!r)return[];const s=[];return r.claude&&r.claude.accountType==="dedicated"&&s.push({key:"claude",...r.claude}),r.openai&&r.openai.accountType==="dedicated"&&s.push({key:"openai",...r.openai}),s}),P=j(()=>{const r=C.value.length;return r<=1?"md:grid-cols-1 lg:grid-cols-1":r===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),D=r=>r?r.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",U=r=>{if(!r||r<=0)return"";const s=Math.floor(r),m=Math.floor(s/1440),A=Math.floor(s%1440/60),N=s%60;return m>0?A>0?`${m}天${A}小时`:`${m}天`:A>0?N>0?`${A}小时${N}分钟`:`${A}小时`:`${N}分钟`},F=r=>{if(!r)return{text:"状态未知",class:"text-gray-400"};if(r.isRateLimited){const s=U(r.minutesRemaining);return{text:`限流中${s?` · 剩余约 ${s}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},Q=(r,s)=>{if(!r||!s)return"暂无时间窗口信息";const m=new Date(r),A=new Date(s),N=B=>`${`${B.getHours()}`.padStart(2,"0")}:${`${B.getMinutes()}`.padStart(2,"0")}`;return`${N(m)} - ${N(A)}`},W=r=>{if(!r||r<=0)return"";const s=Math.floor(r/60),m=r%60;return s>0?`${s}小时${m}分钟`:`${m}分钟`},G=(r,s)=>{var A;if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((A=s==null?void 0:s.rateLimitStatus)!=null&&A.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const m=String(r).toLowerCase();return m==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":m==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},te=r=>{if(!r)return null;const s=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,m=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,A=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,N=r.resetAt?Date.parse(r.resetAt):null;return m!==null&&(A!==null&&A<=0||N!==null&&!Number.isNaN(N)&&Date.now()>=N)?0:s===null?null:Math.max(0,Math.min(100,s))},ne=r=>{const s=te(r);return s===null?"bg-gradient-to-r from-gray-300 to-gray-400":s>=90?"bg-gradient-to-r from-red-500 to-red-600":s>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},oe=r=>{const s=te(r);return s===null?"0%":`${s}%`},Y=r=>{const s=te(r);return s===null?"--":`${s.toFixed(1)}%`},Z=r=>{if(!r)return"--";let s=r.remainingSeconds;if(s==null&&(s=r.resetAfterSeconds),s==null||Number.isNaN(Number(s)))return"--";s=Math.max(0,Math.floor(Number(s)));const m=Math.floor(s/86400),A=Math.floor(s%86400/3600),N=Math.floor(s%3600/60),B=s%60;return m>0?A>0?`${m}天${A}小时`:`${m}天`:A>0?N>0?`${A}小时${N}分钟`:`${A}小时`:N>0?`${N}分钟`:`${B}秒`},H=r=>r==="secondary"?"周限":"5h";return(r,s)=>(a(),l("div",Kt,[e("div",Mt,[e("div",Pt,[e("header",Rt,[e("i",{class:R(["header-icon",t(v)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),e("h3",Lt,o(t(v)?"批量查询概要":"API Key 信息"),1)]),t(v)&&t(h)?(a(),l("div",It,[e("div",jt,[s[1]||(s[1]=e("p",{class:"info-label"},"查询 Keys 数",-1)),e("p",Dt,o(t(h).totalKeys)+" 个",1)]),e("div",qt,[s[3]||(s[3]=e("p",{class:"info-label"},"有效 Keys 数",-1)),e("p",Ut,[s[2]||(s[2]=e("i",{class:"fas fa-check-circle mr-1"},null,-1)),k(o(t(h).activeKeys)+" 个 ",1)])]),t(M).length>0?(a(),l("div",Et,[s[5]||(s[5]=e("p",{class:"info-label"},"无效 Keys 数",-1)),e("p",Nt,[s[4]||(s[4]=e("i",{class:"fas fa-times-circle mr-1"},null,-1)),k(o(t(M).length)+" 个 ",1)])])):b("",!0),e("div",Ot,[s[6]||(s[6]=e("p",{class:"info-label"},"总请求数",-1)),e("p",Ft,o(t(O)(t(h).usage.requests)),1)]),e("div",Wt,[s[7]||(s[7]=e("p",{class:"info-label"},"总 Token 数",-1)),e("p",Vt,o(t(O)(t(h).usage.allTokens)),1)]),e("div",zt,[s[8]||(s[8]=e("p",{class:"info-label"},"总费用",-1)),e("p",Bt,o(t(h).usage.formattedCost),1)]),t($).length>1?(a(),l("div",Gt,[s[9]||(s[9]=e("p",{class:"info-label"},"Top 3 贡献占比",-1)),e("div",Ht,[(a(!0),l(X,null,se(L.value,m=>(a(),l("div",{key:m.apiId,class:"contributor-item"},[e("span",Jt,o(m.name),1),e("span",Qt,o(u(m))+"%",1)]))),128))])])):b("",!0)])):(a(),l("div",Yt,[e("div",{class:"info-item cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-700/50",title:"点击复制",onClick:s[0]||(s[0]=m=>t(Ee)(t(i).name))},[s[11]||(s[11]=e("p",{class:"info-label"},"名称",-1)),e("p",Xt,[k(o(t(i).name)+" ",1),s[10]||(s[10]=e("i",{class:"fas fa-copy text-xs text-gray-400"},null,-1))])]),e("div",Zt,[s[12]||(s[12]=e("p",{class:"info-label"},"状态",-1)),e("p",{class:R(["info-value font-semibold",t(i).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[e("i",{class:R(["mr-1",t(i).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),k(" "+o(t(i).isActive?"活跃":"已停用"),1)],2)]),e("div",es,[s[13]||(s[13]=e("p",{class:"info-label"},"权限",-1)),e("p",ts,o(n(t(i).permissions)),1)]),w.value?(a(),l("div",ss,[s[14]||(s[14]=e("p",{class:"info-label"},"服务倍率",-1)),e("div",as,[(a(!0),l(X,null,se(t(i).serviceRates,(m,A)=>(a(),l("span",{key:A,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-800 dark:bg-purple-900/30 dark:text-purple-300"},o(A)+": "+o(m)+"x ",1))),128))])])):b("",!0),e("div",rs,[s[15]||(s[15]=e("p",{class:"info-label"},"创建时间",-1)),e("p",ls,o(t(Ye)(t(i).createdAt)),1)]),e("div",ns,[s[20]||(s[20]=e("p",{class:"info-label"},"过期时间",-1)),e("div",os,[t(i).expirationMode==="activation"&&!t(i).isActivated?(a(),l(X,{key:0},[s[16]||(s[16]=e("span",{class:"text-amber-600 dark:text-amber-400"},[e("i",{class:"fas fa-pause-circle mr-1"}),k("未激活 ")],-1)),e("span",is," 首次使用后 "+o(t(i).activationDays||(t(i).activationUnit==="hours"?24:30))+" "+o(t(i).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):t(i).expiresAt?(a(),l(X,{key:1},[f(t(i).expiresAt)?(a(),l("span",ds,s[17]||(s[17]=[e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),k("已过期 ",-1)]))):c(t(i).expiresAt)?(a(),l("span",us,[s[18]||(s[18]=e("i",{class:"fas fa-clock mr-1"},null,-1)),k(o(x(t(i).expiresAt)),1)])):(a(),l("span",cs,o(x(t(i).expiresAt)),1))],64)):(a(),l("span",ms,s[19]||(s[19]=[e("i",{class:"fas fa-infinity mr-1"},null,-1),k("永不过期 ",-1)])))])])]))]),e("div",gs,[e("header",xs,[s[21]||(s[21]=e("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),s[22]||(s[22]=e("h3",{class:"header-title"},"使用统计概览",-1)),e("span",ys,o(t(_)==="daily"?"今日":"本月"),1)]),e("div",fs,[e("div",ps,[e("p",vs,o(t(O)(t(g).requests)),1),e("p",bs,o(t(_)==="daily"?"今日":"本月")+"请求数",1)]),e("div",ks,[e("p",hs,o(t(O)(t(g).allTokens)),1),e("p",_s,o(t(_)==="daily"?"今日":"本月")+"Token 数",1)]),e("div",ws,[e("p",$s,o(t(g).formattedCost||"$0.000000"),1),e("p",Cs,o(t(_)==="daily"?"今日":"本月")+"费用",1)]),e("div",Ts,[e("p",Ss,o(t(O)(t(g).inputTokens)),1),e("p",As,o(t(_)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!t(v)&&C.value.length>0?(a(),l("div",Ks,[s[24]||(s[24]=e("header",{class:"section-header"},[e("i",{class:"header-icon fas fa-plug text-indigo-500"}),e("h3",{class:"header-title"},"专属账号运行状态"),e("span",{class:"header-tag"},"实时更新")],-1)),e("div",{class:R(["grid grid-cols-1 gap-4",P.value])},[(a(!0),l(X,null,se(C.value,m=>{var A,N,B,de,re,ie;return a(),l("div",{key:m.id||m.key,class:"account-card"},[e("div",Ms,[e("div",Ps,[e("span",{class:R(["account-icon",m.platform==="claude"?"icon-claude":"icon-openai"])},[e("i",{class:R(m.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),e("div",null,[e("p",Rs,o(D(m)),1),e("p",Ls,o(m.platform==="claude"?"会话窗口":"额度窗口"),1)])]),F(m.rateLimitStatus)?(a(),l("div",{key:0,class:R(["rate-badge",F(m.rateLimitStatus).class])},[s[23]||(s[23]=e("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),k(" "+o(F(m.rateLimitStatus).text),1)],2)):b("",!0)]),m.platform==="claude"?(a(),l("div",Is,[e("div",js,[e("div",Ds,[e("div",{class:R(["progress-bar",G((A=m.sessionWindow)==null?void 0:A.sessionWindowStatus,m)]),style:be({width:`${Math.min(100,Math.max(0,((N=m.sessionWindow)==null?void 0:N.progress)||0))}%`})},null,6)]),e("span",qs,o(Math.min(100,Math.max(0,Math.round(((B=m.sessionWindow)==null?void 0:B.progress)||0))))+"% ",1)]),e("div",Us,[e("span",null,o(Q((de=m.sessionWindow)==null?void 0:de.windowStart,(re=m.sessionWindow)==null?void 0:re.windowEnd)),1),((ie=m.sessionWindow)==null?void 0:ie.remainingTime)>0?(a(),l("span",Es," 剩余 "+o(W(m.sessionWindow.remainingTime)),1)):b("",!0)])])):m.platform==="openai"?(a(),l("div",Ns,[m.codexUsage?(a(),l("div",Os,[(a(),l(X,null,se(["primary","secondary"],J=>{var ae,ue,ye,fe;return e("div",{key:`${m.key}-${J}`,class:"quota-row"},[e("div",Fs,[e("span",{class:R(["quota-tag",J==="primary"?"tag-indigo":"tag-blue"])},o(H(J)),3),e("span",Ws,o(Y((ae=m.codexUsage)==null?void 0:ae[J])),1)]),e("div",Vs,[e("div",{class:R(["progress-bar",ne((ue=m.codexUsage)==null?void 0:ue[J])]),style:be({width:oe((ye=m.codexUsage)==null?void 0:ye[J])})},null,6)]),e("div",zs," 重置剩余 "+o(Z((fe=m.codexUsage)==null?void 0:fe[J])),1)])}),64))])):(a(),l("p",Bs," 暂无额度使用数据 "))])):b("",!0)])}),128))],2)])):b("",!0)]))}},Hs=me(Gs,[["__scopeId","data-v-99d8ab54"]]),Js={class:"card p-3 sm:p-4 md:p-6"},Qs={class:"mb-2 flex flex-col text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:flex-row sm:items-center sm:text-lg md:mb-4 md:text-xl"},Ys={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Xs={class:"space-y-2 md:space-y-3"},Zs={class:"flex items-center justify-between"},ea={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},ta={class:"flex items-center justify-between"},sa={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},aa={class:"flex items-center justify-between"},ra={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},la={class:"flex items-center justify-between"},na={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},oa={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},ia={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},da={class:"text-sm md:text-base"},ua={class:"text-lg md:text-xl"},ca={__name:"TokenDistribution",setup(E){const K=ge(),{statsPeriod:i,currentPeriodData:_}=ce(K);return(g,v)=>(a(),l("div",Js,[e("h3",Qs,[v[0]||(v[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),k(" Token 使用分布 ")],-1)),e("span",Ys,"("+o(t(i)==="daily"?"今日":"本月")+")",1)]),e("div",Xs,[e("div",Zs,[v[1]||(v[1]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),k(" 输入 Token ")],-1)),e("span",ea,o(t(O)(t(_).inputTokens)),1)]),e("div",ta,[v[2]||(v[2]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),k(" 输出 Token ")],-1)),e("span",sa,o(t(O)(t(_).outputTokens)),1)]),e("div",aa,[v[3]||(v[3]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),k(" 缓存创建 Token ")],-1)),e("span",ra,o(t(O)(t(_).cacheCreateTokens)),1)]),e("div",la,[v[4]||(v[4]=e("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[e("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),k(" 缓存读取 Token ")],-1)),e("span",na,o(t(O)(t(_).cacheReadTokens)),1)])]),e("div",oa,[e("div",ia,[e("span",da,o(t(i)==="daily"?"今日":"本月")+"总计",1),e("span",ua,o(t(O)(t(_).allTokens)),1)])])]))}},ma=me(ca,[["__scopeId","data-v-f3f6aa17"]]),ga={class:"flex h-full flex-col gap-3 sm:gap-4 md:gap-6"},xa={class:"card flex h-full flex-col p-3 sm:p-4 md:p-6"},ya={class:"mb-2 flex items-center text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:text-lg md:mb-4 md:text-xl"},fa={key:0,class:"space-y-4"},pa={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},va={class:"mb-3 flex items-center justify-between"},ba={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},ka={class:"grid grid-cols-2 gap-3"},ha={class:"text-center"},_a={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},wa={class:"text-center"},$a={class:"text-lg font-bold text-green-600"},Ca={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Ta={class:"space-y-2"},Sa={class:"flex items-center justify-between"},Aa={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Ka={class:"flex items-center justify-between"},Ma={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Pa={class:"flex items-center justify-between"},Ra={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},La={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},Ia={class:"text-red-700 dark:text-red-300"},ja={key:1,class:"space-y-4 md:space-y-5"},Da={class:"mb-2 flex items-center justify-between"},qa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Ua={key:0},Ea={key:1,class:"flex items-center gap-1"},Na={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Oa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Fa={class:"mb-2 flex items-center justify-between"},Wa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Va={key:0},za={key:1,class:"flex items-center gap-1"},Ba={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ga={key:1,class:"h-2 w-full rounded-full bg-gray-200"},Ha={key:0},Ja={class:"mb-2 flex items-center justify-between"},Qa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},Ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Xa={key:1},Za={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},er={key:0},tr={key:1},sr={key:2},ar={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},rr={class:"flex items-center justify-between"},lr={class:"text-sm font-medium text-gray-900 md:text-base"},nr={key:0},or={key:1,class:"flex items-center gap-1"},ir={class:"flex items-center justify-between"},dr={class:"text-sm font-medium text-gray-900 md:text-base"},ur={key:0,class:"text-orange-600"},cr={key:1,class:"text-green-600"},mr={class:"space-y-2"},gr={class:"flex items-center justify-between"},xr={class:"text-sm font-medium text-gray-900 md:text-base"},yr={key:0,class:"text-orange-600"},fr={key:1,class:"text-green-600"},pr={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},vr={key:0,class:"card !overflow-visible p-4 md:p-6"},br={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},kr={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},hr={class:"break-all text-gray-800 dark:text-gray-200"},_r={__name:"LimitConfig",setup(E){const K=ge(),{statsData:i,multiKeyMode:_,aggregatedStats:g,invalidKeys:v}=ce(K),h=j(()=>{var n;const c=(n=i.value)==null?void 0:n.restrictions;return c?c.enableModelRestriction===!0&&Array.isArray(c.restrictedModels)&&c.restrictedModels.length>0:!1}),$=j(()=>{var n;const c=(n=i.value)==null?void 0:n.restrictions;return c?c.enableClientRestriction===!0&&Array.isArray(c.allowedClients)&&c.allowedClients.length>0:!1}),M=()=>{if(!i.value.limits.dailyCostLimit||i.value.limits.dailyCostLimit===0)return 0;const c=i.value.limits.currentDailyCost/i.value.limits.dailyCostLimit*100;return Math.min(c,100)},L=()=>{const c=M();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-green-500"},w=()=>{if(!i.value.limits.totalCostLimit||i.value.limits.totalCostLimit===0)return 0;const c=i.value.limits.currentTotalCost/i.value.limits.totalCostLimit*100;return Math.min(c,100)},u=()=>{const c=w();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-blue-500"},x=()=>{if(!i.value.limits.weeklyOpusCostLimit||i.value.limits.weeklyOpusCostLimit===0)return 0;const c=i.value.limits.weeklyOpusCost/i.value.limits.weeklyOpusCostLimit*100;return Math.min(c,100)},f=()=>{const c=x();return c>=100?"bg-red-500":c>=80?"bg-yellow-500":"bg-indigo-500"};return(c,n)=>{var C;return a(),l("div",ga,[e("div",xa,[e("h3",ya,[n[0]||(n[0]=e("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),k(" "+o(t(_)?"限制配置(聚合查询模式)":"限制配置"),1)]),t(_)&&t(g)?(a(),l("div",fa,[e("div",pa,[e("div",va,[n[1]||(n[1]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),k(" API Keys 概况 ")],-1)),e("span",ba,o(t(g).activeKeys)+"/"+o(t(g).totalKeys),1)]),e("div",ka,[e("div",ha,[e("div",_a,o(t(g).totalKeys),1),n[2]||(n[2]=e("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),e("div",wa,[e("div",$a,o(t(g).activeKeys),1),n[3]||(n[3]=e("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),e("div",Ca,[n[7]||(n[7]=e("div",{class:"mb-3 flex items-center"},[e("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),e("div",Ta,[e("div",Sa,[n[4]||(n[4]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-database mr-1 text-gray-400"}),k(" 总请求数 ")],-1)),e("span",Aa,o(t(O)(t(g).usage.requests)),1)]),e("div",Ka,[n[5]||(n[5]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-coins mr-1 text-yellow-500"}),k(" 总 Tokens ")],-1)),e("span",Ma,o(t(O)(t(g).usage.allTokens)),1)]),e("div",Pa,[n[6]||(n[6]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),k(" 总费用 ")],-1)),e("span",Ra,o(t(g).usage.formattedCost),1)])])]),t(v)&&t(v).length>0?(a(),l("div",La,[n[8]||(n[8]=e("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),e("span",Ia,o(t(v).length)+" 个无效的 API Key ",1)])):b("",!0),n[9]||(n[9]=e("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),k(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):b("",!0),!t(_)&&((C=t(i))!=null&&C.limits)?(a(),l("div",ja,[e("div",null,[e("div",Da,[n[11]||(n[11]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),e("span",qa,[t(i).limits.dailyCostLimit>0?(a(),l("span",Ua," $"+o(t(i).limits.currentDailyCost.toFixed(4))+" / $"+o(t(i).limits.dailyCostLimit.toFixed(2)),1)):(a(),l("span",Ea,[k(" $"+o(t(i).limits.currentDailyCost.toFixed(4))+" / ",1),n[10]||(n[10]=e("i",{class:"fas fa-infinity"},null,-1))]))])]),t(i).limits.dailyCostLimit>0?(a(),l("div",Na,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",L()]),style:be({width:M()+"%"})},null,6)])):(a(),l("div",Oa,n[12]||(n[12]=[e("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),e("div",null,[e("div",Fa,[n[14]||(n[14]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),e("span",Wa,[t(i).limits.totalCostLimit>0?(a(),l("span",Va," $"+o(t(i).limits.currentTotalCost.toFixed(4))+" / $"+o(t(i).limits.totalCostLimit.toFixed(2)),1)):(a(),l("span",za,[k(" $"+o(t(i).limits.currentTotalCost.toFixed(4))+" / ",1),n[13]||(n[13]=e("i",{class:"fas fa-infinity"},null,-1))]))])]),t(i).limits.totalCostLimit>0?(a(),l("div",Ba,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",u()]),style:be({width:w()+"%"})},null,6)])):(a(),l("div",Ga,n[15]||(n[15]=[e("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),t(i).limits.weeklyOpusCostLimit>0?(a(),l("div",Ha,[e("div",Ja,[n[16]||(n[16]=e("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Claude 模型周费用限制",-1)),e("span",Qa," $"+o(t(i).limits.weeklyOpusCost.toFixed(4))+" / $"+o(t(i).limits.weeklyOpusCostLimit.toFixed(2)),1)]),e("div",Ya,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",f()]),style:be({width:x()+"%"})},null,6)])])):b("",!0),t(i).limits.rateLimitWindow>0&&(t(i).limits.rateLimitRequests>0||t(i).limits.tokenLimit>0||t(i).limits.rateLimitCost>0)?(a(),l("div",Xa,[ee(nt,{"cost-limit":t(i).limits.rateLimitCost,"current-cost":t(i).limits.currentWindowCost,"current-requests":t(i).limits.currentWindowRequests,"current-tokens":t(i).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":t(i).limits.rateLimitWindow,"request-limit":t(i).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":t(i).limits.tokenLimit,"window-end-time":t(i).limits.windowEndTime,"window-remaining-seconds":t(i).limits.windowRemainingSeconds,"window-start-time":t(i).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),e("div",Za,[n[17]||(n[17]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),t(i).limits.rateLimitCost>0?(a(),l("span",er,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):t(i).limits.tokenLimit>0?(a(),l("span",tr,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(a(),l("span",sr," 仅限制请求次数 "))])])):b("",!0),e("div",ar,[e("div",rr,[n[19]||(n[19]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),e("span",lr,[t(i).limits.concurrencyLimit>0?(a(),l("span",nr,o(t(i).limits.concurrencyLimit),1)):(a(),l("span",or,n[18]||(n[18]=[e("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),e("div",ir,[n[22]||(n[22]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),e("span",dr,[h.value?(a(),l("span",ur,[n[20]||(n[20]=e("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限制 "+o(t(i).restrictions.restrictedModels.length)+" 个模型 ",1)])):(a(),l("span",cr,n[21]||(n[21]=[e("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有模型 ",-1)])))])]),e("div",mr,[e("div",gr,[n[25]||(n[25]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),e("span",xr,[$.value?(a(),l("span",yr,[n[23]||(n[23]=e("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),k(" 限 "+o(t(i).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(a(),l("span",fr,n[24]||(n[24]=[e("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),k(" 允许所有客户端 ",-1)])))])]),$.value?(a(),l("div",pr,[(a(!0),l(X,null,se(t(i).restrictions.allowedClients,P=>(a(),l("span",{key:P,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-gray-800 dark:text-blue-300 md:text-sm"},[n[26]||(n[26]=e("i",{class:"fas fa-id-badge"},null,-1)),k(" "+o(P),1)]))),128))])):b("",!0)])])])):b("",!0)]),h.value?(a(),l("div",vr,[n[30]||(n[30]=e("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[e("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),k(" 详细限制信息 ")],-1)),e("div",br,[n[28]||(n[28]=e("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[e("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),k(" 受限模型列表 ")],-1)),e("div",kr,[(a(!0),l(X,null,se(t(i).restrictions.restrictedModels,P=>(a(),l("div",{key:P,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[n[27]||(n[27]=e("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),e("span",hr,o(P),1)]))),128))]),n[29]||(n[29]=e("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[e("i",{class:"fas fa-info-circle mr-1"}),k(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):b("",!0)])}}},wr=me(_r,[["__scopeId","data-v-e03e5fe5"]]),$r={class:"card h-full p-4 md:p-6"},Cr={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Tr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Sr={key:0,class:"space-y-2 md:space-y-3"},Ar={class:"mb-1 flex items-center justify-between text-sm"},Kr={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Mr={class:"text-xs text-gray-600 dark:text-gray-400"},Pr={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Rr={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},Lr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},Ir={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},jr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},Dr={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},qr={__name:"AggregatedStatsCard",setup(E){const K=ge(),{aggregatedStats:i,individualStats:_,statsPeriod:g,multiKeyMode:v}=ce(K),h=x=>x?g.value==="daily"?x.dailyUsage||x.usage:x.monthlyUsage||x.usage:null,$=j(()=>!_.value||_.value.length===0?[]:[..._.value].sort((x,f)=>{const c=h(x),n=h(f);return((n==null?void 0:n.cost)||0)-((c==null?void 0:c.cost)||0)}).slice(0,5)),M=j(()=>_.value?Math.max(0,_.value.length-5):0),L=j(()=>{var n,C;if(!_.value||!i.value)return 0;const x=$.value.reduce((P,D)=>{const U=h(D);return P+((U==null?void 0:U.cost)||0)},0),f=g.value==="daily"?((n=i.value.dailyUsage)==null?void 0:n.cost)||0:((C=i.value.monthlyUsage)==null?void 0:C.cost)||0;if(f===0)return 0;const c=f-x;return Math.max(0,Math.round(c/f*100))}),w=x=>{var C,P;if(!i.value)return 0;const f=g.value==="daily"?((C=i.value.dailyUsage)==null?void 0:C.cost)||0:((P=i.value.monthlyUsage)==null?void 0:P.cost)||0;if(f===0)return 0;const c=h(x),n=((c==null?void 0:c.cost)||0)/f*100;return Math.round(n)},u=x=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][x]||"bg-gray-400";return(x,f)=>(a(),l("div",$r,[e("h3",Cr,[f[0]||(f[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),k(" 使用占比 ")],-1)),e("span",Tr,"("+o(t(g)==="daily"?"今日":"本月")+")",1)]),t(i)&&t(_).length>0?(a(),l("div",Sr,[(a(!0),l(X,null,se($.value,(c,n)=>{var C,P;return a(),l("div",{key:c.apiId,class:"relative"},[e("div",Ar,[e("span",Kr,o(c.name||`Key ${n+1}`),1),e("span",Mr,o(w(c))+"% ",1)]),e("div",Pr,[e("div",{class:R(["h-2 rounded-full transition-all duration-300",u(n)]),style:be({width:w(c)+"%"})},null,6)]),e("div",Rr,[e("span",null,o(t(O)(((C=h(c))==null?void 0:C.requests)||0))+"次",1),e("span",null,o(((P=h(c))==null?void 0:P.formattedCost)||"$0.00"),1)])])}),128)),M.value>0?(a(),l("div",Lr,[e("div",Ir,[e("span",null,"其他 "+o(M.value)+" 个Keys",1),e("span",null,o(L.value)+"%",1)])])):b("",!0)])):t(v)?(a(),l("div",Dr,f[2]||(f[2]=[e("i",{class:"fas fa-chart-pie mr-2"},null,-1),k(" 暂无数据 ",-1)]))):(a(),l("div",jr,f[1]||(f[1]=[e("div",{class:"text-center"},[e("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),e("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},Ur=me(qr,[["__scopeId","data-v-37821008"]]),Er={class:"card p-3 sm:p-4 md:p-6"},Nr={class:"mb-2 sm:mb-3 md:mb-4"},Or={class:"flex flex-col text-base font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center sm:text-lg md:text-xl"},Fr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Wr={key:0,class:"py-6 text-center md:py-8"},Vr={key:1,class:"space-y-2"},zr={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between"},Br={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Gr=["onClick"],Hr={class:"flex flex-wrap gap-x-2 text-xs text-gray-500 dark:text-gray-400"},Jr={key:0},Qr={key:1},Yr={class:"flex-shrink-0 text-xs sm:text-sm"},Xr={class:"ml-1 font-semibold text-green-600"},Zr={class:"ml-1 font-semibold text-amber-600 dark:text-amber-400"},el={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},tl={class:"text-sm md:text-base"},sl={__name:"ModelUsageStats",props:{period:{type:String,default:"daily",validator:E=>["daily","monthly","alltime"].includes(E)}},setup(E){const K=E,i=ge(),{dailyModelStats:_,monthlyModelStats:g,alltimeModelStats:v,modelStatsLoading:h,serviceRates:$}=ce(i),M=j(()=>K.period==="daily"?_.value:K.period==="monthly"?g.value:K.period==="alltime"?v.value:[]),L=j(()=>h.value),w=j(()=>K.period==="daily"?"今日":K.period==="monthly"?"本月":K.period==="alltime"?"所有时间":""),u=c=>Ee(c,"模型名称已复制"),x=c=>{if(!c)return"claude";const n=c.toLowerCase();return n.includes("claude")||n.includes("sonnet")||n.includes("opus")||n.includes("haiku")?"claude":n.includes("gpt")||n.includes("o1")||n.includes("o3")||n.includes("o4")?"codex":n.includes("gemini")?"gemini":n.includes("droid")||n.includes("factory")?"droid":n.includes("bedrock")||n.includes("amazon")?"bedrock":n.includes("azure")?"azure":"claude"},f=c=>{var U,F,Q;if(!c.isLegacy&&((U=c.costs)==null?void 0:U.rated)!==void 0){const W=c.costs.rated;return W>=1?"$"+W.toFixed(2):W>=.01?"$"+W.toFixed(4):"$"+W.toFixed(6)}const n=((F=c.costs)==null?void 0:F.total)||0;if(!n||!((Q=$.value)!=null&&Q.rates))return"$0.00";const C=x(c.model),P=$.value.rates[C]||1,D=n*P;return D>=1?"$"+D.toFixed(2):D>=.01?"$"+D.toFixed(4):"$"+D.toFixed(6)};return(c,n)=>(a(),l("div",Er,[e("div",Nr,[e("h3",Or,[n[0]||(n[0]=e("span",{class:"flex items-center"},[e("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),k(" 模型使用统计 ")],-1)),e("span",Fr,"("+o(w.value)+")",1)])]),L.value?(a(),l("div",Wr,n[1]||(n[1]=[e("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):M.value.length>0?(a(),l("div",Vr,[(a(!0),l(X,null,se(M.value,(C,P)=>{var D,U;return a(),l("div",{key:P,class:"model-usage-item"},[e("div",zr,[e("div",Br,[e("h4",{class:"cursor-pointer text-sm font-bold text-gray-900 hover:text-indigo-600 dark:text-gray-100 dark:hover:text-indigo-400",title:"点击复制",onClick:F=>u(C.model)},[k(o(C.model)+" ",1),n[2]||(n[2]=e("i",{class:"fas fa-copy ml-1 text-xs text-gray-400"},null,-1))],8,Gr),e("div",Hr,[e("span",null,o(C.requests)+"次",1),e("span",null,"输入:"+o(t(O)(C.inputTokens)),1),e("span",null,"输出:"+o(t(O)(C.outputTokens)),1),C.cacheCreateTokens?(a(),l("span",Jr,"缓存创建:"+o(t(O)(C.cacheCreateTokens)),1)):b("",!0),C.cacheReadTokens?(a(),l("span",Qr,"缓存读取:"+o(t(O)(C.cacheReadTokens)),1)):b("",!0)])]),e("div",Yr,[n[4]||(n[4]=e("span",{class:"text-gray-500"},"官方API",-1)),e("span",Xr,o(((D=C.formatted)==null?void 0:D.total)||"$0.00"),1),(U=t($))!=null&&U.rates?(a(),l(X,{key:0},[n[3]||(n[3]=e("span",{class:"ml-2 text-gray-500"},"计费",-1)),e("span",Zr,o(f(C)),1)],64)):b("",!0)])])])}),128))])):(a(),l("div",el,[n[5]||(n[5]=e("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),e("p",tl,"暂无"+o(w.value)+"模型使用数据",1)]))]))}},we=me(sl,[["__scopeId","data-v-0571e613"]]),al={key:0,class:"card p-3 sm:p-4 md:p-6"},rl={class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"},ll={class:"mb-2 flex items-center justify-between"},nl={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ol={class:"flex items-center gap-1"},il={class:"rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-300",title:"全局倍率"},dl={key:0,class:"rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-900/30 dark:text-purple-300",title:"Key倍率"},ul={class:"mb-2 space-y-0.5 text-xs text-gray-600 dark:text-gray-400"},cl={class:"flex justify-between"},ml={class:"text-gray-900 dark:text-gray-200"},gl={class:"flex justify-between"},xl={class:"text-gray-900 dark:text-gray-200"},yl={key:0,class:"flex justify-between"},fl={class:"text-gray-900 dark:text-gray-200"},pl={key:1,class:"flex justify-between"},vl={class:"text-gray-900 dark:text-gray-200"},bl={class:"mb-2 space-y-0.5 border-t border-gray-200 pt-2 text-xs dark:border-gray-700"},kl={class:"flex justify-between"},hl={class:"font-semibold text-green-600 dark:text-green-400"},_l={class:"flex justify-between"},wl={class:"font-semibold text-amber-600 dark:text-amber-400"},$l={key:0,class:"space-y-0.5 border-t border-gray-200 pt-2 text-xs text-gray-500 dark:border-gray-700 dark:text-gray-500"},Cl={class:"flex justify-between"},Tl={class:"flex justify-between"},Sl={key:0,class:"flex justify-between"},Al={key:1,class:"flex justify-between"},Kl={__name:"ServiceCostCards",setup(E){const K=ge(),{modelStats:i,serviceRates:_,keyServiceRates:g,multiKeyMode:v}=ce(K),h={claude:"Claude",codex:"Codex",gemini:"Gemini",droid:"Droid",bedrock:"Bedrock",azure:"Azure",ccr:"CCR"},$=w=>{if(!w)return"claude";const u=w.toLowerCase();return u.includes("claude")||u.includes("sonnet")||u.includes("opus")||u.includes("haiku")?"claude":u.includes("gpt")||u.includes("o1")||u.includes("o3")||u.includes("o4")?"codex":u.includes("gemini")?"gemini":u.includes("droid")||u.includes("factory")?"droid":u.includes("bedrock")||u.includes("amazon")?"bedrock":u.includes("azure")?"azure":"claude"},M=j(()=>{var u,x;if(!((u=_.value)!=null&&u.rates)||!((x=i.value)!=null&&x.length))return[];const w={};return Object.keys(_.value.rates).forEach(f=>{w[f]={inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,realCost:0,ratedCost:0,pricing:null}}),i.value.forEach(f=>{var n,C,P,D;const c=$(f.model);if(w[c]){w[c].inputTokens+=f.inputTokens||0,w[c].outputTokens+=f.outputTokens||0,w[c].cacheCreateTokens+=f.cacheCreateTokens||0,w[c].cacheReadTokens+=f.cacheReadTokens||0;const U=((n=f.costs)==null?void 0:n.real)??((C=f.costs)==null?void 0:C.total)??0;w[c].realCost+=U;const F=_.value.rates[c]||1,Q=v.value?1:((P=g.value)==null?void 0:P[c])??1,W=!f.isLegacy&&((D=f.costs)==null?void 0:D.rated)!==void 0?f.costs.rated:U*F*Q;w[c].ratedCost+=W,!w[c].pricing&&f.pricing&&(w[c].pricing=f.pricing)}}),Object.entries(w).filter(([,f])=>f.inputTokens>0||f.outputTokens>0||f.cacheCreateTokens>0||f.realCost>0).map(([f,c])=>{var D;const n=_.value.rates[f]||1,C=v.value?1:((D=g.value)==null?void 0:D[f])??1,P=c.pricing;return{name:f,label:h[f]||f,globalRate:n,keyRate:C,inputTokens:c.inputTokens,outputTokens:c.outputTokens,cacheCreateTokens:c.cacheCreateTokens,cacheReadTokens:c.cacheReadTokens,officialCost:L(c.realCost),ccCost:L(c.ratedCost),pricing:P?{input:L(P.input),output:L(P.output),cacheCreate:P.cacheCreate?L(P.cacheCreate):null,cacheRead:P.cacheRead?L(P.cacheRead):null}:null}}).sort((f,c)=>c.inputTokens+c.outputTokens-(f.inputTokens+f.outputTokens))}),L=w=>!w||w===0?"$0.00":w>=1?"$"+w.toFixed(2):w>=.01?"$"+w.toFixed(4):"$"+w.toFixed(6);return(w,u)=>t(_)&&t(i).length>0?(a(),l("div",al,[u[10]||(u[10]=e("h3",{class:"mb-2 flex items-center justify-between text-base font-bold text-gray-900 dark:text-gray-100 sm:mb-3 sm:text-lg md:mb-4 md:text-xl"},[e("span",{class:"flex items-center"},[e("i",{class:"fas fa-coins mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),k(" 服务费用统计 ")]),e("span",{class:"text-xs font-normal text-gray-500 dark:text-gray-400"}," 计费 = 官方费用 × 全局倍率 × Key倍率 ")],-1)),e("div",rl,[(a(!0),l(X,null,se(M.value,x=>(a(),l("div",{key:x.name,class:"rounded-xl border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},[e("div",ll,[e("span",nl,o(x.label),1),e("div",ol,[e("span",il," 全局 "+o(x.globalRate)+"x ",1),t(v)?b("",!0):(a(),l("span",dl," Key "+o(x.keyRate)+"x ",1))])]),e("div",ul,[e("div",cl,[u[0]||(u[0]=e("span",null,"输入",-1)),e("span",ml,o(t(O)(x.inputTokens)),1)]),e("div",gl,[u[1]||(u[1]=e("span",null,"输出",-1)),e("span",xl,o(t(O)(x.outputTokens)),1)]),x.cacheCreateTokens?(a(),l("div",yl,[u[2]||(u[2]=e("span",null,"缓存创建",-1)),e("span",fl,o(t(O)(x.cacheCreateTokens)),1)])):b("",!0),x.cacheReadTokens?(a(),l("div",pl,[u[3]||(u[3]=e("span",null,"缓存读取",-1)),e("span",vl,o(t(O)(x.cacheReadTokens)),1)])):b("",!0)]),e("div",bl,[e("div",kl,[u[4]||(u[4]=e("span",{class:"text-gray-600 dark:text-gray-400"},"官方API",-1)),e("span",hl,o(x.officialCost),1)]),e("div",_l,[u[5]||(u[5]=e("span",{class:"text-gray-600 dark:text-gray-400"},"计费费用",-1)),e("span",wl,o(x.ccCost),1)])]),x.pricing?(a(),l("div",$l,[e("div",Cl,[u[6]||(u[6]=e("span",null,"输入",-1)),e("span",null,o(x.pricing.input)+"/M",1)]),e("div",Tl,[u[7]||(u[7]=e("span",null,"输出",-1)),e("span",null,o(x.pricing.output)+"/M",1)]),x.pricing.cacheCreate?(a(),l("div",Sl,[u[8]||(u[8]=e("span",null,"缓存创建",-1)),e("span",null,o(x.pricing.cacheCreate)+"/M",1)])):b("",!0),x.pricing.cacheRead?(a(),l("div",Al,[u[9]||(u[9]=e("span",null,"缓存读取",-1)),e("span",null,o(x.pricing.cacheRead)+"/M",1)])):b("",!0)])):b("",!0)]))),128))])])):b("",!0)}},Ml=me(Kl,[["__scopeId","data-v-79d7a9ef"]]),Pl={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Rl={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Ll={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Il={class:"flex items-center gap-3"},jl={class:"text-xs text-gray-500 dark:text-gray-400"},Dl=["disabled"],ql={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Ul={class:"mb-4"},El={class:"relative"},Nl=["value"],Ol={class:"mb-4 space-y-2"},Fl={class:"flex items-center justify-between text-sm"},Wl={class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},Vl={class:"text-sm"},zl={class:"mb-1 flex items-center justify-between"},Bl=["value"],Gl={class:"text-right text-xs text-gray-400 dark:text-gray-500"},Hl={class:"text-sm"},Jl={class:"mb-1 flex items-center justify-between"},Ql=["value"],Yl={class:"flex items-center justify-between text-sm"},Xl={class:"font-medium text-gray-700 dark:text-gray-300"},Zl={class:"mb-4"},en={class:"flex items-center gap-3"},tn={class:"text-xs text-gray-500 dark:text-gray-400"},sn={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},an={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},rn={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},ln={class:"max-h-40 overflow-y-auto p-3"},nn={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},on={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},dn={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},un={key:2,class:"text-sm text-red-600 dark:text-red-400"},cn={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},mn={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},gn=["disabled"],xn=["disabled"],yn={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""},serviceType:{type:String,default:"claude",validator:E=>["claude","gemini","openai"].includes(E)}},emits:["close"],setup(E,{emit:K}){const i=E,_=K,g=T("idle"),v=T(""),h=T(""),$=T(0),M=T(null),L=T(null),w=T("claude-sonnet-4-5-20250929"),u=T("hi"),x=T(1e3),f=[{value:100,label:"100"},{value:500,label:"500"},{value:1e3,label:"1000"},{value:2e3,label:"2000"},{value:4096,label:"4096"}],c=T({claude:[],gemini:[],openai:[]}),n=async()=>{try{const r=await Xe();r.success&&r.data&&(c.value={claude:r.data.claude||[],gemini:r.data.gemini||[],openai:r.data.openai||[]})}catch(r){console.error("Failed to load models:",r)}},C=j(()=>{const r={claude:{name:"Claude",endpoint:"/api-key/test",defaultModel:"claude-sonnet-4-5-20250929",displayEndpoint:"/api/v1/messages"},gemini:{name:"Gemini",endpoint:"/api-key/test-gemini",defaultModel:"gemini-2.5-pro",displayEndpoint:"/gemini/v1/models/:model:streamGenerateContent"},openai:{name:"OpenAI (Codex)",endpoint:"/api-key/test-openai",defaultModel:"gpt-5",displayEndpoint:"/openai/responses"}};return r[i.serviceType]||r.claude}),P=j(()=>c.value[i.serviceType]||[]);De(()=>{n()});const D=j(()=>i.apiKeyName||"当前 API Key"),U=j(()=>{const r=i.apiKeyValue;return r?r.length<=10?"****":r.substring(0,6)+"****"+r.substring(r.length-4):""}),F=j(()=>{switch(g.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),Q=j(()=>{switch(g.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return h.value||"无法通过 API Key 访问服务";default:return""}}),W=j(()=>{switch(g.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),G=j(()=>{switch(g.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),te=j(()=>{switch(g.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),ne=j(()=>{switch(g.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),oe=j(()=>{switch(g.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function Y(){if(!i.apiKeyValue)return;g.value="testing",v.value="",h.value="",$.value=0,M.value=Date.now(),L.value&&L.value.abort(),L.value=new AbortController;const r=`${Ze.apiPrefix}/apiStats${C.value.endpoint}`;try{const s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:i.apiKeyValue,model:w.value,prompt:u.value,maxTokens:x.value}),signal:L.value.signal});if(!s.ok){const B=await s.json().catch(()=>({}));throw new Error(B.message||B.error||`HTTP ${s.status}`)}const m=s.body.getReader(),A=new TextDecoder;let N=!1;for(;!N;){const{done:B,value:de}=await m.read();if(B){N=!0;continue}const ie=A.decode(de).split(`
+`);for(const J of ie)if(J.startsWith("data: "))try{const ae=JSON.parse(J.substring(6));Z(ae)}catch{}}}catch(s){if(s.name==="AbortError")return;g.value="error",h.value=s.message||"连接失败",$.value=Date.now()-M.value}}function Z(r){switch(r.type){case"test_start":break;case"content":v.value+=r.text;break;case"message_stop":break;case"test_complete":$.value=Date.now()-M.value,r.success?g.value="success":(g.value="error",h.value=r.error||"测试失败");break;case"error":g.value="error",h.value=r.error||"未知错误",$.value=Date.now()-M.value;break}}function H(){g.value!=="testing"&&(L.value&&(L.value.abort(),L.value=null),g.value="idle",v.value="",h.value="",$.value=0,_("close"))}return Te(()=>i.show,r=>{r&&(g.value="idle",v.value="",h.value="",$.value=0,w.value=C.value.defaultModel,u.value="hi",x.value=1e3)}),Te(()=>i.serviceType,()=>{w.value=C.value.defaultModel}),qe(()=>{L.value&&L.value.abort()}),(r,s)=>(a(),ve(Ue,{to:"body"},[E.show?(a(),l("div",Pl,[e("div",{class:"absolute inset-0",onClick:H}),e("div",Rl,[e("div",Ll,[e("div",Il,[e("div",{class:R(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",g.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":g.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[e("i",{class:R(["fas",g.value==="idle"?"fa-vial":g.value==="testing"?"fa-spinner fa-spin":g.value==="success"?"fa-check":"fa-times"])},null,2)],2),e("div",null,[s[3]||(s[3]=e("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),e("p",jl,o(D.value),1)])]),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:g.value==="testing",onClick:H},s[4]||(s[4]=[e("i",{class:"fas fa-times text-sm"},null,-1)]),8,Dl)]),e("div",ql,[e("div",Ul,[s[6]||(s[6]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),e("div",El,[e("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:U.value},null,8,Nl),s[5]||(s[5]=e("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[e("i",{class:"fas fa-lock text-xs"})],-1))]),s[7]||(s[7]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),e("div",Ol,[e("div",Fl,[s[9]||(s[9]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点",-1)),e("span",Wl,[s[8]||(s[8]=e("i",{class:"fas fa-link"},null,-1)),k(" "+o(C.value.displayEndpoint),1)])]),e("div",Vl,[e("div",zl,[s[10]||(s[10]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),xe(e("select",{"onUpdate:modelValue":s[0]||(s[0]=m=>w.value=m),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300"},[(a(!0),l(X,null,se(P.value,m=>(a(),l("option",{key:m.value,value:m.value},o(m.label),9,Bl))),128))],512),[[Pe,w.value]])]),e("div",Gl,o(w.value),1)]),e("div",Hl,[e("div",Jl,[s[11]||(s[11]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最大输出 Token",-1)),xe(e("select",{"onUpdate:modelValue":s[1]||(s[1]=m=>x.value=m),class:"rounded-lg border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300"},[(a(),l(X,null,se(f,m=>e("option",{key:m.value,value:m.value},o(m.label),9,Ql)),64))],512),[[Pe,x.value]])])]),e("div",Yl,[s[12]||(s[12]=e("span",{class:"text-gray-500 dark:text-gray-400"},"测试服务",-1)),e("span",Xl,o(C.value.name),1)])]),e("div",Zl,[s[13]||(s[13]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 提示词 ",-1)),xe(e("textarea",{"onUpdate:modelValue":s[2]||(s[2]=m=>u.value=m),class:"w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",placeholder:"输入测试提示词...",rows:"2"},null,512),[[Se,u.value]])]),e("div",{class:R(["mb-4 rounded-xl border p-4 transition-all duration-300",W.value])},[e("div",en,[e("div",{class:R(["flex h-8 w-8 items-center justify-center rounded-lg",G.value])},[e("i",{class:R(["fas text-sm",te.value,ne.value])},null,2)],2),e("div",null,[e("p",{class:R(["font-medium",oe.value])},o(F.value),3),e("p",tn,o(Q.value),1)])])],2),g.value!=="idle"?(a(),l("div",sn,[e("div",an,[s[14]||(s[14]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),v.value?(a(),l("span",rn,o(v.value.length)+" 字符 ",1)):b("",!0)]),e("div",ln,[v.value?(a(),l("p",nn,[k(o(v.value)+" ",1),g.value==="testing"?(a(),l("span",on)):b("",!0)])):g.value==="testing"?(a(),l("p",dn,s[15]||(s[15]=[e("i",{class:"fas fa-circle-notch fa-spin"},null,-1),k(" 等待响应中... ",-1)]))):g.value==="error"&&h.value?(a(),l("p",un,o(h.value),1)):b("",!0)])])):b("",!0),$.value>0?(a(),l("div",cn,[s[16]||(s[16]=e("i",{class:"fas fa-clock"},null,-1)),e("span",null,"耗时 "+o(($.value/1e3).toFixed(2))+" 秒",1)])):b("",!0)]),e("div",mn,[e("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:g.value==="testing",onClick:H}," 关闭 ",8,gn),e("button",{class:R(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",g.value==="testing"||!E.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:g.value==="testing"||!E.apiKeyValue,onClick:Y},[e("i",{class:R(["fas",g.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),k(" "+o(g.value==="testing"?"测试中...":g.value==="idle"?"开始测试":"重新测试"),1)],10,xn)])])])):b("",!0)]))}},fn={class:"glass-strong mb-4 rounded-2xl p-3 shadow-xl sm:mb-6 sm:rounded-3xl sm:p-4 md:mb-8 md:p-6"},pn={class:"flex flex-col items-center justify-between gap-3 sm:gap-4 md:flex-row"},vn={class:"flex items-center gap-2 md:gap-4"},bn={class:"flex items-center"},kn={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},hn={class:"mb-4 sm:mb-6 md:mb-8"},_n={class:"flex justify-center"},wn={class:"inline-flex w-full max-w-2xl flex-wrap justify-center gap-1 rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl sm:w-auto sm:flex-nowrap"},$n={key:0,class:"tab-content"},Cn={key:0,class:"mb-4 sm:mb-6 md:mb-8"},Tn={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},Sn={key:1,class:"fade-in"},An={class:"glass-strong rounded-2xl p-3 shadow-xl sm:rounded-3xl sm:p-4 md:p-6"},Kn={class:"mb-3 border-b border-gray-200 pb-3 dark:border-gray-700 sm:mb-4 sm:pb-4 md:mb-6 md:pb-6"},Mn={class:"flex flex-col items-start justify-between gap-2 sm:gap-3 md:flex-row md:items-center md:gap-4"},Pn={class:"flex w-full items-center gap-2 md:w-auto"},Rn=["disabled"],Ln=["disabled"],In=["disabled"],jn={key:0,class:"relative"},Dn=["disabled","title"],qn={key:0,class:"absolute right-0 top-full z-50 mt-1 min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800"},Un={class:"mb-4 mt-4 grid grid-cols-1 gap-3 sm:mb-6 sm:mt-6 sm:gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},En={class:"space-y-4 sm:space-y-6"},Nn={key:1,class:"tab-content"},On={class:"glass-strong rounded-3xl shadow-xl"},Fn={key:2,class:"tab-content"},Wn={class:"glass-strong rounded-2xl p-4 shadow-xl sm:rounded-3xl sm:p-6 md:p-8"},Vn={class:"mb-4 flex gap-2 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},zn={key:0},Bn={key:0,class:"py-8 text-center"},Gn={key:1},Hn={class:"mb-6 rounded-xl bg-blue-50 p-4 dark:bg-blue-900/20"},Jn={class:"text-sm text-blue-700 dark:text-blue-300"},Qn={class:"font-medium"},Yn={class:"space-y-4"},Xn=["disabled"],Zn={key:0,class:"fas fa-spinner fa-spin mr-2"},eo={key:1,class:"fas fa-check-circle mr-2"},to={key:0,class:"mt-6"},so={class:"flex items-start gap-3"},ao={class:"font-medium"},ro={class:"mt-1 text-sm opacity-90"},lo={key:0,class:"mt-2 text-sm"},no={key:0},oo={class:"font-medium"},io={key:1},uo={class:"font-medium"},co={key:1},mo={key:0,class:"py-8 text-center"},go={key:1},xo={key:0,class:"py-8 text-center"},yo={key:1,class:"py-8 text-center"},fo={key:2,class:"space-y-3"},po={class:"flex items-start justify-between gap-4"},vo={class:"min-w-0 flex-1"},bo={class:"mb-1 flex items-center gap-2"},ko={key:0,class:"inline-flex items-center rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-300"},ho={class:"text-sm text-gray-600 dark:text-gray-300"},_o={key:0},wo={key:1},$o={key:2},Co={class:"whitespace-nowrap text-right text-xs text-gray-500 dark:text-gray-400"},To={class:"mb-4 flex items-center gap-3"},So={class:"text-lg font-semibold text-gray-900 dark:text-gray-100"},Ao={class:"mb-4 whitespace-pre-wrap text-sm leading-relaxed text-gray-600 dark:text-gray-300"},Ko={class:"mb-4 flex cursor-pointer items-center gap-2"},je="apiStatsNoticeRead",Mo={__name:"ApiStatsView",setup(E){const K=We(),i=ge(),_=et(),g=T("stats"),v=j(()=>_.isDarkMode),{apiKey:h,apiId:$,loading:M,oemLoading:L,error:w,statsPeriod:u,statsData:x,oemSettings:f,multiKeyMode:c}=ce(i),{queryStats:n,switchPeriod:C,loadStatsWithApiId:P,loadOemSettings:D,loadServiceRates:U,loadApiKeyFromStorage:F,reset:Q}=i,W=T(!1),G=T(!1),te=T("claude"),ne=T(!1),oe=T(!1),Y=T("redeem"),Z=T(""),H=T(!1),r=T(null),s=T([]),m=T(!1),A=async()=>{var d;if(!Z.value.trim()||!$.value)return;H.value=!0,r.value=null;const p=await tt({apiId:$.value,code:Z.value.trim()});if(H.value=!1,p.success){const z=((d=p.data)==null?void 0:d.warnings)||[],le=z.length>0;r.value={success:!0,message:le?z.join(";"):"额度卡兑换成功!",data:p.data,hasWarnings:le},Z.value="",Ie(le?"兑换成功(部分截断)":"兑换成功",le?"warning":"success"),P()}else r.value={success:!1,message:p.error||p.message||"兑换失败"},Ie(p.error||p.message||"兑换失败","error")},N=async()=>{var d;if(!$.value)return;m.value=!0;const p=await st($.value);m.value=!1,p.success&&(s.value=((d=p.data)==null?void 0:d.records)||p.data||[])},B=()=>{g.value="quota",Y.value==="history"&&N()},de=()=>{Y.value="history",N()},re=p=>{if(!p)return[];if(Array.isArray(p))return p;if(typeof p=="string"){if(p==="all")return[];try{const d=JSON.parse(p);return Array.isArray(d)?d:[]}catch{return[]}}return[]},ie=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("claude")}),J=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("gemini")}),ae=j(()=>{var d;const p=re((d=x.value)==null?void 0:d.permissions);return p.length===0?!0:p.includes("openai")}),ue=j(()=>ie.value||J.value||ae.value),ye=j(()=>{var z;const p=re((z=x.value)==null?void 0:z.permissions);if(p.length===0)return"全部服务";const d={claude:"Claude",gemini:"Gemini",openai:"OpenAI",droid:"Droid"};return p.map(le=>d[le]||le).join(", ")}),fe=()=>{G.value=!G.value},pe=(p="claude")=>{te.value=p,G.value=!1,W.value=!0},he=()=>{W.value=!1},y=()=>{ne.value=!1,oe.value&&sessionStorage.setItem(je,"1")},S=()=>{var d;const p=(d=f.value)==null?void 0:d.apiStatsNotice;p!=null&&p.enabled&&(p!=null&&p.content)&&!sessionStorage.getItem(je)&&(ne.value=!0)},I=p=>{G.value&&!p.target.closest(".relative")&&(G.value=!1)},V=p=>{(p.ctrlKey||p.metaKey)&&p.key==="Enter"&&(!M.value&&h.value.trim()&&n(),p.preventDefault()),p.key==="Escape"&&Q()};return De(async()=>{_.initTheme(),await Promise.all([D(),U()]),S();const p=K.query.apiId,d=K.query.apiKey;if(p&&p.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)){$.value=p;const z=F();z&&(h.value=z),P()}else if(d&&d.length>10)h.value=d;else{const z=F();z&&z.length>10&&(h.value=z,n())}document.addEventListener("keydown",V),document.addEventListener("click",I)}),qe(()=>{document.removeEventListener("keydown",V),document.removeEventListener("click",I)}),Te(h,p=>{p||i.clearData()}),(p,d)=>{var le,Ae;const z=ze("router-link");return a(),l("div",{class:R(["min-h-screen p-2 sm:p-4 md:p-6",v.value?"gradient-bg-dark":"gradient-bg"])},[e("div",fn,[e("div",pn,[ee(rt,{loading:t(L),"logo-src":t(f).siteIconData||t(f).siteIcon,subtitle:g.value==="stats"?"API Key 使用统计":g.value==="quota"?"额度卡":"使用教程",title:t(f).siteName},null,8,["loading","logo-src","subtitle","title"]),e("div",vn,[e("div",bn,[ee(lt,{mode:"dropdown"})]),t(f).ldapEnabled||t(f).showAdminButton!==!1?(a(),l("div",kn)):b("",!0),t(f).ldapEnabled?(a(),ve(z,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:_e(()=>d[14]||(d[14]=[e("i",{class:"fas fa-user text-sm md:text-base"},null,-1),e("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[14]})):b("",!0),t(f).showAdminButton!==!1?(a(),ve(z,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:_e(()=>d[15]||(d[15]=[e("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),e("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[15]})):b("",!0)])])]),e("div",hn,[e("div",_n,[e("div",wn,[e("button",{class:R(["tab-pill-button",g.value==="stats"?"active":""]),onClick:d[0]||(d[0]=q=>g.value="stats")},d[16]||(d[16]=[e("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),e("button",{class:R(["tab-pill-button",g.value==="quota"?"active":""]),onClick:B},d[17]||(d[17]=[e("i",{class:"fas fa-ticket-alt mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"额度卡",-1)]),2),e("button",{class:R(["tab-pill-button",g.value==="tutorial"?"active":""]),onClick:d[1]||(d[1]=q=>g.value="tutorial")},d[18]||(d[18]=[e("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),e("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),g.value==="stats"?(a(),l("div",$n,[ee(At),t(w)?(a(),l("div",Cn,[e("div",Tn,[d[19]||(d[19]=e("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),k(" "+o(t(w)),1)])])):b("",!0),t(x)?(a(),l("div",Sn,[e("div",An,[e("div",Kn,[e("div",Mn,[d[27]||(d[27]=e("div",{class:"flex items-center gap-2 md:gap-3"},[e("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),e("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),e("div",Pn,[e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="daily"}]]),disabled:t(M),onClick:d[2]||(d[2]=q=>t(C)("daily"))},d[20]||(d[20]=[e("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),k(" 今日 ",-1)]),10,Rn),e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="monthly"}]]),disabled:t(M),onClick:d[3]||(d[3]=q=>t(C)("monthly"))},d[21]||(d[21]=[e("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),k(" 本月 ",-1)]),10,Ln),e("button",{class:R(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:t(u)==="alltime"}]]),disabled:t(M),onClick:d[4]||(d[4]=q=>t(C)("alltime"))},d[22]||(d[22]=[e("i",{class:"fas fa-infinity text-xs md:text-sm"},null,-1),k(" 全部 ",-1)]),10,In),t(c)?b("",!0):(a(),l("div",jn,[e("button",{class:R(["test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",ue.value?"":"cursor-not-allowed opacity-50"]),disabled:t(M)||!ue.value,title:ue.value?"测试 API":`当前 Key 可用服务: ${ye.value}`,onClick:fe},d[23]||(d[23]=[e("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),k(" 测试 ",-1),e("i",{class:"fas fa-chevron-down ml-1 text-xs"},null,-1)]),10,Dn),G.value?(a(),l("div",qn,[ie.value?(a(),l("button",{key:0,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[5]||(d[5]=q=>pe("claude"))},d[24]||(d[24]=[e("i",{class:"fas fa-robot text-orange-500"},null,-1),k(" Claude ",-1)]))):b("",!0),J.value?(a(),l("button",{key:1,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[6]||(d[6]=q=>pe("gemini"))},d[25]||(d[25]=[e("i",{class:"fas fa-gem text-blue-500"},null,-1),k(" Gemini ",-1)]))):b("",!0),ae.value?(a(),l("button",{key:2,class:"flex w-full items-center gap-2 px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700",onClick:d[7]||(d[7]=q=>pe("openai"))},d[26]||(d[26]=[e("i",{class:"fas fa-code text-green-500"},null,-1),k(" Codex ",-1)]))):b("",!0)])):b("",!0)]))])])]),ee(Hs),e("div",Un,[ee(ma,{class:"h-full"}),t(c)?(a(),ve(Ur,{key:0,class:"h-full"})):(a(),ve(wr,{key:1,class:"h-full"}))]),ee(Ml,{class:"mb-4 sm:mb-6"}),e("div",En,[ee(we,{period:"daily"}),ee(we,{period:"monthly"}),ee(we,{period:"alltime"})])])])):b("",!0)])):b("",!0),g.value==="tutorial"?(a(),l("div",Nn,[e("div",On,[ee(ot)])])):b("",!0),g.value==="quota"?(a(),l("div",Fn,[e("div",Wn,[e("div",Vn,[e("button",{class:R(["rounded-lg px-4 py-2 text-sm font-medium transition-all",Y.value==="redeem"?"bg-blue-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:d[8]||(d[8]=q=>Y.value="redeem")},d[28]||(d[28]=[e("i",{class:"fas fa-ticket-alt mr-2"},null,-1),k(" 兑换额度卡 ",-1)]),2),e("button",{class:R(["rounded-lg px-4 py-2 text-sm font-medium transition-all",Y.value==="history"?"bg-blue-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600"]),onClick:de},d[29]||(d[29]=[e("i",{class:"fas fa-history mr-2"},null,-1),k(" 兑换记录 ",-1)]),2)]),Y.value==="redeem"?(a(),l("div",zn,[t($)?(a(),l("div",Gn,[e("div",Hn,[e("p",Jn,[d[31]||(d[31]=e("i",{class:"fas fa-info-circle mr-2"},null,-1)),d[32]||(d[32]=k(" 当前 API Key: ",-1)),e("span",Qn,o(((le=t(x))==null?void 0:le.name)||t($)),1)])]),e("div",Yn,[e("div",null,[d[33]||(d[33]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 额度卡卡号 ",-1)),xe(e("input",{"onUpdate:modelValue":d[10]||(d[10]=q=>Z.value=q),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 placeholder-gray-400 transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100 dark:placeholder-gray-500",placeholder:"请输入额度卡卡号",type:"text",onKeyup:$e(A,["enter"])},null,544),[[Se,Z.value]])]),e("button",{class:"w-full rounded-xl bg-gradient-to-r from-green-500 to-emerald-500 px-6 py-3 font-medium text-white transition-all hover:from-green-600 hover:to-emerald-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:!Z.value.trim()||H.value,onClick:A},[H.value?(a(),l("i",Zn)):(a(),l("i",eo)),k(" "+o(H.value?"兑换中...":"立即兑换"),1)],8,Xn)]),r.value?(a(),l("div",to,[e("div",{class:R(["rounded-xl p-4",r.value.success?r.value.hasWarnings?"bg-yellow-50 text-yellow-700 dark:bg-yellow-900/20 dark:text-yellow-300":"bg-green-50 text-green-700 dark:bg-green-900/20 dark:text-green-300":"bg-red-50 text-red-700 dark:bg-red-900/20 dark:text-red-300"])},[e("div",so,[e("i",{class:R(["mt-0.5 text-lg",r.value.success?r.value.hasWarnings?"fas fa-exclamation-triangle":"fas fa-check-circle":"fas fa-times-circle"])},null,2),e("div",null,[e("p",ao,o(r.value.success?r.value.hasWarnings?"兑换成功(部分截断)":"兑换成功":"兑换失败"),1),e("p",ro,o(r.value.message),1),r.value.success&&r.value.data?(a(),l("div",lo,[r.value.data.quotaAdded?(a(),l("p",no,[d[34]||(d[34]=k(" 额度增加: ",-1)),e("span",oo,"$"+o(r.value.data.quotaAdded),1)])):b("",!0),r.value.data.timeAdded?(a(),l("p",io,[d[35]||(d[35]=k(" 有效期延长: ",-1)),e("span",uo,o(r.value.data.timeAdded)+o(r.value.data.timeUnit==="days"?"天":r.value.data.timeUnit==="hours"?"小时":"月"),1)])):b("",!0)])):b("",!0)])])],2)])):b("",!0)])):(a(),l("div",Bn,[d[30]||(d[30]=e("div",{class:"mb-4 text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-key mb-4 block text-4xl opacity-50"}),e("p",null,"请先在「统计查询」页面输入您的 API Key")],-1)),e("button",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-6 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:d[9]||(d[9]=q=>g.value="stats")}," 前往输入 API Key ")]))])):b("",!0),Y.value==="history"?(a(),l("div",co,[t($)?(a(),l("div",go,[m.value?(a(),l("div",xo,d[37]||(d[37]=[e("i",{class:"fas fa-spinner fa-spin text-2xl text-gray-400"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):s.value.length===0?(a(),l("div",yo,d[38]||(d[38]=[e("i",{class:"fas fa-inbox text-4xl text-gray-300 dark:text-gray-600"},null,-1),e("p",{class:"mt-2 text-gray-500 dark:text-gray-400"},"暂无兑换记录",-1)]))):(a(),l("div",fo,[(a(!0),l(X,null,se(s.value,q=>(a(),l("div",{key:q.id,class:"rounded-xl border border-gray-200 bg-white p-4 dark:border-gray-700 dark:bg-gray-800"},[e("div",po,[e("div",vo,[e("div",bo,[e("span",{class:R(["inline-flex items-center rounded-full px-2 py-0.5 text-xs font-medium",q.cardType==="quota"?"bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-300":q.cardType==="time"?"bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-300":"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300"])},o(q.cardType==="quota"?"额度卡":q.cardType==="time"?"时间卡":"组合卡"),3),q.status==="revoked"?(a(),l("span",ko," 已撤销 ")):b("",!0)]),e("p",ho,[q.quotaAdded?(a(),l("span",_o,"额度 +$"+o(q.quotaAdded),1)):b("",!0),q.quotaAdded&&q.timeAdded?(a(),l("span",wo," · ")):b("",!0),q.timeAdded?(a(),l("span",$o,"有效期 +"+o(q.timeAmount)+o(q.timeUnit==="days"?"天":q.timeUnit==="hours"?"小时":"月"),1)):b("",!0)])]),e("div",Co,o(t(at)(q.redeemedAt)),1)])]))),128))]))])):(a(),l("div",mo,[d[36]||(d[36]=e("div",{class:"mb-4 text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-key mb-4 block text-4xl opacity-50"}),e("p",null,"请先在「统计查询」页面输入您的 API Key")],-1)),e("button",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-6 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:d[11]||(d[11]=q=>g.value="stats")}," 前往输入 API Key ")]))])):b("",!0)])])):b("",!0),ee(yn,{"api-key-name":((Ae=t(x))==null?void 0:Ae.name)||"","api-key-value":t(h),"service-type":te.value,show:W.value,onClose:he},null,8,["api-key-name","api-key-value","service-type","show"]),(a(),ve(Ue,{to:"body"},[ee(Ve,{name:"fade"},{default:_e(()=>{var q,Ke;return[ne.value?(a(),l("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:Ce(y,["self"])},[e("div",{class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800",onClick:d[13]||(d[13]=Ce(()=>{},["stop"]))},[e("div",To,[d[39]||(d[39]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 text-white"},[e("i",{class:"fas fa-bell"})],-1)),e("h3",So,o(((q=t(f).apiStatsNotice)==null?void 0:q.title)||"通知"),1)]),e("p",Ao,o((Ke=t(f).apiStatsNotice)==null?void 0:Ke.content),1),e("label",Ko,[xe(e("input",{"onUpdate:modelValue":d[12]||(d[12]=Ne=>oe.value=Ne),class:"h-4 w-4 rounded border-gray-300 text-blue-500 focus:ring-blue-500",type:"checkbox"},null,512),[[Be,oe.value]]),d[40]||(d[40]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"本次会话不再显示",-1))]),e("button",{class:"w-full rounded-xl bg-gradient-to-r from-blue-500 to-cyan-500 px-4 py-2.5 font-medium text-white transition-all hover:from-blue-600 hover:to-cyan-600",onClick:y}," 知道了 ")])])):b("",!0)]}),_:1})]))],2)}}},Eo=me(Mo,[["__scopeId","data-v-8fdf3cb4"]]);export{Eo as default};
diff --git a/web/admin-spa/dist/assets/ApiStatsView-G_xX3WMi.js b/web/admin-spa/dist/assets/ApiStatsView-G_xX3WMi.js
deleted file mode 100644
index 84d02dbd..00000000
--- a/web/admin-spa/dist/assets/ApiStatsView-G_xX3WMi.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import{aP as pt,r as M,c as j,aX as et,x as n,y as l,z as t,O as b,L as K,P as r,u as e,C as P,K as ut,aq as ct,aa as mt,f as gt,Y as vt,Q as Z,ac as tt,B as lt,R as X,o as ft,V as yt,I as ot,a5 as bt,q as kt,aW as ht,J as xt,av as _t}from"./vue-vendor-R8HMg95E.js";import{_ as st,A as wt,a as $t}from"./index-B3t2NHq9.js";import{L as St}from"./LogoTitle-CNwD90nW.js";import{T as Ct}from"./ThemeToggle-DRoGUDeP.js";import{b as Tt}from"./vendor-Dr8jvgFu.js";import{_ as Kt}from"./WindowCountdown-DF7xS2EZ.js";import At from"./TutorialView-DeQdS06L.js";import"./element-plus-BUfCkBQO.js";class Lt{constructor(){this.baseURL=window.location.origin,this.isDev=!1}async request(v,s={}){try{this.isDev&&v.startsWith("/admin")&&(v="/webapi"+v);const p=await fetch(`${this.baseURL}${v}`,{headers:{"Content-Type":"application/json",...s.headers},...s}),d=await p.json();if(!p.ok)throw new Error(d.message||`请求失败: ${p.status}`);return d}catch(p){throw console.error("API Stats request error:",p),p}}async getKeyId(v){return this.request("/apiStats/api/get-key-id",{method:"POST",body:JSON.stringify({apiKey:v})})}async getUserStats(v){return this.request("/apiStats/api/user-stats",{method:"POST",body:JSON.stringify({apiId:v})})}async getUserModelStats(v,s="daily"){return this.request("/apiStats/api/user-model-stats",{method:"POST",body:JSON.stringify({apiId:v,period:s})})}async getOemSettings(){try{return await this.request("/admin/oem-settings")}catch(v){return console.error("Failed to load OEM settings:",v),{success:!0,data:{siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}}}async getBatchStats(v){return this.request("/apiStats/api/batch-stats",{method:"POST",body:JSON.stringify({apiIds:v})})}async getBatchModelStats(v,s="daily"){return this.request("/apiStats/api/batch-model-stats",{method:"POST",body:JSON.stringify({apiIds:v,period:s})})}}const Q=new Lt,at=pt("apistats",()=>{const N=M(""),v=M(null),s=M(!1),p=M(!1),d=M(!0),x=M(""),m=M("daily"),y=M(null),_=M([]),A=M(null),f=M(null),T=M({siteName:"",siteIcon:"",siteIconData:""}),O=M(!1),w=M([]),h=M([]),u=M(null),i=M([]),I=M([]),E=j(()=>{const c={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};return O.value&&u.value?m.value==="daily"?u.value.dailyUsage||c:u.value.monthlyUsage||c:m.value==="daily"?A.value||c:f.value||c}),H=j(()=>{if(!y.value||!E.value)return{tokenUsage:0,costUsage:0,requestUsage:0};const c=E.value,k=y.value.limits;return{tokenUsage:k.tokenLimit>0?Math.min(c.allTokens/k.tokenLimit*100,100):0,costUsage:k.dailyCostLimit>0?Math.min(c.cost/k.dailyCostLimit*100,100):0,requestUsage:k.rateLimitRequests>0?Math.min(c.requests/k.rateLimitRequests*100,100):0}});async function V(){if(O.value)return Y();const c=N.value.trim();if(!c){x.value="请输入 API Key";return}if(c.length<10||c.length>512){x.value="API Key 格式无效:长度应在 10-512 个字符之间";return}s.value=!0,x.value="",y.value=null,_.value=[],v.value=null;try{const k=await Q.getKeyId(c);if(k.success){v.value=k.data.id;const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,await W(),x.value="",z();else throw new Error(L.message||"查询失败")}else throw new Error(k.message||"获取 API Key ID 失败")}catch(k){console.error("Query stats error:",k),x.value=k.message||"查询统计数据失败,请检查您的 API Key 是否正确",y.value=null,_.value=[],v.value=null}finally{s.value=!1}}async function W(){v.value&&(await Promise.all([B("daily"),B("monthly")]),await D(m.value))}async function B(c){try{const k=await Q.getUserModelStats(v.value,c);if(k.success){const L=k.data||[],F={requests:0,inputTokens:0,outputTokens:0,cacheCreateTokens:0,cacheReadTokens:0,allTokens:0,cost:0,formattedCost:"$0.000000"};L.forEach(q=>{var J;F.requests+=q.requests||0,F.inputTokens+=q.inputTokens||0,F.outputTokens+=q.outputTokens||0,F.cacheCreateTokens+=q.cacheCreateTokens||0,F.cacheReadTokens+=q.cacheReadTokens||0,F.allTokens+=q.allTokens||0,F.cost+=((J=q.costs)==null?void 0:J.total)||0}),F.formattedCost=G(F.cost),c==="daily"?A.value=F:f.value=F}else console.warn(`Failed to load ${c} stats:`,k.message)}catch(k){console.error(`Load ${c} stats error:`,k)}}async function D(c="daily"){if(v.value){p.value=!0;try{const k=await Q.getUserModelStats(v.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载模型统计失败")}catch(k){console.error("Load model stats error:",k),_.value=[]}finally{p.value=!1}}}async function $(c){if(!(m.value===c||p.value)){if(m.value=c,O.value&&h.value.length>0){await rt(c);return}(c==="daily"&&!A.value||c==="monthly"&&!f.value)&&await B(c),await D(c)}}async function U(){var c,k;if(v.value){s.value=!0,x.value="",y.value=null,_.value=[];try{const L=await Q.getUserStats(v.value);if(L.success)y.value=L.data,console.log("API Stats - Full response:",L.data),console.log("API Stats - limits data:",L.data.limits),console.log("API Stats - weeklyOpusCostLimit:",(c=L.data.limits)==null?void 0:c.weeklyOpusCostLimit),console.log("API Stats - weeklyOpusCost:",(k=L.data.limits)==null?void 0:k.weeklyOpusCost),await W(),x.value="";else throw new Error(L.message||"查询失败")}catch(L){console.error("Load stats with apiId error:",L),x.value=L.message||"查询统计数据失败",y.value=null,_.value=[]}finally{s.value=!1}}}async function S(){d.value=!0;try{const c=await Q.getOemSettings();c&&c.success&&c.data&&(T.value={...T.value,...c.data})}catch(c){console.error("Error loading OEM settings:",c),T.value={siteName:"Claude Relay Service",siteIcon:"",siteIconData:""}}finally{d.value=!1}}function G(c){return typeof c!="number"||c===0?"$0.000000":c>=1?"$"+c.toFixed(2):c>=.01?"$"+c.toFixed(4):"$"+c.toFixed(6)}function z(){if(v.value){const c=new URL(window.location);c.searchParams.set("apiId",v.value),window.history.pushState({},"",c)}}async function Y(){const c=o();if(c.length===0){x.value="请输入至少一个有效的 API Key";return}s.value=!0,x.value="",u.value=null,i.value=[],I.value=[],_.value=[],w.value=c,h.value=[];try{const k=await Promise.allSettled(c.map(J=>Q.getKeyId(J))),L=[],F=[];if(k.forEach((J,it)=>{J.status==="fulfilled"&&J.value.success?(L.push(J.value.data.id),F.push(c[it])):I.value.push(c[it])}),L.length===0)throw new Error("所有 API Key 都无效");h.value=L,w.value=F;const q=await Q.getBatchStats(L);if(q.success)u.value=q.data.aggregated,i.value=q.data.individual,y.value=q.data.aggregated,A.value=q.data.aggregated.dailyUsage||null,f.value=q.data.aggregated.monthlyUsage||null,await rt(m.value),a();else throw new Error(q.message||"批量查询失败")}catch(k){console.error("Batch query error:",k),x.value=k.message||"批量查询统计数据失败",u.value=null,i.value=[]}finally{s.value=!1}}async function rt(c="daily"){if(h.value.length!==0){p.value=!0;try{const k=await Q.getBatchModelStats(h.value,c);if(k.success)_.value=k.data||[];else throw new Error(k.message||"加载批量模型统计失败")}catch(k){console.error("Load batch model stats error:",k),_.value=[]}finally{p.value=!1}}}function o(){if(!N.value)return[];const c=N.value.split(/[,\n]+/).map(L=>L.trim()).filter(L=>L.length>=10&&L.length<=512);return[...new Set(c)].slice(0,30)}function a(){if(h.value.length>0){const c=new URL(window.location);c.searchParams.set("apiIds",h.value.join(",")),c.searchParams.set("batch","true"),window.history.pushState({},"",c)}}function g(){N.value=""}function C(){y.value=null,_.value=[],A.value=null,f.value=null,x.value="",m.value="daily",v.value=null,w.value=[],h.value=[],u.value=null,i.value=[],I.value=[]}function R(){N.value="",O.value=!1,C()}return{apiKey:N,apiId:v,loading:s,modelStatsLoading:p,oemLoading:d,error:x,statsPeriod:m,statsData:y,modelStats:_,dailyStats:A,monthlyStats:f,oemSettings:T,multiKeyMode:O,apiKeys:w,apiIds:h,aggregatedStats:u,individualStats:i,invalidKeys:I,currentPeriodData:E,usagePercentages:H,queryStats:V,queryBatchStats:Y,loadAllPeriodStats:W,loadPeriodStats:B,loadModelStats:D,loadBatchModelStats:rt,switchPeriod:$,loadStatsWithApiId:U,loadOemSettings:S,clearData:C,clearInput:g,reset:R}}),Pt={class:"api-input-wide-card mb-8 rounded-3xl p-6 shadow-xl"},It={class:"mx-auto max-w-4xl"},Mt={class:"control-bar mb-4 flex flex-wrap items-center justify-between gap-3"},Dt={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},qt={class:"button-group flex items-center gap-2"},jt={class:"mode-switch-group flex items-center rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Ut={key:0,class:"ml-1 rounded-full bg-white/20 px-1.5 py-0.5 text-xs font-semibold"},Rt={class:"api-input-grid grid grid-cols-1 gap-4 lg:grid-cols-4"},Nt={class:"lg:col-span-3"},Ot=["disabled"],Et={key:1,class:"relative"},Ft=["disabled"],Wt={class:"lg:col-span-1"},Bt=["disabled"],Vt={key:0,class:"fas fa-spinner loading-spinner"},zt={key:1,class:"fas fa-search"},Jt={class:"security-notice mt-4"},Yt={key:0,class:"mt-2 rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-400"},Ht={__name:"ApiKeyInput",setup(N){const v=at(),{apiKey:s,loading:p,multiKeyMode:d}=et(v),{queryStats:x,clearInput:m}=v,y=j(()=>{if(!d.value||!s.value)return[];const A=s.value.split(/[,\n]+/).map(T=>T.trim()).filter(T=>T.length>0);return[...new Set(A)].slice(0,30)}),_=j(()=>d.value?y.value.length>0:s.value&&s.value.trim().length>0);return(A,f)=>(l(),n("div",Pt,[f[15]||(f[15]=t("div",{class:"wide-card-title mb-6"},[t("h2",{class:"mb-2 text-2xl font-bold text-gray-900 dark:text-gray-200"},[t("i",{class:"fas fa-chart-line mr-3"}),b(" 使用统计查询 ")]),t("p",{class:"text-base text-gray-600 dark:text-gray-400"},"查询您的 API Key 使用情况和统计数据")],-1)),t("div",It,[t("div",Mt,[t("label",Dt,[f[8]||(f[8]=t("i",{class:"fas fa-key mr-2"},null,-1)),b(" "+r(e(d)?"输入您的 API Keys(每行一个或用逗号分隔)":"输入您的 API Key"),1)]),t("div",qt,[t("div",jt,[t("button",{class:P(["mode-switch-btn",{active:!e(d)}]),title:"单一模式",onClick:f[0]||(f[0]=T=>d.value=!1)},f[9]||(f[9]=[t("i",{class:"fas fa-key"},null,-1),t("span",{class:"ml-2 hidden sm:inline"},"单一",-1)]),2),t("button",{class:P(["mode-switch-btn",{active:e(d)}]),title:"聚合模式",onClick:f[1]||(f[1]=T=>d.value=!0)},[f[10]||(f[10]=t("i",{class:"fas fa-layer-group"},null,-1)),f[11]||(f[11]=t("span",{class:"ml-2 hidden sm:inline"},"聚合",-1)),e(d)&&y.value.length>0?(l(),n("span",Ut,r(y.value.length),1)):K("",!0)],2)])])]),t("div",Rt,[t("div",Nt,[e(d)?(l(),n("div",Et,[ut(t("textarea",{"onUpdate:modelValue":f[4]||(f[4]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full resize-y",disabled:e(p),placeholder:`请输入您的 API Keys,支持以下格式:
-cr_xxx
-cr_yyy
-或
-cr_xxx, cr_yyy`,rows:"4",onKeyup:f[5]||(f[5]=mt(vt((...T)=>e(x)&&e(x)(...T),["ctrl"]),["enter"]))},null,40,Ft),[[ct,e(s)]]),e(s)&&!e(p)?(l(),n("button",{key:0,class:"absolute right-2 top-2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",title:"清空输入",onClick:f[6]||(f[6]=(...T)=>e(m)&&e(m)(...T))},f[12]||(f[12]=[t("i",{class:"fas fa-times-circle"},null,-1)]))):K("",!0)])):ut((l(),n("input",{key:0,"onUpdate:modelValue":f[2]||(f[2]=T=>gt(s)?s.value=T:null),class:"wide-card-input w-full",disabled:e(p),placeholder:"请输入您的 API Key (cr_...)",type:"password",onKeyup:f[3]||(f[3]=mt((...T)=>e(x)&&e(x)(...T),["enter"]))},null,40,Ot)),[[ct,e(s)]])]),t("div",Wt,[t("button",{class:"btn btn-primary btn-query flex h-full w-full items-center justify-center gap-2",disabled:e(p)||!_.value,onClick:f[7]||(f[7]=(...T)=>e(x)&&e(x)(...T))},[e(p)?(l(),n("i",Vt)):(l(),n("i",zt)),b(" "+r(e(p)?"查询中...":"查询统计"),1)],8,Bt)])]),t("div",Jt,[f[13]||(f[13]=t("i",{class:"fas fa-shield-alt mr-2"},null,-1)),b(" "+r(e(d)?"您的 API Keys 仅用于查询统计数据,不会被存储。聚合模式下部分个体化信息将不显示。":"您的 API Key 仅用于查询自己的统计数据,不会被存储或用于其他用途"),1)]),e(d)?(l(),n("div",Yt,f[14]||(f[14]=[t("i",{class:"fas fa-lightbulb mr-2"},null,-1),t("span",null,"提示:最多支持同时查询 30 个 API Keys。使用 Ctrl+Enter 快速查询。",-1)]))):K("",!0)])]))}},Gt=st(Ht,[["__scopeId","data-v-11e74200"]]),Qt={class:"space-y-6 md:space-y-8"},Xt={class:"grid grid-cols-1 items-stretch gap-4 md:gap-6 xl:grid-cols-[minmax(0,1.5fr)_minmax(0,1fr)]"},Zt={class:"card-section"},te={class:"section-header"},ee={class:"header-title"},se={key:0,class:"info-grid"},ae={class:"info-item"},re={class:"info-value"},le={class:"info-item"},ie={class:"info-value text-green-600 dark:text-emerald-400"},oe={key:0,class:"info-item"},ne={class:"info-value text-red-500 dark:text-red-400"},de={class:"info-item"},ue={class:"info-value"},ce={class:"info-item"},me={class:"info-value"},ge={class:"info-item"},xe={class:"info-value text-indigo-600 dark:text-indigo-300"},fe={key:1,class:"info-item xl:col-span-2"},ye={class:"space-y-2"},pe={class:"truncate"},ve={class:"font-semibold"},be={key:1,class:"info-grid"},ke={class:"info-item"},he={class:"info-value break-all"},_e={class:"info-item"},we={class:"info-item"},$e={class:"info-value"},Se={class:"info-item"},Ce={class:"info-value break-all"},Te={class:"info-item xl:col-span-2"},Ke={class:"info-value"},Ae={class:"ml-2 text-xs text-gray-500 dark:text-gray-400"},Le={key:0,class:"text-red-500 dark:text-red-400"},Pe={key:1,class:"text-orange-500 dark:text-orange-400"},Ie={key:2},Me={key:2,class:"text-gray-400 dark:text-gray-500"},De={class:"card-section"},qe={class:"section-header"},je={class:"header-tag"},Ue={class:"metric-grid"},Re={class:"metric-card"},Ne={class:"metric-value text-green-600 dark:text-emerald-300"},Oe={class:"metric-label"},Ee={class:"metric-card"},Fe={class:"metric-value text-blue-600 dark:text-sky-300"},We={class:"metric-label"},Be={class:"metric-card"},Ve={class:"metric-value text-purple-600 dark:text-violet-300"},ze={class:"metric-label"},Je={class:"metric-card"},Ye={class:"metric-value text-amber-500 dark:text-amber-300"},He={class:"metric-label"},Ge={key:0,class:"card-section"},Qe={class:"flex items-center justify-between gap-3"},Xe={class:"flex items-center gap-3"},Ze={class:"account-name"},ts={class:"account-sub"},es={key:0,class:"mt-3 space-y-2"},ss={class:"progress-row"},as={class:"progress-track"},rs={class:"progress-value"},ls={class:"flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-300"},is={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},os={key:1,class:"mt-3"},ns={key:0,class:"space-y-2"},ds={class:"quota-header"},us={class:"quota-percent"},cs={class:"progress-track"},ms={class:"quota-foot"},gs={key:1,class:"rounded-xl bg-slate-100 px-3 py-2 text-xs text-slate-500 dark:bg-slate-800 dark:text-slate-300"},xs={__name:"StatsOverview",setup(N){const v=at(),{statsData:s,statsPeriod:p,currentPeriodData:d,multiKeyMode:x,aggregatedStats:m,individualStats:y,invalidKeys:_}=et(v),A=j(()=>!y.value||y.value.length===0?[]:[...y.value].sort((o,a)=>{var g,C;return(((g=a.usage)==null?void 0:g.allTokens)||0)-(((C=o.usage)==null?void 0:C.allTokens)||0)}).slice(0,3)),f=o=>{var g;return!m.value||!m.value.usage.allTokens?0:((((g=o.usage)==null?void 0:g.allTokens)||0)/m.value.usage.allTokens*100).toFixed(1)},T=o=>{if(!o)return"无";try{return Tt(o).format("YYYY年MM月DD日 HH:mm")}catch{return"格式错误"}},O=o=>o?new Date(o).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}):"",w=o=>o?new Date(o){if(!o)return!1;const C=(new Date(o)-new Date)/(1e3*60*60*24);return C>0&&C<=7},u=o=>(typeof o!="number"&&(o=parseInt(o)||0),o===0?"0":o>=1e6?(o/1e6).toFixed(1)+"M":o>=1e3?(o/1e3).toFixed(1)+"K":o.toLocaleString()),i=o=>({claude:"Claude",gemini:"Gemini",all:"全部模型"})[o]||o||"未知",I=j(()=>{var g,C;const o=(C=(g=s.value)==null?void 0:g.accounts)==null?void 0:C.details;if(!o)return[];const a=[];return o.claude&&o.claude.accountType==="dedicated"&&a.push({key:"claude",...o.claude}),o.openai&&o.openai.accountType==="dedicated"&&a.push({key:"openai",...o.openai}),a}),E=j(()=>{const o=I.value.length;return o<=1?"md:grid-cols-1 lg:grid-cols-1":o===2?"md:grid-cols-2":"md:grid-cols-2 xl:grid-cols-3"}),H=o=>o?o.platform==="openai"?"OpenAI 专属账号":"Claude 专属账号":"专属账号",V=o=>{if(!o||o<=0)return"";const a=Math.floor(o),g=Math.floor(a/1440),C=Math.floor(a%1440/60),R=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:`${R}分钟`},W=o=>{if(!o)return{text:"状态未知",class:"text-gray-400"};if(o.isRateLimited){const a=V(o.minutesRemaining);return{text:`限流中${a?` · 剩余约 ${a}`:""}`,class:"text-red-500 dark:text-red-400"}}return{text:"未限流",class:"text-green-600 dark:text-emerald-400"}},B=(o,a)=>{if(!o||!a)return"暂无时间窗口信息";const g=new Date(o),C=new Date(a),R=c=>`${`${c.getHours()}`.padStart(2,"0")}:${`${c.getMinutes()}`.padStart(2,"0")}`;return`${R(g)} - ${R(C)}`},D=o=>{if(!o||o<=0)return"";const a=Math.floor(o/60),g=o%60;return a>0?`${a}小时${g}分钟`:`${g}分钟`},$=(o,a)=>{var C;if(!o)return"bg-gradient-to-r from-blue-500 to-indigo-500";if((C=a==null?void 0:a.rateLimitStatus)!=null&&C.isRateLimited)return"bg-gradient-to-r from-red-500 to-red-600";const g=String(o).toLowerCase();return g==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":g==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-500"},U=o=>{if(!o)return null;const a=typeof o.usedPercent=="number"&&!Number.isNaN(o.usedPercent)?o.usedPercent:null,g=typeof o.resetAfterSeconds=="number"&&!Number.isNaN(o.resetAfterSeconds)?o.resetAfterSeconds:null,C=typeof o.remainingSeconds=="number"?o.remainingSeconds:null,R=o.resetAt?Date.parse(o.resetAt):null;return g!==null&&(C!==null&&C<=0||R!==null&&!Number.isNaN(R)&&Date.now()>=R)?0:a===null?null:Math.max(0,Math.min(100,a))},S=o=>{const a=U(o);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},G=o=>{const a=U(o);return a===null?"0%":`${a}%`},z=o=>{const a=U(o);return a===null?"--":`${a.toFixed(1)}%`},Y=o=>{if(!o)return"--";let a=o.remainingSeconds;if(a==null&&(a=o.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const g=Math.floor(a/86400),C=Math.floor(a%86400/3600),R=Math.floor(a%3600/60),c=a%60;return g>0?C>0?`${g}天${C}小时`:`${g}天`:C>0?R>0?`${C}小时${R}分钟`:`${C}小时`:R>0?`${R}分钟`:`${c}秒`},rt=o=>o==="secondary"?"周限":"5h";return(o,a)=>(l(),n("div",Qt,[t("div",Xt,[t("div",Zt,[t("header",te,[t("i",{class:P(["header-icon",e(x)?"fas fa-layer-group text-purple-500":"fas fa-info-circle text-blue-500"])},null,2),t("h3",ee,r(e(x)?"批量查询概要":"API Key 信息"),1)]),e(x)&&e(m)?(l(),n("div",se,[t("div",ae,[a[0]||(a[0]=t("p",{class:"info-label"},"查询 Keys 数",-1)),t("p",re,r(e(m).totalKeys)+" 个",1)]),t("div",le,[a[2]||(a[2]=t("p",{class:"info-label"},"有效 Keys 数",-1)),t("p",ie,[a[1]||(a[1]=t("i",{class:"fas fa-check-circle mr-1"},null,-1)),b(r(e(m).activeKeys)+" 个 ",1)])]),e(_).length>0?(l(),n("div",oe,[a[4]||(a[4]=t("p",{class:"info-label"},"无效 Keys 数",-1)),t("p",ne,[a[3]||(a[3]=t("i",{class:"fas fa-times-circle mr-1"},null,-1)),b(r(e(_).length)+" 个 ",1)])])):K("",!0),t("div",de,[a[5]||(a[5]=t("p",{class:"info-label"},"总请求数",-1)),t("p",ue,r(u(e(m).usage.requests)),1)]),t("div",ce,[a[6]||(a[6]=t("p",{class:"info-label"},"总 Token 数",-1)),t("p",me,r(u(e(m).usage.allTokens)),1)]),t("div",ge,[a[7]||(a[7]=t("p",{class:"info-label"},"总费用",-1)),t("p",xe,r(e(m).usage.formattedCost),1)]),e(y).length>1?(l(),n("div",fe,[a[8]||(a[8]=t("p",{class:"info-label"},"Top 3 贡献占比",-1)),t("div",ye,[(l(!0),n(Z,null,tt(A.value,g=>(l(),n("div",{key:g.apiId,class:"contributor-item"},[t("span",pe,r(g.name),1),t("span",ve,r(f(g))+"%",1)]))),128))])])):K("",!0)])):(l(),n("div",be,[t("div",ke,[a[9]||(a[9]=t("p",{class:"info-label"},"名称",-1)),t("p",he,r(e(s).name),1)]),t("div",_e,[a[10]||(a[10]=t("p",{class:"info-label"},"状态",-1)),t("p",{class:P(["info-value font-semibold",e(s).isActive?"text-green-600 dark:text-emerald-400":"text-red-500 dark:text-red-400"])},[t("i",{class:P(["mr-1",e(s).isActive?"fas fa-check-circle":"fas fa-times-circle"])},null,2),b(" "+r(e(s).isActive?"活跃":"已停用"),1)],2)]),t("div",we,[a[11]||(a[11]=t("p",{class:"info-label"},"权限",-1)),t("p",$e,r(i(e(s).permissions)),1)]),t("div",Se,[a[12]||(a[12]=t("p",{class:"info-label"},"创建时间",-1)),t("p",Ce,r(T(e(s).createdAt)),1)]),t("div",Te,[a[17]||(a[17]=t("p",{class:"info-label"},"过期时间",-1)),t("div",Ke,[e(s).expirationMode==="activation"&&!e(s).isActivated?(l(),n(Z,{key:0},[a[13]||(a[13]=t("span",{class:"text-amber-600 dark:text-amber-400"},[t("i",{class:"fas fa-pause-circle mr-1"}),b("未激活 ")],-1)),t("span",Ae," 首次使用后 "+r(e(s).activationDays||(e(s).activationUnit==="hours"?24:30))+" "+r(e(s).activationUnit==="hours"?"小时":"天")+"过期 ",1)],64)):e(s).expiresAt?(l(),n(Z,{key:1},[w(e(s).expiresAt)?(l(),n("span",Le,a[14]||(a[14]=[t("i",{class:"fas fa-exclamation-circle mr-1"},null,-1),b("已过期 ",-1)]))):h(e(s).expiresAt)?(l(),n("span",Pe,[a[15]||(a[15]=t("i",{class:"fas fa-clock mr-1"},null,-1)),b(r(O(e(s).expiresAt)),1)])):(l(),n("span",Ie,r(O(e(s).expiresAt)),1))],64)):(l(),n("span",Me,a[16]||(a[16]=[t("i",{class:"fas fa-infinity mr-1"},null,-1),b("永不过期 ",-1)])))])])]))]),t("div",De,[t("header",qe,[a[18]||(a[18]=t("i",{class:"header-icon fas fa-chart-bar text-green-500"},null,-1)),a[19]||(a[19]=t("h3",{class:"header-title"},"使用统计概览",-1)),t("span",je,r(e(p)==="daily"?"今日":"本月"),1)]),t("div",Ue,[t("div",Re,[t("p",Ne,r(u(e(d).requests)),1),t("p",Oe,r(e(p)==="daily"?"今日":"本月")+"请求数",1)]),t("div",Ee,[t("p",Fe,r(u(e(d).allTokens)),1),t("p",We,r(e(p)==="daily"?"今日":"本月")+"Token 数",1)]),t("div",Be,[t("p",Ve,r(e(d).formattedCost||"$0.000000"),1),t("p",ze,r(e(p)==="daily"?"今日":"本月")+"费用",1)]),t("div",Je,[t("p",Ye,r(u(e(d).inputTokens)),1),t("p",He,r(e(p)==="daily"?"今日":"本月")+"输入 Token",1)])])])]),!e(x)&&I.value.length>0?(l(),n("div",Ge,[a[21]||(a[21]=t("header",{class:"section-header"},[t("i",{class:"header-icon fas fa-plug text-indigo-500"}),t("h3",{class:"header-title"},"专属账号运行状态"),t("span",{class:"header-tag"},"实时更新")],-1)),t("div",{class:P(["grid grid-cols-1 gap-4",E.value])},[(l(!0),n(Z,null,tt(I.value,g=>{var C,R,c,k,L,F;return l(),n("div",{key:g.id||g.key,class:"account-card"},[t("div",Qe,[t("div",Xe,[t("span",{class:P(["account-icon",g.platform==="claude"?"icon-claude":"icon-openai"])},[t("i",{class:P(g.platform==="claude"?"fas fa-meteor":"fas fa-robot")},null,2)],2),t("div",null,[t("p",Ze,r(H(g)),1),t("p",ts,r(g.platform==="claude"?"会话窗口":"额度窗口"),1)])]),W(g.rateLimitStatus)?(l(),n("div",{key:0,class:P(["rate-badge",W(g.rateLimitStatus).class])},[a[20]||(a[20]=t("i",{class:"fas fa-tachometer-alt mr-1"},null,-1)),b(" "+r(W(g.rateLimitStatus).text),1)],2)):K("",!0)]),g.platform==="claude"?(l(),n("div",es,[t("div",ss,[t("div",as,[t("div",{class:P(["progress-bar",$((C=g.sessionWindow)==null?void 0:C.sessionWindowStatus,g)]),style:lt({width:`${Math.min(100,Math.max(0,((R=g.sessionWindow)==null?void 0:R.progress)||0))}%`})},null,6)]),t("span",rs,r(Math.min(100,Math.max(0,Math.round(((c=g.sessionWindow)==null?void 0:c.progress)||0))))+"% ",1)]),t("div",ls,[t("span",null,r(B((k=g.sessionWindow)==null?void 0:k.windowStart,(L=g.sessionWindow)==null?void 0:L.windowEnd)),1),((F=g.sessionWindow)==null?void 0:F.remainingTime)>0?(l(),n("span",is," 剩余 "+r(D(g.sessionWindow.remainingTime)),1)):K("",!0)])])):g.platform==="openai"?(l(),n("div",os,[g.codexUsage?(l(),n("div",ns,[(l(),n(Z,null,tt(["primary","secondary"],q=>{var J,it,nt,dt;return t("div",{key:`${g.key}-${q}`,class:"quota-row"},[t("div",ds,[t("span",{class:P(["quota-tag",q==="primary"?"tag-indigo":"tag-blue"])},r(rt(q)),3),t("span",us,r(z((J=g.codexUsage)==null?void 0:J[q])),1)]),t("div",cs,[t("div",{class:P(["progress-bar",S((it=g.codexUsage)==null?void 0:it[q])]),style:lt({width:G((nt=g.codexUsage)==null?void 0:nt[q])})},null,6)]),t("div",ms," 重置剩余 "+r(Y((dt=g.codexUsage)==null?void 0:dt[q])),1)])}),64))])):(l(),n("p",gs," 暂无额度使用数据 "))])):K("",!0)])}),128))],2)])):K("",!0)]))}},fs=st(xs,[["__scopeId","data-v-b72df2cd"]]),ys={class:"card p-4 md:p-6"},ps={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},vs={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},bs={class:"space-y-2 md:space-y-3"},ks={class:"flex items-center justify-between"},hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},_s={class:"flex items-center justify-between"},ws={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},$s={class:"flex items-center justify-between"},Ss={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Cs={class:"flex items-center justify-between"},Ts={class:"text-sm font-medium text-gray-900 dark:text-gray-100 md:text-base"},Ks={class:"mt-3 border-t border-gray-200 pt-3 dark:border-gray-700 md:mt-4 md:pt-4"},As={class:"flex items-center justify-between font-bold text-gray-900 dark:text-gray-100"},Ls={class:"text-sm md:text-base"},Ps={class:"text-lg md:text-xl"},Is={__name:"TokenDistribution",setup(N){const v=at(),{statsPeriod:s,currentPeriodData:p}=et(v),d=x=>(typeof x!="number"&&(x=parseInt(x)||0),x===0?"0":x>=1e6?(x/1e6).toFixed(1)+"M":x>=1e3?(x/1e3).toFixed(1)+"K":x.toLocaleString());return(x,m)=>(l(),n("div",ys,[t("h3",ps,[m[0]||(m[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-coins mr-2 text-sm text-yellow-500 md:mr-3 md:text-base"}),b(" Token 使用分布 ")],-1)),t("span",vs,"("+r(e(s)==="daily"?"今日":"本月")+")",1)]),t("div",bs,[t("div",ks,[m[1]||(m[1]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-right mr-1 text-xs text-green-500 md:mr-2 md:text-sm"}),b(" 输入 Token ")],-1)),t("span",hs,r(d(e(p).inputTokens)),1)]),t("div",_s,[m[2]||(m[2]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-arrow-left mr-1 text-xs text-blue-500 md:mr-2 md:text-sm"}),b(" 输出 Token ")],-1)),t("span",ws,r(d(e(p).outputTokens)),1)]),t("div",$s,[m[3]||(m[3]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-save mr-1 text-xs text-purple-500 md:mr-2 md:text-sm"}),b(" 缓存创建 Token ")],-1)),t("span",Ss,r(d(e(p).cacheCreateTokens)),1)]),t("div",Cs,[m[4]||(m[4]=t("span",{class:"flex items-center text-sm text-gray-600 dark:text-gray-400 md:text-base"},[t("i",{class:"fas fa-download mr-1 text-xs text-orange-500 md:mr-2 md:text-sm"}),b(" 缓存读取 Token ")],-1)),t("span",Ts,r(d(e(p).cacheReadTokens)),1)])]),t("div",Ks,[t("div",As,[t("span",Ls,r(e(s)==="daily"?"今日":"本月")+"总计",1),t("span",Ps,r(d(e(p).allTokens)),1)])])]))}},Ms=st(Is,[["__scopeId","data-v-d9e5c1dd"]]),Ds={class:"flex h-full flex-col gap-4 md:gap-6"},qs={class:"card flex h-full flex-col p-4 md:p-6"},js={class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},Us={key:0,class:"space-y-4"},Rs={class:"rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-4 dark:from-blue-900/20 dark:to-indigo-900/20"},Ns={class:"mb-3 flex items-center justify-between"},Os={class:"rounded-full bg-blue-100 px-2 py-1 text-xs font-semibold text-blue-700 dark:bg-blue-800 dark:text-blue-200"},Es={class:"grid grid-cols-2 gap-3"},Fs={class:"text-center"},Ws={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Bs={class:"text-center"},Vs={class:"text-lg font-bold text-green-600"},zs={class:"rounded-lg bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:from-purple-900/20 dark:to-pink-900/20"},Js={class:"space-y-2"},Ys={class:"flex items-center justify-between"},Hs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Gs={class:"flex items-center justify-between"},Qs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Xs={class:"flex items-center justify-between"},Zs={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},ta={key:0,class:"rounded-lg bg-red-50 p-3 text-sm dark:bg-red-900/20"},ea={class:"text-red-700 dark:text-red-300"},sa={key:1,class:"space-y-4 md:space-y-5"},aa={class:"mb-2 flex items-center justify-between"},ra={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},la={key:0},ia={key:1,class:"flex items-center gap-1"},oa={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},na={key:1,class:"h-2 w-full rounded-full bg-gray-200"},da={class:"mb-2 flex items-center justify-between"},ua={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},ca={key:0},ma={key:1,class:"flex items-center gap-1"},ga={key:0,class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},xa={key:1,class:"h-2 w-full rounded-full bg-gray-200"},fa={key:0},ya={class:"mb-2 flex items-center justify-between"},pa={class:"text-xs text-gray-500 dark:text-gray-400 md:text-sm"},va={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ba={key:1},ka={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},ha={key:0},_a={key:1},wa={key:2},$a={class:"space-y-4 border-t border-gray-100 pt-3 dark:border-gray-700"},Sa={class:"flex items-center justify-between"},Ca={class:"text-sm font-medium text-gray-900 md:text-base"},Ta={key:0},Ka={key:1,class:"flex items-center gap-1"},Aa={class:"flex items-center justify-between"},La={class:"text-sm font-medium text-gray-900 md:text-base"},Pa={key:0,class:"text-orange-600"},Ia={key:1,class:"text-green-600"},Ma={class:"space-y-2"},Da={class:"flex items-center justify-between"},qa={class:"text-sm font-medium text-gray-900 md:text-base"},ja={key:0,class:"text-orange-600"},Ua={key:1,class:"text-green-600"},Ra={key:0,class:"flex flex-wrap gap-2 rounded-lg bg-blue-50 p-2 dark:bg-blue-900/20 md:p-3"},Na={key:0,class:"card !overflow-visible p-4 md:p-6"},Oa={class:"rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800 dark:bg-amber-900/20 md:p-4"},Ea={class:"max-h-64 space-y-1 overflow-y-auto pr-1 md:max-h-80 md:space-y-2"},Fa={class:"break-all text-gray-800 dark:text-gray-200"},Wa={__name:"LimitConfig",setup(N){const v=at(),{statsData:s,multiKeyMode:p,aggregatedStats:d,invalidKeys:x}=et(v),m=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableModelRestriction===!0&&Array.isArray(u.restrictedModels)&&u.restrictedModels.length>0:!1}),y=j(()=>{var i;const u=(i=s.value)==null?void 0:i.restrictions;return u?u.enableClientRestriction===!0&&Array.isArray(u.allowedClients)&&u.allowedClients.length>0:!1}),_=()=>{if(!s.value.limits.dailyCostLimit||s.value.limits.dailyCostLimit===0)return 0;const u=s.value.limits.currentDailyCost/s.value.limits.dailyCostLimit*100;return Math.min(u,100)},A=()=>{const u=_();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(!s.value.limits.totalCostLimit||s.value.limits.totalCostLimit===0)return 0;const u=s.value.limits.currentTotalCost/s.value.limits.totalCostLimit*100;return Math.min(u,100)},T=()=>{const u=f();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-blue-500"},O=()=>{if(!s.value.limits.weeklyOpusCostLimit||s.value.limits.weeklyOpusCostLimit===0)return 0;const u=s.value.limits.weeklyOpusCost/s.value.limits.weeklyOpusCostLimit*100;return Math.min(u,100)},w=()=>{const u=O();return u>=100?"bg-red-500":u>=80?"bg-yellow-500":"bg-indigo-500"},h=u=>(typeof u!="number"&&(u=parseInt(u)||0),u===0?"0":u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toLocaleString());return(u,i)=>(l(),n("div",Ds,[t("div",qs,[t("h3",js,[i[0]||(i[0]=t("i",{class:"fas fa-shield-alt mr-2 text-sm text-red-500 md:mr-3 md:text-base"},null,-1)),b(" "+r(e(p)?"限制配置(聚合查询模式)":"限制配置"),1)]),e(p)&&e(d)?(l(),n("div",Us,[t("div",Rs,[t("div",Ns,[i[1]||(i[1]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-blue-500"}),b(" API Keys 概况 ")],-1)),t("span",Os,r(e(d).activeKeys)+"/"+r(e(d).totalKeys),1)]),t("div",Es,[t("div",Fs,[t("div",Ws,r(e(d).totalKeys),1),i[2]||(i[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"总计 Keys",-1))]),t("div",Bs,[t("div",Vs,r(e(d).activeKeys),1),i[3]||(i[3]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400"},"激活 Keys",-1))])])]),t("div",zs,[i[7]||(i[7]=t("div",{class:"mb-3 flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-purple-500"}),t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"聚合统计摘要")],-1)),t("div",Js,[t("div",Ys,[i[4]||(i[4]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-database mr-1 text-gray-400"}),b(" 总请求数 ")],-1)),t("span",Hs,r(h(e(d).usage.requests)),1)]),t("div",Gs,[i[5]||(i[5]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-coins mr-1 text-yellow-500"}),b(" 总 Tokens ")],-1)),t("span",Qs,r(h(e(d).usage.allTokens)),1)]),t("div",Xs,[i[6]||(i[6]=t("span",{class:"text-xs text-gray-600 dark:text-gray-400"},[t("i",{class:"fas fa-dollar-sign mr-1 text-green-500"}),b(" 总费用 ")],-1)),t("span",Zs,r(e(d).usage.formattedCost),1)])])]),e(x)&&e(x).length>0?(l(),n("div",ta,[i[8]||(i[8]=t("i",{class:"fas fa-exclamation-triangle mr-2 text-red-600 dark:text-red-400"},null,-1)),t("span",ea,r(e(x).length)+" 个无效的 API Key ",1)])):K("",!0),i[9]||(i[9]=t("div",{class:"rounded-lg bg-gray-50 p-3 text-xs text-gray-600 dark:bg-gray-800 dark:text-gray-400"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 每个 API Key 有独立的限制设置,聚合模式下不显示单个限制配置 ")],-1))])):K("",!0),e(p)?K("",!0):(l(),n("div",sa,[t("div",null,[t("div",aa,[i[11]||(i[11]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"每日费用限制",-1)),t("span",ra,[e(s).limits.dailyCostLimit>0?(l(),n("span",la," $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / $"+r(e(s).limits.dailyCostLimit.toFixed(2)),1)):(l(),n("span",ia,[b(" $"+r(e(s).limits.currentDailyCost.toFixed(4))+" / ",1),i[10]||(i[10]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.dailyCostLimit>0?(l(),n("div",oa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",A()]),style:lt({width:_()+"%"})},null,6)])):(l(),n("div",na,i[12]||(i[12]=[t("div",{class:"h-2 rounded-full bg-green-500",style:{width:"0%"}},null,-1)])))]),t("div",null,[t("div",da,[i[14]||(i[14]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"总费用限制",-1)),t("span",ua,[e(s).limits.totalCostLimit>0?(l(),n("span",ca," $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / $"+r(e(s).limits.totalCostLimit.toFixed(2)),1)):(l(),n("span",ma,[b(" $"+r(e(s).limits.currentTotalCost.toFixed(4))+" / ",1),i[13]||(i[13]=t("i",{class:"fas fa-infinity"},null,-1))]))])]),e(s).limits.totalCostLimit>0?(l(),n("div",ga,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T()]),style:lt({width:f()+"%"})},null,6)])):(l(),n("div",xa,i[15]||(i[15]=[t("div",{class:"h-2 rounded-full bg-blue-500",style:{width:"0%"}},null,-1)])))]),e(s).limits.weeklyOpusCostLimit>0?(l(),n("div",fa,[t("div",ya,[i[16]||(i[16]=t("span",{class:"text-sm font-medium text-gray-600 dark:text-gray-400 md:text-base"},"Claude 模型周费用限制",-1)),t("span",pa," $"+r(e(s).limits.weeklyOpusCost.toFixed(4))+" / $"+r(e(s).limits.weeklyOpusCostLimit.toFixed(2)),1)]),t("div",va,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",w()]),style:lt({width:O()+"%"})},null,6)])])):K("",!0),e(s).limits.rateLimitWindow>0&&(e(s).limits.rateLimitRequests>0||e(s).limits.tokenLimit>0||e(s).limits.rateLimitCost>0)?(l(),n("div",ba,[X(Kt,{"cost-limit":e(s).limits.rateLimitCost,"current-cost":e(s).limits.currentWindowCost,"current-requests":e(s).limits.currentWindowRequests,"current-tokens":e(s).limits.currentWindowTokens,label:"时间窗口限制","rate-limit-window":e(s).limits.rateLimitWindow,"request-limit":e(s).limits.rateLimitRequests,"show-progress":!0,"show-tooltip":!0,"token-limit":e(s).limits.tokenLimit,"window-end-time":e(s).limits.windowEndTime,"window-remaining-seconds":e(s).limits.windowRemainingSeconds,"window-start-time":e(s).limits.windowStartTime},null,8,["cost-limit","current-cost","current-requests","current-tokens","rate-limit-window","request-limit","token-limit","window-end-time","window-remaining-seconds","window-start-time"]),t("div",ka,[i[17]||(i[17]=t("i",{class:"fas fa-info-circle mr-1"},null,-1)),e(s).limits.rateLimitCost>0?(l(),n("span",ha,' 请求次数和费用限制为"或"的关系,任一达到限制即触发限流 ')):e(s).limits.tokenLimit>0?(l(),n("span",_a,' 请求次数和Token使用量为"或"的关系,任一达到限制即触发限流 ')):(l(),n("span",wa," 仅限制请求次数 "))])])):K("",!0),t("div",$a,[t("div",Sa,[i[19]||(i[19]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"并发限制",-1)),t("span",Ca,[e(s).limits.concurrencyLimit>0?(l(),n("span",Ta,r(e(s).limits.concurrencyLimit),1)):(l(),n("span",Ka,i[18]||(i[18]=[t("i",{class:"fas fa-infinity text-gray-400"},null,-1)])))])]),t("div",Aa,[i[22]||(i[22]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"模型限制",-1)),t("span",La,[m.value?(l(),n("span",Pa,[i[20]||(i[20]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限制 "+r(e(s).restrictions.restrictedModels.length)+" 个模型 ",1)])):(l(),n("span",Ia,i[21]||(i[21]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有模型 ",-1)])))])]),t("div",Ma,[t("div",Da,[i[25]||(i[25]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"客户端限制",-1)),t("span",qa,[y.value?(l(),n("span",ja,[i[23]||(i[23]=t("i",{class:"fas fa-exclamation-triangle mr-1 text-xs md:text-sm"},null,-1)),b(" 限 "+r(e(s).restrictions.allowedClients.length)+" 种客户端使用 ",1)])):(l(),n("span",Ua,i[24]||(i[24]=[t("i",{class:"fas fa-check-circle mr-1 text-xs md:text-sm"},null,-1),b(" 允许所有客户端 ",-1)])))])]),y.value?(l(),n("div",Ra,[(l(!0),n(Z,null,tt(e(s).restrictions.allowedClients,I=>(l(),n("span",{key:I,class:"flex items-center gap-1 rounded-full bg-white px-2 py-1 text-xs text-blue-700 shadow-sm dark:bg-slate-900 dark:text-blue-300 md:text-sm"},[i[26]||(i[26]=t("i",{class:"fas fa-id-badge"},null,-1)),b(" "+r(I),1)]))),128))])):K("",!0)])])]))]),m.value?(l(),n("div",Na,[i[30]||(i[30]=t("h3",{class:"mb-3 flex items-center text-lg font-bold text-gray-900 dark:text-gray-100 md:mb-4 md:text-xl"},[t("i",{class:"fas fa-list-alt mr-2 text-sm text-amber-500 md:mr-3 md:text-base"}),b(" 详细限制信息 ")],-1)),t("div",Oa,[i[28]||(i[28]=t("h4",{class:"mb-2 flex items-center text-sm font-bold text-amber-800 dark:text-amber-300 md:mb-3 md:text-base"},[t("i",{class:"fas fa-robot mr-1 text-xs md:mr-2 md:text-sm"}),b(" 受限模型列表 ")],-1)),t("div",Ea,[(l(!0),n(Z,null,tt(e(s).restrictions.restrictedModels,I=>(l(),n("div",{key:I,class:"rounded border border-amber-200 bg-white px-2 py-1 text-xs dark:border-amber-700 dark:bg-gray-800 md:px-3 md:py-2 md:text-sm"},[i[27]||(i[27]=t("i",{class:"fas fa-ban mr-1 text-xs text-red-500 md:mr-2"},null,-1)),t("span",Fa,r(I),1)]))),128))]),i[29]||(i[29]=t("p",{class:"mt-2 text-xs text-amber-700 dark:text-amber-400 md:mt-3"},[t("i",{class:"fas fa-info-circle mr-1"}),b(" 此 API Key 不能访问以上列出的模型 ")],-1))])])):K("",!0)]))}},Ba=st(Wa,[["__scopeId","data-v-21526aa3"]]),Va={class:"card h-full p-4 md:p-6"},za={class:"mb-3 flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:mb-4 md:text-xl"},Ja={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},Ya={key:0,class:"space-y-2 md:space-y-3"},Ha={class:"mb-1 flex items-center justify-between text-sm"},Ga={class:"truncate font-medium text-gray-700 dark:text-gray-300"},Qa={class:"text-xs text-gray-600 dark:text-gray-400"},Xa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Za={class:"mt-1 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},tr={key:0,class:"border-t border-gray-200 pt-2 dark:border-gray-700"},er={class:"flex items-center justify-between text-sm text-gray-600 dark:text-gray-400"},sr={key:1,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},ar={key:2,class:"flex h-32 items-center justify-center text-sm text-gray-500 dark:text-gray-400"},rr={__name:"AggregatedStatsCard",setup(N){const v=at(),{aggregatedStats:s,individualStats:p,statsPeriod:d,multiKeyMode:x}=et(v),m=w=>w?d.value==="daily"?w.dailyUsage||w.usage:w.monthlyUsage||w.usage:null,y=j(()=>!p.value||p.value.length===0?[]:[...p.value].sort((w,h)=>{const u=m(w),i=m(h);return((i==null?void 0:i.cost)||0)-((u==null?void 0:u.cost)||0)}).slice(0,5)),_=j(()=>p.value?Math.max(0,p.value.length-5):0),A=j(()=>{var i,I;if(!p.value||!s.value)return 0;const w=y.value.reduce((E,H)=>{const V=m(H);return E+((V==null?void 0:V.cost)||0)},0),h=d.value==="daily"?((i=s.value.dailyUsage)==null?void 0:i.cost)||0:((I=s.value.monthlyUsage)==null?void 0:I.cost)||0;if(h===0)return 0;const u=h-w;return Math.max(0,Math.round(u/h*100))}),f=w=>{var I,E;if(!s.value)return 0;const h=d.value==="daily"?((I=s.value.dailyUsage)==null?void 0:I.cost)||0:((E=s.value.monthlyUsage)==null?void 0:E.cost)||0;if(h===0)return 0;const u=m(w),i=((u==null?void 0:u.cost)||0)/h*100;return Math.round(i)},T=w=>["bg-blue-500","bg-green-500","bg-purple-500","bg-yellow-500","bg-pink-500"][w]||"bg-gray-400",O=w=>(typeof w!="number"&&(w=parseInt(w)||0),w===0?"0":w>=1e6?(w/1e6).toFixed(1)+"M":w>=1e3?(w/1e3).toFixed(1)+"K":w.toLocaleString());return(w,h)=>(l(),n("div",Va,[t("h3",za,[h[0]||(h[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-chart-pie mr-2 text-sm text-orange-500 md:mr-3 md:text-base"}),b(" 使用占比 ")],-1)),t("span",Ja,"("+r(e(d)==="daily"?"今日":"本月")+")",1)]),e(s)&&e(p).length>0?(l(),n("div",Ya,[(l(!0),n(Z,null,tt(y.value,(u,i)=>{var I,E;return l(),n("div",{key:u.apiId,class:"relative"},[t("div",Ha,[t("span",Ga,r(u.name||`Key ${i+1}`),1),t("span",Qa,r(f(u))+"% ",1)]),t("div",Xa,[t("div",{class:P(["h-2 rounded-full transition-all duration-300",T(i)]),style:lt({width:f(u)+"%"})},null,6)]),t("div",Za,[t("span",null,r(O(((I=m(u))==null?void 0:I.requests)||0))+"次",1),t("span",null,r(((E=m(u))==null?void 0:E.formattedCost)||"$0.00"),1)])])}),128)),_.value>0?(l(),n("div",tr,[t("div",er,[t("span",null,"其他 "+r(_.value)+" 个Keys",1),t("span",null,r(A.value)+"%",1)])])):K("",!0)])):e(x)?(l(),n("div",ar,h[2]||(h[2]=[t("i",{class:"fas fa-chart-pie mr-2"},null,-1),b(" 暂无数据 ",-1)]))):(l(),n("div",sr,h[1]||(h[1]=[t("div",{class:"text-center"},[t("i",{class:"fas fa-chart-pie mb-2 text-2xl"}),t("p",null,"使用占比仅在多Key查询时显示")],-1)])))]))}},lr=st(rr,[["__scopeId","data-v-39572a8e"]]),ir={class:"card p-4 md:p-6"},or={class:"mb-4 md:mb-6"},nr={class:"flex flex-col text-lg font-bold text-gray-900 dark:text-gray-100 sm:flex-row sm:items-center md:text-xl"},dr={class:"text-xs font-normal text-gray-600 dark:text-gray-400 sm:ml-2 md:text-sm"},ur={key:0,class:"py-6 text-center md:py-8"},cr={key:1,class:"space-y-3 md:space-y-4"},mr={class:"mb-2 flex items-start justify-between md:mb-3"},gr={class:"min-w-0 flex-1"},xr={class:"break-all text-base font-bold text-gray-900 dark:text-gray-100 md:text-lg"},fr={class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},yr={class:"ml-3 flex-shrink-0 text-right"},pr={class:"text-base font-bold text-green-600 md:text-lg"},vr={class:"grid grid-cols-2 gap-2 text-xs md:grid-cols-4 md:gap-3 md:text-sm"},br={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},kr={class:"font-medium text-gray-900 dark:text-gray-100"},hr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},_r={class:"font-medium text-gray-900 dark:text-gray-100"},wr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},$r={class:"font-medium text-gray-900 dark:text-gray-100"},Sr={class:"rounded bg-gray-50 p-2 dark:bg-gray-700"},Cr={class:"font-medium text-gray-900 dark:text-gray-100"},Tr={key:2,class:"py-6 text-center text-gray-500 dark:text-gray-400 md:py-8"},Kr={class:"text-sm md:text-base"},Ar={__name:"ModelUsageStats",setup(N){const v=at(),{statsPeriod:s,modelStats:p,modelStatsLoading:d}=et(v),x=m=>(typeof m!="number"&&(m=parseInt(m)||0),m===0?"0":m>=1e6?(m/1e6).toFixed(1)+"M":m>=1e3?(m/1e3).toFixed(1)+"K":m.toLocaleString());return(m,y)=>(l(),n("div",ir,[t("div",or,[t("h3",nr,[y[0]||(y[0]=t("span",{class:"flex items-center"},[t("i",{class:"fas fa-robot mr-2 text-sm text-indigo-500 md:mr-3 md:text-base"}),b(" 模型使用统计 ")],-1)),t("span",dr,"("+r(e(s)==="daily"?"今日":"本月")+")",1)])]),e(d)?(l(),n("div",ur,y[1]||(y[1]=[t("i",{class:"fas fa-spinner loading-spinner mb-2 text-xl text-gray-600 dark:text-gray-400 md:text-2xl"},null,-1),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 md:text-base"},"加载模型统计数据中...",-1)]))):e(p).length>0?(l(),n("div",cr,[(l(!0),n(Z,null,tt(e(p),(_,A)=>{var f;return l(),n("div",{key:A,class:"model-usage-item"},[t("div",mr,[t("div",gr,[t("h4",xr,r(_.model),1),t("p",fr,r(_.requests)+" 次请求 ",1)]),t("div",yr,[t("div",pr,r(((f=_.formatted)==null?void 0:f.total)||"$0.000000"),1),y[2]||(y[2]=t("div",{class:"text-xs text-gray-600 dark:text-gray-400 md:text-sm"},"总费用",-1))])]),t("div",vr,[t("div",br,[y[3]||(y[3]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输入 Token",-1)),t("div",kr,r(x(_.inputTokens)),1)]),t("div",hr,[y[4]||(y[4]=t("div",{class:"text-gray-600 dark:text-gray-400"},"输出 Token",-1)),t("div",_r,r(x(_.outputTokens)),1)]),t("div",wr,[y[5]||(y[5]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存创建",-1)),t("div",$r,r(x(_.cacheCreateTokens)),1)]),t("div",Sr,[y[6]||(y[6]=t("div",{class:"text-gray-600 dark:text-gray-400"},"缓存读取",-1)),t("div",Cr,r(x(_.cacheReadTokens)),1)])])])}),128))])):(l(),n("div",Tr,[y[7]||(y[7]=t("i",{class:"fas fa-chart-pie mb-3 text-2xl md:text-3xl"},null,-1)),t("p",Kr," 暂无"+r(e(s)==="daily"?"今日":"本月")+"模型使用数据 ",1)]))]))}},Lr=st(Ar,[["__scopeId","data-v-b3b8dc5f"]]),Pr={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},Ir={class:"relative z-10 mx-3 flex w-full max-w-lg flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4"},Mr={class:"flex items-center justify-between border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80"},Dr={class:"flex items-center gap-3"},qr={class:"text-xs text-gray-500 dark:text-gray-400"},jr=["disabled"],Ur={class:"max-h-[70vh] overflow-y-auto px-5 py-4"},Rr={class:"mb-4"},Nr={class:"relative"},Or=["value"],Er={class:"mb-4 space-y-2"},Fr={class:"flex items-center justify-between text-sm"},Wr={class:"font-medium text-gray-700 dark:text-gray-300"},Br={class:"flex items-center gap-3"},Vr={class:"text-xs text-gray-500 dark:text-gray-400"},zr={key:0,class:"mb-4 overflow-hidden rounded-xl border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"},Jr={class:"flex items-center justify-between border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-700 dark:bg-gray-800"},Yr={key:0,class:"text-xs text-gray-500 dark:text-gray-500"},Hr={class:"max-h-40 overflow-y-auto p-3"},Gr={key:0,class:"whitespace-pre-wrap text-sm text-gray-700 dark:text-gray-300"},Qr={key:0,class:"inline-block h-4 w-1 animate-pulse bg-blue-500"},Xr={key:1,class:"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400"},Zr={key:2,class:"text-sm text-red-600 dark:text-red-400"},tl={key:1,class:"mb-4 flex items-center justify-center gap-2 text-xs text-gray-500 dark:text-gray-400"},el={class:"flex items-center justify-end gap-3 border-t border-gray-100 bg-gray-50/80 px-5 py-3 dark:border-gray-800 dark:bg-gray-900/50"},sl=["disabled"],al=["disabled"],rl={__name:"ApiKeyTestModal",props:{show:{type:Boolean,default:!1},apiKeyValue:{type:String,default:""},apiKeyName:{type:String,default:""}},emits:["close"],setup(N,{emit:v}){const s=N,p=v,d=M("idle"),x=M(""),m=M(""),y=M(0),_=M(null),A=M(null),f=M("claude-sonnet-4-5-20250929"),T=j(()=>s.apiKeyName||"当前 API Key"),O=j(()=>{const D=s.apiKeyValue;return D?D.length<=10?"****":D.substring(0,6)+"****"+D.substring(D.length-4):""}),w=j(()=>{switch(d.value){case"idle":return"准备就绪";case"testing":return"正在测试...";case"success":return"测试成功";case"error":return"测试失败";default:return"未知状态"}}),h=j(()=>{switch(d.value){case"idle":return"点击下方按钮开始测试 API Key 连通性";case"testing":return"正在通过 /api 端点发送测试请求";case"success":return"API Key 可以正常访问服务";case"error":return m.value||"无法通过 API Key 访问服务";default:return""}}),u=j(()=>{switch(d.value){case"idle":return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50";case"testing":return"border-blue-200 bg-blue-50 dark:border-blue-500/30 dark:bg-blue-900/20";case"success":return"border-green-200 bg-green-50 dark:border-green-500/30 dark:bg-green-900/20";case"error":return"border-red-200 bg-red-50 dark:border-red-500/30 dark:bg-red-900/20";default:return"border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800/50"}}),i=j(()=>{switch(d.value){case"idle":return"bg-gray-200 dark:bg-gray-700";case"testing":return"bg-blue-100 dark:bg-blue-500/30";case"success":return"bg-green-100 dark:bg-green-500/30";case"error":return"bg-red-100 dark:bg-red-500/30";default:return"bg-gray-200 dark:bg-gray-700"}}),I=j(()=>{switch(d.value){case"idle":return"fa-hourglass-start";case"testing":return"fa-spinner fa-spin";case"success":return"fa-check-circle";case"error":return"fa-exclamation-circle";default:return"fa-question-circle"}}),E=j(()=>{switch(d.value){case"idle":return"text-gray-500 dark:text-gray-400";case"testing":return"text-blue-500 dark:text-blue-400";case"success":return"text-green-500 dark:text-green-400";case"error":return"text-red-500 dark:text-red-400";default:return"text-gray-500 dark:text-gray-400"}}),H=j(()=>{switch(d.value){case"idle":return"text-gray-700 dark:text-gray-300";case"testing":return"text-blue-700 dark:text-blue-300";case"success":return"text-green-700 dark:text-green-300";case"error":return"text-red-700 dark:text-red-300";default:return"text-gray-700 dark:text-gray-300"}});async function V(){if(!s.apiKeyValue)return;d.value="testing",x.value="",m.value="",y.value=0,_.value=Date.now(),A.value&&A.value.abort(),A.value=new AbortController;const D=`${wt}/apiStats/api-key/test`;try{const $=await fetch(D,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:s.apiKeyValue,model:f.value}),signal:A.value.signal});if(!$.ok){const z=await $.json().catch(()=>({}));throw new Error(z.message||z.error||`HTTP ${$.status}`)}const U=$.body.getReader(),S=new TextDecoder;let G=!1;for(;!G;){const{done:z,value:Y}=await U.read();if(z){G=!0;continue}const o=S.decode(Y).split(`
-`);for(const a of o)if(a.startsWith("data: "))try{const g=JSON.parse(a.substring(6));W(g)}catch{}}}catch($){if($.name==="AbortError")return;d.value="error",m.value=$.message||"连接失败",y.value=Date.now()-_.value}}function W(D){switch(D.type){case"test_start":break;case"content":x.value+=D.text;break;case"message_stop":break;case"test_complete":y.value=Date.now()-_.value,D.success?d.value="success":(d.value="error",m.value=D.error||"测试失败");break;case"error":d.value="error",m.value=D.error||"未知错误",y.value=Date.now()-_.value;break}}function B(){d.value!=="testing"&&(A.value&&(A.value.abort(),A.value=null),d.value="idle",x.value="",m.value="",y.value=0,p("close"))}return ft(()=>s.show,D=>{D&&(d.value="idle",x.value="",m.value="",y.value=0)}),yt(()=>{A.value&&A.value.abort()}),(D,$)=>(l(),ot(bt,{to:"body"},[N.show?(l(),n("div",Pr,[t("div",{class:"absolute inset-0",onClick:B}),t("div",Ir,[t("div",Mr,[t("div",Dr,[t("div",{class:P(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-xl text-white shadow-lg",d.value==="success"?"bg-gradient-to-br from-green-500 to-emerald-500":d.value==="error"?"bg-gradient-to-br from-red-500 to-pink-500":"bg-gradient-to-br from-blue-500 to-indigo-500"])},[t("i",{class:P(["fas",d.value==="idle"?"fa-vial":d.value==="testing"?"fa-spinner fa-spin":d.value==="success"?"fa-check":"fa-times"])},null,2)],2),t("div",null,[$[0]||($[0]=t("h3",{class:"text-lg font-semibold text-gray-900 dark:text-gray-100"}," API Key 端点测试 ",-1)),t("p",qr,r(T.value),1)])]),t("button",{class:"flex h-9 w-9 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",disabled:d.value==="testing",onClick:B},$[1]||($[1]=[t("i",{class:"fas fa-times text-sm"},null,-1)]),8,jr)]),t("div",Ur,[t("div",Rr,[$[3]||($[3]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," API Key ",-1)),t("div",Nr,[t("input",{class:"w-full rounded-lg border border-gray-200 bg-gray-50 px-3 py-2 pr-10 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200",readonly:"",type:"text",value:O.value},null,8,Or),$[2]||($[2]=t("div",{class:"absolute right-2 top-1/2 -translate-y-1/2 text-gray-400"},[t("i",{class:"fas fa-lock text-xs"})],-1))]),$[4]||($[4]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 测试将使用此 API Key 调用当前服务的 /api 端点 ",-1))]),t("div",Er,[$[6]||($[6]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"测试端点"),t("span",{class:"inline-flex items-center gap-1.5 rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/20 dark:text-blue-300"},[t("i",{class:"fas fa-link"}),b(" /api/v1/messages ")])],-1)),t("div",Fr,[$[5]||($[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"测试模型",-1)),t("span",Wr,r(f.value),1)]),$[7]||($[7]=t("div",{class:"flex items-center justify-between text-sm"},[t("span",{class:"text-gray-500 dark:text-gray-400"},"模拟客户端"),t("span",{class:"font-medium text-gray-700 dark:text-gray-300"},"Claude Code")],-1))]),t("div",{class:P(["mb-4 rounded-xl border p-4 transition-all duration-300",u.value])},[t("div",Br,[t("div",{class:P(["flex h-8 w-8 items-center justify-center rounded-lg",i.value])},[t("i",{class:P(["fas text-sm",I.value,E.value])},null,2)],2),t("div",null,[t("p",{class:P(["font-medium",H.value])},r(w.value),3),t("p",Vr,r(h.value),1)])])],2),d.value!=="idle"?(l(),n("div",zr,[t("div",Jr,[$[8]||($[8]=t("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"AI 响应",-1)),x.value?(l(),n("span",Yr,r(x.value.length)+" 字符 ",1)):K("",!0)]),t("div",Hr,[x.value?(l(),n("p",Gr,[b(r(x.value)+" ",1),d.value==="testing"?(l(),n("span",Qr)):K("",!0)])):d.value==="testing"?(l(),n("p",Xr,$[9]||($[9]=[t("i",{class:"fas fa-circle-notch fa-spin"},null,-1),b(" 等待响应中... ",-1)]))):d.value==="error"&&m.value?(l(),n("p",Zr,r(m.value),1)):K("",!0)])])):K("",!0),y.value>0?(l(),n("div",tl,[$[10]||($[10]=t("i",{class:"fas fa-clock"},null,-1)),t("span",null,"耗时 "+r((y.value/1e3).toFixed(2))+" 秒",1)])):K("",!0)]),t("div",el,[t("button",{class:"rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition hover:bg-gray-50 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:d.value==="testing",onClick:B}," 关闭 ",8,sl),t("button",{class:P(["flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium shadow-sm transition",d.value==="testing"||!N.apiKeyValue?"cursor-not-allowed bg-gray-200 text-gray-400 dark:bg-gray-700 dark:text-gray-500":"bg-gradient-to-r from-blue-500 to-indigo-500 text-white hover:from-blue-600 hover:to-indigo-600 hover:shadow-md"]),disabled:d.value==="testing"||!N.apiKeyValue,onClick:V},[t("i",{class:P(["fas",d.value==="testing"?"fa-spinner fa-spin":"fa-play"])},null,2),b(" "+r(d.value==="testing"?"测试中...":d.value==="idle"?"开始测试":"重新测试"),1)],10,al)])])])):K("",!0)]))}},ll={class:"glass-strong mb-6 rounded-3xl p-4 shadow-xl md:mb-8 md:p-6"},il={class:"flex flex-col items-center justify-between gap-4 md:flex-row"},ol={class:"flex items-center gap-2 md:gap-4"},nl={class:"flex items-center"},dl={key:0,class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},ul={class:"mb-6 md:mb-8"},cl={class:"flex justify-center"},ml={class:"inline-flex w-full max-w-md rounded-full border border-white/20 bg-white/10 p-1 shadow-lg backdrop-blur-xl md:w-auto"},gl={key:0,class:"tab-content"},xl={key:0,class:"mb-6 md:mb-8"},fl={class:"rounded-xl border border-red-500/30 bg-red-500/20 p-3 text-sm text-red-800 backdrop-blur-sm dark:border-red-500/20 dark:bg-red-500/10 dark:text-red-200 md:p-4 md:text-base"},yl={key:1,class:"fade-in"},pl={class:"glass-strong rounded-3xl p-4 shadow-xl md:p-6"},vl={class:"mb-4 border-b border-gray-200 pb-4 dark:border-gray-700 md:mb-6 md:pb-6"},bl={class:"flex flex-col items-start justify-between gap-3 md:flex-row md:items-center md:gap-4"},kl={class:"flex w-full items-center gap-2 md:w-auto"},hl=["disabled"],_l=["disabled"],wl=["disabled"],$l={class:"mb-6 mt-6 grid grid-cols-1 gap-4 md:mb-8 md:mt-8 md:gap-6 xl:grid-cols-2 xl:items-stretch"},Sl={key:1,class:"tab-content"},Cl={class:"glass-strong rounded-3xl shadow-xl"},Tl={__name:"ApiStatsView",setup(N){const v=ht(),s=at(),p=$t(),d=M("stats"),x=j(()=>p.isDarkMode),{apiKey:m,apiId:y,loading:_,modelStatsLoading:A,oemLoading:f,error:T,statsPeriod:O,statsData:w,oemSettings:h,multiKeyMode:u}=et(s),{queryStats:i,switchPeriod:I,loadStatsWithApiId:E,loadOemSettings:H,reset:V}=s,W=M(!1),B=()=>{W.value=!0},D=()=>{W.value=!1},$=U=>{(U.ctrlKey||U.metaKey)&&U.key==="Enter"&&(!_.value&&m.value.trim()&&i(),U.preventDefault()),U.key==="Escape"&&V()};return kt(()=>{p.initTheme(),H();const U=v.query.apiId,S=v.query.apiKey;U&&U.match(/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i)?(y.value=U,E()):S&&S.length>10&&(m.value=S),document.addEventListener("keydown",$)}),yt(()=>{document.removeEventListener("keydown",$)}),ft(m,U=>{U||s.clearData()}),(U,S)=>{var z;const G=_t("router-link");return l(),n("div",{class:P(["min-h-screen p-4 md:p-6",x.value?"gradient-bg-dark":"gradient-bg"])},[t("div",ll,[t("div",il,[X(St,{loading:e(f),"logo-src":e(h).siteIconData||e(h).siteIcon,subtitle:d.value==="stats"?"API Key 使用统计":"使用教程",title:e(h).siteName},null,8,["loading","logo-src","subtitle","title"]),t("div",ol,[t("div",nl,[X(Ct,{mode:"dropdown"})]),e(h).ldapEnabled||e(h).showAdminButton!==!1?(l(),n("div",dl)):K("",!0),e(h).ldapEnabled?(l(),ot(G,{key:1,class:"user-login-button flex items-center gap-2 rounded-2xl px-4 py-2 text-white transition-all duration-300 md:px-5 md:py-2.5",to:"/user-login"},{default:xt(()=>S[4]||(S[4]=[t("i",{class:"fas fa-user text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"用户登录",-1)])),_:1,__:[4]})):K("",!0),e(h).showAdminButton!==!1?(l(),ot(G,{key:2,class:"admin-button-refined flex items-center gap-2 rounded-2xl px-4 py-2 transition-all duration-300 md:px-5 md:py-2.5",to:"/dashboard"},{default:xt(()=>S[5]||(S[5]=[t("i",{class:"fas fa-shield-alt text-sm md:text-base"},null,-1),t("span",{class:"text-xs font-semibold tracking-wide md:text-sm"},"管理后台",-1)])),_:1,__:[5]})):K("",!0)])])]),t("div",ul,[t("div",cl,[t("div",ml,[t("button",{class:P(["tab-pill-button",d.value==="stats"?"active":""]),onClick:S[0]||(S[0]=Y=>d.value="stats")},S[6]||(S[6]=[t("i",{class:"fas fa-chart-line mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"统计查询",-1)]),2),t("button",{class:P(["tab-pill-button",d.value==="tutorial"?"active":""]),onClick:S[1]||(S[1]=Y=>d.value="tutorial")},S[7]||(S[7]=[t("i",{class:"fas fa-graduation-cap mr-1 md:mr-2"},null,-1),t("span",{class:"text-sm md:text-base"},"使用教程",-1)]),2)])])]),d.value==="stats"?(l(),n("div",gl,[X(Gt),e(T)?(l(),n("div",xl,[t("div",fl,[S[8]||(S[8]=t("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),b(" "+r(e(T)),1)])])):K("",!0),e(w)?(l(),n("div",yl,[t("div",pl,[t("div",vl,[t("div",bl,[S[12]||(S[12]=t("div",{class:"flex items-center gap-2 md:gap-3"},[t("i",{class:"fas fa-clock text-base text-blue-500 md:text-lg"}),t("span",{class:"text-base font-medium text-gray-700 dark:text-gray-200 md:text-lg"},"统计时间范围")],-1)),t("div",kl,[t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="daily"}]]),disabled:e(_)||e(A),onClick:S[2]||(S[2]=Y=>e(I)("daily"))},S[9]||(S[9]=[t("i",{class:"fas fa-calendar-day text-xs md:text-sm"},null,-1),b(" 今日 ",-1)]),10,hl),t("button",{class:P(["flex flex-1 items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:flex-none md:gap-2 md:px-6 md:text-sm",["period-btn",{active:e(O)==="monthly"}]]),disabled:e(_)||e(A),onClick:S[3]||(S[3]=Y=>e(I)("monthly"))},S[10]||(S[10]=[t("i",{class:"fas fa-calendar-alt text-xs md:text-sm"},null,-1),b(" 本月 ",-1)]),10,_l),e(u)?K("",!0):(l(),n("button",{key:0,class:"test-btn flex items-center justify-center gap-1 px-4 py-2 text-xs font-medium md:gap-2 md:px-6 md:text-sm",disabled:e(_),onClick:B},S[11]||(S[11]=[t("i",{class:"fas fa-vial text-xs md:text-sm"},null,-1),b(" 测试 ",-1)]),8,wl))])])]),X(fs),t("div",$l,[X(Ms,{class:"h-full"}),e(u)?(l(),ot(lr,{key:0,class:"h-full"})):(l(),ot(Ba,{key:1,class:"h-full"}))]),X(Lr)])])):K("",!0)])):K("",!0),d.value==="tutorial"?(l(),n("div",Sl,[t("div",Cl,[X(At)])])):K("",!0),X(rl,{"api-key-name":((z=e(w))==null?void 0:z.name)||"","api-key-value":e(m),show:W.value,onClose:D},null,8,["api-key-name","api-key-value","show"])],2)}}},jl=st(Tl,[["__scopeId","data-v-c1f23841"]]);export{jl as default};
diff --git a/web/admin-spa/dist/assets/ConfirmModal-BAFPIqcc.js b/web/admin-spa/dist/assets/ConfirmModal-BAFPIqcc.js
deleted file mode 100644
index 9dbd06c1..00000000
--- a/web/admin-spa/dist/assets/ConfirmModal-BAFPIqcc.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as n}from"./index-B3t2NHq9.js";import{I as i,y as r,x as d,L as c,z as e,P as a,a5 as m}from"./vue-vendor-R8HMg95E.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},x={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},g={class:"mb-6 flex items-start gap-4"},y={class:"flex-1"},u={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},p={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},h={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"}},emits:["confirm","cancel"],setup(o){return(s,t)=>(r(),i(m,{to:"body"},[o.show?(r(),d("div",f,[e("div",x,[e("div",g,[t[2]||(t[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full bg-gradient-to-br from-yellow-400 to-yellow-500"},[e("i",{class:"fas fa-exclamation text-xl text-white"})],-1)),e("div",y,[e("h3",u,a(o.title),1),e("p",p,a(o.message),1)])]),e("div",h,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:t[0]||(t[0]=l=>s.$emit("cancel"))},a(o.cancelText),1),e("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-yellow-500 to-orange-500 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-yellow-600 hover:to-orange-600",onClick:t[1]||(t[1]=l=>s.$emit("confirm"))},a(o.confirmText),1)])])])):c("",!0)]))}},v=n(w,[["__scopeId","data-v-c629d8ff"]]);export{v as C};
diff --git a/web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css b/web/admin-spa/dist/assets/ConfirmModal-BzWkJtgn.css
similarity index 66%
rename from web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css
rename to web/admin-spa/dist/assets/ConfirmModal-BzWkJtgn.css
index fed61041..f15da4b8 100644
--- a/web/admin-spa/dist/assets/ConfirmModal-BvCtxUSJ.css
+++ b/web/admin-spa/dist/assets/ConfirmModal-BzWkJtgn.css
@@ -1 +1 @@
-.modal[data-v-c629d8ff]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
+.modal[data-v-9b6104f1]{background:#00000080;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.dark{background:#000000b3;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
diff --git a/web/admin-spa/dist/assets/ConfirmModal-C2rCOkXI.js b/web/admin-spa/dist/assets/ConfirmModal-C2rCOkXI.js
new file mode 100644
index 00000000..c7586797
--- /dev/null
+++ b/web/admin-spa/dist/assets/ConfirmModal-C2rCOkXI.js
@@ -0,0 +1 @@
+import{_ as s}from"./index-BahP9Xx9.js";import{I as d,y as i,x as g,L as m,z as t,C as o,P as r,a5 as c}from"./vue-vendor-DV7DYXbz.js";const f={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},y={class:"modal-content mx-auto w-full max-w-md rounded-2xl bg-white p-6 shadow-xl dark:bg-gray-800"},x={class:"mb-6 flex items-start gap-4"},u={class:"flex-1"},h={class:"mb-2 text-lg font-bold text-gray-900 dark:text-white"},b={class:"whitespace-pre-line text-sm leading-relaxed text-gray-700 dark:text-gray-300"},p={class:"flex gap-3"},w={__name:"ConfirmModal",props:{show:{type:Boolean,required:!0},title:{type:String,default:""},message:{type:String,default:""},confirmText:{type:String,default:"继续"},cancelText:{type:String,default:"取消"},type:{type:String,default:"primary",validator:e=>["primary","warning","danger"].includes(e)}},emits:["confirm","cancel"],setup(e){return(n,a)=>(i(),d(c,{to:"body"},[e.show?(i(),g("div",f,[t("div",y,[t("div",x,[t("div",{class:o(["flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-full",e.type==="danger"?"bg-gradient-to-br from-red-400 to-red-500":e.type==="warning"?"bg-gradient-to-br from-yellow-400 to-yellow-500":"bg-primary"])},[t("i",{class:o(["text-xl text-white",e.type==="danger"?"fas fa-trash-alt":e.type==="warning"?"fas fa-exclamation":"fas fa-question"])},null,2)],2),t("div",u,[t("h3",h,r(e.title),1),t("p",b,r(e.message),1)])]),t("div",p,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:a[0]||(a[0]=l=>n.$emit("cancel"))},r(e.cancelText),1),t("button",{class:o(["flex-1 rounded-xl px-4 py-2.5 font-medium text-white shadow-sm transition-all",e.type==="danger"?"bg-gradient-to-r from-red-500 to-red-600 hover:from-red-600 hover:to-red-700":e.type==="warning"?"bg-gradient-to-r from-yellow-500 to-orange-500 hover:from-yellow-600 hover:to-orange-600":"bg-primary hover:opacity-90"]),onClick:a[1]||(a[1]=l=>n.$emit("confirm"))},r(e.confirmText),3)])])])):m("",!0)]))}},C=s(w,[["__scopeId","data-v-9b6104f1"]]);export{C};
diff --git a/web/admin-spa/dist/assets/DashboardView-BzrWMTub.js b/web/admin-spa/dist/assets/DashboardView-BzrWMTub.js
new file mode 100644
index 00000000..202ef08f
--- /dev/null
+++ b/web/admin-spa/dist/assets/DashboardView-BzrWMTub.js
@@ -0,0 +1 @@
+import{E as Jt}from"./element-plus-BSjV1f9S.js";import{aP as Xt,r as T,c as Gt,aY as Vt,o as pt,q as te,D as Q,V as ee,x,z as t,P as i,u as a,L as $,O as I,C as J,Q as Pt,ac as Bt,R as ae,K as se,al as oe,y as f,B as ne}from"./vue-vendor-DV7DYXbz.js";import{C as Ut}from"./chart-yFHxLHpB.js";import{n as re,o as Yt,p as Mt,s as Ot,_ as le,a as ie,f as U,q as de}from"./index-BahP9Xx9.js";import"./vendor-Dr8jvgFu.js";const ce=Xt("dashboard",()=>{const At=T(!1),yt=T({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),G=T({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),nt=T([]),s=T([]),Ct=T({data:[],topApiKeys:[],totalApiKeys:0}),X=T({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),rt={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},O="today",F="day",lt=l=>l==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Rt=(l,d)=>{try{return localStorage.getItem(l)||d}catch{return d}},tt=(l,d)=>{try{localStorage.setItem(l,d)}catch{}},Y=(l,d)=>lt(d).some(y=>y.value===l)?l:d==="hour"?"last24h":O,H=Rt(rt.granularity,F),wt=["day","hour"].includes(H)?H:F,Kt=Y(Rt(rt.preset,O),wt),o=T({type:"preset",preset:Kt,customStart:"",customEnd:"",customRange:null,presetOptions:lt(wt)}),M=T(wt),Dt=T("requests"),gt=T("claude"),Ft=Gt(()=>{const l=yt.value.uptime,d=Math.floor(l/86400),n=Math.floor(l%86400/3600),r=Math.floor(l%3600/60);return d>0?`${d}天 ${n}小时`:n>0?`${n}小时 ${r}分钟`:`${r}分钟`});function q(l,d=!0){const n=l.getFullYear(),r=l.getMonth(),y=l.getDate();return d?new Date(Date.UTC(n,r,y-1,16,0,0,0)):new Date(Date.UTC(n,r,y,15,59,59,999))}function it(l){const d=new Date;switch(l){case"today":return{start:q(d,!0),end:q(d,!1)};case"last24h":return{start:new Date(d.getTime()-24*60*60*1e3),end:new Date(d)};case"yesterday":{const n=new Date;return n.setDate(n.getDate()-1),{start:q(n,!0),end:q(n,!1)}}case"dayBefore":{const n=new Date;return n.setDate(n.getDate()-2),{start:q(n,!0),end:q(n,!1)}}default:return{start:new Date(d.getTime()-24*60*60*1e3),end:new Date(d)}}}const et=(l=o.value.preset,d=M.value)=>{tt(rt.preset,l),tt(rt.granularity,d)},W=()=>o.value.type==="preset"&&o.value.preset==="today"&&M.value==="day"?"hour":M.value;async function Tt(l=null){At.value=!0;try{let d={today:"today",all:"all"};l&&(d={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[l]||d);const[n,r,y]=await Promise.all([re(),Yt(d.today),Yt(d.all)]);if(n.success){const u=n.data.overview||{},b=n.data.recentActivity||{},_=n.data.systemAverages||{},w=n.data.realtimeMetrics||{},P=n.data.systemHealth||{};yt.value={totalApiKeys:u.totalApiKeys||0,activeApiKeys:u.activeApiKeys||0,totalAccounts:u.totalAccounts||u.totalClaudeAccounts||0,normalAccounts:u.normalAccounts||0,abnormalAccounts:u.abnormalAccounts||0,pausedAccounts:u.pausedAccounts||0,activeAccounts:u.activeAccounts||u.activeClaudeAccounts||0,rateLimitedAccounts:u.rateLimitedAccounts||u.rateLimitedClaudeAccounts||0,accountsByPlatform:u.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:b.requestsToday||0,totalRequests:u.totalRequestsUsed||0,todayTokens:b.tokensToday||0,todayInputTokens:b.inputTokensToday||0,todayOutputTokens:b.outputTokensToday||0,totalTokens:u.totalTokensUsed||0,totalInputTokens:u.totalInputTokensUsed||0,totalOutputTokens:u.totalOutputTokensUsed||0,totalCacheCreateTokens:u.totalCacheCreateTokensUsed||0,totalCacheReadTokens:u.totalCacheReadTokensUsed||0,todayCacheCreateTokens:b.cacheCreateTokensToday||0,todayCacheReadTokens:b.cacheReadTokensToday||0,systemRPM:_.rpm||0,systemTPM:_.tpm||0,realtimeRPM:w.rpm||0,realtimeTPM:w.tpm||0,metricsWindow:w.windowMinutes||5,isHistoricalMetrics:w.isHistorical||!1,systemStatus:P.redisConnected?"正常":"异常",uptime:P.uptime||0,systemTimezone:n.data.systemTimezone||8}}r.success&&y.success&&(G.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:y.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(d){console.error("加载仪表板数据失败:",d)}finally{At.value=!1}}async function xt(l=7,d=W()){try{let n="/admin/usage-trend?";if(d==="hour")if(n+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)n+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,n+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:y,end:u}=it(o.value.preset);n+=`&startDate=${encodeURIComponent(y.toISOString())}`,n+=`&endDate=${encodeURIComponent(u.toISOString())}`}else{const y=new Date;n+=`&startDate=${encodeURIComponent(new Date(y.getTime()-l*24*60*60*1e3).toISOString())}`,n+=`&endDate=${encodeURIComponent(y.toISOString())}`}else n+=`granularity=day&days=${l}`;const r=await Mt(n);r.success&&(nt.value=r.data)}catch(n){console.error("加载使用趋势失败:",n)}}async function at(l="daily",d=null){const n=d||W();try{let r=`/admin/model-stats?period=${l}`;if(o.value.type==="custom"||n==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(n==="hour"&&o.value.type==="preset"){const{start:u,end:b}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(u.toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}}else if(o.value.type==="preset"&&n==="day"){const u=new Date,b=o.value.presetOptions.find(_=>_.value===o.value.preset);if(b){let _,w;if(o.value.preset==="today")_=q(u,!0),w=q(u,!1);else{const P=new Date;P.setDate(P.getDate()-(b.days-1)),_=q(P,!0),w=q(u,!1)}r+=`&startDate=${encodeURIComponent(_.toISOString())}`,r+=`&endDate=${encodeURIComponent(w.toISOString())}`}}const y=await Mt(r);y.success&&(s.value=y.data)}catch(r){console.error("加载模型统计失败:",r)}}async function st(l="requests",d=null){const n=d||W();try{let r="/admin/api-keys-usage-trend?",y=7;if(n==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:b,end:_}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(b.toISOString())}`,r+=`&endDate=${encodeURIComponent(_.toISOString())}`}else{const b=new Date;r+=`&startDate=${encodeURIComponent(new Date(b.getTime()-24*60*60*1e3).toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}else y=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:ft(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${y}`;r+=`&metric=${l}`;const u=await Mt(r);u.success&&(Ct.value={data:u.data||[],topApiKeys:u.topApiKeys||[],totalApiKeys:u.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function Z(l=gt.value,d=null){const n=d||W();try{let r="/admin/account-usage-trend?",y=7;if(n==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(o.value.type==="preset"){const{start:b,end:_}=it(o.value.preset);r+=`&startDate=${encodeURIComponent(b.toISOString())}`,r+=`&endDate=${encodeURIComponent(_.toISOString())}`}else{const b=new Date;r+=`&startDate=${encodeURIComponent(new Date(b.getTime()-24*60*60*1e3).toISOString())}`,r+=`&endDate=${encodeURIComponent(b.toISOString())}`}else y=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:ft(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${y}`;r+=`&group=${l}`;const u=await Mt(r);u.success&&(X.value={data:u.data||[],topAccounts:u.topAccounts||[],totalAccounts:u.totalAccounts||0,group:u.group||l,groupLabel:u.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function j(l,d={}){const{silent:n=!1,skipSave:r=!1}=d,y=Y(l,M.value);o.value.type="preset",o.value.preset=y;const u=o.value.presetOptions.find(h=>h.value===y),b=new Date;let _,w;if(M.value==="hour"){const h=it(y);_=h.start,w=h.end}else _=new Date(b),w=new Date(b),y==="today"?(_.setHours(0,0,0,0),w.setHours(23,59,59,999)):u!=null&&u.days&&(_.setDate(b.getDate()-(u.days-1)),_.setHours(0,0,0,0),w.setHours(23,59,59,999));const P=h=>{const V=new Date(h),vt=V.getFullYear(),bt=String(V.getMonth()+1).padStart(2,"0"),ht=String(V.getDate()).padStart(2,"0"),ct=String(V.getHours()).padStart(2,"0"),It=String(V.getMinutes()).padStart(2,"0"),ut=String(V.getSeconds()).padStart(2,"0");return`${vt}-${bt}-${ht} ${ct}:${It}:${ut}`};o.value.customStart=_?_.toISOString().split("T")[0]:"",o.value.customEnd=w?w.toISOString().split("T")[0]:"",o.value.customRange=_&&w?[P(_),P(w)]:null,r||et(o.value.preset,M.value),n||N()}function Lt(l){if(l&&l.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=l,o.value.customStart=l[0].split(" ")[0],o.value.customEnd=l[1].split(" ")[0];const d=y=>{const[u,b]=y.split(" "),[_,w,P]=u.split("-").map(Number),[h,V,vt]=b.split(":").map(Number);return new Date(_,w-1,P,h,V,vt)},n=d(l[0]),r=d(l[1]);if(M.value==="hour"){if((r-n)/36e5>24){Ot("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-n)/864e5)+1>31){Ot("日期范围不能超过 31 天","warning");return}N()}else l===null&&j(M.value==="hour"?"last24h":O)}function St(l,d={}){const{silent:n=!1,skipSave:r=!1,presetOverride:y}=d;if(M.value=l,l==="hour"){if(o.value.presetOptions=lt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const b=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-b)/(1e3*60*60)>24){Ot("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),j("last24h",{silent:n,skipSave:r});return}}}else o.value.presetOptions=lt("day");if(o.value.type==="custom"){r||et(o.value.preset||O,M.value),n||N();return}const u=y||Y(o.value.preset,M.value);j(u,{silent:!0,skipSave:!0}),r||et(o.value.preset,M.value),n||N()}async function N(){let l,d="monthly";const n=W();if(o.value.type==="preset"){const r=o.value.presetOptions.find(y=>y.value===o.value.preset);n==="hour"?(l=1,d="daily"):(l=r?r.days:7,o.value.preset==="today"?d="daily":d="monthly")}else{if(n==="hour"){const r=new Date(o.value.customRange[0]),y=new Date(o.value.customRange[1]),u=Math.ceil((y-r)/(1e3*60*60));l=Math.ceil(u/24)||1}else l=ft(o.value.customStart,o.value.customEnd);d="daily"}await Promise.all([xt(l,n),at(d,n),st(Dt.value,n),Z(gt.value,n)])}function dt(l){return gt.value=l,Z(l,W())}function ft(l,d){if(!l||!d)return 7;const n=new Date(l),r=new Date(d),y=Math.abs(r-n);return Math.ceil(y/(1e3*60*60*24))||7}function Et(l){return l>new Date}return j(o.value.preset,{silent:!0,skipSave:!0}),et(o.value.preset,M.value),{loading:At,dashboardData:yt,costsData:G,trendData:nt,dashboardModelStats:s,apiKeysTrendData:Ct,accountUsageTrendData:X,dateFilter:o,trendGranularity:M,apiKeysTrendMetric:Dt,accountUsageGroup:gt,formattedUptime:Ft,loadDashboardData:Tt,loadUsageTrend:xt,loadModelStats:at,loadApiKeysTrend:st,loadAccountUsageTrend:Z,setDateFilterPreset:j,onCustomDateRangeChange:Lt,setTrendGranularity:St,refreshChartsData:N,setAccountUsageGroup:dt,disabledDate:Et}}),ue={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},me={class:"stat-card"},pe={class:"flex items-center justify-between"},ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ge={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},xe={class:"stat-card"},fe={class:"flex items-center justify-between"},ve={class:"flex-1"},be={class:"flex flex-wrap items-baseline gap-x-2"},he={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ke={key:0,class:"flex items-center gap-2"},_e=["title"],Ce={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Te=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Ae={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Re=["title"],Ie={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ue=["title"],Me={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Oe={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ke={key:0,class:"text-red-600"},Fe={key:1,class:"text-gray-600 dark:text-gray-400"},Le={key:2,class:"text-yellow-600"},Ee={class:"stat-card"},qe={class:"flex items-center justify-between"},ze={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ge={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},He={class:"stat-card"},je={class:"flex items-center justify-between"},Ne={class:"text-2xl font-bold text-green-600 sm:text-3xl"},Ve={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ye={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},We={class:"stat-card"},Ze={class:"flex items-center justify-between"},Qe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Je={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Xe={class:"mt-3 flex items-center justify-between gap-3"},ta={class:"text-xs text-gray-500 dark:text-gray-400"},ea=["disabled"],aa={class:"card p-4 sm:p-6"},sa={class:"mb-3 flex items-center justify-between"},oa={class:"text-xs text-gray-500 dark:text-gray-400"},na={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},ra={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},la={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},ia={class:"flex items-center justify-between gap-2"},da={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},ca={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ua={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},ma={key:0},pa={key:1},ya={key:0,class:"mt-2"},ga={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},xa={class:"text-red-600 dark:text-red-400"},fa={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},va={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},ba={class:"stat-card"},ha={class:"flex items-center justify-between"},ka={class:"mr-8 flex-1"},_a={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ca={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},wa={class:"text-sm font-medium text-green-600"},Da={class:"text-xs text-gray-500 dark:text-gray-400"},Ta={class:"flex flex-wrap items-center justify-between gap-x-4"},Sa={class:"font-medium"},$a={class:"font-medium"},Aa={key:0,class:"text-purple-600"},Ra={class:"font-medium"},Ia={key:1,class:"text-purple-600"},Pa={class:"font-medium"},Ba={class:"stat-card"},Ua={class:"flex items-center justify-between"},Ma={class:"mr-8 flex-1"},Oa={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ka={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Fa={class:"text-sm font-medium text-green-600"},La={class:"text-xs text-gray-500 dark:text-gray-400"},Ea={class:"flex flex-wrap items-center justify-between gap-x-4"},qa={class:"font-medium"},za={class:"font-medium"},Ga={key:0,class:"text-purple-600"},Ha={class:"font-medium"},ja={key:1,class:"text-purple-600"},Na={class:"font-medium"},Va={class:"stat-card"},Ya={class:"flex items-center justify-between"},Wa={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Za={class:"text-xs text-gray-400"},Qa={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Ja={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Xa={key:0,class:"text-yellow-600"},ts={class:"stat-card"},es={class:"flex items-center justify-between"},as={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ss={class:"text-xs text-gray-400"},os={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},ns={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},rs={key:0,class:"text-yellow-600"},ls={class:"mb-8"},is={class:"mb-4 flex flex-col gap-4 sm:mb-6"},ds={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},cs={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},us=["onClick"],ms={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},ps={class:"flex items-center gap-2"},ys={key:0,class:"text-xs text-orange-600"},gs={class:"flex items-center gap-2"},xs={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},fs={class:"relative inline-flex cursor-pointer items-center"},vs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},bs=["disabled"],hs={class:"hidden sm:inline"},ks={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},_s={class:"card p-4 sm:p-6"},Cs={class:"relative",style:{height:"250px"}},ws={class:"card p-4 sm:p-6"},Ds={key:0,class:"py-8 text-center"},Ts={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ss={class:"min-w-full"},$s={class:"divide-y divide-gray-200 dark:divide-gray-600"},As={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},Rs=["title"],Is={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},Ps={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Bs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Us={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Ms={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Os={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Fs={class:"sm:h-[300px]",style:{height:"250px"}},Ls={class:"mb-4 sm:mb-6 md:mb-8"},Es={class:"card p-4 sm:p-6"},qs={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Gs={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Hs={key:0},js={key:1},Ns={class:"sm:h-[350px]",style:{height:"300px"}},Vs={class:"mb-4 sm:mb-6 md:mb-8"},Ys={class:"card p-4 sm:p-6"},Ws={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Zs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Qs={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Js={class:"flex flex-wrap items-center gap-2"},Xs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},to=["onClick"],eo={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},ao={key:0},so={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},oo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},no={__name:"DashboardView",setup(At){const yt=ce(),G=ie(),{isDarkMode:nt}=Vt(G),{dashboardData:s,costsData:Ct,dashboardModelStats:X,trendData:rt,apiKeysTrendData:O,accountUsageTrendData:F,accountUsageGroup:lt,formattedUptime:Rt,dateFilter:tt,trendGranularity:Y,apiKeysTrendMetric:H}=Vt(yt),{loadDashboardData:wt,loadApiKeysTrend:Kt,setDateFilterPreset:o,onCustomDateRangeChange:M,setTrendGranularity:Dt,refreshChartsData:gt,setAccountUsageGroup:Ft,disabledDate:q}=yt,it=[new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)],et=T(null),W=T(null),Tt=T(null),xt=T(null);let at=null,st=null,Z=null,j=null;const Lt=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],St=T(!1),N=T({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),dt=T(!1),ft=T(null),Et=c=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[c]||c,l=Gt(()=>{var D;const c=[],e=((D=N.value)==null?void 0:D.platforms)||{};return Object.entries(e).forEach(([m,A])=>{(Array.isArray(A==null?void 0:A.accounts)?A.accounts:[]).forEach(E=>{var k,v;const L=E==null?void 0:E.data;if(!L)return;const C=(k=L.balance)==null?void 0:k.amount,R=(v=L.quota)==null?void 0:v.percentage,g=typeof C=="number"&&C<10,p=typeof R=="number"&&R>90;(g||p)&&c.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||m})})}),c}),d=c=>{const e=Number(c);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},n=c=>{if(!c)return"未知";const e=new Date(c);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},r=async()=>{dt.value=!0;const c=await de();c!=null&&c.success?(N.value=c.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},ft.value=new Date().toISOString()):c!=null&&c.message&&(console.debug("加载余额汇总失败:",c.message),Ot("加载余额汇总失败","error")),dt.value=!1},y=T(!1),u=T(30),b=T(null),_=T(0),w=T(null),P=T(!1),h=Gt(()=>({text:nt.value?"#e5e7eb":"#374151",grid:nt.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:nt.value?"#e5e7eb":"#374151"}));function V(c){return Number.isFinite(c)?c>=1?`$${c.toFixed(2)}`:c>=.01?`$${c.toFixed(3)}`:`$${c.toFixed(6)}`:"$0.000000"}function vt(c,e){if(!e||e.length===0)return 0;const D=e.reduce((m,A)=>m+A.allTokens,0);return D===0?0:(c/D*100).toFixed(1)}function bt(){if(!et.value)return;at&&at.destroy();const c=X.value||[],e={labels:c.map(D=>D.model),datasets:[{data:c.map(D=>D.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};at=new Ut(et.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{callbacks:{label:function(D){const m=D.label||"",A=U(D.parsed),ot=vt(D.parsed,c);return`${m}: ${A} (${ot}%)`}}}}}})}function ht(){var g;if(!W.value)return;st&&st.destroy();const c=rt.value||[],e=c.map(p=>p.inputTokens||0),D=c.map(p=>p.outputTokens||0),m=c.map(p=>p.cacheCreateTokens||0),A=c.map(p=>p.cacheReadTokens||0),ot=c.map(p=>p.requests||0),E=c.map(p=>p.cost||0),L=(g=c[0])!=null&&g.date?"date":"hour",R={labels:c.map(p=>{if(p.label)return p.label;if(L==="hour"){const v=new Date(p.hour),S=String(v.getMonth()+1).padStart(2,"0"),z=String(v.getDate()).padStart(2,"0"),K=String(v.getHours()).padStart(2,"0");return`${S}/${z} ${K}:00`}const k=p.date;if(k&&k.includes("-")){const v=k.split("-");if(v.length>=3)return`${v[1]}/${v[2]}`}return p.date}),datasets:[{label:"输入Token",data:e,borderColor:G.currentColorScheme.primary,backgroundColor:`${G.currentColorScheme.primary}1a`,tension:.3},{label:"输出Token",data:D,borderColor:G.currentColorScheme.accent,backgroundColor:`${G.currentColorScheme.accent}1a`,tension:.3},{label:"缓存创建Token",data:m,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:A,borderColor:G.currentColorScheme.secondary,backgroundColor:`${G.currentColorScheme.secondary}1a`,tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:ot,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};st=new Ut(W.value,{type:"line",data:R,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:h.value.text},legend:{position:"top",labels:{color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(p,k){const v=p.dataset.label||"",S=k.dataset.label||"";return v==="费用 (USD)"||S==="费用 (USD)"?v==="费用 (USD)"?-1:1:v==="请求数"||S==="请求数"?v==="请求数"?1:-1:k.parsed.y-p.parsed.y},callbacks:{label:function(p){const k=p.dataset.label||"";let v=p.parsed.y;return k==="费用 (USD)"?v<.01?k+": $"+v.toFixed(6):k+": $"+v.toFixed(4):k==="请求数"?k+": "+v.toLocaleString()+" 次":v>=1e6?k+": "+(v/1e6).toFixed(2)+"M tokens":v>=1e3?k+": "+(v/1e3).toFixed(2)+"K tokens":k+": "+v.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:h.value.text},ticks:{callback:function(p){return U(p)},color:h.value.text},grid:{color:h.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:h.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(p){return p.toLocaleString()},color:h.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function ct(){var E,L;if(!Tt.value)return;Z&&Z.destroy();const c=O.value.data||[],e=H.value,D=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],m=((E=O.value.topApiKeys)==null?void 0:E.map((C,R)=>{var k,v;const g=O.value.data.map(S=>!S.apiKeys||!S.apiKeys[C]?0:e==="tokens"?S.apiKeys[C].tokens:S.apiKeys[C].requests||0);return{label:((v=(k=O.value.data.find(S=>S.apiKeys&&S.apiKeys[C]))==null?void 0:k.apiKeys[C])==null?void 0:v.name)||`API Key ${C}`,data:g,borderColor:D[R%D.length],backgroundColor:D[R%D.length]+"20",tension:.4,fill:!1}}))||[],A=(L=c[0])!=null&&L.date?"date":"hour",ot={labels:c.map(C=>{if(C.label)return C.label;if(A==="hour"){const g=new Date(C.hour),p=String(g.getMonth()+1).padStart(2,"0"),k=String(g.getDate()).padStart(2,"0"),v=String(g.getHours()).padStart(2,"0");return`${p}/${k} ${v}:00`}const R=C.date;if(R&&R.includes("-")){const g=R.split("-");if(g.length>=3)return`${g[1]}/${g[2]}`}return C.date}),datasets:m};Z=new Ut(Tt.value,{type:"line",data:ot,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(C,R){return R.parsed.y-C.parsed.y},callbacks:{label:function(C){var K;const R=C.dataset.label||"",g=C.parsed.y,p=C.dataIndex,k=O.value.data[p],S=C.chart.data.datasets.map((B,kt)=>({value:B.data[p]||0,index:kt})).sort((B,kt)=>kt.value-B.value).findIndex(B=>B.index===C.datasetIndex)+1;let z="";if(S===1?z="🥇 ":S===2?z="🥈 ":S===3&&(z="🥉 "),H.value==="tokens"){let B="";g>=1e6?B=(g/1e6).toFixed(2)+"M":g>=1e3?B=(g/1e3).toFixed(2)+"K":B=g.toLocaleString();const kt=O.value.topApiKeys[C.datasetIndex],mt=(K=k==null?void 0:k.apiKeys)==null?void 0:K[kt],_t=(mt==null?void 0:mt.formattedCost)||"$0.00";return`${z}${R}: ${B} tokens (${_t})`}else return`${z}${R}: ${g.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:H.value==="tokens"?"Token 数量":"请求次数",color:h.value.text},ticks:{callback:function(C){return U(C)},color:h.value.text},grid:{color:h.value.grid}}}}})}async function It(){await Kt(H.value),await Q(),ct()}function ut(){var L,C,R;if(!xt.value)return;j&&j.destroy();const c=((L=F.value)==null?void 0:L.data)||[],e=((C=F.value)==null?void 0:C.topAccounts)||[],D=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],m=e.map((g,p)=>{var S,z;const k=c.map(K=>!K.accounts||!K.accounts[g]?0:K.accounts[g].cost||0);return{label:((z=(S=c.find(K=>K.accounts&&K.accounts[g]))==null?void 0:S.accounts[g])==null?void 0:z.name)||`账号 ${String(g).slice(0,6)}`,data:k,borderColor:D[p%D.length],backgroundColor:D[p%D.length]+"20",tension:.4,fill:!1}}),A=(R=c[0])!=null&&R.date?"date":"hour",ot={labels:c.map(g=>{if(g.label)return g.label;if(A==="hour"){const p=new Date(g.hour),k=String(p.getMonth()+1).padStart(2,"0"),v=String(p.getDate()).padStart(2,"0"),S=String(p.getHours()).padStart(2,"0");return`${k}/${v} ${S}:00`}if(g.date&&g.date.includes("-")){const p=g.date.split("-");if(p.length>=3)return`${p[1]}/${p[2]}`}return g.date}),datasets:m},E=e;j=new Ut(xt.value,{type:"line",data:ot,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:h.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(g,p)=>p.parsed.y-g.parsed.y,callbacks:{label:function(g){var Nt;const p=g.dataset.label||"",k=g.parsed.y||0,v=g.dataIndex,S=g.datasetIndex,z=E[S],K=F.value.data[v],B=(Nt=K==null?void 0:K.accounts)==null?void 0:Nt[z],mt=g.chart.data.datasets.map(($t,zt)=>({value:$t.data[v]||0,index:zt})).sort(($t,zt)=>zt.value-$t.value).findIndex($t=>$t.index===S)+1;let _t="";mt===1?_t="🥇 ":mt===2?_t="🥈 ":mt===3&&(_t="🥉 ");const Zt=(B==null?void 0:B.formattedCost)||V(k),Qt=(B==null?void 0:B.requests)||0;return`${_t}${p}: ${Zt} / ${Qt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:Y.value==="hour"?"时间":"日期",color:h.value.text},ticks:{color:h.value.text},grid:{color:h.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:h.value.text},ticks:{callback:g=>V(Number(g)),color:h.value.text},grid:{color:h.value.grid}}}}})}async function Wt(c){if(!(lt.value===c||St.value)){St.value=!0;try{await Ft(c),await Q(),ut()}finally{St.value=!1}}}pt(X,()=>{Q(()=>bt())}),pt(rt,()=>{Q(()=>ht())}),pt(O,()=>{Q(()=>ct())}),pt(F,()=>{Q(()=>ut())});async function qt(){if(!P.value){P.value=!0;try{await Promise.all([wt(),gt(),r()])}finally{P.value=!1}}}function Ht(){y.value&&(_.value=u.value,w.value&&clearInterval(w.value),b.value&&clearTimeout(b.value),w.value=setInterval(()=>{_.value--,_.value<=0&&clearInterval(w.value)},1e3),b.value=setTimeout(async()=>{await qt(),y.value&&Ht()},u.value*1e3))}function jt(){w.value&&(clearInterval(w.value),w.value=null),b.value&&(clearTimeout(b.value),b.value=null),_.value=0}return pt(y,c=>{c?Ht():jt()}),pt(nt,()=>{Q(()=>{bt(),ht(),ct(),ut()})}),pt(()=>G.colorScheme,()=>{Q(()=>{bt(),ht(),ct(),ut()})}),te(async()=>{await qt(),await Q(),bt(),ht(),ct(),ut()}),ee(()=>{jt(),at&&at.destroy(),st&&st.destroy(),Z&&Z.destroy(),j&&j.destroy()}),(c,e)=>{const D=Jt;return f(),x("div",null,[t("div",ue,[t("div",me,[t("div",pe,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ye,i(a(s).totalApiKeys),1),t("p",ge," 活跃: "+i(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",xe,[t("div",fe,[t("div",ve,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",be,[t("p",he,i(a(s).totalAccounts),1),a(s).accountsByPlatform?(f(),x("div",ke,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(f(),x("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",Ce,i(a(s).accountsByPlatform.claude.total),1)],8,_e)):$("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(f(),x("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",De,i(a(s).accountsByPlatform["claude-console"].total),1)],8,we)):$("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(f(),x("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",Se,i(a(s).accountsByPlatform.gemini.total),1)],8,Te)):$("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(f(),x("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Ae,i(a(s).accountsByPlatform.bedrock.total),1)],8,$e)):$("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(f(),x("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Ie,i(a(s).accountsByPlatform.openai.total),1)],8,Re)):$("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(f(),x("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Be,i(a(s).accountsByPlatform.azure_openai.total),1)],8,Pe)):$("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(f(),x("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Me,i(a(s).accountsByPlatform["openai-responses"].total),1)],8,Ue)):$("",!0)])):$("",!0)]),t("p",Oe,[I(" 正常: "+i(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(f(),x("span",Ke," | 异常: "+i(a(s).abnormalAccounts),1)):$("",!0),a(s).pausedAccounts>0?(f(),x("span",Fe," | 停止调度: "+i(a(s).pausedAccounts),1)):$("",!0),a(s).rateLimitedAccounts>0?(f(),x("span",Le," | 限流: "+i(a(s).rateLimitedAccounts),1)):$("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ee,[t("div",qe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",ze,i(a(s).todayRequests),1),t("p",Ge," 总请求: "+i(a(U)(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",He,[t("div",je,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ne,i(a(s).systemStatus),1),t("p",Ve," 运行时间: "+i(a(Rt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",Ye,[t("div",We,[t("div",Ze,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Qe,i(d(N.value.totalBalance||0)),1),t("p",Je," 低余额: "+i(N.value.lowBalanceCount||0)+" | 总成本: "+i(d(N.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Xe,[t("p",ta," 更新时间: "+i(n(ft.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:dt.value,onClick:r},[t("i",{class:J(["fas",dt.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,ea)])]),t("div",aa,[t("div",sa,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",oa,i(l.value.length)+" 个 ",1)]),dt.value?(f(),x("div",na," 正在加载... ")):l.value.length===0?(f(),x("div",ra," 全部正常 ")):(f(),x("div",la,[(f(!0),x(Pt,null,Bt(l.value,m=>{var A;return f(),x("div",{key:m.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",ia,[t("div",da,i(m.name||m.accountId),1),t("span",ca,i(Et(m.platform)),1)]),t("div",ua,[m.balance?(f(),x("span",ma,"余额: "+i(m.balance.formattedAmount),1)):(f(),x("span",pa,"今日成本: "+i(d(((A=m.statistics)==null?void 0:A.dailyCost)||0)),1))]),m.quota&&typeof m.quota.percentage=="number"?(f(),x("div",ya,[t("div",ga,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",xa,i(m.quota.percentage.toFixed(1))+"% ",1)]),t("div",fa,[t("div",{class:"h-2 rounded-full bg-red-500",style:ne({width:`${Math.min(100,m.quota.percentage)}%`})},null,4)])])):$("",!0)])}),128))]))])]),t("div",va,[t("div",ba,[t("div",ha,[t("div",ka,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",_a,[t("p",Ca,i(a(U)((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",wa,"/ "+i(a(Ct).todayCosts.formatted.totalCost),1)]),t("div",Da,[t("div",Ta,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Sa,i(a(U)(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",$a,i(a(U)(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(f(),x("span",Aa,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Ra,i(a(U)(a(s).todayCacheCreateTokens||0)),1)])):$("",!0),(a(s).todayCacheReadTokens||0)>0?(f(),x("span",Ia,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",Pa,i(a(U)(a(s).todayCacheReadTokens||0)),1)])):$("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ba,[t("div",Ua,[t("div",Ma,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Oa,[t("p",Ka,i(a(U)((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Fa,"/ "+i(a(Ct).totalCosts.formatted.totalCost),1)]),t("div",La,[t("div",Ea,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",qa,i(a(U)(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",za,i(a(U)(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(f(),x("span",Ga,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",Ha,i(a(U)(a(s).totalCacheCreateTokens||0)),1)])):$("",!0),(a(s).totalCacheReadTokens||0)>0?(f(),x("span",ja,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Na,i(a(U)(a(s).totalCacheReadTokens||0)),1)])):$("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Va,[t("div",Ya,[t("div",null,[t("p",Wa,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Za,"("+i(a(s).metricsWindow)+"分钟)",1)]),t("p",Qa,i(a(s).realtimeRPM||0),1),t("p",Ja,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(f(),x("span",Xa,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):$("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",ts,[t("div",es,[t("div",null,[t("p",as,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ss,"("+i(a(s).metricsWindow)+"分钟)",1)]),t("p",os,i(a(U)(a(s).realtimeTPM||0)),1),t("p",ns,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(f(),x("span",rs,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):$("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",ls,[t("div",is,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",ds,[t("div",cs,[(f(!0),x(Pt,null,Bt(a(tt).presetOptions,m=>(f(),x("button",{key:m.value,class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(tt).preset===m.value&&a(tt).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:A=>a(o)(m.value)},i(m.label),11,us))),128))]),t("div",ms,[t("button",{class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Y)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=m=>a(Dt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:J(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Y)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=m=>a(Dt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",ps,[ae(D,{modelValue:a(tt).customRange,"onUpdate:modelValue":e[2]||(e[2]=m=>a(tt).customRange=m),class:"custom-date-picker w-full lg:w-auto","default-time":it,"disabled-date":a(q),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(M)},null,8,["modelValue","disabled-date","onChange"]),a(Y)==="hour"?(f(),x("span",ys,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):$("",!0)]),t("div",gs,[t("div",xs,[t("label",fs,[se(t("input",{"onUpdate:modelValue":e[3]||(e[3]=m=>y.value=m),class:"peer sr-only",type:"checkbox"},null,512),[[oe,y.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",vs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),y.value?(f(),x("span",{key:0,class:J(["ml-1 font-mono text-xs text-blue-600 transition-opacity",_.value>0?"opacity-100":"opacity-0"])},i(_.value)+"s ",3)):$("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:P.value,title:"立即刷新数据",onClick:e[4]||(e[4]=m=>qt())},[t("i",{class:J(["fas fa-sync-alt text-xs",{"animate-spin":P.value}])},null,2),t("span",hs,i(P.value?"刷新中":"刷新"),1)],8,bs)])])]),t("div",ks,[t("div",_s,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",Cs,[t("canvas",{ref_key:"modelUsageChart",ref:et},null,512)])]),t("div",ws,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(X).length===0?(f(),x("div",Ds,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(f(),x("div",Ts,[t("table",Ss,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",$s,[(f(!0),x(Pt,null,Bt(a(X),m=>(f(),x("tr",{key:m.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",As,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:m.model},i(m.model),9,Rs)]),t("td",Is,i(a(U)(m.requests)),1),t("td",Ps,i(a(U)(m.allTokens)),1),t("td",Bs,i(m.formatted?m.formatted.total:"$0.000000"),1),t("td",Us,[t("span",Ms,i(vt(m.allTokens,a(X)))+"% ",1)])]))),128))])])]))])])]),t("div",Os,[t("div",Ks,[t("div",Fs,[t("canvas",{ref_key:"usageTrendChart",ref:W},null,512)])])]),t("div",Ls,[t("div",Es,[t("div",qs,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",zs,[t("button",{class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(H)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=m=>(H.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(H)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=m=>(H.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Gs,[a(O).totalApiKeys>10?(f(),x("span",Hs," 共 "+i(a(O).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(f(),x("span",js," 共 "+i(a(O).totalApiKeys)+" 个 API Key ",1))]),t("div",Ns,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:Tt},null,512)])])]),t("div",Vs,[t("div",Ys,[t("div",Ws,[t("div",Zs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Qs," 当前分组:"+i(a(F).groupLabel||"未选择"),1)]),t("div",Js,[t("div",Xs,[(f(),x(Pt,null,Bt(Lt,m=>t("button",{key:m.value,class:J(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(lt)===m.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:A=>Wt(m.value)},i(m.label),11,to)),64))])])]),t("div",eo,[t("span",null,"共 "+i(a(F).totalAccounts||0)+" 个账号",1),a(F).topAccounts&&a(F).topAccounts.length?(f(),x("span",ao," 显示消耗排名前 "+i(a(F).topAccounts.length)+" 个账号 ",1)):$("",!0)]),!a(F).data||a(F).data.length===0?(f(),x("div",so," 暂无账号使用数据 ")):(f(),x("div",oo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:xt},null,512)]))])])])}}},mo=le(no,[["__scopeId","data-v-4fa3d294"]]);export{mo as default};
diff --git a/web/admin-spa/dist/assets/DashboardView-C7pS8AeR.css b/web/admin-spa/dist/assets/DashboardView-C7pS8AeR.css
new file mode 100644
index 00000000..131504fc
--- /dev/null
+++ b/web/admin-spa/dist/assets/DashboardView-C7pS8AeR.css
@@ -0,0 +1 @@
+.custom-date-picker[data-v-4fa3d294]{font-size:13px}@keyframes spin-4fa3d294{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin[data-v-4fa3d294]{animation:spin-4fa3d294 1s linear infinite}
diff --git a/web/admin-spa/dist/assets/DashboardView-X4x_p8JP.js b/web/admin-spa/dist/assets/DashboardView-X4x_p8JP.js
deleted file mode 100644
index bac26ec2..00000000
--- a/web/admin-spa/dist/assets/DashboardView-X4x_p8JP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{E as Qt}from"./element-plus-BUfCkBQO.js";import{aP as Xt,r as S,c as Gt,aX as Vt,o as ft,q as Jt,D as at,V as te,x as h,z as t,P as m,u as a,L as R,O as I,C as Y,Q as Ut,ac as Mt,R as ee,K as ae,al as se,y as k,B as oe}from"./vue-vendor-R8HMg95E.js";import{c as st,s as Kt,_ as ne,a as re}from"./index-B3t2NHq9.js";import{C as Ft}from"./chart-yFHxLHpB.js";import"./vendor-Dr8jvgFu.js";const le=Xt("dashboard",()=>{const $t=S(!1),lt=S({totalApiKeys:0,activeApiKeys:0,totalAccounts:0,normalAccounts:0,abnormalAccounts:0,pausedAccounts:0,activeAccounts:0,rateLimitedAccounts:0,accountsByPlatform:{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:0,totalRequests:0,todayTokens:0,todayInputTokens:0,todayOutputTokens:0,totalTokens:0,totalInputTokens:0,totalOutputTokens:0,totalCacheCreateTokens:0,totalCacheReadTokens:0,todayCacheCreateTokens:0,todayCacheReadTokens:0,systemRPM:0,systemTPM:0,realtimeRPM:0,realtimeTPM:0,metricsWindow:5,isHistoricalMetrics:!1,systemStatus:"正常",uptime:0,systemTimezone:8}),Rt=S({todayCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:{totalCost:0,formatted:{totalCost:"$0.000000"}}}),it=S([]),s=S([]),xt=S([]),W=S({data:[],topApiKeys:[],totalApiKeys:0}),vt=S({data:[],topAccounts:[],totalAccounts:0,group:"claude",groupLabel:"Claude账户"}),K={preset:"dashboard:date:preset",granularity:"dashboard:trend:granularity"},M="today",bt="day",dt=d=>d==="hour"?[{value:"last24h",label:"近24小时",hours:24},{value:"yesterday",label:"昨天",hours:24},{value:"dayBefore",label:"前天",hours:24}]:[{value:"today",label:"今日",days:1},{value:"7days",label:"7天",days:7},{value:"30days",label:"30天",days:30}],Z=(d,x)=>{try{return localStorage.getItem(d)||x}catch{return x}},N=(d,x)=>{try{localStorage.setItem(d,x)}catch{}},z=(d,x)=>dt(x).some(v=>v.value===d)?d:x==="hour"?"last24h":M,Pt=Z(K.granularity,bt),ht=["day","hour"].includes(Pt)?Pt:bt,Ot=z(Z(K.preset,M),ht),o=S({type:"preset",preset:Ot,customStart:"",customEnd:"",customRange:null,presetOptions:dt(ht)}),F=S(ht),kt=S("requests"),ct=S("claude"),Lt=S([new Date(2e3,1,1,0,0,0),new Date(2e3,2,1,23,59,59)]),Et=Gt(()=>{const d=lt.value.uptime,x=Math.floor(d/86400),p=Math.floor(d%86400/3600),r=Math.floor(d%3600/60);return x>0?`${x}天 ${p}小时`:p>0?`${p}小时 ${r}分钟`:`${r}分钟`});function _(d,x=!0){const p=d.getFullYear(),r=d.getMonth(),v=d.getDate();return x?new Date(Date.UTC(p,r,v-1,16,0,0,0)):new Date(Date.UTC(p,r,v,15,59,59,999))}const Q=(d=o.value.preset,x=F.value)=>{N(K.preset,d),N(K.granularity,x)},j=()=>o.value.type==="preset"&&o.value.preset==="today"&&F.value==="day"?"hour":F.value;async function _t(d=null){$t.value=!0;try{let x={today:"today",all:"all"};d&&(x={today:{today:"today",all:"today"},"7days":{today:"7days",all:"7days"},monthly:{today:"monthly",all:"monthly"},all:{today:"today",all:"all"}}[d]||x);const[p,r,v]=await Promise.all([st.get("/admin/dashboard"),st.get(`/admin/usage-costs?period=${x.today}`),st.get(`/admin/usage-costs?period=${x.all}`)]);if(p.success){const n=p.data.overview||{},l=p.data.recentActivity||{},i=p.data.systemAverages||{},y=p.data.realtimeMetrics||{},c=p.data.systemHealth||{};lt.value={totalApiKeys:n.totalApiKeys||0,activeApiKeys:n.activeApiKeys||0,totalAccounts:n.totalAccounts||n.totalClaudeAccounts||0,normalAccounts:n.normalAccounts||0,abnormalAccounts:n.abnormalAccounts||0,pausedAccounts:n.pausedAccounts||0,activeAccounts:n.activeAccounts||n.activeClaudeAccounts||0,rateLimitedAccounts:n.rateLimitedAccounts||n.rateLimitedClaudeAccounts||0,accountsByPlatform:n.accountsByPlatform||{claude:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},"claude-console":{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},gemini:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},azure_openai:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0},bedrock:{total:0,normal:0,abnormal:0,paused:0,rateLimited:0}},todayRequests:l.requestsToday||0,totalRequests:n.totalRequestsUsed||0,todayTokens:l.tokensToday||0,todayInputTokens:l.inputTokensToday||0,todayOutputTokens:l.outputTokensToday||0,totalTokens:n.totalTokensUsed||0,totalInputTokens:n.totalInputTokensUsed||0,totalOutputTokens:n.totalOutputTokensUsed||0,totalCacheCreateTokens:n.totalCacheCreateTokensUsed||0,totalCacheReadTokens:n.totalCacheReadTokensUsed||0,todayCacheCreateTokens:l.cacheCreateTokensToday||0,todayCacheReadTokens:l.cacheReadTokensToday||0,systemRPM:i.rpm||0,systemTPM:i.tpm||0,realtimeRPM:y.rpm||0,realtimeTPM:y.tpm||0,metricsWindow:y.windowMinutes||5,isHistoricalMetrics:y.isHistorical||!1,systemStatus:c.redisConnected?"正常":"异常",uptime:c.uptime||0,systemTimezone:p.data.systemTimezone||8}}r.success&&v.success&&(Rt.value={todayCosts:r.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}},totalCosts:v.data.totalCosts||{totalCost:0,formatted:{totalCost:"$0.000000"}}})}catch(x){console.error("加载仪表板数据失败:",x)}finally{$t.value=!1}}async function X(d=7,x=j()){try{let p="/admin/usage-trend?";if(x==="hour")if(p+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)p+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,p+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const v=new Date;let n,l;if(o.value.type==="preset")switch(o.value.preset){case"today":{n=_(v,!0),l=_(v,!1);break}case"last24h":{l=new Date(v),n=new Date(v.getTime()-24*60*60*1e3);break}case"yesterday":{const i=new Date;i.setDate(i.getDate()-1),n=_(i,!0),l=_(i,!1);break}case"dayBefore":{const i=new Date;i.setDate(i.getDate()-2),n=_(i,!0),l=_(i,!1);break}default:n=new Date(v.getTime()-24*60*60*1e3),l=v}else n=new Date(v.getTime()-d*24*60*60*1e3),l=v;p+=`&startDate=${encodeURIComponent(n.toISOString())}`,p+=`&endDate=${encodeURIComponent(l.toISOString())}`}else p+=`granularity=day&days=${d}`;const r=await st.get(p);r.success&&(s.value=r.data)}catch(p){console.error("加载使用趋势失败:",p)}}async function J(d="daily",x=null){const p=x||j();try{let r=`/admin/model-stats?period=${d}`;if(o.value.type==="custom"||p==="hour"){if(o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else if(p==="hour"&&o.value.type==="preset"){const n=new Date;let l,i;switch(o.value.preset){case"today":{l=_(n,!0),i=_(n,!1);break}case"last24h":{i=new Date(n),l=new Date(n.getTime()-24*60*60*1e3);break}case"yesterday":{const y=new Date;y.setDate(y.getDate()-1),l=_(y,!0),i=_(y,!1);break}case"dayBefore":{const y=new Date;y.setDate(y.getDate()-2),l=_(y,!0),i=_(y,!1);break}default:l=new Date(n.getTime()-24*60*60*1e3),i=n}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}else if(o.value.type==="preset"&&p==="day"){const n=new Date;let l,i;const y=o.value.presetOptions.find(c=>c.value===o.value.preset);if(y){if(o.value.preset==="today")l=_(n,!0),i=_(n,!1);else{const c=new Date;c.setDate(c.getDate()-(y.days-1)),l=_(c,!0),i=_(n,!1)}r+=`&startDate=${encodeURIComponent(l.toISOString())}`,r+=`&endDate=${encodeURIComponent(i.toISOString())}`}}const v=await st.get(r);v.success&&(xt.value=v.data)}catch(r){console.error("加载模型统计失败:",r)}}async function tt(d="requests",x=null){const p=x||j();try{let r="/admin/api-keys-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&metric=${d}`;const n=await st.get(r);n.success&&(W.value={data:n.data||[],topApiKeys:n.topApiKeys||[],totalApiKeys:n.totalApiKeys||0})}catch(r){console.error("加载API Keys趋势失败:",r)}}async function V(d=ct.value,x=null){const p=x||j();try{let r="/admin/account-usage-trend?",v=7;if(p==="hour")if(r+="granularity=hour",o.value.customRange&&o.value.customRange.length===2)r+=`&startDate=${encodeURIComponent(o.value.customRange[0])}`,r+=`&endDate=${encodeURIComponent(o.value.customRange[1])}`;else{const l=new Date;let i,y;if(o.value.type==="preset")switch(o.value.preset){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const c=new Date;c.setDate(c.getDate()-1),i=_(c,!0),y=_(c,!1);break}case"dayBefore":{const c=new Date;c.setDate(c.getDate()-2),i=_(c,!0),y=_(c,!1);break}default:i=new Date(l.getTime()-24*60*60*1e3),y=l}else i=new Date(l.getTime()-24*60*60*1e3),y=l;r+=`&startDate=${encodeURIComponent(i.toISOString())}`,r+=`&endDate=${encodeURIComponent(y.toISOString())}`}else v=o.value.type==="preset"?o.value.preset==="today"?1:o.value.preset==="7days"?7:30:Dt(o.value.customStart,o.value.customEnd),r+=`granularity=day&days=${v}`;r+=`&group=${d}`;const n=await st.get(r);n.success&&(vt.value={data:n.data||[],topAccounts:n.topAccounts||[],totalAccounts:n.totalAccounts||0,group:n.group||d,groupLabel:n.groupLabel||""})}catch(r){console.error("加载账号使用趋势失败:",r)}}function ot(d,x={}){const{silent:p=!1,skipSave:r=!1}=x,v=z(d,F.value);o.value.type="preset",o.value.preset=v;const n=o.value.presetOptions.find(D=>D.value===v),l=new Date;let i,y;if(F.value==="hour")switch(v){case"today":{i=_(l,!0),y=_(l,!1);break}case"last24h":{y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3);break}case"yesterday":{const D=new Date;D.setDate(D.getDate()-1),i=_(D,!0),y=_(D,!1);break}case"dayBefore":{const D=new Date;D.setDate(D.getDate()-2),i=_(D,!0),y=_(D,!1);break}default:y=new Date(l),i=new Date(l.getTime()-24*60*60*1e3)}else i=new Date(l),y=new Date(l),v==="today"?(i.setHours(0,0,0,0),y.setHours(23,59,59,999)):n!=null&&n.days&&(i.setDate(l.getDate()-(n.days-1)),i.setHours(0,0,0,0),y.setHours(23,59,59,999));const c=D=>{const H=new Date(D),ut=H.getFullYear(),Tt=String(H.getMonth()+1).padStart(2,"0"),At=String(H.getDate()).padStart(2,"0"),mt=String(H.getHours()).padStart(2,"0"),It=String(H.getMinutes()).padStart(2,"0"),pt=String(H.getSeconds()).padStart(2,"0");return`${ut}-${Tt}-${At} ${mt}:${It}:${pt}`};o.value.customStart=i?i.toISOString().split("T")[0]:"",o.value.customEnd=y?y.toISOString().split("T")[0]:"",o.value.customRange=i&&y?[c(i),c(y)]:null,r||Q(o.value.preset,F.value),p||G()}function wt(d){if(d&&d.length===2){o.value.type="custom",o.value.preset="",o.value.customRange=d,o.value.customStart=d[0].split(" ")[0],o.value.customEnd=d[1].split(" ")[0];const x=v=>{const[n,l]=v.split(" "),[i,y,c]=n.split("-").map(Number),[D,H,ut]=l.split(":").map(Number);return new Date(i,y-1,c,D,H,ut)},p=x(d[0]),r=x(d[1]);if(F.value==="hour"){if((r-p)/36e5>24){Kt("小时粒度下日期范围不能超过24小时","warning");return}}else if(Math.ceil((r-p)/864e5)+1>31){Kt("日期范围不能超过 31 天","warning");return}G()}else d===null&&ot(F.value==="hour"?"last24h":M)}function nt(d,x={}){const{silent:p=!1,skipSave:r=!1,presetOverride:v}=x;if(F.value=d,d==="hour"){if(o.value.presetOptions=dt("hour"),o.value.type==="custom"&&o.value.customRange&&o.value.customRange.length===2){const l=new Date(o.value.customRange[0]);if((new Date(o.value.customRange[1])-l)/(1e3*60*60)>24){Kt("小时粒度下日期范围不能超过24小时,已切换到近24小时","warning"),ot("last24h",{silent:p,skipSave:r});return}}}else o.value.presetOptions=dt("day");if(o.value.type==="custom"){r||Q(o.value.preset||M,F.value),p||G();return}const n=v||z(o.value.preset,F.value);ot(n,{silent:!0,skipSave:!0}),r||Q(o.value.preset,F.value),p||G()}async function G(){let d,x="monthly";const p=j();if(o.value.type==="preset"){const r=o.value.presetOptions.find(v=>v.value===o.value.preset);p==="hour"?(d=1,x="daily"):(d=r?r.days:7,o.value.preset==="today"?x="daily":x="monthly")}else{if(p==="hour"){const r=new Date(o.value.customRange[0]),v=new Date(o.value.customRange[1]),n=Math.ceil((v-r)/(1e3*60*60));d=Math.ceil(n/24)||1}else d=Dt(o.value.customStart,o.value.customEnd);x="daily"}await Promise.all([X(d,p),J(x,p),tt(kt.value,p),V(ct.value,p)])}function Bt(d){return ct.value=d,V(d,j())}function Dt(d,x){if(!d||!x)return 7;const p=new Date(d),r=new Date(x),v=Math.abs(r-p);return Math.ceil(v/(1e3*60*60*24))||7}function Ct(d){return d>new Date}return ot(o.value.preset,{silent:!0,skipSave:!0}),Q(o.value.preset,F.value),{loading:$t,dashboardData:lt,costsData:Rt,modelStats:it,trendData:s,dashboardModelStats:xt,apiKeysTrendData:W,accountUsageTrendData:vt,dateFilter:o,trendGranularity:F,apiKeysTrendMetric:kt,accountUsageGroup:ct,defaultTime:Lt,formattedUptime:Et,loadDashboardData:_t,loadUsageTrend:X,loadModelStats:J,loadApiKeysTrend:tt,loadAccountUsageTrend:V,setDateFilterPreset:ot,onCustomDateRangeChange:wt,setTrendGranularity:nt,refreshChartsData:G,setAccountUsageGroup:Bt,disabledDate:Ct}}),ie={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},de={class:"stat-card"},ce={class:"flex items-center justify-between"},ue={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},me={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},pe={class:"stat-card"},ye={class:"flex items-center justify-between"},ge={class:"flex-1"},fe={class:"flex flex-wrap items-baseline gap-x-2"},xe={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},ve={key:0,class:"flex items-center gap-2"},be=["title"],he={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},ke=["title"],_e={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},we=["title"],De={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ce=["title"],Te={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ae=["title"],Se={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},$e=["title"],Re={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Pe=["title"],Be={class:"text-xs font-medium text-gray-700 dark:text-gray-300"},Ie={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ue={key:0,class:"text-red-600"},Me={key:1,class:"text-gray-600 dark:text-gray-400"},Fe={key:2,class:"text-yellow-600"},Ke={class:"stat-card"},Oe={class:"flex items-center justify-between"},Le={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},Ee={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ze={class:"stat-card"},qe={class:"flex items-center justify-between"},Ge={class:"text-2xl font-bold text-green-600 sm:text-3xl"},He={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},je={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6"},Ne={class:"stat-card"},Ve={class:"flex items-center justify-between"},Ye={class:"text-2xl font-bold text-gray-900 dark:text-gray-100 sm:text-3xl"},We={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ze={class:"mt-3 flex items-center justify-between gap-3"},Qe={class:"text-xs text-gray-500 dark:text-gray-400"},Xe=["disabled"],Je={class:"card p-4 sm:p-6"},ta={class:"mb-3 flex items-center justify-between"},ea={class:"text-xs text-gray-500 dark:text-gray-400"},aa={key:0,class:"py-6 text-center text-sm text-gray-500 dark:text-gray-400"},sa={key:1,class:"py-6 text-center text-sm text-green-600 dark:text-green-400"},oa={key:2,class:"max-h-64 space-y-2 overflow-y-auto"},na={class:"flex items-center justify-between gap-2"},ra={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},la={class:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-300"},ia={class:"mt-1 text-xs text-gray-600 dark:text-gray-400"},da={key:0},ca={key:1},ua={key:0,class:"mt-2"},ma={class:"mb-1 flex items-center justify-between text-xs text-gray-600 dark:text-gray-400"},pa={class:"text-red-600 dark:text-red-400"},ya={class:"h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},ga={class:"mb-4 grid grid-cols-1 gap-3 sm:mb-6 sm:grid-cols-2 sm:gap-4 md:mb-8 md:gap-6 lg:grid-cols-4"},fa={class:"stat-card"},xa={class:"flex items-center justify-between"},va={class:"mr-8 flex-1"},ba={class:"mb-2 flex flex-wrap items-baseline gap-2"},ha={class:"text-xl font-bold text-blue-600 sm:text-2xl md:text-3xl"},ka={class:"text-sm font-medium text-green-600"},_a={class:"text-xs text-gray-500 dark:text-gray-400"},wa={class:"flex flex-wrap items-center justify-between gap-x-4"},Da={class:"font-medium"},Ca={class:"font-medium"},Ta={key:0,class:"text-purple-600"},Aa={class:"font-medium"},Sa={key:1,class:"text-purple-600"},$a={class:"font-medium"},Ra={class:"stat-card"},Pa={class:"flex items-center justify-between"},Ba={class:"mr-8 flex-1"},Ia={class:"mb-2 flex flex-wrap items-baseline gap-2"},Ua={class:"text-xl font-bold text-emerald-600 sm:text-2xl md:text-3xl"},Ma={class:"text-sm font-medium text-green-600"},Fa={class:"text-xs text-gray-500 dark:text-gray-400"},Ka={class:"flex flex-wrap items-center justify-between gap-x-4"},Oa={class:"font-medium"},La={class:"font-medium"},Ea={key:0,class:"text-purple-600"},za={class:"font-medium"},qa={key:1,class:"text-purple-600"},Ga={class:"font-medium"},Ha={class:"stat-card"},ja={class:"flex items-center justify-between"},Na={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},Va={class:"text-xs text-gray-400"},Ya={class:"text-2xl font-bold text-orange-600 sm:text-3xl"},Wa={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Za={key:0,class:"text-yellow-600"},Qa={class:"stat-card"},Xa={class:"flex items-center justify-between"},Ja={class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"},ts={class:"text-xs text-gray-400"},es={class:"text-2xl font-bold text-rose-600 sm:text-3xl"},as={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},ss={key:0,class:"text-yellow-600"},os={class:"mb-8"},ns={class:"mb-4 flex flex-col gap-4 sm:mb-6"},rs={class:"flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-end"},ls={class:"flex flex-shrink-0 gap-1 overflow-x-auto rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},is=["onClick"],ds={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},cs={class:"flex items-center gap-2"},us={key:0,class:"text-xs text-orange-600"},ms={class:"flex items-center gap-2"},ps={class:"flex items-center rounded-lg bg-gray-100 px-3 py-1 dark:bg-gray-700"},ys={class:"relative inline-flex cursor-pointer items-center"},gs={class:"ml-2.5 flex select-none items-center gap-1 text-sm font-medium text-gray-600 dark:text-gray-300"},fs=["disabled"],xs={class:"hidden sm:inline"},vs={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},bs={class:"card p-4 sm:p-6"},hs={class:"relative",style:{height:"250px"}},ks={class:"card p-4 sm:p-6"},_s={key:0,class:"py-8 text-center"},ws={key:1,class:"max-h-[250px] overflow-auto sm:max-h-[300px]"},Ds={class:"min-w-full"},Cs={class:"divide-y divide-gray-200 dark:divide-gray-600"},Ts={class:"px-2 py-2 text-xs text-gray-900 dark:text-gray-100 sm:px-4 sm:text-sm"},As=["title"],Ss={class:"hidden px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:table-cell sm:px-4 sm:text-sm"},$s={class:"px-2 py-2 text-right text-xs text-gray-600 dark:text-gray-400 sm:px-4 sm:text-sm"},Rs={class:"px-2 py-2 text-right text-xs font-medium text-green-600 sm:px-4 sm:text-sm"},Ps={class:"hidden px-2 py-2 text-right text-xs font-medium sm:table-cell sm:px-4 sm:text-sm"},Bs={class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-1 text-xs font-medium text-blue-800 dark:bg-blue-900/30 dark:text-blue-300"},Is={class:"mb-4 sm:mb-6 md:mb-8"},Us={class:"card p-4 sm:p-6"},Ms={class:"sm:h-[300px]",style:{height:"250px"}},Fs={class:"mb-4 sm:mb-6 md:mb-8"},Ks={class:"card p-4 sm:p-6"},Os={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Ls={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Es={class:"mb-4 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},zs={key:0},qs={key:1},Gs={class:"sm:h-[350px]",style:{height:"300px"}},Hs={class:"mb-4 sm:mb-6 md:mb-8"},js={class:"card p-4 sm:p-6"},Ns={class:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Vs={class:"flex flex-col gap-1 sm:flex-row sm:items-center sm:gap-3"},Ys={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},Ws={class:"flex flex-wrap items-center gap-2"},Zs={class:"flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-700"},Qs=["onClick"],Xs={class:"mb-4 flex flex-wrap items-center gap-2 text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Js={key:0},to={key:0,class:"py-12 text-center text-sm text-gray-500 dark:text-gray-400"},eo={key:1,class:"sm:h-[350px]",style:{height:"300px"}},ao={__name:"DashboardView",setup($t){const lt=le(),Rt=re(),{isDarkMode:it}=Vt(Rt),{dashboardData:s,costsData:xt,dashboardModelStats:W,trendData:vt,apiKeysTrendData:K,accountUsageTrendData:M,accountUsageGroup:bt,formattedUptime:dt,dateFilter:Z,trendGranularity:N,apiKeysTrendMetric:z,defaultTime:Pt}=Vt(lt),{loadDashboardData:ht,loadApiKeysTrend:Ot,setDateFilterPreset:o,onCustomDateRangeChange:F,setTrendGranularity:kt,refreshChartsData:ct,setAccountUsageGroup:Lt,disabledDate:Et}=lt,_=S(null),Q=S(null),j=S(null),_t=S(null);let X=null,J=null,tt=null,V=null;const ot=[{value:"claude",label:"Claude"},{value:"openai",label:"OpenAI"},{value:"gemini",label:"Gemini"},{value:"droid",label:"Droid"}],wt=S(!1),nt=S({totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}}),G=S(!1),Bt=S(null),Dt=u=>({claude:"Claude","claude-console":"Claude Console",gemini:"Gemini","gemini-api":"Gemini API",openai:"OpenAI","openai-responses":"OpenAI Responses",azure_openai:"Azure OpenAI",bedrock:"Bedrock",droid:"Droid",ccr:"CCR"})[u]||u,Ct=Gt(()=>{var A;const u=[],e=((A=nt.value)==null?void 0:A.platforms)||{};return Object.entries(e).forEach(([g,P])=>{(Array.isArray(P==null?void 0:P.accounts)?P.accounts:[]).forEach(E=>{var C,w;const L=E==null?void 0:E.data;if(!L)return;const T=(C=L.balance)==null?void 0:C.amount,B=(w=L.quota)==null?void 0:w.percentage,b=typeof T=="number"&&T<10,f=typeof B=="number"&&B>90;(b||f)&&u.push({...L,name:(E==null?void 0:E.name)||L.accountId,platform:L.platform||g})})}),u}),d=u=>{const e=Number(u);return Number.isFinite(e)?e>=1?`$${e.toFixed(2)}`:e>=.01?`$${e.toFixed(3)}`:`$${e.toFixed(6)}`:"$0.00"},x=u=>{if(!u)return"未知";const e=new Date(u);return Number.isNaN(e.getTime())?"未知":e.toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"})},p=async()=>{G.value=!0;try{const u=await st.get("/admin/accounts/balance/summary");u!=null&&u.success&&(nt.value=u.data||{totalBalance:0,totalCost:0,lowBalanceCount:0,platforms:{}},Bt.value=new Date().toISOString())}catch(u){console.debug("加载余额汇总失败:",u),Kt("加载余额汇总失败","error")}finally{G.value=!1}},r=S(!1),v=S(30),n=S(null),l=S(0),i=S(null),y=S(!1),c=Gt(()=>({text:it.value?"#e5e7eb":"#374151",grid:it.value?"rgba(75, 85, 99, 0.3)":"rgba(0, 0, 0, 0.1)",legend:it.value?"#e5e7eb":"#374151"}));function D(u){return u>=1e6?(u/1e6).toFixed(2)+"M":u>=1e3?(u/1e3).toFixed(2)+"K":u.toString()}function H(u){return Number.isFinite(u)?u>=1?`$${u.toFixed(2)}`:u>=.01?`$${u.toFixed(3)}`:`$${u.toFixed(6)}`:"$0.000000"}function ut(u,e){if(!e||e.length===0)return 0;const A=e.reduce((g,P)=>g+P.allTokens,0);return A===0?0:(u/A*100).toFixed(1)}function Tt(){if(!_.value)return;X&&X.destroy();const u=W.value||[],e={labels:u.map(A=>A.model),datasets:[{data:u.map(A=>A.allTokens),backgroundColor:["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],borderWidth:0}]};X=new Ft(_.value,{type:"doughnut",data:e,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:15,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{callbacks:{label:function(A){const g=A.label||"",P=D(A.parsed),et=ut(A.parsed,u);return`${g}: ${P} (${et}%)`}}}}}})}function At(){var b;if(!Q.value)return;J&&J.destroy();const u=vt.value||[],e=u.map(f=>f.inputTokens||0),A=u.map(f=>f.outputTokens||0),g=u.map(f=>f.cacheCreateTokens||0),P=u.map(f=>f.cacheReadTokens||0),et=u.map(f=>f.requests||0),E=u.map(f=>f.cost||0),L=(b=u[0])!=null&&b.date?"date":"hour",B={labels:u.map(f=>{if(f.label)return f.label;if(L==="hour"){const w=new Date(f.hour),$=String(w.getMonth()+1).padStart(2,"0"),q=String(w.getDate()).padStart(2,"0"),O=String(w.getHours()).padStart(2,"0");return`${$}/${q} ${O}:00`}const C=f.date;if(C&&C.includes("-")){const w=C.split("-");if(w.length>=3)return`${w[1]}/${w[2]}`}return f.date}),datasets:[{label:"输入Token",data:e,borderColor:"rgb(102, 126, 234)",backgroundColor:"rgba(102, 126, 234, 0.1)",tension:.3},{label:"输出Token",data:A,borderColor:"rgb(240, 147, 251)",backgroundColor:"rgba(240, 147, 251, 0.1)",tension:.3},{label:"缓存创建Token",data:g,borderColor:"rgb(59, 130, 246)",backgroundColor:"rgba(59, 130, 246, 0.1)",tension:.3},{label:"缓存读取Token",data:P,borderColor:"rgb(147, 51, 234)",backgroundColor:"rgba(147, 51, 234, 0.1)",tension:.3},{label:"费用 (USD)",data:E,borderColor:"rgb(34, 197, 94)",backgroundColor:"rgba(34, 197, 94, 0.1)",tension:.3,yAxisID:"y2"},{label:"请求数",data:et,borderColor:"rgb(16, 185, 129)",backgroundColor:"rgba(16, 185, 129, 0.1)",tension:.3,yAxisID:"y1"}]};J=new Ft(Q.value,{type:"line",data:B,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{title:{display:!0,text:"Token使用趋势",font:{size:16,weight:"bold"},color:c.value.text},legend:{position:"top",labels:{color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(f,C){const w=f.dataset.label||"",$=C.dataset.label||"";return w==="费用 (USD)"||$==="费用 (USD)"?w==="费用 (USD)"?-1:1:w==="请求数"||$==="请求数"?w==="请求数"?1:-1:C.parsed.y-f.parsed.y},callbacks:{label:function(f){const C=f.dataset.label||"";let w=f.parsed.y;return C==="费用 (USD)"?w<.01?C+": $"+w.toFixed(6):C+": $"+w.toFixed(4):C==="请求数"?C+": "+w.toLocaleString()+" 次":w>=1e6?C+": "+(w/1e6).toFixed(2)+"M tokens":w>=1e3?C+": "+(w/1e3).toFixed(2)+"K tokens":C+": "+w.toLocaleString()+" tokens"}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{type:"linear",display:!0,position:"left",min:0,title:{display:!0,text:"Token数量",color:c.value.text},ticks:{callback:function(f){return D(f)},color:c.value.text},grid:{color:c.value.grid}},y1:{type:"linear",display:!0,position:"right",min:0,title:{display:!0,text:"请求数",color:c.value.text},grid:{drawOnChartArea:!1},ticks:{callback:function(f){return f.toLocaleString()},color:c.value.text}},y2:{type:"linear",display:!1,position:"right",min:0}}}})}function mt(){var E,L;if(!j.value)return;tt&&tt.destroy();const u=K.value.data||[],e=z.value,A=["#3B82F6","#10B981","#F59E0B","#EF4444","#8B5CF6","#EC4899","#14B8A6","#F97316","#6366F1","#84CC16"],g=((E=K.value.topApiKeys)==null?void 0:E.map((T,B)=>{var C,w;const b=K.value.data.map($=>!$.apiKeys||!$.apiKeys[T]?0:e==="tokens"?$.apiKeys[T].tokens:$.apiKeys[T].requests||0);return{label:((w=(C=K.value.data.find($=>$.apiKeys&&$.apiKeys[T]))==null?void 0:C.apiKeys[T])==null?void 0:w.name)||`API Key ${T}`,data:b,borderColor:A[B%A.length],backgroundColor:A[B%A.length]+"20",tension:.4,fill:!1}}))||[],P=(L=u[0])!=null&&L.date?"date":"hour",et={labels:u.map(T=>{if(T.label)return T.label;if(P==="hour"){const b=new Date(T.hour),f=String(b.getMonth()+1).padStart(2,"0"),C=String(b.getDate()).padStart(2,"0"),w=String(b.getHours()).padStart(2,"0");return`${f}/${C} ${w}:00`}const B=T.date;if(B&&B.includes("-")){const b=B.split("-");if(b.length>=3)return`${b[1]}/${b[2]}`}return T.date}),datasets:g};tt=new Ft(j.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:function(T,B){return B.parsed.y-T.parsed.y},callbacks:{label:function(T){var O;const B=T.dataset.label||"",b=T.parsed.y,f=T.dataIndex,C=K.value.data[f],$=T.chart.data.datasets.map((U,yt)=>({value:U.data[f]||0,index:yt})).sort((U,yt)=>yt.value-U.value).findIndex(U=>U.index===T.datasetIndex)+1;let q="";if($===1?q="🥇 ":$===2?q="🥈 ":$===3&&(q="🥉 "),z.value==="tokens"){let U="";b>=1e6?U=(b/1e6).toFixed(2)+"M":b>=1e3?U=(b/1e3).toFixed(2)+"K":U=b.toLocaleString();const yt=K.value.topApiKeys[T.datasetIndex],rt=(O=C==null?void 0:C.apiKeys)==null?void 0:O[yt],gt=(rt==null?void 0:rt.formattedCost)||"$0.00";return`${q}${B}: ${U} tokens (${gt})`}else return`${q}${B}: ${b.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:z.value==="tokens"?"Token 数量":"请求次数",color:c.value.text},ticks:{callback:function(T){return D(T)},color:c.value.text},grid:{color:c.value.grid}}}}})}async function It(){await Ot(z.value),await at(),mt()}function pt(){var L,T,B;if(!_t.value)return;V&&V.destroy();const u=((L=M.value)==null?void 0:L.data)||[],e=((T=M.value)==null?void 0:T.topAccounts)||[],A=["#2563EB","#059669","#D97706","#DC2626","#7C3AED","#F472B6","#0EA5E9","#F97316","#6366F1","#22C55E"],g=e.map((b,f)=>{var $,q;const C=u.map(O=>!O.accounts||!O.accounts[b]?0:O.accounts[b].cost||0);return{label:((q=($=u.find(O=>O.accounts&&O.accounts[b]))==null?void 0:$.accounts[b])==null?void 0:q.name)||`账号 ${String(b).slice(0,6)}`,data:C,borderColor:A[f%A.length],backgroundColor:A[f%A.length]+"20",tension:.4,fill:!1}}),P=(B=u[0])!=null&&B.date?"date":"hour",et={labels:u.map(b=>{if(b.label)return b.label;if(P==="hour"){const f=new Date(b.hour),C=String(f.getMonth()+1).padStart(2,"0"),w=String(f.getDate()).padStart(2,"0"),$=String(f.getHours()).padStart(2,"0");return`${C}/${w} ${$}:00`}if(b.date&&b.date.includes("-")){const f=b.date.split("-");if(f.length>=3)return`${f[1]}/${f[2]}`}return b.date}),datasets:g},E=e;V=new Ft(_t.value,{type:"line",data:et,options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{position:"bottom",labels:{padding:20,usePointStyle:!0,font:{size:12},color:c.value.legend}},tooltip:{mode:"index",intersect:!1,itemSort:(b,f)=>f.parsed.y-b.parsed.y,callbacks:{label:function(b){var Nt;const f=b.dataset.label||"",C=b.parsed.y||0,w=b.dataIndex,$=b.datasetIndex,q=E[$],O=M.value.data[w],U=(Nt=O==null?void 0:O.accounts)==null?void 0:Nt[q],rt=b.chart.data.datasets.map((St,qt)=>({value:St.data[w]||0,index:qt})).sort((St,qt)=>qt.value-St.value).findIndex(St=>St.index===$)+1;let gt="";rt===1?gt="🥇 ":rt===2?gt="🥈 ":rt===3&&(gt="🥉 ");const Wt=(U==null?void 0:U.formattedCost)||H(C),Zt=(U==null?void 0:U.requests)||0;return`${gt}${f}: ${Wt} / ${Zt.toLocaleString()} 次`}}}},scales:{x:{type:"category",display:!0,title:{display:!0,text:N.value==="hour"?"时间":"日期",color:c.value.text},ticks:{color:c.value.text},grid:{color:c.value.grid}},y:{beginAtZero:!0,min:0,title:{display:!0,text:"消耗金额 (USD)",color:c.value.text},ticks:{callback:b=>H(Number(b)),color:c.value.text},grid:{color:c.value.grid}}}}})}async function Yt(u){if(!(bt.value===u||wt.value)){wt.value=!0;try{await Lt(u),await at(),pt()}finally{wt.value=!1}}}ft(W,()=>{at(()=>Tt())}),ft(vt,()=>{at(()=>At())}),ft(K,()=>{at(()=>mt())}),ft(M,()=>{at(()=>pt())});async function zt(){if(!y.value){y.value=!0;try{await Promise.all([ht(),ct(),p()])}finally{y.value=!1}}}function Ht(){r.value&&(l.value=v.value,i.value&&clearInterval(i.value),n.value&&clearTimeout(n.value),i.value=setInterval(()=>{l.value--,l.value<=0&&clearInterval(i.value)},1e3),n.value=setTimeout(async()=>{await zt(),r.value&&Ht()},v.value*1e3))}function jt(){i.value&&(clearInterval(i.value),i.value=null),n.value&&(clearTimeout(n.value),n.value=null),l.value=0}return ft(r,u=>{u?Ht():jt()}),ft(it,()=>{at(()=>{Tt(),At(),mt(),pt()})}),Jt(async()=>{await zt(),await at(),Tt(),At(),mt(),pt()}),te(()=>{jt(),X&&X.destroy(),J&&J.destroy(),tt&&tt.destroy(),V&&V.destroy()}),(u,e)=>{const A=Qt;return k(),h("div",null,[t("div",ie,[t("div",de,[t("div",ce,[t("div",null,[e[7]||(e[7]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总API Keys ",-1)),t("p",ue,m(a(s).totalApiKeys),1),t("p",me," 活跃: "+m(a(s).activeApiKeys||0),1)]),e[8]||(e[8]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key"})],-1))])]),t("div",pe,[t("div",ye,[t("div",ge,[e[16]||(e[16]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 服务账户 ",-1)),t("div",fe,[t("p",xe,m(a(s).totalAccounts),1),a(s).accountsByPlatform?(k(),h("div",ve,[a(s).accountsByPlatform.claude&&a(s).accountsByPlatform.claude.total>0?(k(),h("div",{key:0,class:"inline-flex items-center gap-0.5",title:`Claude: ${a(s).accountsByPlatform.claude.total} 个 (正常: ${a(s).accountsByPlatform.claude.normal})`},[e[9]||(e[9]=t("i",{class:"fas fa-brain text-xs text-indigo-600"},null,-1)),t("span",he,m(a(s).accountsByPlatform.claude.total),1)],8,be)):R("",!0),a(s).accountsByPlatform["claude-console"]&&a(s).accountsByPlatform["claude-console"].total>0?(k(),h("div",{key:1,class:"inline-flex items-center gap-0.5",title:`Console: ${a(s).accountsByPlatform["claude-console"].total} 个 (正常: ${a(s).accountsByPlatform["claude-console"].normal})`},[e[10]||(e[10]=t("i",{class:"fas fa-terminal text-xs text-purple-600"},null,-1)),t("span",_e,m(a(s).accountsByPlatform["claude-console"].total),1)],8,ke)):R("",!0),a(s).accountsByPlatform.gemini&&a(s).accountsByPlatform.gemini.total>0?(k(),h("div",{key:2,class:"inline-flex items-center gap-0.5",title:`Gemini: ${a(s).accountsByPlatform.gemini.total} 个 (正常: ${a(s).accountsByPlatform.gemini.normal})`},[e[11]||(e[11]=t("i",{class:"fas fa-robot text-xs text-yellow-600"},null,-1)),t("span",De,m(a(s).accountsByPlatform.gemini.total),1)],8,we)):R("",!0),a(s).accountsByPlatform.bedrock&&a(s).accountsByPlatform.bedrock.total>0?(k(),h("div",{key:3,class:"inline-flex items-center gap-0.5",title:`Bedrock: ${a(s).accountsByPlatform.bedrock.total} 个 (正常: ${a(s).accountsByPlatform.bedrock.normal})`},[e[12]||(e[12]=t("i",{class:"fab fa-aws text-xs text-orange-600"},null,-1)),t("span",Te,m(a(s).accountsByPlatform.bedrock.total),1)],8,Ce)):R("",!0),a(s).accountsByPlatform.openai&&a(s).accountsByPlatform.openai.total>0?(k(),h("div",{key:4,class:"inline-flex items-center gap-0.5",title:`OpenAI: ${a(s).accountsByPlatform.openai.total} 个 (正常: ${a(s).accountsByPlatform.openai.normal})`},[e[13]||(e[13]=t("i",{class:"fas fa-openai text-xs text-gray-100"},null,-1)),t("span",Se,m(a(s).accountsByPlatform.openai.total),1)],8,Ae)):R("",!0),a(s).accountsByPlatform.azure_openai&&a(s).accountsByPlatform.azure_openai.total>0?(k(),h("div",{key:5,class:"inline-flex items-center gap-0.5",title:`Azure OpenAI: ${a(s).accountsByPlatform.azure_openai.total} 个 (正常: ${a(s).accountsByPlatform.azure_openai.normal})`},[e[14]||(e[14]=t("i",{class:"fab fa-microsoft text-xs text-blue-600"},null,-1)),t("span",Re,m(a(s).accountsByPlatform.azure_openai.total),1)],8,$e)):R("",!0),a(s).accountsByPlatform["openai-responses"]&&a(s).accountsByPlatform["openai-responses"].total>0?(k(),h("div",{key:6,class:"inline-flex items-center gap-0.5",title:`OpenAI Responses: ${a(s).accountsByPlatform["openai-responses"].total} 个 (正常: ${a(s).accountsByPlatform["openai-responses"].normal})`},[e[15]||(e[15]=t("i",{class:"fas fa-server text-xs text-cyan-600"},null,-1)),t("span",Be,m(a(s).accountsByPlatform["openai-responses"].total),1)],8,Pe)):R("",!0)])):R("",!0)]),t("p",Ie,[I(" 正常: "+m(a(s).normalAccounts||0)+" ",1),a(s).abnormalAccounts>0?(k(),h("span",Ue," | 异常: "+m(a(s).abnormalAccounts),1)):R("",!0),a(s).pausedAccounts>0?(k(),h("span",Me," | 停止调度: "+m(a(s).pausedAccounts),1)):R("",!0),a(s).rateLimitedAccounts>0?(k(),h("span",Fe," | 限流: "+m(a(s).rateLimitedAccounts),1)):R("",!0)])]),e[17]||(e[17]=t("div",{class:"stat-icon ml-2 flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-user-circle"})],-1))])]),t("div",Ke,[t("div",Oe,[t("div",null,[e[18]||(e[18]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日请求 ",-1)),t("p",Le,m(a(s).todayRequests),1),t("p",Ee," 总请求: "+m(D(a(s).totalRequests||0)),1)]),e[19]||(e[19]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-chart-line"})],-1))])]),t("div",ze,[t("div",qe,[t("div",null,[e[20]||(e[20]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 系统状态 ",-1)),t("p",Ge,m(a(s).systemStatus),1),t("p",He," 运行时间: "+m(a(dt)),1)]),e[21]||(e[21]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-yellow-500 to-orange-500"},[t("i",{class:"fas fa-heartbeat"})],-1))])])]),t("div",je,[t("div",Ne,[t("div",Ve,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 账户余额/配额 ",-1)),t("p",Ye,m(d(nt.value.totalBalance||0)),1),t("p",We," 低余额: "+m(nt.value.lowBalanceCount||0)+" | 总成本: "+m(d(nt.value.totalCost||0)),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-green-600"},[t("i",{class:"fas fa-wallet"})],-1))]),t("div",Ze,[t("p",Qe," 更新时间: "+m(x(Bt.value)),1),t("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500",disabled:G.value,onClick:p},[t("i",{class:Y(["fas",G.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),e[24]||(e[24]=I(" 刷新 ",-1))],8,Xe)])]),t("div",Je,[t("div",ta,[e[25]||(e[25]=t("h3",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},"低余额账户",-1)),t("span",ea,m(Ct.value.length)+" 个 ",1)]),G.value?(k(),h("div",aa," 正在加载... ")):Ct.value.length===0?(k(),h("div",sa," 全部正常 ")):(k(),h("div",oa,[(k(!0),h(Ut,null,Mt(Ct.value,g=>{var P;return k(),h("div",{key:g.accountId,class:"rounded-lg border border-red-200 bg-red-50 p-3 dark:border-red-900/60 dark:bg-red-900/20"},[t("div",na,[t("div",ra,m(g.name||g.accountId),1),t("span",la,m(Dt(g.platform)),1)]),t("div",ia,[g.balance?(k(),h("span",da,"余额: "+m(g.balance.formattedAmount),1)):(k(),h("span",ca,"今日成本: "+m(d(((P=g.statistics)==null?void 0:P.dailyCost)||0)),1))]),g.quota&&typeof g.quota.percentage=="number"?(k(),h("div",ua,[t("div",ma,[e[26]||(e[26]=t("span",null,"配额使用",-1)),t("span",pa,m(g.quota.percentage.toFixed(1))+"% ",1)]),t("div",ya,[t("div",{class:"h-2 rounded-full bg-red-500",style:oe({width:`${Math.min(100,g.quota.percentage)}%`})},null,4)])])):R("",!0)])}),128))]))])]),t("div",ga,[t("div",fa,[t("div",xa,[t("div",va,[e[31]||(e[31]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 今日Token ",-1)),t("div",ba,[t("p",ha,m(D((a(s).todayInputTokens||0)+(a(s).todayOutputTokens||0)+(a(s).todayCacheCreateTokens||0)+(a(s).todayCacheReadTokens||0))),1),t("span",ka,"/ "+m(a(xt).todayCosts.formatted.totalCost),1)]),t("div",_a,[t("div",wa,[t("span",null,[e[27]||(e[27]=I("输入: ",-1)),t("span",Da,m(D(a(s).todayInputTokens||0)),1)]),t("span",null,[e[28]||(e[28]=I("输出: ",-1)),t("span",Ca,m(D(a(s).todayOutputTokens||0)),1)]),(a(s).todayCacheCreateTokens||0)>0?(k(),h("span",Ta,[e[29]||(e[29]=I("缓存创建: ",-1)),t("span",Aa,m(D(a(s).todayCacheCreateTokens||0)),1)])):R("",!0),(a(s).todayCacheReadTokens||0)>0?(k(),h("span",Sa,[e[30]||(e[30]=I("缓存读取: ",-1)),t("span",$a,m(D(a(s).todayCacheReadTokens||0)),1)])):R("",!0)])])]),e[32]||(e[32]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-indigo-500 to-indigo-600"},[t("i",{class:"fas fa-coins"})],-1))])]),t("div",Ra,[t("div",Pa,[t("div",Ba,[e[37]||(e[37]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总Token消耗 ",-1)),t("div",Ia,[t("p",Ua,m(D((a(s).totalInputTokens||0)+(a(s).totalOutputTokens||0)+(a(s).totalCacheCreateTokens||0)+(a(s).totalCacheReadTokens||0))),1),t("span",Ma,"/ "+m(a(xt).totalCosts.formatted.totalCost),1)]),t("div",Fa,[t("div",Ka,[t("span",null,[e[33]||(e[33]=I("输入: ",-1)),t("span",Oa,m(D(a(s).totalInputTokens||0)),1)]),t("span",null,[e[34]||(e[34]=I("输出: ",-1)),t("span",La,m(D(a(s).totalOutputTokens||0)),1)]),(a(s).totalCacheCreateTokens||0)>0?(k(),h("span",Ea,[e[35]||(e[35]=I("缓存创建: ",-1)),t("span",za,m(D(a(s).totalCacheCreateTokens||0)),1)])):R("",!0),(a(s).totalCacheReadTokens||0)>0?(k(),h("span",qa,[e[36]||(e[36]=I("缓存读取: ",-1)),t("span",Ga,m(D(a(s).totalCacheReadTokens||0)),1)])):R("",!0)])])]),e[38]||(e[38]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-emerald-500 to-emerald-600"},[t("i",{class:"fas fa-database"})],-1))])]),t("div",Ha,[t("div",ja,[t("div",null,[t("p",Na,[e[39]||(e[39]=I(" 实时RPM ",-1)),t("span",Va,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",Ya,m(a(s).realtimeRPM||0),1),t("p",Wa,[e[41]||(e[41]=I(" 每分钟请求数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",Za,e[40]||(e[40]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[42]||(e[42]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-orange-500 to-orange-600"},[t("i",{class:"fas fa-tachometer-alt"})],-1))])]),t("div",Qa,[t("div",Xa,[t("div",null,[t("p",Ja,[e[43]||(e[43]=I(" 实时TPM ",-1)),t("span",ts,"("+m(a(s).metricsWindow)+"分钟)",1)]),t("p",es,m(D(a(s).realtimeTPM||0)),1),t("p",as,[e[45]||(e[45]=I(" 每分钟Token数 ",-1)),a(s).isHistoricalMetrics?(k(),h("span",ss,e[44]||(e[44]=[t("i",{class:"fas fa-exclamation-circle"},null,-1),I(" 历史数据 ",-1)]))):R("",!0)])]),e[46]||(e[46]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-rose-500 to-rose-600"},[t("i",{class:"fas fa-rocket"})],-1))])])]),t("div",os,[t("div",ns,[e[53]||(e[53]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"}," 模型使用分布与Token使用趋势 ",-1)),t("div",rs,[t("div",ls,[(k(!0),h(Ut,null,Mt(a(Z).presetOptions,g=>(k(),h("button",{key:g.value,class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(Z).preset===g.value&&a(Z).type==="preset"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>a(o)(g.value)},m(g.label),11,is))),128))]),t("div",ds,[t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="day"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[0]||(e[0]=g=>a(kt)("day"))},e[47]||(e[47]=[t("i",{class:"fas fa-calendar-day mr-1"},null,-1),I("按天 ",-1)]),2),t("button",{class:Y(["rounded-md px-3 py-1 text-sm font-medium transition-colors",a(N)==="hour"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[1]||(e[1]=g=>a(kt)("hour"))},e[48]||(e[48]=[t("i",{class:"fas fa-clock mr-1"},null,-1),I("按小时 ",-1)]),2)]),t("div",cs,[ee(A,{modelValue:a(Z).customRange,"onUpdate:modelValue":e[2]||(e[2]=g=>a(Z).customRange=g),class:"custom-date-picker w-full lg:w-auto","default-time":a(Pt),"disabled-date":a(Et),"end-placeholder":"结束日期",format:"YYYY-MM-DD HH:mm:ss","range-separator":"至",size:"default","start-placeholder":"开始日期",style:{"max-width":"400px"},type:"datetimerange","value-format":"YYYY-MM-DD HH:mm:ss",onChange:a(F)},null,8,["modelValue","default-time","disabled-date","onChange"]),a(N)==="hour"?(k(),h("span",us,e[49]||(e[49]=[t("i",{class:"fas fa-info-circle"},null,-1),I(" 最多24小时 ",-1)]))):R("",!0)]),t("div",ms,[t("div",ps,[t("label",ys,[ae(t("input",{"onUpdate:modelValue":e[3]||(e[3]=g=>r.value=g),class:"peer sr-only",type:"checkbox"},null,512),[[se,r.value]]),e[52]||(e[52]=t("div",{class:"peer relative h-5 w-9 rounded-full bg-gray-300 transition-all duration-200 after:absolute after:left-[2px] after:top-0.5 after:h-4 after:w-4 after:rounded-full after:bg-white after:shadow-sm after:transition-transform after:duration-200 after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-4 peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-blue-300 dark:bg-gray-600 dark:after:bg-gray-300 dark:peer-focus:ring-blue-600"},null,-1)),t("span",gs,[e[50]||(e[50]=t("i",{class:"fas fa-redo-alt text-xs text-gray-500 dark:text-gray-400"},null,-1)),e[51]||(e[51]=t("span",null,"自动刷新",-1)),r.value?(k(),h("span",{key:0,class:Y(["ml-1 font-mono text-xs text-blue-600 transition-opacity",l.value>0?"opacity-100":"opacity-0"])},m(l.value)+"s ",3)):R("",!0)])])]),t("button",{class:"flex items-center gap-1 rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-blue-600 shadow-sm transition-colors hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:hover:bg-gray-700 sm:gap-2",disabled:y.value,title:"立即刷新数据",onClick:e[4]||(e[4]=g=>zt())},[t("i",{class:Y(["fas fa-sync-alt text-xs",{"animate-spin":y.value}])},null,2),t("span",xs,m(y.value?"刷新中":"刷新"),1)],8,fs)])])]),t("div",vs,[t("div",bs,[e[54]||(e[54]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," Token使用分布 ",-1)),t("div",hs,[t("canvas",{ref_key:"modelUsageChart",ref:_},null,512)])]),t("div",ks,[e[57]||(e[57]=t("h4",{class:"mb-4 text-base font-semibold text-gray-800 dark:text-gray-200 sm:text-lg"}," 详细统计数据 ",-1)),a(W).length===0?(k(),h("div",_s,e[55]||(e[55]=[t("p",{class:"text-sm text-gray-500 sm:text-base"},"暂无模型使用数据",-1)]))):(k(),h("div",ws,[t("table",Ds,[e[56]||(e[56]=t("thead",{class:"sticky top-0 bg-gray-50 dark:bg-gray-700"},[t("tr",null,[t("th",{class:"px-2 py-2 text-left text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 模型 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 请求数 "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 总Token "),t("th",{class:"px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:px-4"}," 费用 "),t("th",{class:"hidden px-2 py-2 text-right text-xs font-medium text-gray-700 dark:text-gray-300 sm:table-cell sm:px-4"}," 占比 ")])],-1)),t("tbody",Cs,[(k(!0),h(Ut,null,Mt(a(W),g=>(k(),h("tr",{key:g.model,class:"hover:bg-gray-50 dark:hover:bg-gray-700"},[t("td",Ts,[t("span",{class:"block max-w-[100px] truncate sm:max-w-none",title:g.model},m(g.model),9,As)]),t("td",Ss,m(D(g.requests)),1),t("td",$s,m(D(g.allTokens)),1),t("td",Rs,m(g.formatted?g.formatted.total:"$0.000000"),1),t("td",Ps,[t("span",Bs,m(ut(g.allTokens,a(W)))+"% ",1)])]))),128))])])]))])])]),t("div",Is,[t("div",Us,[t("div",Ms,[t("canvas",{ref_key:"usageTrendChart",ref:Q},null,512)])])]),t("div",Fs,[t("div",Ks,[t("div",Os,[e[60]||(e[60]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," API Keys 使用趋势 ",-1)),t("div",Ls,[t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="requests"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[5]||(e[5]=g=>(z.value="requests",It()))},e[58]||(e[58]=[t("i",{class:"fas fa-exchange-alt mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"请求次数",-1),t("span",{class:"sm:hidden"},"请求",-1)]),2),t("button",{class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(z)==="tokens"?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:e[6]||(e[6]=g=>(z.value="tokens",It()))},e[59]||(e[59]=[t("i",{class:"fas fa-coins mr-1"},null,-1),t("span",{class:"hidden sm:inline"},"Token 数量",-1),t("span",{class:"sm:hidden"},"Token",-1)]),2)])]),t("div",Es,[a(K).totalApiKeys>10?(k(),h("span",zs," 共 "+m(a(K).totalApiKeys)+" 个 API Key,显示使用量前 10 个 ",1)):(k(),h("span",qs," 共 "+m(a(K).totalApiKeys)+" 个 API Key ",1))]),t("div",Gs,[t("canvas",{ref_key:"apiKeysUsageTrendChart",ref:j},null,512)])])]),t("div",Hs,[t("div",js,[t("div",Ns,[t("div",Vs,[e[61]||(e[61]=t("h3",{class:"text-base font-semibold text-gray-900 dark:text-gray-100 sm:text-lg"}," 账号使用趋势 ",-1)),t("span",Ys," 当前分组:"+m(a(M).groupLabel||"未选择"),1)]),t("div",Ws,[t("div",Zs,[(k(),h(Ut,null,Mt(ot,g=>t("button",{key:g.value,class:Y(["rounded-md px-2 py-1 text-xs font-medium transition-colors sm:px-3 sm:text-sm",a(bt)===g.value?"bg-white text-blue-600 shadow-sm dark:bg-gray-800":"text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"]),onClick:P=>Yt(g.value)},m(g.label),11,Qs)),64))])])]),t("div",Xs,[t("span",null,"共 "+m(a(M).totalAccounts||0)+" 个账号",1),a(M).topAccounts&&a(M).topAccounts.length?(k(),h("span",Js," 显示消耗排名前 "+m(a(M).topAccounts.length)+" 个账号 ",1)):R("",!0)]),!a(M).data||a(M).data.length===0?(k(),h("div",to," 暂无账号使用数据 ")):(k(),h("div",eo,[t("canvas",{ref_key:"accountUsageTrendChart",ref:_t},null,512)]))])])])}}},io=ne(ao,[["__scopeId","data-v-a189a0de"]]);export{io as default};
diff --git a/web/admin-spa/dist/assets/Inter-Bold-BOs3KVhN.woff2 b/web/admin-spa/dist/assets/Inter-Bold-BOs3KVhN.woff2
new file mode 100644
index 00000000..b9e3cb3b
Binary files /dev/null and b/web/admin-spa/dist/assets/Inter-Bold-BOs3KVhN.woff2 differ
diff --git a/web/admin-spa/dist/assets/Inter-Light-14LG-y7V.woff2 b/web/admin-spa/dist/assets/Inter-Light-14LG-y7V.woff2
new file mode 100644
index 00000000..f3e012a4
Binary files /dev/null and b/web/admin-spa/dist/assets/Inter-Light-14LG-y7V.woff2 differ
diff --git a/web/admin-spa/dist/assets/Inter-Medium-CDhBSFyE.woff2 b/web/admin-spa/dist/assets/Inter-Medium-CDhBSFyE.woff2
new file mode 100644
index 00000000..fdfdcc69
Binary files /dev/null and b/web/admin-spa/dist/assets/Inter-Medium-CDhBSFyE.woff2 differ
diff --git a/web/admin-spa/dist/assets/Inter-Regular-COLGFB3M.woff2 b/web/admin-spa/dist/assets/Inter-Regular-COLGFB3M.woff2
new file mode 100644
index 00000000..2bcd222e
Binary files /dev/null and b/web/admin-spa/dist/assets/Inter-Regular-COLGFB3M.woff2 differ
diff --git a/web/admin-spa/dist/assets/Inter-SemiBold-BAEEcJ4E.woff2 b/web/admin-spa/dist/assets/Inter-SemiBold-BAEEcJ4E.woff2
new file mode 100644
index 00000000..fbae113d
Binary files /dev/null and b/web/admin-spa/dist/assets/Inter-SemiBold-BAEEcJ4E.woff2 differ
diff --git a/web/admin-spa/dist/assets/LoginView-BXeEy6eP.js b/web/admin-spa/dist/assets/LoginView-BXeEy6eP.js
deleted file mode 100644
index 2a3125b7..00000000
--- a/web/admin-spa/dist/assets/LoginView-BXeEy6eP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as m,Y as _,K as u,aq as c,O as p,y as r}from"./vue-vendor-R8HMg95E.js";import{_ as v,u as k,a as S}from"./index-B3t2NHq9.js";import{T as L}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const V={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},N={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},I={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},j={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},B={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},M={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},z=["disabled"],F={key:0,class:"fas fa-sign-in-alt mr-2"},O={key:1,class:"loading-spinner mr-2"},U={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},A={__name:"LoginView",setup(C){const e=k(),g=S(),i=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(K,t)=>(r(),a("div",V,[s("div",T,[w(L,{mode:"dropdown"})]),s("div",N,[s("div",I,[s("div",q,[i.value?(r(),a("div",j)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!i.value&&o(e).oemSettings.siteName?(r(),a("h1",B,m(o(e).oemSettings.siteName),1)):i.value?(r(),a("div",M)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:_(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[c,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[c,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",F)),o(e).loginLoading?(r(),a("div",O)):d("",!0),p(" "+m(o(e).loginLoading?"登录中...":"登录"),1)],8,z)],32),o(e).loginError?(r(),a("div",U,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),p(m(o(e).loginError),1)])):d("",!0)])]))}},H=v(A,[["__scopeId","data-v-34e2cac0"]]);export{H as default};
diff --git a/web/admin-spa/dist/assets/LoginView-Bk2509Bx.js b/web/admin-spa/dist/assets/LoginView-Bk2509Bx.js
new file mode 100644
index 00000000..e995dcba
--- /dev/null
+++ b/web/admin-spa/dist/assets/LoginView-Bk2509Bx.js
@@ -0,0 +1 @@
+import{c as b,r as f,q as y,x as a,z as s,R as w,L as d,Q as h,u as o,P as i,Y as v,K as u,aq as p,O as c,y as r}from"./vue-vendor-DV7DYXbz.js";import{u as _,a as k}from"./index-BahP9Xx9.js";import{T as S}from"./ThemeToggle-DROshBR1.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const L={class:"flex min-h-screen items-center justify-center p-4 sm:p-6"},T={class:"fixed right-4 top-4 z-50"},V={class:"glass-strong w-full max-w-md rounded-xl p-6 shadow-2xl sm:rounded-2xl sm:p-8 md:rounded-3xl md:p-10"},N={class:"mb-6 text-center sm:mb-8"},q={class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm sm:mb-6 sm:h-20 sm:w-20 sm:rounded-2xl"},D=["src"],E={key:1,class:"fas fa-cloud text-2xl text-gray-700 sm:text-3xl"},I={key:1,class:"h-10 w-10 animate-pulse rounded bg-gray-300/50 sm:h-12 sm:w-12"},j={key:0,class:"header-title mb-2 text-2xl font-bold text-white sm:text-3xl"},B={key:1,class:"mx-auto mb-2 h-8 w-48 animate-pulse rounded bg-gray-300/50 sm:h-9 sm:w-64"},M=["disabled"],z={key:0,class:"fas fa-sign-in-alt mr-2"},F={key:1,class:"loading-spinner mr-2"},O={key:0,class:"mt-4 rounded-lg border border-red-500/30 bg-red-500/20 p-3 text-center text-xs text-red-800 backdrop-blur-sm dark:text-red-400 sm:mt-6 sm:rounded-xl sm:p-4 sm:text-sm"},Y={__name:"LoginView",setup(U){const e=_(),g=k(),m=b(()=>e.oemLoading),n=f({username:"",password:""});y(()=>{g.initTheme(),e.loadOemSettings()});const x=async()=>{await e.login(n.value)};return(A,t)=>(r(),a("div",L,[s("div",T,[w(S,{mode:"dropdown"})]),s("div",V,[s("div",N,[s("div",q,[m.value?(r(),a("div",I)):(r(),a(h,{key:0},[o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon?(r(),a("img",{key:0,alt:"Logo",class:"h-10 w-10 object-contain sm:h-12 sm:w-12",src:o(e).oemSettings.siteIconData||o(e).oemSettings.siteIcon,onError:t[0]||(t[0]=l=>l.target.style.display="none")},null,40,D)):(r(),a("i",E))],64))]),!m.value&&o(e).oemSettings.siteName?(r(),a("h1",j,i(o(e).oemSettings.siteName),1)):m.value?(r(),a("div",B)):d("",!0),t[3]||(t[3]=s("p",{class:"text-base text-gray-600 dark:text-gray-400 sm:text-lg"},"管理后台",-1))]),s("form",{class:"space-y-4 sm:space-y-6",onSubmit:v(x,["prevent"])},[s("div",null,[t[4]||(t[4]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"username"},"用户名",-1)),u(s("input",{id:"username","onUpdate:modelValue":t[1]||(t[1]=l=>n.value.username=l),autocomplete:"username",class:"form-input w-full",name:"username",placeholder:"请输入用户名",required:"",type:"text"},null,512),[[p,n.value.username]])]),s("div",null,[t[5]||(t[5]=s("label",{class:"mb-2 block text-sm font-semibold text-gray-900 dark:text-gray-100 sm:mb-3",for:"password"},"密码",-1)),u(s("input",{id:"password","onUpdate:modelValue":t[2]||(t[2]=l=>n.value.password=l),autocomplete:"current-password",class:"form-input w-full",name:"password",placeholder:"请输入密码",required:"",type:"password"},null,512),[[p,n.value.password]])]),s("button",{class:"btn btn-primary w-full px-4 py-3 text-base font-semibold sm:px-6 sm:py-4 sm:text-lg",disabled:o(e).loginLoading,type:"submit"},[o(e).loginLoading?d("",!0):(r(),a("i",z)),o(e).loginLoading?(r(),a("div",F)):d("",!0),c(" "+i(o(e).loginLoading?"登录中...":"登录"),1)],8,M)],32),o(e).loginError?(r(),a("div",O,[t[6]||(t[6]=s("i",{class:"fas fa-exclamation-triangle mr-2"},null,-1)),c(i(o(e).loginError),1)])):d("",!0)])]))}};export{Y as default};
diff --git a/web/admin-spa/dist/assets/LoginView-tn0RQdqM.css b/web/admin-spa/dist/assets/LoginView-tn0RQdqM.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/web/admin-spa/dist/assets/LogoTitle-CNwD90nW.js b/web/admin-spa/dist/assets/LogoTitle-DF7a1vCs.js
similarity index 88%
rename from web/admin-spa/dist/assets/LogoTitle-CNwD90nW.js
rename to web/admin-spa/dist/assets/LogoTitle-DF7a1vCs.js
index f874357a..a3593bc2 100644
--- a/web/admin-spa/dist/assets/LogoTitle-CNwD90nW.js
+++ b/web/admin-spa/dist/assets/LogoTitle-DF7a1vCs.js
@@ -1 +1 @@
-import{_ as d}from"./index-B3t2NHq9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-R8HMg95E.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L};
+import{_ as d}from"./index-BahP9Xx9.js";import{x as t,y as a,z as l,Q as n,L as o,A as c,C as g,P as r}from"./vue-vendor-DV7DYXbz.js";const u={class:"flex items-center gap-4"},y={class:"flex h-12 w-12 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl border border-gray-300/30 bg-gradient-to-br from-blue-500/20 to-purple-500/20 backdrop-blur-sm dark:border-gray-600/30 dark:from-blue-600/20 dark:to-purple-600/20"},f=["src"],m={key:1,class:"fas fa-cloud text-xl text-gray-700 dark:text-gray-300"},h={key:1,class:"h-8 w-8 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},x={class:"flex min-h-[48px] flex-col justify-center"},b={class:"flex items-center gap-3"},k={key:1,class:"h-8 w-64 animate-pulse rounded bg-gray-300/50 dark:bg-gray-600/50"},_={key:0,class:"mt-0.5 text-sm leading-tight text-gray-600 dark:text-gray-400"},p={__name:"LogoTitle",props:{loading:{type:Boolean,default:!1},title:{type:String,default:""},subtitle:{type:String,default:""},logoSrc:{type:String,default:""},titleClass:{type:String,default:"text-gray-900"}},setup(e){const i=s=>{s.target.style.display="none"};return(s,S)=>(a(),t("div",u,[l("div",y,[e.loading?(a(),t("div",h)):(a(),t(n,{key:0},[e.logoSrc?(a(),t("img",{key:0,alt:"Logo",class:"h-8 w-8 object-contain",src:e.logoSrc,onError:i},null,40,f)):(a(),t("i",m))],64))]),l("div",x,[l("div",b,[!e.loading&&e.title?(a(),t("h1",{key:0,class:g(["header-title text-2xl font-bold leading-tight",e.titleClass])},r(e.title),3)):e.loading?(a(),t("div",k)):o("",!0),c(s.$slots,"after-title",{},void 0,!0)]),e.subtitle?(a(),t("p",_,r(e.subtitle),1)):o("",!0)])]))}},w=d(p,[["__scopeId","data-v-15eb26fd"]]);export{w as L};
diff --git a/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css b/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css
deleted file mode 100644
index 8604a7ce..00000000
--- a/web/admin-spa/dist/assets/LogoTitle-DXipqypn.css
+++ /dev/null
@@ -1 +0,0 @@
-@keyframes pulse-15eb26fd{0%{opacity:.7}50%{opacity:.4}to{opacity:.7}}.animate-pulse[data-v-15eb26fd]{animation:pulse-15eb26fd 2s cubic-bezier(.4,0,.6,1) infinite}.header-title[data-v-15eb26fd]{text-shadow:0 1px 2px rgba(0,0,0,.1)}
diff --git a/web/admin-spa/dist/assets/MainLayout-C8oFjafl.js b/web/admin-spa/dist/assets/MainLayout-C8oFjafl.js
new file mode 100644
index 00000000..3a50ae57
--- /dev/null
+++ b/web/admin-spa/dist/assets/MainLayout-C8oFjafl.js
@@ -0,0 +1 @@
+import{c as U,r as y,_ as W,q as X,V as Y,x as d,y as u,z as t,L as S,R as k,J as L,P as b,C as I,Y as V,O as _,T as G,K as M,aq as A,aW as Z,Q as q,aU as O,ac as K,o as ee,av as te,aX as se,D as ae}from"./vue-vendor-DV7DYXbz.js";import{_ as re,u as j,l as ne,s as C,m as oe}from"./index-BahP9Xx9.js";import{L as le}from"./LogoTitle-DF7a1vCs.js";import{T as ie}from"./ThemeToggle-DROshBR1.js";import{C as de}from"./ConfirmModal-C2rCOkXI.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const ue={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},ce={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},me={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},ge={class:"flex items-center gap-1 sm:gap-2"},pe={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},fe=["href"],xe={class:"flex items-center gap-2 sm:gap-4"},ve={class:"flex items-center"},ye={class:"user-menu-container relative"},be={class:"hidden sm:inline"},he={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},ke={class:"flex items-center justify-between text-sm"},we={class:"font-mono text-gray-700 dark:text-gray-300"},_e={key:0,class:"mt-2"},Ce={class:"mb-2 flex items-center justify-between text-sm"},Ue={class:"font-mono text-green-600 dark:text-green-400"},Pe=["href"],Te={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},Me={key:2,class:"mt-2 text-center"},Ie={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},$e={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Ne={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},Se=["value"],Ae={class:"relative"},qe=["type"],je={class:"flex gap-3 pt-4"},De=["disabled"],Le={key:0,class:"loading-spinner mr-2"},Ve={key:1,class:"fas fa-save mr-2"},Ke={__name:"AppHeader",setup(P){const p=O(),f=j(),g=U(()=>f.user||{username:"Admin"}),i=U(()=>f.oemSettings||{}),r=U(()=>f.oemLoading),s=y({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),x=y(!1),c=y(!1),o=y(!1),l=y(!1),a=W({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),T=y(!1),w=y({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),h=y(null),z=(n,e,v="确认",m="取消",H="primary")=>new Promise(R=>{w.value={title:n,message:e,confirmText:v,cancelText:m,type:H},h.value=R,T.value=!0}),E=()=>{var n;T.value=!1,(n=h.value)==null||n.call(h,!0)},B=()=>{var n;T.value=!1,(n=h.value)==null||n.call(h,!1)},$=async()=>{if(!s.value.checkingUpdate){s.value.checkingUpdate=!0;try{const n=await ne();if(n.success){const e=n.data;s.value.current=e.current,s.value.latest=e.latest,s.value.hasUpdate=e.hasUpdate,s.value.releaseInfo=e.releaseInfo,s.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:s.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(s.value.noUpdateMessage=!0,setTimeout(()=>{s.value.noUpdateMessage=!1},3e3))}}catch(n){console.error("Error checking for updates:",n);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);s.value.current=v.current||s.value.current,s.value.latest=v.latest,s.value.hasUpdate=v.hasUpdate,s.value.releaseInfo=v.releaseInfo,s.value.lastChecked=new Date(v.lastChecked)}}finally{s.value.checkingUpdate=!1}}},F=()=>{a.currentPassword="",a.newPassword="",a.confirmPassword="",a.newUsername="",c.value=!0,x.value=!1},N=()=>{c.value=!1},J=async()=>{if(a.newPassword!==a.confirmPassword){C("两次输入的密码不一致","error");return}if(a.newPassword.length<8){C("新密码长度至少8位","error");return}o.value=!0;try{const n=await oe({currentPassword:a.currentPassword,newPassword:a.newPassword,newUsername:a.newUsername||void 0});if(n.success){const e=a.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";C(e,"success"),N(),setTimeout(()=>{f.logout(),p.push("/login")},1500)}else C(n.message||"修改失败","error")}catch{C("修改密码失败","error")}finally{o.value=!1}},Q=async()=>{await z("退出登录","确定要退出登录吗?","确定退出","取消","warning")&&(f.logout(),p.push("/login"),C("已安全退出","success")),x.value=!1},D=n=>{!n.target.closest(".user-menu-container")&&x.value&&(x.value=!1)};return X(()=>{$(),setInterval(()=>{$()},36e5),document.addEventListener("click",D)}),Y(()=>{document.removeEventListener("click",D)}),(n,e)=>{var v;return u(),d(q,null,[t("div",ue,[t("div",ce,[t("div",me,[k(le,{loading:r.value,"logo-src":i.value.siteIconData||i.value.siteIcon,subtitle:"管理后台",title:i.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var m;return[t("div",ge,[t("span",pe,"v"+b(s.value.current||"..."),1),s.value.hasUpdate?(u(),d("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((m=s.value.releaseInfo)==null?void 0:m.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[8]||(e[8]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,fe)):S("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",xe,[t("div",ve,[k(ie,{mode:"dropdown"})]),e[19]||(e[19]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",ye,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=m=>x.value=!x.value)},[e[9]||(e[9]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",be,b(g.value.username||"Admin"),1),t("i",{class:I(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":x.value}])},null,2)]),x.value?(u(),d("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=V(()=>{},["stop"]))},[t("div",he,[t("div",ke,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",we,"v"+b(s.value.current||"..."),1)]),s.value.hasUpdate?(u(),d("div",_e,[t("div",Ce,[e[11]||(e[11]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),_("有新版本 ")],-1)),t("span",Ue,"v"+b(s.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=s.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[12]||(e[12]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),_("查看更新 ",-1)]),8,Pe)])):s.value.checkingUpdate?(u(),d("div",Te,e[13]||(e[13]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),_("检查更新中... ",-1)]))):(u(),d("div",Me,[k(G,{mode:"out-in",name:"fade"},{default:L(()=>[s.value.noUpdateMessage?(u(),d("div",Ie,e[14]||(e[14]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),_("当前已是最新版本 ")],-1)]))):(u(),d("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=m=>$())},e[15]||(e[15]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),_("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:F},e[16]||(e[16]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[18]||(e[18]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Q},e[17]||(e[17]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):S("",!0)])])])]),c.value?(u(),d("div",$e,[t("div",Ne,[t("div",{class:"mb-6 flex items-center justify-between"},[e[21]||(e[21]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:N},e[20]||(e[20]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:V(J,["prevent"])},[t("div",null,[e[22]||(e[22]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:g.value.username||"Admin"},null,8,Se),e[23]||(e[23]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[24]||(e[24]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),M(t("input",{"onUpdate:modelValue":e[3]||(e[3]=m=>a.newUsername=m),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[A,a.newUsername]]),e[25]||(e[25]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),t("div",Ae,[M(t("input",{"onUpdate:modelValue":e[4]||(e[4]=m=>a.currentPassword=m),class:"form-input w-full pr-10",placeholder:"请输入当前密码",required:"",type:l.value?"text":"password"},null,8,qe),[[Z,a.currentPassword]]),t("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",type:"button",onClick:e[5]||(e[5]=m=>l.value=!l.value)},[t("i",{class:I(l.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])]),t("div",null,[e[27]||(e[27]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),M(t("input",{"onUpdate:modelValue":e[6]||(e[6]=m=>a.newPassword=m),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[A,a.newPassword]]),e[28]||(e[28]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[29]||(e[29]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),M(t("input",{"onUpdate:modelValue":e[7]||(e[7]=m=>a.confirmPassword=m),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[A,a.confirmPassword]])]),t("div",je,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:N}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:o.value,type:"submit"},[o.value?(u(),d("div",Le)):(u(),d("i",Ve)),_(" "+b(o.value?"保存中...":"保存修改"),1)],8,De)])],32)])])):S("",!0),k(de,{"cancel-text":w.value.cancelText,"confirm-text":w.value.confirmText,message:w.value.message,show:T.value,title:w.value.title,type:w.value.type,onCancel:B,onConfirm:E},null,8,["cancel-text","confirm-text","message","show","title","type"])],64)}}},Oe=re(Ke,[["__scopeId","data-v-2abe1d62"]]),ze={class:"mb-4 sm:mb-6"},Ee={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Be=["value"],Fe=["value"],Je={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Qe=["onClick"],He={class:"hidden md:inline"},Re={class:"md:hidden"},We={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(P){const p=j(),f=U(()=>{var i;const g=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"},{key:"quotaCards",name:"额度卡",shortName:"额度卡",icon:"fas fa-ticket-alt"}];return(i=p.oemSettings)!=null&&i.ldapEnabled&&g.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),g.push({key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),g});return(g,i)=>(u(),d("div",ze,[t("div",Ee,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:P.activeTab,onChange:i[0]||(i[0]=r=>g.$emit("tab-change",r.target.value))},[(u(!0),d(q,null,K(f.value,r=>(u(),d("option",{key:r.key,value:r.key},b(r.name),9,Fe))),128))],40,Be)]),t("div",Je,[(u(!0),d(q,null,K(f.value,r=>(u(),d("button",{key:r.key,class:I(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",P.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:s=>g.$emit("tab-change",r.key)},[t("i",{class:I(r.icon+" mr-1 sm:mr-2")},null,2),t("span",He,b(r.name),1),t("span",Re,b(r.shortName||r.name),1)],10,Qe))),128))])]))}},Xe={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ye={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Ge={class:"tab-content"},ot={__name:"MainLayout",setup(P){const p=se(),f=O(),g=j(),i=y("dashboard"),r=U(()=>{var o;const c={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",quotaCards:"/quota-cards",settings:"/settings"};return(o=g.oemSettings)!=null&&o.ldapEnabled&&(c.userManagement="/user-management"),c}),s=()=>{const c=p.path,o=Object.keys(r.value).find(l=>r.value[l]===c);if(o)i.value=o;else{const l=p.name,a={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",QuotaCards:"quotaCards",Settings:"settings"};l&&a[l]?i.value=a[l]:i.value="dashboard"}};s(),ee(()=>p.path,c=>{const o=Object.keys(r.value).find(l=>r.value[l]===c);if(o)i.value=o;else{const l=p.name,a={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",QuotaCards:"quotaCards",Tutorial:"tutorial",Settings:"settings"};l&&a[l]&&(i.value=a[l])}});const x=async c=>{if(r.value[c]!==p.path){i.value=c;try{await f.push(r.value[c]),await ae()}catch(o){o.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",o),s())}}};return(c,o)=>{const l=te("router-view");return u(),d("div",Xe,[k(Oe),t("div",Ye,[k(We,{"active-tab":i.value,onTabChange:x},null,8,["active-tab"]),t("div",Ge,[k(l)])])])}}};export{ot as default};
diff --git a/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css b/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css
deleted file mode 100644
index 61c20f5f..00000000
--- a/web/admin-spa/dist/assets/MainLayout-CCQ2LruH.css
+++ /dev/null
@@ -1 +0,0 @@
-.user-menu-button[data-v-1d65ae6c]{position:relative;overflow:hidden;min-height:38px}.user-menu-button[data-v-1d65ae6c]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.user-menu-button[data-v-1d65ae6c]:hover:before{left:100%}.user-menu-dropdown[data-v-1d65ae6c]{margin-top:8px;animation:slideDown-1d65ae6c .3s ease-out}@keyframes slideDown-1d65ae6c{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-1d65ae6c],.fade-leave-active[data-v-1d65ae6c]{transition:opacity .3s}.fade-enter-from[data-v-1d65ae6c],.fade-leave-to[data-v-1d65ae6c]{opacity:0}
diff --git a/web/admin-spa/dist/assets/MainLayout-CYVTVq7H.js b/web/admin-spa/dist/assets/MainLayout-CYVTVq7H.js
deleted file mode 100644
index dfca4c4e..00000000
--- a/web/admin-spa/dist/assets/MainLayout-CYVTVq7H.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as _,r as w,_ as E,q as B,V as R,x as l,y as i,z as t,L as I,R as k,J as L,P as b,C as M,Y as j,O as y,T as F,K as C,aq as P,Q as $,aU as K,ac as D,o as J,av as H,aW as Q,D as W}from"./vue-vendor-R8HMg95E.js";import{_ as N,u as S,c as V,s as h}from"./index-B3t2NHq9.js";import{L as Y}from"./LogoTitle-CNwD90nW.js";import{T as G}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const X={class:"glass-strong mb-4 rounded-xl p-3 shadow-xl sm:mb-6 sm:rounded-2xl sm:p-4 md:mb-8 md:rounded-3xl md:p-6",style:{"z-index":"10",position:"relative"}},Z={class:"flex flex-col items-center justify-between gap-3 sm:flex-row sm:gap-4"},ee={class:"flex w-full items-center justify-center gap-2 sm:w-auto sm:justify-start sm:gap-3 md:gap-4"},te={class:"flex items-center gap-1 sm:gap-2"},se={class:"font-mono text-xs text-gray-400 dark:text-gray-500 sm:text-sm"},ae=["href"],re={class:"flex items-center gap-2 sm:gap-4"},ne={class:"flex items-center"},oe={class:"user-menu-container relative"},le={class:"hidden sm:inline"},ie={class:"border-b border-gray-100 px-4 py-3 dark:border-gray-700"},de={class:"flex items-center justify-between text-sm"},ue={class:"font-mono text-gray-700 dark:text-gray-300"},ce={key:0,class:"mt-2"},me={class:"mb-2 flex items-center justify-between text-sm"},ge={class:"font-mono text-green-600 dark:text-green-400"},pe=["href"],fe={key:1,class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},xe={key:2,class:"mt-2 text-center"},ve={key:"message",class:"inline-block rounded-lg border border-green-200 bg-green-100 px-3 py-1.5 dark:border-green-800 dark:bg-green-900/30"},be={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ye={class:"modal-content mx-auto flex max-h-[90vh] w-full max-w-md flex-col p-4 sm:p-6 md:p-8"},he=["value"],ke={class:"flex gap-3 pt-4"},we=["disabled"],_e={key:0,class:"loading-spinner mr-2"},Ue={key:1,class:"fas fa-save mr-2"},Ce={__name:"AppHeader",setup(U){const g=K(),p=S(),c=_(()=>p.user||{username:"Admin"}),o=_(()=>p.oemSettings||{}),r=_(()=>p.oemLoading),a=w({current:"...",latest:"",hasUpdate:!1,checkingUpdate:!1,lastChecked:null,releaseInfo:null,noUpdateMessage:!1}),f=w(!1),d=w(!1),n=w(!1),s=E({currentPassword:"",newPassword:"",confirmPassword:"",newUsername:""}),x=async()=>{if(!a.value.checkingUpdate){a.value.checkingUpdate=!0;try{const m=await V.get("/admin/check-updates");if(m.success){const e=m.data;a.value.current=e.current,a.value.latest=e.latest,a.value.hasUpdate=e.hasUpdate,a.value.releaseInfo=e.releaseInfo,a.value.lastChecked=new Date,localStorage.setItem("versionInfo",JSON.stringify({current:e.current,latest:e.latest,lastChecked:a.value.lastChecked,hasUpdate:e.hasUpdate,releaseInfo:e.releaseInfo})),e.hasUpdate||(a.value.noUpdateMessage=!0,setTimeout(()=>{a.value.noUpdateMessage=!1},3e3))}}catch(m){console.error("Error checking for updates:",m);const e=localStorage.getItem("versionInfo");if(e){const v=JSON.parse(e);a.value.current=v.current||a.value.current,a.value.latest=v.latest,a.value.hasUpdate=v.hasUpdate,a.value.releaseInfo=v.releaseInfo,a.value.lastChecked=new Date(v.lastChecked)}}finally{a.value.checkingUpdate=!1}}},O=()=>{s.currentPassword="",s.newPassword="",s.confirmPassword="",s.newUsername="",d.value=!0,f.value=!1},T=()=>{d.value=!1},q=async()=>{if(s.newPassword!==s.confirmPassword){h("两次输入的密码不一致","error");return}if(s.newPassword.length<8){h("新密码长度至少8位","error");return}n.value=!0;try{const m=await V.post("/web/auth/change-password",{currentPassword:s.currentPassword,newPassword:s.newPassword,newUsername:s.newUsername||void 0});if(m.success){const e=s.newUsername?"账户信息修改成功,请重新登录":"密码修改成功,请重新登录";h(e,"success"),T(),setTimeout(()=>{p.logout(),g.push("/login")},1500)}else h(m.message||"修改失败","error")}catch{h("修改密码失败","error")}finally{n.value=!1}},z=()=>{confirm("确定要退出登录吗?")&&(p.logout(),g.push("/login"),h("已安全退出","success")),f.value=!1},A=m=>{!m.target.closest(".user-menu-container")&&f.value&&(f.value=!1)};return B(()=>{x(),setInterval(()=>{x()},36e5),document.addEventListener("click",A)}),R(()=>{document.removeEventListener("click",A)}),(m,e)=>{var v;return i(),l($,null,[t("div",X,[t("div",Z,[t("div",ee,[k(Y,{loading:r.value,"logo-src":o.value.siteIconData||o.value.siteIcon,subtitle:"管理后台",title:o.value.siteName,"title-class":"text-white dark:text-gray-100"},{"after-title":L(()=>{var u;return[t("div",te,[t("span",se,"v"+b(a.value.current||"..."),1),a.value.hasUpdate?(i(),l("a",{key:0,class:"inline-flex animate-pulse items-center gap-1 rounded-full border border-green-600 bg-green-500 px-2 py-0.5 text-xs text-white transition-colors hover:bg-green-600",href:((u=a.value.releaseInfo)==null?void 0:u.htmlUrl)||"#",target:"_blank",title:"有新版本可用"},e[7]||(e[7]=[t("i",{class:"fas fa-arrow-up text-[10px]"},null,-1),t("span",null,"新版本",-1)]),8,ae)):I("",!0)])]}),_:1},8,["loading","logo-src","title"])]),t("div",re,[t("div",ne,[k(G,{mode:"dropdown"})]),e[18]||(e[18]=t("div",{class:"h-8 w-px bg-gradient-to-b from-transparent via-gray-300 to-transparent opacity-50 dark:via-gray-600"},null,-1)),t("div",oe,[t("button",{class:"user-menu-button flex items-center gap-2 rounded-2xl bg-gradient-to-r from-blue-500 to-blue-600 px-3 py-2 text-sm font-semibold text-white shadow-lg transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95 sm:px-4 sm:py-2.5",onClick:e[0]||(e[0]=u=>f.value=!f.value)},[e[8]||(e[8]=t("i",{class:"fas fa-user-circle text-sm sm:text-base"},null,-1)),t("span",le,b(c.value.username||"Admin"),1),t("i",{class:M(["fas fa-chevron-down ml-1 text-xs transition-transform duration-200",{"rotate-180":f.value}])},null,2)]),f.value?(i(),l("div",{key:0,class:"user-menu-dropdown absolute right-0 top-full mt-2 w-48 rounded-xl border border-gray-200 bg-white py-2 shadow-xl dark:border-gray-700 dark:bg-gray-800 sm:w-56",style:{"z-index":"999999"},onClick:e[2]||(e[2]=j(()=>{},["stop"]))},[t("div",ie,[t("div",de,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"当前版本",-1)),t("span",ue,"v"+b(a.value.current||"..."),1)]),a.value.hasUpdate?(i(),l("div",ce,[t("div",me,[e[10]||(e[10]=t("span",{class:"font-medium text-green-600 dark:text-green-400"},[t("i",{class:"fas fa-arrow-up mr-1"}),y("有新版本 ")],-1)),t("span",ge,"v"+b(a.value.latest),1)]),t("a",{class:"block w-full rounded-lg bg-green-500 px-3 py-1.5 text-center text-sm text-white transition-colors hover:bg-green-600",href:((v=a.value.releaseInfo)==null?void 0:v.htmlUrl)||"#",target:"_blank"},e[11]||(e[11]=[t("i",{class:"fas fa-external-link-alt mr-1"},null,-1),y("查看更新 ",-1)]),8,pe)])):a.value.checkingUpdate?(i(),l("div",fe,e[12]||(e[12]=[t("i",{class:"fas fa-spinner fa-spin mr-1"},null,-1),y("检查更新中... ",-1)]))):(i(),l("div",xe,[k(F,{mode:"out-in",name:"fade"},{default:L(()=>[a.value.noUpdateMessage?(i(),l("div",ve,e[13]||(e[13]=[t("p",{class:"text-xs font-medium text-green-700 dark:text-green-400"},[t("i",{class:"fas fa-check-circle mr-1"}),y("当前已是最新版本 ")],-1)]))):(i(),l("button",{key:"button",class:"text-xs text-blue-500 transition-colors hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",onClick:e[1]||(e[1]=u=>x())},e[14]||(e[14]=[t("i",{class:"fas fa-sync-alt mr-1"},null,-1),y("检查更新 ",-1)])))]),_:1})]))]),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:O},e[15]||(e[15]=[t("i",{class:"fas fa-key text-blue-500"},null,-1),t("span",null,"修改账户信息",-1)])),e[17]||(e[17]=t("hr",{class:"my-2 border-gray-200 dark:border-gray-700"},null,-1)),t("button",{class:"flex w-full items-center gap-3 px-4 py-3 text-left text-gray-700 transition-colors hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700",onClick:z},e[16]||(e[16]=[t("i",{class:"fas fa-sign-out-alt text-red-500"},null,-1),t("span",null,"退出登录",-1)]))])):I("",!0)])])])]),d.value?(i(),l("div",be,[t("div",ye,[t("div",{class:"mb-6 flex items-center justify-between"},[e[20]||(e[20]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-key text-white"})]),t("h3",{class:"text-xl font-bold text-gray-900 dark:text-gray-100"},"修改账户信息")],-1)),t("button",{class:"text-gray-400 transition-colors hover:text-gray-600 dark:hover:text-gray-300",onClick:T},e[19]||(e[19]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("form",{class:"modal-scroll-content custom-scrollbar flex-1 space-y-6",onSubmit:j(q,["prevent"])},[t("div",null,[e[21]||(e[21]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前用户名",-1)),t("input",{class:"form-input w-full cursor-not-allowed bg-gray-100 dark:bg-gray-700 dark:text-gray-300",disabled:"",type:"text",value:c.value.username||"Admin"},null,8,he),e[22]||(e[22]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 当前用户名,输入新用户名以修改 ",-1))]),t("div",null,[e[23]||(e[23]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新用户名",-1)),C(t("input",{"onUpdate:modelValue":e[3]||(e[3]=u=>s.newUsername=u),class:"form-input w-full",placeholder:"输入新用户名(留空保持不变)",type:"text"},null,512),[[P,s.newUsername]]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"留空表示不修改用户名",-1))]),t("div",null,[e[25]||(e[25]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"当前密码",-1)),C(t("input",{"onUpdate:modelValue":e[4]||(e[4]=u=>s.currentPassword=u),class:"form-input w-full",placeholder:"请输入当前密码",required:"",type:"password"},null,512),[[P,s.currentPassword]])]),t("div",null,[e[26]||(e[26]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新密码",-1)),C(t("input",{"onUpdate:modelValue":e[5]||(e[5]=u=>s.newPassword=u),class:"form-input w-full",placeholder:"请输入新密码",required:"",type:"password"},null,512),[[P,s.newPassword]]),e[27]||(e[27]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},"密码长度至少8位",-1))]),t("div",null,[e[28]||(e[28]=t("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"确认新密码",-1)),C(t("input",{"onUpdate:modelValue":e[6]||(e[6]=u=>s.confirmPassword=u),class:"form-input w-full",placeholder:"请再次输入新密码",required:"",type:"password"},null,512),[[P,s.confirmPassword]])]),t("div",ke,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",type:"button",onClick:T}," 取消 "),t("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:n.value,type:"submit"},[n.value?(i(),l("div",_e)):(i(),l("i",Ue)),y(" "+b(n.value?"保存中...":"保存修改"),1)],8,we)])],32)])])):I("",!0)],64)}}},Pe=N(Ce,[["__scopeId","data-v-1d65ae6c"]]),Te={class:"mb-4 sm:mb-6"},Ie={class:"block rounded-xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:hidden"},Me=["value"],$e=["value"],Ne={class:"hidden flex-wrap gap-2 rounded-2xl bg-white/10 p-2 backdrop-blur-sm dark:bg-gray-800/20 sm:flex"},Se=["onClick"],Ae={class:"hidden md:inline"},Le={class:"md:hidden"},je={__name:"TabBar",props:{activeTab:{type:String,required:!0}},emits:["tab-change"],setup(U){const g=S(),p=_(()=>{var o;const c=[{key:"dashboard",name:"仪表板",shortName:"仪表板",icon:"fas fa-tachometer-alt"},{key:"apiKeys",name:"API Keys",shortName:"API",icon:"fas fa-key"},{key:"accounts",name:"账户管理",shortName:"账户",icon:"fas fa-user-circle"}];return(o=g.oemSettings)!=null&&o.ldapEnabled&&c.push({key:"userManagement",name:"用户管理",shortName:"用户",icon:"fas fa-users"}),c.push({key:"tutorial",name:"使用教程",shortName:"教程",icon:"fas fa-graduation-cap"},{key:"settings",name:"系统设置",shortName:"设置",icon:"fas fa-cogs"}),c});return(c,o)=>(i(),l("div",Te,[t("div",Ie,[t("select",{class:"focus:ring-primary-color w-full rounded-lg bg-white/90 px-4 py-3 font-semibold text-gray-700 focus:outline-none focus:ring-2 dark:bg-gray-800/90 dark:text-gray-200 dark:focus:ring-indigo-400",value:U.activeTab,onChange:o[0]||(o[0]=r=>c.$emit("tab-change",r.target.value))},[(i(!0),l($,null,D(p.value,r=>(i(),l("option",{key:r.key,value:r.key},b(r.name),9,$e))),128))],40,Me)]),t("div",Ne,[(i(!0),l($,null,D(p.value,r=>(i(),l("button",{key:r.key,class:M(["tab-btn flex-1 px-3 py-2 text-xs font-semibold transition-all duration-300 sm:px-4 sm:py-3 sm:text-sm md:px-6",U.activeTab===r.key?"active":"text-gray-700 hover:bg-white/10 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700/30 dark:hover:text-gray-100"]),onClick:a=>c.$emit("tab-change",r.key)},[t("i",{class:M(r.icon+" mr-1 sm:mr-2")},null,2),t("span",Ae,b(r.name),1),t("span",Le,b(r.shortName||r.name),1)],10,Se))),128))])]))}},De=N(je,[["__scopeId","data-v-bc8f3d44"]]),Ve={class:"min-h-screen p-3 sm:p-4 md:p-6"},Ke={class:"glass-strong rounded-xl p-3 shadow-xl sm:rounded-2xl sm:p-4 md:rounded-3xl md:p-6",style:{"z-index":"1","min-height":"calc(100vh - 120px)"}},Oe={class:"tab-content"},qe={__name:"MainLayout",setup(U){const g=Q(),p=K(),c=S(),o=w("dashboard"),r=_(()=>{var n;const d={dashboard:"/dashboard",apiKeys:"/api-keys",accounts:"/accounts",tutorial:"/tutorial",settings:"/settings"};return(n=c.oemSettings)!=null&&n.ldapEnabled&&(d.userManagement="/user-management"),d}),a=()=>{const d=g.path,n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]?o.value=x[s]:o.value="dashboard"}};a(),J(()=>g.path,d=>{const n=Object.keys(r.value).find(s=>r.value[s]===d);if(n)o.value=n;else{const s=g.name,x={Dashboard:"dashboard",ApiKeys:"apiKeys",Accounts:"accounts",Tutorial:"tutorial",Settings:"settings"};s&&x[s]&&(o.value=x[s])}});const f=async d=>{if(r.value[d]!==g.path){o.value=d;try{await p.push(r.value[d]),await W()}catch(n){n.name!=="NavigationDuplicated"&&(console.error("路由切换失败:",n),a())}}};return(d,n)=>{const s=H("router-view");return i(),l("div",Ve,[k(Pe),t("div",Ke,[k(De,{"active-tab":o.value,onTabChange:f},null,8,["active-tab"]),t("div",Oe,[k(s)])])])}}},He=N(qe,[["__scopeId","data-v-4d6bba6e"]]);export{He as default};
diff --git a/web/admin-spa/dist/assets/MainLayout-DUrvC5cF.css b/web/admin-spa/dist/assets/MainLayout-DUrvC5cF.css
new file mode 100644
index 00000000..f2de56f3
--- /dev/null
+++ b/web/admin-spa/dist/assets/MainLayout-DUrvC5cF.css
@@ -0,0 +1 @@
+.user-menu-button[data-v-2abe1d62]{position:relative;overflow:hidden;min-height:38px;background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);box-shadow:0 4px 12px rgba(var(--primary-rgb),.3)}.user-menu-button[data-v-2abe1d62]:hover{box-shadow:0 6px 16px rgba(var(--primary-rgb),.4)}.user-menu-button[data-v-2abe1d62]:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.user-menu-button[data-v-2abe1d62]:hover:before{left:100%}.user-menu-dropdown[data-v-2abe1d62]{margin-top:8px;animation:slideDown-2abe1d62 .3s ease-out}@keyframes slideDown-2abe1d62{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.fade-enter-active[data-v-2abe1d62],.fade-leave-active[data-v-2abe1d62]{transition:opacity .3s}.fade-enter-from[data-v-2abe1d62],.fade-leave-to[data-v-2abe1d62]{opacity:0}
diff --git a/web/admin-spa/dist/assets/QuotaCardsView-B9kpLmPn.js b/web/admin-spa/dist/assets/QuotaCardsView-B9kpLmPn.js
new file mode 100644
index 00000000..645cfe64
--- /dev/null
+++ b/web/admin-spa/dist/assets/QuotaCardsView-B9kpLmPn.js
@@ -0,0 +1,3 @@
+import{r as n,c as K,q as vt,x as o,z as t,I as X,R as ft,L as d,O as v,P as l,K as p,al as kt,aq as C,Q as f,ac as M,aV as Y,a5 as Z,Y as ht,y as a,C as L,u as U}from"./vue-vendor-DV7DYXbz.js";import{C as wt}from"./ConfirmModal-C2rCOkXI.js";import{bo as Ct,bp as _t,bq as At,br as $t,bs as Ut,s as m,bt as et,bu as qt,bv as jt,Z as N,c as st}from"./index-BahP9Xx9.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const Tt={class:"tab-content"},Vt={class:"card p-4 sm:p-6"},Mt={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Lt={class:"flex items-center justify-between"},St={class:"grid grid-cols-2 gap-3 sm:grid-cols-4 sm:gap-4"},Dt={class:"stat-card"},Pt={class:"flex items-center justify-between"},Rt={class:"text-xl font-bold text-gray-900 dark:text-gray-100 sm:text-2xl"},Qt={class:"stat-card"},It={class:"flex items-center justify-between"},zt={class:"text-xl font-bold text-green-600 dark:text-green-400 sm:text-2xl"},Bt={class:"stat-card"},Kt={class:"flex items-center justify-between"},Nt={class:"text-xl font-bold text-purple-600 dark:text-purple-400 sm:text-2xl"},Ot={class:"stat-card"},Et={class:"flex items-center justify-between"},Ft={class:"text-xl font-bold text-red-600 dark:text-red-400 sm:text-2xl"},Wt={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800/50"},Xt={class:"flex flex-wrap items-center gap-4"},Yt={class:"flex items-center gap-2"},Zt={class:"relative inline-flex cursor-pointer items-center"},Gt={class:"flex items-center gap-2"},Ht=["disabled"],Jt={class:"flex items-center gap-2"},te=["disabled"],ee={class:"border-b border-gray-200 dark:border-gray-700"},se={"aria-label":"Tabs",class:"-mb-px flex space-x-8"},ae=["onClick"],re={key:0,class:"flex items-center justify-center py-12"},oe={key:1,class:"overflow-x-auto"},le={key:0,class:"mb-3 flex items-center gap-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},de={class:"text-sm text-blue-700 dark:text-blue-300"},ne={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},ie={class:"bg-gray-50 dark:bg-gray-700/50"},ue={class:"w-10 px-4 py-3"},xe=["checked","indeterminate"],ge={class:"divide-y divide-gray-200 bg-white dark:divide-gray-700 dark:bg-gray-800"},ye={class:"whitespace-nowrap px-4 py-3"},pe=["checked","onChange"],be={class:"whitespace-nowrap px-4 py-3"},me=["onClick"],ce={class:"whitespace-nowrap px-4 py-3"},ve={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-900 dark:text-white"},fe={key:0},ke={key:1},he={key:2},we={class:"whitespace-nowrap px-4 py-3"},Ce={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},_e={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},Ae={class:"whitespace-nowrap px-4 py-3 text-right"},$e=["onClick"],Ue={key:0},qe={key:1,class:"flex flex-col items-center justify-between gap-3 border-t border-gray-200 px-4 py-3 dark:border-gray-700 sm:flex-row"},je={class:"flex items-center gap-4"},Te={class:"text-sm text-gray-600 dark:text-gray-400"},Ve={class:"flex items-center gap-2"},Me=["value"],Le={class:"flex items-center gap-2"},Se=["disabled"],De={class:"text-sm text-gray-600 dark:text-gray-400"},Pe=["disabled"],Re={key:2,class:"overflow-x-auto"},Qe={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},Ie={class:"divide-y divide-gray-200 bg-white dark:divide-gray-700 dark:bg-gray-800"},ze={class:"whitespace-nowrap px-4 py-3"},Be=["onClick"],Ke={class:"whitespace-nowrap px-4 py-3"},Ne=["onClick"],Oe={class:"whitespace-nowrap px-4 py-3"},Ee=["onClick"],Fe={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-900 dark:text-white"},We={key:0},Xe={key:1},Ye={key:2},Ze={class:"whitespace-nowrap px-4 py-3"},Ge={class:"whitespace-nowrap px-4 py-3 text-sm text-gray-500 dark:text-gray-400"},He={class:"whitespace-nowrap px-4 py-3 text-right"},Je=["onClick"],ts={key:0},es={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ss={class:"modal-content mx-auto w-full max-w-lg p-6"},as={class:"mb-6 flex items-center justify-between"},rs={class:"space-y-4"},os={key:0},ls={key:1},ds={class:"flex gap-2"},ns={class:"mt-6 flex gap-3"},is=["disabled"],us={key:0,class:"fas fa-spinner fa-spin mr-2"},xs={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},gs={class:"modal-content mx-auto w-full max-w-lg p-6"},ys={class:"mb-6 flex items-center justify-between"},ps={class:"flex items-center gap-3"},bs={class:"text-sm text-gray-500 dark:text-gray-400"},ms={class:"mb-4 max-h-60 overflow-y-auto rounded-lg bg-gray-50 p-3 dark:bg-gray-700/50"},cs={class:"flex items-center gap-2"},vs={class:"text-xs text-gray-400"},fs={class:"font-mono text-sm text-gray-900 dark:text-white"},ks={class:"text-xs text-gray-500 dark:text-gray-400"},hs={class:"w-full max-w-md rounded-2xl bg-white p-6 shadow-2xl dark:bg-gray-800"},ws={class:"mb-4"},Cs={class:"flex justify-end gap-3"},Ts={__name:"QuotaCardsView",setup(_s){const O=n(!1),q=n(!1),j=n(!1),E=n(!1),S=n(!1),_=n({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),k=n(null),y=n([]),T=n(!1),D=n(""),P=n(null),R=n("cards"),i=n([]),c=n(1),V=n(20),at=[10,20,50,100],Q=n(0),rt=[{id:"cards",name:"卡片列表"},{id:"redemptions",name:"核销记录"}],A=n({total:0,unused:0,redeemed:0,revoked:0,expired:0}),b=n({enabled:!0,maxExpiryDays:90,maxTotalCostLimit:1e3}),I=n([]),F=n([]),z=K(()=>I.value.filter(r=>r.status==="unused")),G=K(()=>z.value.length>0&&i.value.length===z.value.length),ot=K(()=>i.value.length>0&&i.value.length{G.value?i.value=[]:i.value=z.value.map(r=>r.id)},dt=r=>{const e=i.value.indexOf(r);e===-1?i.value.push(r):i.value.splice(e,1)},x=n({type:"quota",quotaAmount:10,timeAmount:30,timeUnit:"days",count:1,note:""}),H=(r,e,s="确认",u="取消",$="primary")=>new Promise(g=>{_.value={title:r,message:e,confirmText:s,cancelText:u,type:$},k.value=g,S.value=!0}),nt=()=>{var r;S.value=!1,(r=k.value)==null||r.call(k,!0)},it=()=>{var r;S.value=!1,(r=k.value)==null||r.call(k,!1)},h=async()=>{var g,w,B;O.value=!0;const r=(c.value-1)*V.value,[e,s,u]=await Promise.all([Ct({limit:V.value,offset:r}),_t(),At()]),$=await $t().catch(()=>({data:null}));I.value=((g=e.data)==null?void 0:g.cards)||[],Q.value=((w=e.data)==null?void 0:w.total)||0,A.value=s.data||A.value,F.value=((B=u.data)==null?void 0:B.redemptions)||[],$.data&&(b.value=$.data),O.value=!1},W=async()=>{(await Ut(b.value)).success&&m("配置已保存","success")},J=K(()=>Math.ceil(Q.value/V.value)),tt=r=>{c.value=r,i.value=[],h()},ut=()=>{c.value=1,i.value=[],h()},xt=async()=>{q.value=!0;const r=await qt(x.value);if(r.success){j.value=!1;const e=r.data;Array.isArray(e)?y.value=e:e?y.value=[e]:y.value=[],y.value.length>0&&(E.value=!0),m(`成功创建 ${y.value.length} 张卡片`,"success"),h()}else m(r.message||"创建卡片失败","error");q.value=!1},gt=()=>{if(y.value.length===0)return;const r=y.value.map(g=>{let w="";if((g.type==="quota"||g.type==="combo")&&(w+=`$${g.quotaAmount}`),g.type==="combo"&&(w+="_"),g.type==="time"||g.type==="combo"){const B={hours:"h",days:"d",months:"m"};w+=`${g.timeAmount}${B[g.timeUnit]||g.timeUnit}`}return`${w} ${g.code}`}).join(`
+`),e=new Blob([r],{type:"text/plain;charset=utf-8"}),s=URL.createObjectURL(e),u=document.createElement("a");u.href=s;const $=new Date().toISOString().replace(/[:.]/g,"-").slice(0,-5);u.download=`quota-cards-${$}.txt`,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(s),m("卡片文件已下载","success")},yt=async()=>{if(y.value.length===0)return;const r=y.value.map(e=>e.code).join(`
+`);try{await navigator.clipboard.writeText(r),m("已复制所有卡号","success")}catch(e){console.error("Failed to copy:",e),m("复制失败","error")}},pt=async r=>{await H("删除卡片",`确定删除卡片 ${r.code}?`,"确定删除","取消","danger")&&(await et(r.id),m("卡片已删除","success"),h())},bt=async()=>{await H("批量删除",`确定删除选中的 ${i.value.length} 张卡片?`,"确定删除","取消","danger")&&(await Promise.all(i.value.map(e=>et(e))),m(`已删除 ${i.value.length} 张卡片`,"success"),i.value=[],h())},mt=r=>{P.value=r,D.value="",T.value=!0},ct=async()=>{P.value&&(await jt(P.value.id,{reason:D.value}),m("核销已撤销","success"),T.value=!1,P.value=null,h())};return vt(()=>{h()}),(r,e)=>(a(),o("div",Tt,[t("div",Vt,[t("div",Mt,[t("div",Lt,[e[21]||(e[21]=t("div",null,[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 额度卡管理 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理额度卡和时间卡,用户可核销增加额度 ")],-1)),t("button",{class:"inline-flex items-center rounded-md bg-blue-600 px-3 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:e[0]||(e[0]=s=>j.value=!0)},e[20]||(e[20]=[t("i",{class:"fas fa-plus mr-2"},null,-1),v(" 创建卡片 ",-1)]))]),t("div",St,[t("div",Dt,[t("div",Pt,[t("div",null,[e[22]||(e[22]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 总卡片数 ",-1)),t("p",Rt,l(A.value.total),1)]),e[23]||(e[23]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-ticket-alt"})],-1))])]),t("div",Qt,[t("div",It,[t("div",null,[e[24]||(e[24]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 未使用 ",-1)),t("p",zt,l(A.value.unused),1)]),e[25]||(e[25]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-check-circle"})],-1))])]),t("div",Bt,[t("div",Kt,[t("div",null,[e[26]||(e[26]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 已核销 ",-1)),t("p",Nt,l(A.value.redeemed),1)]),e[27]||(e[27]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-exchange-alt"})],-1))])]),t("div",Ot,[t("div",Et,[t("div",null,[e[28]||(e[28]=t("p",{class:"mb-1 text-xs font-semibold text-gray-600 dark:text-gray-400 sm:text-sm"}," 已撤销 ",-1)),t("p",Ft,l(A.value.revoked),1)]),e[29]||(e[29]=t("div",{class:"stat-icon flex-shrink-0 bg-gradient-to-br from-red-500 to-red-600"},[t("i",{class:"fas fa-ban"})],-1))])])]),t("div",Wt,[t("div",Xt,[t("div",Yt,[e[31]||(e[31]=t("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"},"兑换上限保护",-1)),t("label",Zt,[p(t("input",{"onUpdate:modelValue":e[1]||(e[1]=s=>b.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:W},null,544),[[kt,b.value.enabled]]),e[30]||(e[30]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-300 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full dark:bg-gray-600"},null,-1))])]),t("div",Gt,[e[32]||(e[32]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"最大额度",-1)),p(t("input",{"onUpdate:modelValue":e[2]||(e[2]=s=>b.value.maxTotalCostLimit=s),class:"w-24 rounded border border-gray-300 bg-white px-2 py-1 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:!b.value.enabled,min:"0",type:"number",onChange:W},null,40,Ht),[[C,b.value.maxTotalCostLimit,void 0,{number:!0}]]),e[33]||(e[33]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"$",-1))]),t("div",Jt,[e[34]||(e[34]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"最大有效期",-1)),p(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>b.value.maxExpiryDays=s),class:"w-20 rounded border border-gray-300 bg-white px-2 py-1 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:!b.value.enabled,min:"0",type:"number",onChange:W},null,40,te),[[C,b.value.maxExpiryDays,void 0,{number:!0}]]),e[35]||(e[35]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"天",-1))])])]),t("div",ee,[t("nav",se,[(a(),o(f,null,M(rt,s=>t("button",{key:s.id,class:L(["whitespace-nowrap border-b-2 px-1 py-2 text-sm font-medium",R.value===s.id?"border-blue-500 text-blue-600":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300"]),onClick:u=>R.value=s.id},l(s.name),11,ae)),64))])])]),O.value?(a(),o("div",re,e[36]||(e[36]=[t("i",{class:"fas fa-spinner fa-spin mr-2 text-blue-500"},null,-1),t("span",{class:"text-gray-500 dark:text-gray-400"},"加载中...",-1)]))):R.value==="cards"?(a(),o("div",oe,[i.value.length>0?(a(),o("div",le,[t("span",de," 已选择 "+l(i.value.length)+" 张卡片 ",1),t("button",{class:"rounded-lg bg-red-500 px-3 py-1.5 text-sm font-medium text-white hover:bg-red-600",onClick:bt},e[37]||(e[37]=[t("i",{class:"fas fa-trash mr-1"},null,-1),v(" 批量删除 ",-1)])),t("button",{class:"rounded-lg bg-gray-200 px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-300 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",onClick:e[4]||(e[4]=s=>i.value=[])}," 取消选择 ")])):d("",!0),t("table",ne,[t("thead",ie,[t("tr",null,[t("th",ue,[t("input",{checked:G.value,class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",indeterminate:ot.value,type:"checkbox",onChange:lt},null,40,xe)]),e[38]||(e[38]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 卡号 ",-1)),e[39]||(e[39]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 类型 ",-1)),e[40]||(e[40]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 额度/时间 ",-1)),e[41]||(e[41]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 状态 ",-1)),e[42]||(e[42]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 核销用户 ",-1)),e[43]||(e[43]=t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 创建时间 ",-1)),e[44]||(e[44]=t("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ",-1))])]),t("tbody",ge,[(a(!0),o(f,null,M(I.value,s=>(a(),o("tr",{key:s.id,class:L(["hover:bg-gray-50 dark:hover:bg-gray-700/50",i.value.includes(s.id)?"bg-blue-50 dark:bg-blue-900/10":""])},[t("td",ye,[s.status==="unused"?(a(),o("input",{key:0,checked:i.value.includes(s.id),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:u=>dt(s.id)},null,40,pe)):d("",!0)]),t("td",be,[t("code",{class:"cursor-pointer rounded bg-gray-100 px-2 py-1 font-mono text-xs hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"点击复制",onClick:u=>U(N)(s.code)},l(s.code),9,me)]),t("td",ce,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.type==="quota"?"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-300":s.type==="time"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300"])},l(s.type==="quota"?"额度卡":s.type==="time"?"时间卡":"组合卡"),3)]),t("td",ve,[s.type==="quota"||s.type==="combo"?(a(),o("span",fe,"$"+l(s.quotaAmount),1)):d("",!0),s.type==="combo"?(a(),o("span",ke," + ")):d("",!0),s.type==="time"||s.type==="combo"?(a(),o("span",he,l(s.timeAmount)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)):d("",!0)]),t("td",we,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.status==="unused"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":s.status==="redeemed"?"bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},l(s.status==="unused"?"未使用":s.status==="redeemed"?"已核销":"已撤销"),3)]),t("td",Ce,l(s.redeemedByUsername||"-"),1),t("td",_e,l(U(st)(s.createdAt)),1),t("td",Ae,[s.status==="unused"?(a(),o("button",{key:0,class:"text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300",title:"删除",onClick:u=>pt(s)},e[45]||(e[45]=[t("i",{class:"fas fa-trash"},null,-1)]),8,$e)):d("",!0)])],2))),128)),I.value.length===0?(a(),o("tr",Ue,e[46]||(e[46]=[t("td",{class:"px-4 py-8 text-center text-sm text-gray-500 dark:text-gray-400",colspan:"8"}," 暂无卡片数据 ",-1)]))):d("",!0)])]),Q.value>0?(a(),o("div",qe,[t("div",je,[t("span",Te," 共 "+l(Q.value)+" 条记录 ",1),t("div",Ve,[e[47]||(e[47]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"每页",-1)),p(t("select",{"onUpdate:modelValue":e[5]||(e[5]=s=>V.value=s),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-sm text-gray-700 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300",onChange:ut},[(a(),o(f,null,M(at,s=>t("option",{key:s,value:s},l(s),9,Me)),64))],544),[[Y,V.value]]),e[48]||(e[48]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"条",-1))])]),t("div",Le,[t("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:c.value===1,onClick:e[6]||(e[6]=s=>tt(c.value-1))},e[49]||(e[49]=[t("i",{class:"fas fa-chevron-left"},null,-1)]),8,Se),t("span",De,l(c.value)+" / "+l(J.value),1),t("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",disabled:c.value>=J.value,onClick:e[7]||(e[7]=s=>tt(c.value+1))},e[50]||(e[50]=[t("i",{class:"fas fa-chevron-right"},null,-1)]),8,Pe)])])):d("",!0)])):R.value==="redemptions"?(a(),o("div",Re,[t("table",Qe,[e[53]||(e[53]=t("thead",{class:"bg-gray-50 dark:bg-gray-700/50"},[t("tr",null,[t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 卡号 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 用户 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," API Key "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 增加额度 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 状态 "),t("th",{class:"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 核销时间 "),t("th",{class:"px-4 py-3 text-right text-xs font-medium uppercase tracking-wider text-gray-500 dark:text-gray-300"}," 操作 ")])],-1)),t("tbody",Ie,[(a(!0),o(f,null,M(F.value,s=>(a(),o("tr",{key:s.id,class:"hover:bg-gray-50 dark:hover:bg-gray-700/50"},[t("td",ze,[t("code",{class:"cursor-pointer rounded bg-gray-100 px-2 py-1 font-mono text-xs hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"点击复制",onClick:u=>U(N)(s.cardCode)},l(s.cardCode),9,Be)]),t("td",Ke,[t("span",{class:"cursor-pointer text-sm text-gray-900 hover:text-blue-600 dark:text-white dark:hover:text-blue-400",title:"点击复制",onClick:u=>U(N)(s.username||s.userId)},l(s.username||s.userId),9,Ne)]),t("td",Oe,[t("span",{class:"cursor-pointer text-sm text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400",title:"点击复制",onClick:u=>U(N)(s.apiKeyName||s.apiKeyId)},l(s.apiKeyName||s.apiKeyId),9,Ee)]),t("td",Fe,[s.quotaAdded>0?(a(),o("span",We,"$"+l(s.quotaAdded),1)):d("",!0),s.quotaAdded>0&&s.timeAdded>0?(a(),o("span",Xe," + ")):d("",!0),s.timeAdded>0?(a(),o("span",Ye,l(s.timeAdded)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)):d("",!0)]),t("td",Ze,[t("span",{class:L(["inline-flex rounded-full px-2 py-1 text-xs font-medium",s.status==="active"?"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-300"])},l(s.status==="active"?"有效":"已撤销"),3)]),t("td",Ge,l(U(st)(s.timestamp)),1),t("td",He,[s.status==="active"?(a(),o("button",{key:0,class:"text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300",title:"撤销核销",onClick:u=>mt(s)},e[51]||(e[51]=[t("i",{class:"fas fa-undo"},null,-1)]),8,Je)):d("",!0)])]))),128)),F.value.length===0?(a(),o("tr",ts,e[52]||(e[52]=[t("td",{class:"px-4 py-8 text-center text-sm text-gray-500 dark:text-gray-400",colspan:"7"}," 暂无核销记录 ",-1)]))):d("",!0)])])])):d("",!0)]),(a(),X(Z,{to:"body"},[j.value?(a(),o("div",es,[t("div",ss,[t("div",as,[e[55]||(e[55]=t("div",{class:"flex items-center gap-3"},[t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-ticket-alt text-white"})]),t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建额度卡")],-1)),t("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:e[8]||(e[8]=s=>j.value=!1)},e[54]||(e[54]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("div",rs,[t("div",null,[e[57]||(e[57]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"卡片类型",-1)),p(t("select",{"onUpdate:modelValue":e[9]||(e[9]=s=>x.value.type=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[56]||(e[56]=[t("option",{value:"quota"},"额度卡",-1),t("option",{value:"time"},"时间卡",-1),t("option",{value:"combo"},"组合卡",-1)]),512),[[Y,x.value.type]])]),x.value.type==="quota"||x.value.type==="combo"?(a(),o("div",os,[e[58]||(e[58]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"额度数量 (美元)",-1)),p(t("input",{"onUpdate:modelValue":e[10]||(e[10]=s=>x.value.quotaAmount=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",min:"0",step:"0.1",type:"number"},null,512),[[C,x.value.quotaAmount,void 0,{number:!0}]])])):d("",!0),x.value.type==="time"||x.value.type==="combo"?(a(),o("div",ls,[e[60]||(e[60]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"时间数量",-1)),t("div",ds,[p(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>x.value.timeAmount=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",min:"1",type:"number"},null,512),[[C,x.value.timeAmount,void 0,{number:!0}]]),p(t("select",{"onUpdate:modelValue":e[12]||(e[12]=s=>x.value.timeUnit=s),class:"block rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[59]||(e[59]=[t("option",{value:"hours"},"小时",-1),t("option",{value:"days"},"天",-1),t("option",{value:"months"},"月",-1)]),512),[[Y,x.value.timeUnit]])])])):d("",!0),t("div",null,[e[61]||(e[61]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"批量生成数量",-1)),p(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>x.value.count=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"100",min:"1",type:"number"},null,512),[[C,x.value.count,void 0,{number:!0}]])]),t("div",null,[e[62]||(e[62]=t("label",{class:"mb-1 block text-sm font-medium text-gray-700 dark:text-gray-300"},"备注(可选)",-1)),p(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>x.value.note=s),class:"block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 text-sm shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"例如:新年促销卡",type:"text"},null,512),[[C,x.value.note]])])]),t("div",ns,[t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:e[15]||(e[15]=s=>j.value=!1)}," 取消 "),t("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-blue-600 hover:to-blue-700 disabled:opacity-50",disabled:q.value,type:"button",onClick:xt},[q.value?(a(),o("i",us)):d("",!0),v(" "+l(q.value?"创建中...":"创建"),1)],8,is)])])])):d("",!0)])),(a(),X(Z,{to:"body"},[E.value?(a(),o("div",xs,[t("div",gs,[t("div",ys,[t("div",ps,[e[64]||(e[64]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br from-green-500 to-green-600"},[t("i",{class:"fas fa-check text-white"})],-1)),t("div",null,[e[63]||(e[63]=t("h3",{class:"text-lg font-bold text-gray-900 dark:text-gray-100"},"创建成功",-1)),t("p",bs," 已创建 "+l(y.value.length)+" 张卡片 ",1)])]),t("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300",onClick:e[16]||(e[16]=s=>E.value=!1)},e[65]||(e[65]=[t("i",{class:"fas fa-times text-xl"},null,-1)]))]),t("div",ms,[(a(!0),o(f,null,M(y.value,(s,u)=>(a(),o("div",{key:s.id,class:"flex items-center justify-between border-b border-gray-200 py-2 last:border-0 dark:border-gray-600"},[t("div",cs,[t("span",vs,l(u+1)+".",1),t("code",fs,l(s.code),1)]),t("span",ks,[s.type==="quota"||s.type==="combo"?(a(),o(f,{key:0},[v(" $"+l(s.quotaAmount),1)],64)):d("",!0),s.type==="combo"?(a(),o(f,{key:1},[v(" + ")],64)):d("",!0),s.type==="time"||s.type==="combo"?(a(),o(f,{key:2},[v(l(s.timeAmount)+" "+l(s.timeUnit==="hours"?"小时":s.timeUnit==="days"?"天":"月"),1)],64)):d("",!0)])]))),128))]),e[68]||(e[68]=t("div",{class:"mb-4 rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/20"},[t("div",{class:"flex items-start gap-2"},[t("i",{class:"fas fa-exclamation-triangle mt-0.5 text-yellow-500"}),t("p",{class:"text-sm text-yellow-700 dark:text-yellow-300"}," 请立即下载或复制卡号,关闭后将无法再次查看完整卡号列表。 ")])],-1)),t("div",{class:"flex gap-3"},[t("button",{class:"flex-1 rounded-xl bg-gradient-to-r from-blue-500 to-blue-600 px-4 py-2.5 font-medium text-white shadow-sm transition-colors hover:from-blue-600 hover:to-blue-700",type:"button",onClick:gt},e[66]||(e[66]=[t("i",{class:"fas fa-download mr-2"},null,-1),v(" 下载 TXT ",-1)])),t("button",{class:"flex-1 rounded-xl bg-gray-100 px-4 py-2.5 font-medium text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:yt},e[67]||(e[67]=[t("i",{class:"fas fa-copy mr-2"},null,-1),v(" 复制全部 ",-1)]))])])])):d("",!0)])),(a(),X(Z,{to:"body"},[T.value?(a(),o("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",onClick:e[19]||(e[19]=ht(s=>T.value=!1,["self"]))},[t("div",hs,[e[70]||(e[70]=t("h3",{class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},"撤销核销",-1)),t("div",ws,[e[69]||(e[69]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 撤销原因(可选) ",-1)),p(t("input",{"onUpdate:modelValue":e[17]||(e[17]=s=>D.value=s),class:"w-full rounded-lg border border-gray-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white",placeholder:"请输入撤销原因",type:"text"},null,512),[[C,D.value]])]),t("div",Cs,[t("button",{class:"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",onClick:e[18]||(e[18]=s=>T.value=!1)}," 取消 "),t("button",{class:"rounded-lg bg-red-500 px-4 py-2 text-sm font-medium text-white hover:bg-red-600",onClick:ct}," 确认撤销 ")])])])):d("",!0)])),ft(wt,{"cancel-text":_.value.cancelText,"confirm-text":_.value.confirmText,message:_.value.message,show:S.value,title:_.value.title,type:_.value.type,onCancel:it,onConfirm:nt},null,8,["cancel-text","confirm-text","message","show","title","type"])]))}};export{Ts as default};
diff --git a/web/admin-spa/dist/assets/RecordDetailModal-CIaCpUK_.js b/web/admin-spa/dist/assets/RecordDetailModal-CIaCpUK_.js
deleted file mode 100644
index d3144541..00000000
--- a/web/admin-spa/dist/assets/RecordDetailModal-CIaCpUK_.js
+++ /dev/null
@@ -1 +0,0 @@
-import{b as C,e as R}from"./element-plus-BUfCkBQO.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as F}from"./index-B3t2NHq9.js";import{c as h,I as N,y as D,J as y,z as t,P as a,u as l,R as M,O as $}from"./vue-vendor-R8HMg95E.js";function i(s){if(s==null)return"0";const d=Math.abs(s);return d>=1e9?(s/1e9).toFixed(2)+"B":d>=1e6?(s/1e6).toFixed(2)+"M":d>=1e3?(s/1e3).toFixed(1)+"K":s.toLocaleString()}const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},S={class:"flex items-center justify-between"},z={class:"font-medium"},J={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"flex items-center justify-between"},P={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},gt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},yt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(s,{emit:d}){const x=s,j=d,m=()=>j("close"),T=h(()=>{var o;return(o=x.record)!=null&&o.timestamp?B(x.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=h(()=>{var c;const o=((c=x.record)==null?void 0:c.costBreakdown)||{},e=g=>{const r=typeof g=="number"?g:0;return r>=1?`$${r.toFixed(2)}`:r>=.001?`$${r.toFixed(4)}`:`$${r.toFixed(6)}`};return{input:e(o.input),output:e(o.output),cacheCreate:e(o.cacheCreate),cacheRead:e(o.cacheRead),total:e(o.total)}});return(o,e)=>{const c=C,g=R;return D(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":s.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:y(()=>{var r;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:y(()=>[t("div",pt,[M(c,{type:"primary",onClick:m},{default:y(()=>e[19]||(e[19]=[$("关闭",-1)])),_:1,__:[19]})])]),default:y(()=>{var r,u,f,b,p,k,_,v,w;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",S,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",z,a(T.value),1)]),t("li",J,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",K,a(((r=s.record)==null?void 0:r.model)||"未知模型"),1)]),t("li",L,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",P,a(((u=s.record)==null?void 0:u.accountName)||"未知账户"),1)]),t("li",q,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",A,a(((f=s.record)==null?void 0:f.accountTypeName)||"未知渠道"),1)])])]),t("div",G,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,a(l(i)((b=s.record)==null?void 0:b.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,a(l(i)((p=s.record)==null?void 0:p.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,a(l(i)((k=s.record)==null?void 0:k.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,a(l(i)((_=s.record)==null?void 0:_.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,a(l(i)((v=s.record)==null?void 0:v.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,a(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",gt,a(n.value.output),1)]),t("div",yt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,a(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,a(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,a(((w=s.record)==null?void 0:w.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=F(kt,[["__scopeId","data-v-61b5b1eb"]]);export{jt as R,i as f};
diff --git a/web/admin-spa/dist/assets/RecordDetailModal-CZv4ajwT.css b/web/admin-spa/dist/assets/RecordDetailModal-CZv4ajwT.css
new file mode 100644
index 00000000..c2f48b67
--- /dev/null
+++ b/web/admin-spa/dist/assets/RecordDetailModal-CZv4ajwT.css
@@ -0,0 +1 @@
+.record-detail-modal[data-v-8a7345f4] .el-dialog__header{margin:0;padding:16px 16px 0}.record-detail-modal[data-v-8a7345f4] .el-dialog__body{padding:12px 16px 4px}.record-detail-modal[data-v-8a7345f4] .el-dialog__footer{padding:8px 16px 16px}
diff --git a/web/admin-spa/dist/assets/RecordDetailModal-iWzEw88d.js b/web/admin-spa/dist/assets/RecordDetailModal-iWzEw88d.js
new file mode 100644
index 00000000..0e24bcd4
--- /dev/null
+++ b/web/admin-spa/dist/assets/RecordDetailModal-iWzEw88d.js
@@ -0,0 +1 @@
+import{b as T,e as R}from"./element-plus-BSjV1f9S.js";import{b as B}from"./vendor-Dr8jvgFu.js";import{_ as D,f as l}from"./index-BahP9Xx9.js";import{c as w,I as N,y as $,J as x,z as t,P as s,u as i,R as F,O as M}from"./vue-vendor-DV7DYXbz.js";const V={class:"flex items-center justify-between"},Y={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},E={class:"space-y-4"},H={class:"grid gap-3 md:grid-cols-2"},I={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},O={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},z={class:"flex items-center justify-between"},J={class:"font-medium"},P={class:"flex items-center justify-between"},S={class:"font-medium"},q={class:"flex items-center justify-between"},A={class:"font-medium"},G={class:"flex items-center justify-between"},K={class:"font-medium"},L={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-gray-900"},Q={class:"space-y-2 text-sm text-gray-700 dark:text-gray-300"},U={class:"flex items-center justify-between"},W={class:"font-semibold text-blue-600 dark:text-blue-400"},X={class:"flex items-center justify-between"},Z={class:"font-semibold text-green-600 dark:text-green-400"},tt={class:"flex items-center justify-between"},et={class:"font-semibold text-purple-600 dark:text-purple-400"},st={class:"flex items-center justify-between"},at={class:"font-semibold text-orange-600 dark:text-orange-400"},rt={class:"flex items-center justify-between"},ot={class:"font-semibold text-gray-900 dark:text-gray-100"},dt={class:"rounded-lg border border-gray-200 bg-white p-4 dark:border-gray-800 dark:bg-gray-900"},nt={class:"grid gap-3 sm:grid-cols-2"},lt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},it={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ct={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},yt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},gt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},xt={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},mt={class:"flex items-center justify-between rounded-md bg-gray-50 px-3 py-2 dark:bg-gray-800"},ut={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},ft={class:"mt-4 flex items-center justify-between rounded-md border border-gray-200 bg-gray-50 px-4 py-3 dark:border-gray-800 dark:bg-gray-800"},bt={class:"text-base font-bold text-yellow-600 dark:text-yellow-400"},pt={class:"flex justify-end"},kt={__name:"RecordDetailModal",props:{show:{type:Boolean,default:!1},record:{type:Object,default:()=>({})}},emits:["close"],setup(a,{emit:h}){const c=a,j=h,m=()=>j("close"),C=w(()=>{var r;return(r=c.record)!=null&&r.timestamp?B(c.record.timestamp).format("YYYY-MM-DD HH:mm:ss"):"未知时间"}),n=w(()=>{var y,g;const r=((y=c.record)==null?void 0:y.realCostBreakdown)||((g=c.record)==null?void 0:g.costBreakdown)||{},e=o=>{const d=typeof o=="number"?o:0;return d>=1?`$${d.toFixed(2)}`:d>=.001?`$${d.toFixed(4)}`:`$${d.toFixed(6)}`};return{input:e(r.input),output:e(r.output),cacheCreate:e(r.cacheCreate),cacheRead:e(r.cacheRead),total:e(r.total)}});return(r,e)=>{const y=T,g=R;return $(),N(g,{"append-to-body":!0,class:"record-detail-modal","close-on-click-modal":!1,"destroy-on-close":!0,"model-value":a.show,"show-close":!1,top:"10vh",width:"720px",onClose:m},{header:x(()=>{var o;return[t("div",V,[t("div",null,[e[0]||(e[0]=t("p",{class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"}," 请求详情 ",-1)),t("p",Y,s(((o=a.record)==null?void 0:o.model)||"未知模型"),1)]),t("button",{"aria-label":"关闭",class:"rounded-full p-2 text-gray-500 transition hover:bg-gray-100 hover:text-gray-700 dark:text-gray-300 dark:hover:bg-gray-800 dark:hover:text-gray-100",onClick:m},e[1]||(e[1]=[t("i",{class:"fas fa-times"},null,-1)]))])]}),footer:x(()=>[t("div",pt,[F(y,{type:"primary",onClick:m},{default:x(()=>e[19]||(e[19]=[M("关闭",-1)])),_:1,__:[19]})])]),default:x(()=>{var o,d,u,f,b,p,k,_,v;return[t("div",E,[t("div",H,[t("div",I,[e[6]||(e[6]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"基本信息",-1)),t("ul",O,[t("li",z,[e[2]||(e[2]=t("span",{class:"text-gray-500 dark:text-gray-400"},"时间",-1)),t("span",J,s(C.value),1)]),t("li",P,[e[3]||(e[3]=t("span",{class:"text-gray-500 dark:text-gray-400"},"模型",-1)),t("span",S,s(((o=a.record)==null?void 0:o.model)||"未知模型"),1)]),t("li",q,[e[4]||(e[4]=t("span",{class:"text-gray-500 dark:text-gray-400"},"账户",-1)),t("span",A,s(((d=a.record)==null?void 0:d.accountName)||"未知账户"),1)]),t("li",G,[e[5]||(e[5]=t("span",{class:"text-gray-500 dark:text-gray-400"},"渠道",-1)),t("span",K,s(((u=a.record)==null?void 0:u.accountTypeName)||"未知渠道"),1)])])]),t("div",L,[e[12]||(e[12]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"Token 使用",-1)),t("ul",Q,[t("li",U,[e[7]||(e[7]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输入 Token",-1)),t("span",W,s(i(l)((f=a.record)==null?void 0:f.inputTokens)),1)]),t("li",X,[e[8]||(e[8]=t("span",{class:"text-gray-500 dark:text-gray-400"},"输出 Token",-1)),t("span",Z,s(i(l)((b=a.record)==null?void 0:b.outputTokens)),1)]),t("li",tt,[e[9]||(e[9]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",et,s(i(l)((p=a.record)==null?void 0:p.cacheCreateTokens)),1)]),t("li",st,[e[10]||(e[10]=t("span",{class:"text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",at,s(i(l)((k=a.record)==null?void 0:k.cacheReadTokens)),1)]),t("li",rt,[e[11]||(e[11]=t("span",{class:"text-gray-500 dark:text-gray-400"},"总计",-1)),t("span",ot,s(i(l)((_=a.record)==null?void 0:_.totalTokens)),1)])])])]),t("div",dt,[e[18]||(e[18]=t("h4",{class:"mb-3 text-sm font-semibold text-gray-800 dark:text-gray-200"},"费用详情",-1)),t("div",nt,[t("div",lt,[e[13]||(e[13]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输入费用",-1)),t("span",it,s(n.value.input),1)]),t("div",ct,[e[14]||(e[14]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"输出费用",-1)),t("span",yt,s(n.value.output),1)]),t("div",gt,[e[15]||(e[15]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存创建",-1)),t("span",xt,s(n.value.cacheCreate),1)]),t("div",mt,[e[16]||(e[16]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"缓存读取",-1)),t("span",ut,s(n.value.cacheRead),1)])]),t("div",ft,[e[17]||(e[17]=t("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-200"},"总费用",-1)),t("div",bt,s(((v=a.record)==null?void 0:v.costFormatted)||n.value.total),1)])])])]}),_:1},8,["model-value"])}}},jt=D(kt,[["__scopeId","data-v-8a7345f4"]]);export{jt as R};
diff --git a/web/admin-spa/dist/assets/SettingsView-BSo4LhAq.js b/web/admin-spa/dist/assets/SettingsView-BSo4LhAq.js
new file mode 100644
index 00000000..c2a4993e
--- /dev/null
+++ b/web/admin-spa/dist/assets/SettingsView-BSo4LhAq.js
@@ -0,0 +1,3 @@
+import{aP as $e,r as k,aY as Ge,c as Ce,o as Te,q as He,Z as Ye,x as o,z as t,L as x,C as E,O as l,u as g,K as d,S as X,aq as p,al as Q,P as v,aT as A,Q as Z,ac as le,R as Ue,aV as _,J as Je,T as Xe,Y as Ze,y as n}from"./vue-vendor-DV7DYXbz.js";import{b1 as _e,b2 as et,_ as tt,s as f,b3 as at,b4 as rt,b5 as st,b6 as lt,b7 as ot,b8 as nt,b9 as Ae,ba as dt,bb as it,bc as ut,bd as gt,be as ft}from"./index-BahP9Xx9.js";import{C as ct}from"./ConfirmModal-C2rCOkXI.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const bt=$e("settings",()=>{const M=k({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,apiStatsNotice:{enabled:!1,title:"",content:""},updatedAt:null}),R=k(!1),W=k(!1),I=async()=>{R.value=!0;const m=await _e();return m.success&&(M.value={...M.value,...m.data},w()),R.value=!1,m},b=async m=>{W.value=!0;const h=await et(m);return h.success&&(M.value={...M.value,...h.data},w()),W.value=!1,h},ee=async()=>{const m={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,apiStatsNotice:{enabled:!1,title:"",content:""},updatedAt:null};return M.value={...m},await b(m)},w=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const m=document.querySelector('link[rel="icon"]')||document.createElement("link");m.rel="icon",m.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(m)}};return{oemSettings:M,loading:R,saving:W,loadOemSettings:I,saveOemSettings:b,resetOemSettings:ee,applyOemSettings:w,formatDateTime:m=>m?new Date(m).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:m=>{const h=[];return m.size>350*1024&&h.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(m.type)||h.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:h.length===0,errors:h}},fileToBase64:m=>new Promise((h,K)=>{const F=new FileReader;F.onload=te=>h(te.target.result),F.onerror=K,F.readAsDataURL(m)})}}),xt={class:"settings-container"},pt={class:"card p-4 sm:p-6"},yt={class:"mb-6"},vt={class:"flex space-x-8"},mt={key:0,class:"py-12 text-center"},kt={key:1},wt={class:"table-container hidden sm:block"},ht={class:"min-w-full"},St={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ct={class:"table-row"},Tt={class:"px-6 py-4"},Ut={class:"table-row"},At={class:"px-6 py-4"},Mt={class:"space-y-3"},It={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},Bt=["src"],Et={class:"table-row"},Rt={class:"px-6 py-4"},Vt={class:"flex items-center"},Dt={class:"inline-flex cursor-pointer items-center"},Qt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},qt={class:"border-b border-gray-100 dark:border-gray-700"},Pt={class:"px-6 py-4"},jt={class:"flex items-center"},Nt={class:"inline-flex cursor-pointer items-center"},Lt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ot={key:0,class:"mt-3 space-y-3"},Wt={class:"px-6 py-6",colspan:"2"},zt={class:"flex items-center justify-between"},Kt={class:"flex gap-3"},Ft=["disabled"],$t={key:0,class:"loading-spinner mr-2"},Gt={key:1,class:"fas fa-save mr-2"},Ht=["disabled"],Yt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Jt={class:"space-y-4 sm:hidden"},Xt={class:"glass-card p-4"},Zt={class:"glass-card p-4"},_t={class:"space-y-3"},ea={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ta=["src"],aa={class:"glass-card p-4"},ra={class:"space-y-2"},sa={class:"inline-flex cursor-pointer items-center"},la={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},oa={class:"glass-card p-4"},na={class:"flex flex-col gap-3"},da=["disabled"],ia={key:0,class:"loading-spinner mr-2"},ua={key:1,class:"fas fa-save mr-2"},ga=["disabled"],fa={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},ca={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ba={class:"flex items-center justify-between"},xa={class:"relative inline-flex cursor-pointer items-center"},pa={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ya={class:"space-y-3"},va={class:"font-medium text-gray-700 dark:text-gray-300"},ma={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},ka={class:"relative inline-flex cursor-pointer items-center"},wa=["onUpdate:modelValue"],ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Sa={class:"mb-4 flex items-center justify-between"},Ca={key:0,class:"space-y-4"},Ta={class:"flex items-start justify-between"},Ua={class:"flex-1"},Aa={class:"flex items-center"},Ma={class:"font-semibold text-gray-800 dark:text-gray-200"},Ia={class:"text-sm text-gray-500 dark:text-gray-400"},Ba={class:"mt-3 space-y-1 text-sm"},Ea={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Ra={class:"truncate"},Va={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},Da={class:"truncate"},Qa={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},qa={class:"truncate"},Pa={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},ja={class:"truncate"},Na={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},La={class:"truncate"},Oa={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},Wa={class:"truncate"},za={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},Ka={class:"ml-4 flex items-center space-x-2"},Fa={class:"relative inline-flex cursor-pointer items-center"},$a=["checked","onChange"],Ga=["onClick"],Ha=["onClick"],Ya=["onClick"],Ja={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},Xa={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Za={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},_a={key:0,class:"py-12 text-center"},er={key:1},tr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ar={class:"flex items-center justify-between"},rr={class:"relative inline-flex cursor-pointer items-center"},sr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},lr={class:"flex items-center justify-between"},or={class:"relative inline-flex cursor-pointer items-center"},nr={key:0,class:"mt-6 space-y-4"},dr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},ir={class:"flex items-center justify-between"},ur={class:"relative inline-flex cursor-pointer items-center"},gr={key:0,class:"mt-6 space-y-4"},fr={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},cr={class:"flex items-center justify-between"},br={class:"relative inline-flex cursor-pointer items-center"},xr={key:0,class:"mt-6 space-y-4"},pr={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},yr={key:0,class:"ml-2"},vr={key:0,class:"py-12 text-center"},mr={key:1},kr={class:"mb-6 rounded-lg bg-gradient-to-r from-blue-50 to-indigo-50 p-6 dark:from-blue-900/20 dark:to-indigo-900/20"},wr={class:"flex items-start"},hr={class:"mt-2 text-sm text-gray-600 dark:text-gray-400"},Sr={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Cr={class:"mb-4 flex items-center justify-between"},Tr=["disabled"],Ur={class:"space-y-4"},Ar={class:"flex items-center"},Mr={class:"font-medium text-gray-900 dark:text-gray-100"},Ir={class:"text-xs text-gray-500 dark:text-gray-400"},Br={key:0,class:"ml-2 rounded bg-blue-100 px-1.5 py-0.5 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300"},Er={class:"flex items-center gap-3"},Rr=["onUpdate:modelValue"],Vr={key:0,class:"mt-4 rounded-lg bg-gray-50 p-3 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},Dr={key:0,class:"ml-2"},Qr={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},qr={class:"flex items-center justify-between"},Pr={class:"flex items-center space-x-3"},jr={class:"text-xl font-semibold text-gray-900 dark:text-white"},Nr={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Lr={class:"p-6"},Or={class:"space-y-5"},Wr={class:"relative"},zr=["disabled"],Kr={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Fr={key:0},$r={class:"relative"},Gr={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Hr={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Yr={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},Jr={class:"text-sm text-blue-700 dark:text-blue-300"},Xr={key:1,class:"space-y-5"},Zr={key:2,class:"space-y-5"},_r={key:3,class:"space-y-5"},es={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},ts={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},as={class:"space-y-4"},rs={class:"flex items-center justify-between"},ss={class:"flex cursor-pointer items-center",for:"enableSign"},ls={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},os={key:0},ns={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},ds={class:"flex items-center justify-between"},is={class:"flex space-x-3"},us=["disabled"],gs=["disabled"],fs=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const R=bt(),{loading:W,saving:I,oemSettings:b}=Ge(R),ee=k(),w=k("branding"),i=k(!0),T=k(new AbortController),z=k(!1),m=k({title:"",message:"",type:"primary",confirmText:"确认",cancelText:"取消"}),h=k(null),K=(a,e,r="确认",c="取消",y="primary")=>new Promise(O=>{m.value={title:a,message:e,confirmText:r,cancelText:c,type:y},h.value=O,z.value=!0}),F=()=>{var a;z.value=!1,(a=h.value)==null||a.call(h,!0)},te=()=>{var a;z.value=!1,(a=h.value)==null||a.call(h,!1)},P=Ce({get(){return!b.value.showAdminButton},set(a){b.value.showAdminButton=!a}}),V=k(!1),q=k(!1),j=k(!1),N=k(!1),ae={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},S=k({enabled:!1,platforms:[],notificationTypes:{...ae},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),re=k(!1),u=k({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),se=k(!1),H=k(!1),U=k({baseService:"claude",rates:{claude:1,codex:1,gemini:1,droid:1,bedrock:1,azure:1,ccr:1},updatedAt:null,updatedBy:null}),L=k(!1),B=k(null),s=k({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),oe=Te(w,async a=>{i.value&&(a==="webhook"?await $():a==="claude"?await Ie():a==="serviceRates"&&await de())}),ne=Te(()=>s.value.type,a=>{V.value=!1,q.value=!1,B.value||(a==="bark"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1):a==="smtp"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""):a==="telegram"?(s.value.url="",s.value.enableSign=!1,s.value.secret="",s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1,s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""):(s.value.deviceKey="",s.value.serverUrl="",s.value.level="",s.value.sound="",s.value.group="",s.value.host="",s.value.port=null,s.value.secure=!1,s.value.user="",s.value.pass="",s.value.from="",s.value.to="",s.value.timeout=null,s.value.ignoreTLS=!1,s.value.botToken="",s.value.chatId="",s.value.apiBaseUrl="",s.value.proxyUrl=""))}),Me=Ce(()=>s.value.type==="bark"?!!s.value.deviceKey:s.value.type==="telegram"?!!(s.value.botToken&&s.value.chatId):s.value.type==="smtp"?!!(s.value.host&&s.value.user&&s.value.pass&&s.value.to):!!s.value.url&&!V.value);He(async()=>{try{await R.loadOemSettings(),w.value==="webhook"&&await $(),w.value==="serviceRates"&&await de()}catch{f("加载设置失败","error")}}),Ye(()=>{i.value=!1,T.value&&T.value.abort(),oe&&oe(),ne&&ne(),L.value&&(L.value=!1,B.value=null)});const $=async()=>{if(i.value)try{const a=await at({signal:T.value.signal});if(a.success&&i.value){const e=a.config||{};S.value={...e,notificationTypes:{...ae,...e.notificationTypes||{}}}}}catch(a){if(a.name==="AbortError"||!i.value)return;f("获取webhook配置失败","error"),console.error(a)}},G=async()=>{if(i.value)try{const a={...S.value,notificationTypes:{...ae,...S.value.notificationTypes||{}}};(await st(a,{signal:T.value.signal})).success&&i.value&&(S.value=a,f("配置已保存","success"))}catch(a){if(a.name==="AbortError"||!i.value)return;f("保存配置失败","error"),console.error(a)}},Ie=async()=>{var a,e,r,c,y,O,ye,ve,me,ke,we,he,Se;if(i.value){re.value=!0;try{const C=await ft({signal:T.value.signal});C.success&&i.value&&(u.value={claudeCodeOnlyEnabled:((a=C.config)==null?void 0:a.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=C.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((r=C.config)==null?void 0:r.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((c=C.config)==null?void 0:c.sessionBindingTtlDays)??30,userMessageQueueEnabled:((y=C.config)==null?void 0:y.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((O=C.config)==null?void 0:O.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ye=C.config)==null?void 0:ye.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((ve=C.config)==null?void 0:ve.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((me=C.config)==null?void 0:me.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ke=C.config)==null?void 0:ke.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((we=C.config)==null?void 0:we.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((he=C.config)==null?void 0:he.updatedAt)||null,updatedBy:((Se=C.config)==null?void 0:Se.updatedBy)||null})}catch(C){if(C.name==="AbortError"||!i.value)return;f("获取 Claude 转发配置失败","error"),console.error(C)}finally{i.value&&(re.value=!1)}}},D=async()=>{var a,e;if(i.value)try{const r={claudeCodeOnlyEnabled:u.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:u.value.globalSessionBindingEnabled,sessionBindingErrorMessage:u.value.sessionBindingErrorMessage,sessionBindingTtlDays:u.value.sessionBindingTtlDays,userMessageQueueEnabled:u.value.userMessageQueueEnabled,userMessageQueueDelayMs:u.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:u.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:u.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:u.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:u.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:u.value.concurrentRequestQueueTimeoutMs},c=await ot(r,{signal:T.value.signal});c.success&&i.value&&(u.value={...u.value,updatedAt:((a=c.config)==null?void 0:a.updatedAt)||new Date().toISOString(),updatedBy:((e=c.config)==null?void 0:e.updatedBy)||null},f("Claude 转发配置已保存","success"))}catch(r){if(r.name==="AbortError"||!i.value)return;f("保存 Claude 转发配置失败","error"),console.error(r)}},de=async()=>{var a,e,r,c;if(i.value){se.value=!0;try{const y=await rt({signal:T.value.signal});y.success&&i.value&&(U.value={baseService:((a=y.data)==null?void 0:a.baseService)||"claude",rates:((e=y.data)==null?void 0:e.rates)||U.value.rates,updatedAt:(r=y.data)==null?void 0:r.updatedAt,updatedBy:(c=y.data)==null?void 0:c.updatedBy})}catch(y){if(y.name==="AbortError"||!i.value)return;console.error("加载服务倍率配置失败:",y)}finally{i.value&&(se.value=!1)}}},Be=async()=>{var a,e;if(i.value){H.value=!0;try{const r=await nt({rates:U.value.rates,baseService:U.value.baseService},{signal:T.value.signal});r.success&&i.value&&(U.value.updatedAt=((a=r.data)==null?void 0:a.updatedAt)||new Date().toISOString(),U.value.updatedBy=(e=r.data)==null?void 0:e.updatedBy,f("服务倍率配置已保存","success"))}catch(r){if(r.name==="AbortError"||!i.value)return;f("保存服务倍率配置失败","error"),console.error(r)}finally{i.value&&(H.value=!1)}}},Ee=a=>({claude:"fas fa-robot",codex:"fas fa-code",gemini:"fas fa-gem",droid:"fas fa-android",bedrock:"fab fa-aws",azure:"fab fa-microsoft",ccr:"fas fa-server"})[a]||"fas fa-cog",Re=a=>({claude:"bg-gradient-to-br from-orange-500 to-amber-600",codex:"bg-gradient-to-br from-green-500 to-emerald-600",gemini:"bg-gradient-to-br from-blue-500 to-indigo-600",droid:"bg-gradient-to-br from-green-600 to-lime-600",bedrock:"bg-gradient-to-br from-yellow-500 to-orange-600",azure:"bg-gradient-to-br from-blue-600 to-cyan-600",ccr:"bg-gradient-to-br from-purple-500 to-pink-600"})[a]||"bg-gradient-to-br from-gray-500 to-gray-600",Ve=a=>({claude:"Claude",codex:"Codex (OpenAI)",gemini:"Gemini",droid:"Droid",bedrock:"AWS Bedrock",azure:"Azure OpenAI",ccr:"CCR"})[a]||a,De=()=>{if(["bark","smtp","telegram"].includes(s.value.type)){V.value=!1,q.value=!1;return}const a=s.value.url;if(!a){V.value=!1,q.value=!1;return}try{new URL(a),a.startsWith("http://")||a.startsWith("https://")?(V.value=!1,q.value=!0):(V.value=!0,q.value=!1)}catch{V.value=!0,q.value=!1}},ie=()=>{if(s.value.type==="bark"){if(!s.value.deviceKey)return f("请输入Bark设备密钥","error"),!1}else if(s.value.type==="telegram"){if(!s.value.botToken)return f("请输入 Telegram 机器人 Token","error"),!1;if(!s.value.chatId)return f("请输入 Telegram Chat ID","error"),!1;if(s.value.apiBaseUrl)try{const a=new URL(s.value.apiBaseUrl);if(!["http:","https:"].includes(a.protocol))return f("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return f("请输入有效的 Telegram API 基础地址","error"),!1}if(s.value.proxyUrl)try{const a=new URL(s.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(a.protocol))return f("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return f("请输入有效的 Telegram 代理地址","error"),!1}}else if(s.value.type==="smtp"){const a=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:r}of a)if(!s.value[e])return f(`请输入${r}`,"error"),!1}else{if(!s.value.url)return f("请输入Webhook URL","error"),!1;if(V.value)return f("请输入有效的Webhook URL","error"),!1}return!0},Qe=async()=>{if(i.value&&ie()){N.value=!0;try{let a;B.value?a=await dt(B.value.id,s.value,{signal:T.value.signal}):a=await it(s.value,{signal:T.value.signal}),a.success&&i.value&&(f(B.value?"平台已更新":"平台已添加","success"),await $(),Y())}catch(a){if(a.name==="AbortError"||!i.value)return;f(a.message||"操作失败","error"),console.error(a)}finally{i.value&&(N.value=!1)}}},qe=a=>{B.value=a,s.value={type:a.type||"wechat_work",name:a.name||"",url:a.url||"",enableSign:a.enableSign||!1,secret:a.secret||"",botToken:a.botToken||"",chatId:a.chatId||"",apiBaseUrl:a.apiBaseUrl||"",proxyUrl:a.proxyUrl||"",deviceKey:a.deviceKey||"",serverUrl:a.serverUrl||"",level:a.level||"",sound:a.sound||"",group:a.group||"",host:a.host||"",port:a.port??null,secure:a.secure||!1,user:a.user||"",pass:a.pass||"",from:a.from||"",to:Array.isArray(a.to)?a.to.join(", "):a.to||"",timeout:a.timeout??null,ignoreTLS:a.ignoreTLS||!1},L.value=!0},Pe=async a=>{if(i.value&&await K("删除平台","确定要删除这个平台吗?","删除","取消","danger"))try{(await gt(a,{signal:T.value.signal})).success&&i.value&&(f("平台已删除","success"),await $())}catch(e){if(e.name==="AbortError"||!i.value)return;f("删除失败","error"),console.error(e)}},je=async a=>{if(i.value)try{const e=await ut(a,{signal:T.value.signal});e.success&&i.value&&(f(e.message,"success"),await $())}catch(e){if(e.name==="AbortError"||!i.value)return;f("操作失败","error"),console.error(e)}},Ne=async a=>{if(i.value)try{const e={type:a.type,secret:a.secret,enableSign:a.enableSign};a.type==="bark"?(e.deviceKey=a.deviceKey,e.serverUrl=a.serverUrl,e.level=a.level,e.sound=a.sound,e.group=a.group):a.type==="smtp"?(e.host=a.host,e.port=a.port,e.secure=a.secure,e.user=a.user,e.pass=a.pass,e.from=a.from,e.to=a.to,e.ignoreTLS=a.ignoreTLS):a.type==="telegram"?(e.botToken=a.botToken,e.chatId=a.chatId,e.apiBaseUrl=a.apiBaseUrl,e.proxyUrl=a.proxyUrl):e.url=a.url,(await Ae(e,{signal:T.value.signal})).success&&i.value&&f("测试成功","success")}catch(e){if(e.name==="AbortError"||!i.value)return;f(e.error||e.message||"测试失败","error"),console.error(e)}},Le=async()=>{if(i.value&&ie()){j.value=!0;try{(await Ae(s.value,{signal:T.value.signal})).success&&i.value&&f("测试成功","success")}catch(a){if(a.name==="AbortError"||!i.value)return;f(a.error||a.message||"测试失败","error"),console.error(a)}finally{i.value&&(j.value=!1)}}},Oe=async()=>{var a,e,r,c;if(i.value)try{(await lt({signal:T.value.signal})).success&&i.value&&f("测试通知已发送","success")}catch(y){if(y.name==="AbortError"||!i.value)return;const O=((e=(a=y==null?void 0:y.response)==null?void 0:a.data)==null?void 0:e.message)||((c=(r=y==null?void 0:y.response)==null?void 0:r.data)==null?void 0:c.error)||(y==null?void 0:y.message)||"发送失败";f(O,"error"),console.error(y)}},Y=()=>{i.value&&(L.value=!1,setTimeout(()=>{i.value&&(B.value=null,s.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},V.value=!1,q.value=!1,j.value=!1,N.value=!1)},0))},ue=a=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[a]||a,We=a=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[a]||"fas fa-bell",ge=a=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[a]||"",ze=a=>a?a.length<=12?a:`${a.slice(0,6)}...${a.slice(-4)}`:"",Ke=a=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[a]||a,Fe=a=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[a]||"",fe=async()=>{try{const a={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton,apiStatsNotice:b.value.apiStatsNotice},e=await R.saveOemSettings(a);e&&e.success?f("OEM设置保存成功","success"):f((e==null?void 0:e.message)||"保存失败","error")}catch{f("保存OEM设置失败","error")}},ce=async()=>{if(await K("重置设置",`确定要重置为默认设置吗?
+
+这将清除所有自定义的网站名称和图标设置。`,"重置","取消","warning"))try{const a=await R.resetOemSettings();a&&a.success?f("已重置为默认设置","success"):f("重置失败","error")}catch{f("重置失败","error")}},be=async a=>{const e=a.target.files[0];if(!e)return;const r=R.validateIconFile(e);if(!r.isValid){r.errors.forEach(c=>f(c,"error"));return}try{const c=await R.fileToBase64(e);b.value.siteIconData=c}catch{f("文件读取失败","error")}a.target.value=""},xe=()=>{b.value.siteIcon="",b.value.siteIconData=""},pe=()=>{console.warn("Icon failed to load")},J=R.formatDateTime;return(a,e)=>(n(),o(Z,null,[t("div",xt,[t("div",pt,[e[145]||(e[145]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",yt,[t("nav",vt,[t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=r=>w.value="branding")},e[51]||(e[51]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=r=>w.value="webhook")},e[52]||(e[52]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=r=>w.value="claude")},e[53]||(e[53]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2),t("button",{class:E(["border-b-2 pb-2 text-sm font-medium transition-colors",w.value==="serviceRates"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[3]||(e[3]=r=>w.value="serviceRates")},e[54]||(e[54]=[t("i",{class:"fas fa-balance-scale mr-2"},null,-1),l(" 服务倍率 ",-1)]),2)])]),g(W)?(n(),o("div",mt,e[55]||(e[55]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(n(),o("div",kt,[d(t("div",null,[t("div",wt,[t("table",ht,[t("tbody",St,[t("tr",Ct,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Tt,[d(t("input",{"onUpdate:modelValue":e[4]||(e[4]=r=>g(b).siteName=r),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,g(b).siteName]]),e[56]||(e[56]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ut,[e[62]||(e[62]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",At,[t("div",Mt,[g(b).siteIconData||g(b).siteIcon?(n(),o("div",It,[t("img",{alt:"图标预览",class:"h-8 w-8",src:g(b).siteIconData||g(b).siteIcon,onError:pe},null,40,Bt),e[59]||(e[59]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:xe},e[58]||(e[58]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:ee,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:be},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[5]||(e[5]=r=>a.$refs.iconFileInput.click())},e[60]||(e[60]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[61]||(e[61]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",Et,[e[65]||(e[65]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",Rt,[t("div",Vt,[t("label",Dt,[d(t("input",{"onUpdate:modelValue":e[6]||(e[6]=r=>P.value=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,P.value]]),e[63]||(e[63]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Qt,v(P.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[64]||(e[64]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",qt,[e[69]||(e[69]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-amber-500 to-orange-600"},[t("i",{class:"fas fa-bell text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 统计页通知 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"API Stats")])])],-1)),t("td",Pt,[t("div",jt,[t("label",Nt,[d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=r=>g(b).apiStatsNotice.enabled=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,g(b).apiStatsNotice.enabled]]),e[66]||(e[66]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Lt,v(g(b).apiStatsNotice.enabled?"已启用":"已禁用"),1)])]),g(b).apiStatsNotice.enabled?(n(),o("div",Ot,[t("div",null,[e[67]||(e[67]=t("label",{class:"mb-1 block text-xs text-gray-500 dark:text-gray-400"}," 标题 ",-1)),d(t("input",{"onUpdate:modelValue":e[8]||(e[8]=r=>g(b).apiStatsNotice.title=r),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"通知标题",type:"text"},null,512),[[p,g(b).apiStatsNotice.title]])]),t("div",null,[e[68]||(e[68]=t("label",{class:"mb-1 block text-xs text-gray-500 dark:text-gray-400"}," 内容 ",-1)),d(t("textarea",{"onUpdate:modelValue":e[9]||(e[9]=r=>g(b).apiStatsNotice.content=r),class:"form-input w-full max-w-md resize-none dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"2000",placeholder:"通知内容(支持换行)",rows:"3"},null,512),[[p,g(b).apiStatsNotice.content]])])])):x("",!0)])]),t("tr",null,[t("td",Wt,[t("div",zt,[t("div",Kt,[t("button",{class:E(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":g(I)}]),disabled:g(I),onClick:fe},[g(I)?(n(),o("div",$t)):(n(),o("i",Gt)),l(" "+v(g(I)?"保存中...":"保存设置"),1)],10,Ft),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:g(I),onClick:ce},e[70]||(e[70]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,Ht)]),g(b).updatedAt?(n(),o("div",Yt,[e[71]||(e[71]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+v(g(J)(g(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",Jt,[t("div",Xt,[e[72]||(e[72]=A('',1)),d(t("input",{"onUpdate:modelValue":e[10]||(e[10]=r=>g(b).siteName=r),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,g(b).siteName]])]),t("div",Zt,[e[76]||(e[76]=A('',1)),t("div",_t,[g(b).siteIconData||g(b).siteIcon?(n(),o("div",ea,[t("img",{alt:"图标预览",class:"h-8 w-8",src:g(b).siteIconData||g(b).siteIcon,onError:pe},null,40,ta),e[73]||(e[73]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:xe}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:be},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[11]||(e[11]=r=>a.$refs.iconFileInputMobile.click())},e[74]||(e[74]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[75]||(e[75]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",aa,[e[79]||(e[79]=A('',1)),t("div",ra,[t("label",sa,[d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=r=>P.value=r),class:"peer sr-only",type:"checkbox"},null,512),[[Q,P.value]]),e[77]||(e[77]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",la,v(P.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[78]||(e[78]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",oa,[t("div",na,[t("button",{class:E(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":g(I)}]),disabled:g(I),onClick:fe},[g(I)?(n(),o("div",ia)):(n(),o("i",ua)),l(" "+v(g(I)?"保存中...":"保存设置"),1)],10,da),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:g(I),onClick:ce},e[80]||(e[80]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,ga),g(b).updatedAt?(n(),o("div",fa,[e[81]||(e[81]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+v(g(J)(g(b).updatedAt)),1)])):x("",!0)])])])],512),[[X,w.value==="branding"]]),d(t("div",null,[t("div",ca,[t("div",ba,[e[83]||(e[83]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",xa,[d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=r=>S.value.enabled=r),class:"peer sr-only",type:"checkbox",onChange:G},null,544),[[Q,S.value.enabled]]),e[82]||(e[82]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",pa,[e[85]||(e[85]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",ya,[(n(!0),o(Z,null,le(S.value.notificationTypes,(r,c)=>(n(),o("div",{key:c,class:"flex items-center justify-between"},[t("div",null,[t("span",va,v(Ke(c)),1),t("span",ma,v(Fe(c)),1)]),t("label",ka,[d(t("input",{"onUpdate:modelValue":y=>S.value.notificationTypes[c]=y,class:"peer sr-only",type:"checkbox",onChange:G},null,40,wa),[[Q,S.value.notificationTypes[c]]]),e[84]||(e[84]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",ha,[t("div",Sa,[e[87]||(e[87]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[14]||(e[14]=r=>L.value=!0)},e[86]||(e[86]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),S.value.platforms&&S.value.platforms.length>0?(n(),o("div",Ca,[(n(!0),o(Z,null,le(S.value.platforms,r=>(n(),o("div",{key:r.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",Ta,[t("div",Ua,[t("div",Aa,[t("i",{class:E(["mr-3 text-xl",We(r.type)])},null,2),t("div",null,[t("h3",Ma,v(r.name||ue(r.type)),1),t("p",Ia,v(ue(r.type)),1)])]),t("div",Ba,[r.type!=="smtp"&&r.type!=="telegram"?(n(),o("div",Ea,[e[88]||(e[88]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Ra,v(r.url),1)])):x("",!0),r.type==="telegram"?(n(),o("div",Va,[e[89]||(e[89]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",Da,"Chat ID: "+v(r.chatId||"未配置"),1)])):x("",!0),r.type==="telegram"&&r.botToken?(n(),o("div",Qa,[e[90]||(e[90]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",qa,"Token: "+v(ze(r.botToken)),1)])):x("",!0),r.type==="telegram"&&r.apiBaseUrl?(n(),o("div",Pa,[e[91]||(e[91]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",ja,"API: "+v(r.apiBaseUrl),1)])):x("",!0),r.type==="telegram"&&r.proxyUrl?(n(),o("div",Na,[e[92]||(e[92]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",La,"代理: "+v(r.proxyUrl),1)])):x("",!0),r.type==="smtp"&&r.to?(n(),o("div",Oa,[e[93]||(e[93]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",Wa,v(Array.isArray(r.to)?r.to.join(", "):r.to),1)])):x("",!0),r.enableSign?(n(),o("div",za,e[94]||(e[94]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",Ka,[t("label",Fa,[t("input",{checked:r.enabled,class:"peer sr-only",type:"checkbox",onChange:c=>je(r.id)},null,40,$a),e[95]||(e[95]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:c=>Ne(r)},e[96]||(e[96]=[t("i",{class:"fas fa-vial"},null,-1)]),8,Ga),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:c=>qe(r)},e[97]||(e[97]=[t("i",{class:"fas fa-edit"},null,-1)]),8,Ha),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:c=>Pe(r.id)},e[98]||(e[98]=[t("i",{class:"fas fa-trash"},null,-1)]),8,Ya)])])]))),128))])):(n(),o("div",Ja,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",Xa,[e[102]||(e[102]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",Za,[t("div",null,[e[99]||(e[99]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),d(t("input",{"onUpdate:modelValue":e[15]||(e[15]=r=>S.value.retrySettings.maxRetries=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[100]||(e[100]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[16]||(e[16]=r=>S.value.retrySettings.retryDelay=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),d(t("input",{"onUpdate:modelValue":e[17]||(e[17]=r=>S.value.retrySettings.timeout=r),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:G},null,544),[[p,S.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Oe},e[103]||(e[103]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[X,w.value==="webhook"]]),d(t("div",null,[re.value?(n(),o("div",_a,e[104]||(e[104]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(n(),o("div",er,[t("div",tr,[t("div",ar,[e[106]||(e[106]=A('
仅允许 Claude Code 客户端
启用后,所有 /api/v1/messages 和 /claude/v1/messages 端点将强制验证 Claude Code CLI 客户端
',1)),t("label",rr,[d(t("input",{"onUpdate:modelValue":e[18]||(e[18]=r=>u.value.claudeCodeOnlyEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.claudeCodeOnlyEnabled]]),e[105]||(e[105]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[107]||(e[107]=A(' 此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。
',1))]),t("div",sr,[t("div",lr,[e[109]||(e[109]=A('
强制会话绑定
启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性
',1)),t("label",or,[d(t("input",{"onUpdate:modelValue":e[19]||(e[19]=r=>u.value.globalSessionBindingEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.globalSessionBindingEnabled]]),e[108]||(e[108]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),u.value.globalSessionBindingEnabled?(n(),o("div",nr,[t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),d(t("input",{"onUpdate:modelValue":e[20]||(e[20]=r=>u.value.sessionBindingTtlDays=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,u.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[112]||(e[112]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),d(t("textarea",{"onUpdate:modelValue":e[21]||(e[21]=r=>u.value.sessionBindingErrorMessage=r),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,u.value.sessionBindingErrorMessage]]),e[113]||(e[113]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[114]||(e[114]=A('工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。
新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。
',1))]),t("div",dr,[t("div",ir,[e[116]||(e[116]=A('
用户消息串行队列
启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流
',1)),t("label",ur,[d(t("input",{"onUpdate:modelValue":e[22]||(e[22]=r=>u.value.userMessageQueueEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.userMessageQueueEnabled]]),e[115]||(e[115]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),u.value.userMessageQueueEnabled?(n(),o("div",gr,[t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[23]||(e[23]=r=>u.value.userMessageQueueDelayMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,u.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[24]||(e[24]=r=>u.value.userMessageQueueTimeoutMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,u.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[121]||(e[121]=A('工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。
',1))]),t("div",fr,[t("div",cr,[e[123]||(e[123]=A('
并发请求排队
当 API Key 并发请求超限时进入队列等待,而非直接拒绝
',1)),t("label",br,[d(t("input",{"onUpdate:modelValue":e[25]||(e[25]=r=>u.value.concurrentRequestQueueEnabled=r),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[Q,u.value.concurrentRequestQueueEnabled]]),e[122]||(e[122]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),u.value.concurrentRequestQueueEnabled?(n(),o("div",xr,[t("div",null,[e[124]||(e[124]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[26]||(e[26]=r=>u.value.concurrentRequestQueueMaxSize=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[125]||(e[125]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[126]||(e[126]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),d(t("input",{"onUpdate:modelValue":e[27]||(e[27]=r=>u.value.concurrentRequestQueueMaxSizeMultiplier=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[127]||(e[127]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[128]||(e[128]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),d(t("input",{"onUpdate:modelValue":e[28]||(e[28]=r=>u.value.concurrentRequestQueueTimeoutMs=r),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,u.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[129]||(e[129]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[130]||(e[130]=A('工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。
',1))]),u.value.updatedAt?(n(),o("div",pr,[e[133]||(e[133]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+v(g(J)(u.value.updatedAt))+" ",1),u.value.updatedBy?(n(),o("span",yr,[e[131]||(e[131]=l(" 由 ",-1)),t("strong",null,v(u.value.updatedBy),1),e[132]||(e[132]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[X,w.value==="claude"]]),d(t("div",null,[se.value?(n(),o("div",vr,e[134]||(e[134]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(n(),o("div",mr,[t("div",kr,[t("div",wr,[e[138]||(e[138]=t("div",{class:"mr-4 flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full bg-blue-500 text-white"},[t("i",{class:"fas fa-info"})],-1)),t("div",null,[e[137]||(e[137]=t("h3",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"}," 服务倍率说明 ",-1)),t("p",hr,[e[135]||(e[135]=l(" 服务倍率用于计算不同服务的计费费用。以 ",-1)),t("strong",null,v(U.value.baseService||"claude"),1),e[136]||(e[136]=l(" 为基准(倍率 1.0),其他服务按倍率换算。例如:Gemini 倍率 0.5 表示消耗 $1 只扣除 $0.5 额度。 ",-1))])])])]),t("div",Sr,[t("div",Cr,[e[140]||(e[140]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},[t("i",{class:"fas fa-sliders-h mr-2 text-blue-500"}),l(" 倍率配置 ")],-1)),t("button",{class:"rounded-lg bg-blue-500 px-4 py-2 text-sm font-medium text-white hover:bg-blue-600 disabled:opacity-50",disabled:H.value,onClick:Be},[e[139]||(e[139]=t("i",{class:"fas fa-save mr-2"},null,-1)),l(" "+v(H.value?"保存中...":"保存配置"),1)],8,Tr)]),t("div",Ur,[(n(!0),o(Z,null,le(U.value.rates,(r,c)=>(n(),o("div",{key:c,class:"flex items-center justify-between rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",Ar,[t("div",{class:E(["mr-3 flex h-10 w-10 items-center justify-center rounded-lg",Re(c)])},[t("i",{class:E(["text-white",Ee(c)])},null,2)],2),t("div",null,[t("div",Mr,v(Ve(c)),1),t("div",Ir,[l(v(c)+" ",1),c===U.value.baseService?(n(),o("span",Br," 基准服务 ")):x("",!0)])])]),t("div",Er,[d(t("input",{"onUpdate:modelValue":y=>U.value.rates[c]=y,class:"w-24 rounded-lg border border-gray-300 px-3 py-2 text-center text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"10",min:"0.1",step:"0.1",type:"number"},null,8,Rr),[[p,U.value.rates[c],void 0,{number:!0}]]),e[141]||(e[141]=t("span",{class:"text-sm text-gray-500 dark:text-gray-400"},"倍",-1))])]))),128))]),U.value.updatedAt?(n(),o("div",Vr,[e[144]||(e[144]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+v(g(J)(U.value.updatedAt))+" ",1),U.value.updatedBy?(n(),o("span",Dr,[e[142]||(e[142]=l(" 由 ",-1)),t("strong",null,v(U.value.updatedBy),1),e[143]||(e[143]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)])]))],512),[[X,w.value==="serviceRates"]])]))])]),L.value?(n(),o("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:Y},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[50]||(e[50]=Ze(()=>{},["stop"]))},[t("div",Qr,[t("div",qr,[t("div",Pr,[e[146]||(e[146]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",jr,v(B.value?"编辑":"添加")+"通知平台 ",1),t("p",Nr," 配置"+v(B.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:Y},e[147]||(e[147]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Lr,[t("div",Or,[t("div",null,[e[151]||(e[151]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",Wr,[d(t("select",{"onUpdate:modelValue":e[29]||(e[29]=r=>s.value.type=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:B.value},e[148]||(e[148]=[A('',9)]),8,zr),[[_,s.value.type]]),e[149]||(e[149]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),B.value?(n(),o("p",Kr,e[150]||(e[150]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[30]||(e[30]=r=>s.value.name=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,s.value.name]])]),s.value.type!=="bark"&&s.value.type!=="smtp"&&s.value.type!=="telegram"?(n(),o("div",Fr,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",$r,[d(t("input",{"onUpdate:modelValue":e[31]||(e[31]=r=>s.value.url=r),class:E(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":V.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":q.value}]),placeholder:"https://...",required:"",type:"url",onInput:De},null,34),[[p,s.value.url]]),q.value?(n(),o("div",Gr,e[153]||(e[153]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),V.value?(n(),o("div",Hr,e[154]||(e[154]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),ge(s.value.type)?(n(),o("div",Yr,[e[155]||(e[155]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",Jr,v(ge(s.value.type)),1)])):x("",!0)])):x("",!0),s.value.type==="telegram"?(n(),o("div",Xr,[t("div",null,[e[157]||(e[157]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[32]||(e[32]=r=>s.value.botToken=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,s.value.botToken]]),e[158]||(e[158]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[33]||(e[33]=r=>s.value.chatId=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,s.value.chatId]]),e[160]||(e[160]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[34]||(e[34]=r=>s.value.apiBaseUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,s.value.apiBaseUrl]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[35]||(e[35]=r=>s.value.proxyUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,s.value.proxyUrl]]),e[164]||(e[164]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[165]||(e[165]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),s.value.type==="bark"?(n(),o("div",Zr,[t("div",null,[e[166]||(e[166]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[36]||(e[36]=r=>s.value.deviceKey=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,s.value.deviceKey]]),e[167]||(e[167]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[168]||(e[168]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[37]||(e[37]=r=>s.value.serverUrl=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,s.value.serverUrl]])]),t("div",null,[e[170]||(e[170]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),d(t("select",{"onUpdate:modelValue":e[38]||(e[38]=r=>s.value.level=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[169]||(e[169]=[A('',5)]),512),[[_,s.value.level]])]),t("div",null,[e[172]||(e[172]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),d(t("select",{"onUpdate:modelValue":e[39]||(e[39]=r=>s.value.sound=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[171]||(e[171]=[A('',9)]),512),[[_,s.value.sound]])]),t("div",null,[e[173]||(e[173]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[40]||(e[40]=r=>s.value.group=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,s.value.group]])]),e[174]||(e[174]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),s.value.type==="smtp"?(n(),o("div",_r,[t("div",null,[e[175]||(e[175]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[41]||(e[41]=r=>s.value.host=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,s.value.host]])]),t("div",es,[t("div",null,[e[176]||(e[176]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),d(t("input",{"onUpdate:modelValue":e[42]||(e[42]=r=>s.value.port=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,s.value.port,void 0,{number:!0}]]),e[177]||(e[177]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[179]||(e[179]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),d(t("select",{"onUpdate:modelValue":e[43]||(e[43]=r=>s.value.secure=r),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[178]||(e[178]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[_,s.value.secure]])])]),t("div",null,[e[180]||(e[180]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[44]||(e[44]=r=>s.value.user=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,s.value.user]])]),t("div",null,[e[181]||(e[181]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[45]||(e[45]=r=>s.value.pass=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,s.value.pass]]),e[182]||(e[182]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[183]||(e[183]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),d(t("input",{"onUpdate:modelValue":e[46]||(e[46]=r=>s.value.from=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,s.value.from]])]),t("div",null,[e[184]||(e[184]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),d(t("input",{"onUpdate:modelValue":e[47]||(e[47]=r=>s.value.to=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,s.value.to]]),e[185]||(e[185]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),s.value.type==="dingtalk"||s.value.type==="feishu"?(n(),o("div",ts,[t("div",as,[t("div",rs,[t("label",ss,[d(t("input",{id:"enableSign","onUpdate:modelValue":e[48]||(e[48]=r=>s.value.enableSign=r),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[Q,s.value.enableSign]]),e[186]||(e[186]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),s.value.enableSign?(n(),o("span",ls," 已启用 ")):x("",!0)]),Ue(Xe,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:Je(()=>[s.value.enableSign?(n(),o("div",os,[e[187]||(e[187]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),d(t("input",{"onUpdate:modelValue":e[49]||(e[49]=r=>s.value.secret=r),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,s.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ns,[t("div",ds,[e[189]||(e[189]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",is,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:Y},e[188]||(e[188]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:j.value,onClick:Le},[t("i",{class:E(["mr-2 transition-transform",j.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+v(j.value?"测试中...":"测试连接"),1)],8,us),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!Me.value||N.value,onClick:Qe},[t("i",{class:E(["mr-2 transition-transform",N.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+v(N.value?"保存中...":B.value?"保存修改":"添加平台"),1)],8,gs)])])])]),Ue(ct,{"cancel-text":m.value.cancelText,"confirm-text":m.value.confirmText,message:m.value.message,show:z.value,title:m.value.title,type:m.value.type,onCancel:te,onConfirm:F},null,8,["cancel-text","confirm-text","message","show","title","type"])])):x("",!0)],64))}}),vs=tt(fs,[["__scopeId","data-v-9495fcfd"]]);export{vs as default};
diff --git a/web/admin-spa/dist/assets/SettingsView-Bzv2bCHm.js b/web/admin-spa/dist/assets/SettingsView-Bzv2bCHm.js
deleted file mode 100644
index 0f17bd92..00000000
--- a/web/admin-spa/dist/assets/SettingsView-Bzv2bCHm.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{aP as Ae,r as S,aX as De,c as be,o as xe,q as Ve,Z as Qe,x as d,z as t,L as x,C as R,O as l,u as f,K as o,S as J,aq as p,al as q,P as m,aT as U,Q as Y,ac as pe,aV as z,R as Re,J as qe,T as je,Y as Pe,y as i}from"./vue-vendor-R8HMg95E.js";import{c as I,_ as Le,s as g}from"./index-B3t2NHq9.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const Oe=Ae("settings",()=>{const M=S({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null}),A=S(!1),L=S(!1),B=async()=>{A.value=!0;try{const c=await I.get("/admin/oem-settings");return c&&c.success&&(M.value={...M.value,...c.data},T()),c}catch(c){throw console.error("Failed to load OEM settings:",c),c}finally{A.value=!1}},b=async c=>{L.value=!0;try{const y=await I.put("/admin/oem-settings",c);return y&&y.success&&(M.value={...M.value,...y.data},T()),y}catch(y){throw console.error("Failed to save OEM settings:",y),y}finally{L.value=!1}},$=async()=>{const c={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",showAdminButton:!0,updatedAt:null};return M.value={...c},await b(c)},T=()=>{if(M.value.siteName&&(document.title=`${M.value.siteName} - 管理后台`),M.value.siteIconData||M.value.siteIcon){const c=document.querySelector('link[rel="icon"]')||document.createElement("link");c.rel="icon",c.href=M.value.siteIconData||M.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(c)}};return{oemSettings:M,loading:A,saving:L,loadOemSettings:B,saveOemSettings:b,resetOemSettings:$,applyOemSettings:T,formatDateTime:c=>c?new Date(c).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:c=>{const y=[];return c.size>350*1024&&y.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(c.type)||y.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:y.length===0,errors:y}},fileToBase64:c=>new Promise((y,Q)=>{const V=new FileReader;V.onload=O=>y(O.target.result),V.onerror=Q,V.readAsDataURL(c)})}}),Fe={class:"settings-container"},Ne={class:"card p-4 sm:p-6"},Ke={class:"mb-6"},We={class:"flex space-x-8"},ze={key:0,class:"py-12 text-center"},$e={key:1},He={class:"table-container hidden sm:block"},Xe={class:"min-w-full"},Je={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Ye={class:"table-row"},Ge={class:"px-6 py-4"},Ze={class:"table-row"},_e={class:"px-6 py-4"},et={class:"space-y-3"},tt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},at=["src"],rt={class:"table-row"},st={class:"px-6 py-4"},lt={class:"flex items-center"},ot={class:"inline-flex cursor-pointer items-center"},nt={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},dt={class:"px-6 py-6",colspan:"2"},it={class:"flex items-center justify-between"},ut={class:"flex gap-3"},gt=["disabled"],ct={key:0,class:"loading-spinner mr-2"},ft={key:1,class:"fas fa-save mr-2"},bt=["disabled"],xt={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},pt={class:"space-y-4 sm:hidden"},yt={class:"glass-card p-4"},vt={class:"glass-card p-4"},mt={class:"space-y-3"},kt={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},ht=["src"],wt={class:"glass-card p-4"},St={class:"space-y-2"},Tt={class:"inline-flex cursor-pointer items-center"},Ct={class:"ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"},Ut={class:"glass-card p-4"},Mt={class:"flex flex-col gap-3"},It=["disabled"],Bt={key:0,class:"loading-spinner mr-2"},Et={key:1,class:"fas fa-save mr-2"},At=["disabled"],Dt={key:0,class:"text-center text-sm text-gray-500 dark:text-gray-400"},Vt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qt={class:"flex items-center justify-between"},Rt={class:"relative inline-flex cursor-pointer items-center"},qt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},jt={class:"space-y-3"},Pt={class:"font-medium text-gray-700 dark:text-gray-300"},Lt={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ot={class:"relative inline-flex cursor-pointer items-center"},Ft=["onUpdate:modelValue"],Nt={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Kt={class:"mb-4 flex items-center justify-between"},Wt={key:0,class:"space-y-4"},zt={class:"flex items-start justify-between"},$t={class:"flex-1"},Ht={class:"flex items-center"},Xt={class:"font-semibold text-gray-800 dark:text-gray-200"},Jt={class:"text-sm text-gray-500 dark:text-gray-400"},Yt={class:"mt-3 space-y-1 text-sm"},Gt={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},Zt={class:"truncate"},_t={key:1,class:"flex items-center text-gray-600 dark:text-gray-400"},ea={class:"truncate"},ta={key:2,class:"flex items-center text-gray-600 dark:text-gray-400"},aa={class:"truncate"},ra={key:3,class:"flex items-center text-gray-600 dark:text-gray-400"},sa={class:"truncate"},la={key:4,class:"flex items-center text-gray-600 dark:text-gray-400"},oa={class:"truncate"},na={key:5,class:"flex items-center text-gray-600 dark:text-gray-400"},da={class:"truncate"},ia={key:6,class:"flex items-center text-gray-600 dark:text-gray-400"},ua={class:"ml-4 flex items-center space-x-2"},ga={class:"relative inline-flex cursor-pointer items-center"},ca=["checked","onChange"],fa=["onClick"],ba=["onClick"],xa=["onClick"],pa={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},ya={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},va={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},ma={key:0,class:"py-12 text-center"},ka={key:1},ha={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},wa={class:"flex items-center justify-between"},Sa={class:"relative inline-flex cursor-pointer items-center"},Ta={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ca={class:"flex items-center justify-between"},Ua={class:"relative inline-flex cursor-pointer items-center"},Ma={key:0,class:"mt-6 space-y-4"},Ia={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ba={class:"flex items-center justify-between"},Ea={class:"relative inline-flex cursor-pointer items-center"},Aa={key:0,class:"mt-6 space-y-4"},Da={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Va={class:"flex items-center justify-between"},Qa={class:"relative inline-flex cursor-pointer items-center"},Ra={key:0,class:"mt-6 space-y-4"},qa={key:0,class:"rounded-lg bg-gray-50 p-4 text-sm text-gray-500 dark:bg-gray-700/50 dark:text-gray-400"},ja={key:0,class:"ml-2"},Pa={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},La={class:"flex items-center justify-between"},Oa={class:"flex items-center space-x-3"},Fa={class:"text-xl font-semibold text-gray-900 dark:text-white"},Na={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},Ka={class:"p-6"},Wa={class:"space-y-5"},za={class:"relative"},$a=["disabled"],Ha={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},Xa={key:0},Ja={class:"relative"},Ya={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Ga={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Za={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},_a={class:"text-sm text-blue-700 dark:text-blue-300"},er={key:1,class:"space-y-5"},tr={key:2,class:"space-y-5"},ar={key:3,class:"space-y-5"},rr={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},sr={key:4,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},lr={class:"space-y-4"},or={class:"flex items-center justify-between"},nr={class:"flex cursor-pointer items-center",for:"enableSign"},dr={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},ir={key:0},ur={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},gr={class:"flex items-center justify-between"},cr={class:"flex space-x-3"},fr=["disabled"],br=["disabled"],xr=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(M){const A=Oe(),{loading:L,saving:B,oemSettings:b}=De(A),$=S(),T=S("branding"),u=S(!0),C=S(new AbortController),j=be({get(){return!b.value.showAdminButton},set(r){b.value.showAdminButton=!r}}),c=S(!1),y=S(!1),Q=S(!1),V=S(!1),O={accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0,rateLimitRecovery:!0},k=S({enabled:!1,platforms:[],notificationTypes:{...O},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),H=S(!1),n=S({claudeCodeOnlyEnabled:!1,globalSessionBindingEnabled:!1,sessionBindingErrorMessage:"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:30,userMessageQueueEnabled:!1,userMessageQueueDelayMs:200,userMessageQueueTimeoutMs:5e3,concurrentRequestQueueEnabled:!1,concurrentRequestQueueMaxSize:3,concurrentRequestQueueMaxSizeMultiplier:0,concurrentRequestQueueTimeoutMs:1e4,updatedAt:null,updatedBy:null}),P=S(!1),E=S(null),a=S({type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1}),G=xe(T,async r=>{u.value&&(r==="webhook"?await F():r==="claude"&&await ve())}),Z=xe(()=>a.value.type,r=>{c.value=!1,y.value=!1,E.value||(r==="bark"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1):r==="smtp"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):r==="telegram"?(a.value.url="",a.value.enableSign=!1,a.value.secret="",a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""):(a.value.deviceKey="",a.value.serverUrl="",a.value.level="",a.value.sound="",a.value.group="",a.value.host="",a.value.port=null,a.value.secure=!1,a.value.user="",a.value.pass="",a.value.from="",a.value.to="",a.value.timeout=null,a.value.ignoreTLS=!1,a.value.botToken="",a.value.chatId="",a.value.apiBaseUrl="",a.value.proxyUrl=""))}),ye=be(()=>a.value.type==="bark"?!!a.value.deviceKey:a.value.type==="telegram"?!!(a.value.botToken&&a.value.chatId):a.value.type==="smtp"?!!(a.value.host&&a.value.user&&a.value.pass&&a.value.to):!!a.value.url&&!c.value);Ve(async()=>{try{await A.loadOemSettings(),T.value==="webhook"&&await F()}catch{g("加载设置失败","error")}}),Qe(()=>{u.value=!1,C.value&&C.value.abort(),G&&G(),Z&&Z(),P.value&&(P.value=!1,E.value=null)});const F=async()=>{if(u.value)try{const r=await I.get("/admin/webhook/config",{signal:C.value.signal});if(r.success&&u.value){const e=r.config||{};k.value={...e,notificationTypes:{...O,...e.notificationTypes||{}}}}}catch(r){if(r.name==="AbortError"||!u.value)return;g("获取webhook配置失败","error"),console.error(r)}},N=async()=>{if(u.value)try{const r={...k.value,notificationTypes:{...O,...k.value.notificationTypes||{}}};(await I.post("/admin/webhook/config",r,{signal:C.value.signal})).success&&u.value&&(k.value=r,g("配置已保存","success"))}catch(r){if(r.name==="AbortError"||!u.value)return;g("保存配置失败","error"),console.error(r)}},ve=async()=>{var r,e,s,v,h,W,ne,de,ie,ue,ge,ce,fe;if(u.value){H.value=!0;try{const w=await I.get("/admin/claude-relay-config",{signal:C.value.signal});w.success&&u.value&&(n.value={claudeCodeOnlyEnabled:((r=w.config)==null?void 0:r.claudeCodeOnlyEnabled)??!1,globalSessionBindingEnabled:((e=w.config)==null?void 0:e.globalSessionBindingEnabled)??!1,sessionBindingErrorMessage:((s=w.config)==null?void 0:s.sessionBindingErrorMessage)||"你的本地session已污染,请清理后使用。",sessionBindingTtlDays:((v=w.config)==null?void 0:v.sessionBindingTtlDays)??30,userMessageQueueEnabled:((h=w.config)==null?void 0:h.userMessageQueueEnabled)??!1,userMessageQueueDelayMs:((W=w.config)==null?void 0:W.userMessageQueueDelayMs)??200,userMessageQueueTimeoutMs:((ne=w.config)==null?void 0:ne.userMessageQueueTimeoutMs)??5e3,concurrentRequestQueueEnabled:((de=w.config)==null?void 0:de.concurrentRequestQueueEnabled)??!1,concurrentRequestQueueMaxSize:((ie=w.config)==null?void 0:ie.concurrentRequestQueueMaxSize)??3,concurrentRequestQueueMaxSizeMultiplier:((ue=w.config)==null?void 0:ue.concurrentRequestQueueMaxSizeMultiplier)??0,concurrentRequestQueueTimeoutMs:((ge=w.config)==null?void 0:ge.concurrentRequestQueueTimeoutMs)??1e4,updatedAt:((ce=w.config)==null?void 0:ce.updatedAt)||null,updatedBy:((fe=w.config)==null?void 0:fe.updatedBy)||null})}catch(w){if(w.name==="AbortError"||!u.value)return;g("获取 Claude 转发配置失败","error"),console.error(w)}finally{u.value&&(H.value=!1)}}},D=async()=>{var r,e;if(u.value)try{const s={claudeCodeOnlyEnabled:n.value.claudeCodeOnlyEnabled,globalSessionBindingEnabled:n.value.globalSessionBindingEnabled,sessionBindingErrorMessage:n.value.sessionBindingErrorMessage,sessionBindingTtlDays:n.value.sessionBindingTtlDays,userMessageQueueEnabled:n.value.userMessageQueueEnabled,userMessageQueueDelayMs:n.value.userMessageQueueDelayMs,userMessageQueueTimeoutMs:n.value.userMessageQueueTimeoutMs,concurrentRequestQueueEnabled:n.value.concurrentRequestQueueEnabled,concurrentRequestQueueMaxSize:n.value.concurrentRequestQueueMaxSize,concurrentRequestQueueMaxSizeMultiplier:n.value.concurrentRequestQueueMaxSizeMultiplier,concurrentRequestQueueTimeoutMs:n.value.concurrentRequestQueueTimeoutMs},v=await I.put("/admin/claude-relay-config",s,{signal:C.value.signal});v.success&&u.value&&(n.value={...n.value,updatedAt:((r=v.config)==null?void 0:r.updatedAt)||new Date().toISOString(),updatedBy:((e=v.config)==null?void 0:e.updatedBy)||null},g("Claude 转发配置已保存","success"))}catch(s){if(s.name==="AbortError"||!u.value)return;g("保存 Claude 转发配置失败","error"),console.error(s)}},me=()=>{if(["bark","smtp","telegram"].includes(a.value.type)){c.value=!1,y.value=!1;return}const r=a.value.url;if(!r){c.value=!1,y.value=!1;return}try{new URL(r),r.startsWith("http://")||r.startsWith("https://")?(c.value=!1,y.value=!0):(c.value=!0,y.value=!1)}catch{c.value=!0,y.value=!1}},_=()=>{if(a.value.type==="bark"){if(!a.value.deviceKey)return g("请输入Bark设备密钥","error"),!1}else if(a.value.type==="telegram"){if(!a.value.botToken)return g("请输入 Telegram 机器人 Token","error"),!1;if(!a.value.chatId)return g("请输入 Telegram Chat ID","error"),!1;if(a.value.apiBaseUrl)try{const r=new URL(a.value.apiBaseUrl);if(!["http:","https:"].includes(r.protocol))return g("Telegram API 基础地址仅支持 http 或 https","error"),!1}catch{return g("请输入有效的 Telegram API 基础地址","error"),!1}if(a.value.proxyUrl)try{const r=new URL(a.value.proxyUrl);if(!["http:","https:","socks4:","socks4a:","socks5:"].includes(r.protocol))return g("Telegram 代理仅支持 http/https/socks 协议","error"),!1}catch{return g("请输入有效的 Telegram 代理地址","error"),!1}}else if(a.value.type==="smtp"){const r=[{field:"host",message:"SMTP服务器"},{field:"user",message:"用户名"},{field:"pass",message:"密码"},{field:"to",message:"收件人邮箱"}];for(const{field:e,message:s}of r)if(!a.value[e])return g(`请输入${s}`,"error"),!1}else{if(!a.value.url)return g("请输入Webhook URL","error"),!1;if(c.value)return g("请输入有效的Webhook URL","error"),!1}return!0},ke=async()=>{if(u.value&&_()){V.value=!0;try{let r;E.value?r=await I.put(`/admin/webhook/platforms/${E.value.id}`,a.value,{signal:C.value.signal}):r=await I.post("/admin/webhook/platforms",a.value,{signal:C.value.signal}),r.success&&u.value&&(g(E.value?"平台已更新":"平台已添加","success"),await F(),K())}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.message||"操作失败","error"),console.error(r)}finally{u.value&&(V.value=!1)}}},he=r=>{E.value=r,a.value={type:r.type||"wechat_work",name:r.name||"",url:r.url||"",enableSign:r.enableSign||!1,secret:r.secret||"",botToken:r.botToken||"",chatId:r.chatId||"",apiBaseUrl:r.apiBaseUrl||"",proxyUrl:r.proxyUrl||"",deviceKey:r.deviceKey||"",serverUrl:r.serverUrl||"",level:r.level||"",sound:r.sound||"",group:r.group||"",host:r.host||"",port:r.port??null,secure:r.secure||!1,user:r.user||"",pass:r.pass||"",from:r.from||"",to:Array.isArray(r.to)?r.to.join(", "):r.to||"",timeout:r.timeout??null,ignoreTLS:r.ignoreTLS||!1},P.value=!0},we=async r=>{if(u.value&&confirm("确定要删除这个平台吗?"))try{(await I.delete(`/admin/webhook/platforms/${r}`,{signal:C.value.signal})).success&&u.value&&(g("平台已删除","success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("删除失败","error"),console.error(e)}},Se=async r=>{if(u.value)try{const e=await I.post(`/admin/webhook/platforms/${r}/toggle`,{},{signal:C.value.signal});e.success&&u.value&&(g(e.message,"success"),await F())}catch(e){if(e.name==="AbortError"||!u.value)return;g("操作失败","error"),console.error(e)}},Te=async r=>{if(u.value)try{const e={type:r.type,secret:r.secret,enableSign:r.enableSign};r.type==="bark"?(e.deviceKey=r.deviceKey,e.serverUrl=r.serverUrl,e.level=r.level,e.sound=r.sound,e.group=r.group):r.type==="smtp"?(e.host=r.host,e.port=r.port,e.secure=r.secure,e.user=r.user,e.pass=r.pass,e.from=r.from,e.to=r.to,e.ignoreTLS=r.ignoreTLS):r.type==="telegram"?(e.botToken=r.botToken,e.chatId=r.chatId,e.apiBaseUrl=r.apiBaseUrl,e.proxyUrl=r.proxyUrl):e.url=r.url,(await I.post("/admin/webhook/test",e,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(e){if(e.name==="AbortError"||!u.value)return;g(e.error||e.message||"测试失败","error"),console.error(e)}},Ce=async()=>{if(u.value&&_()){Q.value=!0;try{(await I.post("/admin/webhook/test",a.value,{signal:C.value.signal})).success&&u.value&&g("测试成功","success")}catch(r){if(r.name==="AbortError"||!u.value)return;g(r.error||r.message||"测试失败","error"),console.error(r)}finally{u.value&&(Q.value=!1)}}},Ue=async()=>{var r,e,s,v;if(u.value)try{(await I.post("/admin/webhook/test-notification",{},{signal:C.value.signal})).success&&u.value&&g("测试通知已发送","success")}catch(h){if(h.name==="AbortError"||!u.value)return;const W=((e=(r=h==null?void 0:h.response)==null?void 0:r.data)==null?void 0:e.message)||((v=(s=h==null?void 0:h.response)==null?void 0:s.data)==null?void 0:v.error)||(h==null?void 0:h.message)||"发送失败";g(W,"error"),console.error(h)}},K=()=>{u.value&&(P.value=!1,setTimeout(()=>{u.value&&(E.value=null,a.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:"",botToken:"",chatId:"",apiBaseUrl:"",proxyUrl:"",deviceKey:"",serverUrl:"",level:"",sound:"",group:"",host:"",port:null,secure:!1,user:"",pass:"",from:"",to:"",timeout:null,ignoreTLS:!1},c.value=!1,y.value=!1,Q.value=!1,V.value=!1)},0))},ee=r=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",telegram:"Telegram",bark:"Bark",smtp:"邮件通知",custom:"自定义"})[r]||r,Me=r=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",telegram:"fab fa-telegram-plane text-sky-500",bark:"fas fa-bell text-orange-500",smtp:"fas fa-envelope text-blue-600",custom:"fas fa-webhook text-gray-600"})[r]||"fas fa-bell",te=r=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",telegram:"使用 @BotFather 创建机器人并复制 Token,Chat ID 可通过 @userinfobot 或相关工具获取",bark:"请在Bark App中查看您的设备密钥",smtp:"请配置SMTP服务器信息,支持Gmail、QQ邮箱等",custom:"请输入完整的Webhook接收地址"})[r]||"",Ie=r=>r?r.length<=12?r:`${r.slice(0,6)}...${r.slice(-4)}`:"",Be=r=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报",rateLimitRecovery:"限流恢复",test:"测试通知"})[r]||r,Ee=r=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知",rateLimitRecovery:"限流状态恢复时发送提醒",test:"用于测试Webhook连接是否正常"})[r]||"",ae=async()=>{try{const r={siteName:b.value.siteName,siteIcon:b.value.siteIcon,siteIconData:b.value.siteIconData,showAdminButton:b.value.showAdminButton},e=await A.saveOemSettings(r);e&&e.success?g("OEM设置保存成功","success"):g((e==null?void 0:e.message)||"保存失败","error")}catch{g("保存OEM设置失败","error")}},re=async()=>{if(confirm(`确定要重置为默认设置吗?
-
-这将清除所有自定义的网站名称和图标设置。`))try{const r=await A.resetOemSettings();r&&r.success?g("已重置为默认设置","success"):g("重置失败","error")}catch{g("重置失败","error")}},se=async r=>{const e=r.target.files[0];if(!e)return;const s=A.validateIconFile(e);if(!s.isValid){s.errors.forEach(v=>g(v,"error"));return}try{const v=await A.fileToBase64(e);b.value.siteIconData=v}catch{g("文件读取失败","error")}r.target.value=""},le=()=>{b.value.siteIcon="",b.value.siteIconData=""},oe=()=>{console.warn("Icon failed to load")},X=A.formatDateTime;return(r,e)=>(i(),d(Y,null,[t("div",Fe,[t("div",Ne,[e[125]||(e[125]=t("div",{class:"mb-4 sm:mb-6"},[t("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),t("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),t("div",Ke,[t("nav",We,[t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[0]||(e[0]=s=>T.value="branding")},e[47]||(e[47]=[t("i",{class:"fas fa-palette mr-2"},null,-1),l(" 品牌设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[1]||(e[1]=s=>T.value="webhook")},e[48]||(e[48]=[t("i",{class:"fas fa-bell mr-2"},null,-1),l(" 通知设置 ",-1)]),2),t("button",{class:R(["border-b-2 pb-2 text-sm font-medium transition-colors",T.value==="claude"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:e[2]||(e[2]=s=>T.value="claude")},e[49]||(e[49]=[t("i",{class:"fas fa-robot mr-2"},null,-1),l(" Claude 转发 ",-1)]),2)])]),f(L)?(i(),d("div",ze,e[50]||(e[50]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...",-1)]))):(i(),d("div",$e,[o(t("div",null,[t("div",He,[t("table",Xe,[t("tbody",Je,[t("tr",Ye,[e[52]||(e[52]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[t("i",{class:"fas fa-font text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),t("td",Ge,[o(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>f(b).siteName=s),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]]),e[51]||(e[51]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),t("tr",Ze,[e[57]||(e[57]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[t("i",{class:"fas fa-image text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),t("td",_e,[t("div",et,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",tt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,at),e[54]||(e[54]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le},e[53]||(e[53]=[t("i",{class:"fas fa-trash mr-1"},null,-1),l("删除 ",-1)]))])):x("",!0),t("div",null,[t("input",{ref_key:"iconFileInput",ref:$,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[4]||(e[4]=s=>r.$refs.iconFileInput.click())},e[55]||(e[55]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[56]||(e[56]=t("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),t("tr",rt,[e[60]||(e[60]=t("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[t("div",{class:"flex items-center"},[t("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600"},[t("i",{class:"fas fa-eye-slash text-xs text-white"})]),t("div",null,[t("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 管理入口 "),t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"登录按钮显示")])])],-1)),t("td",st,[t("div",lt,[t("label",ot,[o(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[58]||(e[58]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",nt,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)])]),e[59]||(e[59]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("tr",null,[t("td",dt,[t("div",it,[t("div",ut,[t("button",{class:R(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",ct)):(i(),d("i",ft)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,gt),t("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[61]||(e[61]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,bt)]),f(b).updatedAt?(i(),d("div",xt,[e[62]||(e[62]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 最后更新:"+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])])])]),t("div",pt,[t("div",yt,[e[63]||(e[63]=U('',1)),o(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>f(b).siteName=s),class:"form-input w-full dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[p,f(b).siteName]])]),t("div",vt,[e[67]||(e[67]=U('',1)),t("div",mt,[f(b).siteIconData||f(b).siteIcon?(i(),d("div",kt,[t("img",{alt:"图标预览",class:"h-8 w-8",src:f(b).siteIconData||f(b).siteIcon,onError:oe},null,40,ht),e[64]||(e[64]=t("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),t("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:le}," 删除 ")])):x("",!0),t("div",null,[t("input",{ref:"iconFileInputMobile",accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),t("button",{class:"btn btn-success px-4 py-2",onClick:e[7]||(e[7]=s=>r.$refs.iconFileInputMobile.click())},e[65]||(e[65]=[t("i",{class:"fas fa-upload mr-2"},null,-1),l(" 上传图标 ",-1)])),e[66]||(e[66]=t("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 支持 .ico, .png, .jpg, .svg 格式,最大 350KB ",-1))])])]),t("div",wt,[e[70]||(e[70]=U('',1)),t("div",St,[t("label",Tt,[o(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>j.value=s),class:"peer sr-only",type:"checkbox"},null,512),[[q,j.value]]),e[68]||(e[68]=t("div",{class:"peer relative h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1)),t("span",Ct,m(j.value?"隐藏登录按钮":"显示登录按钮"),1)]),e[69]||(e[69]=t("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," 隐藏后,用户需要直接访问 /admin/login 页面登录 ",-1))])]),t("div",Ut,[t("div",Mt,[t("button",{class:R(["btn btn-primary w-full px-6 py-3",{"cursor-not-allowed opacity-50":f(B)}]),disabled:f(B),onClick:ae},[f(B)?(i(),d("div",Bt)):(i(),d("i",Et)),l(" "+m(f(B)?"保存中...":"保存设置"),1)],10,It),t("button",{class:"btn w-full bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:f(B),onClick:re},e[71]||(e[71]=[t("i",{class:"fas fa-undo mr-2"},null,-1),l(" 重置为默认 ",-1)]),8,At),f(b).updatedAt?(i(),d("div",Dt,[e[72]||(e[72]=t("i",{class:"fas fa-clock mr-1"},null,-1)),l(" 上次更新: "+m(f(X)(f(b).updatedAt)),1)])):x("",!0)])])])],512),[[J,T.value==="branding"]]),o(t("div",null,[t("div",Vt,[t("div",Qt,[e[74]||(e[74]=t("div",null,[t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"启用通知"),t("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),t("label",Rt,[o(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>k.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:N},null,544),[[q,k.value.enabled]]),e[73]||(e[73]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),t("div",qt,[e[76]||(e[76]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),t("div",jt,[(i(!0),d(Y,null,pe(k.value.notificationTypes,(s,v)=>(i(),d("div",{key:v,class:"flex items-center justify-between"},[t("div",null,[t("span",Pt,m(Be(v)),1),t("span",Lt,m(Ee(v)),1)]),t("label",Ot,[o(t("input",{"onUpdate:modelValue":h=>k.value.notificationTypes[v]=h,class:"peer sr-only",type:"checkbox",onChange:N},null,40,Ft),[[q,k.value.notificationTypes[v]]]),e[75]||(e[75]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),t("div",Nt,[t("div",Kt,[e[78]||(e[78]=t("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),t("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:e[10]||(e[10]=s=>P.value=!0)},e[77]||(e[77]=[t("i",{class:"fas fa-plus mr-2"},null,-1),l(" 添加平台 ",-1)]))]),k.value.platforms&&k.value.platforms.length>0?(i(),d("div",Wt,[(i(!0),d(Y,null,pe(k.value.platforms,s=>(i(),d("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[t("div",zt,[t("div",$t,[t("div",Ht,[t("i",{class:R(["mr-3 text-xl",Me(s.type)])},null,2),t("div",null,[t("h3",Xt,m(s.name||ee(s.type)),1),t("p",Jt,m(ee(s.type)),1)])]),t("div",Yt,[s.type!=="smtp"&&s.type!=="telegram"?(i(),d("div",Gt,[e[79]||(e[79]=t("i",{class:"fas fa-link mr-2"},null,-1)),t("span",Zt,m(s.url),1)])):x("",!0),s.type==="telegram"?(i(),d("div",_t,[e[80]||(e[80]=t("i",{class:"fas fa-comments mr-2"},null,-1)),t("span",ea,"Chat ID: "+m(s.chatId||"未配置"),1)])):x("",!0),s.type==="telegram"&&s.botToken?(i(),d("div",ta,[e[81]||(e[81]=t("i",{class:"fas fa-key mr-2"},null,-1)),t("span",aa,"Token: "+m(Ie(s.botToken)),1)])):x("",!0),s.type==="telegram"&&s.apiBaseUrl?(i(),d("div",ra,[e[82]||(e[82]=t("i",{class:"fas fa-globe mr-2"},null,-1)),t("span",sa,"API: "+m(s.apiBaseUrl),1)])):x("",!0),s.type==="telegram"&&s.proxyUrl?(i(),d("div",la,[e[83]||(e[83]=t("i",{class:"fas fa-route mr-2"},null,-1)),t("span",oa,"代理: "+m(s.proxyUrl),1)])):x("",!0),s.type==="smtp"&&s.to?(i(),d("div",na,[e[84]||(e[84]=t("i",{class:"fas fa-envelope mr-2"},null,-1)),t("span",da,m(Array.isArray(s.to)?s.to.join(", "):s.to),1)])):x("",!0),s.enableSign?(i(),d("div",ia,e[85]||(e[85]=[t("i",{class:"fas fa-shield-alt mr-2"},null,-1),t("span",null,"已启用签名验证",-1)]))):x("",!0)])]),t("div",ua,[t("label",ga,[t("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:v=>Se(s.id)},null,40,ca),e[86]||(e[86]=t("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),t("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:v=>Te(s)},e[87]||(e[87]=[t("i",{class:"fas fa-vial"},null,-1)]),8,fa),t("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:v=>he(s)},e[88]||(e[88]=[t("i",{class:"fas fa-edit"},null,-1)]),8,ba),t("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:v=>we(s.id)},e[89]||(e[89]=[t("i",{class:"fas fa-trash"},null,-1)]),8,xa)])])]))),128))])):(i(),d("div",pa,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),t("div",ya,[e[93]||(e[93]=t("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),t("div",va,[t("div",null,[e[90]||(e[90]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),o(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>k.value.retrySettings.maxRetries=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.maxRetries,void 0,{number:!0}]])]),t("div",null,[e[91]||(e[91]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>k.value.retrySettings.retryDelay=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.retryDelay,void 0,{number:!0}]])]),t("div",null,[e[92]||(e[92]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),o(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>k.value.retrySettings.timeout=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:N},null,544),[[p,k.value.retrySettings.timeout,void 0,{number:!0}]])])])]),t("div",{class:"mt-6 text-center"},[t("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Ue},e[94]||(e[94]=[t("i",{class:"fas fa-paper-plane mr-2"},null,-1),l(" 发送测试通知 ",-1)]))])],512),[[J,T.value==="webhook"]]),o(t("div",null,[H.value?(i(),d("div",ma,e[95]||(e[95]=[t("div",{class:"loading-spinner mx-auto mb-4"},null,-1),t("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载配置...",-1)]))):(i(),d("div",ka,[t("div",ha,[t("div",wa,[e[97]||(e[97]=U('
仅允许 Claude Code 客户端
启用后,所有 /api/v1/messages 和 /claude/v1/messages 端点将强制验证 Claude Code CLI 客户端
',1)),t("label",Sa,[o(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>n.value.claudeCodeOnlyEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.claudeCodeOnlyEnabled]]),e[96]||(e[96]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-orange-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-orange-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-orange-800"},null,-1))])]),e[98]||(e[98]=U(' 此设置与 API Key 级别的客户端限制是 OR 逻辑:全局启用或 API Key 设置中启用,都会执行 Claude Code 验证。
',1))]),t("div",Ta,[t("div",Ca,[e[100]||(e[100]=U('
强制会话绑定
启用后,系统会将原始会话 ID 绑定到首次使用的账户,确保上下文的一致性
',1)),t("label",Ua,[o(t("input",{"onUpdate:modelValue":e[15]||(e[15]=s=>n.value.globalSessionBindingEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.globalSessionBindingEnabled]]),e[99]||(e[99]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-purple-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-purple-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-purple-800"},null,-1))])]),n.value.globalSessionBindingEnabled?(i(),d("div",Ma,[t("div",null,[e[101]||(e[101]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-clock mr-2 text-gray-400"}),l(" 绑定有效期(天) ")],-1)),o(t("input",{"onUpdate:modelValue":e[16]||(e[16]=s=>n.value.sessionBindingTtlDays=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"365",min:"1",placeholder:"30",type:"number",onChange:D},null,544),[[p,n.value.sessionBindingTtlDays,void 0,{number:!0}]]),e[102]||(e[102]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 会话绑定到账户后的有效时间,过期后会自动解除绑定 ",-1))]),t("div",null,[e[103]||(e[103]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-exclamation-triangle mr-2 text-gray-400"}),l(" 旧会话污染提示 ")],-1)),o(t("textarea",{"onUpdate:modelValue":e[17]||(e[17]=s=>n.value.sessionBindingErrorMessage=s),class:"mt-1 block w-full rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"你的本地session已污染,请清理后使用。",rows:"2",onChange:D},null,544),[[p,n.value.sessionBindingErrorMessage]]),e[104]||(e[104]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当检测到为旧的sessionId且未在系统中有调度记录时提示,返回给客户端的错误消息 ",-1))])])):x("",!0),e[105]||(e[105]=U('工作原理:系统会提取请求中的原始 session ID (来自 metadata.user_id), 并将其与首次调度的账户绑定。后续使用相同 session ID 的请求将自动路由到同一账户。
新会话识别:如果绑定会话历史中没有该sessionId但请求中 messages.length > 1, 系统会认为这是一个污染的会话并拒绝请求。
',1))]),t("div",Ia,[t("div",Ba,[e[107]||(e[107]=U('
用户消息串行队列
启用后,同一账户的用户消息请求将串行执行,并在请求之间添加延迟,防止触发上游限流
',1)),t("label",Ea,[o(t("input",{"onUpdate:modelValue":e[18]||(e[18]=s=>n.value.userMessageQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.userMessageQueueEnabled]]),e[106]||(e[106]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-teal-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-teal-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-teal-800"},null,-1))])]),n.value.userMessageQueueEnabled?(i(),d("div",Aa,[t("div",null,[e[108]||(e[108]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-hourglass-half mr-2 text-gray-400"}),l(" 请求间隔(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[19]||(e[19]=s=>n.value.userMessageQueueDelayMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"0",placeholder:"200",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueDelayMs,void 0,{number:!0}]]),e[109]||(e[109]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 同一账户的用户消息请求之间的最小间隔时间(0-10000毫秒) ",-1))]),t("div",null,[e[110]||(e[110]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 队列超时(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[20]||(e[20]=s=>n.value.userMessageQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-teal-500 focus:outline-none focus:ring-2 focus:ring-teal-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"1000",placeholder:"30000",type:"number",onChange:D},null,544),[[p,n.value.userMessageQueueTimeoutMs,void 0,{number:!0}]]),e[111]||(e[111]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在队列中等待的最大时间,超时将返回 503 错误(1000-300000毫秒) ",-1))])])):x("",!0),e[112]||(e[112]=U('工作原理:系统检测请求中最后一条消息的 role 是否为 user。用户消息请求需要排队串行执行,而工具调用结果、助手消息续传等不受此限制。
',1))]),t("div",Da,[t("div",Va,[e[114]||(e[114]=U('
并发请求排队
当 API Key 并发请求超限时进入队列等待,而非直接拒绝
',1)),t("label",Qa,[o(t("input",{"onUpdate:modelValue":e[21]||(e[21]=s=>n.value.concurrentRequestQueueEnabled=s),class:"peer sr-only",type:"checkbox",onChange:D},null,544),[[q,n.value.concurrentRequestQueueEnabled]]),e[113]||(e[113]=t("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-500 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])]),n.value.concurrentRequestQueueEnabled?(i(),d("div",Ra,[t("div",null,[e[115]||(e[115]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-list-ol mr-2 text-gray-400"}),l(" 固定最小排队数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[22]||(e[22]=s=>n.value.concurrentRequestQueueMaxSize=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"100",min:"1",placeholder:"3",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSize,void 0,{number:!0}]]),e[116]||(e[116]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数的固定最小值(1-100) ",-1))]),t("div",null,[e[117]||(e[117]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-times mr-2 text-gray-400"}),l(" 排队数倍数 ")],-1)),o(t("input",{"onUpdate:modelValue":e[23]||(e[23]=s=>n.value.concurrentRequestQueueMaxSizeMultiplier=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",placeholder:"1",step:"0.5",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueMaxSizeMultiplier,void 0,{number:!0}]]),e[118]||(e[118]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 最大排队数 = MAX(倍数 × 并发限制, 固定值),设为 0 则仅使用固定值 ",-1))]),t("div",null,[e[119]||(e[119]=t("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-stopwatch mr-2 text-gray-400"}),l(" 排队超时时间(毫秒) ")],-1)),o(t("input",{"onUpdate:modelValue":e[24]||(e[24]=s=>n.value.concurrentRequestQueueTimeoutMs=s),class:"mt-1 block w-full max-w-xs rounded-lg border border-gray-300 bg-white px-3 py-2 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-500 dark:bg-gray-700 dark:text-white sm:text-sm",max:"300000",min:"5000",placeholder:"10000",type:"number",onChange:D},null,544),[[p,n.value.concurrentRequestQueueTimeoutMs,void 0,{number:!0}]]),e[120]||(e[120]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 请求在排队中等待的最大时间,超时将返回 429 错误(5秒-5分钟,默认10秒) ",-1))])])):x("",!0),e[121]||(e[121]=U('工作原理:当 API Key 的并发请求超过 concurrencyLimit 时,超限请求会进入队列等待而非直接返回 429。适合 Claude Code Agent 并行工具调用场景。
',1))]),n.value.updatedAt?(i(),d("div",qa,[e[124]||(e[124]=t("i",{class:"fas fa-history mr-2"},null,-1)),l(" 最后更新:"+m(f(X)(n.value.updatedAt))+" ",1),n.value.updatedBy?(i(),d("span",ja,[e[122]||(e[122]=l(" 由 ",-1)),t("strong",null,m(n.value.updatedBy),1),e[123]||(e[123]=l(" 修改 ",-1))])):x("",!0)])):x("",!0)]))],512),[[J,T.value==="claude"]])]))])]),P.value?(i(),d("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:K},[t("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:e[46]||(e[46]=Pe(()=>{},["stop"]))},[t("div",Pa,[t("div",La,[t("div",Oa,[e[126]||(e[126]=t("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[t("i",{class:"fas fa-bell"})],-1)),t("div",null,[t("h3",Fa,m(E.value?"编辑":"添加")+"通知平台 ",1),t("p",Na," 配置"+m(E.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),t("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:K},e[127]||(e[127]=[t("i",{class:"fas fa-times text-lg"},null,-1)]))])]),t("div",Ka,[t("div",Wa,[t("div",null,[e[131]||(e[131]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),l(" 平台类型 ")],-1)),t("div",za,[o(t("select",{"onUpdate:modelValue":e[25]||(e[25]=s=>a.value.type=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:E.value},e[128]||(e[128]=[U('',9)]),8,$a),[[z,a.value.type]]),e[129]||(e[129]=t("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[t("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),E.value?(i(),d("p",Ha,e[130]||(e[130]=[t("i",{class:"fas fa-info-circle mr-1"},null,-1),l(" 编辑模式下不能更改平台类型 ",-1)]))):x("",!0)]),t("div",null,[e[132]||(e[132]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-tag mr-2 text-gray-400"}),l(" 名称 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[26]||(e[26]=s=>a.value.name=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[p,a.value.name]])]),a.value.type!=="bark"&&a.value.type!=="smtp"&&a.value.type!=="telegram"?(i(),d("div",Xa,[e[136]||(e[136]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-link mr-2 text-gray-400"}),l(" Webhook URL "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),t("div",Ja,[o(t("input",{"onUpdate:modelValue":e[27]||(e[27]=s=>a.value.url=s),class:R(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":c.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":y.value}]),placeholder:"https://...",required:"",type:"url",onInput:me},null,34),[[p,a.value.url]]),y.value?(i(),d("div",Ya,e[133]||(e[133]=[t("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):x("",!0),c.value?(i(),d("div",Ga,e[134]||(e[134]=[t("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):x("",!0)]),te(a.value.type)?(i(),d("div",Za,[e[135]||(e[135]=t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),t("p",_a,m(te(a.value.type)),1)])):x("",!0)])):x("",!0),a.value.type==="telegram"?(i(),d("div",er,[t("div",null,[e[137]||(e[137]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-robot mr-2 text-gray-400"}),l(" Bot Token "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[28]||(e[28]=s=>a.value.botToken=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789:ABCDEFghijk-xyz",required:"",type:"text"},null,512),[[p,a.value.botToken]]),e[138]||(e[138]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Telegram 的 @BotFather 中创建机器人后获得的 Token ",-1))]),t("div",null,[e[139]||(e[139]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-comments mr-2 text-gray-400"}),l(" Chat ID "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[29]||(e[29]=s=>a.value.chatId=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:123456789 或 -1001234567890",required:"",type:"text"},null,512),[[p,a.value.chatId]]),e[140]||(e[140]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可使用 @userinfobot、@RawDataBot 或 API 获取聊天/频道的 Chat ID ",-1))]),t("div",null,[e[141]||(e[141]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-globe mr-2 text-gray-400"}),l(" API 基础地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[30]||(e[30]=s=>a.value.apiBaseUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.telegram.org",type:"url"},null,512),[[p,a.value.apiBaseUrl]]),e[142]||(e[142]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 使用自建 Bot API 时可覆盖默认域名,需以 http 或 https 开头 ",-1))]),t("div",null,[e[143]||(e[143]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-route mr-2 text-gray-400"}),l(" 代理地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[31]||(e[31]=s=>a.value.proxyUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:socks5://user:pass@127.0.0.1:1080",type:"text"},null,512),[[p,a.value.proxyUrl]]),e[144]||(e[144]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 支持 http、https、socks4/4a/5 代理,留空则直接连接 Telegram 官方 API ",-1))]),e[145]||(e[145]=t("div",{class:"flex items-start rounded-lg bg-blue-50 p-3 text-sm text-blue-700 dark:bg-blue-900/20 dark:text-blue-300"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5"}),t("div",null,"机器人需先加入对应群组或频道并授予发送消息权限,通知会以纯文本方式发送。")],-1))])):x("",!0),a.value.type==="bark"?(i(),d("div",tr,[t("div",null,[e[146]||(e[146]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-key mr-2 text-gray-400"}),l(" 设备密钥 (Device Key) "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[32]||(e[32]=s=>a.value.deviceKey=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:aBcDeFgHiJkLmNoPqRsTuVwX",required:"",type:"text"},null,512),[[p,a.value.deviceKey]]),e[147]||(e[147]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在Bark App中查看您的推送密钥 ",-1))]),t("div",null,[e[148]||(e[148]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" 服务器地址 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[33]||(e[33]=s=>a.value.serverUrl=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: https://api.day.app/push",type:"url"},null,512),[[p,a.value.serverUrl]])]),t("div",null,[e[150]||(e[150]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-flag mr-2 text-gray-400"}),l(" 通知级别 ")],-1)),o(t("select",{"onUpdate:modelValue":e[34]||(e[34]=s=>a.value.level=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[149]||(e[149]=[U('',5)]),512),[[z,a.value.level]])]),t("div",null,[e[152]||(e[152]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-volume-up mr-2 text-gray-400"}),l(" 通知声音 ")],-1)),o(t("select",{"onUpdate:modelValue":e[35]||(e[35]=s=>a.value.sound=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[151]||(e[151]=[U('',9)]),512),[[z,a.value.sound]])]),t("div",null,[e[153]||(e[153]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-folder mr-2 text-gray-400"}),l(" 通知分组 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[36]||(e[36]=s=>a.value.group=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认: claude-relay",type:"text"},null,512),[[p,a.value.group]])]),e[154]||(e[154]=t("div",{class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},[t("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"}),t("div",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("p",null,"1. 在iPhone上安装Bark App"),t("p",null,"2. 打开App获取您的设备密钥"),t("p",null,"3. 将密钥粘贴到上方输入框")])],-1))])):x("",!0),a.value.type==="smtp"?(i(),d("div",ar,[t("div",null,[e[155]||(e[155]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-server mr-2 text-gray-400"}),l(" SMTP 服务器 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[37]||(e[37]=s=>a.value.host=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如: smtp.gmail.com",required:"",type:"text"},null,512),[[p,a.value.host]])]),t("div",rr,[t("div",null,[e[156]||(e[156]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-plug mr-2 text-gray-400"}),l(" 端口 ")],-1)),o(t("input",{"onUpdate:modelValue":e[38]||(e[38]=s=>a.value.port=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",max:"65535",min:"1",placeholder:"587",type:"number"},null,512),[[p,a.value.port,void 0,{number:!0}]]),e[157]||(e[157]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 默认: 587 (TLS) 或 465 (SSL) ",-1))]),t("div",null,[e[159]||(e[159]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 加密方式 ")],-1)),o(t("select",{"onUpdate:modelValue":e[39]||(e[39]=s=>a.value.secure=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white"},e[158]||(e[158]=[t("option",{value:!1},"STARTTLS (端口587)",-1),t("option",{value:!0},"SSL/TLS (端口465)",-1)]),512),[[z,a.value.secure]])])]),t("div",null,[e[160]||(e[160]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-user mr-2 text-gray-400"}),l(" 用户名 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[40]||(e[40]=s=>a.value.user=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"user@example.com",required:"",type:"email"},null,512),[[p,a.value.user]])]),t("div",null,[e[161]||(e[161]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-lock mr-2 text-gray-400"}),l(" 密码 / 应用密码 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[41]||(e[41]=s=>a.value.pass=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"邮箱密码或应用专用密码",required:"",type:"password"},null,512),[[p,a.value.pass]]),e[162]||(e[162]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议使用应用专用密码,而非邮箱登录密码 ",-1))]),t("div",null,[e[163]||(e[163]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-paper-plane mr-2 text-gray-400"}),l(" 发件人邮箱 "),t("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),o(t("input",{"onUpdate:modelValue":e[42]||(e[42]=s=>a.value.from=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"默认使用用户名邮箱",type:"email"},null,512),[[p,a.value.from]])]),t("div",null,[e[164]||(e[164]=t("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-envelope mr-2 text-gray-400"}),l(" 收件人邮箱 "),t("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),o(t("input",{"onUpdate:modelValue":e[43]||(e[43]=s=>a.value.to=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"admin@example.com",required:"",type:"email"},null,512),[[p,a.value.to]]),e[165]||(e[165]=t("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"接收通知的邮箱地址",-1))])])):x("",!0),a.value.type==="dingtalk"||a.value.type==="feishu"?(i(),d("div",sr,[t("div",lr,[t("div",or,[t("label",nr,[o(t("input",{id:"enableSign","onUpdate:modelValue":e[44]||(e[44]=s=>a.value.enableSign=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[q,a.value.enableSign]]),e[166]||(e[166]=t("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[t("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),l(" 启用签名验证 ")],-1))]),a.value.enableSign?(i(),d("span",dr," 已启用 ")):x("",!0)]),Re(je,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:qe(()=>[a.value.enableSign?(i(),d("div",ir,[e[167]||(e[167]=t("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),o(t("input",{"onUpdate:modelValue":e[45]||(e[45]=s=>a.value.secret=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[p,a.value.secret]])])):x("",!0)]),_:1})])])):x("",!0)])]),t("div",ur,[t("div",gr,[e[169]||(e[169]=t("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[t("i",{class:"fas fa-asterisk mr-1 text-red-500"}),l(" 必填项 ")],-1)),t("div",cr,[t("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:K},e[168]||(e[168]=[t("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),l(" 取消 ",-1)])),t("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:Q.value,onClick:Ce},[t("i",{class:R(["mr-2 transition-transform",Q.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),l(" "+m(Q.value?"测试中...":"测试连接"),1)],8,fr),t("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!ye.value||V.value,onClick:ke},[t("i",{class:R(["mr-2 transition-transform",V.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),l(" "+m(V.value?"保存中...":E.value?"保存修改":"添加平台"),1)],8,br)])])])])])):x("",!0)],64))}}),kr=Le(xr,[["__scopeId","data-v-d2705d9a"]]);export{kr as default};
diff --git a/web/admin-spa/dist/assets/SettingsView-D2Ttplqa.css b/web/admin-spa/dist/assets/SettingsView-D2Ttplqa.css
new file mode 100644
index 00000000..7c6d05cd
--- /dev/null
+++ b/web/admin-spa/dist/assets/SettingsView-D2Ttplqa.css
@@ -0,0 +1 @@
+.settings-container[data-v-9495fcfd]{min-height:calc(100vh - 300px)}.card[data-v-9495fcfd]{background:#fff;border-radius:12px;box-shadow:0 2px 12px #0000001a;border:1px solid #e5e7eb}:root.dark .card[data-v-9495fcfd]{background:var(--bg-gradient-start);border:1px solid var(--border-color);box-shadow:0 2px 12px #0000004d}.table-container[data-v-9495fcfd]{overflow:hidden;border-radius:8px;border:1px solid #f3f4f6}:root.dark .table-container[data-v-9495fcfd]{border:1px solid var(--border-color)}.table-row[data-v-9495fcfd]{transition:background-color .2s ease}.table-row[data-v-9495fcfd]:hover{background-color:#f9fafb}:root.dark .table-row[data-v-9495fcfd]:hover{background-color:var(--bg-gradient-mid)}.form-input[data-v-9495fcfd]{width:100%;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));padding:.5rem 1rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.form-input[data-v-9495fcfd]:focus{border-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn[data-v-9495fcfd]{display:inline-flex;align-items:center;justify-content:center;border-radius:.5rem;padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:600;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}.btn[data-v-9495fcfd]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-offset-width: 2px}.btn-primary[data-v-9495fcfd]{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-primary[data-v-9495fcfd]:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.btn-primary[data-v-9495fcfd]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.btn-success[data-v-9495fcfd]{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.btn-success[data-v-9495fcfd]:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.btn-success[data-v-9495fcfd]:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 197 94 / var(--tw-ring-opacity, 1))}.loading-spinner[data-v-9495fcfd]{height:1.25rem;width:1.25rem}@keyframes spin-9495fcfd{to{transform:rotate(360deg)}}.loading-spinner[data-v-9495fcfd]{animation:spin-9495fcfd 1s linear infinite;border-radius:9999px;border-width:2px;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1));--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}
diff --git a/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css b/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css
deleted file mode 100644
index 7dbed9bc..00000000
--- a/web/admin-spa/dist/assets/ThemeToggle-BLLHl9nT.css
+++ /dev/null
@@ -1 +0,0 @@
-.theme-toggle-container[data-v-78f09a8c]{position:relative;display:inline-flex;align-items:center}.theme-toggle-button[data-v-78f09a8c]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){background-color:#1f2937e6}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-78f09a8c]{border-width:1px;border-color:#e5e7eb80}.theme-toggle-button[data-v-78f09a8c]:is(.dark *){border-color:#4b556380}.theme-toggle-button[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-toggle-button[data-v-78f09a8c]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-78f09a8c]{position:relative;overflow:hidden}.theme-toggle-button[data-v-78f09a8c]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle,rgba(59,130,246,.1),transparent);opacity:0;transition:opacity .2s ease;pointer-events:none}.theme-toggle-button[data-v-78f09a8c]:hover:before{opacity:1}.theme-toggle-button i[data-v-78f09a8c]{font-size:1rem;line-height:1.5rem;transition:transform .2s ease}.theme-toggle-button:hover i[data-v-78f09a8c]{transform:scale(1.1)}.theme-toggle-button i.fa-sun[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-moon[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-circle-half-stroke[data-v-78f09a8c]{background:linear-gradient(90deg,#60a5fa,#2563eb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.theme-switch-wrapper[data-v-78f09a8c]{display:inline-flex;align-items:center}.theme-switch[data-v-78f09a8c]{position:relative;width:76px;height:38px;border-radius:50px;padding:4px;cursor:pointer;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);background:linear-gradient(135deg,#667eea,#764ba2);border:2px solid rgba(255,255,255,.1);box-shadow:0 4px 15px #667eea4d,inset 0 1px 2px #0000001a;overflow:hidden;display:flex;align-items:center}.theme-switch[data-v-78f09a8c]:hover{transform:scale(1.05);box-shadow:0 6px 20px #667eea66,inset 0 1px 2px #0000001a}.theme-switch[data-v-78f09a8c]:active{transform:scale(.98)}.theme-switch.is-dark[data-v-78f09a8c]{background:linear-gradient(135deg,#1e293b,#334155);border-color:#94a3b833;box-shadow:0 4px 15px #00000080,inset 0 1px 2px #ffffff0d}.theme-switch.is-dark[data-v-78f09a8c]:hover{box-shadow:0 6px 20px #0009,inset 0 1px 2px #ffffff0d}.theme-switch.is-auto[data-v-78f09a8c]{background:linear-gradient(135deg,#c4b5fd,#a78bfa 15%,#818cf8 40%,#6366f1 60%,#4f46e5 85%,#4338ca);border-color:#fff3;position:relative;overflow:hidden;background-size:120% 120%;background-position:center;box-shadow:0 4px 15px #8b5cf640,inset 0 1px 3px #0000001a,inset 0 -1px 3px #0000001a}.theme-switch.is-auto[data-v-78f09a8c]:before{content:"";position:absolute;left:50%;top:10%;bottom:10%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent);transform:translate(-50%);pointer-events:none}.switch-bg[data-v-78f09a8c]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;pointer-events:none}.stars[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch.is-dark .stars[data-v-78f09a8c]{opacity:1}.stars span[data-v-78f09a8c]{position:absolute;display:block;width:2px;height:2px;background:#fff;border-radius:50%;opacity:.6}.stars span[data-v-78f09a8c]:nth-child(1){top:25%;left:20%}.stars span[data-v-78f09a8c]:nth-child(2){top:40%;left:40%;width:1.5px;height:1.5px}.stars span[data-v-78f09a8c]:nth-child(3){top:60%;left:25%}.clouds[data-v-78f09a8c]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch:not(.is-dark):not(.is-auto) .clouds[data-v-78f09a8c]{opacity:.7}.clouds span[data-v-78f09a8c]{position:absolute;background:#ffffff4d;border-radius:100px}.clouds span[data-v-78f09a8c]:nth-child(1){width:20px;height:8px;top:40%;left:15%}.clouds span[data-v-78f09a8c]:nth-child(2){width:15px;height:6px;top:60%;left:35%}.switch-handle[data-v-78f09a8c]{position:absolute;width:30px;height:30px;background:#fff;border-radius:50%;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);box-shadow:0 2px 8px #0003,0 0 0 1px #0000000d;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%) translate(0);left:4px}.theme-switch.is-dark .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(38px);background:linear-gradient(135deg,#1e293b,#475569);box-shadow:0 2px 8px #0006,0 0 0 1px #ffffff1a}.theme-switch.is-auto .switch-handle[data-v-78f09a8c]{transform:translateY(-50%) translate(19px);background:#ffffff40;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.35);box-shadow:0 4px 12px #0000001a,inset 0 0 8px #ffffff40}.handle-icon[data-v-78f09a8c]{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.handle-icon i[data-v-78f09a8c]{font-size:14px;transition:all .3s ease}.handle-icon .fa-sun[data-v-78f09a8c]{color:#f59e0b;filter:drop-shadow(0 0 3px rgba(245,158,11,.5))}.handle-icon .fa-moon[data-v-78f09a8c]{color:#fbbf24;filter:drop-shadow(0 0 3px rgba(251,191,36,.5))}.handle-icon .fa-circle-half-stroke[data-v-78f09a8c]{color:#ffffffe6;filter:drop-shadow(0 0 4px rgba(167,139,250,.5));font-size:15px}.theme-segmented[data-v-78f09a8c]{display:inline-flex;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-78f09a8c]{border-radius:9999px;padding:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment[data-v-78f09a8c]{padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-radius:9999px;display:flex;align-items:center;gap:.25rem;cursor:pointer;position:relative}.theme-segment[data-v-78f09a8c]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-segment[data-v-78f09a8c]:hover{background-color:#ffffff4d}.theme-segment[data-v-78f09a8c]:hover:is(.dark *){background-color:#4b55634d}.theme-segment[data-v-78f09a8c]:hover{transform:scale(1.02)}.theme-segment.active[data-v-78f09a8c]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-78f09a8c]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment i[data-v-78f09a8c]{font-size:.75rem;line-height:1rem;transition:transform .2s ease}.fade-enter-active[data-v-78f09a8c],.fade-leave-active[data-v-78f09a8c]{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.fade-enter-from[data-v-78f09a8c],.fade-leave-to[data-v-78f09a8c]{opacity:0}.dropdown-enter-active[data-v-78f09a8c]{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.dropdown-leave-active[data-v-78f09a8c]{transition:all .2s cubic-bezier(.4,0,1,1)}.dropdown-enter-from[data-v-78f09a8c]{opacity:0;transform:translateY(-10px) scale(.95)}.dropdown-leave-to[data-v-78f09a8c]{opacity:0;transform:translateY(-5px) scale(.98)}@media (max-width: 640px){.theme-dropdown[data-v-78f09a8c]{left:0;right:auto}.theme-segment span[data-v-78f09a8c]{display:none}}
diff --git a/web/admin-spa/dist/assets/ThemeToggle-DROshBR1.js b/web/admin-spa/dist/assets/ThemeToggle-DROshBR1.js
new file mode 100644
index 00000000..00e2423a
--- /dev/null
+++ b/web/admin-spa/dist/assets/ThemeToggle-DROshBR1.js
@@ -0,0 +1 @@
+import{r as L,c as x,q as B,V,x as o,y as s,L as u,z as e,R as _,u as l,B as h,J as f,T as v,C as m,Q as g,ac as k,P as p}from"./vue-vendor-DV7DYXbz.js";import{_ as z,a as E}from"./index-BahP9Xx9.js";const N={class:"theme-toggle-container"},O={key:0,class:"flex items-center gap-2"},q={class:"relative"},D=["title"],F={key:0,class:"color-menu"},I=["title","onClick"],J={class:"color-name"},P=["title"],Q={key:"sun",class:"fas fa-sun"},R={key:"moon",class:"fas fa-moon"},U={key:"auto",class:"fas fa-circle-half-stroke"},j={key:1,class:"theme-switch-wrapper"},A={class:"relative mr-3"},G=["title"],H={key:0,class:"color-menu"},K=["title","onClick"],W={class:"color-name"},X=["title"],Y={class:"switch-handle"},Z={class:"handle-icon"},ee={key:0,class:"fas fa-sun"},te={key:1,class:"fas fa-moon"},oe={key:2,class:"fas fa-circle-half-stroke"},se={key:2,class:"theme-segmented"},ae=["title","onClick"],le={key:0,class:"ml-1 hidden sm:inline"},ne={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:r=>["compact","dropdown","segmented"].includes(r)},showLabel:{type:Boolean,default:!1}},setup(r){const t=E(),i=L(!1),y=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],b=x(()=>{const n=y.find(d=>d.value===t.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),C=()=>{t.cycleThemeMode()},T=n=>{t.setThemeMode(n)},S=()=>{i.value=!i.value},w=n=>{t.setColorScheme(n),i.value=!1},M=n=>{!n.target.closest(".color-scheme-button")&&!n.target.closest(".color-scheme-button-lg")&&!n.target.closest(".color-menu")&&(i.value=!1)};return B(()=>{document.addEventListener("click",M)}),V(()=>{document.removeEventListener("click",M)}),(n,d)=>(s(),o("div",N,[r.mode==="compact"?(s(),o("div",O,[e("div",q,[e("button",{class:"color-scheme-button",title:`色系: ${l(t).currentColorScheme.name}`,onClick:S},[e("span",{class:"color-dot",style:h({background:l(t).currentColorScheme.primary})},null,4)],8,D),_(v,{name:"dropdown"},{default:f(()=>[i.value?(s(),o("div",F,[(s(!0),o(g,null,k(l(t).ColorSchemes,(a,c)=>(s(),o("button",{key:c,class:m(["color-option",{active:l(t).colorScheme===c}]),title:a.name,onClick:$=>w(c)},[e("span",{class:"color-preview",style:h({background:`linear-gradient(135deg, ${a.primary} 0%, ${a.secondary} 100%)`})},null,4),e("span",J,p(a.name),1)],10,I))),128))])):u("",!0)]),_:1})]),e("button",{class:"theme-toggle-button",title:b.value,onClick:C},[_(v,{mode:"out-in",name:"fade"},{default:f(()=>[l(t).themeMode==="light"?(s(),o("i",Q)):l(t).themeMode==="dark"?(s(),o("i",R)):(s(),o("i",U))]),_:1})],8,P)])):r.mode==="dropdown"?(s(),o("div",j,[e("div",A,[e("button",{class:"color-scheme-button-lg",title:`色系: ${l(t).currentColorScheme.name}`,onClick:S},[e("span",{class:"color-dot-lg",style:h({background:`linear-gradient(135deg, ${l(t).currentColorScheme.primary} 0%, ${l(t).currentColorScheme.secondary} 100%)`})},null,4),d[0]||(d[0]=e("i",{class:"fas fa-palette ml-1 text-xs opacity-60"},null,-1))],8,G),_(v,{name:"dropdown"},{default:f(()=>[i.value?(s(),o("div",H,[(s(!0),o(g,null,k(l(t).ColorSchemes,(a,c)=>(s(),o("button",{key:c,class:m(["color-option",{active:l(t).colorScheme===c}]),title:a.name,onClick:$=>w(c)},[e("span",{class:"color-preview",style:h({background:`linear-gradient(135deg, ${a.primary} 0%, ${a.secondary} 100%)`})},null,4),e("span",W,p(a.name),1)],10,K))),128))])):u("",!0)]),_:1})]),e("button",{class:m(["theme-switch",{"is-dark":l(t).themeMode==="dark","is-auto":l(t).themeMode==="auto"}]),title:b.value,onClick:C},[d[1]||(d[1]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",Y,[e("div",Z,[l(t).themeMode==="light"?(s(),o("i",ee)):l(t).themeMode==="dark"?(s(),o("i",te)):(s(),o("i",oe))])])],10,X)])):r.mode==="segmented"?(s(),o("div",se,[(s(),o(g,null,k(y,a=>e("button",{key:a.value,class:m(["theme-segment",{active:l(t).themeMode===a.value}]),title:a.label,onClick:c=>T(a.value)},[e("i",{class:m(a.icon)},null,2),r.showLabel?(s(),o("span",le,p(a.shortLabel),1)):u("",!0)],10,ae)),64))])):u("",!0)]))}},ie=z(ne,[["__scopeId","data-v-d25ea0ef"]]);export{ie as T};
diff --git a/web/admin-spa/dist/assets/ThemeToggle-DRoGUDeP.js b/web/admin-spa/dist/assets/ThemeToggle-DRoGUDeP.js
deleted file mode 100644
index de7d8941..00000000
--- a/web/admin-spa/dist/assets/ThemeToggle-DRoGUDeP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as f,x as s,y as t,L as u,R as k,J as v,u as o,T as g,z as e,C as d,Q as p,ac as y,P as b}from"./vue-vendor-R8HMg95E.js";import{_ as T,a as w}from"./index-B3t2NHq9.js";const M={class:"theme-toggle-container"},C=["title"],L={key:"sun",class:"fas fa-sun"},x={key:"moon",class:"fas fa-moon"},B={key:"auto",class:"fas fa-circle-half-stroke"},S={key:1,class:"theme-switch-wrapper"},N=["title"],V={class:"switch-handle"},z={class:"handle-icon"},$={key:0,class:"fas fa-sun"},D={key:1,class:"fas fa-moon"},E={key:2,class:"fas fa-circle-half-stroke"},F={key:2,class:"theme-segmented"},I=["title","onClick"],J={key:0,class:"ml-1 hidden sm:inline"},O={__name:"ThemeToggle",props:{mode:{type:String,default:"compact",validator:l=>["compact","dropdown","segmented"].includes(l)},showLabel:{type:Boolean,default:!1}},setup(l){const a=w(),h=[{value:"light",label:"浅色模式",shortLabel:"浅色",icon:"fas fa-sun"},{value:"dark",label:"深色模式",shortLabel:"深色",icon:"fas fa-moon"},{value:"auto",label:"跟随系统",shortLabel:"自动",icon:"fas fa-circle-half-stroke"}],m=f(()=>{const n=h.find(i=>i.value===a.themeMode);return n?`点击切换主题 - ${n.label}`:"切换主题"}),r=()=>{a.cycleThemeMode()},_=n=>{a.setThemeMode(n)};return(n,i)=>(t(),s("div",M,[l.mode==="compact"?(t(),s("button",{key:0,class:"theme-toggle-button",title:m.value,onClick:r},[k(g,{mode:"out-in",name:"fade"},{default:v(()=>[o(a).themeMode==="light"?(t(),s("i",L)):o(a).themeMode==="dark"?(t(),s("i",x)):(t(),s("i",B))]),_:1})],8,C)):l.mode==="dropdown"?(t(),s("div",S,[e("button",{class:d(["theme-switch",{"is-dark":o(a).themeMode==="dark","is-auto":o(a).themeMode==="auto"}]),title:m.value,onClick:r},[i[0]||(i[0]=e("div",{class:"switch-bg"},[e("div",{class:"stars"},[e("span"),e("span"),e("span")]),e("div",{class:"clouds"},[e("span"),e("span")])],-1)),e("div",V,[e("div",z,[o(a).themeMode==="light"?(t(),s("i",$)):o(a).themeMode==="dark"?(t(),s("i",D)):(t(),s("i",E))])])],10,N)])):l.mode==="segmented"?(t(),s("div",F,[(t(),s(p,null,y(h,c=>e("button",{key:c.value,class:d(["theme-segment",{active:o(a).themeMode===c.value}]),title:c.label,onClick:P=>_(c.value)},[e("i",{class:d(c.icon)},null,2),l.showLabel?(t(),s("span",J,b(c.shortLabel),1)):u("",!0)],10,I)),64))])):u("",!0)]))}},j=T(O,[["__scopeId","data-v-78f09a8c"]]);export{j as T};
diff --git a/web/admin-spa/dist/assets/ThemeToggle-MCe3g2y3.css b/web/admin-spa/dist/assets/ThemeToggle-MCe3g2y3.css
new file mode 100644
index 00000000..fb32f2f0
--- /dev/null
+++ b/web/admin-spa/dist/assets/ThemeToggle-MCe3g2y3.css
@@ -0,0 +1 @@
+.theme-toggle-container[data-v-d25ea0ef]{position:relative;display:inline-flex;align-items:center}.theme-toggle-button[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.theme-toggle-button[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-toggle-button[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.theme-toggle-button[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.theme-toggle-button[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-toggle-button[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-d25ea0ef]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.theme-toggle-button[data-v-d25ea0ef]{position:relative;overflow:hidden}.theme-toggle-button[data-v-d25ea0ef]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(circle,rgba(59,130,246,.1),transparent);opacity:0;transition:opacity .2s ease;pointer-events:none}.theme-toggle-button[data-v-d25ea0ef]:hover:before{opacity:1}.theme-toggle-button i[data-v-d25ea0ef]{font-size:1rem;line-height:1.5rem;transition:transform .2s ease}.theme-toggle-button:hover i[data-v-d25ea0ef]{transform:scale(1.1)}.theme-toggle-button i.fa-sun[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-moon[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.theme-toggle-button i.fa-circle-half-stroke[data-v-d25ea0ef]{background:linear-gradient(90deg,#60a5fa,#2563eb);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.theme-switch-wrapper[data-v-d25ea0ef]{display:inline-flex;align-items:center}.theme-switch[data-v-d25ea0ef]{position:relative;width:76px;height:38px;border-radius:50px;padding:4px;cursor:pointer;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);background:linear-gradient(135deg,var(--primary-color) 0%,var(--secondary-color) 100%);border:2px solid rgba(255,255,255,.1);box-shadow:0 4px 15px color-mix(in srgb,var(--primary-color) 30%,transparent),inset 0 1px 2px #0000001a;overflow:hidden;display:flex;align-items:center}.theme-switch[data-v-d25ea0ef]:hover{transform:scale(1.05);box-shadow:0 6px 20px color-mix(in srgb,var(--primary-color) 40%,transparent),inset 0 1px 2px #0000001a}.theme-switch[data-v-d25ea0ef]:active{transform:scale(.98)}.theme-switch.is-dark[data-v-d25ea0ef]{background:linear-gradient(135deg,#1e293b,#334155);border-color:#94a3b833;box-shadow:0 4px 15px #00000080,inset 0 1px 2px #ffffff0d}.theme-switch.is-dark[data-v-d25ea0ef]:hover{box-shadow:0 6px 20px #0009,inset 0 1px 2px #ffffff0d}.theme-switch.is-auto[data-v-d25ea0ef]{background:linear-gradient(135deg,color-mix(in srgb,var(--accent-color) 70%,white) 0%,var(--accent-color) 25%,color-mix(in srgb,var(--primary-color) 80%,var(--accent-color)) 50%,var(--primary-color) 75%,var(--secondary-color) 100%);border-color:#fff3;position:relative;overflow:hidden;background-size:120% 120%;background-position:center;box-shadow:0 4px 15px color-mix(in srgb,var(--secondary-color) 25%,transparent),inset 0 1px 3px #0000001a,inset 0 -1px 3px #0000001a}.theme-switch.is-auto[data-v-d25ea0ef]:before{content:"";position:absolute;left:50%;top:10%;bottom:10%;width:1px;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.3),transparent);transform:translate(-50%);pointer-events:none}.switch-bg[data-v-d25ea0ef]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;overflow:hidden;pointer-events:none}.stars[data-v-d25ea0ef]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch.is-dark .stars[data-v-d25ea0ef]{opacity:1}.stars span[data-v-d25ea0ef]{position:absolute;display:block;width:2px;height:2px;background:#fff;border-radius:50%;opacity:.6}.stars span[data-v-d25ea0ef]:nth-child(1){top:25%;left:20%}.stars span[data-v-d25ea0ef]:nth-child(2){top:40%;left:40%;width:1.5px;height:1.5px}.stars span[data-v-d25ea0ef]:nth-child(3){top:60%;left:25%}.clouds[data-v-d25ea0ef]{position:absolute;width:100%;height:100%;opacity:0;transition:opacity .3s ease}.theme-switch:not(.is-dark):not(.is-auto) .clouds[data-v-d25ea0ef]{opacity:.7}.clouds span[data-v-d25ea0ef]{position:absolute;background:#ffffff4d;border-radius:100px}.clouds span[data-v-d25ea0ef]:nth-child(1){width:20px;height:8px;top:40%;left:15%}.clouds span[data-v-d25ea0ef]:nth-child(2){width:15px;height:6px;top:60%;left:35%}.switch-handle[data-v-d25ea0ef]{position:absolute;width:30px;height:30px;background:#fff;border-radius:50%;transition:all .4s cubic-bezier(.68,-.55,.265,1.55);box-shadow:0 2px 8px #0003,0 0 0 1px #0000000d;display:flex;align-items:center;justify-content:center;top:50%;transform:translateY(-50%) translate(0);left:4px}.theme-switch.is-dark .switch-handle[data-v-d25ea0ef]{transform:translateY(-50%) translate(38px);background:linear-gradient(135deg,#1e293b,#475569);box-shadow:0 2px 8px #0006,0 0 0 1px #ffffff1a}.theme-switch.is-auto .switch-handle[data-v-d25ea0ef]{transform:translateY(-50%) translate(19px);background:#ffffff40;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.35);box-shadow:0 4px 12px #0000001a,inset 0 0 8px #ffffff40}.handle-icon[data-v-d25ea0ef]{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.handle-icon i[data-v-d25ea0ef]{font-size:14px;transition:all .3s ease}.handle-icon .fa-sun[data-v-d25ea0ef]{color:#f59e0b;filter:drop-shadow(0 0 3px rgba(245,158,11,.5))}.handle-icon .fa-moon[data-v-d25ea0ef]{color:#fbbf24;filter:drop-shadow(0 0 3px rgba(251,191,36,.5))}.handle-icon .fa-circle-half-stroke[data-v-d25ea0ef]{color:#ffffffe6;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--accent-color) 50%,transparent));font-size:15px}.theme-segmented[data-v-d25ea0ef]{display:inline-flex;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.theme-segmented[data-v-d25ea0ef]{border-radius:9999px;padding:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-d25ea0ef]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.theme-segmented[data-v-d25ea0ef]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment[data-v-d25ea0ef]{padding:.375rem .75rem;font-size:.75rem;line-height:1rem;font-weight:500;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;border-radius:9999px;display:flex;align-items:center;gap:.25rem;cursor:pointer;position:relative}.theme-segment[data-v-d25ea0ef]:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.theme-segment[data-v-d25ea0ef]:hover{background-color:#ffffff4d}.theme-segment[data-v-d25ea0ef]:hover:is(.dark *){background-color:#4b55634d}.theme-segment[data-v-d25ea0ef]:hover{transform:scale(1.02)}.theme-segment.active[data-v-d25ea0ef]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.theme-segment.active[data-v-d25ea0ef]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.theme-segment i[data-v-d25ea0ef]{font-size:.75rem;line-height:1rem;transition:transform .2s ease}.fade-enter-active[data-v-d25ea0ef],.fade-leave-active[data-v-d25ea0ef]{transition:opacity .3s cubic-bezier(.4,0,.2,1)}.fade-enter-from[data-v-d25ea0ef],.fade-leave-to[data-v-d25ea0ef]{opacity:0}.dropdown-enter-active[data-v-d25ea0ef]{transition:all .3s cubic-bezier(.34,1.56,.64,1)}.dropdown-leave-active[data-v-d25ea0ef]{transition:all .2s cubic-bezier(.4,0,1,1)}.dropdown-enter-from[data-v-d25ea0ef]{opacity:0;transform:translateY(-10px) scale(.95)}.dropdown-leave-to[data-v-d25ea0ef]{opacity:0;transform:translateY(-5px) scale(.98)}@media (max-width: 640px){.theme-dropdown[data-v-d25ea0ef]{left:0;right:auto}.theme-segment span[data-v-d25ea0ef]{display:none}}.color-scheme-button[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;width:2.25rem;border-radius:9999px;background-color:#ffffffe6}.color-scheme-button[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.color-scheme-button[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-scheme-button[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-scheme-button[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.color-scheme-button[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.color-scheme-button[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.color-scheme-button[data-v-d25ea0ef]:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.color-scheme-button[data-v-d25ea0ef]{cursor:pointer}.color-scheme-button-lg[data-v-d25ea0ef]{display:flex;align-items:center;justify-content:center;height:2.25rem;border-radius:9999px;padding-left:.75rem;padding-right:.75rem;background-color:#ffffffe6}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){background-color:#1f2937e6}.color-scheme-button-lg[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]{border-width:1px;border-color:#e5e7eb80}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){border-color:#4b556380}.color-scheme-button-lg[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button-lg[data-v-d25ea0ef]:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button-lg[data-v-d25ea0ef]{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.color-scheme-button-lg[data-v-d25ea0ef]{cursor:pointer}.color-dot[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:transform .2s ease}.color-dot-lg[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.color-scheme-button:hover .color-dot[data-v-d25ea0ef]{transform:scale(1.1)}.color-menu[data-v-d25ea0ef]{position:absolute;left:0;top:100%;margin-top:.5rem;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.color-menu[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.color-menu[data-v-d25ea0ef]{border-radius:.75rem;--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.color-menu[data-v-d25ea0ef]:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.color-menu[data-v-d25ea0ef]{min-width:140px;padding:.5rem;z-index:50}.color-option[data-v-d25ea0ef]{display:flex;width:100%;align-items:center;gap:.5rem;border-radius:.5rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.color-option[data-v-d25ea0ef]:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.color-option[data-v-d25ea0ef]:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.color-option[data-v-d25ea0ef]:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-option[data-v-d25ea0ef]{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;cursor:pointer}.color-option.active[data-v-d25ea0ef]{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.color-option.active[data-v-d25ea0ef]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.color-option.active[data-v-d25ea0ef]{font-weight:500}.color-preview[data-v-d25ea0ef]{height:1.25rem;width:1.25rem;border-radius:9999px;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);flex-shrink:0}.color-name[data-v-d25ea0ef]{flex:1 1 0%;text-align:left}
diff --git a/web/admin-spa/dist/assets/TutorialView-Cpvhof5r.js b/web/admin-spa/dist/assets/TutorialView-Cpvhof5r.js
new file mode 100644
index 00000000..1c8795c0
--- /dev/null
+++ b/web/admin-spa/dist/assets/TutorialView-Cpvhof5r.js
@@ -0,0 +1,2 @@
+import{c as b,x as d,y as a,z as t,P as l,O as m,aT as v,R as f,Q as i,u as w,L as $,ac as h,C as k,r as _,I as A,M as P}from"./vue-vendor-DV7DYXbz.js";import{_ as O}from"./index-BahP9Xx9.js";function S(){const r=()=>{let u="";if(window.location.origin)u=window.location.origin;else{const p=window.location.protocol,y=window.location.hostname,g=window.location.port;u=p+"//"+y,g&&(p==="http:"&&g!=="80"||p==="https:"&&g!=="443")&&(u+=":"+g)}if(!u){const p=window.location.href,y=p.indexOf("/",8);if(y!==-1)u=p.substring(0,y);else return""}return u},x=b(()=>r()+"/api"),n=b(()=>r()+"/gemini"),s=b(()=>r()+"/openai"),c=b(()=>r()+"/droid/claude"),e=b(()=>r()+"/droid/openai");return{currentBaseUrl:x,geminiBaseUrl:n,openaiBaseUrl:s,droidClaudeBaseUrl:c,droidOpenaiBaseUrl:e}}const L={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},N={class:"mb-2 text-xs text-green-700 dark:text-green-300 sm:mb-3 sm:text-sm"},C={__name:"VerifyInstall",props:{terminal:{type:String,default:"终端"}},setup(r){return(x,n)=>(a(),d("div",L,[n[0]||(n[0]=t("h6",{class:"mb-2 text-sm font-medium text-green-800 dark:text-green-300 sm:text-base"}," 验证安装是否成功 ",-1)),t("p",N," 安装完成后,打开 "+l(r.terminal)+",输入以下命令: ",1),n[1]||(n[1]=t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"node --version"),t("div",{class:"whitespace-nowrap text-gray-300"},"npm --version")],-1)),n[2]||(n[2]=t("p",{class:"mt-2 text-xs text-green-700 dark:text-green-300 sm:text-sm"}," 如果显示版本号,说明安装成功了! ",-1))]))}},T={class:"mb-4 sm:mb-10 sm:mb-6"},R={class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},U={class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},K={class:"mb-4 text-sm text-gray-600 dark:text-gray-400 sm:mb-4 sm:mb-6 sm:text-base"},G={key:0,class:"node-install-section"},j={key:1,class:"node-install-section"},M={key:2,class:"node-install-section"},E={__name:"NodeInstallTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)},stepNumber:{type:[Number,String],default:1},toolName:{type:String,default:"CLI 工具"}},setup(r){return(x,n)=>(a(),d("div",T,[t("h4",R,[t("span",U,l(r.stepNumber),1),n[0]||(n[0]=m(" 安装 Node.js 环境 ",-1))]),t("p",K,l(r.toolName)+" 需要 Node.js 环境才能运行。 ",1),r.platform==="windows"?(a(),d("div",G,[n[1]||(n[1]=v(' Windows 安装方法
方法一:官网下载(推荐)
- 打开浏览器访问
https://nodejs.org/ - 点击 "LTS" 版本进行下载(推荐长期支持版本)
- 下载完成后双击
.msi 文件 - 按照安装向导完成安装,保持默认设置即可
方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
- • 建议使用 PowerShell 而不是 CMD
- • 如果遇到权限问题,尝试以管理员身份运行
- • 某些杀毒软件可能会误报,需要添加白名单
',1)),f(C,{terminal:"PowerShell 或 CMD"})])):r.platform==="macos"?(a(),d("div",j,[n[2]||(n[2]=v(' macOS 安装方法
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
# 更新 Homebrew
brew update
# 安装 Node.js
brew install node
方法二:官网下载
- 访问
https://nodejs.org/ - 下载适合 macOS 的 LTS 版本
- 打开下载的
.pkg 文件 - 按照安装程序指引完成安装
macOS 注意事项
- • 如果遇到权限问题,可能需要使用
sudo - • 首次运行可能需要在系统偏好设置中允许
- • 建议使用 Terminal 或 iTerm2
',1)),f(C,{terminal:"Terminal"})])):(a(),d("div",M,[n[3]||(n[3]=v(' Linux / WSL2 安装方法
方法一:使用 nvm(推荐)
nvm 可以方便地管理多个 Node.js 版本:
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载 shell 配置
source ~/.bashrc
# 安装最新 LTS 版本
nvm install --lts
方法二:使用包管理器
# Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# Fedora
sudo dnf install nodejs
# Arch Linux
sudo pacman -S nodejs npm
Linux / WSL2 注意事项
- • WSL2 用户建议在 Linux 子系统中安装,而不是 Windows
- • 使用 nvm 可以避免权限问题
- • 确保 shell 配置文件正确加载了 nvm
',1)),f(C,{terminal:"终端"})]))]))}},Y={class:"tutorial-content"},B={class:"mb-4 sm:mb-10 sm:mb-6"},V={class:"mb-4 rounded-xl border border-green-100 bg-gradient-to-r from-green-50 to-emerald-50 p-4 dark:border-green-500/40 dark:from-green-950/30 dark:to-emerald-950/30 sm:mb-6 sm:p-6"},D={class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"},H={class:"mb-4 overflow-x-auto rounded-lg bg-gray-900 p-3 font-mono text-xs text-green-400 sm:p-4 sm:text-sm"},q={class:"whitespace-nowrap text-gray-300"},W={class:"mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},z={class:"space-y-1 text-xs text-blue-700 dark:text-blue-300 sm:text-sm"},F={class:"mb-6 sm:mb-10"},J={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},Q={class:"space-y-4"},X={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},Z={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},tt={class:"whitespace-nowrap text-gray-300"},et={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},st={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},rt={class:"whitespace-nowrap text-gray-300"},ot={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},at={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},dt={class:"whitespace-nowrap text-gray-300"},lt={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},nt={class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},mt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},it={class:"whitespace-nowrap text-gray-300"},xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},gt={class:"whitespace-nowrap text-gray-300"},pt={class:"mt-6 rounded-lg border border-indigo-200 bg-indigo-50 p-3 dark:border-indigo-500/40 dark:bg-indigo-950/30 sm:p-4"},bt={class:"mb-3 space-y-2"},ut={class:"text-sm text-indigo-700 dark:text-indigo-300"},yt={class:"rounded bg-indigo-100 px-1 dark:bg-indigo-900"},vt={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ct={class:"space-y-4"},wt={class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"},ft={class:"space-y-1 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},kt={class:"mt-3 space-y-2"},ht={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},St={class:"mb-6 sm:mb-8"},Et={class:"rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:p-6"},It={class:"space-y-4"},Ct={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},$t={class:"whitespace-nowrap text-gray-300"},_t={class:"mb-8"},At={class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},Pt={class:"space-y-4"},Ot={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Lt={class:"px-3 pb-3 text-gray-600 dark:text-gray-400 sm:px-4 sm:pb-4"},Nt={class:"list-inside list-disc space-y-1 text-sm"},Tt={key:0,class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Rt={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Ut={class:"px-3 pb-3 text-gray-600 dark:text-gray-400 sm:px-4 sm:pb-4"},Kt={class:"list-inside list-disc space-y-1 text-sm"},Gt={class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},jt={key:1,class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Mt={__name:"ClaudeCodeTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const x=r,{currentBaseUrl:n}=S(),s=b(()=>({windows:"Windows",macos:"macOS",linux:"Linux / WSL2"})[x.platform]);return(c,e)=>(a(),d("div",Y,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Claude Code"},null,8,["platform"]),t("div",B,[e[10]||(e[10]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-green-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 安装 Claude Code ")],-1)),t("div",V,[e[8]||(e[8]=t("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[t("i",{class:"fas fa-download mr-2 text-green-600"}),m(" 安装 Claude Code ")],-1)),t("p",D,l(r.platform==="windows"?"打开 PowerShell 或 CMD":"打开终端")+",运行以下命令: ",1),t("div",H,[e[0]||(e[0]=t("div",{class:"mb-2"},"# 全局安装 Claude Code",-1)),t("div",q,l(r.platform==="windows"?"npm install -g @anthropic-ai/claude-code":"sudo npm install -g @anthropic-ai/claude-code"),1)]),e[9]||(e[9]=t("p",{class:"text-sm text-gray-600 dark:text-gray-400"}," 这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。 ",-1)),t("div",W,[e[7]||(e[7]=t("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-300 sm:text-base"}," 提示 ",-1)),t("ul",z,[r.platform==="windows"?(a(),d(i,{key:0},[e[1]||(e[1]=t("li",null,"• 建议使用 PowerShell 而不是 CMD,功能更强大",-1)),e[2]||(e[2]=t("li",null,"• 如果遇到权限问题,以管理员身份运行 PowerShell",-1))],64)):r.platform==="macos"?(a(),d(i,{key:1},[e[3]||(e[3]=t("li",null,"• 如果遇到权限问题,可以使用 sudo",-1)),e[4]||(e[4]=t("li",null,"• 或者使用 nvm 安装的 Node.js 避免权限问题",-1))],64)):(a(),d(i,{key:2},[e[5]||(e[5]=t("li",null,"• 使用 nvm 安装的 Node.js 可以避免 sudo",-1)),e[6]||(e[6]=t("li",null,"• WSL2 用户确保在 Linux 子系统中运行",-1))],64))])])]),e[11]||(e[11]=v('验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',1))]),t("div",F,[e[44]||(e[44]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),m(" 设置环境变量 ")],-1)),t("div",J,[e[28]||(e[28]=t("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[t("i",{class:"fas fa-cog mr-2 text-purple-600"}),m(" 配置 Claude Code 环境变量 ")],-1)),e[29]||(e[29]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),t("div",Q,[r.platform==="windows"?(a(),d(i,{key:0},[t("div",X,[e[13]||(e[13]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),e[14]||(e[14]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",Z,[t("div",tt,' $env:ANTHROPIC_BASE_URL = "'+l(w(n))+'" ',1),e[12]||(e[12]=t("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),e[15]||(e[15]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),t("div",et,[e[18]||(e[18]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),e[19]||(e[19]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),t("div",st,[e[16]||(e[16]=t("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),t("div",rt,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+l(w(n))+'", [System.EnvironmentVariableTarget]::User) ',1),e[17]||(e[17]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),e[20]||(e[20]=t("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))])],64)):(a(),d(i,{key:1},[t("div",ot,[e[22]||(e[22]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),e[23]||(e[23]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),t("div",at,[t("div",dt,' export ANTHROPIC_BASE_URL="'+l(w(n))+'" ',1),e[21]||(e[21]=t("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),e[24]||(e[24]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),t("div",lt,[e[26]||(e[26]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置(Shell 配置文件) ",-1)),t("p",nt," 将以下内容添加到你的 shell 配置文件中("+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc")+"): ",1),t("div",mt,[t("div",it,' export ANTHROPIC_BASE_URL="'+l(w(n))+'" ',1),e[25]||(e[25]=t("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),e[27]||(e[27]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"然后执行:",-1)),t("div",xt,[t("div",gt," source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)])])],64))])]),t("div",pt,[e[32]||(e[32]=t("h6",{class:"mb-2 font-medium text-indigo-800 dark:text-indigo-300"}," VSCode Claude 插件配置 ",-1)),e[33]||(e[33]=t("p",{class:"mb-3 text-sm text-indigo-700 dark:text-indigo-300"}," 如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置: ",-1)),t("div",bt,[t("p",ut,[e[30]||(e[30]=t("strong",null,"配置文件位置:",-1)),t("code",yt,l(r.platform==="windows"?"C:\\Users\\你的用户名\\.claude\\config.json":"~/.claude/config.json"),1)]),e[31]||(e[31]=t("p",{class:"text-xs text-indigo-600 dark:text-indigo-400"}," 💡 如果该文件不存在,请手动创建。 ",-1))]),e[34]||(e[34]=t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"{"),t("div",{class:"whitespace-nowrap text-gray-300"},'"primaryApiKey": "crs"'),t("div",{class:"whitespace-nowrap text-gray-300"},"}")],-1))]),t("div",vt,[e[42]||(e[42]=t("h6",{class:"mb-2 font-medium text-blue-800 dark:text-blue-300"},"验证环境变量设置",-1)),e[43]||(e[43]=t("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 设置完环境变量后,可以通过以下命令验证是否设置成功: ",-1)),t("div",ct,[t("div",null,[t("h6",wt,l(r.platform==="windows"?"在 PowerShell 中验证:":"在终端中验证:"),1),t("div",ft,[r.platform==="windows"?(a(),d(i,{key:0},[e[35]||(e[35]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:ANTHROPIC_BASE_URL",-1)),e[36]||(e[36]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:ANTHROPIC_AUTH_TOKEN",-1))],64)):(a(),d(i,{key:1},[e[37]||(e[37]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $ANTHROPIC_BASE_URL",-1)),e[38]||(e[38]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $ANTHROPIC_AUTH_TOKEN",-1))],64))])])]),t("div",kt,[e[40]||(e[40]=t("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[t("strong",null,"预期输出示例:")],-1)),t("div",ht,[t("div",null,l(w(n)),1),e[39]||(e[39]=t("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),e[41]||(e[41]=t("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])])]),t("div",St,[e[51]||(e[51]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"4"),m(" 开始使用 Claude Code ")],-1)),t("div",Et,[e[50]||(e[50]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 现在你可以开始使用 Claude Code 了! ",-1)),t("div",It,[e[49]||(e[49]=t("div",null,[t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 启动 Claude Code "),t("div",{class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},[t("div",{class:"whitespace-nowrap text-gray-300"},"claude")])],-1)),t("div",null,[e[48]||(e[48]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 在特定项目中使用 ",-1)),t("div",Ct,[e[45]||(e[45]=t("div",{class:"mb-2"},"# 进入你的项目目录",-1)),t("div",$t," cd "+l(r.platform==="windows"?"C:\\path\\to\\your\\project":"/path/to/your/project"),1),e[46]||(e[46]=t("div",{class:"mb-2 mt-2"},"# 启动 Claude Code",-1)),e[47]||(e[47]=t("div",{class:"whitespace-nowrap text-gray-300"},"claude",-1))])])])])]),t("div",_t,[t("h4",At,[e[52]||(e[52]=t("i",{class:"fas fa-wrench mr-2 text-red-600 sm:mr-3"},null,-1)),m(" "+l(s.value)+" 常见问题解决 ",1)]),t("div",Pt,[t("details",Ot,[e[58]||(e[58]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700 sm:p-4 sm:text-base"},' 安装时提示 "permission denied" 错误 ',-1)),t("div",Lt,[e[57]||(e[57]=t("p",{class:"mb-2"},"这通常是权限问题,尝试以下解决方法:",-1)),t("ul",Nt,[r.platform==="windows"?(a(),d(i,{key:0},[e[53]||(e[53]=t("li",null,"以管理员身份运行 PowerShell",-1)),e[54]||(e[54]=t("li",null,[m(" 或者配置 npm 使用用户目录:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"npm config set prefix %APPDATA%\\npm")],-1))],64)):(a(),d(i,{key:1},[e[55]||(e[55]=t("li",null,"使用 sudo 运行安装命令",-1)),e[56]||(e[56]=t("li",null,"或者使用 nvm 安装 Node.js 避免权限问题",-1))],64))])])]),r.platform==="windows"?(a(),d("details",Tt,e[59]||(e[59]=[v(' PowerShell 执行策略错误 如果遇到执行策略限制,运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
',2)]))):$("",!0),t("details",Rt,[e[67]||(e[67]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-700 sm:p-4 sm:text-base"}," 环境变量设置后不生效 ",-1)),t("div",Ut,[e[66]||(e[66]=t("p",{class:"mb-2"},"设置永久环境变量后需要:",-1)),t("ul",Kt,[r.platform==="windows"?(a(),d(i,{key:0},[e[60]||(e[60]=t("li",null,"重新启动 PowerShell 或 CMD",-1)),e[61]||(e[61]=t("li",null,"或者注销并重新登录 Windows",-1)),e[62]||(e[62]=t("li",null,[m(" 验证设置:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"echo $env:ANTHROPIC_BASE_URL")],-1))],64)):(a(),d(i,{key:1},[e[64]||(e[64]=t("li",null,"重新打开终端窗口",-1)),t("li",null,[e[63]||(e[63]=m(" 或者执行 ",-1)),t("code",Gt,"source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)]),e[65]||(e[65]=t("li",null,[m(" 验证设置:"),t("code",{class:"rounded bg-gray-200 px-1 text-xs dark:bg-gray-700 sm:text-sm"},"echo $ANTHROPIC_BASE_URL")],-1))],64))])])]),r.platform==="linux"?(a(),d("details",jt,e[68]||(e[68]=[v(' WSL2 中无法访问 Windows 文件 WSL2 可以通过 /mnt/ 路径访问 Windows 文件:
cd /mnt/c/Users/你的用户名/项目目录
',2)]))):$("",!0)])])]))}},Yt={class:"tutorial-section"},Bt={class:"mb-4 sm:mb-10 sm:mb-6"},Vt={class:"space-y-4"},Dt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Ht={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"whitespace-nowrap text-gray-300"},Wt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},zt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ft={class:"whitespace-nowrap text-gray-300"},Jt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Qt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Xt={class:"whitespace-nowrap text-gray-300"},Zt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},te={class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},ee={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},se={class:"whitespace-nowrap text-gray-300"},re={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},oe={class:"whitespace-nowrap text-gray-300"},ae={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},de={class:"mb-3 text-sm text-green-700 dark:text-green-300"},le={class:"space-y-1 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={__name:"GeminiCliTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const{geminiBaseUrl:x}=S();return(n,s)=>(a(),d("div",Yt,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Gemini CLI"},null,8,["platform"]),t("div",Bt,[s[27]||(s[27]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-green-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Gemini CLI 环境变量 ")],-1)),s[28]||(s[28]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 设置以下环境变量以连接到中转服务: ",-1)),t("div",Vt,[r.platform==="windows"?(a(),d(i,{key:0},[t("div",Dt,[s[2]||(s[2]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),s[3]||(s[3]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",Ht,[t("div",qt,' $env:GOOGLE_GEMINI_BASE_URL = "'+l(w(x))+'" ',1),s[0]||(s[0]=t("div",{class:"whitespace-nowrap text-gray-300"},'$env:GEMINI_API_KEY = "你的API密钥"',-1)),s[1]||(s[1]=t("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),s[4]||(s[4]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),t("div",Wt,[s[8]||(s[8]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),s[9]||(s[9]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),t("div",zt,[s[5]||(s[5]=t("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),t("div",Ft,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+l(w(x))+'", [System.EnvironmentVariableTarget]::User) ',1),s[6]||(s[6]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),s[7]||(s[7]=t("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),s[10]||(s[10]=t("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))])],64)):(a(),d(i,{key:1},[t("div",Jt,[s[13]||(s[13]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 临时设置(当前会话) ",-1)),s[14]||(s[14]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),t("div",Qt,[t("div",Xt,' export GOOGLE_GEMINI_BASE_URL="'+l(w(x))+'" ',1),s[11]||(s[11]=t("div",{class:"whitespace-nowrap text-gray-300"},'export GEMINI_API_KEY="你的API密钥"',-1)),s[12]||(s[12]=t("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),s[15]||(s[15]=t("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),t("div",Zt,[s[18]||(s[18]=t("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置(Shell 配置文件) ",-1)),t("p",te," 将以下内容添加到你的 shell 配置文件中("+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc")+"): ",1),t("div",ee,[t("div",se,' export GOOGLE_GEMINI_BASE_URL="'+l(w(x))+'" ',1),s[16]||(s[16]=t("div",{class:"whitespace-nowrap text-gray-300"},'export GEMINI_API_KEY="你的API密钥"',-1)),s[17]||(s[17]=t("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),s[19]||(s[19]=t("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"然后执行:",-1)),t("div",re,[t("div",oe," source "+l(r.platform==="macos"?"~/.zshrc":"~/.bashrc"),1)])])],64)),t("div",ae,[s[26]||(s[26]=t("h6",{class:"mb-2 font-medium text-green-800 dark:text-green-300"}," 验证 Gemini CLI 环境变量 ",-1)),t("p",de,l(r.platform==="windows"?"在 PowerShell 中验证:":"在终端中验证:"),1),t("div",le,[r.platform==="windows"?(a(),d(i,{key:0},[s[20]||(s[20]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GOOGLE_GEMINI_BASE_URL",-1)),s[21]||(s[21]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GEMINI_API_KEY",-1)),s[22]||(s[22]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $env:GEMINI_MODEL",-1))],64)):(a(),d(i,{key:1},[s[23]||(s[23]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GOOGLE_GEMINI_BASE_URL",-1)),s[24]||(s[24]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GEMINI_API_KEY",-1)),s[25]||(s[25]=t("div",{class:"whitespace-nowrap text-gray-300"},"echo $GEMINI_MODEL",-1))],64))])])])])]))}},me={class:"tutorial-section"},ie={class:"mb-4 sm:mb-10 sm:mb-6"},xe={class:"space-y-4"},ge={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},pe={class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},be={class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},ue={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ye={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ve={class:"whitespace-nowrap text-gray-300"},ce={class:"rounded-lg border border-orange-200 bg-orange-50 p-3 dark:border-orange-500/40 dark:bg-orange-950/30 sm:p-4"},we={class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},fe={class:"rounded bg-orange-100 px-1 dark:bg-orange-900"},ke={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},he={class:"whitespace-nowrap text-gray-300"},Se={class:"rounded-lg border border-purple-200 bg-purple-50 p-3 dark:border-purple-500/40 dark:bg-purple-950/30 sm:p-4"},Ee={class:"mb-1 mt-2 text-sm text-purple-600 dark:text-purple-400"},Ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ce={class:"whitespace-nowrap text-gray-300"},$e={class:"mb-1 text-sm text-purple-600 dark:text-purple-400"},_e={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ae={class:"whitespace-nowrap text-gray-300"},Pe={class:"rounded-lg border border-green-200 bg-green-50 p-3 dark:border-green-500/40 dark:bg-green-950/30 sm:p-4"},Oe={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Le={key:0,class:"whitespace-nowrap text-gray-300"},Ne={key:1,class:"whitespace-nowrap text-gray-300"},Te={class:"rounded-lg border border-gray-200 bg-gray-50 dark:border-gray-700 dark:bg-gray-800"},Re={class:"px-3 pb-3"},Ue={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ke={key:0,class:"whitespace-nowrap text-gray-300"},Ge={key:1,class:"whitespace-nowrap text-gray-300"},je={__name:"CodexTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const x=r,{openaiBaseUrl:n}=S(),s=b(()=>x.platform==="windows"?"%USERPROFILE%\\.codex\\config.toml":"~/.codex/config.toml"),c=b(()=>x.platform==="windows"?"%USERPROFILE%\\.codex\\auth.json":"~/.codex/auth.json"),e=b(()=>['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${n.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"']),u=b(()=>e.value.join(`
+`)),p=b(()=>x.platform==="windows"?`New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.codex" | Out-Null; "${u.value.replace(/"/g,'`"').replace(/\n/g,"`n")}" | Set-Content -Path "$env:USERPROFILE\\.codex\\config.toml" -Force`:`mkdir -p ~/.codex && printf '${u.value.replace(/\n/g,"\\n")}\\n' > ~/.codex/config.toml`),y=b(()=>x.platform==="windows"?`New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\\.codex" | Out-Null; '{"OPENAI_API_KEY": null}' | Set-Content -Path "$env:USERPROFILE\\.codex\\auth.json" -Force`:`mkdir -p ~/.codex && echo '{"OPENAI_API_KEY": null}' > ~/.codex/auth.json`);return(g,o)=>(a(),d("div",me,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Codex"},null,8,["platform"]),t("div",ie,[o[20]||(o[20]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-indigo-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Codex ")],-1)),o[21]||(o[21]=t("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 配置 Codex 以连接到中转服务: ",-1)),t("div",xe,[t("div",ge,[o[2]||(o[2]=t("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"}," 1. 配置文件 config.toml ",-1)),t("p",pe,[o[0]||(o[0]=m(" 在 ",-1)),t("code",be,l(s.value),1),o[1]||(o[1]=m(" 文件开头添加以下配置: ",-1))]),t("div",ue,[(a(!0),d(i,null,h(e.value,I=>(a(),d("div",{key:I,class:k(["whitespace-nowrap text-gray-300",{"mt-2":I===""}])},l(I||" "),3))),128))]),o[3]||(o[3]=t("p",{class:"mt-3 text-sm text-yellow-600 dark:text-yellow-400"},"一键写入命令:",-1)),t("div",ye,[t("div",ve,l(p.value),1)])]),t("div",ce,[o[6]||(o[6]=t("h6",{class:"mb-2 font-medium text-orange-800 dark:text-orange-300"}," 2. 认证文件 auth.json ",-1)),t("p",we,[o[4]||(o[4]=m(" 在 ",-1)),t("code",fe,l(c.value),1),o[5]||(o[5]=m(" 文件中配置: ",-1))]),o[7]||(o[7]=v('{
"OPENAI_API_KEY": null
}
⚠️ 必须将 OPENAI_API_KEY 设置为 null,否则 Codex 会优先使用它而忽略环境变量!
一键写入命令:
',3)),t("div",ke,[t("div",he,l(y.value),1)])]),t("div",Se,[o[11]||(o[11]=t("h6",{class:"mb-2 font-medium text-purple-800 dark:text-purple-300"}," 3. 设置环境变量 CRS_OAI_KEY ",-1)),o[12]||(o[12]=t("p",{class:"mb-3 text-sm text-purple-700 dark:text-purple-300"}," 设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx): ",-1)),r.platform==="windows"?(a(),d(i,{key:0},[o[8]||(o[8]=v(' 系统级环境变量(推荐):
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", "cr_xxxxxxxxxx", [System.EnvironmentVariableTarget]::Machine)
用户级环境变量 (不推荐)
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", "cr_xxxxxxxxxx", [System.EnvironmentVariableTarget]::User)
💡 设置后需要重新打开终端窗口才能生效
',5))],64)):(a(),d(i,{key:1},[o[9]||(o[9]=v(' 检查当前 shell:echo $SHELL
检查是否已有旧配置
如果之前配置过,建议先检查并清理旧配置:
# zsh
grep 'CRS_OAI_KEY' ~/.zshrc
# bash
grep 'CRS_OAI_KEY' ~/.bashrc
如果有输出,说明已配置过,可以手动编辑文件修改或删除旧配置
',2)),t("p",Ee,l(r.platform==="macos"?"zsh (macOS 默认)":"bash (Linux 默认)")+": ",1),t("div",Ie,[t("div",Ce,` echo 'export CRS_OAI_KEY="cr_xxxxxxxxxx"' >> `+l(r.platform==="macos"?"~/.zshrc && source ~/.zshrc":"~/.bashrc && source ~/.bashrc"),1)]),t("p",$e,l(r.platform==="macos"?"bash":"zsh")+": ",1),t("div",_e,[t("div",Ae,` echo 'export CRS_OAI_KEY="cr_xxxxxxxxxx"' >> `+l(r.platform==="macos"?"~/.bashrc && source ~/.bashrc":"~/.zshrc && source ~/.zshrc"),1)]),o[10]||(o[10]=t("p",{class:"text-sm text-purple-600 dark:text-purple-400"}," 💡 设置后需要重新打开终端窗口或执行 source 命令才能生效 ",-1))],64))]),t("div",Pe,[o[13]||(o[13]=t("h6",{class:"mb-2 font-medium text-green-800 dark:text-green-300"},"4. 验证环境变量",-1)),o[14]||(o[14]=t("p",{class:"mb-2 text-sm text-green-700 dark:text-green-300"}," 重新打开终端后,验证环境变量是否设置成功: ",-1)),t("div",Oe,[r.platform==="windows"?(a(),d("div",Le," Get-ChildItem Env:CRS_OAI_KEY ")):(a(),d("div",Ne,' echo "CRS_OAI_KEY: $CRS_OAI_KEY" '))])]),t("details",Te,[o[18]||(o[18]=t("summary",{class:"cursor-pointer p-3 text-sm font-medium text-gray-800 dark:text-gray-300"}," 如何删除环境变量 ",-1)),t("div",Re,[r.platform==="windows"?(a(),d(i,{key:0},[o[15]||(o[15]=v('删除用户级环境变量:
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", $null, [System.EnvironmentVariableTarget]::User)
删除系统级环境变量:
[System.Environment]::SetEnvironmentVariable("CRS_OAI_KEY", $null, [System.EnvironmentVariableTarget]::Machine)
',4))],64)):(a(),d(i,{key:1},[o[16]||(o[16]=v('从 zsh 配置中删除:
# 删除包含 CRS_OAI_KEY 的行
sed -i '' '/CRS_OAI_KEY/d' ~/.zshrc && source ~/.zshrc
从 bash 配置中删除:
# 删除包含 CRS_OAI_KEY 的行
sed -i '' '/CRS_OAI_KEY/d' ~/.bashrc && source ~/.bashrc
',4))],64)),o[17]||(o[17]=t("p",{class:"mb-1 text-sm text-gray-600 dark:text-gray-400"},"验证是否删除成功:",-1)),t("div",Ue,[r.platform==="windows"?(a(),d("div",Ke," Get-ChildItem Env:CRS_OAI_KEY ")):(a(),d("div",Ge,' echo "CRS_OAI_KEY: $CRS_OAI_KEY" '))])])]),o[19]||(o[19]=t("div",{class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},[t("p",{class:"text-sm text-yellow-700 dark:text-yellow-300"},[m(" 💡 请将示例中的 "),t("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"cr_xxxxxxxxxx"),m(" 替换为您的实际 API 密钥 ")])],-1))])])]))}},Me={class:"tutorial-section"},Ye={class:"mb-4 sm:mb-10 sm:mb-6"},Be={class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"},Ve={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},De={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},He={__name:"DroidCliTutorial",props:{platform:{type:String,required:!0,validator:r=>["windows","macos","linux"].includes(r)}},setup(r){const{droidClaudeBaseUrl:x,droidOpenaiBaseUrl:n}=S(),s=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${x.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${n.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(c,e)=>(a(),d("div",Me,[f(E,{platform:r.platform,"step-number":1,"tool-name":"Droid CLI"},null,8,["platform"]),t("div",Ye,[e[12]||(e[12]=t("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[t("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-blue-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"2"),m(" 配置 Droid CLI ")],-1)),t("p",Be,[e[6]||(e[6]=m(" Droid CLI 使用 ",-1)),e[7]||(e[7]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"~/.factory/config.json",-1)),e[8]||(e[8]=m(" 保存自定义模型; ",-1)),r.platform==="windows"?(a(),d(i,{key:0},[e[0]||(e[0]=m(" 在 Windows 中可直接编辑 ",-1)),e[1]||(e[1]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"C:\\Users\\你的用户名\\.factory\\config.json",-1)),e[2]||(e[2]=m("。 ",-1))],64)):(a(),d(i,{key:1},[e[3]||(e[3]=m(" 在终端中可使用 ",-1)),e[4]||(e[4]=t("code",{class:"rounded bg-gray-100 px-1 dark:bg-gray-800"},"vim ~/.factory/config.json",-1)),e[5]||(e[5]=m(" 编辑。 ",-1))],64))]),t("div",Ve,[e[9]||(e[9]=t("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),e[10]||(e[10]=t("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),t("div",De,[(a(!0),d(i,null,h(s.value,(u,p)=>(a(),d("div",{key:u+p,class:"whitespace-pre text-gray-300"},l(u),1))),128))]),e[11]||(e[11]=t("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])])]))}},qe={class:"card p-3 sm:p-6"},We={class:"mb-4 sm:mb-8"},ze={class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},Fe={class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"},Je={class:"mb-4 sm:mb-6"},Qe={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},Xe=["onClick"],Ze={class:"mb-4 sm:mb-8"},ts={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},es=["onClick"],ss={__name:"TutorialView",setup(r){const x=_("windows"),n=_("claude-code"),s=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],c=[{key:"claude-code",name:"Claude Code",icon:"fas fa-robot",component:Mt},{key:"codex",name:"Codex",icon:"fas fa-code",component:je},{key:"gemini-cli",name:"Gemini CLI",icon:"fab fa-google",component:ne},{key:"droid-cli",name:"Droid CLI",icon:"fas fa-terminal",component:He}],e=b(()=>{const p=c.find(y=>y.key===n.value);return p?p.name:"CLI 工具"}),u=b(()=>{const p=c.find(y=>y.key===n.value);return p?p.component:null});return(p,y)=>(a(),d("div",qe,[t("div",We,[t("h3",ze,[y[0]||(y[0]=t("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"},null,-1)),m(" "+l(e.value)+" 使用教程 ",1)]),t("p",Fe," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 "+l(e.value)+"。 ",1)]),t("div",Je,[t("div",Qe,[(a(),d(i,null,h(s,g=>t("button",{key:g.key,class:k(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",x.value===g.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:o=>x.value=g.key},[t("i",{class:k(g.icon)},null,2),m(" "+l(g.name),1)],10,Xe)),64))])]),t("div",Ze,[t("div",ts,[(a(),d(i,null,h(c,g=>t("button",{key:g.key,class:k(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-4 sm:py-3 sm:text-sm",n.value===g.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:o=>n.value=g.key},[t("i",{class:k(g.icon)},null,2),m(" "+l(g.name),1)],10,es)),64))])]),(a(),A(P(u.value),{platform:x.value},null,8,["platform"]))]))}},as=O(ss,[["__scopeId","data-v-c8fcc5f9"]]);export{as as T};
diff --git a/web/admin-spa/dist/assets/TutorialView-DeQdS06L.js b/web/admin-spa/dist/assets/TutorialView-DeQdS06L.js
deleted file mode 100644
index aa09f07b..00000000
--- a/web/admin-spa/dist/assets/TutorialView-DeQdS06L.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_}from"./index-B3t2NHq9.js";import{r as E,c as b,x as r,z as e,L as y,O as l,Q as x,ac as i,aT as m,P as s,y as d,C as p}from"./vue-vendor-R8HMg95E.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const A={class:"card p-3 sm:p-6"},P={class:"mb-4 sm:mb-8"},S={class:"flex flex-wrap gap-1 rounded-xl bg-gray-100 p-1 dark:bg-gray-800 sm:gap-2 sm:p-2"},O=["onClick"],N={key:0,class:"tutorial-content"},L={class:"mb-6 sm:mb-10"},T={class:"mb-4 rounded-xl border border-purple-100 bg-gradient-to-r from-purple-50 to-pink-50 p-4 dark:border-purple-500/40 dark:from-purple-950/30 dark:to-pink-950/30 sm:mb-6 sm:p-6"},G={class:"space-y-4"},R={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},U={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},M={class:"whitespace-nowrap text-gray-300"},H={class:"rounded-lg border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800 sm:p-4"},j={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},K={class:"whitespace-nowrap text-gray-300"},B={class:"mt-6 rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},D={class:"mt-3 space-y-2"},q={class:"rounded bg-gray-100 p-2 font-mono text-sm dark:bg-gray-700"},z={class:"mt-8"},V={class:"space-y-4"},$={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Y={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},W={class:"whitespace-nowrap text-gray-300"},J={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},F={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Q={class:"whitespace-nowrap text-gray-300"},X={class:"mt-8"},Z={class:"space-y-4"},tt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},at={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},st={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},rt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},dt={class:"space-y-2"},ot={class:"font-medium"},lt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},mt={class:"whitespace-nowrap text-gray-300"},xt={key:0,class:"space-y-2"},it={class:"font-medium"},nt={class:"text-xs"},gt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ft={class:"mt-8"},vt={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},pt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},bt={key:1,class:"tutorial-content"},ct={class:"mb-6 sm:mb-10"},ut={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},yt={class:"space-y-4"},wt={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},kt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ht={class:"whitespace-nowrap text-gray-300"},It={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},Ct={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},_t={class:"whitespace-nowrap text-gray-300"},Et={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},At={class:"whitespace-nowrap text-gray-300"},Pt={class:"mt-8"},St={class:"space-y-4"},Ot={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Nt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Lt={class:"whitespace-nowrap text-gray-300"},Tt={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},Gt={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Rt={class:"whitespace-nowrap text-gray-300"},Ut={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Mt={class:"whitespace-nowrap text-gray-300"},Ht={class:"mt-8"},jt={class:"space-y-4"},Kt={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Bt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Dt={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},qt={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},zt={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Vt={class:"space-y-2"},$t={class:"font-medium"},Yt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Wt={class:"whitespace-nowrap text-gray-300"},Jt={key:0,class:"space-y-2"},Ft={class:"font-medium"},Qt={class:"text-xs"},Xt={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Zt={class:"mt-8"},te={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},ee={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ae={key:2,class:"tutorial-content"},se={class:"mb-6 sm:mb-10"},re={class:"mb-4 rounded-xl border border-orange-100 bg-gradient-to-r from-orange-50 to-yellow-50 p-4 dark:border-orange-500/40 dark:from-orange-950/30 dark:to-yellow-950/30 sm:mb-6 sm:p-6"},de={class:"space-y-4"},oe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},le={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},me={class:"whitespace-nowrap text-gray-300"},xe={class:"rounded-lg border border-orange-200 bg-white p-3 dark:border-orange-700 dark:bg-gray-800 sm:p-4"},ie={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ne={class:"whitespace-nowrap text-gray-300"},ge={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},fe={class:"whitespace-nowrap text-gray-300"},ve={class:"mt-8"},pe={class:"space-y-4"},be={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},ce={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ue={class:"whitespace-nowrap text-gray-300"},ye={class:"rounded-lg border border-green-200 bg-white p-3 dark:border-green-700 dark:bg-gray-800 sm:p-4"},we={class:"mb-3 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},ke={class:"whitespace-nowrap text-gray-300"},he={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ie={class:"whitespace-nowrap text-gray-300"},Ce={class:"mt-8"},_e={class:"space-y-4"},Ee={class:"rounded-lg border border-yellow-200 bg-yellow-50 p-3 dark:border-yellow-500/40 dark:bg-yellow-950/30 sm:p-4"},Ae={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Pe={class:"mt-2 overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Se={class:"mt-3 space-y-3 text-xs text-yellow-700 dark:text-yellow-300"},Oe={class:"text-sm font-medium text-yellow-800 dark:text-yellow-200"},Ne={class:"space-y-2"},Le={class:"font-medium"},Te={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},Ge={class:"whitespace-nowrap text-gray-300"},Re={key:0,class:"space-y-2"},Ue={class:"font-medium"},Me={class:"text-xs"},He={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},je={class:"mt-8"},Ke={class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-500/40 dark:bg-blue-950/30 sm:p-4"},Be={class:"overflow-x-auto rounded bg-gray-900 p-2 font-mono text-xs text-green-400 sm:p-3 sm:text-sm"},De={__name:"TutorialView",setup(qe){const c=E("windows"),k=[{key:"windows",name:"Windows",icon:"fab fa-windows"},{key:"macos",name:"macOS",icon:"fab fa-apple"},{key:"linux",name:"Linux / WSL2",icon:"fab fa-linux"}],u=()=>{let f="";if(window.location.origin)f=window.location.origin;else{const t=window.location.protocol,a=window.location.hostname,n=window.location.port;f=t+"//"+a,n&&(t==="http:"&&n!=="80"||t==="https:"&&n!=="443")&&(f+=":"+n)}if(!f){const t=window.location.href,a=t.indexOf("/",8);if(a!==-1)f=t.substring(0,a);else return""}return f},g=b(()=>u()+"/api"),v=b(()=>u()+"/gemini"),h=b(()=>u()+"/openai"),I=b(()=>u()+"/droid/claude"),C=b(()=>u()+"/droid/openai"),o=b(()=>{const f=()=>{const t={title:"环境变量设置方法",description:"💡 将 OPENAI_API_KEY 设置为 null,然后设置环境变量 CRS_OAI_KEY 为您的 API 密钥(格式如 cr_xxxxxxxxxx)。"};switch(c.value){case"windows":return{...t,platform:{title:"Windows",command:"set CRS_OAI_KEY=cr_xxxxxxxxxx"}};case"macos":return{...t,platform:{title:"macOS",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 zsh (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc","","# 对于 bash",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bash_profile',"source ~/.bash_profile"]}};case"linux":return{...t,platform:{title:"Linux",command:"export CRS_OAI_KEY=cr_xxxxxxxxxx"},persistent:{title:"Shell 配置文件(持久保存)",description:"添加到您的 shell 配置文件中:",commands:["# 对于 bash (默认)",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.bashrc',"source ~/.bashrc","","# 对于 zsh",'echo "export CRS_OAI_KEY=cr_xxxxxxxxxx" >> ~/.zshrc',"source ~/.zshrc"]}};default:return t}};return{configToml:['model_provider = "crs"','model = "gpt-5-codex"','model_reasoning_effort = "high"',"disable_response_storage = true",'preferred_auth_method = "apikey"',"","[model_providers.crs]",'name = "crs"',`base_url = "${h.value}"`,'wire_api = "responses"',"requires_openai_auth = true",'env_key = "CRS_OAI_KEY"'],authJson:["{",' "OPENAI_API_KEY": null',"}"],authInstructions:f()}}),w=b(()=>["{",' "custom_models": ['," {",' "model_display_name": "Sonnet 4.5 [crs]",',' "model": "claude-sonnet-4-5-20250929",',` "base_url": "${I.value}",`,' "api_key": "你的API密钥",',' "provider": "anthropic",',' "max_tokens": 8192'," },"," {",' "model_display_name": "GPT5-Codex [crs]",',' "model": "gpt-5-codex",',` "base_url": "${C.value}",`,' "api_key": "你的API密钥",',' "provider": "openai",',' "max_tokens": 16384'," }"," ]","}"]);return(f,t)=>(d(),r("div",A,[t[133]||(t[133]=e("div",{class:"mb-4 sm:mb-8"},[e("h3",{class:"mb-3 flex items-center text-xl font-bold text-gray-900 dark:text-gray-100 sm:mb-4 sm:text-2xl"},[e("i",{class:"fas fa-graduation-cap mr-2 text-blue-600 sm:mr-3"}),l(" Claude Code 使用教程 ")]),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-lg"}," 跟着这个教程,你可以轻松在自己的电脑上安装并使用 Claude Code。 ")],-1)),e("div",P,[e("div",S,[(d(),r(x,null,i(k,a=>e("button",{key:a.key,class:p(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs font-semibold transition-all duration-300 sm:gap-2 sm:px-6 sm:py-3 sm:text-sm",c.value===a.key?"bg-white text-blue-600 shadow-sm dark:bg-blue-600 dark:text-white dark:shadow-blue-500/40":"text-gray-600 hover:bg-white/50 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white"]),onClick:n=>c.value=a.key},[e("i",{class:p(a.icon)},null,2),l(" "+s(a.name),1)],10,O)),64))])]),c.value==="windows"?(d(),r("div",N,[t[40]||(t[40]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
Windows 安装方法
方法一:官网下载(推荐)
- 打开浏览器访问
https://nodejs.org/ - 点击 "LTS" 版本进行下载(推荐长期支持版本)
- 下载完成后双击
.msi 文件 - 按照安装向导完成安装,保持默认设置即可
方法二:使用包管理器
如果你安装了 Chocolatey 或 Scoop,可以使用命令行安装:
# 使用 Chocolatey
choco install nodejs
# 或使用 Scoop
scoop install nodejs
Windows 注意事项
- • 建议使用 PowerShell 而不是 CMD
- • 如果遇到权限问题,尝试以管理员身份运行
- • 某些杀毒软件可能会误报,需要添加白名单
验证安装是否成功
安装完成后,打开 PowerShell 或 CMD,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开 PowerShell 或 CMD,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
这个命令会从 npm 官方仓库下载并安装最新版本的 Claude Code。
提示
- • 建议使用 PowerShell 而不是 CMD,功能更强大
- • 如果遇到权限问题,以管理员身份运行 PowerShell
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",L,[t[34]||(t[34]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-purple-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",T,[t[9]||(t[9]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-purple-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[10]||(t[10]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",G,[e("div",R,[t[1]||(t[1]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:PowerShell 临时设置(当前会话) ",-1)),t[2]||(t[2]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",U,[e("div",M,' $env:ANTHROPIC_BASE_URL = "'+s(g.value)+'" ',1),t[0]||(t[0]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:ANTHROPIC_AUTH_TOKEN = "你的API密钥" ',-1))]),t[3]||(t[3]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",H,[t[6]||(t[6]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:PowerShell 永久设置(用户级) ",-1)),t[7]||(t[7]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令设置用户级环境变量: ",-1)),e("div",j,[t[4]||(t[4]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",K,' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_BASE_URL", "'+s(g.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[5]||(t[5]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1))]),t[8]||(t[8]=m('查看已设置的环境变量:
# 查看用户级环境变量
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_BASE_URL", [System.EnvironmentVariableTarget]::User)
[System.Environment]::GetEnvironmentVariable("ANTHROPIC_AUTH_TOKEN", [System.EnvironmentVariableTarget]::User)
💡 设置后需要重新打开 PowerShell 窗口才能生效。
',3))])])]),t[35]||(t[35]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:C:\\Users\\你的用户名\\.claude\\config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",B,[t[14]||(t[14]=m('验证环境变量设置
设置完环境变量后,可以通过以下命令验证是否设置成功:
在 PowerShell 中验证:
echo $env:ANTHROPIC_BASE_URL
echo $env:ANTHROPIC_AUTH_TOKEN
在 CMD 中验证:
echo %ANTHROPIC_BASE_URL%
echo %ANTHROPIC_AUTH_TOKEN%
',3)),e("div",D,[t[12]||(t[12]=e("p",{class:"text-sm text-blue-700 dark:text-blue-300"},[e("strong",null,"预期输出示例:")],-1)),e("div",q,[e("div",null,s(g.value),1),t[11]||(t[11]=e("div",null,"cr_xxxxxxxxxxxxxxxxxx",-1))]),t[13]||(t[13]=e("p",{class:"text-xs text-blue-700 dark:text-blue-300"}," 💡 如果输出为空或显示变量名本身,说明环境变量设置失败,请重新设置。 ",-1))])]),e("div",z,[t[27]||(t[27]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[28]||(t[28]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",V,[e("div",$,[t[17]||(t[17]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 设置方法 ",-1)),t[18]||(t[18]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",Y,[e("div",W,' $env:GOOGLE_GEMINI_BASE_URL = "'+s(v.value)+'" ',1),t[15]||(t[15]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_API_KEY = "你的API密钥" ',-1)),t[16]||(t[16]=e("div",{class:"whitespace-nowrap text-gray-300"},' $env:GEMINI_MODEL = "gemini-2.5-pro" ',-1))]),t[19]||(t[19]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",J,[t[23]||(t[23]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," PowerShell 永久设置(用户级) ",-1)),t[24]||(t[24]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 PowerShell 中运行以下命令: ",-1)),e("div",F,[t[20]||(t[20]=e("div",{class:"mb-2"},"# 设置用户级环境变量(永久生效)",-1)),e("div",Q,' [System.Environment]::SetEnvironmentVariable("GOOGLE_GEMINI_BASE_URL", "'+s(v.value)+'", [System.EnvironmentVariableTarget]::User) ',1),t[21]||(t[21]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_API_KEY", "你的API密钥", [System.EnvironmentVariableTarget]::User) ',-1)),t[22]||(t[22]=e("div",{class:"whitespace-nowrap text-gray-300"},' [System.Environment]::SetEnvironmentVariable("GEMINI_MODEL", "gemini-2.5-pro", [System.EnvironmentVariableTarget]::User) ',-1))]),t[25]||(t[25]=e("p",{class:"mt-2 text-xs text-blue-700 dark:text-blue-300"}," 💡 设置后需要重新打开 PowerShell 窗口才能生效。 ",-1))]),t[26]||(t[26]=m(' 验证 Gemini CLI 环境变量
在 PowerShell 中验证:
echo $env:GOOGLE_GEMINI_BASE_URL
echo $env:GEMINI_API_KEY
echo $env:GEMINI_MODEL
',1))])]),e("div",X,[t[32]||(t[32]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[33]||(t[33]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",Z,[e("div",tt,[t[29]||(t[29]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[30]||(t[30]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",et,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[31]||(t[31]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",at,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",st,[e("p",null,s(o.value.authInstructions.description),1),e("h6",rt,s(o.value.authInstructions.title),1),e("div",dt,[e("p",ot,s(o.value.authInstructions.platform.title)+": ",1),e("div",lt,[e("div",mt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",xt,[e("p",it,s(o.value.authInstructions.persistent.title)+": ",1),e("p",nt,s(o.value.authInstructions.persistent.description),1),e("div",gt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",ft,[t[39]||(t[39]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Windows 中可直接编辑 C:\\Users\\你的用户名\\.factory\\config.json。
',2)),e("div",vt,[t[36]||(t[36]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[37]||(t[37]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",pt,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[38]||(t[38]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[41]||(t[41]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd C:\\path\\to\\your\\project
# 启动 Claude Code
claude
Windows 常见问题解决
安装时提示 "permission denied" 错误
这通常是权限问题,尝试以下解决方法:
- 以管理员身份运行 PowerShell
- 或者配置 npm 使用用户目录:
npm config set prefix %APPDATA%\\npm
PowerShell 执行策略错误
如果遇到执行策略限制,运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
环境变量设置后不生效
设置永久环境变量后需要:
- 重新启动 PowerShell 或 CMD
- 或者注销并重新登录 Windows
- 验证设置:
echo $env:ANTHROPIC_BASE_URL
',2))])):c.value==="macos"?(d(),r("div",bt,[t[85]||(t[85]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
macOS 安装方法
方法一:使用 Homebrew(推荐)
如果你已经安装了 Homebrew,使用它安装 Node.js 会更方便:
# 更新 Homebrew
brew update
# 安装 Node.js
brew install node
方法二:官网下载
- 访问
https://nodejs.org/ - 下载适合 macOS 的 LTS 版本
- 打开下载的
.pkg 文件 - 按照安装程序指引完成安装
macOS 注意事项
- • 如果遇到权限问题,可能需要使用
sudo - • 首次运行可能需要在系统偏好设置中允许
- • 建议使用 Terminal 或 iTerm2
验证安装是否成功
安装完成后,打开 Terminal,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开 Terminal,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
如果遇到权限问题,可以使用 sudo:
sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",ct,[t[79]||(t[79]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",ut,[t[54]||(t[54]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[55]||(t[55]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",yt,[e("div",wt,[t[43]||(t[43]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[44]||(t[44]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",kt,[e("div",ht,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[42]||(t[42]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[45]||(t[45]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",It,[t[52]||(t[52]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[53]||(t[53]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 编辑你的 shell 配置文件(根据你使用的 shell): ",-1)),e("div",Ct,[t[46]||(t[46]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",_t,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[47]||(t[47]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[48]||(t[48]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Et,[t[49]||(t[49]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",At,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bash_profile `,1),t[50]||(t[50]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bash_profile `,-1)),t[51]||(t[51]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])])])]),t[80]||(t[80]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:~/.claude/config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",Pt,[t[72]||(t[72]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[73]||(t[73]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",St,[e("div",Ot,[t[58]||(t[58]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," Terminal 设置方法 ",-1)),t[59]||(t[59]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 在 Terminal 中运行以下命令: ",-1)),e("div",Nt,[e("div",Lt,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[56]||(t[56]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[57]||(t[57]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[60]||(t[60]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",Tt,[t[69]||(t[69]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[70]||(t[70]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",Gt,[t[61]||(t[61]=e("div",{class:"mb-2"},"# 对于 zsh (默认)",-1)),e("div",Rt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[62]||(t[62]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[63]||(t[63]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[64]||(t[64]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))]),e("div",Ut,[t[65]||(t[65]=e("div",{class:"mb-2"},"# 对于 bash",-1)),e("div",Mt,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bash_profile `,1),t[66]||(t[66]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bash_profile `,-1)),t[67]||(t[67]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bash_profile `,-1)),t[68]||(t[68]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bash_profile",-1))])]),t[71]||(t[71]=m(' 验证 Gemini CLI 环境变量
在 Terminal 中验证:
echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ht,[t[77]||(t[77]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[78]||(t[78]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",jt,[e("div",Kt,[t[74]||(t[74]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[75]||(t[75]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Bt,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[76]||(t[76]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Dt,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",qt,[e("p",null,s(o.value.authInstructions.description),1),e("h6",zt,s(o.value.authInstructions.title),1),e("div",Vt,[e("p",$t,s(o.value.authInstructions.platform.title)+": ",1),e("div",Yt,[e("div",Wt,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Jt,[e("p",Ft,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Qt,s(o.value.authInstructions.persistent.description),1),e("div",Xt,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])])]),e("div",Zt,[t[84]||(t[84]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;你可以在 Finder 中按 ⌘ + Shift + G 并输入路径,或运行 open ~/.factory 快速打开配置目录。
',2)),e("div",te,[t[81]||(t[81]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[82]||(t[82]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",ee,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[83]||(t[83]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[86]||(t[86]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude
macOS 常见问题解决
安装时提示权限错误
尝试以下解决方法:
- 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code - 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global
macOS 安全设置阻止运行
如果系统阻止运行 Claude Code:
- 打开"系统偏好设置" → "安全性与隐私"
- 点击"仍要打开"或"允许"
- 或者在 Terminal 中运行:
sudo spctl --master-disable
环境变量不生效
检查以下几点:
- 确认修改了正确的配置文件(.zshrc 或 .bash_profile)
- 重新启动 Terminal
- 验证设置:
echo $ANTHROPIC_BASE_URL
',2))])):c.value==="linux"?(d(),r("div",ae,[t[131]||(t[131]=m('1 安装 Node.js 环境
Claude Code 需要 Node.js 环境才能运行。
Linux 安装方法
方法一:使用官方仓库(推荐)
# 添加 NodeSource 仓库
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# 安装 Node.js
sudo apt-get install -y nodejs
方法二:使用系统包管理器
虽然版本可能不是最新的,但对于基本使用已经足够:
# Ubuntu/Debian
sudo apt update
sudo apt install nodejs npm
# CentOS/RHEL/Fedora
sudo dnf install nodejs npm
Linux 注意事项
- • 某些发行版可能需要安装额外的依赖
- • 如果遇到权限问题,使用
sudo - • 确保你的用户在 npm 的全局目录有写权限
验证安装是否成功
安装完成后,打开终端,输入以下命令:
node --version
npm --version
如果显示版本号,说明安装成功了!
2 安装 Claude Code
安装 Claude Code
打开终端,运行以下命令:
# 全局安装 Claude Code
npm install -g @anthropic-ai/claude-code
如果遇到权限问题,可以使用 sudo:
sudo npm install -g @anthropic-ai/claude-code
验证 Claude Code 安装
安装完成后,输入以下命令检查是否安装成功:
如果显示版本号,恭喜你!Claude Code 已经成功安装了。
',2)),e("div",se,[t[128]||(t[128]=e("h4",{class:"mb-3 flex items-center text-lg font-semibold text-gray-800 dark:text-gray-300 sm:mb-4 sm:text-xl"},[e("span",{class:"mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-orange-500 text-xs font-bold text-white sm:mr-3 sm:h-8 sm:w-8 sm:text-sm"},"3"),l(" 设置环境变量 ")],-1)),e("div",re,[t[99]||(t[99]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-cog mr-2 text-orange-600"}),l(" 配置 Claude Code 环境变量 ")],-1)),t[100]||(t[100]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 为了让 Claude Code 连接到你的中转服务,需要设置两个环境变量: ",-1)),e("div",de,[e("div",oe,[t[88]||(t[88]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法一:临时设置(当前会话) ",-1)),t[89]||(t[89]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",le,[e("div",me,' export ANTHROPIC_BASE_URL="'+s(g.value)+'" ',1),t[87]||(t[87]=e("div",{class:"whitespace-nowrap text-gray-300"},' export ANTHROPIC_AUTH_TOKEN="你的API密钥" ',-1))]),t[90]||(t[90]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"},' 💡 记得将 "你的API密钥" 替换为在上方 "API Keys" 标签页中创建的实际密钥。 ',-1))]),e("div",xe,[t[97]||(t[97]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 方法二:永久设置 ",-1)),t[98]||(t[98]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"编辑你的 shell 配置文件:",-1)),e("div",ie,[t[91]||(t[91]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ne,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.bashrc `,1),t[92]||(t[92]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.bashrc `,-1)),t[93]||(t[93]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",ge,[t[94]||(t[94]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",fe,` echo 'export ANTHROPIC_BASE_URL="`+s(g.value)+`"' >> ~/.zshrc `,1),t[95]||(t[95]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export ANTHROPIC_AUTH_TOKEN="你的API密钥"' >> ~/.zshrc `,-1)),t[96]||(t[96]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])])])]),e("div",ve,[t[117]||(t[117]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-robot mr-2 text-green-600"}),l(" 配置 Gemini CLI 环境变量 ")],-1)),t[118]||(t[118]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用 Gemini CLI,需要设置以下环境变量: ",-1)),e("div",pe,[e("div",be,[t[103]||(t[103]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 终端设置方法 ",-1)),t[104]||(t[104]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"},"在终端中运行以下命令:",-1)),e("div",ce,[e("div",ue,' export GOOGLE_GEMINI_BASE_URL="'+s(v.value)+'" ',1),t[101]||(t[101]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_API_KEY="你的API密钥" ',-1)),t[102]||(t[102]=e("div",{class:"whitespace-nowrap text-gray-300"},' export GEMINI_MODEL="gemini-2.5-pro" ',-1))]),t[105]||(t[105]=e("p",{class:"mt-2 text-xs text-yellow-700 dark:text-yellow-400"}," 💡 使用与 Claude Code 相同的 API 密钥即可。 ",-1))]),e("div",ye,[t[114]||(t[114]=e("h6",{class:"mb-2 text-sm font-medium text-gray-800 dark:text-gray-300 sm:text-base"}," 永久设置方法 ",-1)),t[115]||(t[115]=e("p",{class:"mb-3 text-sm text-gray-600 dark:text-gray-400"}," 添加到你的 shell 配置文件: ",-1)),e("div",we,[t[106]||(t[106]=e("div",{class:"mb-2"},"# 对于 bash (默认)",-1)),e("div",ke,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.bashrc `,1),t[107]||(t[107]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.bashrc `,-1)),t[108]||(t[108]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.bashrc `,-1)),t[109]||(t[109]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.bashrc",-1))]),e("div",he,[t[110]||(t[110]=e("div",{class:"mb-2"},"# 对于 zsh",-1)),e("div",Ie,` echo 'export GOOGLE_GEMINI_BASE_URL="`+s(v.value)+`"' >> ~/.zshrc `,1),t[111]||(t[111]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_API_KEY="你的API密钥"' >> ~/.zshrc `,-1)),t[112]||(t[112]=e("div",{class:"whitespace-nowrap text-gray-300"},` echo 'export GEMINI_MODEL="gemini-2.5-pro"' >> ~/.zshrc `,-1)),t[113]||(t[113]=e("div",{class:"whitespace-nowrap text-gray-300"},"source ~/.zshrc",-1))])]),t[116]||(t[116]=m(' 验证 Gemini CLI 环境变量
在终端中验证:
echo $GOOGLE_GEMINI_BASE_URL
echo $GEMINI_API_KEY
echo $GEMINI_MODEL
',1))])]),e("div",Ce,[t[122]||(t[122]=e("h5",{class:"mb-2 flex items-center text-base font-semibold text-gray-800 dark:text-gray-200 sm:mb-3 sm:text-lg"},[e("i",{class:"fas fa-code mr-2 text-indigo-600"}),l(" 配置 Codex 环境变量 ")],-1)),t[123]||(t[123]=e("p",{class:"mb-3 text-sm text-gray-700 dark:text-gray-300 sm:mb-4 sm:text-base"}," 如果你使用支持 OpenAI API 的工具(如 Codex),需要设置以下环境变量: ",-1)),e("div",_e,[e("div",Ee,[t[119]||(t[119]=e("h6",{class:"mb-2 font-medium text-yellow-800 dark:text-yellow-300"},"Codex 配置文件",-1)),t[120]||(t[120]=e("p",{class:"mb-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/config.toml"),l(" 文件开头添加以下配置: ")],-1)),e("div",Ae,[(d(!0),r(x,null,i(o.value.configToml,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))]),t[121]||(t[121]=e("p",{class:"mt-3 text-sm text-yellow-700 dark:text-yellow-300"},[l(" 在 "),e("code",{class:"rounded bg-yellow-100 px-1 dark:bg-yellow-900"},"~/.codex/auth.json"),l(" 文件中配置API密钥: ")],-1)),e("div",Pe,[(d(!0),r(x,null,i(o.value.authJson,a=>(d(),r("div",{key:a,class:"whitespace-nowrap text-gray-300"},s(a),1))),128))]),e("div",Se,[e("p",null,s(o.value.authInstructions.description),1),e("h6",Oe,s(o.value.authInstructions.title),1),e("div",Ne,[e("p",Le,s(o.value.authInstructions.platform.title)+": ",1),e("div",Te,[e("div",Ge,s(o.value.authInstructions.platform.command),1)])]),o.value.authInstructions.persistent?(d(),r("div",Re,[e("p",Ue,s(o.value.authInstructions.persistent.title)+": ",1),e("p",Me,s(o.value.authInstructions.persistent.description),1),e("div",He,[(d(!0),r(x,null,i(o.value.authInstructions.persistent.commands,a=>(d(),r("div",{key:a,class:p(["whitespace-nowrap text-gray-300",{"mt-2":a===""}])},s(a),3))),128))])])):y("",!0)])])])]),t[129]||(t[129]=m(' VSCode Claude 插件配置
如果使用 VSCode 的 Claude 插件,需要在配置文件中进行设置:
配置文件位置:~/.claude/config.json
💡 如果该文件不存在,请手动创建。
',1)),e("div",je,[t[127]||(t[127]=m(' 配置 Droid CLI
Droid CLI 使用 ~/.factory/config.json 保存自定义模型;在 Linux 或 WSL2 中,可直接编辑 /home/你的用户名/.factory/config.json 或在终端运行 xdg-open ~/.factory 打开目录。
',2)),e("div",Ke,[t[124]||(t[124]=e("h6",{class:"mb-2 text-sm font-medium text-blue-800 dark:text-blue-200 sm:text-base"}," 配置文件示例 ",-1)),t[125]||(t[125]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-200"}," 将以下内容追加到配置文件中,并替换示例中的域名和 API 密钥: ",-1)),e("div",Be,[(d(!0),r(x,null,i(w.value,(a,n)=>(d(),r("div",{key:a+n,class:"whitespace-pre text-gray-300"},s(a),1))),128))]),t[126]||(t[126]=e("p",{class:"mt-3 text-xs text-blue-700 dark:text-blue-200 sm:text-sm"}," 💡 在 Droid CLI 中选择自定义模型即可使用新的 Droid 账号池;确保服务地址可被本地访问。 ",-1))])]),t[130]||(t[130]=m('4 开始使用 Claude Code
现在你可以开始使用 Claude Code 了!
在特定项目中使用
# 进入你的项目目录
cd /path/to/your/project
# 启动 Claude Code
claude
Linux 常见问题解决
安装时提示权限错误
尝试以下解决方法:
- 使用 sudo 安装:
sudo npm install -g @anthropic-ai/claude-code - 或者配置 npm 使用用户目录:
npm config set prefix ~/.npm-global - 然后添加到 PATH:
export PATH=~/.npm-global/bin:$PATH
缺少依赖库
某些 Linux 发行版需要安装额外依赖:
# Ubuntu/Debian
sudo apt install build-essential
# CentOS/RHEL
sudo dnf groupinstall "Development Tools"
环境变量不生效
检查以下几点:
- 确认修改了正确的配置文件(.bashrc 或 .zshrc)
- 重新启动终端或运行
source ~/.bashrc - 验证设置:
echo $ANTHROPIC_BASE_URL
',2))]),t[132]||(t[132]=e("div",{class:"rounded-xl bg-gradient-to-r from-blue-500 to-purple-600 p-4 text-center text-white sm:p-6"},[e("h5",{class:"mb-2 text-lg font-semibold sm:text-xl"},"🎉 恭喜你!"),e("p",{class:"mb-3 text-sm text-blue-100 sm:mb-4 sm:text-base"}," 你已经成功安装并配置了 Claude Code,现在可以开始享受 AI 编程助手带来的便利了。 "),e("p",{class:"text-xs text-blue-200 sm:text-sm"}," 如果在使用过程中遇到任何问题,可以查看官方文档或社区讨论获取帮助。 ")],-1))])):y("",!0)]))}},We=_(De,[["__scopeId","data-v-01fa9f4e"]]);export{We as default};
diff --git a/web/admin-spa/dist/assets/TutorialView-DfJPWFZG.css b/web/admin-spa/dist/assets/TutorialView-DfJPWFZG.css
new file mode 100644
index 00000000..88492f3b
--- /dev/null
+++ b/web/admin-spa/dist/assets/TutorialView-DfJPWFZG.css
@@ -0,0 +1 @@
+.tutorial-container[data-v-c8fcc5f9]{min-height:calc(100vh - 300px)}
diff --git a/web/admin-spa/dist/assets/UserDashboardView-CAUM2yXW.js b/web/admin-spa/dist/assets/UserDashboardView-CAUM2yXW.js
deleted file mode 100644
index d0124cf1..00000000
--- a/web/admin-spa/dist/assets/UserDashboardView-CAUM2yXW.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as w,_ as E,o as Y,x as r,L as p,y as a,z as e,Y as W,K as F,aq as O,P as l,O as D,C as M,c as S,q as H,R as j,Q as N,ac as q,aV as G,aT as Q,u as J,aU as X}from"./vue-vendor-R8HMg95E.js";import{_ as V,b as z,s as _,a as Z}from"./index-B3t2NHq9.js";import{T as ee}from"./ThemeToggle-DRoGUDeP.js";import{C as te}from"./ConfirmModal-BAFPIqcc.js";import se from"./TutorialView-DeQdS06L.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-4 flex items-center justify-between"},de=["disabled"],ie=["disabled"],ne={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ue={class:"flex"},ce={class:"ml-3"},me={class:"text-sm text-red-700"},xe={class:"flex justify-end space-x-3 pt-4"},ge=["disabled"],ve=["disabled"],ye={key:0,class:"flex items-center"},pe={key:1},fe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},he={class:"flex items-start"},ke={class:"ml-3 flex-1"},we={class:"mt-3"},be={class:"rounded-md border border-green-300 bg-white p-3"},_e={class:"flex items-center justify-between"},$e={class:"break-all font-mono text-sm text-gray-900"},Ae={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(x,{emit:b}){const f=x,h=b,m=z(),g=w(!1),v=w(""),y=w(null),s=E({name:"",description:""}),o=()=>{s.name="",s.description="",v.value="",y.value=null},$=async()=>{var i,t;if(!s.name.trim()){v.value="API key name is required";return}g.value=!0,v.value="";try{const d={name:s.name.trim(),description:s.description.trim()||void 0},k=await m.createApiKey(d);k.success?(y.value=k.apiKey,_("API key created successfully!","success")):v.value=k.message||"Failed to create API key"}catch(d){console.error("Create API key error:",d),v.value=((t=(i=d.response)==null?void 0:i.data)==null?void 0:t.message)||d.message||"Failed to create API key"}finally{g.value=!1}},A=async i=>{try{await navigator.clipboard.writeText(i),_("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),_("Failed to copy to clipboard","error")}},C=()=>{o(),h("created"),h("close")};return Y(()=>f.show,i=>{i&&o()}),(i,t)=>x.show?(a(),r("div",oe,[e("div",le,[e("div",re,[e("div",ae,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=d=>i.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=d=>s.name=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,de),[[O,s.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=d=>s.description=d),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:g.value,placeholder:"Optional description",rows:"3"},null,8,ie),[[O,s.description]])]),v.value?(a(),r("div",ne,[e("div",ue,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ce,[e("p",me,l(v.value),1)])])])):p("",!0),e("div",xe,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:g.value,type:"button",onClick:t[3]||(t[3]=d=>i.$emit("close"))}," Cancel ",8,ge),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:g.value||!s.name.trim(),type:"submit"},[g.value?(a(),r("span",ye,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),D(" Creating... ",-1)]))):(a(),r("span",pe,"Create API Key"))],8,ve)])],32),y.value?(a(),r("div",fe,[e("div",he,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",ke,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",we,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),D(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",be,[e("div",_e,[e("code",$e,l(y.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=d=>A(y.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:C}," Done ")])])])])):p("",!0)])])])):p("",!0)}},Ce=V(Ae,[["__scopeId","data-v-cc42dc9a"]]),Me={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},De={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Ie={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},Ue={key:0,class:"space-y-4"},je={class:"mt-1 text-sm text-gray-900"},Ke={key:0},Te={class:"mt-1 text-sm text-gray-900"},Ve={class:"mt-1 flex items-center space-x-2"},Be={class:"flex-1"},Se={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Le={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Fe={class:"font-mono text-sm text-gray-900"},Ne={class:"flex flex-col space-y-1"},qe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},He={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Re={key:0,class:"mt-1 text-xs text-gray-500"},Oe={class:"mt-1"},Ee={key:1,class:"border-t border-gray-200 pt-4"},Ye={class:"grid grid-cols-2 gap-4 text-sm"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"ml-2 font-medium"},Je={class:"ml-2 font-medium"},Xe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Ze={class:"flex justify-between"},et={class:"text-gray-900"},tt={key:0,class:"flex justify-between"},st={class:"text-gray-900"},ot={key:1,class:"flex justify-between"},lt={class:"flex justify-end pt-4"},rt={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(x,{emit:b}){const f=b,h=w(!1),m=y=>y>=1e6?(y/1e6).toFixed(1)+"M":y>=1e3?(y/1e3).toFixed(1)+"K":y.toString(),g=y=>y?new Date(y).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,v=async y=>{try{await navigator.clipboard.writeText(y),_("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),_("Failed to copy to clipboard","error")}};return(y,s)=>x.show?(a(),r("div",Me,[e("div",De,[e("div",Ie,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>f("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),x.apiKey?(a(),r("div",Ue,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",je,l(x.apiKey.name),1)]),x.apiKey.description?(a(),r("div",Ke,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,l(x.apiKey.description),1)])):p("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Ve,[e("div",Be,[h.value?(a(),r("div",Se,[e("code",ze,l(x.apiKey.key||"Not available"),1)])):(a(),r("div",Le,[e("code",Fe,l(x.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Ne,[x.apiKey.key?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=o=>h.value=!h.value)},[h.value?(a(),r("svg",qe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(a(),r("svg",He,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),D(" "+l(h.value?"Hide":"Show"),1)])):p("",!0),h.value&&x.apiKey.key?(a(),r("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>v(x.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Copy ",-1)]))):p("",!0)])]),x.apiKey.key?p("",!0):(a(),r("p",Re," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",Oe,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",x.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(x.apiKey.isActive?"Active":"Disabled"),3)])]),x.apiKey.usage?(a(),r("div",Ee,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Ye,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",We,l(m(x.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ge,l(m(x.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",Qe,l(m(x.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Je,"$"+l((x.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):p("",!0),e("div",Xe,[e("div",Ze,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",et,l(g(x.apiKey.createdAt)),1)]),x.apiKey.lastUsedAt?(a(),r("div",tt,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",st,l(g(x.apiKey.lastUsedAt)),1)])):p("",!0),x.apiKey.expiresAt?(a(),r("div",ot,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:M(["font-medium",new Date(x.apiKey.expiresAt)f("close"))}," Close ")])])):p("",!0)])])])):p("",!0)}},at=V(rt,[["__scopeId","data-v-3bc05568"]]),dt={class:"space-y-6"},it={class:"sm:flex sm:items-center"},nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},ut=["disabled"],ct={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},mt={class:"flex"},xt={class:"ml-3"},gt={class:"text-sm text-yellow-700"},vt={key:1,class:"py-12 text-center"},yt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},pt={class:"divide-y divide-gray-200",role:"list"},ft={class:"flex items-center justify-between"},ht={class:"flex items-center"},kt={class:"flex-shrink-0"},wt={class:"ml-4"},bt={class:"flex items-center"},_t={class:"text-sm font-medium text-gray-900"},$t={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},At={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},Ct={class:"mt-1"},Mt={class:"text-sm text-gray-500"},Dt={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},It={key:0},Pt={key:1},Ut={key:2},jt={key:3},Kt={class:"flex items-center space-x-2"},Tt={class:"text-right text-xs text-gray-500"},Vt={key:0},Bt={class:"flex items-center space-x-1"},St=["onClick"],zt=["onClick"],Lt={key:3,class:"py-12 text-center"},Ft={class:"mt-6"},Nt={__name:"UserApiKeysManager",setup(x){const b=z(),f=w(!0),h=w([]),m=S(()=>{var u;return((u=b.config)==null?void 0:u.maxApiKeysPerUser)||5}),g=S(()=>{var u;return((u=b.config)==null?void 0:u.allowUserDeleteApiKeys)===!0}),v=w(!1),y=w(!1),s=w(!1),o=w(null),$=S(()=>[...h.value].sort((u,c)=>{const U=new Date(u.createdAt);return new Date(c.createdAt)-U})),A=S(()=>h.value.filter(u=>!(u.isDeleted==="true"||u.deletedAt)).length),C=u=>u>=1e6?(u/1e6).toFixed(1)+"M":u>=1e3?(u/1e3).toFixed(1)+"K":u.toString(),i=u=>u?new Date(u).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,t=async()=>{f.value=!0;try{h.value=await b.getUserApiKeys(!0)}catch(u){console.error("Failed to load API keys:",u),_("Failed to load API keys","error")}finally{f.value=!1}},d=u=>{o.value=u,y.value=!0},k=u=>{o.value=u,s.value=!0},I=async()=>{try{(await b.deleteApiKey(o.value.id)).success&&(_("API key deleted successfully","success"),await t())}catch(u){console.error("Failed to delete API key:",u),_("Failed to delete API key","error")}finally{s.value=!1,o.value=null}},P=async()=>{v.value=!1,await t()};return H(()=>{t()}),(u,c)=>{var U;return a(),r("div",dt,[e("div",it,[c[6]||(c[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",nt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:A.value>=m.value,onClick:c[0]||(c[0]=n=>v.value=!0)},c[5]||(c[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]),8,ut)])]),A.value>=m.value?(a(),r("div",ct,[e("div",mt,[c[7]||(c[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",xt,[e("p",gt," You have reached the maximum number of API keys ("+l(m.value)+"). Please delete an existing key to create a new one. ",1)])])])):p("",!0),f.value?(a(),r("div",vt,c[8]||(c[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):$.value.length>0?(a(),r("div",yt,[e("ul",pt,[(a(!0),r(N,null,q($.value,n=>{var K,T;return a(),r("li",{key:n.id,class:"px-6 py-4"},[e("div",ft,[e("div",ht,[e("div",kt,[e("div",{class:M(["h-2 w-2 rounded-full",n.isDeleted==="true"||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",wt,[e("div",bt,[e("p",_t,l(n.name),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",$t," Deleted ")):n.isActive?p("",!0):(a(),r("span",At," Deleted "))]),e("div",Ct,[e("p",Mt,l(n.description||"No description"),1),e("div",Dt,[e("span",null,"Created: "+l(i(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(a(),r("span",It,"Deleted: "+l(i(n.deletedAt)),1)):n.lastUsedAt?(a(),r("span",Pt,"Last used: "+l(i(n.lastUsedAt)),1)):(a(),r("span",Ut,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(a(),r("span",jt,"Expires: "+l(i(n.expiresAt)),1)):p("",!0)])])])]),e("div",Kt,[e("div",Tt,[e("div",null,l(C(((K=n.usage)==null?void 0:K.requests)||0))+" requests",1),(T=n.usage)!=null&&T.totalCost?(a(),r("div",Vt,"$"+l(n.usage.totalCost.toFixed(4)),1)):p("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:B=>d(n)},c[9]||(c[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,St),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&g.value?(a(),r("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:B=>k(n)},c[10]||(c[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,zt)):p("",!0)])])])])}),128))])])):(a(),r("div",Lt,[c[12]||(c[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),c[13]||(c[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),c[14]||(c[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Ft,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:c[1]||(c[1]=n=>v.value=!0)},c[11]||(c[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),D(" Create API Key ",-1)]))])])),j(Ce,{show:v.value,onClose:c[2]||(c[2]=n=>v.value=!1),onCreated:P},null,8,["show"]),j(at,{"api-key":o.value,show:y.value,onClose:c[3]||(c[3]=n=>y.value=!1)},null,8,["api-key","show"]),j(te,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(U=o.value)==null?void 0:U.name}'? This action cannot be undone.`,show:s.value,title:"Delete API Key",onCancel:c[4]||(c[4]=n=>s.value=!1),onConfirm:I},null,8,["message","show"])])}}},qt=V(Nt,[["__scopeId","data-v-db785682"]]),Ht={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},Ot={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Et={key:0,class:"py-12 text-center"},Yt={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Wt={class:"overflow-hidden rounded-lg bg-white shadow"},Gt={class:"p-5"},Qt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900"},Zt={class:"overflow-hidden rounded-lg bg-white shadow"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900"},ls={class:"overflow-hidden rounded-lg bg-white shadow"},rs={class:"p-5"},as={class:"flex items-center"},ds={class:"ml-5 w-0 flex-1"},is={class:"text-lg font-medium text-gray-900"},ns={class:"overflow-hidden rounded-lg bg-white shadow"},us={class:"p-5"},cs={class:"flex items-center"},ms={class:"ml-5 w-0 flex-1"},xs={class:"text-lg font-medium text-gray-900"},gs={key:2,class:"rounded-lg bg-white shadow"},vs={key:3,class:"rounded-lg bg-white shadow"},ys={class:"px-4 py-5 sm:p-6"},ps={class:"space-y-3"},fs={class:"flex items-center"},hs={class:"ml-3"},ks={class:"text-sm font-medium text-gray-900"},ws={class:"text-right"},bs={class:"text-sm text-gray-900"},_s={class:"text-xs text-gray-500"},$s={key:4,class:"rounded-lg bg-white shadow"},As={class:"px-4 py-5 sm:p-6"},Cs={class:"overflow-hidden"},Ms={class:"min-w-full divide-y divide-gray-200"},Ds={class:"divide-y divide-gray-200 bg-white"},Is={class:"whitespace-nowrap px-6 py-4"},Ps={class:"text-sm font-medium text-gray-900"},Us={class:"text-sm text-gray-500"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ks={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Vs={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Bs={class:"whitespace-nowrap px-6 py-4"},Ss={key:5,class:"py-12 text-center"},zs={__name:"UserUsageStats",setup(x){const b=z(),f=w(!0),h=w("week"),m=w(null),g=w([]),v=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),y=async()=>{f.value=!0;try{const[s,o]=await Promise.all([b.getUserUsageStats({period:h.value}),b.getUserApiKeys(!0)]);m.value=s,g.value=o}catch(s){console.error("Failed to load usage stats:",s),_("Failed to load usage statistics","error")}finally{f.value=!1}};return H(()=>{y()}),(s,o)=>{var $,A,C,i,t;return a(),r("div",Ht,[e("div",Rt,[o[2]||(o[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Ot,[F(e("select",{"onUpdate:modelValue":o[0]||(o[0]=d=>h.value=d),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:y},o[1]||(o[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,h.value]])])]),f.value?(a(),r("div",Et,o[3]||(o[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(a(),r("div",Yt,[e("div",Wt,[e("div",Gt,[e("div",Qt,[o[5]||(o[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[o[4]||(o[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Xt,l(v((($=m.value)==null?void 0:$.totalRequests)||0)),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",os,l(v(((A=m.value)==null?void 0:A.totalInputTokens)||0)),1)])])])])]),e("div",ls,[e("div",rs,[e("div",as,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ds,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",is,l(v(((C=m.value)==null?void 0:C.totalOutputTokens)||0)),1)])])])])]),e("div",ns,[e("div",us,[e("div",cs,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ms,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",xs," $"+l((((i=m.value)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])])),!f.value&&m.value?(a(),r("div",gs,o[12]||(o[12]=[Q('Daily Usage Trend
Usage Chart
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
',1)]))):p("",!0),!f.value&&m.value&&((t=m.value.modelStats)==null?void 0:t.length)>0?(a(),r("div",vs,[e("div",ys,[o[14]||(o[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",ps,[(a(!0),r(N,null,q(m.value.modelStats,d=>(a(),r("div",{key:d.name,class:"flex items-center justify-between"},[e("div",fs,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",hs,[e("p",ks,l(d.name),1)])]),e("div",ws,[e("p",bs,l(v(d.requests))+" requests",1),e("p",_s,"$"+l(d.cost.toFixed(4)),1)])]))),128))])])])):p("",!0),!f.value&&g.value.length>0?(a(),r("div",$s,[e("div",As,[o[16]||(o[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",Cs,[e("table",Ms,[o[15]||(o[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",Ds,[(a(!0),r(N,null,q(g.value,d=>{var k,I,P,u;return a(),r("tr",{key:d.id},[e("td",Is,[e("div",Ps,l(d.name),1),e("div",Us,l(d.keyPreview),1)]),e("td",js,l(v(((k=d.usage)==null?void 0:k.requests)||0)),1),e("td",Ks,l(v(((I=d.usage)==null?void 0:I.inputTokens)||0)),1),e("td",Ts,l(v(((P=d.usage)==null?void 0:P.outputTokens)||0)),1),e("td",Vs," $"+l((((u=d.usage)==null?void 0:u.totalCost)||0).toFixed(4)),1),e("td",Bs,[e("span",{class:M(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",d.isDeleted==="true"||d.deletedAt?"bg-gray-100 text-gray-800":d.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},l(d.isDeleted==="true"||d.deletedAt?"Deleted":d.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):p("",!0),!f.value&&(!m.value||m.value.totalRequests===0)?(a(),r("div",Ss,o[17]||(o[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):p("",!0)])}}},Ls=V(zs,[["__scopeId","data-v-9d260191"]]),Fs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},Ns={class:"bg-white shadow dark:bg-gray-800"},qs={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Hs={class:"flex h-16 justify-between"},Rs={class:"flex items-center"},Os={class:"ml-10"},Es={class:"flex items-baseline space-x-4"},Ys={class:"flex items-center space-x-4"},Ws={class:"text-sm text-gray-700 dark:text-gray-300"},Gs={class:"font-medium"},Qs={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Js={key:0,class:"space-y-6"},Xs={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"p-5"},bo={class:"flex items-center"},_o={class:"ml-5 w-0 flex-1"},$o={class:"text-lg font-medium text-gray-900 dark:text-white"},Ao={class:"rounded-lg bg-white shadow dark:bg-gray-800"},Co={class:"px-4 py-5 sm:p-6"},Mo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},Do={class:"divide-y divide-gray-200 dark:divide-gray-700"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Po={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Uo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},To={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Bo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},So={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},zo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Lo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Fo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},No={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},qo={key:1},Ho={key:2},Ro={key:3,class:"space-y-6"},Oo={__name:"UserDashboardView",setup(x){const b=X(),f=z(),h=Z(),m=w("overview"),g=w(null),v=w({active:0,deleted:0}),y=i=>i>=1e6?(i/1e6).toFixed(1)+"M":i>=1e3?(i/1e3).toFixed(1)+"K":i.toString(),s=i=>i?new Date(i).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,o=i=>{m.value=i,i==="overview"&&C()},$=async()=>{try{await f.logout(),_("Logged out successfully","success"),b.push("/user-login")}catch{_("Logout failed","error")}},A=async()=>{try{g.value=await f.getUserProfile()}catch(i){console.error("Failed to load user profile:",i),_("Failed to load user profile","error")}},C=async()=>{try{const i=await f.getUserApiKeys(!0);console.log("All API Keys received:",i);const t=i.filter(k=>!(k.isDeleted==="true"||k.deletedAt)&&k.isActive),d=i.filter(k=>k.isDeleted==="true"||k.deletedAt);console.log("Active keys:",t),console.log("Deleted keys:",d),console.log("Active count:",t.length),console.log("Deleted count:",d.length),v.value={active:t.length,deleted:d.length}}catch(i){console.error("Failed to load API keys stats:",i),v.value={active:0,deleted:0}}};return H(()=>{h.initTheme(),A(),C()}),(i,t)=>{var d,k,I,P,u,c,U,n,K,T,B,R;return a(),r("div",Fs,[e("nav",Ns,[e("div",qs,[e("div",Hs,[e("div",Rs,[t[4]||(t[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Os,[e("div",Es,[e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=L=>o("overview"))}," Overview ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=L=>o("api-keys"))}," API Keys ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[2]||(t[2]=L=>o("usage"))}," Usage Stats ",2),e("button",{class:M(["rounded-md px-3 py-2 text-sm font-medium",m.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[3]||(t[3]=L=>o("tutorial"))}," Tutorial ",2)])])]),e("div",Ys,[e("div",Ws,[t[5]||(t[5]=D(" Welcome, ",-1)),e("span",Gs,l(J(f).userName),1)]),j(ee,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:$}," Logout ")])])])]),e("main",Qs,[m.value==="overview"?(a(),r("div",Js,[t[23]||(t[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Xs,[e("div",Zs,[e("div",eo,[e("div",to,[t[7]||(t[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[t[6]||(t[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",oo,l(v.value.active),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[t[8]||(t[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",no,l(v.value.deleted),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[t[11]||(t[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[t[10]||(t[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",go,l(y(((k=(d=g.value)==null?void 0:d.totalUsage)==null?void 0:k.requests)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[t[13]||(t[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[t[12]||(t[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",ho,l(y(((P=(I=g.value)==null?void 0:I.totalUsage)==null?void 0:P.inputTokens)||0)),1)])])])])]),e("div",ko,[e("div",wo,[e("div",bo,[t[15]||(t[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",_o,[e("dl",null,[t[14]||(t[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",$o," $"+l((((c=(u=g.value)==null?void 0:u.totalUsage)==null?void 0:c.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",Ao,[e("div",Co,[t[22]||(t[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",Mo,[e("dl",Do,[e("div",Io,[t[16]||(t[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Po,l((U=g.value)==null?void 0:U.username),1)]),e("div",Uo,[t[17]||(t[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",jo,l(((n=g.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Ko,[t[18]||(t[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",To,l(((K=g.value)==null?void 0:K.email)||"N/A"),1)]),e("div",Vo,[t[19]||(t[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",Bo,[e("span",So,l(((T=g.value)==null?void 0:T.role)||"user"),1)])]),e("div",zo,[t[20]||(t[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Lo,l(s((B=g.value)==null?void 0:B.createdAt)),1)]),e("div",Fo,[t[21]||(t[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",No,l(s((R=g.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):m.value==="api-keys"?(a(),r("div",qo,[j(qt)])):m.value==="usage"?(a(),r("div",Ho,[j(Ls)])):m.value==="tutorial"?(a(),r("div",Ro,[j(se)])):p("",!0)])])}}},Zo=V(Oo,[["__scopeId","data-v-7da5e7f6"]]);export{Zo as default};
diff --git a/web/admin-spa/dist/assets/UserDashboardView-CxHhaP6a.js b/web/admin-spa/dist/assets/UserDashboardView-CxHhaP6a.js
new file mode 100644
index 00000000..685092b1
--- /dev/null
+++ b/web/admin-spa/dist/assets/UserDashboardView-CxHhaP6a.js
@@ -0,0 +1 @@
+import{r as b,_ as E,o as Y,x as a,L as y,y as d,z as e,Y as W,K as F,aq as O,P as r,O as j,C as I,u as v,c as K,q as H,R as B,Q as N,ac as q,aV as G,aT as Q,aU as J}from"./vue-vendor-DV7DYXbz.js";import{b as L,s as C,f as A,c as D,a as X}from"./index-BahP9Xx9.js";import{T as Z}from"./ThemeToggle-DROshBR1.js";import{C as ee}from"./ConfirmModal-C2rCOkXI.js";import{T as te}from"./TutorialView-Cpvhof5r.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const se={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},oe={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},le={class:"mt-3"},re={class:"mb-4 flex items-center justify-between"},ae=["disabled"],de=["disabled"],ie={key:0,class:"rounded-md border border-red-200 bg-red-50 p-3"},ne={class:"flex"},ue={class:"ml-3"},ce={class:"text-sm text-red-700"},me={class:"flex justify-end space-x-3 pt-4"},xe=["disabled"],ge=["disabled"],ve={key:0,class:"flex items-center"},ye={key:1},pe={key:0,class:"mt-6 rounded-md border border-green-200 bg-green-50 p-4"},fe={class:"flex items-start"},he={class:"ml-3 flex-1"},ke={class:"mt-3"},we={class:"rounded-md border border-green-300 bg-white p-3"},be={class:"flex items-center justify-between"},_e={class:"break-all font-mono text-sm text-gray-900"},$e={__name:"CreateApiKeyModal",props:{show:{type:Boolean,default:!1}},emits:["close","created"],setup(u,{emit:$}){const p=u,w=$,c=L(),m=b(!1),s=b(""),g=b(null),l=E({name:"",description:""}),_=()=>{l.name="",l.description="",s.value="",g.value=null},P=async()=>{var f,t;if(!l.name.trim()){s.value="API key name is required";return}m.value=!0,s.value="";try{const k={name:l.name.trim(),description:l.description.trim()||void 0},M=await c.createApiKey(k);M.success?(g.value=M.apiKey,C("API key created successfully!","success")):s.value=M.message||"Failed to create API key"}catch(k){console.error("Create API key error:",k),s.value=((t=(f=k.response)==null?void 0:f.data)==null?void 0:t.message)||k.message||"Failed to create API key"}finally{m.value=!1}},h=async f=>{try{await navigator.clipboard.writeText(f),C("API key copied to clipboard!","success")}catch(t){console.error("Failed to copy:",t),C("Failed to copy to clipboard","error")}},o=()=>{_(),w("created"),w("close")};return Y(()=>p.show,f=>{f&&_()}),(f,t)=>u.show?(d(),a("div",se,[e("div",oe,[e("div",le,[e("div",re,[t[6]||(t[6]=e("h3",{class:"text-lg font-medium text-gray-900"},"Create New API Key",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:t[0]||(t[0]=k=>f.$emit("close"))},t[5]||(t[5]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("form",{class:"space-y-4",onSubmit:W(P,["prevent"])},[e("div",null,[t[7]||(t[7]=e("label",{class:"block text-sm font-medium text-gray-700",for:"name"}," Name * ",-1)),F(e("input",{id:"name","onUpdate:modelValue":t[1]||(t[1]=k=>l.name=k),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:m.value,placeholder:"Enter API key name",required:"",type:"text"},null,8,ae),[[O,l.name]])]),e("div",null,[t[8]||(t[8]=e("label",{class:"block text-sm font-medium text-gray-700",for:"description"}," Description ",-1)),F(e("textarea",{id:"description","onUpdate:modelValue":t[2]||(t[2]=k=>l.description=k),class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",disabled:m.value,placeholder:"Optional description",rows:"3"},null,8,de),[[O,l.description]])]),s.value?(d(),a("div",ie,[e("div",ne,[t[9]||(t[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",ue,[e("p",ce,r(s.value),1)])])])):y("",!0),e("div",me,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:m.value,type:"button",onClick:t[3]||(t[3]=k=>f.$emit("close"))}," Cancel ",8,xe),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:m.value||!l.name.trim(),type:"submit"},[m.value?(d(),a("span",ve,t[10]||(t[10]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),j(" Creating... ",-1)]))):(d(),a("span",ye,"Create API Key"))],8,ge)])],32),g.value?(d(),a("div",pe,[e("div",fe,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-green-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z","fill-rule":"evenodd"})])],-1)),e("div",he,[t[13]||(t[13]=e("h4",{class:"text-sm font-medium text-green-800"},"API Key Created Successfully!",-1)),e("div",ke,[t[12]||(t[12]=e("p",{class:"mb-2 text-sm text-green-700"},[e("strong",null,"Important:"),j(" Copy your API key now. You won't be able to see it again! ")],-1)),e("div",we,[e("div",be,[e("code",_e,r(g.value.key),1),e("button",{class:"ml-3 inline-flex flex-shrink-0 items-center rounded border border-transparent bg-green-100 px-2 py-1 text-xs font-medium text-green-700 hover:bg-green-200 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:t[4]||(t[4]=k=>h(g.value.key))},t[11]||(t[11]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Copy ",-1)]))])])]),e("div",{class:"mt-4 flex justify-end"},[e("button",{class:"rounded-md border border-transparent bg-green-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2",onClick:o}," Done ")])])])])):y("",!0)])])])):y("",!0)}},Ae={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},Ce={class:"relative top-20 mx-auto w-[768px] max-w-4xl rounded-md border bg-white p-5 shadow-lg"},Me={class:"mt-3"},Pe={class:"mb-4 flex items-center justify-between"},De={key:0,class:"space-y-4"},Ie={class:"mt-1 text-sm text-gray-900"},je={key:0},Te={class:"mt-1 text-sm text-gray-900"},Be={class:"mt-1 flex items-center space-x-2"},Ue={class:"flex-1"},Ve={key:0,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},ze={class:"break-all font-mono text-sm text-gray-900"},Ke={key:1,class:"rounded-md border border-gray-300 bg-gray-50 p-3"},Le={class:"font-mono text-sm text-gray-900"},Se={class:"flex flex-col space-y-1"},Fe={key:0,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ne={key:1,class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},qe={key:0,class:"mt-1 text-xs text-gray-500"},He={class:"mt-1"},Re={key:1,class:"border-t border-gray-200 pt-4"},Oe={class:"grid grid-cols-2 gap-4 text-sm"},Ee={class:"ml-2 font-medium"},Ye={class:"ml-2 font-medium"},We={class:"ml-2 font-medium"},Ge={class:"ml-2 font-medium"},Qe={class:"space-y-2 border-t border-gray-200 pt-4 text-sm"},Je={class:"flex justify-between"},Xe={class:"text-gray-900"},Ze={key:0,class:"flex justify-between"},et={class:"text-gray-900"},tt={key:1,class:"flex justify-between"},st={class:"flex justify-end pt-4"},ot={__name:"ViewApiKeyModal",props:{show:{type:Boolean,default:!1},apiKey:{type:Object,default:null}},emits:["close"],setup(u,{emit:$}){const p=$,w=b(!1),c=async m=>{try{await navigator.clipboard.writeText(m),C("Copied to clipboard!","success")}catch(s){console.error("Failed to copy:",s),C("Failed to copy to clipboard","error")}};return(m,s)=>u.show?(d(),a("div",Ae,[e("div",Ce,[e("div",Me,[e("div",Pe,[s[5]||(s[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"API Key Details",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=g=>p("close"))},s[4]||(s[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),u.apiKey?(d(),a("div",De,[e("div",null,[s[6]||(s[6]=e("label",{class:"block text-sm font-medium text-gray-700"},"Name",-1)),e("p",Ie,r(u.apiKey.name),1)]),u.apiKey.description?(d(),a("div",je,[s[7]||(s[7]=e("label",{class:"block text-sm font-medium text-gray-700"},"Description",-1)),e("p",Te,r(u.apiKey.description),1)])):y("",!0),e("div",null,[s[11]||(s[11]=e("label",{class:"block text-sm font-medium text-gray-700"},"API Key",-1)),e("div",Be,[e("div",Ue,[w.value?(d(),a("div",Ve,[e("code",ze,r(u.apiKey.key||"Not available"),1)])):(d(),a("div",Ke,[e("code",Le,r(u.apiKey.keyPreview||"cr_****"),1)]))]),e("div",Se,[u.apiKey.key?(d(),a("button",{key:0,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[1]||(s[1]=g=>w.value=!w.value)},[w.value?(d(),a("svg",Fe,s[8]||(s[8]=[e("path",{d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.878 9.878L3 3m6.878 6.878L12 12m-1.122-2.122L12 12m-1.122-2.122l-4.243-4.242m6.879 6.878L15 15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(d(),a("svg",Ne,s[9]||(s[9]=[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))),j(" "+r(w.value?"Hide":"Show"),1)])):y("",!0),w.value&&u.apiKey.key?(d(),a("button",{key:1,class:"inline-flex items-center rounded border border-gray-300 bg-white px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=g=>c(u.apiKey.key))},s[10]||(s[10]=[e("svg",{class:"mr-1 h-3 w-3",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Copy ",-1)]))):y("",!0)])]),u.apiKey.key?y("",!0):(d(),a("p",qe," Full API key is only shown when first created or regenerated "))]),e("div",null,[s[12]||(s[12]=e("label",{class:"block text-sm font-medium text-gray-700"},"Status",-1)),e("div",He,[e("span",{class:I(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",u.apiKey.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(u.apiKey.isActive?"Active":"Disabled"),3)])]),u.apiKey.usage?(d(),a("div",Re,[s[17]||(s[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"Usage Statistics",-1)),e("div",Oe,[e("div",null,[s[13]||(s[13]=e("span",{class:"text-gray-500"},"Requests:",-1)),e("span",Ee,r(v(A)(u.apiKey.usage.requests||0)),1)]),e("div",null,[s[14]||(s[14]=e("span",{class:"text-gray-500"},"Input Tokens:",-1)),e("span",Ye,r(v(A)(u.apiKey.usage.inputTokens||0)),1)]),e("div",null,[s[15]||(s[15]=e("span",{class:"text-gray-500"},"Output Tokens:",-1)),e("span",We,r(v(A)(u.apiKey.usage.outputTokens||0)),1)]),e("div",null,[s[16]||(s[16]=e("span",{class:"text-gray-500"},"Total Cost:",-1)),e("span",Ge,"$"+r((u.apiKey.usage.totalCost||0).toFixed(4)),1)])])])):y("",!0),e("div",Qe,[e("div",Je,[s[18]||(s[18]=e("span",{class:"text-gray-500"},"Created:",-1)),e("span",Xe,r(v(D)(u.apiKey.createdAt)),1)]),u.apiKey.lastUsedAt?(d(),a("div",Ze,[s[19]||(s[19]=e("span",{class:"text-gray-500"},"Last Used:",-1)),e("span",et,r(v(D)(u.apiKey.lastUsedAt)),1)])):y("",!0),u.apiKey.expiresAt?(d(),a("div",tt,[s[20]||(s[20]=e("span",{class:"text-gray-500"},"Expires:",-1)),e("span",{class:I(["font-medium",new Date(u.apiKey.expiresAt)p("close"))}," Close ")])])):y("",!0)])])])):y("",!0)}},lt={class:"space-y-6"},rt={class:"sm:flex sm:items-center"},at={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},dt=["disabled"],it={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},nt={class:"flex"},ut={class:"ml-3"},ct={class:"text-sm text-yellow-700"},mt={key:1,class:"py-12 text-center"},xt={key:2,class:"overflow-hidden bg-white shadow sm:rounded-md"},gt={class:"divide-y divide-gray-200",role:"list"},vt={class:"flex items-center justify-between"},yt={class:"flex items-center"},pt={class:"flex-shrink-0"},ft={class:"ml-4"},ht={class:"flex items-center"},kt={class:"text-sm font-medium text-gray-900"},wt={key:0,class:"ml-2 inline-flex items-center rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-medium text-gray-800"},bt={key:1,class:"ml-2 inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800"},_t={class:"mt-1"},$t={class:"text-sm text-gray-500"},At={class:"mt-1 flex items-center space-x-4 text-xs text-gray-400"},Ct={key:0},Mt={key:1},Pt={key:2},Dt={key:3},It={class:"flex items-center space-x-2"},jt={class:"text-right text-xs text-gray-500"},Tt={key:0},Bt={class:"flex items-center space-x-1"},Ut=["onClick"],Vt=["onClick"],zt={key:3,class:"py-12 text-center"},Kt={class:"mt-6"},Lt={__name:"UserApiKeysManager",setup(u){const $=L(),p=b(!0),w=b([]),c=K(()=>{var x;return((x=$.config)==null?void 0:x.maxApiKeysPerUser)||5}),m=K(()=>{var x;return((x=$.config)==null?void 0:x.allowUserDeleteApiKeys)===!0}),s=b(!1),g=b(!1),l=b(!1),_=b(null),P=K(()=>[...w.value].sort((x,i)=>{const T=new Date(x.createdAt);return new Date(i.createdAt)-T})),h=K(()=>w.value.filter(x=>!(x.isDeleted==="true"||x.deletedAt)).length),o=async()=>{p.value=!0;try{w.value=await $.getUserApiKeys(!0)}catch(x){console.error("Failed to load API keys:",x),C("Failed to load API keys","error")}finally{p.value=!1}},f=x=>{_.value=x,g.value=!0},t=x=>{_.value=x,l.value=!0},k=async()=>{try{(await $.deleteApiKey(_.value.id)).success&&(C("API key deleted successfully","success"),await o())}catch(x){console.error("Failed to delete API key:",x),C("Failed to delete API key","error")}finally{l.value=!1,_.value=null}},M=async()=>{s.value=!1,await o()};return H(()=>{o()}),(x,i)=>{var T;return d(),a("div",lt,[e("div",rt,[i[6]||(i[6]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"My API Keys"),e("p",{class:"mt-2 text-sm text-gray-700"}," Manage your API keys to access Claude Relay services ")],-1)),e("div",at,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 sm:w-auto",disabled:h.value>=c.value,onClick:i[0]||(i[0]=n=>s.value=!0)},i[5]||(i[5]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Create API Key ",-1)]),8,dt)])]),h.value>=c.value?(d(),a("div",it,[e("div",nt,[i[7]||(i[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ut,[e("p",ct," You have reached the maximum number of API keys ("+r(c.value)+"). Please delete an existing key to create a new one. ",1)])])])):y("",!0),p.value?(d(),a("div",mt,i[8]||(i[8]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading API keys...",-1)]))):P.value.length>0?(d(),a("div",xt,[e("ul",gt,[(d(!0),a(N,null,q(P.value,n=>{var U,V;return d(),a("li",{key:n.id,class:"px-6 py-4"},[e("div",vt,[e("div",yt,[e("div",pt,[e("div",{class:I(["h-2 w-2 rounded-full",n.isDeleted===!0||n.deletedAt?"bg-gray-400":n.isActive?"bg-green-400":"bg-red-400"])},null,2)]),e("div",ft,[e("div",ht,[e("p",kt,r(n.name),1),n.isDeleted===!0||n.deletedAt?(d(),a("span",wt," Deleted ")):n.isActive?y("",!0):(d(),a("span",bt," Deleted "))]),e("div",_t,[e("p",$t,r(n.description||"No description"),1),e("div",At,[e("span",null,"Created: "+r(v(D)(n.createdAt)),1),n.isDeleted==="true"||n.deletedAt?(d(),a("span",Ct,"Deleted: "+r(v(D)(n.deletedAt)),1)):n.lastUsedAt?(d(),a("span",Mt,"Last used: "+r(v(D)(n.lastUsedAt)),1)):(d(),a("span",Pt,"Never used")),n.expiresAt&&!(n.isDeleted==="true"||n.deletedAt)?(d(),a("span",Dt,"Expires: "+r(v(D)(n.expiresAt)),1)):y("",!0)])])])]),e("div",It,[e("div",jt,[e("div",null,r(v(A)(((U=n.usage)==null?void 0:U.requests)||0))+" requests",1),(V=n.usage)!=null&&V.totalCost?(d(),a("div",Tt,"$"+r(n.usage.totalCost.toFixed(4)),1)):y("",!0)]),e("div",Bt,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-gray-600",title:"View API Key",onClick:z=>f(n)},i[9]||(i[9]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"}),e("path",{d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ut),!(n.isDeleted==="true"||n.deletedAt)&&n.isActive&&m.value?(d(),a("button",{key:0,class:"inline-flex items-center rounded border border-transparent p-1 text-red-400 hover:text-red-600",title:"Delete API Key",onClick:z=>t(n)},i[10]||(i[10]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Vt)):y("",!0)])])])])}),128))])])):(d(),a("div",zt,[i[12]||(i[12]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),i[13]||(i[13]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No API keys",-1)),i[14]||(i[14]=e("p",{class:"mt-1 text-sm text-gray-500"},"Get started by creating your first API key.",-1)),e("div",Kt,[e("button",{class:"inline-flex items-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:i[1]||(i[1]=n=>s.value=!0)},i[11]||(i[11]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6v6m0 0v6m0-6h6m-6 0H6","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),j(" Create API Key ",-1)]))])])),B($e,{show:s.value,onClose:i[2]||(i[2]=n=>s.value=!1),onCreated:M},null,8,["show"]),B(ot,{"api-key":_.value,show:g.value,onClose:i[3]||(i[3]=n=>g.value=!1)},null,8,["api-key","show"]),B(ee,{"confirm-class":"bg-red-600 hover:bg-red-700","confirm-text":"Delete",message:`Are you sure you want to delete '${(T=_.value)==null?void 0:T.name}'? This action cannot be undone.`,show:l.value,title:"Delete API Key",onCancel:i[4]||(i[4]=n=>l.value=!1),onConfirm:k},null,8,["message","show"])])}}},St={class:"space-y-6"},Ft={class:"sm:flex sm:items-center"},Nt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},qt={key:0,class:"py-12 text-center"},Ht={key:1,class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Rt={class:"overflow-hidden rounded-lg bg-white shadow"},Ot={class:"p-5"},Et={class:"flex items-center"},Yt={class:"ml-5 w-0 flex-1"},Wt={class:"text-lg font-medium text-gray-900"},Gt={class:"overflow-hidden rounded-lg bg-white shadow"},Qt={class:"p-5"},Jt={class:"flex items-center"},Xt={class:"ml-5 w-0 flex-1"},Zt={class:"text-lg font-medium text-gray-900"},es={class:"overflow-hidden rounded-lg bg-white shadow"},ts={class:"p-5"},ss={class:"flex items-center"},os={class:"ml-5 w-0 flex-1"},ls={class:"text-lg font-medium text-gray-900"},rs={class:"overflow-hidden rounded-lg bg-white shadow"},as={class:"p-5"},ds={class:"flex items-center"},is={class:"ml-5 w-0 flex-1"},ns={class:"text-lg font-medium text-gray-900"},us={key:2,class:"rounded-lg bg-white shadow"},cs={key:3,class:"rounded-lg bg-white shadow"},ms={class:"px-4 py-5 sm:p-6"},xs={class:"space-y-3"},gs={class:"flex items-center"},vs={class:"ml-3"},ys={class:"text-sm font-medium text-gray-900"},ps={class:"text-right"},fs={class:"text-sm text-gray-900"},hs={class:"text-xs text-gray-500"},ks={key:4,class:"rounded-lg bg-white shadow"},ws={class:"px-4 py-5 sm:p-6"},bs={class:"overflow-hidden"},_s={class:"min-w-full divide-y divide-gray-200"},$s={class:"divide-y divide-gray-200 bg-white"},As={class:"whitespace-nowrap px-6 py-4"},Cs={class:"text-sm font-medium text-gray-900"},Ms={class:"text-sm text-gray-500"},Ps={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ds={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Is={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},js={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ts={class:"whitespace-nowrap px-6 py-4"},Bs={key:5,class:"py-12 text-center"},Us={__name:"UserUsageStats",setup(u){const $=L(),p=b(!0),w=b("week"),c=b(null),m=b([]),s=async()=>{p.value=!0;try{const[g,l]=await Promise.all([$.getUserUsageStats({period:w.value}),$.getUserApiKeys(!0)]);c.value=g,m.value=l}catch(g){console.error("Failed to load usage stats:",g),C("Failed to load usage statistics","error")}finally{p.value=!1}};return H(()=>{s()}),(g,l)=>{var _,P,h,o,f;return d(),a("div",St,[e("div",Ft,[l[2]||(l[2]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900"},"Usage Statistics"),e("p",{class:"mt-2 text-sm text-gray-700"},"View your API usage statistics and costs")],-1)),e("div",Nt,[F(e("select",{"onUpdate:modelValue":l[0]||(l[0]=t=>w.value=t),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:s},l[1]||(l[1]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[G,w.value]])])]),p.value?(d(),a("div",qt,l[3]||(l[3]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(d(),a("div",Ht,[e("div",Rt,[e("div",Ot,[e("div",Et,[l[5]||(l[5]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Yt,[e("dl",null,[l[4]||(l[4]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Requests",-1)),e("dd",Wt,r(v(A)(((_=c.value)==null?void 0:_.totalRequests)||0)),1)])])])])]),e("div",Gt,[e("div",Qt,[e("div",Jt,[l[7]||(l[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Xt,[e("dl",null,[l[6]||(l[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Input Tokens",-1)),e("dd",Zt,r(v(A)(((P=c.value)==null?void 0:P.totalInputTokens)||0)),1)])])])])]),e("div",es,[e("div",ts,[e("div",ss,[l[9]||(l[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",os,[e("dl",null,[l[8]||(l[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Output Tokens",-1)),e("dd",ls,r(v(A)(((h=c.value)==null?void 0:h.totalOutputTokens)||0)),1)])])])])]),e("div",rs,[e("div",as,[e("div",ds,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",is,[e("dl",null,[l[10]||(l[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500"},"Total Cost",-1)),e("dd",ns," $"+r((((o=c.value)==null?void 0:o.totalCost)||0).toFixed(4)),1)])])])])])])),!p.value&&c.value?(d(),a("div",us,l[12]||(l[12]=[Q('Daily Usage Trend
Usage Chart
Daily usage trends would be displayed here
(Chart integration can be added with Chart.js, D3.js, or similar library)
',1)]))):y("",!0),!p.value&&c.value&&((f=c.value.modelStats)==null?void 0:f.length)>0?(d(),a("div",cs,[e("div",ms,[l[14]||(l[14]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by Model",-1)),e("div",xs,[(d(!0),a(N,null,q(c.value.modelStats,t=>(d(),a("div",{key:t.name,class:"flex items-center justify-between"},[e("div",gs,[l[13]||(l[13]=e("div",{class:"flex-shrink-0"},[e("div",{class:"h-2 w-2 rounded-full bg-blue-500"})],-1)),e("div",vs,[e("p",ys,r(t.name),1)])]),e("div",ps,[e("p",fs,r(v(A)(t.requests))+" requests",1),e("p",hs,"$"+r(t.cost.toFixed(4)),1)])]))),128))])])])):y("",!0),!p.value&&m.value.length>0?(d(),a("div",ks,[e("div",ws,[l[16]||(l[16]=e("h3",{class:"mb-4 text-lg font-medium leading-6 text-gray-900"},"Usage by API Key",-1)),e("div",bs,[e("table",_s,[l[15]||(l[15]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Input Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Output Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status ")])],-1)),e("tbody",$s,[(d(!0),a(N,null,q(m.value,t=>{var k,M,x,i;return d(),a("tr",{key:t.id},[e("td",As,[e("div",Cs,r(t.name),1),e("div",Ms,r(t.keyPreview),1)]),e("td",Ps,r(v(A)(((k=t.usage)==null?void 0:k.requests)||0)),1),e("td",Ds,r(v(A)(((M=t.usage)==null?void 0:M.inputTokens)||0)),1),e("td",Is,r(v(A)(((x=t.usage)==null?void 0:x.outputTokens)||0)),1),e("td",js," $"+r((((i=t.usage)==null?void 0:i.totalCost)||0).toFixed(4)),1),e("td",Ts,[e("span",{class:I(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",t.isDeleted==="true"||t.deletedAt?"bg-gray-100 text-gray-800":t.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(t.isDeleted==="true"||t.deletedAt?"Deleted":t.isActive?"Active":"Disabled"),3)])])}),128))])])])])])):y("",!0),!p.value&&(!c.value||c.value.totalRequests===0)?(d(),a("div",Bs,l[17]||(l[17]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," You haven't made any API requests yet. Create an API key and start using the service to see usage statistics. ",-1)]))):y("",!0)])}}},Vs={class:"min-h-screen bg-gray-50 dark:bg-gray-900"},zs={class:"bg-white shadow dark:bg-gray-800"},Ks={class:"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"},Ls={class:"flex h-16 justify-between"},Ss={class:"flex items-center"},Fs={class:"ml-10"},Ns={class:"flex items-baseline space-x-4"},qs={class:"flex items-center space-x-4"},Hs={class:"text-sm text-gray-700 dark:text-gray-300"},Rs={class:"font-medium"},Os={class:"mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8"},Es={key:0,class:"space-y-6"},Ys={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-5"},Ws={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Gs={class:"p-5"},Qs={class:"flex items-center"},Js={class:"ml-5 w-0 flex-1"},Xs={class:"text-lg font-medium text-gray-900 dark:text-white"},Zs={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},eo={class:"p-5"},to={class:"flex items-center"},so={class:"ml-5 w-0 flex-1"},oo={class:"text-lg font-medium text-gray-900 dark:text-white"},lo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},ro={class:"p-5"},ao={class:"flex items-center"},io={class:"ml-5 w-0 flex-1"},no={class:"text-lg font-medium text-gray-900 dark:text-white"},uo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},co={class:"p-5"},mo={class:"flex items-center"},xo={class:"ml-5 w-0 flex-1"},go={class:"text-lg font-medium text-gray-900 dark:text-white"},vo={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},yo={class:"p-5"},po={class:"flex items-center"},fo={class:"ml-5 w-0 flex-1"},ho={class:"text-lg font-medium text-gray-900 dark:text-white"},ko={class:"rounded-lg bg-white shadow dark:bg-gray-800"},wo={class:"px-4 py-5 sm:p-6"},bo={class:"mt-5 border-t border-gray-200 dark:border-gray-700"},_o={class:"divide-y divide-gray-200 dark:divide-gray-700"},$o={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Ao={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Co={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Mo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Po={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Do={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Io={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},jo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},To={class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-800 dark:bg-blue-900 dark:text-blue-200"},Bo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},Uo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Vo={class:"py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5"},zo={class:"mt-1 text-sm text-gray-900 dark:text-white sm:col-span-2 sm:mt-0"},Ko={key:1},Lo={key:2},So={key:3,class:"space-y-6"},Yo={__name:"UserDashboardView",setup(u){const $=J(),p=L(),w=X(),c=b("overview"),m=b(null),s=b({active:0,deleted:0}),g=h=>{c.value=h,h==="overview"&&P()},l=async()=>{try{await p.logout(),C("Logged out successfully","success"),$.push("/user-login")}catch{C("Logout failed","error")}},_=async()=>{try{m.value=await p.getUserProfile()}catch(h){console.error("Failed to load user profile:",h),C("Failed to load user profile","error")}},P=async()=>{try{const h=await p.getUserApiKeys(!0);console.log("All API Keys received:",h);const o=h.filter(t=>!(t.isDeleted==="true"||t.deletedAt)&&t.isActive),f=h.filter(t=>t.isDeleted==="true"||t.deletedAt);console.log("Active keys:",o),console.log("Deleted keys:",f),console.log("Active count:",o.length),console.log("Deleted count:",f.length),s.value={active:o.length,deleted:f.length}}catch(h){console.error("Failed to load API keys stats:",h),s.value={active:0,deleted:0}}};return H(()=>{w.initTheme(),_(),P()}),(h,o)=>{var f,t,k,M,x,i,T,n,U,V,z,R;return d(),a("div",Vs,[e("nav",zs,[e("div",Ks,[e("div",Ls,[e("div",Ss,[o[4]||(o[4]=e("div",{class:"flex flex-shrink-0 items-center"},[e("svg",{class:"h-8 w-8 text-blue-600 dark:text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})]),e("span",{class:"ml-2 text-xl font-bold text-gray-900 dark:text-white"},"Claude Relay")],-1)),e("div",Fs,[e("div",Ns,[e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="overview"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[0]||(o[0]=S=>g("overview"))}," Overview ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="api-keys"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[1]||(o[1]=S=>g("api-keys"))}," API Keys ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="usage"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[2]||(o[2]=S=>g("usage"))}," Usage Stats ",2),e("button",{class:I(["rounded-md px-3 py-2 text-sm font-medium",c.value==="tutorial"?"bg-blue-100 text-blue-700 dark:bg-blue-900 dark:text-blue-300":"text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:o[3]||(o[3]=S=>g("tutorial"))}," Tutorial ",2)])])]),e("div",qs,[e("div",Hs,[o[5]||(o[5]=j(" Welcome, ",-1)),e("span",Rs,r(v(p).userName),1)]),B(Z,{mode:"icon"}),e("button",{class:"rounded-md px-3 py-2 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300",onClick:l}," Logout ")])])])]),e("main",Os,[c.value==="overview"?(d(),a("div",Es,[o[23]||(o[23]=e("div",null,[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"Dashboard Overview"),e("p",{class:"mt-2 text-sm text-gray-600 dark:text-gray-400"}," Welcome to your Claude Relay dashboard ")],-1)),e("div",Ys,[e("div",Ws,[e("div",Gs,[e("div",Qs,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Js,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active API Keys ",-1)),e("dd",Xs,r(s.value.active),1)])])])])]),e("div",Zs,[e("div",eo,[e("div",to,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",so,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Deleted API Keys ",-1)),e("dd",oo,r(s.value.deleted),1)])])])])]),e("div",lo,[e("div",ro,[e("div",ao,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",io,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Requests ",-1)),e("dd",no,r(v(A)(((t=(f=m.value)==null?void 0:f.totalUsage)==null?void 0:t.requests)||0)),1)])])])])]),e("div",uo,[e("div",co,[e("div",mo,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",xo,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Input Tokens ",-1)),e("dd",go,r(v(A)(((M=(k=m.value)==null?void 0:k.totalUsage)==null?void 0:M.inputTokens)||0)),1)])])])])]),e("div",vo,[e("div",yo,[e("div",po,[o[15]||(o[15]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",fo,[e("dl",null,[o[14]||(o[14]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",ho," $"+r((((i=(x=m.value)==null?void 0:x.totalUsage)==null?void 0:i.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ko,[e("div",wo,[o[22]||(o[22]=e("h3",{class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"}," Account Information ",-1)),e("div",bo,[e("dl",_o,[e("div",$o,[o[16]||(o[16]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Username",-1)),e("dd",Ao,r((T=m.value)==null?void 0:T.username),1)]),e("div",Co,[o[17]||(o[17]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Display Name",-1)),e("dd",Mo,r(((n=m.value)==null?void 0:n.displayName)||"N/A"),1)]),e("div",Po,[o[18]||(o[18]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Email",-1)),e("dd",Do,r(((U=m.value)==null?void 0:U.email)||"N/A"),1)]),e("div",Io,[o[19]||(o[19]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Role",-1)),e("dd",jo,[e("span",To,r(((V=m.value)==null?void 0:V.role)||"user"),1)])]),e("div",Bo,[o[20]||(o[20]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Member Since",-1)),e("dd",Uo,r(v(D)((z=m.value)==null?void 0:z.createdAt)),1)]),e("div",Vo,[o[21]||(o[21]=e("dt",{class:"text-sm font-medium text-gray-500 dark:text-gray-400"},"Last Login",-1)),e("dd",zo,r(v(D)((R=m.value)==null?void 0:R.lastLoginAt)||"N/A"),1)])])])])])])):c.value==="api-keys"?(d(),a("div",Ko,[B(Lt)])):c.value==="usage"?(d(),a("div",Lo,[B(Us)])):c.value==="tutorial"?(d(),a("div",So,[B(te)])):y("",!0)])])}}};export{Yo as default};
diff --git a/web/admin-spa/dist/assets/UserLoginView-BB0rxKdy.js b/web/admin-spa/dist/assets/UserLoginView-BB0rxKdy.js
deleted file mode 100644
index 8324cde0..00000000
--- a/web/admin-spa/dist/assets/UserLoginView-BB0rxKdy.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as p,K as m,aq as g,P as x,O as b,J as S,av as V,aU as z,y as i}from"./vue-vendor-R8HMg95E.js";import{_ as C,b as T,a as U,s as M}from"./index-B3t2NHq9.js";import{T as B}from"./ThemeToggle-DRoGUDeP.js";import"./element-plus-BUfCkBQO.js";import"./vendor-Dr8jvgFu.js";const I={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},P={class:"mt-1"},A=["disabled"],E={class:"mt-1"},R=["disabled"],D={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},H={class:"flex"},J={class:"ml-3"},K={class:"text-sm text-red-700 dark:text-red-400"},O=["disabled"],Y={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},F={class:"text-center"},G={__name:"UserLoginView",setup(Q){const f=z(),v=T(),y=U(),r=u(!1),a=u(""),t=h({username:"",password:""}),w=async()=>{var d,s;if(!t.username||!t.password){a.value="Please enter both username and password";return}r.value=!0,a.value="";try{await v.login({username:t.username,password:t.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(o){console.error("Login error:",o),a.value=((s=(d=o.response)==null?void 0:d.data)==null?void 0:s.message)||o.message||"Login failed"}finally{r.value=!1}};return k(()=>{y.initTheme()}),(d,s)=>{const o=V("router-link");return i(),n("div",I,[e("div",N,[c(B,{mode:"dropdown"})]),e("div",j,[s[7]||(s[7]=_(' Sign in to your account to manage your API keys
',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[s[2]||(s[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",P,[m(e("input",{id:"username","onUpdate:modelValue":s[0]||(s[0]=l=>t.username=l),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,A),[[g,t.username]])])]),e("div",null,[s[3]||(s[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",E,[m(e("input",{id:"password","onUpdate:modelValue":s[1]||(s[1]=l=>t.password=l),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:r.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,R),[[g,t.password]])])]),a.value?(i(),n("div",D,[e("div",H,[s[4]||(s[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",J,[e("p",K,x(a.value),1)])])])):p("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:r.value||!t.username||!t.password,type:"submit"},[r.value?(i(),n("span",Y,s[5]||(s[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):p("",!0),b(" "+x(r.value?"Signing In...":"Sign In"),1)],8,O)]),e("div",F,[c(o,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>s[6]||(s[6]=[b(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}},se=C(G,[["__scopeId","data-v-28d542c4"]]);export{se as default};
diff --git a/web/admin-spa/dist/assets/UserLoginView-CQ2slm3o.js b/web/admin-spa/dist/assets/UserLoginView-CQ2slm3o.js
new file mode 100644
index 00000000..5f06e961
--- /dev/null
+++ b/web/admin-spa/dist/assets/UserLoginView-CQ2slm3o.js
@@ -0,0 +1 @@
+import{r as u,_ as h,q as k,x as n,z as e,R as c,aT as _,Y as L,L as m,K as p,aq as g,P as b,O as x,J as S,av as z,aU as C,y as i}from"./vue-vendor-DV7DYXbz.js";import{b as T,a as V,s as M}from"./index-BahP9Xx9.js";import{T as U}from"./ThemeToggle-DROshBR1.js";import"./element-plus-BSjV1f9S.js";import"./vendor-Dr8jvgFu.js";const B={class:"relative flex min-h-screen items-center justify-center bg-gray-50 px-4 py-12 dark:bg-gray-900 sm:px-6 lg:px-8"},N={class:"fixed right-4 top-4 z-10"},j={class:"w-full max-w-md space-y-8"},q={class:"rounded-lg bg-white px-6 py-8 shadow dark:bg-gray-800 dark:shadow-xl"},I={class:"mt-1"},P=["disabled"],A={class:"mt-1"},E=["disabled"],R={key:0,class:"rounded-md border border-red-200 bg-red-50 p-4 dark:border-red-800 dark:bg-red-900/20"},D={class:"flex"},H={class:"ml-3"},J={class:"text-sm text-red-700 dark:text-red-400"},K=["disabled"],O={key:0,class:"absolute inset-y-0 left-0 flex items-center pl-3"},Y={class:"text-center"},$={__name:"UserLoginView",setup(F){const f=C(),y=T(),v=V(),t=u(!1),o=u(""),s=h({username:"",password:""}),w=async()=>{var l,r;if(!s.username||!s.password){o.value="Please enter both username and password";return}t.value=!0,o.value="";try{await y.login({username:s.username,password:s.password}),M("Login successful!","success"),f.push("/user-dashboard")}catch(a){console.error("Login error:",a),o.value=((r=(l=a.response)==null?void 0:l.data)==null?void 0:r.message)||a.message||"Login failed"}finally{t.value=!1}};return k(()=>{v.initTheme()}),(l,r)=>{const a=z("router-link");return i(),n("div",B,[e("div",N,[c(U,{mode:"dropdown"})]),e("div",j,[r[7]||(r[7]=_(' Sign in to your account to manage your API keys
',1)),e("div",q,[e("form",{class:"space-y-6",onSubmit:L(w,["prevent"])},[e("div",null,[r[2]||(r[2]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"username"}," Username ",-1)),e("div",I,[p(e("input",{id:"username","onUpdate:modelValue":r[0]||(r[0]=d=>s.username=d),autocomplete:"username",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:t.value,name:"username",placeholder:"Enter your username",required:"",type:"text"},null,8,P),[[g,s.username]])])]),e("div",null,[r[3]||(r[3]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300",for:"password"}," Password ",-1)),e("div",A,[p(e("input",{id:"password","onUpdate:modelValue":r[1]||(r[1]=d=>s.password=d),autocomplete:"current-password",class:"relative block w-full appearance-none rounded-md border border-gray-300 px-3 py-2 text-gray-900 placeholder-gray-500 focus:z-10 focus:border-blue-500 focus:outline-none focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-400 dark:focus:ring-blue-400 sm:text-sm",disabled:t.value,name:"password",placeholder:"Enter your password",required:"",type:"password"},null,8,E),[[g,s.password]])])]),o.value?(i(),n("div",R,[e("div",D,[r[4]||(r[4]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",H,[e("p",J,b(o.value),1)])])])):m("",!0),e("div",null,[e("button",{class:"group relative flex w-full justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-400 dark:focus:ring-offset-gray-800",disabled:t.value||!s.username||!s.password,type:"submit"},[t.value?(i(),n("span",O,r[5]||(r[5]=[e("svg",{class:"h-5 w-5 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1)]))):m("",!0),x(" "+b(t.value?"Signing In...":"Sign In"),1)],8,K)]),e("div",Y,[c(a,{class:"text-sm text-blue-600 hover:text-blue-500 dark:text-blue-400 dark:hover:text-blue-300",to:"/admin-login"},{default:S(()=>r[6]||(r[6]=[x(" Admin Login ",-1)])),_:1,__:[6]})])],32)])])])}}};export{$ as default};
diff --git a/web/admin-spa/dist/assets/UserManagementView-CaiXdQvq.js b/web/admin-spa/dist/assets/UserManagementView-CaiXdQvq.js
new file mode 100644
index 00000000..6c98e067
--- /dev/null
+++ b/web/admin-spa/dist/assets/UserManagementView-CaiXdQvq.js
@@ -0,0 +1 @@
+import{r as x,o as O,x as i,L as b,y as n,z as e,P as a,K as j,aV as P,u as h,Q as E,ac as Q,C as B,Y as W,an as K,O as N,c as Y,q as J,R as I,aq as X}from"./vue-vendor-DV7DYXbz.js";import{f as A,c as G,g as Z,d as ee,s as M,e as te,h as se,i as oe,j as le,k as ae}from"./index-BahP9Xx9.js";import{C as re}from"./ConfirmModal-C2rCOkXI.js";import{d as ie}from"./vendor-Dr8jvgFu.js";import"./element-plus-BSjV1f9S.js";const ne={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},de={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},ue={class:"mt-3"},ce={class:"mb-6 flex items-center justify-between"},me={class:"text-lg font-medium text-gray-900"},ve={class:"text-sm text-gray-500"},xe={class:"mb-6"},ge={key:0,class:"py-12 text-center"},pe={key:1,class:"space-y-6"},fe={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},he={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-blue-900"},_e={class:"overflow-hidden rounded-lg bg-green-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Ue={class:"text-lg font-medium text-green-900"},Me={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Be={class:"ml-5 w-0 flex-1"},Ve={class:"text-lg font-medium text-purple-900"},Le={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},Re={class:"p-5"},Se={class:"flex items-center"},Te={class:"ml-5 w-0 flex-1"},Fe={class:"text-lg font-medium text-yellow-900"},De={key:0,class:"rounded-lg border border-gray-200 bg-white"},Ie={class:"overflow-hidden"},Pe={class:"min-w-full divide-y divide-gray-200"},Ne={class:"divide-y divide-gray-200 bg-white"},He={class:"whitespace-nowrap px-6 py-4"},qe={class:"text-sm font-medium text-gray-900"},Ke={class:"text-sm text-gray-500"},Oe={class:"whitespace-nowrap px-6 py-4"},Ee={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ge={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},We={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Ye={class:"rounded-lg border border-gray-200 bg-white"},Je={class:"p-6"},Xe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ze={class:"text-center"},et={class:"mt-1 text-sm text-gray-500"},tt={key:1,class:"py-12 text-center"},st={class:"mt-6 flex justify-end"},ot={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(m,{emit:k}){const g=m,_=k,v=x(!1),c=x("week"),d=x(null),$=x(null),p=async()=>{if(g.user){v.value=!0;try{const[l,s]=await Promise.all([Z(g.user.id,{period:c.value}),ee(g.user.id)]);l.success&&(d.value=l.stats),s.success&&($.value=s.user)}catch(l){console.error("Failed to load user usage stats:",l),M("Failed to load usage statistics","error")}finally{v.value=!1}}};return O([()=>g.show,()=>g.user],([l,s])=>{l&&s&&p()}),(l,s)=>{var y,U,C,z,V,L,R,S,T,F;return m.show?(n(),i("div",ne,[e("div",de,[e("div",ue,[e("div",ce,[e("div",null,[e("h3",me," Usage Statistics - "+a(((y=m.user)==null?void 0:y.displayName)||((U=m.user)==null?void 0:U.username)),1),e("p",ve,"@"+a((C=m.user)==null?void 0:C.username)+" • "+a((z=m.user)==null?void 0:z.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:s[0]||(s[0]=o=>_("close"))},s[3]||(s[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",xe,[j(e("select",{"onUpdate:modelValue":s[1]||(s[1]=o=>c.value=o),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:p},s[4]||(s[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,c.value]])]),v.value?(n(),i("div",ge,s[5]||(s[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",pe,[e("div",fe,[e("div",he,[e("div",ye,[e("div",we,[s[7]||(s[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[s[6]||(s[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",ke,a(h(A)(((V=d.value)==null?void 0:V.totalRequests)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[s[9]||(s[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[s[8]||(s[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",Ue,a(h(A)(((L=d.value)==null?void 0:L.totalInputTokens)||0)),1)])])])])]),e("div",Me,[e("div",je,[e("div",ze,[s[11]||(s[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Be,[e("dl",null,[s[10]||(s[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Ve,a(h(A)(((R=d.value)==null?void 0:R.totalOutputTokens)||0)),1)])])])])]),e("div",Le,[e("div",Re,[e("div",Se,[s[13]||(s[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Te,[e("dl",null,[s[12]||(s[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Fe," $"+a((((S=d.value)==null?void 0:S.totalCost)||0).toFixed(4)),1)])])])])])]),((F=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:F.length)>0?(n(),i("div",De,[s[15]||(s[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Ie,[e("table",Pe,[s[14]||(s[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",Ne,[(n(!0),i(E,null,Q($.value.apiKeys,o=>{var t,u,f,w;return n(),i("tr",{key:o.id},[e("td",He,[e("div",qe,a(o.name),1),e("div",Ke,a(o.keyPreview),1)]),e("td",Oe,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",o.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},a(o.isActive?"Active":"Disabled"),3)]),e("td",Ee,a(h(A)(((t=o.usage)==null?void 0:t.requests)||0)),1),e("td",Qe,[e("div",null,"In: "+a(h(A)(((u=o.usage)==null?void 0:u.inputTokens)||0)),1),e("div",null,"Out: "+a(h(A)(((f=o.usage)==null?void 0:f.outputTokens)||0)),1)]),e("td",Ge," $"+a((((w=o.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",We,a(o.lastUsedAt?h(G)(o.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Ye,[s[19]||(s[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Je,[e("div",Xe,[e("div",Ze,[s[16]||(s[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),s[17]||(s[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",et," Daily usage trends for "+a(c.value)+" period ",1),s[18]||(s[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",tt,s[20]||(s[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",st,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:s[2]||(s[2]=o=>l.$emit("close"))}," Close ")])])])])):b("",!0)}}},lt={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},at={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},rt={class:"mt-3"},it={class:"mb-4 flex items-center justify-between"},nt={key:0,class:"space-y-4"},dt={class:"rounded-md bg-gray-50 p-4"},ut={class:"flex items-center"},ct={class:"ml-4"},mt={class:"text-sm font-medium text-gray-900"},vt={class:"text-sm text-gray-500"},xt={class:"mt-1"},gt={class:"space-y-2"},pt={class:"flex items-center"},ft=["disabled"],ht={class:"flex items-center"},yt=["disabled"],wt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},bt={class:"flex"},kt={class:"ml-3"},_t={class:"mt-2 text-sm text-yellow-700"},$t={key:0},Ct={key:1},At={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},Ut={class:"flex"},Mt={class:"ml-3"},jt={class:"text-sm text-red-700"},zt={class:"flex justify-end space-x-3 pt-4"},Bt=["disabled"],Vt=["disabled"],Lt={key:0,class:"flex items-center"},Rt={key:1},St={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(m,{emit:k}){const g=m,_=k,v=x(!1),c=x(""),d=x(""),$=async()=>{var p,l;if(!(!g.user||d.value===g.user.role)){v.value=!0,c.value="";try{const s=await te(g.user.id,{role:d.value});s.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):c.value=s.message||"Failed to update user role"}catch(s){console.error("Update user role error:",s),c.value=((l=(p=s.response)==null?void 0:p.data)==null?void 0:l.message)||s.message||"Failed to update user role"}finally{v.value=!1}}};return O([()=>g.show,()=>g.user],([p,l])=>{p&&l&&(d.value=l.role,c.value="",v.value=!1)}),(p,l)=>m.show?(n(),i("div",lt,[e("div",at,[e("div",rt,[e("div",it,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=s=>p.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),m.user?(n(),i("div",nt,[e("div",dt,[e("div",ut,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",ct,[e("p",mt,a(m.user.displayName||m.user.username),1),e("p",vt,"@"+a(m.user.username),1),e("div",xt,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",m.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+a(m.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:W($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",gt,[e("label",pt,[j(e("input",{"onUpdate:modelValue":l[1]||(l[1]=s=>d.value=s),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:v.value,type:"radio",value:"user"},null,8,ft),[[K,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",ht,[j(e("input",{"onUpdate:modelValue":l[2]||(l[2]=s=>d.value=s),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:v.value,type:"radio",value:"admin"},null,8,yt),[[K,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==m.user.role?(n(),i("div",wt,[e("div",bt,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",kt,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",_t,[d.value==="admin"?(n(),i("p",$t," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",Ct," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),c.value?(n(),i("div",At,[e("div",Ut,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",Mt,[e("p",jt,a(c.value),1)])])])):b("",!0),e("div",zt,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:v.value,type:"button",onClick:l[3]||(l[3]=s=>p.$emit("close"))}," Cancel ",8,Bt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:v.value||d.value===m.user.role,type:"submit"},[v.value?(n(),i("span",Lt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),N(" Updating... ",-1)]))):(n(),i("span",Rt,"Update Role"))],8,Vt)])],32)])):b("",!0)])])])):b("",!0)}},Tt={class:"space-y-6"},Ft={class:"sm:flex sm:items-center"},Dt={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},It=["disabled"],Pt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},Nt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ht={class:"p-5"},qt={class:"flex items-center"},Kt={class:"ml-5 w-0 flex-1"},Ot={class:"text-lg font-medium text-gray-900 dark:text-white"},Et={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Qt={class:"p-5"},Gt={class:"flex items-center"},Wt={class:"ml-5 w-0 flex-1"},Yt={class:"text-lg font-medium text-gray-900 dark:text-white"},Jt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Xt={class:"p-5"},Zt={class:"flex items-center"},es={class:"ml-5 w-0 flex-1"},ts={class:"text-lg font-medium text-gray-900 dark:text-white"},ss={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},os={class:"p-5"},ls={class:"flex items-center"},as={class:"ml-5 w-0 flex-1"},rs={class:"text-lg font-medium text-gray-900 dark:text-white"},is={class:"rounded-lg bg-white shadow dark:bg-gray-800"},ns={class:"px-4 py-5 sm:p-6"},ds={class:"sm:flex sm:items-center sm:justify-between"},us={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},cs={class:"min-w-0 flex-1"},ms={class:"relative rounded-md shadow-sm"},vs={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},xs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},gs={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},ps={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},fs={key:0,class:"py-12 text-center"},hs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ys={class:"flex items-center justify-between"},ws={class:"flex min-w-0 flex-1 items-center"},bs={class:"ml-4 min-w-0 flex-1"},ks={class:"flex items-center"},_s={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},$s={class:"ml-2 flex items-center space-x-2"},Cs={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},As={key:0},Us={key:1},Ms={key:2},js={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},zs={class:"flex items-center space-x-2"},Bs=["onClick"],Vs=["disabled","onClick"],Ls=["title","onClick"],Rs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ss={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ts=["onClick"],Fs={key:2,class:"py-12 text-center"},Ds={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ks={__name:"UserManagementView",setup(m){const k=x(!0),g=x([]),_=x(null),v=x(""),c=x(""),d=x(""),$=x(!1),p=x(!1),l=x(!1),s=x(null),y=x({title:"",message:"",confirmText:"",confirmClass:"",action:null}),U=Y(()=>{let o=g.value;if(v.value){const t=v.value.toLowerCase();o=o.filter(u=>{var f,w;return u.username.toLowerCase().includes(t)||((f=u.displayName)==null?void 0:f.toLowerCase().includes(t))||((w=u.email)==null?void 0:w.toLowerCase().includes(t))})}if(c.value&&(o=o.filter(t=>t.role===c.value)),d.value!==""){const t=d.value==="true";o=o.filter(u=>u.isActive===t)}return o}),C=async()=>{k.value=!0;try{const o={};c.value&&c.value.trim()!==""&&(o.role=c.value),d.value!==""&&(o.isActive=d.value);const[t,u]=await Promise.all([se(o),oe()]);t.success&&(g.value=t.users),u.success&&(_.value=u.stats)}catch(o){console.error("Failed to load users:",o),M("Failed to load users","error")}finally{k.value=!1}},z=ie(()=>{},300),V=o=>{s.value=o,$.value=!0},L=o=>{s.value=o,y.value={title:o.isActive?"Disable User":"Enable User",message:o.isActive?`Are you sure you want to disable user "${o.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${o.username}"?`,confirmText:o.isActive?"Disable":"Enable",confirmClass:o.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},p.value=!0},R=o=>{o.apiKeyCount!==0&&(s.value=o,y.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${o.apiKeyCount} API keys for user "${o.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},p.value=!0)},S=o=>{s.value=o,l.value=!0},T=async()=>{const o=s.value,t=y.value.action;try{if(t==="toggleStatus"){if((await le(o.id,{isActive:!o.isActive})).success){const f=g.value.findIndex(w=>w.id===o.id);f!==-1&&(g.value[f].isActive=!o.isActive),M(`User ${o.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const u=await ae(o.id);u.success&&(M(`Disabled ${u.disabledCount} API keys`,"success"),await C())}}catch(u){console.error(`Failed to ${t}:`,u),M(`Failed to ${t}`,"error")}finally{p.value=!1,s.value=null}},F=()=>{l.value=!1,s.value=null,C()};return J(()=>{C()}),(o,t)=>{var u,f,w,H,q;return n(),i("div",Tt,[e("div",Ft,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",Dt,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),N(" Refresh ",-1)]),8,It)])]),e("div",Pt,[e("div",Nt,[e("div",Ht,[e("div",qt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Kt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ot,a(((u=_.value)==null?void 0:u.totalUsers)||0),1)])])])])]),e("div",Et,[e("div",Qt,[e("div",Gt,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Wt,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Yt,a(((f=_.value)==null?void 0:f.activeUsers)||0),1)])])])])]),e("div",Jt,[e("div",Xt,[e("div",Zt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",es,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",ts,a(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",ss,[e("div",os,[e("div",ls,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",as,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",rs," $"+a((((q=(H=_.value)==null?void 0:H.totalUsage)==null?void 0:q.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",is,[e("div",ns,[e("div",ds,[e("div",us,[e("div",cs,[e("div",ms,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),j(e("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>v.value=r),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...r)=>h(z)&&h(z)(...r))},null,544),[[X,v.value]])])]),e("div",null,[j(e("select",{"onUpdate:modelValue":t[2]||(t[2]=r=>c.value=r),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,c.value]])]),e("div",null,[j(e("select",{"onUpdate:modelValue":t[3]||(t[3]=r=>d.value=r),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",vs,[e("div",xs,[e("h3",gs,[t[20]||(t[20]=N(" Users ",-1)),k.value?b("",!0):(n(),i("span",ps,"("+a(U.value.length)+" of "+a(g.value.length)+")",1))])]),k.value?(n(),i("div",fs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):U.value.length>0?(n(),i("ul",hs,[(n(!0),i(E,null,Q(U.value,r=>(n(),i("li",{key:r.id,class:"px-6 py-4"},[e("div",ys,[e("div",ws,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",bs,[e("div",ks,[e("p",_s,a(r.displayName||r.username),1),e("div",$s,[e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",r.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},a(r.isActive?"Active":"Disabled"),3),e("span",{class:B(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",r.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},a(r.role),3)])]),e("div",Cs,[e("span",null,"@"+a(r.username),1),r.email?(n(),i("span",As,a(r.email),1)):b("",!0),e("span",null,a(r.apiKeyCount||0)+" API keys",1),r.lastLoginAt?(n(),i("span",Us,"Last login: "+a(h(G)(r.lastLoginAt)),1)):(n(),i("span",Ms,"Never logged in"))]),r.totalUsage?(n(),i("div",js,[e("span",null,a(h(A)(r.totalUsage.requests||0))+" requests",1),e("span",null,"$"+a((r.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",zs,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:D=>V(r)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Bs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:r.apiKeyCount===0,title:"Disable All API Keys",onClick:D=>R(r)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Vs),e("button",{class:B(["inline-flex items-center rounded border border-transparent p-1",r.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:r.isActive?"Disable User":"Enable User",onClick:D=>L(r)},[r.isActive?(n(),i("svg",Rs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Ss,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,Ls),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:D=>S(r)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ts)])])]))),128))])):(n(),i("div",Fs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ds,a(v.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),I(ot,{show:$.value,user:s.value,onClose:t[4]||(t[4]=r=>$.value=!1)},null,8,["show","user"]),I(re,{"confirm-class":y.value.confirmClass,"confirm-text":y.value.confirmText,message:y.value.message,show:p.value,title:y.value.title,onCancel:t[5]||(t[5]=r=>p.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),I(St,{show:l.value,user:s.value,onClose:t[6]||(t[6]=r=>l.value=!1),onUpdated:F},null,8,["show","user"])])}}};export{Ks as default};
diff --git a/web/admin-spa/dist/assets/UserManagementView-DJp_uG6X.js b/web/admin-spa/dist/assets/UserManagementView-DJp_uG6X.js
deleted file mode 100644
index 179383c6..00000000
--- a/web/admin-spa/dist/assets/UserManagementView-DJp_uG6X.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as f,o as G,x as i,L as b,y as n,z as e,P as r,K as U,aV as P,Q as W,ac as Y,C as z,Y as J,an as E,O as H,c as X,q as Z,R as N,aq as ee,u as Q}from"./vue-vendor-R8HMg95E.js";import{_ as q,c as A,s as M}from"./index-B3t2NHq9.js";import{C as te}from"./ConfirmModal-BAFPIqcc.js";import{d as se}from"./vendor-Dr8jvgFu.js";import"./element-plus-BUfCkBQO.js";const oe={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},le={class:"relative top-10 mx-auto w-4/5 max-w-4xl rounded-md border bg-white p-5 shadow-lg"},re={class:"mt-3"},ae={class:"mb-6 flex items-center justify-between"},ie={class:"text-lg font-medium text-gray-900"},ne={class:"text-sm text-gray-500"},de={class:"mb-6"},ue={key:0,class:"py-12 text-center"},ce={key:1,class:"space-y-6"},me={class:"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4"},ve={class:"overflow-hidden rounded-lg bg-blue-50 shadow"},xe={class:"p-5"},ge={class:"flex items-center"},pe={class:"ml-5 w-0 flex-1"},fe={class:"text-lg font-medium text-blue-900"},he={class:"overflow-hidden rounded-lg bg-green-50 shadow"},ye={class:"p-5"},we={class:"flex items-center"},be={class:"ml-5 w-0 flex-1"},ke={class:"text-lg font-medium text-green-900"},_e={class:"overflow-hidden rounded-lg bg-purple-50 shadow"},$e={class:"p-5"},Ce={class:"flex items-center"},Ae={class:"ml-5 w-0 flex-1"},Me={class:"text-lg font-medium text-purple-900"},Ue={class:"overflow-hidden rounded-lg bg-yellow-50 shadow"},je={class:"p-5"},ze={class:"flex items-center"},Ve={class:"ml-5 w-0 flex-1"},Be={class:"text-lg font-medium text-yellow-900"},Le={key:0,class:"rounded-lg border border-gray-200 bg-white"},Re={class:"overflow-hidden"},Se={class:"min-w-full divide-y divide-gray-200"},De={class:"divide-y divide-gray-200 bg-white"},Te={class:"whitespace-nowrap px-6 py-4"},Ie={class:"text-sm font-medium text-gray-900"},Fe={class:"text-sm text-gray-500"},Ne={class:"whitespace-nowrap px-6 py-4"},Pe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},He={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},qe={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-900"},Ke={class:"whitespace-nowrap px-6 py-4 text-sm text-gray-500"},Oe={class:"rounded-lg border border-gray-200 bg-white"},Ee={class:"p-6"},Qe={class:"flex h-64 items-center justify-center rounded-lg border-2 border-dashed border-gray-300"},Ge={class:"text-center"},We={class:"mt-1 text-sm text-gray-500"},Ye={key:1,class:"py-12 text-center"},Je={class:"mt-6 flex justify-end"},Xe={__name:"UserUsageStatsModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f("week"),d=f(null),$=f(null),m=c=>c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString(),l=c=>c?new Date(c).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,u=async()=>{if(h.user){p.value=!0;try{const[c,o]=await Promise.all([A.get(`/users/${h.user.id}/usage-stats`,{params:{period:x.value}}),A.get(`/users/${h.user.id}`)]);c.success&&(d.value=c.stats),o.success&&($.value=o.user)}catch(c){console.error("Failed to load user usage stats:",c),M("Failed to load usage statistics","error")}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([c,o])=>{c&&o&&u()}),(c,o)=>{var V,B,C,j,L,R,S,D,T,I;return g.show?(n(),i("div",oe,[e("div",le,[e("div",re,[e("div",ae,[e("div",null,[e("h3",ie," Usage Statistics - "+r(((V=g.user)==null?void 0:V.displayName)||((B=g.user)==null?void 0:B.username)),1),e("p",ne,"@"+r((C=g.user)==null?void 0:C.username)+" • "+r((j=g.user)==null?void 0:j.role),1)]),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:o[0]||(o[0]=s=>_("close"))},o[3]||(o[3]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),e("div",de,[U(e("select",{"onUpdate:modelValue":o[1]||(o[1]=s=>x.value=s),class:"block w-32 rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",onChange:u},o[4]||(o[4]=[e("option",{value:"day"},"Last 24 Hours",-1),e("option",{value:"week"},"Last 7 Days",-1),e("option",{value:"month"},"Last 30 Days",-1),e("option",{value:"quarter"},"Last 90 Days",-1)]),544),[[P,x.value]])]),p.value?(n(),i("div",ue,o[5]||(o[5]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500"},"Loading usage statistics...",-1)]))):(n(),i("div",ce,[e("div",me,[e("div",ve,[e("div",xe,[e("div",ge,[o[7]||(o[7]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",pe,[e("dl",null,[o[6]||(o[6]=e("dt",{class:"truncate text-sm font-medium text-blue-600"},"Requests",-1)),e("dd",fe,r(m(((L=d.value)==null?void 0:L.totalRequests)||0)),1)])])])])]),e("div",he,[e("div",ye,[e("div",we,[o[9]||(o[9]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",be,[e("dl",null,[o[8]||(o[8]=e("dt",{class:"truncate text-sm font-medium text-green-600"},"Input Tokens",-1)),e("dd",ke,r(m(((R=d.value)==null?void 0:R.totalInputTokens)||0)),1)])])])])]),e("div",_e,[e("div",$e,[e("div",Ce,[o[11]||(o[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ae,[e("dl",null,[o[10]||(o[10]=e("dt",{class:"truncate text-sm font-medium text-purple-600"},"Output Tokens",-1)),e("dd",Me,r(m(((S=d.value)==null?void 0:S.totalOutputTokens)||0)),1)])])])])]),e("div",Ue,[e("div",je,[e("div",ze,[o[13]||(o[13]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Ve,[e("dl",null,[o[12]||(o[12]=e("dt",{class:"truncate text-sm font-medium text-yellow-600"},"Total Cost",-1)),e("dd",Be," $"+r((((D=d.value)==null?void 0:D.totalCost)||0).toFixed(4)),1)])])])])])]),((I=(T=$.value)==null?void 0:T.apiKeys)==null?void 0:I.length)>0?(n(),i("div",Le,[o[15]||(o[15]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"API Keys Usage")],-1)),e("div",Re,[e("table",Se,[o[14]||(o[14]=e("thead",{class:"bg-gray-50"},[e("tr",null,[e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," API Key "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Status "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Requests "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Tokens "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Cost "),e("th",{class:"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500",scope:"col"}," Last Used ")])],-1)),e("tbody",De,[(n(!0),i(W,null,Y($.value.apiKeys,s=>{var t,v,y,w;return n(),i("tr",{key:s.id},[e("td",Te,[e("div",Ie,r(s.name),1),e("div",Fe,r(s.keyPreview),1)]),e("td",Ne,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",s.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},r(s.isActive?"Active":"Disabled"),3)]),e("td",Pe,r(m(((t=s.usage)==null?void 0:t.requests)||0)),1),e("td",He,[e("div",null,"In: "+r(m(((v=s.usage)==null?void 0:v.inputTokens)||0)),1),e("div",null,"Out: "+r(m(((y=s.usage)==null?void 0:y.outputTokens)||0)),1)]),e("td",qe," $"+r((((w=s.usage)==null?void 0:w.totalCost)||0).toFixed(4)),1),e("td",Ke,r(s.lastUsedAt?l(s.lastUsedAt):"Never"),1)])}),128))])])])])):b("",!0),e("div",Oe,[o[19]||(o[19]=e("div",{class:"border-b border-gray-200 px-4 py-5 sm:px-6"},[e("h4",{class:"text-lg font-medium leading-6 text-gray-900"},"Usage Trend")],-1)),e("div",Ee,[e("div",Qe,[e("div",Ge,[o[16]||(o[16]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),o[17]||(o[17]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"Usage Chart",-1)),e("p",We," Daily usage trends for "+r(x.value)+" period ",1),o[18]||(o[18]=e("p",{class:"mt-2 text-xs text-gray-400"}," (Chart integration can be added with Chart.js, D3.js, or similar library) ",-1))])])])]),d.value&&d.value.totalRequests===0?(n(),i("div",Ye,o[20]||(o[20]=[e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),e("h3",{class:"mt-2 text-sm font-medium text-gray-900"},"No usage data",-1),e("p",{class:"mt-1 text-sm text-gray-500"}," This user hasn't made any API requests in the selected period. ",-1)]))):b("",!0)])),e("div",Je,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2",onClick:o[2]||(o[2]=s=>c.$emit("close"))}," Close ")])])])])):b("",!0)}}},Ze=q(Xe,[["__scopeId","data-v-3ed8ad13"]]),et={key:0,class:"fixed inset-0 z-50 h-full w-full overflow-y-auto bg-gray-600 bg-opacity-50"},tt={class:"relative top-20 mx-auto w-96 rounded-md border bg-white p-5 shadow-lg"},st={class:"mt-3"},ot={class:"mb-4 flex items-center justify-between"},lt={key:0,class:"space-y-4"},rt={class:"rounded-md bg-gray-50 p-4"},at={class:"flex items-center"},it={class:"ml-4"},nt={class:"text-sm font-medium text-gray-900"},dt={class:"text-sm text-gray-500"},ut={class:"mt-1"},ct={class:"space-y-2"},mt={class:"flex items-center"},vt=["disabled"],xt={class:"flex items-center"},gt=["disabled"],pt={key:0,class:"rounded-md border border-yellow-200 bg-yellow-50 p-4"},ft={class:"flex"},ht={class:"ml-3"},yt={class:"mt-2 text-sm text-yellow-700"},wt={key:0},bt={key:1},kt={key:1,class:"rounded-md border border-red-200 bg-red-50 p-4"},_t={class:"flex"},$t={class:"ml-3"},Ct={class:"text-sm text-red-700"},At={class:"flex justify-end space-x-3 pt-4"},Mt=["disabled"],Ut=["disabled"],jt={key:0,class:"flex items-center"},zt={key:1},Vt={__name:"ChangeRoleModal",props:{show:{type:Boolean,default:!1},user:{type:Object,default:null}},emits:["close","updated"],setup(g,{emit:k}){const h=g,_=k,p=f(!1),x=f(""),d=f(""),$=async()=>{var m,l;if(!(!h.user||d.value===h.user.role)){p.value=!0,x.value="";try{const u=await A.patch(`/users/${h.user.id}/role`,{role:d.value});u.success?(M(`User role updated to ${d.value}`,"success"),_("updated")):x.value=u.message||"Failed to update user role"}catch(u){console.error("Update user role error:",u),x.value=((l=(m=u.response)==null?void 0:m.data)==null?void 0:l.message)||u.message||"Failed to update user role"}finally{p.value=!1}}};return G([()=>h.show,()=>h.user],([m,l])=>{m&&l&&(d.value=l.role,x.value="",p.value=!1)}),(m,l)=>g.show?(n(),i("div",et,[e("div",tt,[e("div",st,[e("div",ot,[l[5]||(l[5]=e("h3",{class:"text-lg font-medium text-gray-900"},"Change User Role",-1)),e("button",{class:"text-gray-400 hover:text-gray-600",onClick:l[0]||(l[0]=u=>m.$emit("close"))},l[4]||(l[4]=[e("svg",{class:"h-6 w-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M6 18L18 6M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]))]),g.user?(n(),i("div",lt,[e("div",rt,[e("div",at,[l[6]||(l[6]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300"},[e("svg",{class:"h-6 w-6 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",it,[e("p",nt,r(g.user.displayName||g.user.username),1),e("p",dt,"@"+r(g.user.username),1),e("div",ut,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",g.user.role==="admin"?"bg-purple-100 text-purple-800":"bg-blue-100 text-blue-800"])}," Current: "+r(g.user.role),3)])])])]),e("form",{class:"space-y-4",onSubmit:J($,["prevent"])},[e("div",null,[l[9]||(l[9]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"}," New Role ",-1)),e("div",ct,[e("label",mt,[U(e("input",{"onUpdate:modelValue":l[1]||(l[1]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"user"},null,8,vt),[[E,d.value]]),l[7]||(l[7]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"User"),e("div",{class:"text-xs text-gray-500"},"Regular user with basic permissions")],-1))]),e("label",xt,[U(e("input",{"onUpdate:modelValue":l[2]||(l[2]=u=>d.value=u),class:"h-4 w-4 border-gray-300 text-blue-600 focus:ring-blue-500",disabled:p.value,type:"radio",value:"admin"},null,8,gt),[[E,d.value]]),l[8]||(l[8]=e("div",{class:"ml-3"},[e("div",{class:"text-sm font-medium text-gray-900"},"Administrator"),e("div",{class:"text-xs text-gray-500"},"Full access to manage users and system")],-1))])])]),d.value!==g.user.role?(n(),i("div",pt,[e("div",ft,[l[11]||(l[11]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-yellow-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z","fill-rule":"evenodd"})])],-1)),e("div",ht,[l[10]||(l[10]=e("h3",{class:"text-sm font-medium text-yellow-800"},"Role Change Warning",-1)),e("div",yt,[d.value==="admin"?(n(),i("p",wt," Granting admin privileges will give this user full access to the system, including the ability to manage other users and their API keys. ")):(n(),i("p",bt," Removing admin privileges will restrict this user to only managing their own API keys and viewing their own usage statistics. "))])])])])):b("",!0),x.value?(n(),i("div",kt,[e("div",_t,[l[12]||(l[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-5 w-5 text-red-400",fill:"currentColor",viewBox:"0 0 20 20"},[e("path",{"clip-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z","fill-rule":"evenodd"})])],-1)),e("div",$t,[e("p",Ct,r(x.value),1)])])])):b("",!0),e("div",At,[e("button",{class:"rounded-md border border-gray-300 px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50",disabled:p.value,type:"button",onClick:l[3]||(l[3]=u=>m.$emit("close"))}," Cancel ",8,Mt),e("button",{class:"rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",disabled:p.value||d.value===g.user.role,type:"submit"},[p.value?(n(),i("span",jt,l[13]||(l[13]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4 animate-spin text-white",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),H(" Updating... ",-1)]))):(n(),i("span",zt,"Update Role"))],8,Ut)])],32)])):b("",!0)])])])):b("",!0)}},Bt=q(Vt,[["__scopeId","data-v-642cc3e3"]]),Lt={class:"space-y-6"},Rt={class:"sm:flex sm:items-center"},St={class:"mt-4 sm:ml-16 sm:mt-0 sm:flex-none"},Dt=["disabled"],Tt={class:"grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-4"},It={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Ft={class:"p-5"},Nt={class:"flex items-center"},Pt={class:"ml-5 w-0 flex-1"},Ht={class:"text-lg font-medium text-gray-900 dark:text-white"},qt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Kt={class:"p-5"},Ot={class:"flex items-center"},Et={class:"ml-5 w-0 flex-1"},Qt={class:"text-lg font-medium text-gray-900 dark:text-white"},Gt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},Wt={class:"p-5"},Yt={class:"flex items-center"},Jt={class:"ml-5 w-0 flex-1"},Xt={class:"text-lg font-medium text-gray-900 dark:text-white"},Zt={class:"overflow-hidden rounded-lg bg-white shadow dark:bg-gray-800"},es={class:"p-5"},ts={class:"flex items-center"},ss={class:"ml-5 w-0 flex-1"},os={class:"text-lg font-medium text-gray-900 dark:text-white"},ls={class:"rounded-lg bg-white shadow dark:bg-gray-800"},rs={class:"px-4 py-5 sm:p-6"},as={class:"sm:flex sm:items-center sm:justify-between"},is={class:"space-y-4 sm:flex sm:items-center sm:space-x-4 sm:space-y-0"},ns={class:"min-w-0 flex-1"},ds={class:"relative rounded-md shadow-sm"},us={class:"overflow-hidden bg-white shadow dark:bg-gray-800 sm:rounded-md"},cs={class:"border-b border-gray-200 px-4 py-5 dark:border-gray-700 sm:px-6"},ms={class:"text-lg font-medium leading-6 text-gray-900 dark:text-white"},vs={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},xs={key:0,class:"py-12 text-center"},gs={key:1,class:"divide-y divide-gray-200 dark:divide-gray-700",role:"list"},ps={class:"flex items-center justify-between"},fs={class:"flex min-w-0 flex-1 items-center"},hs={class:"ml-4 min-w-0 flex-1"},ys={class:"flex items-center"},ws={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},bs={class:"ml-2 flex items-center space-x-2"},ks={class:"mt-1 flex items-center space-x-4 text-sm text-gray-500 dark:text-gray-400"},_s={key:0},$s={key:1},Cs={key:2},As={key:0,class:"mt-1 flex items-center space-x-4 text-xs text-gray-400 dark:text-gray-500"},Ms={class:"flex items-center space-x-2"},Us=["onClick"],js=["disabled","onClick"],zs=["title","onClick"],Vs={key:0,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Bs={key:1,class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},Ls=["onClick"],Rs={key:2,class:"py-12 text-center"},Ss={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Ds={__name:"UserManagementView",setup(g){const k=f(!0),h=f([]),_=f(null),p=f(""),x=f(""),d=f(""),$=f(!1),m=f(!1),l=f(!1),u=f(null),c=f({title:"",message:"",confirmText:"",confirmClass:"",action:null}),o=X(()=>{let s=h.value;if(p.value){const t=p.value.toLowerCase();s=s.filter(v=>{var y,w;return v.username.toLowerCase().includes(t)||((y=v.displayName)==null?void 0:y.toLowerCase().includes(t))||((w=v.email)==null?void 0:w.toLowerCase().includes(t))})}if(x.value&&(s=s.filter(t=>t.role===x.value)),d.value!==""){const t=d.value==="true";s=s.filter(v=>v.isActive===t)}return s}),V=s=>s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString(),B=s=>s?new Date(s).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):null,C=async()=>{k.value=!0;try{const s={};x.value&&x.value.trim()!==""&&(s.role=x.value),d.value!==""&&(s.isActive=d.value);const[t,v]=await Promise.all([A.get("/users",{params:s}),A.get("/users/stats/overview")]);t.success&&(h.value=t.users),v.success&&(_.value=v.stats)}catch(s){console.error("Failed to load users:",s),M("Failed to load users","error")}finally{k.value=!1}},j=se(()=>{},300),L=s=>{u.value=s,$.value=!0},R=s=>{u.value=s,c.value={title:s.isActive?"Disable User":"Enable User",message:s.isActive?`Are you sure you want to disable user "${s.username}"? This will prevent them from logging in.`:`Are you sure you want to enable user "${s.username}"?`,confirmText:s.isActive?"Disable":"Enable",confirmClass:s.isActive?"bg-red-600 hover:bg-red-700":"bg-green-600 hover:bg-green-700",action:"toggleStatus"},m.value=!0},S=s=>{s.apiKeyCount!==0&&(u.value=s,c.value={title:"Disable All API Keys",message:`Are you sure you want to disable all ${s.apiKeyCount} API keys for user "${s.username}"? This will prevent them from using the service.`,confirmText:"Disable Keys",confirmClass:"bg-red-600 hover:bg-red-700",action:"disableKeys"},m.value=!0)},D=s=>{u.value=s,l.value=!0},T=async()=>{const s=u.value,t=c.value.action;try{if(t==="toggleStatus"){if((await A.patch(`/users/${s.id}/status`,{isActive:!s.isActive})).success){const y=h.value.findIndex(w=>w.id===s.id);y!==-1&&(h.value[y].isActive=!s.isActive),M(`User ${s.isActive?"disabled":"enabled"} successfully`,"success")}}else if(t==="disableKeys"){const v=await A.post(`/users/${s.id}/disable-keys`);v.success&&(M(`Disabled ${v.disabledCount} API keys`,"success"),await C())}}catch(v){console.error(`Failed to ${t}:`,v),M(`Failed to ${t}`,"error")}finally{m.value=!1,u.value=null}},I=()=>{l.value=!1,u.value=null,C()};return Z(()=>{C()}),(s,t)=>{var v,y,w,K,O;return n(),i("div",Lt,[e("div",Rt,[t[8]||(t[8]=e("div",{class:"sm:flex-auto"},[e("h1",{class:"text-2xl font-semibold text-gray-900 dark:text-white"},"User Management"),e("p",{class:"mt-2 text-sm text-gray-700 dark:text-gray-300"}," Manage users, their API keys, and view usage statistics ")],-1)),e("div",St,[e("button",{class:"inline-flex items-center justify-center rounded-md border border-transparent bg-blue-600 px-4 py-2 text-sm font-medium text-white shadow-sm hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 sm:w-auto",disabled:k.value,onClick:C},t[7]||(t[7]=[e("svg",{class:"-ml-1 mr-2 h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1),H(" Refresh ",-1)]),8,Dt)])]),e("div",Tt,[e("div",It,[e("div",Ft,[e("div",Nt,[t[10]||(t[10]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-blue-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Pt,[e("dl",null,[t[9]||(t[9]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Users ",-1)),e("dd",Ht,r(((v=_.value)==null?void 0:v.totalUsers)||0),1)])])])])]),e("div",qt,[e("div",Kt,[e("div",Ot,[t[12]||(t[12]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-green-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Et,[e("dl",null,[t[11]||(t[11]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Active Users ",-1)),e("dd",Qt,r(((y=_.value)==null?void 0:y.activeUsers)||0),1)])])])])]),e("div",Gt,[e("div",Wt,[e("div",Yt,[t[14]||(t[14]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-purple-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M15 7a2 2 0 012 2m0 0a2 2 0 012 2m-2-2h-6m6 0v6a2 2 0 01-2 2H9a2 2 0 01-2-2V9a2 2 0 012-2h6z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",Jt,[e("dl",null,[t[13]||(t[13]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total API Keys ",-1)),e("dd",Xt,r(((w=_.value)==null?void 0:w.totalApiKeys)||0),1)])])])])]),e("div",Zt,[e("div",es,[e("div",ts,[t[16]||(t[16]=e("div",{class:"flex-shrink-0"},[e("svg",{class:"h-6 w-6 text-yellow-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),e("div",ss,[e("dl",null,[t[15]||(t[15]=e("dt",{class:"truncate text-sm font-medium text-gray-500 dark:text-gray-400"}," Total Cost ",-1)),e("dd",os," $"+r((((O=(K=_.value)==null?void 0:K.totalUsage)==null?void 0:O.totalCost)||0).toFixed(4)),1)])])])])])]),e("div",ls,[e("div",rs,[e("div",as,[e("div",is,[e("div",ns,[e("div",ds,[t[17]||(t[17]=e("div",{class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},[e("svg",{class:"h-5 w-5 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])],-1)),U(e("input",{"onUpdate:modelValue":t[0]||(t[0]=a=>p.value=a),class:"block w-full rounded-md border-gray-300 pl-10 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",placeholder:"Search users...",type:"search",onInput:t[1]||(t[1]=(...a)=>Q(j)&&Q(j)(...a))},null,544),[[ee,p.value]])])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[2]||(t[2]=a=>x.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[18]||(t[18]=[e("option",{value:""},"All Roles",-1),e("option",{value:"user"},"User",-1),e("option",{value:"admin"},"Admin",-1)]),544),[[P,x.value]])]),e("div",null,[U(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>d.value=a),class:"block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",onChange:C},t[19]||(t[19]=[e("option",{value:""},"All Status",-1),e("option",{value:"true"},"Active",-1),e("option",{value:"false"},"Disabled",-1)]),544),[[P,d.value]])])])])])]),e("div",us,[e("div",cs,[e("h3",ms,[t[20]||(t[20]=H(" Users ",-1)),k.value?b("",!0):(n(),i("span",vs,"("+r(o.value.length)+" of "+r(h.value.length)+")",1))])]),k.value?(n(),i("div",xs,t[21]||(t[21]=[e("svg",{class:"mx-auto h-8 w-8 animate-spin text-blue-600",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"})],-1),e("p",{class:"mt-2 text-sm text-gray-500 dark:text-gray-400"},"Loading users...",-1)]))):o.value.length>0?(n(),i("ul",gs,[(n(!0),i(W,null,Y(o.value,a=>(n(),i("li",{key:a.id,class:"px-6 py-4"},[e("div",ps,[e("div",fs,[t[22]||(t[22]=e("div",{class:"flex-shrink-0"},[e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-300 dark:bg-gray-600"},[e("svg",{class:"h-6 w-6 text-gray-600 dark:text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})])])],-1)),e("div",hs,[e("div",ys,[e("p",ws,r(a.displayName||a.username),1),e("div",bs,[e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.isActive?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"])},r(a.isActive?"Active":"Disabled"),3),e("span",{class:z(["inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",a.role==="admin"?"bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200":"bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"])},r(a.role),3)])]),e("div",ks,[e("span",null,"@"+r(a.username),1),a.email?(n(),i("span",_s,r(a.email),1)):b("",!0),e("span",null,r(a.apiKeyCount||0)+" API keys",1),a.lastLoginAt?(n(),i("span",$s,"Last login: "+r(B(a.lastLoginAt)),1)):(n(),i("span",Cs,"Never logged in"))]),a.totalUsage?(n(),i("div",As,[e("span",null,r(V(a.totalUsage.requests||0))+" requests",1),e("span",null,"$"+r((a.totalUsage.totalCost||0).toFixed(4))+" total cost",1)])):b("",!0)])]),e("div",Ms,[e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-blue-600",title:"View Usage Stats",onClick:F=>L(a)},t[23]||(t[23]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Us),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-50",disabled:a.apiKeyCount===0,title:"Disable All API Keys",onClick:F=>S(a)},t[24]||(t[24]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,js),e("button",{class:z(["inline-flex items-center rounded border border-transparent p-1",a.isActive?"text-gray-400 hover:text-red-600":"text-gray-400 hover:text-green-600"]),title:a.isActive?"Disable User":"Enable User",onClick:F=>R(a)},[a.isActive?(n(),i("svg",Vs,t[25]||(t[25]=[e("path",{d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728L5.636 5.636m12.728 12.728L18 12M6 6l12 12","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)]))):(n(),i("svg",Bs,t[26]||(t[26]=[e("path",{d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"},null,-1)])))],10,zs),e("button",{class:"inline-flex items-center rounded border border-transparent p-1 text-gray-400 hover:text-purple-600",title:"Change Role",onClick:F=>D(a)},t[27]||(t[27]=[e("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 100 4m0-4v2m0-6V4","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)]),8,Ls)])])]))),128))])):(n(),i("div",Rs,[t[28]||(t[28]=e("svg",{class:"mx-auto h-12 w-12 text-gray-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{d:"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2"})],-1)),t[29]||(t[29]=e("h3",{class:"mt-2 text-sm font-medium text-gray-900 dark:text-white"},"No users found",-1)),e("p",Ss,r(p.value?"No users match your search criteria.":"No users have been created yet."),1)]))]),N(Ze,{show:$.value,user:u.value,onClose:t[4]||(t[4]=a=>$.value=!1)},null,8,["show","user"]),N(te,{"confirm-class":c.value.confirmClass,"confirm-text":c.value.confirmText,message:c.value.message,show:m.value,title:c.value.title,onCancel:t[5]||(t[5]=a=>m.value=!1),onConfirm:T},null,8,["confirm-class","confirm-text","message","show","title"]),N(Bt,{show:l.value,user:u.value,onClose:t[6]||(t[6]=a=>l.value=!1),onUpdated:I},null,8,["show","user"])])}}},Hs=q(Ds,[["__scopeId","data-v-9cc35dda"]]);export{Hs as default};
diff --git a/web/admin-spa/dist/assets/WindowCountdown-Cz478C_V.js b/web/admin-spa/dist/assets/WindowCountdown-Cz478C_V.js
new file mode 100644
index 00000000..ea332930
--- /dev/null
+++ b/web/admin-spa/dist/assets/WindowCountdown-Cz478C_V.js
@@ -0,0 +1 @@
+import{r as P,c as y,o as L,q as R,V as B,x as r,y as o,z as n,L as c,P as l,O as g,B as w,C as v}from"./vue-vendor-DV7DYXbz.js";const E={class:"space-y-1"},I={class:"flex items-center justify-between text-xs"},j={class:"text-gray-500"},F={key:0,class:"font-medium text-gray-700"},V={key:1,class:"font-medium text-orange-600"},z={key:2,class:"font-medium text-gray-500"},D={key:3,class:"font-medium text-gray-400"},W={key:0,class:"space-y-0.5"},K={key:0,class:"space-y-0.5"},O={class:"flex items-center justify-between text-xs"},U={class:"text-gray-600"},A={class:"h-1 w-full rounded-full bg-gray-200"},G={key:1,class:"space-y-0.5"},H={class:"flex items-center justify-between text-xs"},J={class:"text-gray-600"},Q={class:"h-1 w-full rounded-full bg-gray-200"},X={key:2,class:"space-y-0.5"},Y={class:"flex items-center justify-between text-xs"},Z={class:"text-gray-600"},ee={class:"h-1 w-full rounded-full bg-gray-200"},te={key:1,class:"text-xs text-gray-500"},se={key:0},ne={key:1},re={key:2},ie={__name:"WindowCountdown",props:{label:{type:String,default:"窗口限制"},rateLimitWindow:{type:Number,required:!0},windowStartTime:{type:Number,default:null},windowEndTime:{type:Number,default:null},windowRemainingSeconds:{type:Number,default:null},currentRequests:{type:Number,default:0},requestLimit:{type:Number,default:0},currentTokens:{type:Number,default:0},tokenLimit:{type:Number,default:0},currentCost:{type:Number,default:0},costLimit:{type:Number,default:0},showProgress:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!1}},setup(a){const s=a,i=P(s.windowRemainingSeconds);let u=null;const m=y(()=>s.windowStartTime===null?"notStarted":i.value===0?"expired":i.value>0?"active":"unknown"),_=y(()=>s.requestLimit>0),T=y(()=>s.tokenLimit>0),C=y(()=>s.costLimit>0),q=e=>{if(e==null)return"--:--";const t=Math.floor(e/3600),d=Math.floor(e%3600/60),k=e%60;return t>0?`${t}h ${d}m`:d>0?`${d}m ${k}s`:`${k}s`},N=e=>{const t=Math.floor(e/3600),d=Math.floor(e%3600/60);return t>0?`${t}小时${d}分钟`:`${d}分钟`},h=e=>e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(1)+"K":e.toString(),x=()=>{if(!s.requestLimit||s.requestLimit===0)return 0;const e=(s.currentRequests||0)/s.requestLimit*100;return Math.min(e,100)},S=()=>{const e=x();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-blue-500"},p=()=>{if(!s.tokenLimit||s.tokenLimit===0)return 0;const e=(s.currentTokens||0)/s.tokenLimit*100;return Math.min(e,100)},M=()=>{const e=p();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-purple-500"},b=()=>{if(!s.costLimit||s.costLimit===0)return 0;const e=(s.currentCost||0)/s.costLimit*100;return Math.min(e,100)},$=()=>{const e=b();return e>=100?"bg-red-500":e>=80?"bg-yellow-500":"bg-green-500"},f=()=>{if(s.windowEndTime&&i.value>0){const e=Date.now(),t=Math.max(0,Math.floor((s.windowEndTime-e)/1e3));i.value=t,t===0&&u&&(clearInterval(u),u=null)}};return L(()=>s.windowRemainingSeconds,e=>{i.value=e}),L(()=>s.windowEndTime,e=>{e&&(f(),!u&&i.value>0&&(u=setInterval(f,1e3)))}),R(()=>{s.windowEndTime&&i.value>0&&(f(),u=setInterval(f,1e3))}),B(()=>{u&&clearInterval(u)}),(e,t)=>(o(),r("div",E,[n("div",I,[n("span",j,l(a.label),1),m.value==="active"?(o(),r("span",F,[t[0]||(t[0]=n("i",{class:"fas fa-clock mr-1 text-blue-500"},null,-1)),g(" "+l(q(i.value)),1)])):m.value==="expired"?(o(),r("span",V,t[1]||(t[1]=[n("i",{class:"fas fa-sync-alt mr-1"},null,-1),g(" 窗口已过期 ",-1)]))):m.value==="notStarted"?(o(),r("span",z,t[2]||(t[2]=[n("i",{class:"fas fa-pause-circle mr-1"},null,-1),g(" 窗口未激活 ",-1)]))):(o(),r("span",D,l(a.rateLimitWindow)+" 分钟 ",1))]),a.showProgress?(o(),r("div",W,[_.value?(o(),r("div",K,[n("div",O,[t[3]||(t[3]=n("span",{class:"text-gray-400"},"请求",-1)),n("span",U,l(a.currentRequests||0)+"/"+l(a.requestLimit),1)]),n("div",A,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",S()]),style:w({width:x()+"%"})},null,6)])])):c("",!0),T.value?(o(),r("div",G,[n("div",H,[t[4]||(t[4]=n("span",{class:"text-gray-400"},"Token",-1)),n("span",J,l(h(a.currentTokens||0))+"/"+l(h(a.tokenLimit)),1)]),n("div",Q,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",M()]),style:w({width:p()+"%"})},null,6)])])):c("",!0),C.value?(o(),r("div",X,[n("div",Y,[t[5]||(t[5]=n("span",{class:"text-gray-400"},"费用",-1)),n("span",Z," $"+l((a.currentCost||0).toFixed(2))+"/$"+l(a.costLimit.toFixed(2)),1)]),n("div",ee,[n("div",{class:v(["h-1 rounded-full transition-all duration-300",$()]),style:w({width:b()+"%"})},null,6)])])):c("",!0)])):c("",!0),m.value==="active"&&a.showTooltip?(o(),r("div",te,[t[6]||(t[6]=n("i",{class:"fas fa-info-circle mr-1"},null,-1)),i.value<60?(o(),r("span",se,"即将重置")):i.value<300?(o(),r("span",ne,l(Math.ceil(i.value/60))+" 分钟后重置",1)):(o(),r("span",re,l(N(i.value))+"后重置",1))])):c("",!0)]))}};export{ie as _};
diff --git a/web/admin-spa/dist/assets/chart-yFHxLHpB.js b/web/admin-spa/dist/assets/chart-yFHxLHpB.js
new file mode 100644
index 00000000..4009691d
--- /dev/null
+++ b/web/admin-spa/dist/assets/chart-yFHxLHpB.js
@@ -0,0 +1,13 @@
+var Jn=Object.defineProperty;var Qn=(i,t,e)=>t in i?Jn(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var M=(i,t,e)=>Qn(i,typeof t!="symbol"?t+"":t,e);import{C as en}from"./vendor-Dr8jvgFu.js";/*!
+ * Chart.js v4.5.0
+ * https://www.chartjs.org
+ * (c) 2025 Chart.js Contributors
+ * Released under the MIT License
+ */function ct(){}const Zn=(()=>{let i=0;return()=>i++})();function O(i){return i==null}function V(i){if(Array.isArray&&Array.isArray(i))return!0;const t=Object.prototype.toString.call(i);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function T(i){return i!==null&&Object.prototype.toString.call(i)==="[object Object]"}function N(i){return(typeof i=="number"||i instanceof Number)&&isFinite(+i)}function et(i,t){return N(i)?i:t}function D(i,t){return typeof i>"u"?t:i}const to=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100:+i/t,sn=(i,t)=>typeof i=="string"&&i.endsWith("%")?parseFloat(i)/100*t:+i;function z(i,t,e){if(i&&typeof i.call=="function")return i.apply(e,t)}function I(i,t,e,s){let n,o,a;if(V(i))for(o=i.length,n=0;ni,x:i=>i.x,y:i=>i.y};function so(i){const t=i.split("."),e=[];let s="";for(const n of t)s+=n,s.endsWith("\\")?s=s.slice(0,-1)+".":(e.push(s),s="");return e}function no(i){const t=so(i);return e=>{for(const s of t){if(s==="")break;e=e&&e[s]}return e}}function _t(i,t){return(Fi[t]||(Fi[t]=no(t)))(i)}function Si(i){return i.charAt(0).toUpperCase()+i.slice(1)}const re=i=>typeof i<"u",yt=i=>typeof i=="function",Bi=(i,t)=>{if(i.size!==t.size)return!1;for(const e of i)if(!t.has(e))return!1;return!0};function oo(i){return i.type==="mouseup"||i.type==="click"||i.type==="contextmenu"}const R=Math.PI,F=2*R,ao=F+R,Fe=Number.POSITIVE_INFINITY,ro=R/180,j=R/2,St=R/4,Vi=R*2/3,mt=Math.log10,lt=Math.sign;function ie(i,t,e){return Math.abs(i-t)n-o).pop(),t}function co(i){return typeof i=="symbol"||typeof i=="object"&&i!==null&&!(Symbol.toPrimitive in i||"toString"in i||"valueOf"in i)}function Wt(i){return!co(i)&&!isNaN(parseFloat(i))&&isFinite(i)}function ho(i,t){const e=Math.round(i);return e-t<=i&&e+t>=i}function on(i,t,e){let s,n,o;for(s=0,n=i.length;sl&&c=Math.min(t,e)-s&&i<=Math.max(t,e)+s}function Pi(i,t,e){e=e||(a=>i[a]1;)o=n+s>>1,e(o)?n=o:s=o;return{lo:n,hi:s}}const ft=(i,t,e,s)=>Pi(i,e,s?n=>{const o=i[n][t];return oi[n][t]Pi(i,e,s=>i[s][t]>=e);function po(i,t,e){let s=0,n=i.length;for(;ss&&i[n-1]>e;)n--;return s>0||n{const s="_onData"+Si(e),n=i[e];Object.defineProperty(i,e,{configurable:!0,enumerable:!1,value(...o){const a=n.apply(this,o);return i._chartjs.listeners.forEach(r=>{typeof r[s]=="function"&&r[s](...o)}),a}})})}function Hi(i,t){const e=i._chartjs;if(!e)return;const s=e.listeners,n=s.indexOf(t);n!==-1&&s.splice(n,1),!(s.length>0)&&(rn.forEach(o=>{delete i[o]}),delete i._chartjs)}function ln(i){const t=new Set(i);return t.size===i.length?i:Array.from(t)}const cn=function(){return typeof window>"u"?function(i){return i()}:window.requestAnimationFrame}();function hn(i,t){let e=[],s=!1;return function(...n){e=n,s||(s=!0,cn.call(window,()=>{s=!1,i.apply(t,e)}))}}function bo(i,t){let e;return function(...s){return t?(clearTimeout(e),e=setTimeout(i,t,s)):i.apply(this,s),t}}const Di=i=>i==="start"?"left":i==="end"?"right":"center",K=(i,t,e)=>i==="start"?t:i==="end"?e:(t+e)/2,xo=(i,t,e,s)=>i===(s?"left":"right")?e:i==="center"?(t+e)/2:t;function dn(i,t,e){const s=t.length;let n=0,o=s;if(i._sorted){const{iScale:a,vScale:r,_parsed:l}=i,c=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null,h=a.axis,{min:d,max:u,minDefined:f,maxDefined:g}=a.getUserBounds();if(f){if(n=Math.min(ft(l,h,d).lo,e?s:ft(t,h,a.getPixelForValue(d)).lo),c){const p=l.slice(0,n+1).reverse().findIndex(m=>!O(m[r.axis]));n-=Math.max(0,p)}n=Y(n,0,s-1)}if(g){let p=Math.max(ft(l,a.axis,u,!0).hi+1,e?0:ft(t,h,a.getPixelForValue(u),!0).hi+1);if(c){const m=l.slice(p-1).findIndex(b=>!O(b[r.axis]));p+=Math.max(0,m)}o=Y(p,n,s)-n}else o=s-n}return{start:n,count:o}}function un(i){const{xScale:t,yScale:e,_scaleRanges:s}=i,n={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!s)return i._scaleRanges=n,!0;const o=s.xmin!==t.min||s.xmax!==t.max||s.ymin!==e.min||s.ymax!==e.max;return Object.assign(s,n),o}const pe=i=>i===0||i===1,ji=(i,t,e)=>-(Math.pow(2,10*(i-=1))*Math.sin((i-t)*F/e)),$i=(i,t,e)=>Math.pow(2,-10*i)*Math.sin((i-t)*F/e)+1,se={linear:i=>i,easeInQuad:i=>i*i,easeOutQuad:i=>-i*(i-2),easeInOutQuad:i=>(i/=.5)<1?.5*i*i:-.5*(--i*(i-2)-1),easeInCubic:i=>i*i*i,easeOutCubic:i=>(i-=1)*i*i+1,easeInOutCubic:i=>(i/=.5)<1?.5*i*i*i:.5*((i-=2)*i*i+2),easeInQuart:i=>i*i*i*i,easeOutQuart:i=>-((i-=1)*i*i*i-1),easeInOutQuart:i=>(i/=.5)<1?.5*i*i*i*i:-.5*((i-=2)*i*i*i-2),easeInQuint:i=>i*i*i*i*i,easeOutQuint:i=>(i-=1)*i*i*i*i+1,easeInOutQuint:i=>(i/=.5)<1?.5*i*i*i*i*i:.5*((i-=2)*i*i*i*i+2),easeInSine:i=>-Math.cos(i*j)+1,easeOutSine:i=>Math.sin(i*j),easeInOutSine:i=>-.5*(Math.cos(R*i)-1),easeInExpo:i=>i===0?0:Math.pow(2,10*(i-1)),easeOutExpo:i=>i===1?1:-Math.pow(2,-10*i)+1,easeInOutExpo:i=>pe(i)?i:i<.5?.5*Math.pow(2,10*(i*2-1)):.5*(-Math.pow(2,-10*(i*2-1))+2),easeInCirc:i=>i>=1?i:-(Math.sqrt(1-i*i)-1),easeOutCirc:i=>Math.sqrt(1-(i-=1)*i),easeInOutCirc:i=>(i/=.5)<1?-.5*(Math.sqrt(1-i*i)-1):.5*(Math.sqrt(1-(i-=2)*i)+1),easeInElastic:i=>pe(i)?i:ji(i,.075,.3),easeOutElastic:i=>pe(i)?i:$i(i,.075,.3),easeInOutElastic(i){return pe(i)?i:i<.5?.5*ji(i*2,.1125,.45):.5+.5*$i(i*2-1,.1125,.45)},easeInBack(i){return i*i*((1.70158+1)*i-1.70158)},easeOutBack(i){return(i-=1)*i*((1.70158+1)*i+1.70158)+1},easeInOutBack(i){let t=1.70158;return(i/=.5)<1?.5*(i*i*(((t*=1.525)+1)*i-t)):.5*((i-=2)*i*(((t*=1.525)+1)*i+t)+2)},easeInBounce:i=>1-se.easeOutBounce(1-i),easeOutBounce(i){return i<1/2.75?7.5625*i*i:i<2/2.75?7.5625*(i-=1.5/2.75)*i+.75:i<2.5/2.75?7.5625*(i-=2.25/2.75)*i+.9375:7.5625*(i-=2.625/2.75)*i+.984375},easeInOutBounce:i=>i<.5?se.easeInBounce(i*2)*.5:se.easeOutBounce(i*2-1)*.5+.5};function Ci(i){if(i&&typeof i=="object"){const t=i.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function Yi(i){return Ci(i)?i:new en(i)}function qe(i){return Ci(i)?i:new en(i).saturate(.5).darken(.1).hexString()}const _o=["x","y","borderWidth","radius","tension"],yo=["color","borderColor","backgroundColor"];function vo(i){i.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),i.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>t!=="onProgress"&&t!=="onComplete"&&t!=="fn"}),i.set("animations",{colors:{type:"color",properties:yo},numbers:{type:"number",properties:_o}}),i.describe("animations",{_fallback:"animation"}),i.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>t|0}}}})}function Mo(i){i.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}const Ui=new Map;function ko(i,t){t=t||{};const e=i+JSON.stringify(t);let s=Ui.get(e);return s||(s=new Intl.NumberFormat(i,t),Ui.set(e,s)),s}function fe(i,t,e){return ko(t,e).format(i)}const fn={values(i){return V(i)?i:""+i},numeric(i,t,e){if(i===0)return"0";const s=this.chart.options.locale;let n,o=i;if(e.length>1){const c=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(c<1e-4||c>1e15)&&(n="scientific"),o=So(i,e)}const a=mt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),fe(i,s,l)},logarithmic(i,t,e){if(i===0)return"0";const s=e[t].significand||i/Math.pow(10,Math.floor(mt(i)));return[1,2,3,5,10,15].includes(s)||t>.8*e.length?fn.numeric.call(this,i,t,e):""}};function So(i,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&i!==Math.floor(i)&&(e=i-Math.floor(i)),e}var je={formatters:fn};function wo(i){i.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:je.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),i.route("scale.ticks","color","","color"),i.route("scale.grid","color","","borderColor"),i.route("scale.border","color","","borderColor"),i.route("scale.title","color","","color"),i.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&t!=="callback"&&t!=="parser",_indexable:t=>t!=="borderDash"&&t!=="tickBorderDash"&&t!=="dash"}),i.describe("scales",{_fallback:"scale"}),i.describe("scale.ticks",{_scriptable:t=>t!=="backdropPadding"&&t!=="callback",_indexable:t=>t!=="backdropPadding"})}const Rt=Object.create(null),hi=Object.create(null);function ne(i,t){if(!t)return i;const e=t.split(".");for(let s=0,n=e.length;ss.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(s,n)=>qe(n.backgroundColor),this.hoverBorderColor=(s,n)=>qe(n.borderColor),this.hoverColor=(s,n)=>qe(n.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return Je(this,t,e)}get(t){return ne(this,t)}describe(t,e){return Je(hi,t,e)}override(t,e){return Je(Rt,t,e)}route(t,e,s,n){const o=ne(this,t),a=ne(this,s),r="_"+e;Object.defineProperties(o,{[r]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const l=this[r],c=a[n];return T(l)?Object.assign({},c,l):D(l,c)},set(l){this[r]=l}}})}apply(t){t.forEach(e=>e(this))}}var W=new Po({_scriptable:i=>!i.startsWith("on"),_indexable:i=>i!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[vo,Mo,wo]);function Do(i){return!i||O(i.size)||O(i.family)?null:(i.style?i.style+" ":"")+(i.weight?i.weight+" ":"")+i.size+"px "+i.family}function Be(i,t,e,s,n){let o=t[n];return o||(o=t[n]=i.measureText(n).width,e.push(n)),o>s&&(s=o),s}function Co(i,t,e,s){s=s||{};let n=s.data=s.data||{},o=s.garbageCollect=s.garbageCollect||[];s.font!==t&&(n=s.data={},o=s.garbageCollect=[],s.font=t),i.save(),i.font=t;let a=0;const r=e.length;let l,c,h,d,u;for(l=0;le.length){for(l=0;l0&&i.stroke()}}function gt(i,t,e){return e=e||.5,!t||i&&i.x>t.left-e&&i.xt.top-e&&i.y0&&o.strokeColor!=="";let l,c;for(i.save(),i.font=n.string,To(i,o),l=0;l+i||0;function Ai(i,t){const e={},s=T(t),n=s?Object.keys(t):t,o=T(i)?s?a=>D(i[a],i[t[a]]):a=>i[a]:()=>i;for(const a of n)e[a]=Fo(o(a));return e}function pn(i){return Ai(i,{top:"y",right:"x",bottom:"y",left:"x"})}function Tt(i){return Ai(i,["topLeft","topRight","bottomLeft","bottomRight"])}function J(i){const t=pn(i);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function $(i,t){i=i||{},t=t||W.font;let e=D(i.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let s=D(i.style,t.style);s&&!(""+s).match(Eo)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:D(i.family,t.family),lineHeight:zo(D(i.lineHeight,t.lineHeight),e),size:e,style:s,weight:D(i.weight,t.weight),string:""};return n.string=Do(n),n}function qt(i,t,e,s){let n,o,a;for(n=0,o=i.length;ne&&r===0?0:r+l;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function vt(i,t){return Object.assign(Object.create(i),t)}function Oi(i,t=[""],e,s,n=()=>i[0]){const o=e||i;typeof s>"u"&&(s=_n("_fallback",i));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:i,_rootScopes:o,_fallback:s,_getTarget:n,override:r=>Oi([r,...i],t,o,s)};return new Proxy(a,{deleteProperty(r,l){return delete r[l],delete r._keys,delete i[0][l],!0},get(r,l){return bn(r,l,()=>Uo(l,t,i,r))},getOwnPropertyDescriptor(r,l){return Reflect.getOwnPropertyDescriptor(r._scopes[0],l)},getPrototypeOf(){return Reflect.getPrototypeOf(i[0])},has(r,l){return Gi(r).includes(l)},ownKeys(r){return Gi(r)},set(r,l,c){const h=r._storage||(r._storage=n());return r[l]=h[l]=c,delete r._keys,!0}})}function Nt(i,t,e,s){const n={_cacheable:!1,_proxy:i,_context:t,_subProxy:e,_stack:new Set,_descriptors:mn(i,s),setContext:o=>Nt(i,o,e,s),override:o=>Nt(i.override(o),t,e,s)};return new Proxy(n,{deleteProperty(o,a){return delete o[a],delete i[a],!0},get(o,a,r){return bn(o,a,()=>Wo(o,a,r))},getOwnPropertyDescriptor(o,a){return o._descriptors.allKeys?Reflect.has(i,a)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(i,a)},getPrototypeOf(){return Reflect.getPrototypeOf(i)},has(o,a){return Reflect.has(i,a)},ownKeys(){return Reflect.ownKeys(i)},set(o,a,r){return i[a]=r,delete o[a],!0}})}function mn(i,t={scriptable:!0,indexable:!0}){const{_scriptable:e=t.scriptable,_indexable:s=t.indexable,_allKeys:n=t.allKeys}=i;return{allKeys:n,scriptable:e,indexable:s,isScriptable:yt(e)?e:()=>e,isIndexable:yt(s)?s:()=>s}}const Vo=(i,t)=>i?i+Si(t):t,Ti=(i,t)=>T(t)&&i!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function bn(i,t,e){if(Object.prototype.hasOwnProperty.call(i,t)||t==="constructor")return i[t];const s=e();return i[t]=s,s}function Wo(i,t,e){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=i;let r=s[t];return yt(r)&&a.isScriptable(t)&&(r=No(t,r,i,e)),V(r)&&r.length&&(r=Ho(t,r,i,a.isIndexable)),Ti(t,r)&&(r=Nt(r,n,o&&o[t],a)),r}function No(i,t,e,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=e;if(r.has(i))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+i);r.add(i);let l=t(o,a||s);return r.delete(i),Ti(i,l)&&(l=Li(n._scopes,n,i,l)),l}function Ho(i,t,e,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=e;if(typeof o.index<"u"&&s(i))return t[o.index%t.length];if(T(t[0])){const l=t,c=n._scopes.filter(h=>h!==l);t=[];for(const h of l){const d=Li(c,n,i,h);t.push(Nt(d,o,a&&a[i],r))}}return t}function xn(i,t,e){return yt(i)?i(t,e):i}const jo=(i,t)=>i===!0?t:typeof i=="string"?_t(t,i):void 0;function $o(i,t,e,s,n){for(const o of t){const a=jo(e,o);if(a){i.add(a);const r=xn(a._fallback,e,n);if(typeof r<"u"&&r!==e&&r!==s)return r}else if(a===!1&&typeof s<"u"&&e!==s)return null}return!1}function Li(i,t,e,s){const n=t._rootScopes,o=xn(t._fallback,e,s),a=[...i,...n],r=new Set;r.add(s);let l=Ki(r,a,e,o||e,s);return l===null||typeof o<"u"&&o!==e&&(l=Ki(r,a,o,l,s),l===null)?!1:Oi(Array.from(r),[""],n,o,()=>Yo(t,e,s))}function Ki(i,t,e,s,n){for(;e;)e=$o(i,t,e,s,n);return e}function Yo(i,t,e){const s=i._getTarget();t in s||(s[t]={});const n=s[t];return V(n)&&T(e)?e:n||{}}function Uo(i,t,e,s){let n;for(const o of t)if(n=_n(Vo(o,i),e),typeof n<"u")return Ti(i,n)?Li(e,s,i,n):n}function _n(i,t){for(const e of t){if(!e)continue;const s=e[i];if(typeof s<"u")return s}}function Gi(i){let t=i._keys;return t||(t=i._keys=Xo(i._scopes)),t}function Xo(i){const t=new Set;for(const e of i)for(const s of Object.keys(e).filter(n=>!n.startsWith("_")))t.add(s);return Array.from(t)}function yn(i,t,e,s){const{iScale:n}=i,{key:o="r"}=this._parsing,a=new Array(s);let r,l,c,h;for(r=0,l=s;rti==="x"?"y":"x";function Go(i,t,e,s){const n=i.skip?t:i,o=t,a=e.skip?t:e,r=ci(o,n),l=ci(a,o);let c=r/(r+l),h=l/(r+l);c=isNaN(c)?0:c,h=isNaN(h)?0:h;const d=s*c,u=s*h;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function qo(i,t,e){const s=i.length;let n,o,a,r,l,c=Ht(i,0);for(let h=0;h!c.skip)),t.cubicInterpolationMode==="monotone")Qo(i,n);else{let c=s?i[i.length-1]:i[0];for(o=0,a=i.length;oi.ownerDocument.defaultView.getComputedStyle(i,null);function ea(i,t){return Ue(i).getPropertyValue(t)}const ia=["top","right","bottom","left"];function Lt(i,t,e){const s={};e=e?"-"+e:"";for(let n=0;n<4;n++){const o=ia[n];s[o]=parseFloat(i[t+"-"+o+e])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const sa=(i,t,e)=>(i>0||t>0)&&(!e||!e.shadowRoot);function na(i,t){const e=i.touches,s=e&&e.length?e[0]:i,{offsetX:n,offsetY:o}=s;let a=!1,r,l;if(sa(n,o,i.target))r=n,l=o;else{const c=t.getBoundingClientRect();r=s.clientX-c.left,l=s.clientY-c.top,a=!0}return{x:r,y:l,box:a}}function Ct(i,t){if("native"in i)return i;const{canvas:e,currentDevicePixelRatio:s}=t,n=Ue(e),o=n.boxSizing==="border-box",a=Lt(n,"padding"),r=Lt(n,"border","width"),{x:l,y:c,box:h}=na(i,e),d=a.left+(h&&r.left),u=a.top+(h&&r.top);let{width:f,height:g}=t;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*e.width/s),y:Math.round((c-u)/g*e.height/s)}}function oa(i,t,e){let s,n;if(t===void 0||e===void 0){const o=i&&Ii(i);if(!o)t=i.clientWidth,e=i.clientHeight;else{const a=o.getBoundingClientRect(),r=Ue(o),l=Lt(r,"border","width"),c=Lt(r,"padding");t=a.width-c.width-l.width,e=a.height-c.height-l.height,s=Ve(r.maxWidth,o,"clientWidth"),n=Ve(r.maxHeight,o,"clientHeight")}}return{width:t,height:e,maxWidth:s||Fe,maxHeight:n||Fe}}const be=i=>Math.round(i*10)/10;function aa(i,t,e,s){const n=Ue(i),o=Lt(n,"margin"),a=Ve(n.maxWidth,i,"clientWidth")||Fe,r=Ve(n.maxHeight,i,"clientHeight")||Fe,l=oa(i,t,e);let{width:c,height:h}=l;if(n.boxSizing==="content-box"){const u=Lt(n,"border","width"),f=Lt(n,"padding");c-=f.width+u.width,h-=f.height+u.height}return c=Math.max(0,c-o.width),h=Math.max(0,s?c/s:h-o.height),c=be(Math.min(c,a,l.maxWidth)),h=be(Math.min(h,r,l.maxHeight)),c&&!h&&(h=be(c/2)),(t!==void 0||e!==void 0)&&s&&l.height&&h>l.height&&(h=l.height,c=be(Math.floor(h*s))),{width:c,height:h}}function qi(i,t,e){const s=t||1,n=Math.floor(i.height*s),o=Math.floor(i.width*s);i.height=Math.floor(i.height),i.width=Math.floor(i.width);const a=i.canvas;return a.style&&(e||!a.style.height&&!a.style.width)&&(a.style.height=`${i.height}px`,a.style.width=`${i.width}px`),i.currentDevicePixelRatio!==s||a.height!==n||a.width!==o?(i.currentDevicePixelRatio=s,a.height=n,a.width=o,i.ctx.setTransform(s,0,0,s,0,0),!0):!1}const ra=function(){let i=!1;try{const t={get passive(){return i=!0,!1}};Ri()&&(window.addEventListener("test",null,t),window.removeEventListener("test",null,t))}catch{}return i}();function Ji(i,t){const e=ea(i,t),s=e&&e.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function At(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:i.y+e*(t.y-i.y)}}function la(i,t,e,s){return{x:i.x+e*(t.x-i.x),y:s==="middle"?e<.5?i.y:t.y:s==="after"?e<1?i.y:t.y:e>0?t.y:i.y}}function ca(i,t,e,s){const n={x:i.cp2x,y:i.cp2y},o={x:t.cp1x,y:t.cp1y},a=At(i,n,e),r=At(n,o,e),l=At(o,t,e),c=At(a,r,e),h=At(r,l,e);return At(c,h,e)}const ha=function(i,t){return{x(e){return i+i+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,s){return e-s},leftForLtr(e,s){return e-s}}},da=function(){return{x(i){return i},setWidth(i){},textAlign(i){return i},xPlus(i,t){return i+t},leftForLtr(i,t){return i}}};function Vt(i,t,e){return i?ha(t,e):da()}function Mn(i,t){let e,s;(t==="ltr"||t==="rtl")&&(e=i.canvas.style,s=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),i.prevTextDirection=s)}function kn(i,t){t!==void 0&&(delete i.prevTextDirection,i.canvas.style.setProperty("direction",t[0],t[1]))}function Sn(i){return i==="angle"?{between:le,compare:uo,normalize:G}:{between:ut,compare:(t,e)=>t-e,normalize:t=>t}}function Qi({start:i,end:t,count:e,loop:s,style:n}){return{start:i%e,end:t%e,loop:s&&(t-i+1)%e===0,style:n}}function ua(i,t,e){const{property:s,start:n,end:o}=e,{between:a,normalize:r}=Sn(s),l=t.length;let{start:c,end:h,loop:d}=i,u,f;if(d){for(c+=l,h+=l,u=0,f=l;ul(n,v,b)&&r(n,v)!==0,_=()=>r(o,b)===0||l(o,v,b),k=()=>p||y(),S=()=>!p||_();for(let w=h,P=h;w<=d;++w)x=t[w%a],!x.skip&&(b=c(x[s]),b!==v&&(p=l(b,n,o),m===null&&k()&&(m=r(b,n)===0?w:P),m!==null&&S()&&(g.push(Qi({start:m,end:w,loop:u,count:a,style:f})),m=null),P=w,v=b));return m!==null&&g.push(Qi({start:m,end:d,loop:u,count:a,style:f})),g}function Pn(i,t){const e=[],s=i.segments;for(let n=0;nn&&i[o%t].skip;)o--;return o%=t,{start:n,end:o}}function ga(i,t,e,s){const n=i.length,o=[];let a=t,r=i[t],l;for(l=t+1;l<=e;++l){const c=i[l%n];c.skip||c.stop?r.skip||(s=!1,o.push({start:t%n,end:(l-1)%n,loop:s}),t=a=c.stop?l:null):(a=l,r.skip&&(t=l)),r=c}return a!==null&&o.push({start:t%n,end:a%n,loop:s}),o}function pa(i,t){const e=i.points,s=i.options.spanGaps,n=e.length;if(!n)return[];const o=!!i._loop,{start:a,end:r}=fa(e,n,o,s);if(s===!0)return Zi(i,[{start:a,end:r,loop:o}],e,t);const l=rr({chart:t,initial:e.initial,numSteps:a,currentStep:Math.min(s-e.start,a)}))}_refresh(){this._request||(this._running=!0,this._request=cn.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((s,n)=>{if(!s.running||!s.items.length)return;const o=s.items;let a=o.length-1,r=!1,l;for(;a>=0;--a)l=o[a],l._active?(l._total>s.duration&&(s.duration=l._total),l.tick(t),r=!0):(o[a]=o[o.length-1],o.pop());r&&(n.draw(),this._notify(n,s,t,"progress")),o.length||(s.running=!1,this._notify(n,s,t,"complete"),s.initial=!1),e+=o.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){const e=this._charts;let s=e.get(t);return s||(s={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,s)),s}listen(t,e,s){this._getAnims(t).listeners[e].push(s)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((s,n)=>Math.max(s,n._duration),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const s=e.items;let n=s.length-1;for(;n>=0;--n)s[n].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var ht=new _a;const es="transparent",ya={boolean(i,t,e){return e>.5?t:i},color(i,t,e){const s=Yi(i||es),n=s.valid&&Yi(t||es);return n&&n.valid?n.mix(s,e).hexString():t},number(i,t,e){return i+(t-i)*e}};class va{constructor(t,e,s,n){const o=e[s];n=qt([t.to,n,o,t.from]);const a=qt([t.from,o,n]);this._active=!0,this._fn=t.fn||ya[t.type||typeof a],this._easing=se[t.easing]||se.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=s,this._from=a,this._to=n,this._promises=void 0}active(){return this._active}update(t,e,s){if(this._active){this._notify(!1);const n=this._target[this._prop],o=s-this._start,a=this._duration-o;this._start=s,this._duration=Math.floor(Math.max(a,t.duration)),this._total+=o,this._loop=!!t.loop,this._to=qt([t.to,e,n,t.from]),this._from=qt([t.from,n,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,s=this._duration,n=this._prop,o=this._from,a=this._loop,r=this._to;let l;if(this._active=o!==r&&(a||e1?2-l:l,l=this._easing(Math.min(1,Math.max(0,l))),this._target[n]=this._fn(o,r,l)}wait(){const t=this._promises||(this._promises=[]);return new Promise((e,s)=>{t.push({res:e,rej:s})})}_notify(t){const e=t?"res":"rej",s=this._promises||[];for(let n=0;n{const o=t[n];if(!T(o))return;const a={};for(const r of e)a[r]=o[r];(V(o.properties)&&o.properties||[n]).forEach(r=>{(r===n||!s.has(r))&&s.set(r,a)})})}_animateOptions(t,e){const s=e.options,n=ka(t,s);if(!n)return[];const o=this._createAnimations(n,s);return s.$shared&&Ma(t.options.$animations,s).then(()=>{t.options=s},()=>{}),o}_createAnimations(t,e){const s=this._properties,n=[],o=t.$animations||(t.$animations={}),a=Object.keys(e),r=Date.now();let l;for(l=a.length-1;l>=0;--l){const c=a[l];if(c.charAt(0)==="$")continue;if(c==="options"){n.push(...this._animateOptions(t,e));continue}const h=e[c];let d=o[c];const u=s.get(c);if(d)if(u&&d.active()){d.update(u,h,r);continue}else d.cancel();if(!u||!u.duration){t[c]=h;continue}o[c]=d=new va(u,t,c,h),n.push(d)}return n}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}const s=this._createAnimations(t,e);if(s.length)return ht.add(this._chart,s),!0}}function Ma(i,t){const e=[],s=Object.keys(t);for(let n=0;n0||!e&&o<0)return n.index}return null}function os(i,t){const{chart:e,_cachedMeta:s}=i,n=e._stacks||(e._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,c=a.axis,h=Da(o,a,s),d=t.length;let u;for(let f=0;fe[s].axis===t).shift()}function Oa(i,t){return vt(i,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function Ta(i,t,e){return vt(i,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function Yt(i,t){const e=i.controller.index,s=i.vScale&&i.vScale.axis;if(s){t=t||i._parsed;for(const n of t){const o=n._stacks;if(!o||o[s]===void 0||o[s][e]===void 0)return;delete o[s][e],o[s]._visualValues!==void 0&&o[s]._visualValues[e]!==void 0&&delete o[s]._visualValues[e]}}}const ti=i=>i==="reset"||i==="none",as=(i,t)=>t?i:Object.assign({},i),La=(i,t,e)=>i&&!t.hidden&&t._stacked&&{keys:An(e,!0),values:null};class nt{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Qe(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Yt(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,s=this.getDataset(),n=(d,u,f,g)=>d==="x"?u:d==="r"?g:f,o=e.xAxisID=D(s.xAxisID,Ze(t,"x")),a=e.yAxisID=D(s.yAxisID,Ze(t,"y")),r=e.rAxisID=D(s.rAxisID,Ze(t,"r")),l=e.indexAxis,c=e.iAxisID=n(l,o,a,r),h=e.vAxisID=n(l,a,o,r);e.xScale=this.getScaleForId(o),e.yScale=this.getScaleForId(a),e.rScale=this.getScaleForId(r),e.iScale=this.getScaleForId(c),e.vScale=this.getScaleForId(h)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Hi(this._data,this),t._stacked&&Yt(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),s=this._data;if(T(e)){const n=this._cachedMeta;this._data=Pa(e,n)}else if(s!==e){if(s){Hi(s,this);const n=this._cachedMeta;Yt(n),n._parsed=[]}e&&Object.isExtensible(e)&&mo(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,s=this.getDataset();let n=!1;this._dataCheck();const o=e._stacked;e._stacked=Qe(e.vScale,e),e.stack!==s.stack&&(n=!0,Yt(e),e.stack=s.stack),this._resyncElements(t),(n||o!==e._stacked)&&(os(this,e._parsed),e._stacked=Qe(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),s=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(s,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:s,_data:n}=this,{iScale:o,_stacked:a}=s,r=o.axis;let l=t===0&&e===n.length?!0:s._sorted,c=t>0&&s._parsed[t-1],h,d,u;if(this._parsing===!1)s._parsed=n,s._sorted=!0,u=n;else{V(n[t])?u=this.parseArrayData(s,n,t,e):T(n[t])?u=this.parseObjectData(s,n,t,e):u=this.parsePrimitiveData(s,n,t,e);const f=()=>d[r]===null||c&&d[r]p||d=0;--u)if(!g()){this.updateRangeFromParsed(c,t,f,l);break}}return c}getAllParsedValues(t){const e=this._cachedMeta._parsed,s=[];let n,o,a;for(n=0,o=e.length;n=0&&tthis.getContext(s,n,e),p=c.resolveNamedOptions(u,f,g,d);return p.$shared&&(p.$shared=l,o[a]=Object.freeze(as(p,l))),p}_resolveAnimations(t,e,s){const n=this.chart,o=this._cachedDataOpts,a=`animation-${e}`,r=o[a];if(r)return r;let l;if(n.options.animation!==!1){const h=this.chart.config,d=h.datasetAnimationScopeKeys(this._type,e),u=h.getOptionScopes(this.getDataset(),d);l=h.createResolver(u,this.getContext(t,s,e))}const c=new Cn(n,l&&l.animations);return l&&l._cacheable&&(o[a]=Object.freeze(c)),c}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||ti(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const s=this.resolveDataElementOptions(t,e),n=this._sharedOptions,o=this.getSharedOptions(s),a=this.includeOptions(e,o)||o!==n;return this.updateSharedOptions(o,e,s),{sharedOptions:o,includeOptions:a}}updateElement(t,e,s,n){ti(n)?Object.assign(t,s):this._resolveAnimations(e,n).update(t,s)}updateSharedOptions(t,e,s){t&&!ti(e)&&this._resolveAnimations(void 0,e).update(t,s)}_setStyle(t,e,s,n){t.active=n;const o=this.getStyle(e,n);this._resolveAnimations(e,s,n).update(t,{options:!n&&this.getSharedOptions(o)||o})}removeHoverStyle(t,e,s){this._setStyle(t,s,"active",!1)}setHoverStyle(t,e,s){this._setStyle(t,s,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,s=this._cachedMeta.data;for(const[r,l,c]of this._syncList)this[r](l,c);this._syncList=[];const n=s.length,o=e.length,a=Math.min(o,n);a&&this.parse(0,a),o>n?this._insertElements(n,o-n,t):o{for(c.length+=e,r=c.length-1;r>=a;r--)c[r]=c[r-e]};for(l(o),r=t;rn-o))}return i._cache.$bar}function Ia(i){const t=i.iScale,e=Ra(t,i.type);let s=t._length,n,o,a,r;const l=()=>{a===32767||a===-32768||(re(r)&&(s=Math.min(s,Math.abs(a-r)||s)),r=a)};for(n=0,o=e.length;n0?n[i-1]:null,r=iMath.abs(r)&&(l=r,c=a),t[e.axis]=c,t._custom={barStart:l,barEnd:c,start:n,end:o,min:a,max:r}}function On(i,t,e,s){return V(i)?Fa(i,t,e,s):t[e.axis]=e.parse(i,s),t}function rs(i,t,e,s){const n=i.iScale,o=i.vScale,a=n.getLabels(),r=n===o,l=[];let c,h,d,u;for(c=e,h=e+s;c=e?1:-1)}function Va(i){let t,e,s,n,o;return i.horizontal?(t=i.base>i.x,e="left",s="right"):(t=i.baseh.controller.options.grouped),o=s.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[s.axis],c=h=>{const d=h._parsed.find(f=>f[s.axis]===l),u=d&&d[h.vScale.axis];if(O(u)||isNaN(u))return!0};for(const h of n)if(!(e!==void 0&&c(h))&&((o===!1||a.indexOf(h.stack)===-1||o===void 0&&h.stack===void 0)&&a.push(h.stack),h.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter(s=>t[s].axis===e).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const s of this.chart.data.datasets)t[D(this.chart.options.indexAxis==="x"?s.xAxisID:s.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,s){const n=this._getStacks(t,s),o=e!==void 0?n.indexOf(e):-1;return o===-1?n.length-1:o}_getRuler(){const t=this.options,e=this._cachedMeta,s=e.iScale,n=[];let o,a;for(o=0,a=e.data.length;o=0;--s)e=Math.max(e,t[s].size(this.resolveDataElementOptions(s))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart.data.labels||[],{xScale:n,yScale:o}=e,a=this.getParsed(t),r=n.getLabelForValue(a.x),l=o.getLabelForValue(a.y),c=a._custom;return{label:s[t]||"",value:"("+r+", "+l+(c?", "+c:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r}=this._cachedMeta,{sharedOptions:l,includeOptions:c}=this._getSharedOptions(e,n),h=a.axis,d=r.axis;for(let u=e;ule(v,r,l,!0)?1:Math.max(y,y*e,_,_*e),g=(v,y,_)=>le(v,r,l,!0)?-1:Math.min(y,y*e,_,_*e),p=f(0,c,d),m=f(j,h,u),b=g(R,c,d),x=g(R+j,h,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}class Ot extends nt{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const s=this.getDataset().data,n=this._cachedMeta;if(this._parsing===!1)n._parsed=s;else{let o=l=>+s[l];if(T(s[t])){const{key:l="value"}=this._parsing;o=c=>+_t(s[c],l)}let a,r;for(a=t,r=t+e;a0&&!isNaN(t)?F*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t],s.options.locale);return{label:n[t]||"",value:o}}getMaxBorderWidth(t){let e=0;const s=this.chart;let n,o,a,r,l;if(!t){for(n=0,o=s.data.datasets.length;nt!=="spacing",_indexable:t=>t!=="spacing"&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")}),M(Ot,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}}});class Ce extends nt{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:s,data:n=[],_dataset:o}=e,a=this.chart._animationsDisabled;let{start:r,count:l}=dn(e,n,a);this._drawStart=r,this._drawCount=l,un(e)&&(r=0,l=n.length),s._chart=this.chart,s._datasetIndex=this.index,s._decimated=!!o._decimated,s.points=n;const c=this.resolveDatasetElementOptions(t);this.options.showLine||(c.borderWidth=0),c.segment=this.options.segment,this.updateElement(s,void 0,{animated:!a,options:c},t),this.updateElements(n,r,l,t)}updateElements(t,e,s,n){const o=n==="reset",{iScale:a,vScale:r,_stacked:l,_dataset:c}=this._cachedMeta,{sharedOptions:h,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=Wt(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||n==="none",x=e+s,v=t.length;let y=e>0&&this.getParsed(e-1);for(let _=0;_=x){S.skip=!0;continue}const w=this.getParsed(_),P=O(w[f]),C=S[u]=a.getPixelForValue(w[u],_),A=S[f]=o||P?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,w,l):w[f],_);S.skip=isNaN(C)||isNaN(A)||P,S.stop=_>0&&Math.abs(w[u]-y[u])>m,p&&(S.parsed=w,S.raw=c.data[_]),d&&(S.options=h||this.resolveDataElementOptions(_,k.active?"active":n)),b||this.updateElement(k,_,S,n),y=w}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,s=e.options&&e.options.borderWidth||0,n=t.data||[];if(!n.length)return s;const o=n[0].size(this.resolveDataElementOptions(0)),a=n[n.length-1].size(this.resolveDataElementOptions(n.length-1));return Math.max(s,o,a)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}M(Ce,"id","line"),M(Ce,"defaults",{datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1}),M(Ce,"overrides",{scales:{_index_:{type:"category"},_value_:{type:"linear"}}});class oe extends nt{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,s=this.chart,n=s.data.labels||[],o=fe(e._parsed[t].r,s.options.locale);return{label:n[t]||"",value:o}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach((s,n)=>{const o=this.getParsed(n).r;!isNaN(o)&&this.chart.getDataVisibility(n)&&(oe.max&&(e.max=o))}),e}_updateRadius(){const t=this.chart,e=t.chartArea,s=t.options,n=Math.min(e.right-e.left,e.bottom-e.top),o=Math.max(n/2,0),a=Math.max(s.cutoutPercentage?o/100*s.cutoutPercentage:1,0),r=(o-a)/t.getVisibleDatasetCount();this.outerRadius=o-r*this.index,this.innerRadius=this.outerRadius-r}updateElements(t,e,s,n){const o=n==="reset",a=this.chart,l=a.options.animation,c=this._cachedMeta.rScale,h=c.xCenter,d=c.yCenter,u=c.getIndexAngle(0)-.5*R;let f=u,g;const p=360/this.countVisibleElements();for(g=0;g{!isNaN(this.getParsed(n).r)&&this.chart.getDataVisibility(n)&&e++}),e}_computeAngle(t,e,s){return this.chart.getDataVisibility(t)?st(this.resolveDataElementOptions(t,e).angle||s):0}}M(oe,"id","polarArea"),M(oe,"defaults",{dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0}),M(oe,"overrides",{aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:s,color:n}}=t.legend.options;return e.labels.map((o,a)=>{const l=t.getDatasetMeta(0).controller.getStyle(a);return{text:o,fillStyle:l.backgroundColor,strokeStyle:l.borderColor,fontColor:n,lineWidth:l.borderWidth,pointStyle:s,hidden:!t.getDataVisibility(a),index:a}})}return[]}},onClick(t,e,s){s.chart.toggleDataVisibility(e.index),s.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}});class ui extends Ot{}M(ui,"id","pie"),M(ui,"defaults",{cutout:0,rotation:0,circumference:360,radius:"100%"});class Ae extends nt{getLabelAndValue(t){const e=this._cachedMeta.vScale,s=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(s[e.axis])}}parseObjectData(t,e,s,n){return yn.bind(this)(t,e,s,n)}update(t){const e=this._cachedMeta,s=e.dataset,n=e.data||[],o=e.iScale.getLabels();if(s.points=n,t!=="resize"){const a=this.resolveDatasetElementOptions(t);this.options.showLine||(a.borderWidth=0);const r={_loop:!0,_fullLoop:o.length===n.length,options:a};this.updateElement(s,void 0,r,t)}this.updateElements(n,0,n.length,t)}updateElements(t,e,s,n){const o=this._cachedMeta.rScale,a=n==="reset";for(let r=e;r0&&this.getParsed(e-1);for(let y=e;y0&&Math.abs(k[f]-v[f])>b,m&&(S.parsed=k,S.raw=c.data[y]),u&&(S.options=d||this.resolveDataElementOptions(y,_.active?"active":n)),x||this.updateElement(_,y,S,n),v=k}this.updateSharedOptions(d,n,h)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let r=0;for(let l=e.length-1;l>=0;--l)r=Math.max(r,e[l].size(this.resolveDataElementOptions(l))/2);return r>0&&r}const s=t.dataset,n=s.options&&s.options.borderWidth||0;if(!e.length)return n;const o=e[0].size(this.resolveDataElementOptions(0)),a=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(n,o,a)/2}}M(Oe,"id","scatter"),M(Oe,"defaults",{datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1}),M(Oe,"overrides",{interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}});var $a=Object.freeze({__proto__:null,BarController:Pe,BubbleController:De,DoughnutController:Ot,LineController:Ce,PieController:ui,PolarAreaController:oe,RadarController:Ae,ScatterController:Oe});function Pt(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Ei{constructor(t){M(this,"options");this.options=t||{}}static override(t){Object.assign(Ei.prototype,t)}init(){}formats(){return Pt()}parse(){return Pt()}format(){return Pt()}add(){return Pt()}diff(){return Pt()}startOf(){return Pt()}endOf(){return Pt()}}var Ya={_date:Ei};function Ua(i,t,e,s){const{controller:n,data:o,_sorted:a}=i,r=n._cachedMeta.iScale,l=i.dataset&&i.dataset.options?i.dataset.options.spanGaps:null;if(r&&t===r.axis&&t!=="r"&&a&&o.length){const c=r._reversePixels?go:ft;if(s){if(n._sharedOptions){const h=o[0],d=typeof h.getRange=="function"&&h.getRange(t);if(d){const u=c(o,t,e-d),f=c(o,t,e+d);return{lo:u.lo,hi:f.hi}}}}else{const h=c(o,t,e);if(l){const{vScale:d}=n._cachedMeta,{_parsed:u}=i,f=u.slice(0,h.lo+1).reverse().findIndex(p=>!O(p[d.axis]));h.lo-=Math.max(0,f);const g=u.slice(h.hi).findIndex(p=>!O(p[d.axis]));h.hi+=Math.max(0,g)}return h}}return{lo:0,hi:o.length-1}}function Xe(i,t,e,s,n){const o=i.getSortedVisibleDatasetMetas(),a=e[t];for(let r=0,l=o.length;r{l[a]&&l[a](t[e],n)&&(o.push({element:l,datasetIndex:c,index:h}),r=r||l.inRange(t.x,t.y,n))}),s&&!r?[]:o}var qa={modes:{index(i,t,e,s){const n=Ct(t,i),o=e.axis||"x",a=e.includeInvisible||!1,r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a),l=[];return r.length?(i.getSortedVisibleDatasetMetas().forEach(c=>{const h=r[0].index,d=c.data[h];d&&!d.skip&&l.push({element:d,datasetIndex:c.index,index:h})}),l):[]},dataset(i,t,e,s){const n=Ct(t,i),o=e.axis||"xy",a=e.includeInvisible||!1;let r=e.intersect?ii(i,n,o,s,a):si(i,n,o,!1,s,a);if(r.length>0){const l=r[0].datasetIndex,c=i.getDatasetMeta(l).data;r=[];for(let h=0;he.pos===t)}function ds(i,t){return i.filter(e=>Tn.indexOf(e.pos)===-1&&e.box.axis===t)}function Xt(i,t){return i.sort((e,s)=>{const n=t?s:e,o=t?e:s;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function Ja(i){const t=[];let e,s,n,o,a,r;for(e=0,s=(i||[]).length;ec.box.fullSize),!0),s=Xt(Ut(t,"left"),!0),n=Xt(Ut(t,"right")),o=Xt(Ut(t,"top"),!0),a=Xt(Ut(t,"bottom")),r=ds(t,"x"),l=ds(t,"y");return{fullSize:e,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ut(t,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}function us(i,t,e,s){return Math.max(i[e],t[e])+Math.max(i[s],t[s])}function Ln(i,t){i.top=Math.max(i.top,t.top),i.left=Math.max(i.left,t.left),i.bottom=Math.max(i.bottom,t.bottom),i.right=Math.max(i.right,t.right)}function er(i,t,e,s){const{pos:n,box:o}=e,a=i.maxPadding;if(!T(n)){e.size&&(i[n]-=e.size);const d=s[e.stack]||{size:0,count:1};d.size=Math.max(d.size,e.horizontal?o.height:o.width),e.size=d.size/d.count,i[n]+=e.size}o.getPadding&&Ln(a,o.getPadding());const r=Math.max(0,t.outerWidth-us(a,i,"left","right")),l=Math.max(0,t.outerHeight-us(a,i,"top","bottom")),c=r!==i.w,h=l!==i.h;return i.w=r,i.h=l,e.horizontal?{same:c,other:h}:{same:h,other:c}}function ir(i){const t=i.maxPadding;function e(s){const n=Math.max(t[s]-i[s],0);return i[s]+=n,n}i.y+=e("top"),i.x+=e("left"),e("right"),e("bottom")}function sr(i,t){const e=t.maxPadding;function s(n){const o={left:0,top:0,right:0,bottom:0};return n.forEach(a=>{o[a]=Math.max(t[a],e[a])}),o}return s(i?["left","right"]:["top","bottom"])}function Jt(i,t,e,s){const n=[];let o,a,r,l,c,h;for(o=0,a=i.length,c=0;o{typeof p.beforeLayout=="function"&&p.beforeLayout()});const h=l.reduce((p,m)=>m.box.options&&m.box.options.display===!1?p:p+1,0)||1,d=Object.freeze({outerWidth:t,outerHeight:e,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/h,hBoxMaxHeight:a/2}),u=Object.assign({},n);Ln(u,J(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=Za(l.concat(c),d);Jt(r.fullSize,f,d,g),Jt(l,f,d,g),Jt(c,f,d,g)&&Jt(l,f,d,g),ir(f),fs(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,fs(r.rightAndBottom,f,d,g),i.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},I(r.chartArea,p=>{const m=p.box;Object.assign(m,i.chartArea),m.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})})}};class Rn{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,s){}removeEventListener(t,e,s){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,s,n){return e=Math.max(0,e||t.width),s=s||t.height,{width:e,height:Math.max(0,n?Math.floor(e/n):s)}}isAttached(t){return!0}updateConfig(t){}}class nr extends Rn{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const Te="$chartjs",or={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},gs=i=>i===null||i==="";function ar(i,t){const e=i.style,s=i.getAttribute("height"),n=i.getAttribute("width");if(i[Te]={initial:{height:s,width:n,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",gs(n)){const o=Ji(i,"width");o!==void 0&&(i.width=o)}if(gs(s))if(i.style.height==="")i.height=i.width/(t||2);else{const o=Ji(i,"height");o!==void 0&&(i.height=o)}return i}const In=ra?{passive:!0}:!1;function rr(i,t,e){i&&i.addEventListener(t,e,In)}function lr(i,t,e){i&&i.canvas&&i.canvas.removeEventListener(t,e,In)}function cr(i,t){const e=or[i.type]||i.type,{x:s,y:n}=Ct(i,t);return{type:e,chart:t,native:i,x:s!==void 0?s:null,y:n!==void 0?n:null}}function We(i,t){for(const e of i)if(e===t||e.contains(t))return!0}function hr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.addedNodes,s),a=a&&!We(r.removedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}function dr(i,t,e){const s=i.canvas,n=new MutationObserver(o=>{let a=!1;for(const r of o)a=a||We(r.removedNodes,s),a=a&&!We(r.addedNodes,s);a&&e()});return n.observe(document,{childList:!0,subtree:!0}),n}const he=new Map;let ps=0;function En(){const i=window.devicePixelRatio;i!==ps&&(ps=i,he.forEach((t,e)=>{e.currentDevicePixelRatio!==i&&t()}))}function ur(i,t){he.size||window.addEventListener("resize",En),he.set(i,t)}function fr(i){he.delete(i),he.size||window.removeEventListener("resize",En)}function gr(i,t,e){const s=i.canvas,n=s&&Ii(s);if(!n)return;const o=hn((r,l)=>{const c=n.clientWidth;e(r,l),c{const l=r[0],c=l.contentRect.width,h=l.contentRect.height;c===0&&h===0||o(c,h)});return a.observe(n),ur(i,o),a}function ni(i,t,e){e&&e.disconnect(),t==="resize"&&fr(i)}function pr(i,t,e){const s=i.canvas,n=hn(o=>{i.ctx!==null&&e(cr(o,i))},i);return rr(s,t,n),n}class mr extends Rn{acquireContext(t,e){const s=t&&t.getContext&&t.getContext("2d");return s&&s.canvas===t?(ar(t,e),s):null}releaseContext(t){const e=t.canvas;if(!e[Te])return!1;const s=e[Te].initial;["height","width"].forEach(o=>{const a=s[o];O(a)?e.removeAttribute(o):e.setAttribute(o,a)});const n=s.style||{};return Object.keys(n).forEach(o=>{e.style[o]=n[o]}),e.width=e.width,delete e[Te],!0}addEventListener(t,e,s){this.removeEventListener(t,e);const n=t.$proxies||(t.$proxies={}),a={attach:hr,detach:dr,resize:gr}[e]||pr;n[e]=a(t,e,s)}removeEventListener(t,e){const s=t.$proxies||(t.$proxies={}),n=s[e];if(!n)return;({attach:ni,detach:ni,resize:ni}[e]||lr)(t,e,n),s[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,s,n){return aa(t,e,s,n)}isAttached(t){const e=t&&Ii(t);return!!(e&&e.isConnected)}}function br(i){return!Ri()||typeof OffscreenCanvas<"u"&&i instanceof OffscreenCanvas?nr:mr}class ot{constructor(){M(this,"x");M(this,"y");M(this,"active",!1);M(this,"options");M(this,"$animations")}tooltipPosition(t){const{x:e,y:s}=this.getProps(["x","y"],t);return{x:e,y:s}}hasValue(){return Wt(this.x)&&Wt(this.y)}getProps(t,e){const s=this.$animations;if(!e||!s)return this;const n={};return t.forEach(o=>{n[o]=s[o]&&s[o].active()?s[o]._to:this[o]}),n}}M(ot,"defaults",{}),M(ot,"defaultRoutes");function xr(i,t){const e=i.options.ticks,s=_r(i),n=Math.min(e.maxTicksLimit||s,s),o=e.major.enabled?vr(t):[],a=o.length,r=o[0],l=o[a-1],c=[];if(a>n)return Mr(t,c,o,a/n),c;const h=yr(o,t,n);if(a>0){let d,u;const f=a>1?Math.round((l-r)/(a-1)):null;for(ye(t,c,h,O(f)?0:r-f,r),d=0,u=a-1;dn)return l}return Math.max(n,1)}function vr(i){const t=[];let e,s;for(e=0,s=i.length;ei==="left"?"right":i==="right"?"left":i,ms=(i,t,e)=>t==="top"||t==="left"?i[t]+e:i[t]-e,bs=(i,t)=>Math.min(t||i,i);function xs(i,t){const e=[],s=i.length/t,n=i.length;let o=0;for(;oa+r)))return l}function Pr(i,t){I(i,e=>{const s=e.gc,n=s.length/2;let o;if(n>t){for(o=0;os?s:e,s=n&&e>s?e:s,{min:et(e,et(s,e)),max:et(s,et(e,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){z(this.options.beforeUpdate,[this])}update(t,e,s){const{beginAtZero:n,grace:o,ticks:a}=this.options,r=a.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=s=Object.assign({left:0,right:0,top:0,bottom:0},s),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+s.left+s.right:this.height+s.top+s.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Bo(this,o,n),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const l=r=o||s<=1||!this.isHorizontal()){this.labelRotation=n;return}const h=this._getLabelSizes(),d=h.widest.width,u=h.highest.height,f=Y(this.chart.width-d,0,this.maxWidth);r=t.offset?this.maxWidth/s:f/(s-1),d+6>r&&(r=f/(s-(t.offset?.5:1)),l=this.maxHeight-Kt(t.grid)-e.padding-_s(t.title,this.chart.options.font),c=Math.sqrt(d*d+u*u),a=wi(Math.min(Math.asin(Y((h.highest.height+6)/r,-1,1)),Math.asin(Y(l/c,-1,1))-Math.asin(Y(u/c,-1,1)))),a=Math.max(n,Math.min(o,a))),this.labelRotation=a}afterCalculateLabelRotation(){z(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){z(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:s,title:n,grid:o}}=this,a=this._isVisible(),r=this.isHorizontal();if(a){const l=_s(n,e.options.font);if(r?(t.width=this.maxWidth,t.height=Kt(o)+l):(t.height=this.maxHeight,t.width=Kt(o)+l),s.display&&this.ticks.length){const{first:c,last:h,widest:d,highest:u}=this._getLabelSizes(),f=s.padding*2,g=st(this.labelRotation),p=Math.cos(g),m=Math.sin(g);if(r){const b=s.mirror?0:m*d.width+p*u.height;t.height=Math.min(this.maxHeight,t.height+b+f)}else{const b=s.mirror?0:p*d.width+m*u.height;t.width=Math.min(this.maxWidth,t.width+b+f)}this._calculatePadding(c,h,m,p)}}this._handleMargins(),r?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,s,n){const{ticks:{align:o,padding:a},position:r}=this.options,l=this.labelRotation!==0,c=r!=="top"&&this.axis==="x";if(this.isHorizontal()){const h=this.getPixelForTick(0)-this.left,d=this.right-this.getPixelForTick(this.ticks.length-1);let u=0,f=0;l?c?(u=n*t.width,f=s*e.height):(u=s*t.height,f=n*e.width):o==="start"?f=e.width:o==="end"?u=t.width:o!=="inner"&&(u=t.width/2,f=e.width/2),this.paddingLeft=Math.max((u-h+a)*this.width/(this.width-h),0),this.paddingRight=Math.max((f-d+a)*this.width/(this.width-d),0)}else{let h=e.height/2,d=t.height/2;o==="start"?(h=0,d=t.height):o==="end"&&(h=e.height,d=0),this.paddingTop=h+a,this.paddingBottom=d+a}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){z(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,s;for(e=0,s=t.length;e({width:a[P]||0,height:r[P]||0});return{first:w(0),last:w(e-1),widest:w(k),highest:w(S),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return fo(this._alignToPixels?wt(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&tr*n?r/s:l/n:l*n0}_computeGridLineItems(t){const e=this.axis,s=this.chart,n=this.options,{grid:o,position:a,border:r}=n,l=o.offset,c=this.isHorizontal(),d=this.ticks.length+(l?1:0),u=Kt(o),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,b=function(B){return wt(s,B,p)};let x,v,y,_,k,S,w,P,C,A,L,U;if(a==="top")x=b(this.bottom),S=this.bottom-u,P=x-m,A=b(t.top)+m,U=t.bottom;else if(a==="bottom")x=b(this.top),A=t.top,U=b(t.bottom)-m,S=x+m,P=this.top+u;else if(a==="left")x=b(this.right),k=this.right-u,w=x-m,C=b(t.left)+m,L=t.right;else if(a==="right")x=b(this.left),C=t.left,L=b(t.right)-m,k=x+m,w=this.left+u;else if(e==="x"){if(a==="center")x=b((t.top+t.bottom)/2+.5);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}A=t.top,U=t.bottom,S=x+m,P=S+u}else if(e==="y"){if(a==="center")x=b((t.left+t.right)/2);else if(T(a)){const B=Object.keys(a)[0],H=a[B];x=b(this.chart.scales[B].getPixelForValue(H))}k=x-m,w=k-u,C=t.left,L=t.right}const tt=D(n.ticks.maxTicksLimit,d),E=Math.max(1,Math.ceil(d/tt));for(v=0;v0&&(kt-=Mt/2);break}ge={left:kt,top:$t,width:Mt+Ft.width,height:jt+Ft.height,color:E.backdropColor}}m.push({label:y,font:P,textOffset:L,options:{rotation:p,color:H,strokeColor:it,strokeWidth:X,textAlign:zt,textBaseline:U,translation:[_,k],backdrop:ge}})}return m}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-st(this.labelRotation))return t==="top"?"left":"right";let n="center";return e.align==="start"?n="left":e.align==="end"?n="right":e.align==="inner"&&(n="inner"),n}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:s,mirror:n,padding:o}}=this.options,a=this._getLabelSizes(),r=t+o,l=a.widest.width;let c,h;return e==="left"?n?(h=this.right+o,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h+=l)):(h=this.right-r,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h=this.left)):e==="right"?n?(h=this.left+o,s==="near"?c="right":s==="center"?(c="center",h-=l/2):(c="left",h-=l)):(h=this.left+r,s==="near"?c="left":s==="center"?(c="center",h+=l/2):(c="right",h=this.right)):c="right",{textAlign:c,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;if(e==="left"||e==="right")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e==="top"||e==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:s,top:n,width:o,height:a}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(s,n,o,a),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const n=this.ticks.findIndex(o=>o.value===t);return n>=0?e.setContext(this.getContext(n)).lineWidth:0}drawGrid(t){const e=this.options.grid,s=this.ctx,n=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let o,a;const r=(l,c,h)=>{!h.width||!h.color||(s.save(),s.lineWidth=h.width,s.strokeStyle=h.color,s.setLineDash(h.borderDash||[]),s.lineDashOffset=h.borderDashOffset,s.beginPath(),s.moveTo(l.x,l.y),s.lineTo(c.x,c.y),s.stroke(),s.restore())};if(e.display)for(o=0,a=n.length;o{this.draw(o)}}]:[{z:s,draw:o=>{this.drawBackground(),this.drawGrid(o),this.drawTitle()}},{z:n,draw:()=>{this.drawBorder()}},{z:e,draw:o=>{this.drawLabels(o)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),s=this.axis+"AxisID",n=[];let o,a;for(o=0,a=e.length;o{const s=e.split("."),n=s.pop(),o=[i].concat(s).join("."),a=t[e].split("."),r=a.pop(),l=a.join(".");W.route(o,n,l,r)})}function Rr(i){return"id"in i&&"defaults"in i}class Ir{constructor(){this.controllers=new ve(nt,"datasets",!0),this.elements=new ve(ot,"elements"),this.plugins=new ve(Object,"plugins"),this.scales=new ve(Et,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,s){[...e].forEach(n=>{const o=s||this._getRegistryForType(n);s||o.isForType(n)||o===this.plugins&&n.id?this._exec(t,o,n):I(n,a=>{const r=s||this._getRegistryForType(a);this._exec(t,r,a)})})}_exec(t,e,s){const n=Si(t);z(s["before"+n],[],s),e[t](s),z(s["after"+n],[],s)}_getRegistryForType(t){for(let e=0;eo.filter(r=>!a.some(l=>r.plugin.id===l.plugin.id));this._notify(n(e,s),t,"stop"),this._notify(n(s,e),t,"start")}}function zr(i){const t={},e=[],s=Object.keys(rt.plugins.items);for(let o=0;o1&&ys(i[0].toLowerCase());if(s)return s}throw new Error(`Cannot determine type of '${i}' axis. Please provide 'axis' or 'position' option.`)}function vs(i,t,e){if(e[t+"AxisID"]===i)return{axis:t}}function jr(i,t){if(t.data&&t.data.datasets){const e=t.data.datasets.filter(s=>s.xAxisID===i||s.yAxisID===i);if(e.length)return vs(i,"x",e[0])||vs(i,"y",e[0])}return{}}function $r(i,t){const e=Rt[i.type]||{scales:{}},s=t.scales||{},n=fi(i.type,t),o=Object.create(null);return Object.keys(s).forEach(a=>{const r=s[a];if(!T(r))return console.error(`Invalid scale configuration for scale: ${a}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${a}`);const l=gi(a,r,jr(a,i),W.scales[r.type]),c=Nr(l,n),h=e.scales||{};o[a]=ee(Object.create(null),[{axis:l},r,h[l],h[c]])}),i.data.datasets.forEach(a=>{const r=a.type||i.type,l=a.indexAxis||fi(r,t),h=(Rt[r]||{}).scales||{};Object.keys(h).forEach(d=>{const u=Wr(d,l),f=a[u+"AxisID"]||u;o[f]=o[f]||Object.create(null),ee(o[f],[{axis:u},s[f],h[d]])})}),Object.keys(o).forEach(a=>{const r=o[a];ee(r,[W.scales[r.type],W.scale])}),o}function zn(i){const t=i.options||(i.options={});t.plugins=D(t.plugins,{}),t.scales=$r(i,t)}function Fn(i){return i=i||{},i.datasets=i.datasets||[],i.labels=i.labels||[],i}function Yr(i){return i=i||{},i.data=Fn(i.data),zn(i),i}const Ms=new Map,Bn=new Set;function Me(i,t){let e=Ms.get(i);return e||(e=t(),Ms.set(i,e),Bn.add(e)),e}const Gt=(i,t,e)=>{const s=_t(t,e);s!==void 0&&i.add(s)};class Ur{constructor(t){this._config=Yr(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Fn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),zn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Me(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Me(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Me(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){const e=t.id,s=this.type;return Me(`${s}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){const s=this._scopeCache;let n=s.get(t);return(!n||e)&&(n=new Map,s.set(t,n)),n}getOptionScopes(t,e,s){const{options:n,type:o}=this,a=this._cachedScopes(t,s),r=a.get(e);if(r)return r;const l=new Set;e.forEach(h=>{t&&(l.add(t),h.forEach(d=>Gt(l,t,d))),h.forEach(d=>Gt(l,n,d)),h.forEach(d=>Gt(l,Rt[o]||{},d)),h.forEach(d=>Gt(l,W,d)),h.forEach(d=>Gt(l,hi,d))});const c=Array.from(l);return c.length===0&&c.push(Object.create(null)),Bn.has(e)&&a.set(e,c),c}chartOptionScopes(){const{options:t,type:e}=this;return[t,Rt[e]||{},W.datasets[e]||{},{type:e},W,hi]}resolveNamedOptions(t,e,s,n=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=ks(this._resolverCache,t,n);let l=a;if(Kr(a,e)){o.$shared=!1,s=yt(s)?s():s;const c=this.createResolver(t,s,r);l=Nt(a,s,c)}for(const c of e)o[c]=l[c];return o}createResolver(t,e,s=[""],n){const{resolver:o}=ks(this._resolverCache,t,s);return T(e)?Nt(o,e,void 0,n):o}}function ks(i,t,e){let s=i.get(t);s||(s=new Map,i.set(t,s));const n=e.join();let o=s.get(n);return o||(o={resolver:Oi(t,e),subPrefixes:e.filter(r=>!r.toLowerCase().includes("hover"))},s.set(n,o)),o}const Xr=i=>T(i)&&Object.getOwnPropertyNames(i).some(t=>yt(i[t]));function Kr(i,t){const{isScriptable:e,isIndexable:s}=mn(i);for(const n of t){const o=e(n),a=s(n),r=(a||o)&&i[n];if(o&&(yt(r)||Xr(r))||a&&V(r))return!0}return!1}var Gr="4.5.0";const qr=["top","bottom","left","right","chartArea"];function Ss(i,t){return i==="top"||i==="bottom"||qr.indexOf(i)===-1&&t==="x"}function ws(i,t){return function(e,s){return e[i]===s[i]?e[t]-s[t]:e[i]-s[i]}}function Ps(i){const t=i.chart,e=t.options.animation;t.notifyPlugins("afterRender"),z(e&&e.onComplete,[i],t)}function Jr(i){const t=i.chart,e=t.options.animation;z(e&&e.onProgress,[i],t)}function Vn(i){return Ri()&&typeof i=="string"?i=document.getElementById(i):i&&i.length&&(i=i[0]),i&&i.canvas&&(i=i.canvas),i}const Le={},Ds=i=>{const t=Vn(i);return Object.values(Le).filter(e=>e.canvas===t).pop()};function Qr(i,t,e){const s=Object.keys(i);for(const n of s){const o=+n;if(o>=t){const a=i[n];delete i[n],(e>0||o>t)&&(i[o+e]=a)}}}function Zr(i,t,e,s){return!e||i.type==="mouseout"?null:s?t:i}class pt{static register(...t){rt.add(...t),Cs()}static unregister(...t){rt.remove(...t),Cs()}constructor(t,e){const s=this.config=new Ur(e),n=Vn(t),o=Ds(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||br(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,c=l&&l.height,h=l&&l.width;if(this.id=Zn(),this.ctx=r,this.canvas=l,this.width=h,this.height=c,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Er,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=bo(d=>this.update(d),a.resizeDelay||0),this._dataChanges=[],Le[this.id]=this,!r||!l){console.error("Failed to create chart: can't acquire context from the given item");return}ht.listen(this,"complete",Ps),ht.listen(this,"progress",Jr),this._initialize(),this.attached&&this.update()}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return O(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return rt}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():qi(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Xi(this.canvas,this.ctx),this}stop(){return ht.stop(this),this}resize(t,e){ht.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const s=this.options,n=this.canvas,o=s.maintainAspectRatio&&this.aspectRatio,a=this.platform.getMaximumSize(n,t,e,o),r=s.devicePixelRatio||this.platform.getDevicePixelRatio(),l=this.width?"resize":"attach";this.width=a.width,this.height=a.height,this._aspectRatio=this.aspectRatio,qi(this,r,!0)&&(this.notifyPlugins("resize",{size:a}),z(s.onResize,[this,a],this),this.attached&&this._doResize(l)&&this.render())}ensureScalesHaveIDs(){const e=this.options.scales||{};I(e,(s,n)=>{s.id=n})}buildOrUpdateScales(){const t=this.options,e=t.scales,s=this.scales,n=Object.keys(s).reduce((a,r)=>(a[r]=!1,a),{});let o=[];e&&(o=o.concat(Object.keys(e).map(a=>{const r=e[a],l=gi(a,r),c=l==="r",h=l==="x";return{options:r,dposition:c?"chartArea":h?"bottom":"left",dtype:c?"radialLinear":h?"category":"linear"}}))),I(o,a=>{const r=a.options,l=r.id,c=gi(l,r),h=D(r.type,a.dtype);(r.position===void 0||Ss(r.position,c)!==Ss(a.dposition))&&(r.position=a.dposition),n[l]=!0;let d=null;if(l in s&&s[l].type===h)d=s[l];else{const u=rt.getScale(h);d=new u({id:l,type:h,ctx:this.ctx,chart:this}),s[d.id]=d}d.init(r,t)}),I(n,(a,r)=>{a||delete s[r]}),I(s,a=>{q.configure(this,a,a.options),q.addBox(this,a)})}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,s=t.length;if(t.sort((n,o)=>n.index-o.index),s>e){for(let n=e;ne.length&&delete this._stacks,t.forEach((s,n)=>{e.filter(o=>o===s._dataset).length===0&&this._destroyDatasetMeta(n)})}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let s,n;for(this._removeUnreferencedMetasets(),s=0,n=e.length;s{this.getDatasetMeta(e).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const s=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),n=this._animationsDisabled=!s.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0})===!1)return;const o=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let a=0;for(let c=0,h=this.data.datasets.length;c{c.reset()}),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(ws("z","_idx"));const{_active:r,_lastEvent:l}=this;l?this._eventHandler(l,!0):r.length&&this._updateHoverStyles(r,r,!0),this.render()}_updateScales(){I(this.scales,t=>{q.removeBox(this,t)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),s=new Set(t.events);(!Bi(e,s)||!!this._responsiveListeners!==t.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:s,start:n,count:o}of e){const a=s==="_removeElements"?-o:o;Qr(t,n,a)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,s=o=>new Set(t.filter(a=>a[0]===o).map((a,r)=>r+","+a.splice(1).join(","))),n=s(0);for(let o=1;oo.split(",")).map(o=>({method:o[1],start:+o[2],count:+o[3]}))}_updateLayout(t){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;q.update(this,this.width,this.height,t);const e=this.chartArea,s=e.width<=0||e.height<=0;this._layers=[],I(this.boxes,n=>{s&&n.position==="chartArea"||(n.configure&&n.configure(),this._layers.push(...n._layers()))},this),this._layers.forEach((n,o)=>{n._idx=o}),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})!==!1){for(let e=0,s=this.data.datasets.length;e=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,s={meta:t,index:t.index,cancelable:!0},n=Dn(this,t);this.notifyPlugins("beforeDatasetDraw",s)!==!1&&(n&&$e(e,n),t.controller.draw(),n&&Ye(e),s.cancelable=!1,this.notifyPlugins("afterDatasetDraw",s))}isPointInArea(t){return gt(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,s,n){const o=qa.modes[e];return typeof o=="function"?o(this,t,s,n):[]}getDatasetMeta(t){const e=this.data.datasets[t],s=this._metasets;let n=s.filter(o=>o&&o._dataset===e).pop();return n||(n={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},s.push(n)),n}getContext(){return this.$context||(this.$context=vt(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const s=this.getDatasetMeta(t);return typeof s.hidden=="boolean"?!s.hidden:!e.hidden}setDatasetVisibility(t,e){const s=this.getDatasetMeta(t);s.hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,s){const n=s?"show":"hide",o=this.getDatasetMeta(t),a=o.controller._resolveAnimations(void 0,n);re(e)?(o.data[e].hidden=!s,this.update()):(this.setDatasetVisibility(t,s),a.update(o,{visible:s}),this.update(r=>r.datasetIndex===t?n:void 0))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ht.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,o,a),t[o]=a},n=(o,a,r)=>{o.offsetX=a,o.offsetY=r,this._eventHandler(o)};I(this.options.events,o=>s(o,n))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,s=(l,c)=>{e.addEventListener(this,l,c),t[l]=c},n=(l,c)=>{t[l]&&(e.removeEventListener(this,l,c),delete t[l])},o=(l,c)=>{this.canvas&&this.resize(l,c)};let a;const r=()=>{n("attach",r),this.attached=!0,this.resize(),s("resize",o),s("detach",a)};a=()=>{this.attached=!1,n("resize",o),this._stop(),this._resize(0,0),s("attach",r)},e.isAttached(this.canvas)?r():a()}unbindEvents(){I(this._listeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._listeners={},I(this._responsiveListeners,(t,e)=>{this.platform.removeEventListener(this,e,t)}),this._responsiveListeners=void 0}updateHoverStyle(t,e,s){const n=s?"set":"remove";let o,a,r,l;for(e==="dataset"&&(o=this.getDatasetMeta(t[0].datasetIndex),o.controller["_"+n+"DatasetHoverStyle"]()),r=0,l=t.length;r{const r=this.getDatasetMeta(o);if(!r)throw new Error("No dataset found at index "+o);return{datasetIndex:o,element:r.data[a],index:a}});!Ee(s,e)&&(this._active=s,this._lastEvent=null,this._updateHoverStyles(s,e))}notifyPlugins(t,e,s){return this._plugins.notify(this,t,e,s)}isPluginEnabled(t){return this._plugins._cache.filter(e=>e.plugin.id===t).length===1}_updateHoverStyles(t,e,s){const n=this.options.hover,o=(l,c)=>l.filter(h=>!c.some(d=>h.datasetIndex===d.datasetIndex&&h.index===d.index)),a=o(e,t),r=s?t:o(t,e);a.length&&this.updateHoverStyle(a,n.mode,!1),r.length&&n.mode&&this.updateHoverStyle(r,n.mode,!0)}_eventHandler(t,e){const s={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},n=a=>(a.options.events||this.options.events).includes(t.native.type);if(this.notifyPlugins("beforeEvent",s,n)===!1)return;const o=this._handleEvent(t,e,s.inChartArea);return s.cancelable=!1,this.notifyPlugins("afterEvent",s,n),(o||s.changed)&&this.render(),this}_handleEvent(t,e,s){const{_active:n=[],options:o}=this,a=e,r=this._getActiveElements(t,n,s,a),l=oo(t),c=Zr(t,this._lastEvent,s,l);s&&(this._lastEvent=null,z(o.onHover,[t,r,this],this),l&&z(o.onClick,[t,r,this],this));const h=!Ee(r,n);return(h||e)&&(this._active=r,this._updateHoverStyles(r,n,e)),this._lastEvent=c,h}_getActiveElements(t,e,s,n){if(t.type==="mouseout")return[];if(!s)return e;const o=this.options.hover;return this.getElementsAtEventForMode(t,o.mode,o,n)}}M(pt,"defaults",W),M(pt,"instances",Le),M(pt,"overrides",Rt),M(pt,"registry",rt),M(pt,"version",Gr),M(pt,"getChart",Ds);function Cs(){return I(pt.instances,i=>i._plugins.invalidate())}function tl(i,t,e){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=t,{borderWidth:c,borderJoinStyle:h}=l,d=Math.min(c/a,G(s-e));if(i.beginPath(),i.arc(n,o,a-c/2,s+d/2,e-d/2),r>0){const u=Math.min(c/r,G(s-e));i.arc(n,o,r+c/2,e-u/2,s+u/2,!0)}else{const u=Math.min(c/2,a*G(s-e));if(h==="round")i.arc(n,o,u,e-R/2,s+R/2,!0);else if(h==="bevel"){const f=2*u*u,g=-f*Math.cos(e+R/2)+n,p=-f*Math.sin(e+R/2)+o,m=f*Math.cos(s+R/2)+n,b=f*Math.sin(s+R/2)+o;i.lineTo(g,p),i.lineTo(m,b)}}i.closePath(),i.moveTo(0,0),i.rect(0,0,i.canvas.width,i.canvas.height),i.clip("evenodd")}function el(i,t,e){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=t;let c=n/r;i.beginPath(),i.arc(o,a,r,s-c,e+c),l>n?(c=n/l,i.arc(o,a,l,e+c,s-c,!0)):i.arc(o,a,n,e+j,s-j),i.closePath(),i.clip()}function il(i){return Ai(i,["outerStart","outerEnd","innerStart","innerEnd"])}function sl(i,t,e,s){const n=il(i.options.borderRadius),o=(e-t)/2,a=Math.min(o,s*t/2),r=l=>{const c=(e-Math.min(o,l))*s/2;return Y(l,0,Math.min(o,c))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Y(n.innerStart,0,a),innerEnd:Y(n.innerEnd,0,a)}}function Bt(i,t,e,s){return{x:e+i*Math.cos(t),y:s+i*Math.sin(t)}}function Ne(i,t,e,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:c,innerRadius:h}=t,d=Math.max(t.outerRadius+s+e-c,0),u=h>0?h+s+e+c:0;let f=0;const g=n-l;if(s){const E=h>0?h-s:0,B=d>0?d-s:0,H=(E+B)/2,it=H!==0?g*H/(H+s):g;f=(g-it)/2}const p=Math.max(.001,g*d-e/R)/d,m=(g-p)/2,b=l+m+f,x=n-m-f,{outerStart:v,outerEnd:y,innerStart:_,innerEnd:k}=sl(t,u,d,x-b),S=d-v,w=d-y,P=b+v/S,C=x-y/w,A=u+_,L=u+k,U=b+_/A,tt=x-k/L;if(i.beginPath(),o){const E=(P+C)/2;if(i.arc(a,r,d,P,E),i.arc(a,r,d,E,C),y>0){const X=Bt(w,C,a,r);i.arc(X.x,X.y,y,C,x+j)}const B=Bt(L,x,a,r);if(i.lineTo(B.x,B.y),k>0){const X=Bt(L,tt,a,r);i.arc(X.x,X.y,k,x+j,tt+Math.PI)}const H=(x-k/u+(b+_/u))/2;if(i.arc(a,r,u,x-k/u,H,!0),i.arc(a,r,u,H,b+_/u,!0),_>0){const X=Bt(A,U,a,r);i.arc(X.x,X.y,_,U+Math.PI,b-j)}const it=Bt(S,b,a,r);if(i.lineTo(it.x,it.y),v>0){const X=Bt(S,P,a,r);i.arc(X.x,X.y,v,b-j,P)}}else{i.moveTo(a,r);const E=Math.cos(P)*d+a,B=Math.sin(P)*d+r;i.lineTo(E,B);const H=Math.cos(C)*d+a,it=Math.sin(C)*d+r;i.lineTo(H,it)}i.closePath()}function nl(i,t,e,s,n){const{fullCircles:o,startAngle:a,circumference:r}=t;let l=t.endAngle;if(o){Ne(i,t,e,s,l,n);for(let c=0;c=R&&f===0&&h!=="miter"&&tl(i,t,p),o||(Ne(i,t,e,s,p,n),i.stroke())}class Qt extends ot{constructor(e){super();M(this,"circumference");M(this,"endAngle");M(this,"fullCircles");M(this,"innerRadius");M(this,"outerRadius");M(this,"pixelMargin");M(this,"startAngle");this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,e&&Object.assign(this,e)}inRange(e,s,n){const o=this.getProps(["x","y"],n),{angle:a,distance:r}=an(o,{x:e,y:s}),{startAngle:l,endAngle:c,innerRadius:h,outerRadius:d,circumference:u}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],n),f=(this.options.spacing+this.options.borderWidth)/2,g=D(u,c-l),p=le(a,l,c)&&l!==c,m=g>=F||p,b=ut(r,h+f,d+f);return m&&b}getCenterPoint(e){const{x:s,y:n,startAngle:o,endAngle:a,innerRadius:r,outerRadius:l}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],e),{offset:c,spacing:h}=this.options,d=(o+a)/2,u=(r+l+h+c)/2;return{x:s+Math.cos(d)*u,y:n+Math.sin(d)*u}}tooltipPosition(e){return this.getCenterPoint(e)}draw(e){const{options:s,circumference:n}=this,o=(s.offset||0)/4,a=(s.spacing||0)/2,r=s.circular;if(this.pixelMargin=s.borderAlign==="inner"?.33:0,this.fullCircles=n>F?Math.floor(n/F):0,n===0||this.innerRadius<0||this.outerRadius<0)return;e.save();const l=(this.startAngle+this.endAngle)/2;e.translate(Math.cos(l)*o,Math.sin(l)*o);const c=1-Math.sin(Math.min(R,n||0)),h=o*c;e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,nl(e,this,h,a,r),ol(e,this,h,a,r),e.restore()}}M(Qt,"id","arc"),M(Qt,"defaults",{borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1}),M(Qt,"defaultRoutes",{backgroundColor:"backgroundColor"}),M(Qt,"descriptors",{_scriptable:!0,_indexable:e=>e!=="borderDash"});function Wn(i,t,e=t){i.lineCap=D(e.borderCapStyle,t.borderCapStyle),i.setLineDash(D(e.borderDash,t.borderDash)),i.lineDashOffset=D(e.borderDashOffset,t.borderDashOffset),i.lineJoin=D(e.borderJoinStyle,t.borderJoinStyle),i.lineWidth=D(e.borderWidth,t.borderWidth),i.strokeStyle=D(e.borderColor,t.borderColor)}function al(i,t,e){i.lineTo(e.x,e.y)}function rl(i){return i.stepped?Ao:i.tension||i.cubicInterpolationMode==="monotone"?Oo:al}function Nn(i,t,e={}){const s=i.length,{start:n=0,end:o=s-1}=e,{start:a,end:r}=t,l=Math.max(n,a),c=Math.min(o,r),h=nr&&o>r;return{count:s,start:l,loop:t.loop,ilen:c(a+(c?r-y:y))%o,v=()=>{p!==m&&(i.lineTo(h,m),i.lineTo(h,p),i.lineTo(h,b))};for(l&&(f=n[x(0)],i.moveTo(f.x,f.y)),u=0;u<=r;++u){if(f=n[x(u)],f.skip)continue;const y=f.x,_=f.y,k=y|0;k===g?(_m&&(m=_),h=(d*h+y)/++d):(v(),i.lineTo(y,_),g=k,d=0,p=m=_),b=_}v()}function pi(i){const t=i.options,e=t.borderDash&&t.borderDash.length;return!i._decimated&&!i._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?cl:ll}function hl(i){return i.stepped?la:i.tension||i.cubicInterpolationMode==="monotone"?ca:At}function dl(i,t,e,s){let n=t._path;n||(n=t._path=new Path2D,t.path(n,e,s)&&n.closePath()),Wn(i,t.options),i.stroke(n)}function ul(i,t,e,s){const{segments:n,options:o}=t,a=pi(t);for(const r of n)Wn(i,o,r.style),i.beginPath(),a(i,t,r,{start:e,end:e+s-1})&&i.closePath(),i.stroke()}const fl=typeof Path2D=="function";function gl(i,t,e,s){fl&&!t.options.segment?dl(i,t,e,s):ul(i,t,e,s)}class bt extends ot{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const s=this.options;if((s.tension||s.cubicInterpolationMode==="monotone")&&!s.stepped&&!this._pointsUpdated){const n=s.spanGaps?this._loop:this._fullLoop;ta(this._points,s,t,n,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=pa(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,s=t.length;return s&&e[t[s-1].end]}interpolate(t,e){const s=this.options,n=t[e],o=this.points,a=Pn(this,{property:e,start:n,end:n});if(!a.length)return;const r=[],l=hl(s);let c,h;for(c=0,h=a.length;ct!=="borderDash"&&t!=="fill"});function As(i,t,e,s){const n=i.options,{[e]:o}=i.getProps([e],s);return Math.abs(t-o)i.replace("rgb(","rgba(").replace(")",", 0.5)"));function jn(i){return mi[i%mi.length]}function $n(i){return Os[i%Os.length]}function vl(i,t){return i.borderColor=jn(t),i.backgroundColor=$n(t),++t}function Ml(i,t){return i.backgroundColor=i.data.map(()=>jn(t++)),t}function kl(i,t){return i.backgroundColor=i.data.map(()=>$n(t++)),t}function Sl(i){let t=0;return(e,s)=>{const n=i.getDatasetMeta(s).controller;n instanceof Ot?t=Ml(e,t):n instanceof oe?t=kl(e,t):n&&(t=vl(e,t))}}function Ts(i){let t;for(t in i)if(i[t].borderColor||i[t].backgroundColor)return!0;return!1}function wl(i){return i&&(i.borderColor||i.backgroundColor)}function Pl(){return W.borderColor!=="rgba(0,0,0,0.1)"||W.backgroundColor!=="rgba(0,0,0,0.1)"}var Dl={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(i,t,e){if(!e.enabled)return;const{data:{datasets:s},options:n}=i.config,{elements:o}=n,a=Ts(s)||wl(n)||o&&Ts(o)||Pl();if(!e.forceOverride&&a)return;const r=Sl(i);s.forEach(r)}};function Cl(i,t,e,s,n){const o=n.samples||s;if(o>=e)return i.slice(t,t+e);const a=[],r=(e-2)/(o-2);let l=0;const c=t+e-1;let h=t,d,u,f,g,p;for(a[l++]=i[h],d=0;df&&(f=g,u=i[x],p=x);a[l++]=u,h=p}return a[l++]=i[c],a}function Al(i,t,e,s){let n=0,o=0,a,r,l,c,h,d,u,f,g,p;const m=[],b=t+e-1,x=i[t].x,y=i[b].x-x;for(a=t;ap&&(p=c,u=a),n=(o*n+r.x)/++o;else{const k=a-1;if(!O(d)&&!O(u)){const S=Math.min(d,u),w=Math.max(d,u);S!==f&&S!==k&&m.push({...i[S],x:n}),w!==f&&w!==k&&m.push({...i[w],x:n})}a>0&&k!==f&&m.push(i[k]),m.push(r),h=_,o=0,g=p=c,d=u=f=a}}return m}function Yn(i){if(i._decimated){const t=i._data;delete i._decimated,delete i._data,Object.defineProperty(i,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}function Ls(i){i.data.datasets.forEach(t=>{Yn(t)})}function Ol(i,t){const e=t.length;let s=0,n;const{iScale:o}=i,{min:a,max:r,minDefined:l,maxDefined:c}=o.getUserBounds();return l&&(s=Y(ft(t,o.axis,a).lo,0,e-1)),c?n=Y(ft(t,o.axis,r).hi+1,s,e)-s:n=e-s,{start:s,count:n}}var Tl={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(i,t,e)=>{if(!e.enabled){Ls(i);return}const s=i.width;i.data.datasets.forEach((n,o)=>{const{_data:a,indexAxis:r}=n,l=i.getDatasetMeta(o),c=a||n.data;if(qt([r,i.options.indexAxis])==="y"||!l.controller.supportsDecimation)return;const h=i.scales[l.xAxisID];if(h.type!=="linear"&&h.type!=="time"||i.options.parsing)return;let{start:d,count:u}=Ol(l,c);const f=e.threshold||4*s;if(u<=f){Yn(n);return}O(a)&&(n._data=c,delete n.data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(p){this._data=p}}));let g;switch(e.algorithm){case"lttb":g=Cl(c,d,u,s,e);break;case"min-max":g=Al(c,d,u,s);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}n._decimated=g})},destroy(i){Ls(i)}};function Ll(i,t,e){const s=i.segments,n=i.points,o=t.points,a=[];for(const r of s){let{start:l,end:c}=r;c=Ke(l,c,n);const h=bi(e,n[l],n[c],r.loop);if(!t.segments){a.push({source:r,target:h,start:n[l],end:n[c]});continue}const d=Pn(t,h);for(const u of d){const f=bi(e,o[u.start],o[u.end],u.loop),g=wn(r,n,f);for(const p of g)a.push({source:p,target:u,start:{[e]:Rs(h,f,"start",Math.max)},end:{[e]:Rs(h,f,"end",Math.min)}})}}return a}function bi(i,t,e,s){if(s)return;let n=t[i],o=e[i];return i==="angle"&&(n=G(n),o=G(o)),{property:i,start:n,end:o}}function Rl(i,t){const{x:e=null,y:s=null}=i||{},n=t.points,o=[];return t.segments.forEach(({start:a,end:r})=>{r=Ke(a,r,n);const l=n[a],c=n[r];s!==null?(o.push({x:l.x,y:s}),o.push({x:c.x,y:s})):e!==null&&(o.push({x:e,y:l.y}),o.push({x:e,y:c.y}))}),o}function Ke(i,t,e){for(;t>i;t--){const s=e[t];if(!isNaN(s.x)&&!isNaN(s.y))break}return t}function Rs(i,t,e,s){return i&&t?s(i[e],t[e]):i?i[e]:t?t[e]:0}function Un(i,t){let e=[],s=!1;return V(i)?(s=!0,e=i):e=Rl(i,t),e.length?new bt({points:e,options:{tension:0},_loop:s,_fullLoop:s}):null}function Is(i){return i&&i.fill!==!1}function Il(i,t,e){let n=i[t].fill;const o=[t];let a;if(!e)return n;for(;n!==!1&&o.indexOf(n)===-1;){if(!N(n))return n;if(a=i[n],!a)return!1;if(a.visible)return n;o.push(n),n=a.fill}return!1}function El(i,t,e){const s=Vl(i);if(T(s))return isNaN(s.value)?!1:s;let n=parseFloat(s);return N(n)&&Math.floor(n)===n?zl(s[0],t,n,e):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function zl(i,t,e,s){return(i==="-"||i==="+")&&(e=t+e),e===t||e<0||e>=s?!1:e}function Fl(i,t){let e=null;return i==="start"?e=t.bottom:i==="end"?e=t.top:T(i)?e=t.getPixelForValue(i.value):t.getBasePixel&&(e=t.getBasePixel()),e}function Bl(i,t,e){let s;return i==="start"?s=e:i==="end"?s=t.options.reverse?t.min:t.max:T(i)?s=i.value:s=t.getBaseValue(),s}function Vl(i){const t=i.options,e=t.fill;let s=D(e&&e.target,e);return s===void 0&&(s=!!t.backgroundColor),s===!1||s===null?!1:s===!0?"origin":s}function Wl(i){const{scale:t,index:e,line:s}=i,n=[],o=s.segments,a=s.points,r=Nl(t,e);r.push(Un({x:null,y:t.bottom},s));for(let l=0;l=0;--a){const r=n[a].$filler;r&&(r.line.updateControlPoints(o,r.axis),s&&r.fill&&ri(i.ctx,r,o))}},beforeDatasetsDraw(i,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;const s=i.getSortedVisibleDatasetMetas();for(let n=s.length-1;n>=0;--n){const o=s[n].$filler;Is(o)&&ri(i.ctx,o,i.chartArea)}},beforeDatasetDraw(i,t,e){const s=t.meta.$filler;!Is(s)||e.drawTime!=="beforeDatasetDraw"||ri(i.ctx,s,i.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Bs=(i,t)=>{let{boxHeight:e=t,boxWidth:s=t}=i;return i.usePointStyle&&(e=Math.min(e,t),s=i.pointStyleWidth||Math.min(s,t)),{boxWidth:s,boxHeight:e,itemHeight:Math.max(t,e)}},Ql=(i,t)=>i!==null&&t!==null&&i.datasetIndex===t.datasetIndex&&i.index===t.index;class Vs extends ot{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,s){this.maxWidth=t,this.maxHeight=e,this._margins=s,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=z(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(s=>t.filter(s,this.chart.data))),t.sort&&(e=e.sort((s,n)=>t.sort(s,n,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}const s=t.labels,n=$(s.font),o=n.size,a=this._computeTitleHeight(),{boxWidth:r,itemHeight:l}=Bs(s,o);let c,h;e.font=n.string,this.isHorizontal()?(c=this.maxWidth,h=this._fitRows(a,o,r,l)+10):(h=this.maxHeight,c=this._fitCols(a,n,r,l)+10),this.width=Math.min(c,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,s,n){const{ctx:o,maxWidth:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.lineWidths=[0],h=n+r;let d=t;o.textAlign="left",o.textBaseline="middle";let u=-1,f=-h;return this.legendItems.forEach((g,p)=>{const m=s+e/2+o.measureText(g.text).width;(p===0||c[c.length-1]+m+2*r>a)&&(d+=h,c[c.length-(p>0?0:1)]=0,f+=h,u++),l[p]={left:0,top:f,row:u,width:m,height:n},c[c.length-1]+=m+r}),d}_fitCols(t,e,s,n){const{ctx:o,maxHeight:a,options:{labels:{padding:r}}}=this,l=this.legendHitBoxes=[],c=this.columnSizes=[],h=a-t;let d=r,u=0,f=0,g=0,p=0;return this.legendItems.forEach((m,b)=>{const{itemWidth:x,itemHeight:v}=Zl(s,e,o,m,n);b>0&&f+v+2*r>h&&(d+=u+r,c.push({width:u,height:f}),g+=u+r,p++,u=f=0),l[b]={left:g,top:f,col:p,width:x,height:v},u=Math.max(u,x),f+=v+r}),d+=u,c.push({width:u,height:f}),d}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:s,labels:{padding:n},rtl:o}}=this,a=Vt(o,this.left,this.width);if(this.isHorizontal()){let r=0,l=K(s,this.left+n,this.right-this.lineWidths[r]);for(const c of e)r!==c.row&&(r=c.row,l=K(s,this.left+n,this.right-this.lineWidths[r])),c.top+=this.top+t+n,c.left=a.leftForLtr(a.x(l),c.width),l+=c.width+n}else{let r=0,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height);for(const c of e)c.col!==r&&(r=c.col,l=K(s,this.top+t+n,this.bottom-this.columnSizes[r].height)),c.top=l,c.left+=this.left+n,c.left=a.leftForLtr(a.x(c.left),c.width),l+=c.height+n}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){const t=this.ctx;$e(t,this),this._draw(),Ye(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:s,ctx:n}=this,{align:o,labels:a}=t,r=W.color,l=Vt(t.rtl,this.left,this.width),c=$(a.font),{padding:h}=a,d=c.size,u=d/2;let f;this.drawTitle(),n.textAlign=l.textAlign("left"),n.textBaseline="middle",n.lineWidth=.5,n.font=c.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=Bs(a,d),b=function(k,S,w){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;n.save();const P=D(w.lineWidth,1);if(n.fillStyle=D(w.fillStyle,r),n.lineCap=D(w.lineCap,"butt"),n.lineDashOffset=D(w.lineDashOffset,0),n.lineJoin=D(w.lineJoin,"miter"),n.lineWidth=P,n.strokeStyle=D(w.strokeStyle,r),n.setLineDash(D(w.lineDash,[])),a.usePointStyle){const C={radius:p*Math.SQRT2/2,pointStyle:w.pointStyle,rotation:w.rotation,borderWidth:P},A=l.xPlus(k,g/2),L=S+u;gn(n,C,A,L,a.pointStyleWidth&&g)}else{const C=S+Math.max((d-p)/2,0),A=l.leftForLtr(k,g),L=Tt(w.borderRadius);n.beginPath(),Object.values(L).some(U=>U!==0)?ce(n,{x:A,y:C,w:g,h:p,radius:L}):n.rect(A,C,g,p),n.fill(),P!==0&&n.stroke()}n.restore()},x=function(k,S,w){It(n,w.text,k,S+m/2,c,{strikethrough:w.hidden,textAlign:l.textAlign(w.textAlign)})},v=this.isHorizontal(),y=this._computeTitleHeight();v?f={x:K(o,this.left+h,this.right-s[0]),y:this.top+h+y,line:0}:f={x:this.left+h,y:K(o,this.top+y+h,this.bottom-e[0].height),line:0},Mn(this.ctx,t.textDirection);const _=m+h;this.legendItems.forEach((k,S)=>{n.strokeStyle=k.fontColor,n.fillStyle=k.fontColor;const w=n.measureText(k.text).width,P=l.textAlign(k.textAlign||(k.textAlign=a.textAlign)),C=g+u+w;let A=f.x,L=f.y;l.setWidth(this.width),v?S>0&&A+C+h>this.right&&(L=f.y+=_,f.line++,A=f.x=K(o,this.left+h,this.right-s[f.line])):S>0&&L+_>this.bottom&&(A=f.x=A+e[f.line].width+h,f.line++,L=f.y=K(o,this.top+y+h,this.bottom-e[f.line].height));const U=l.x(A);if(b(U,L,k),A=xo(P,A+g+u,v?A+C:this.right,t.rtl),x(l.x(A),L,k),v)f.x+=C+h;else if(typeof k.text!="string"){const tt=c.lineHeight;f.y+=Kn(k,tt)+h}else f.y+=_}),kn(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,s=$(e.font),n=J(e.padding);if(!e.display)return;const o=Vt(t.rtl,this.left,this.width),a=this.ctx,r=e.position,l=s.size/2,c=n.top+l;let h,d=this.left,u=this.width;if(this.isHorizontal())u=Math.max(...this.lineWidths),h=this.top+c,d=K(t.align,d,this.right-u);else{const g=this.columnSizes.reduce((p,m)=>Math.max(p,m.height),0);h=c+K(t.align,this.top,this.bottom-g-t.labels.padding-this._computeTitleHeight())}const f=K(r,d,d+u);a.textAlign=o.textAlign(Di(r)),a.textBaseline="middle",a.strokeStyle=e.color,a.fillStyle=e.color,a.font=s.string,It(a,e.text,f,h,s)}_computeTitleHeight(){const t=this.options.title,e=$(t.font),s=J(t.padding);return t.display?e.lineHeight+s.height:0}_getLegendItemAt(t,e){let s,n,o;if(ut(t,this.left,this.right)&&ut(e,this.top,this.bottom)){for(o=this.legendHitBoxes,s=0;so.length>a.length?o:a)),t+e.size/2+s.measureText(n).width}function ec(i,t,e){let s=i;return typeof t.text!="string"&&(s=Kn(t,e)),s}function Kn(i,t){const e=i.text?i.text.length:0;return t*e}function ic(i,t){return!!((i==="mousemove"||i==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(i==="click"||i==="mouseup"))}var sc={id:"legend",_element:Vs,start(i,t,e){const s=i.legend=new Vs({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s)},stop(i){q.removeBox(i,i.legend),delete i.legend},beforeUpdate(i,t,e){const s=i.legend;q.configure(i,s,e),s.options=e},afterUpdate(i){const t=i.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(i,t){t.replay||i.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(i,t,e){const s=t.datasetIndex,n=e.chart;n.isDatasetVisible(s)?(n.hide(s),t.hidden=!0):(n.show(s),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:i=>i.chart.options.color,boxWidth:40,padding:10,generateLabels(i){const t=i.data.datasets,{labels:{usePointStyle:e,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=i.legend.options;return i._getSortedDatasetMetas().map(l=>{const c=l.controller.getStyle(e?0:void 0),h=J(c.borderWidth);return{text:t[l.index].label,fillStyle:c.backgroundColor,fontColor:o,hidden:!l.visible,lineCap:c.borderCapStyle,lineDash:c.borderDash,lineDashOffset:c.borderDashOffset,lineJoin:c.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:c.borderColor,pointStyle:s||c.pointStyle,rotation:c.rotation,textAlign:n||c.textAlign,borderRadius:a&&(r||c.borderRadius),datasetIndex:l.index}},this)}},title:{color:i=>i.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:i=>!i.startsWith("on"),labels:{_scriptable:i=>!["generateLabels","filter","sort"].includes(i)}}};class zi extends ot{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const s=this.options;if(this.left=0,this.top=0,!s.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;const n=V(s.text)?s.text.length:1;this._padding=J(s.padding);const o=n*$(s.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){const{top:e,left:s,bottom:n,right:o,options:a}=this,r=a.align;let l=0,c,h,d;return this.isHorizontal()?(h=K(r,s,o),d=e+t,c=o-s):(a.position==="left"?(h=s+t,d=K(r,n,e),l=R*-.5):(h=o-t,d=K(r,e,n),l=R*.5),c=n-e),{titleX:h,titleY:d,maxWidth:c,rotation:l}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const s=$(e.font),o=s.lineHeight/2+this._padding.top,{titleX:a,titleY:r,maxWidth:l,rotation:c}=this._drawArgs(o);It(t,e.text,0,0,s,{color:e.color,maxWidth:l,rotation:c,textAlign:Di(e.align),textBaseline:"middle",translation:[a,r]})}}function nc(i,t){const e=new zi({ctx:i.ctx,options:t,chart:i});q.configure(i,e,t),q.addBox(i,e),i.titleBlock=e}var oc={id:"title",_element:zi,start(i,t,e){nc(i,e)},stop(i){const t=i.titleBlock;q.removeBox(i,t),delete i.titleBlock},beforeUpdate(i,t,e){const s=i.titleBlock;q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const ke=new WeakMap;var ac={id:"subtitle",start(i,t,e){const s=new zi({ctx:i.ctx,options:e,chart:i});q.configure(i,s,e),q.addBox(i,s),ke.set(i,s)},stop(i){q.removeBox(i,ke.get(i)),ke.delete(i)},beforeUpdate(i,t,e){const s=ke.get(i);q.configure(i,s,e),s.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Zt={average(i){if(!i.length)return!1;let t,e,s=new Set,n=0,o=0;for(t=0,e=i.length;tr+l)/s.size,y:n/o}},nearest(i,t){if(!i.length)return!1;let e=t.x,s=t.y,n=Number.POSITIVE_INFINITY,o,a,r;for(o=0,a=i.length;o-1?i.split(`
+`):i}function rc(i,t){const{element:e,datasetIndex:s,index:n}=t,o=i.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:i,label:a,parsed:o.getParsed(n),raw:i.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:e}}function Ws(i,t){const e=i.chart.ctx,{body:s,footer:n,title:o}=i,{boxWidth:a,boxHeight:r}=t,l=$(t.bodyFont),c=$(t.titleFont),h=$(t.footerFont),d=o.length,u=n.length,f=s.length,g=J(t.padding);let p=g.height,m=0,b=s.reduce((y,_)=>y+_.before.length+_.lines.length+_.after.length,0);if(b+=i.beforeBody.length+i.afterBody.length,d&&(p+=d*c.lineHeight+(d-1)*t.titleSpacing+t.titleMarginBottom),b){const y=t.displayColors?Math.max(r,l.lineHeight):l.lineHeight;p+=f*y+(b-f)*l.lineHeight+(b-1)*t.bodySpacing}u&&(p+=t.footerMarginTop+u*h.lineHeight+(u-1)*t.footerSpacing);let x=0;const v=function(y){m=Math.max(m,e.measureText(y).width+x)};return e.save(),e.font=c.string,I(i.title,v),e.font=l.string,I(i.beforeBody.concat(i.afterBody),v),x=t.displayColors?a+2+t.boxPadding:0,I(s,y=>{I(y.before,v),I(y.lines,v),I(y.after,v)}),x=0,e.font=h.string,I(i.footer,v),e.restore(),m+=g.width,{width:m,height:p}}function lc(i,t){const{y:e,height:s}=t;return ei.height-s/2?"bottom":"center"}function cc(i,t,e,s){const{x:n,width:o}=s,a=e.caretSize+e.caretPadding;if(i==="left"&&n+o+a>t.width||i==="right"&&n-o-a<0)return!0}function hc(i,t,e,s){const{x:n,width:o}=e,{width:a,chartArea:{left:r,right:l}}=i;let c="center";return s==="center"?c=n<=(r+l)/2?"left":"right":n<=o/2?c="left":n>=a-o/2&&(c="right"),cc(c,i,t,e)&&(c="center"),c}function Ns(i,t,e){const s=e.yAlign||t.yAlign||lc(i,e);return{xAlign:e.xAlign||t.xAlign||hc(i,t,e,s),yAlign:s}}function dc(i,t){let{x:e,width:s}=i;return t==="right"?e-=s:t==="center"&&(e-=s/2),e}function uc(i,t,e){let{y:s,height:n}=i;return t==="top"?s+=e:t==="bottom"?s-=n+e:s-=n/2,s}function Hs(i,t,e,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=i,{xAlign:r,yAlign:l}=e,c=n+o,{topLeft:h,topRight:d,bottomLeft:u,bottomRight:f}=Tt(a);let g=dc(t,r);const p=uc(t,l,c);return l==="center"?r==="left"?g+=c:r==="right"&&(g-=c):r==="left"?g-=Math.max(h,u)+n:r==="right"&&(g+=Math.max(d,f)+n),{x:Y(g,0,s.width-t.width),y:Y(p,0,s.height-t.height)}}function Se(i,t,e){const s=J(e.padding);return t==="center"?i.x+i.width/2:t==="right"?i.x+i.width-s.right:i.x+s.left}function js(i){return at([],dt(i))}function fc(i,t,e){return vt(i,{tooltip:t,tooltipItems:e,type:"tooltip"})}function $s(i,t){const e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?i.override(e):i}const Gn={beforeTitle:ct,title(i){if(i.length>0){const t=i[0],e=t.chart.data.labels,s=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(s>0&&t.dataIndex"u"?Gn[t].call(e,s):n}class xi extends ot{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,s=this.options.setContext(this.getContext()),n=s.enabled&&e.options.animation&&s.animations,o=new Cn(this.chart,n);return n._cacheable&&(this._cachedAnimations=Object.freeze(o)),o}getContext(){return this.$context||(this.$context=fc(this.chart.getContext(),this,this._tooltipItems))}getTitle(t,e){const{callbacks:s}=e,n=Q(s,"beforeTitle",this,t),o=Q(s,"title",this,t),a=Q(s,"afterTitle",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}getBeforeBody(t,e){return js(Q(e.callbacks,"beforeBody",this,t))}getBody(t,e){const{callbacks:s}=e,n=[];return I(t,o=>{const a={before:[],lines:[],after:[]},r=$s(s,o);at(a.before,dt(Q(r,"beforeLabel",this,o))),at(a.lines,Q(r,"label",this,o)),at(a.after,dt(Q(r,"afterLabel",this,o))),n.push(a)}),n}getAfterBody(t,e){return js(Q(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:s}=e,n=Q(s,"beforeFooter",this,t),o=Q(s,"footer",this,t),a=Q(s,"afterFooter",this,t);let r=[];return r=at(r,dt(n)),r=at(r,dt(o)),r=at(r,dt(a)),r}_createItems(t){const e=this._active,s=this.chart.data,n=[],o=[],a=[];let r=[],l,c;for(l=0,c=e.length;lt.filter(h,d,u,s))),t.itemSort&&(r=r.sort((h,d)=>t.itemSort(h,d,s))),I(r,h=>{const d=$s(t.callbacks,h);n.push(Q(d,"labelColor",this,h)),o.push(Q(d,"labelPointStyle",this,h)),a.push(Q(d,"labelTextColor",this,h))}),this.labelColors=n,this.labelPointStyles=o,this.labelTextColors=a,this.dataPoints=r,r}update(t,e){const s=this.options.setContext(this.getContext()),n=this._active;let o,a=[];if(!n.length)this.opacity!==0&&(o={opacity:0});else{const r=Zt[s.position].call(this,n,this._eventPosition);a=this._createItems(s),this.title=this.getTitle(a,s),this.beforeBody=this.getBeforeBody(a,s),this.body=this.getBody(a,s),this.afterBody=this.getAfterBody(a,s),this.footer=this.getFooter(a,s);const l=this._size=Ws(this,s),c=Object.assign({},r,l),h=Ns(this.chart,s,c),d=Hs(s,c,h,this.chart);this.xAlign=h.xAlign,this.yAlign=h.yAlign,o={opacity:1,x:d.x,y:d.y,width:l.width,height:l.height,caretX:r.x,caretY:r.y}}this._tooltipItems=a,this.$context=void 0,o&&this._resolveAnimations().update(this,o),t&&s.external&&s.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,s,n){const o=this.getCaretPosition(t,s,n);e.lineTo(o.x1,o.y1),e.lineTo(o.x2,o.y2),e.lineTo(o.x3,o.y3)}getCaretPosition(t,e,s){const{xAlign:n,yAlign:o}=this,{caretSize:a,cornerRadius:r}=s,{topLeft:l,topRight:c,bottomLeft:h,bottomRight:d}=Tt(r),{x:u,y:f}=t,{width:g,height:p}=e;let m,b,x,v,y,_;return o==="center"?(y=f+p/2,n==="left"?(m=u,b=m-a,v=y+a,_=y-a):(m=u+g,b=m+a,v=y-a,_=y+a),x=m):(n==="left"?b=u+Math.max(l,h)+a:n==="right"?b=u+g-Math.max(c,d)-a:b=this.caretX,o==="top"?(v=f,y=v-a,m=b-a,x=b+a):(v=f+p,y=v+a,m=b+a,x=b-a),_=v),{x1:m,x2:b,x3:x,y1:v,y2:y,y3:_}}drawTitle(t,e,s){const n=this.title,o=n.length;let a,r,l;if(o){const c=Vt(s.rtl,this.x,this.width);for(t.x=Se(this,s.titleAlign,s),e.textAlign=c.textAlign(s.titleAlign),e.textBaseline="middle",a=$(s.titleFont),r=s.titleSpacing,e.fillStyle=s.titleColor,e.font=a.string,l=0;lx!==0)?(t.beginPath(),t.fillStyle=o.multiKeyBackground,ce(t,{x:p,y:g,w:c,h:l,radius:b}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),ce(t,{x:m,y:g+1,w:c-2,h:l-2,radius:b}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(p,g,c,l),t.strokeRect(p,g,c,l),t.fillStyle=a.backgroundColor,t.fillRect(m,g+1,c-2,l-2))}t.fillStyle=this.labelTextColors[s]}drawBody(t,e,s){const{body:n}=this,{bodySpacing:o,bodyAlign:a,displayColors:r,boxHeight:l,boxWidth:c,boxPadding:h}=s,d=$(s.bodyFont);let u=d.lineHeight,f=0;const g=Vt(s.rtl,this.x,this.width),p=function(w){e.fillText(w,g.x(t.x+f),t.y+u/2),t.y+=u+o},m=g.textAlign(a);let b,x,v,y,_,k,S;for(e.textAlign=a,e.textBaseline="middle",e.font=d.string,t.x=Se(this,m,s),e.fillStyle=s.bodyColor,I(this.beforeBody,p),f=r&&m!=="right"?a==="center"?c/2+h:c+2+h:0,y=0,k=n.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,s=this.$animations,n=s&&s.x,o=s&&s.y;if(n||o){const a=Zt[t.position].call(this,this._active,this._eventPosition);if(!a)return;const r=this._size=Ws(this,t),l=Object.assign({},a,this._size),c=Ns(e,t,l),h=Hs(t,l,c,e);(n._to!==h.x||o._to!==h.y)&&(this.xAlign=c.xAlign,this.yAlign=c.yAlign,this.width=r.width,this.height=r.height,this.caretX=a.x,this.caretY=a.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let s=this.opacity;if(!s)return;this._updateAnimationTarget(e);const n={width:this.width,height:this.height},o={x:this.x,y:this.y};s=Math.abs(s)<.001?0:s;const a=J(e.padding),r=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&r&&(t.save(),t.globalAlpha=s,this.drawBackground(o,t,n,e),Mn(t,e.textDirection),o.y+=a.top,this.drawTitle(o,t,e),this.drawBody(o,t,e),this.drawFooter(o,t,e),kn(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const s=this._active,n=t.map(({datasetIndex:r,index:l})=>{const c=this.chart.getDatasetMeta(r);if(!c)throw new Error("Cannot find a dataset at index "+r);return{datasetIndex:r,element:c.data[l],index:l}}),o=!Ee(s,n),a=this._positionChanged(n,e);(o||a)&&(this._active=n,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,s=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const n=this.options,o=this._active||[],a=this._getActiveElements(t,o,e,s),r=this._positionChanged(a,t),l=e||!Ee(a,o)||r;return l&&(this._active=a,(n.enabled||n.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),l}_getActiveElements(t,e,s,n){const o=this.options;if(t.type==="mouseout")return[];if(!n)return e.filter(r=>this.chart.data.datasets[r.datasetIndex]&&this.chart.getDatasetMeta(r.datasetIndex).controller.getParsed(r.index)!==void 0);const a=this.chart.getElementsAtEventForMode(t,o.mode,o,s);return o.reverse&&a.reverse(),a}_positionChanged(t,e){const{caretX:s,caretY:n,options:o}=this,a=Zt[o.position].call(this,t,e);return a!==!1&&(s!==a.x||n!==a.y)}}M(xi,"positioners",Zt);var gc={id:"tooltip",_element:xi,positioners:Zt,afterInit(i,t,e){e&&(i.tooltip=new xi({chart:i,options:e}))},beforeUpdate(i,t,e){i.tooltip&&i.tooltip.initialize(e)},reset(i,t,e){i.tooltip&&i.tooltip.initialize(e)},afterDraw(i){const t=i.tooltip;if(t&&t._willRender()){const e={tooltip:t};if(i.notifyPlugins("beforeTooltipDraw",{...e,cancelable:!0})===!1)return;t.draw(i.ctx),i.notifyPlugins("afterTooltipDraw",e)}},afterEvent(i,t){if(i.tooltip){const e=t.replay;i.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(i,t)=>t.bodyFont.size,boxWidth:(i,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Gn},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:i=>i!=="filter"&&i!=="itemSort"&&i!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},pc=Object.freeze({__proto__:null,Colors:Dl,Decimation:Tl,Filler:Jl,Legend:sc,SubTitle:ac,Title:oc,Tooltip:gc});const mc=(i,t,e,s)=>(typeof t=="string"?(e=i.push(t)-1,s.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function bc(i,t,e,s){const n=i.indexOf(t);if(n===-1)return mc(i,t,e,s);const o=i.lastIndexOf(t);return n!==o?e:n}const xc=(i,t)=>i===null?null:Y(Math.round(i),0,t);function Ys(i){const t=this.getLabels();return i>=0&&ie.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}M(_i,"id","category"),M(_i,"defaults",{ticks:{callback:Ys}});function _c(i,t){const e=[],{bounds:n,step:o,min:a,max:r,precision:l,count:c,maxTicks:h,maxDigits:d,includeBounds:u}=i,f=o||1,g=h-1,{min:p,max:m}=t,b=!O(a),x=!O(r),v=!O(c),y=(m-p)/(d+1);let _=Wi((m-p)/g/f)*f,k,S,w,P;if(_<1e-14&&!b&&!x)return[{value:p},{value:m}];P=Math.ceil(m/_)-Math.floor(p/_),P>g&&(_=Wi(P*_/g/f)*f),O(l)||(k=Math.pow(10,l),_=Math.ceil(_*k)/k),n==="ticks"?(S=Math.floor(p/_)*_,w=Math.ceil(m/_)*_):(S=p,w=m),b&&x&&o&&ho((r-a)/o,_/1e3)?(P=Math.round(Math.min((r-a)/_,h)),_=(r-a)/P,S=a,w=r):v?(S=b?a:S,w=x?r:w,P=c-1,_=(w-S)/P):(P=(w-S)/_,ie(P,Math.round(P),_/1e3)?P=Math.round(P):P=Math.ceil(P));const C=Math.max(Ni(_),Ni(S));k=Math.pow(10,O(l)?C:l),S=Math.round(S*k)/k,w=Math.round(w*k)/k;let A=0;for(b&&(u&&S!==a?(e.push({value:a}),Sr)break;e.push({value:L})}return x&&u&&w!==r?e.length&&ie(e[e.length-1].value,r,Us(r,y,i))?e[e.length-1].value=r:e.push({value:r}):(!x||w===r)&&e.push({value:w}),e}function Us(i,t,{horizontal:e,minRotation:s}){const n=st(s),o=(e?Math.sin(n):Math.cos(n))||.001,a=.75*t*(""+i).length;return Math.min(t/o,a)}class He extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return O(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:s}=this.getUserBounds();let{min:n,max:o}=this;const a=l=>n=e?n:l,r=l=>o=s?o:l;if(t){const l=lt(n),c=lt(o);l<0&&c<0?r(0):l>0&&c>0&&a(0)}if(n===o){let l=o===0?1:Math.abs(o*.05);r(o+l),t||a(n-l)}this.min=n,this.max=o}getTickLimit(){const t=this.options.ticks;let{maxTicksLimit:e,stepSize:s}=t,n;return s?(n=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,n>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${n} ticks. Limiting to 1000.`),n=1e3)):(n=this.computeTickLimit(),e=e||11),e&&(n=Math.min(e,n)),n}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n={maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},o=this._range||this,a=_c(n,o);return t.bounds==="ticks"&&on(a,this,"value"),t.reverse?(a.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),a}configure(){const t=this.ticks;let e=this.min,s=this.max;if(super.configure(),this.options.offset&&t.length){const n=(s-e)/Math.max(t.length-1,1)/2;e-=n,s+=n}this._startValue=e,this._endValue=s,this._valueRange=s-e}getLabelForValue(t){return fe(t,this.chart.options.locale,this.options.ticks.format)}}class yi extends He{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?t:0,this.max=N(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,s=st(this.options.ticks.minRotation),n=(t?Math.sin(s):Math.cos(s))||.001,o=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,o.lineHeight/n))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}M(yi,"id","linear"),M(yi,"defaults",{ticks:{callback:je.formatters.numeric}});const de=i=>Math.floor(mt(i)),Dt=(i,t)=>Math.pow(10,de(i)+t);function Xs(i){return i/Math.pow(10,de(i))===1}function Ks(i,t,e){const s=Math.pow(10,e),n=Math.floor(i/s);return Math.ceil(t/s)-n}function yc(i,t){const e=t-i;let s=de(e);for(;Ks(i,t,s)>10;)s++;for(;Ks(i,t,s)<10;)s--;return Math.min(s,de(i))}function vc(i,{min:t,max:e}){t=et(i.min,t);const s=[],n=de(t);let o=yc(t,e),a=o<0?Math.pow(10,Math.abs(o)):1;const r=Math.pow(10,o),l=n>o?Math.pow(10,n):0,c=Math.round((t-l)*a)/a,h=Math.floor((t-l)/r/10)*r*10;let d=Math.floor((c-h)/Math.pow(10,o)),u=et(i.min,Math.round((l+h+d*Math.pow(10,o))*a)/a);for(;u=10?d=d<15?15:20:d++,d>=20&&(o++,d=2,a=o>=0?1:a),u=Math.round((l+h+d*Math.pow(10,o))*a)/a;const f=et(i.max,u);return s.push({value:f,major:Xs(f),significand:d}),s}class vi extends Et{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const s=He.prototype.parse.apply(this,[t,e]);if(s===0){this._zero=!0;return}return N(s)&&s>0?s:null}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=N(t)?Math.max(0,t):null,this.max=N(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!N(this._userMin)&&(this.min=t===Dt(this.min,0)?Dt(this.min,-1):Dt(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let s=this.min,n=this.max;const o=r=>s=t?s:r,a=r=>n=e?n:r;s===n&&(s<=0?(o(1),a(10)):(o(Dt(s,-1)),a(Dt(n,1)))),s<=0&&o(Dt(n,-1)),n<=0&&a(Dt(s,1)),this.min=s,this.max=n}buildTicks(){const t=this.options,e={min:this._userMin,max:this._userMax},s=vc(e,this);return t.bounds==="ticks"&&on(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}getLabelForValue(t){return t===void 0?"0":fe(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=mt(t),this._valueRange=mt(this.max)-mt(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(mt(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}M(vi,"id","logarithmic"),M(vi,"defaults",{ticks:{callback:je.formatters.logarithmic,major:{enabled:!0}}});function Mi(i){const t=i.ticks;if(t.display&&i.display){const e=J(t.backdropPadding);return D(t.font&&t.font.size,W.font.size)+e.height}return 0}function Mc(i,t,e){return e=V(e)?e:[e],{w:Co(i,t.string,e),h:e.length*t.lineHeight}}function Gs(i,t,e,s,n){return i===s||i===n?{start:t-e/2,end:t+e/2}:in?{start:t-e,end:t}:{start:t,end:t+e}}function kc(i){const t={l:i.left+i._padding.left,r:i.right-i._padding.right,t:i.top+i._padding.top,b:i.bottom-i._padding.bottom},e=Object.assign({},t),s=[],n=[],o=i._pointLabels.length,a=i.options.pointLabels,r=a.centerPointLabels?R/o:0;for(let l=0;lt.r&&(r=(s.end-t.r)/o,i.r=Math.max(i.r,t.r+r)),n.startt.b&&(l=(n.end-t.b)/a,i.b=Math.max(i.b,t.b+l))}function wc(i,t,e){const s=i.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=e,l=i.getPointPosition(t,s+n+a,o),c=Math.round(wi(G(l.angle+j))),h=Oc(l.y,r.h,c),d=Cc(c),u=Ac(l.x,r.w,d);return{visible:!0,x:l.x,y:h,textAlign:d,left:u,top:h,right:u+r.w,bottom:h+r.h}}function Pc(i,t){if(!t)return!0;const{left:e,top:s,right:n,bottom:o}=i;return!(gt({x:e,y:s},t)||gt({x:e,y:o},t)||gt({x:n,y:s},t)||gt({x:n,y:o},t))}function Dc(i,t,e){const s=[],n=i._pointLabels.length,o=i.options,{centerPointLabels:a,display:r}=o.pointLabels,l={extra:Mi(o)/2,additionalAngle:a?R/n:0};let c;for(let h=0;h270||e<90)&&(i-=t),i}function Tc(i,t,e){const{left:s,top:n,right:o,bottom:a}=e,{backdropColor:r}=t;if(!O(r)){const l=Tt(t.borderRadius),c=J(t.backdropPadding);i.fillStyle=r;const h=s-c.left,d=n-c.top,u=o-s+c.width,f=a-n+c.height;Object.values(l).some(g=>g!==0)?(i.beginPath(),ce(i,{x:h,y:d,w:u,h:f,radius:l}),i.fill()):i.fillRect(h,d,u,f)}}function Lc(i,t){const{ctx:e,options:{pointLabels:s}}=i;for(let n=t-1;n>=0;n--){const o=i._pointLabelItems[n];if(!o.visible)continue;const a=s.setContext(i.getPointLabelContext(n));Tc(e,a,o);const r=$(a.font),{x:l,y:c,textAlign:h}=o;It(e,i._pointLabels[n],l,c+r.lineHeight/2,r,{color:a.color,textAlign:h,textBaseline:"middle"})}}function qn(i,t,e,s){const{ctx:n}=i;if(e)n.arc(i.xCenter,i.yCenter,t,0,F);else{let o=i.getPointPosition(0,t);n.moveTo(o.x,o.y);for(let a=1;a{const n=z(this.options.pointLabels.callback,[e,s],this);return n||n===0?n:""}).filter((e,s)=>this.chart.getDataVisibility(s))}fit(){const t=this.options;t.display&&t.pointLabels.display?kc(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,s,n){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((s-n)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,s,n))}getIndexAngle(t){const e=F/(this._pointLabels.length||1),s=this.options.startAngle||0;return G(t*e+st(s))}getDistanceFromCenterForValue(t){if(O(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(O(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t{if(d!==0||d===0&&this.min<0){l=this.getDistanceFromCenterForValue(h.value);const u=this.getContext(d),f=n.setContext(u),g=o.setContext(u);Rc(this,f,l,a,g)}}),s.display){for(t.save(),r=a-1;r>=0;r--){const h=s.setContext(this.getPointLabelContext(r)),{color:d,lineWidth:u}=h;!u||!d||(t.lineWidth=u,t.strokeStyle=d,t.setLineDash(h.borderDash),t.lineDashOffset=h.borderDashOffset,l=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),c=this.getPointPosition(r,l),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(c.x,c.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,s=e.ticks;if(!s.display)return;const n=this.getIndexAngle(0);let o,a;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((r,l)=>{if(l===0&&this.min>=0&&!e.reverse)return;const c=s.setContext(this.getContext(l)),h=$(c.font);if(o=this.getDistanceFromCenterForValue(this.ticks[l].value),c.showLabelBackdrop){t.font=h.string,a=t.measureText(r.label).width,t.fillStyle=c.backdropColor;const d=J(c.backdropPadding);t.fillRect(-a/2-d.left,-o-h.size/2-d.top,a+d.width,h.size+d.height)}It(t,r.label,0,-o,h,{color:c.color,strokeColor:c.textStrokeColor,strokeWidth:c.textStrokeWidth})}),t.restore()}drawTitle(){}}M(te,"id","radialLinear"),M(te,"defaults",{display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:je.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}}),M(te,"defaultRoutes",{"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"}),M(te,"descriptors",{angleLines:{_fallback:"grid"}});const Ge={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},Z=Object.keys(Ge);function qs(i,t){return i-t}function Js(i,t){if(O(t))return null;const e=i._adapter,{parser:s,round:n,isoWeekday:o}=i._parseOpts;let a=t;return typeof s=="function"&&(a=s(a)),N(a)||(a=typeof s=="string"?e.parse(a,s):e.parse(a)),a===null?null:(n&&(a=n==="week"&&(Wt(o)||o===!0)?e.startOf(a,"isoWeek",o):e.startOf(a,n)),+a)}function Qs(i,t,e,s){const n=Z.length;for(let o=Z.indexOf(i);o=Z.indexOf(e);o--){const a=Z[o];if(Ge[a].common&&i._adapter.diff(n,s,a)>=t-1)return a}return Z[e?Z.indexOf(e):0]}function zc(i){for(let t=Z.indexOf(i)+1,e=Z.length;t=t?e[s]:e[n];i[o]=!0}}function Fc(i,t,e,s){const n=i._adapter,o=+n.startOf(t[0].value,s),a=t[t.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=e[r],l>=0&&(t[l].major=!0);return t}function tn(i,t,e){const s=[],n={},o=t.length;let a,r;for(a=0;a+t.value))}initOffsets(t=[]){let e=0,s=0,n,o;this.options.offset&&t.length&&(n=this.getDecimalForValue(t[0]),t.length===1?e=1-n:e=(this.getDecimalForValue(t[1])-n)/2,o=this.getDecimalForValue(t[t.length-1]),t.length===1?s=o:s=(o-this.getDecimalForValue(t[t.length-2]))/2);const a=t.length<3?.5:.25;e=Y(e,0,a),s=Y(s,0,a),this._offsets={start:e,end:s,factor:1/(e+1+s)}}_generate(){const t=this._adapter,e=this.min,s=this.max,n=this.options,o=n.time,a=o.unit||Qs(o.minUnit,e,s,this._getLabelCapacity(e)),r=D(n.ticks.stepSize,1),l=a==="week"?o.isoWeekday:!1,c=Wt(l)||l===!0,h={};let d=e,u,f;if(c&&(d=+t.startOf(d,"isoWeek",l)),d=+t.startOf(d,c?"day":a),t.diff(s,e,a)>1e5*r)throw new Error(e+" and "+s+" are too far apart with stepSize of "+r+" "+a);const g=n.ticks.source==="data"&&this.getDataTimestamps();for(u=d,f=0;u+p)}getLabelForValue(t){const e=this._adapter,s=this.options.time;return s.tooltipFormat?e.format(t,s.tooltipFormat):e.format(t,s.displayFormats.datetime)}format(t,e){const n=this.options.time.displayFormats,o=this._unit,a=e||n[o];return this._adapter.format(t,a)}_tickFormatFunction(t,e,s,n){const o=this.options,a=o.ticks.callback;if(a)return z(a,[t,e,s],this);const r=o.time.displayFormats,l=this._unit,c=this._majorUnit,h=l&&r[l],d=c&&r[c],u=s[e],f=c&&d&&u&&u.major;return this._adapter.format(t,n||(f?d:h))}generateTickLabels(t){let e,s,n;for(e=0,s=t.length;e0?r:1}getDataTimestamps(){let t=this._cache.data||[],e,s;if(t.length)return t;const n=this.getMatchingVisibleMetas();if(this._normalized&&n.length)return this._cache.data=n[0].controller.getAllParsedValues(this);for(e=0,s=n.length;e=i[s].pos&&t<=i[n].pos&&({lo:s,hi:n}=ft(i,"pos",t)),{pos:o,time:r}=i[s],{pos:a,time:l}=i[n]):(t>=i[s].time&&t<=i[n].time&&({lo:s,hi:n}=ft(i,"time",t)),{time:o,pos:r}=i[s],{time:a,pos:l}=i[n]);const c=a-o;return c?r+(l-r)*(t-o)/c:r}class ki extends ue{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=we(e,this.min),this._tableRange=we(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:s}=this,n=[],o=[];let a,r,l,c,h;for(a=0,r=t.length;a=e&&c<=s&&n.push(c);if(n.length<2)return[{time:e,pos:0},{time:s,pos:1}];for(a=0,r=n.length;an-o)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),s=this.getLabelTimestamps();return e.length&&s.length?t=this.normalize(e.concat(s)):t=e.length?e:s,t=this._cache.all=t,t}getDecimalForValue(t){return(we(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,s=this.getDecimalForPixel(t)/e.factor-e.end;return we(this._table,s*this._tableRange+this._minPos,!0)}}M(ki,"id","timeseries"),M(ki,"defaults",ue.defaults);var Bc=Object.freeze({__proto__:null,CategoryScale:_i,LinearScale:yi,LogarithmicScale:vi,RadialLinearScale:te,TimeScale:ue,TimeSeriesScale:ki});const Vc=[$a,yl,pc,Bc];pt.register(...Vc);export{pt as C};
diff --git a/web/admin-spa/dist/assets/element-plus-BSjV1f9S.js b/web/admin-spa/dist/assets/element-plus-BSjV1f9S.js
new file mode 100644
index 00000000..5c88e00e
--- /dev/null
+++ b/web/admin-spa/dist/assets/element-plus-BSjV1f9S.js
@@ -0,0 +1,13 @@
+import{g as lt,i as we,r as I,c as y,u as o,a as Ve,b as ke,d as yt,e as bt,f as gn,h as rn,w as _p,j as Qe,p as rt,k as Ar,l as x,s as Lt,m as Tp,n as nu,o as ie,q as Xe,t as xt,v as bn,x as V,y as _,z as F,A as G,B as _e,C as T,D as Ee,N as Bt,E as et,F as $p,G as Xt,H as wt,I as oe,J as U,K as We,L as J,M as Ge,O as st,P as pe,Q as Oe,R as H,S as mt,T as an,U as Ha,V as cs,W as pl,X as Ft,Y as Le,Z as Nt,_ as kt,$ as Fr,a0 as hl,a1 as Np,a2 as Nc,a3 as jl,a4 as ua,a5 as Ip,a6 as xr,a7 as zr,a8 as Ic,a9 as Mp,aa as Tt,ab as Mn,ac as ut,ad as Mc,ae as wo,af as On,ag as cl,ah as Dt,ai as Re,aj as Oa,ak as Uo,al as Ka,am as nn,an as Rc,ao as Pc,ap as Yo,aq as ds,ar as Rp,as as Pp,at as Op,au as Ul,av as ht,aw as Lp,ax as Oc,ay as $l,az as Bp,aA as Vp,aB as nr,aC as lr,aD as fs,aE as Dp,aF as Lc,aG as Il,aH as Ap,aI as Fp,aJ as Bc,aK as xp,aL as zp,aM as Hp,aN as Kp,aO as Wp}from"./vue-vendor-DV7DYXbz.js";import{i as qt,g as Yt,f as qo,s as jp,p as An,E as Xl,y as Up,a as Yp,d as Ln,T as vo,b as Ke,l as Vc,t as Hl,c as tn,e as qp,h as Wa,j as ln,u as Ds,k as Hr,m as Gp,n as Xp,w as Zp,o as Jp,q as Qp,r as eh,v as th,x as lu,S as nh,z as Dc,A as lh,B as oh,D as ca,F as Ac,G as Fc,Y as ah,H as xc,I as zc,J as Hc,K as Kc,L as sh,M as rh,N as ih,O as uh}from"./vendor-Dr8jvgFu.js";const ch="2.10.4",ou=Symbol("INSTALLED_KEY"),Wc=Symbol(),Ko="el",dh="is-",Bl=(e,t,n,l,a)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),l&&(s+=`__${l}`),a&&(s+=`--${a}`),s},jc=Symbol("namespaceContextKey"),Kr=e=>{const t=e||(lt()?we(jc,I(Ko)):I(Ko));return y(()=>o(t)||Ko)},ue=(e,t)=>{const n=Kr(t);return{namespace:n,b:(p="")=>Bl(n.value,e,p,"",""),e:p=>p?Bl(n.value,e,"",p,""):"",m:p=>p?Bl(n.value,e,"","",p):"",be:(p,g)=>p&&g?Bl(n.value,e,p,g,""):"",em:(p,g)=>p&&g?Bl(n.value,e,"",p,g):"",bm:(p,g)=>p&&g?Bl(n.value,e,p,"",g):"",bem:(p,g,b)=>p&&g&&b?Bl(n.value,e,p,g,b):"",is:(p,...g)=>{const b=g.length>=1?g[0]:!0;return p&&b?`${dh}${p}`:""},cssVar:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${b}`]=p[b]);return g},cssVarName:p=>`--${n.value}-${p}`,cssVarBlock:p=>{const g={};for(const b in p)p[b]&&(g[`--${n.value}-${e}-${b}`]=p[b]);return g},cssVarBlockName:p=>`--${n.value}-${e}-${p}`}},vt=e=>e===void 0,_t=e=>typeof e=="boolean",Te=e=>typeof e=="number",Pn=e=>!e&&e!==0||ke(e)&&e.length===0||yt(e)&&!Object.keys(e).length,_n=e=>typeof Element>"u"?!1:e instanceof Element,In=e=>qt(e),fh=e=>Ve(e)?!Number.isNaN(Number(e)):!1,vs=e=>e===window;class vh extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function jt(e,t){throw new vh(`[${e}] ${t}`)}const au={current:0},su=I(0),Uc=2e3,ru=Symbol("elZIndexContextKey"),Yc=Symbol("zIndexContextKey"),Mo=e=>{const t=lt()?we(ru,au):au,n=e||(lt()?we(Yc,void 0):void 0),l=y(()=>{const r=o(n);return Te(r)?r:Uc}),a=y(()=>l.value+su.value),s=()=>(t.current++,su.value=t.current,a.value);return!bt&&we(ru),{initialZIndex:l,currentZIndex:a,nextZIndex:s}};var ph={name:"en",el:{breadcrumb:{label:"Breadcrumb"},colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color.",alphaLabel:"pick alpha value"},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},mention:{loading:"Loading"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"},carousel:{leftArrow:"Carousel arrow left",rightArrow:"Carousel arrow right",indicator:"Carousel switch to index {index}"}}};const hh=e=>(t,n)=>mh(t,n,o(e)),mh=(e,t,n)=>Yt(n,e,e).replace(/\{(\w+)\}/g,(l,a)=>{var s;return`${(s=t==null?void 0:t[a])!=null?s:`{${a}}`}`}),gh=e=>{const t=y(()=>o(e).name),n=gn(e)?e:I(e);return{lang:t,locale:n,t:hh(e)}},qc=Symbol("localeContextKey"),pt=e=>{const t=e||we(qc,I());return gh(y(()=>t.value||ph))},Gc="__epPropKey",Y=e=>e,bh=e=>yt(e)&&!!e[Gc],Un=(e,t)=>{if(!yt(e)||bh(e))return e;const{values:n,required:l,default:a,type:s,validator:r}=e,u={type:s,required:!!l,validator:n||r?c=>{let d=!1,f=[];if(n&&(f=Array.from(n),rn(e,"default")&&f.push(a),d||(d=f.includes(c))),r&&(d||(d=r(c))),!d&&f.length>0){const m=[...new Set(f)].map(v=>JSON.stringify(v)).join(", ");_p(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${m}], got value ${JSON.stringify(c)}.`)}return d}:void 0,[Gc]:!0};return rn(e,"default")&&(u.default=a),u},de=e=>qo(Object.entries(e).map(([t,n])=>[t,Un(n,t)])),tl=["","default","small","large"],Jt=Un({type:String,values:tl,required:!1}),Xc=Symbol("size"),Zc=()=>{const e=we(Xc,{});return y(()=>o(e.size)||"")},Jc=Symbol("emptyValuesContextKey"),yh=["",void 0,null],Ch=void 0,Zl=de({emptyValues:Array,valueOnClear:{type:[String,Number,Boolean,Function],default:void 0,validator:e=>Qe(e)?!e():!e}}),da=(e,t)=>{const n=lt()?we(Jc,I({})):I({}),l=y(()=>e.emptyValues||n.value.emptyValues||yh),a=y(()=>Qe(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Qe(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:Ch),s=r=>l.value.includes(r);return l.value.includes(a.value),{emptyValues:l,valueOnClear:a,isEmptyValue:s}},ko=e=>Object.keys(e),Qc=e=>Object.entries(e),Wo=(e,t,n)=>({get value(){return Yt(e,t,n)},set value(l){jp(e,t,l)}}),ja=I();function fa(e,t=void 0){const n=lt()?we(Wc,ja):ja;return e?y(()=>{var l,a;return(a=(l=n.value)==null?void 0:l[e])!=null?a:t}):n}function ps(e,t){const n=fa(),l=ue(e,y(()=>{var i;return((i=n.value)==null?void 0:i.namespace)||Ko})),a=pt(y(()=>{var i;return(i=n.value)==null?void 0:i.locale})),s=Mo(y(()=>{var i;return((i=n.value)==null?void 0:i.zIndex)||Uc})),r=y(()=>{var i;return o(t)||((i=n.value)==null?void 0:i.size)||""});return Wr(y(()=>o(n)||{})),{ns:l,locale:a,zIndex:s,size:r}}const Wr=(e,t,n=!1)=>{var l;const a=!!lt(),s=a?fa():void 0,r=(l=t==null?void 0:t.provide)!=null?l:a?rt:void 0;if(!r)return;const i=y(()=>{const u=o(e);return s!=null&&s.value?wh(s.value,u):u});return r(Wc,i),r(qc,y(()=>i.value.locale)),r(jc,y(()=>i.value.namespace)),r(Yc,y(()=>i.value.zIndex)),r(Xc,{size:y(()=>i.value.size||"")}),r(Jc,y(()=>({emptyValues:i.value.emptyValues,valueOnClear:i.value.valueOnClear}))),(n||!ja.value)&&(ja.value=i.value),i},wh=(e,t)=>{const n=[...new Set([...ko(e),...ko(t)])],l={};for(const a of n)l[a]=t[a]!==void 0?t[a]:e[a];return l},kh=(e=[])=>({version:ch,install:(n,l)=>{n[ou]||(n[ou]=!0,e.forEach(a=>n.use(a)),l&&Wr(l,n,!0))}}),De="update:modelValue",nt="change",Zt="input",Sh=de({zIndex:{type:Y([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"}}),Eh={scroll:({scrollTop:e,fixed:t})=>Te(e)&&_t(t),[nt]:e=>_t(e)};var fe=(e,t)=>{const n=e.__vccOpts||e;for(const[l,a]of t)n[l]=a;return n};function _h(e,t,n,l){const a=n-t;return e/=l/2,e<1?a/2*e*e*e+t:a/2*((e-=2)*e*e+2)+t}const Ml=e=>bt?window.requestAnimationFrame(e):setTimeout(e,16),Yl=e=>bt?window.cancelAnimationFrame(e):clearTimeout(e),ed=(e="")=>e.split(" ").filter(t=>!!t.trim()),Nn=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Fn=(e,t)=>{!e||!t.trim()||e.classList.add(...ed(t))},yn=(e,t)=>{!e||!t.trim()||e.classList.remove(...ed(t))},rl=(e,t)=>{var n;if(!bt||!e||!t)return"";let l=Ar(t);l==="float"&&(l="cssFloat");try{const a=e.style[l];if(a)return a;const s=(n=document.defaultView)==null?void 0:n.getComputedStyle(e,"");return s?s[l]:""}catch{return e.style[l]}},td=(e,t,n)=>{if(!(!e||!t))if(yt(t))Qc(t).forEach(([l,a])=>td(e,l,a));else{const l=Ar(t);e.style[l]=n}};function zt(e,t="px"){if(!e)return"";if(Te(e)||fh(e))return`${e}${t}`;if(Ve(e))return e}const Th=(e,t)=>{if(!bt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],l=rl(e,n);return["scroll","auto","overlay"].some(a=>l.includes(a))},jr=(e,t)=>{if(!bt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(Th(n,t))return n;n=n.parentNode}return n};let wa;const nd=e=>{var t;if(!bt)return 0;if(wa!==void 0)return wa;const n=document.createElement("div");n.className=`${e}-scrollbar__wrap`,n.style.visibility="hidden",n.style.width="100px",n.style.position="absolute",n.style.top="-9999px",document.body.appendChild(n);const l=n.offsetWidth;n.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",n.appendChild(a);const s=a.offsetWidth;return(t=n.parentNode)==null||t.removeChild(n),wa=l-s,wa};function Ur(e,t){if(!bt)return;if(!t){e.scrollTop=0;return}const n=[];let l=t.offsetParent;for(;l!==null&&e!==l&&e.contains(l);)n.push(l),l=l.offsetParent;const a=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=a+t.offsetHeight,r=e.scrollTop,i=r+e.clientHeight;ai&&(e.scrollTop=s-e.clientHeight)}function $h(e,t,n,l,a){const s=Date.now();let r;const i=()=>{const c=Date.now()-s,d=_h(c>l?l:c,t,n,l);vs(e)?e.scrollTo(window.pageXOffset,d):e.scrollTop=d,c{r&&Yl(r)}}const iu=(e,t)=>vs(t)?e.ownerDocument.documentElement:t,uu=e=>vs(e)?window.scrollY:e.scrollTop,ld="ElAffix",Nh=x({name:ld}),Ih=x({...Nh,props:Sh,emits:Eh,setup(e,{expose:t,emit:n}){const l=e,a=ue("affix"),s=Lt(),r=Lt(),i=Lt(),{height:u}=Tp(),{height:c,width:d,top:f,bottom:m,update:v}=nu(r,{windowScroll:!1}),h=nu(s),p=I(!1),g=I(0),b=I(0),E=y(()=>({height:p.value?`${c.value}px`:"",width:p.value?`${d.value}px`:""})),C=y(()=>{if(!p.value)return{};const $=l.offset?zt(l.offset):0;return{height:`${c.value}px`,width:`${d.value}px`,top:l.position==="top"?$:"",bottom:l.position==="bottom"?$:"",transform:b.value?`translateY(${b.value}px)`:"",zIndex:l.zIndex}}),w=()=>{if(!i.value)return;g.value=i.value instanceof Window?document.documentElement.scrollTop:i.value.scrollTop||0;const{position:$,target:M,offset:R}=l,N=R+c.value;if($==="top")if(M){const O=h.bottom.value-N;p.value=R>f.value&&h.bottom.value>0,b.value=O<0?O:0}else p.value=R>f.value;else if(M){const O=u.value-h.top.value-N;p.value=u.value-Rh.top.value,b.value=O<0?-O:0}else p.value=u.value-R{if(!p.value){v();return}p.value=!1,await Ee(),v(),p.value=!0},S=async()=>{v(),await Ee(),n("scroll",{scrollTop:g.value,fixed:p.value})};return ie(p,$=>n(nt,$)),Xe(()=>{var $;l.target?(s.value=($=document.querySelector(l.target))!=null?$:void 0,s.value||jt(ld,`Target does not exist: ${l.target}`)):s.value=document.documentElement,i.value=jr(r.value,!0),v()}),xt(i,"scroll",S),bn(w),t({update:w,updateRoot:k}),($,M)=>(_(),V("div",{ref_key:"root",ref:r,class:T(o(a).b()),style:_e(o(E))},[F("div",{class:T({[o(a).m("fixed")]:p.value}),style:_e(o(C))},[G($.$slots,"default")],6)],6))}});var Mh=fe(Ih,[["__file","affix.vue"]]);const He=(e,t)=>{if(e.install=n=>{for(const l of[e,...Object.values(t??{})])n.component(l.name,l)},t)for(const[n,l]of Object.entries(t))e[n]=l;return e},od=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),Rh=(e,t)=>(e.install=n=>{n.directive(t,e)},e),At=e=>(e.install=Bt,e),Ph=He(Mh),Oh=de({size:{type:Y([Number,String])},color:{type:String}}),Lh=x({name:"ElIcon",inheritAttrs:!1}),Bh=x({...Lh,props:Oh,setup(e){const t=e,n=ue("icon"),l=y(()=>{const{size:a,color:s}=t;return!a&&!s?{}:{fontSize:vt(a)?void 0:zt(a),"--color":s}});return(a,s)=>(_(),V("i",et({class:o(n).b(),style:o(l)},a.$attrs),[G(a.$slots,"default")],16))}});var Vh=fe(Bh,[["__file","icon.vue"]]);const Se=He(Vh);function cu(){let e;const t=(l,a)=>{n(),e=window.setTimeout(l,a)},n=()=>window.clearTimeout(e);return $p(()=>n()),{registerTimeout:t,cancelTimeout:n}}const ad=de({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),sd=({showAfter:e,hideAfter:t,autoClose:n,open:l,close:a})=>{const{registerTimeout:s}=cu(),{registerTimeout:r,cancelTimeout:i}=cu();return{onOpen:d=>{s(()=>{l(d);const f=o(n);Te(f)&&f>0&&r(()=>{a(d)},f)},o(e))},onClose:d=>{i(),s(()=>{a(d)},o(t))}}};/*! Element Plus Icons Vue v2.3.1 */var Dh=x({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),nl=Dh,Ah=x({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}}),dl=Ah,Fh=x({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Cn=Fh,xh=x({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),hs=xh,zh=x({name:"Back",__name:"back",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),F("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),Hh=zh,Kh=x({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}}),Wh=Kh,jh=x({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),rd=jh,Uh=x({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),Yh=Uh,qh=x({name:"Check",__name:"check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}}),va=qh,Gh=x({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),Xh=Gh,Zh=x({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}}),Yr=Zh,Jh=x({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),qr=Jh,Qh=x({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}}),ml=Qh,em=x({name:"Clock",__name:"clock",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),F("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),F("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),id=em,tm=x({name:"Close",__name:"close",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),zn=tm,nm=x({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}}),Rl=nm,lm=x({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}}),Pl=lm,om=x({name:"Delete",__name:"delete",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}}),am=om,sm=x({name:"Document",__name:"document",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}}),rm=sm,im=x({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),um=im,cm=x({name:"Hide",__name:"hide",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),F("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}}),dm=cm,fm=x({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),Go=fm,vm=x({name:"Loading",__name:"loading",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Qn=vm,pm=x({name:"Minus",__name:"minus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),hm=pm,mm=x({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}}),du=mm,gm=x({name:"More",__name:"more",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),bm=gm,ym=x({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}}),Cm=ym,wm=x({name:"Plus",__name:"plus",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}}),ud=wm,km=x({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),Sm=km,Em=x({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}}),_m=Em,Tm=x({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}}),$m=Tm,Nm=x({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}}),Im=Nm,Mm=x({name:"Search",__name:"search",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}}),Rm=Mm,Pm=x({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}}),Om=Pm,Lm=x({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}}),Bm=Lm,Vm=x({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}}),ka=Vm,Dm=x({name:"Star",__name:"star",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}}),Am=Dm,Fm=x({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),cd=Fm,xm=x({name:"View",__name:"view",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),zm=xm,Hm=x({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),ms=Hm,Km=x({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}}),dd=Km,Wm=x({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(_(),V("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[F("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}}),jm=Wm;const $t=Y([String,Object,Function]),fd={Close:zn},Gr={Close:zn,SuccessFilled:cd,InfoFilled:Go,WarningFilled:ms,CircleCloseFilled:qr},Ol={primary:Go,success:cd,warning:ms,error:qr,info:Go},gs={validating:Qn,success:Yr,error:ml},Um=["light","dark"],Ym=de({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:ko(Ol),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:Um,default:"light"},...ad}),qm={open:()=>!0,close:e=>vt(e)||e instanceof Event},Gm=x({name:"ElAlert"}),Xm=x({...Gm,props:Ym,emits:qm,setup(e,{emit:t}){const n=e,{Close:l}=Gr,a=Xt(),s=ue("alert"),r=I(!1),i=y(()=>Ol[n.type]),u=y(()=>!!(n.description||a.default)),c=()=>{r.value=!0,t("open")},d=v=>{r.value=!1,t("close",v)},{onOpen:f,onClose:m}=sd({showAfter:wt(n,"showAfter"),hideAfter:wt(n,"hideAfter"),autoClose:wt(n,"autoClose"),open:c,close:d});return bt&&f(),(v,h)=>(_(),oe(an,{name:o(s).b("fade"),persisted:""},{default:U(()=>[We(F("div",{class:T([o(s).b(),o(s).m(v.type),o(s).is("center",v.center),o(s).is(v.effect)]),role:"alert"},[v.showIcon&&(v.$slots.icon||o(i))?(_(),oe(o(Se),{key:0,class:T([o(s).e("icon"),{[o(s).is("big")]:o(u)}])},{default:U(()=>[G(v.$slots,"icon",{},()=>[(_(),oe(Ge(o(i))))])]),_:3},8,["class"])):J("v-if",!0),F("div",{class:T(o(s).e("content"))},[v.title||v.$slots.title?(_(),V("span",{key:0,class:T([o(s).e("title"),{"with-description":o(u)}])},[G(v.$slots,"title",{},()=>[st(pe(v.title),1)])],2)):J("v-if",!0),o(u)?(_(),V("p",{key:1,class:T(o(s).e("description"))},[G(v.$slots,"default",{},()=>[st(pe(v.description),1)])],2)):J("v-if",!0),v.closable?(_(),V(Oe,{key:2},[v.closeText?(_(),V("div",{key:0,class:T([o(s).e("close-btn"),o(s).is("customed")]),onClick:d},pe(v.closeText),3)):(_(),oe(o(Se),{key:1,class:T(o(s).e("close-btn")),onClick:o(m)},{default:U(()=>[H(o(l))]),_:1},8,["class","onClick"]))],64)):J("v-if",!0)],2)],2),[[mt,r.value]])]),_:3},8,["name"]))}});var Zm=fe(Xm,[["__file","alert.vue"]]);const Jm=He(Zm),Xr=()=>bt&&/firefox/i.test(window.navigator.userAgent);let Tn;const Qm={height:"0",visibility:"hidden",overflow:Xr()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},eg=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing"];function tg(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),l=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),a=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:eg.map(r=>[r,t.getPropertyValue(r)]),paddingSize:l,borderSize:a,boxSizing:n}}function fu(e,t=1,n){var l;Tn||(Tn=document.createElement("textarea"),document.body.appendChild(Tn));const{paddingSize:a,borderSize:s,boxSizing:r,contextStyle:i}=tg(e);i.forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m)),Object.entries(Qm).forEach(([f,m])=>Tn==null?void 0:Tn.style.setProperty(f,m,"important")),Tn.value=e.value||e.placeholder||"";let u=Tn.scrollHeight;const c={};r==="border-box"?u=u+s:r==="content-box"&&(u=u-a),Tn.value="";const d=Tn.scrollHeight-a;if(Te(t)){let f=d*t;r==="border-box"&&(f=f+a+s),u=Math.max(f,u),c.minHeight=`${f}px`}if(Te(n)){let f=d*n;r==="border-box"&&(f=f+a+s),u=Math.min(f,u)}return c.height=`${u}px`,(l=Tn.parentNode)==null||l.removeChild(Tn),Tn=void 0,c}const Vt=e=>e,ng=de({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),cn=e=>An(ng,e),pa=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:Y([String,Number,Object]),default:""},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:String,default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:Y([Boolean,Object]),default:!1},autocomplete:{type:String,default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,showPassword:Boolean,showWordLimit:Boolean,suffixIcon:{type:$t},prefixIcon:{type:$t},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:Y([Object,Array,String]),default:()=>Vt({})},autofocus:Boolean,rows:{type:Number,default:2},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0},name:String}),lg={[De]:e=>Ve(e),input:e=>Ve(e),change:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent},og=["class","style"],ag=/^on[A-Z]/,bs=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,l=y(()=>((n==null?void 0:n.value)||[]).concat(og)),a=lt();return a?y(()=>{var s;return qo(Object.entries((s=a.proxy)==null?void 0:s.$attrs).filter(([r])=>!l.value.includes(r)&&!(t&&ag.test(r))))}):y(()=>({}))},vu={prefix:Math.floor(Math.random()*1e4),current:0},sg=Symbol("elIdInjection"),Zr=()=>lt()?we(sg,vu):vu,sn=e=>{const t=Zr(),n=Kr();return Ha(()=>o(e)||`${n.value}-id-${t.prefix}-${t.current++}`)},Jl=Symbol("formContextKey"),el=Symbol("formItemContextKey"),dn=()=>{const e=we(Jl,void 0),t=we(el,void 0);return{form:e,formItem:t}},Kn=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:l})=>{n||(n=I(!1)),l||(l=I(!1));const a=I();let s;const r=y(()=>{var i;return!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&((i=t.inputIds)==null?void 0:i.length)<=1)});return Xe(()=>{s=ie([wt(e,"id"),n],([i,u])=>{const c=i??(u?void 0:sn().value);c!==a.value&&(t!=null&&t.removeInputId&&(a.value&&t.removeInputId(a.value),!(l!=null&&l.value)&&!u&&c&&t.addInputId(c)),a.value=c)},{immediate:!0})}),cs(()=>{s&&s(),t!=null&&t.removeInputId&&a.value&&t.removeInputId(a.value)}),{isLabeledByFormItem:r,inputId:a}},vd=e=>{const t=lt();return y(()=>{var n,l;return(l=(n=t==null?void 0:t.proxy)==null?void 0:n.$props)==null?void 0:l[e]})},Gt=(e,t={})=>{const n=I(void 0),l=t.prop?n:vd("size"),a=t.global?n:Zc(),s=t.form?{size:void 0}:we(Jl,void 0),r=t.formItem?{size:void 0}:we(el,void 0);return y(()=>l.value||o(e)||(r==null?void 0:r.size)||(s==null?void 0:s.size)||a.value||"")},fn=e=>{const t=vd("disabled"),n=we(Jl,void 0);return y(()=>t.value||o(e)||(n==null?void 0:n.disabled)||!1)},rg='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',ig=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,pu=e=>Array.from(e.querySelectorAll(rg)).filter(t=>Xo(t)&&ig(t)),Xo=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},La=function(e,t,...n){let l;t.includes("mouse")||t.includes("click")?l="MouseEvents":t.includes("key")?l="KeyboardEvent":l="HTMLEvents";const a=document.createEvent(l);return a.initEvent(t,...n),e.dispatchEvent(a),e},pd=e=>!e.getAttribute("aria-owns"),hd=(e,t,n)=>{const{parentNode:l}=e;if(!l)return null;const a=l.querySelectorAll(n),s=Array.prototype.indexOf.call(a,e);return a[s+t]||null},Ba=e=>{e&&(e.focus(),!pd(e)&&e.click())};function Ll(e,{disabled:t,beforeFocus:n,afterFocus:l,beforeBlur:a,afterBlur:s}={}){const r=lt(),{emit:i}=r,u=Lt(),c=I(!1),d=v=>{const h=Qe(n)?n(v):!1;o(t)||c.value||h||(c.value=!0,i("focus",v),l==null||l())},f=v=>{var h;const p=Qe(a)?a(v):!1;o(t)||v.relatedTarget&&((h=u.value)!=null&&h.contains(v.relatedTarget))||p||(c.value=!1,i("blur",v),s==null||s())},m=v=>{var h,p;o(t)||Xo(v.target)||(h=u.value)!=null&&h.contains(document.activeElement)&&u.value!==document.activeElement||(p=e.value)==null||p.focus()};return ie([u,()=>o(t)],([v,h])=>{v&&(h?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),xt(u,"focus",d,!0),xt(u,"blur",f,!0),xt(u,"click",m,!0),{isFocused:c,wrapperRef:u,handleFocus:d,handleBlur:f}}const ug=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function ha({afterComposition:e,emit:t}){const n=I(!1),l=i=>{t==null||t("compositionstart",i),n.value=!0},a=i=>{var u;t==null||t("compositionupdate",i);const c=(u=i.target)==null?void 0:u.value,d=c[c.length-1]||"";n.value=!ug(d)},s=i=>{t==null||t("compositionend",i),n.value&&(n.value=!1,Ee(()=>e(i)))};return{isComposing:n,handleComposition:i=>{i.type==="compositionend"?s(i):a(i)},handleCompositionStart:l,handleCompositionUpdate:a,handleCompositionEnd:s}}function cg(e){let t;function n(){if(e.value==null)return;const{selectionStart:a,selectionEnd:s,value:r}=e.value;if(a==null||s==null)return;const i=r.slice(0,Math.max(0,a)),u=r.slice(Math.max(0,s));t={selectionStart:a,selectionEnd:s,value:r,beforeTxt:i,afterTxt:u}}function l(){if(e.value==null||t==null)return;const{value:a}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:i}=t;if(s==null||r==null||i==null)return;let u=a.length;if(a.endsWith(r))u=a.length-r.length;else if(a.startsWith(s))u=s.length;else{const c=s[i-1],d=a.indexOf(c,i-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,l]}const dg="ElInput",fg=x({name:dg,inheritAttrs:!1}),vg=x({...fg,props:pa,emits:lg,setup(e,{expose:t,emit:n}){const l=e,a=pl(),s=bs(),r=Xt(),i=y(()=>[l.type==="textarea"?p.b():h.b(),h.m(m.value),h.is("disabled",v.value),h.is("exceed",Q.value),{[h.b("group")]:r.prepend||r.append,[h.m("prefix")]:r.prefix||l.prefixIcon,[h.m("suffix")]:r.suffix||l.suffixIcon||l.clearable||l.showPassword,[h.bm("suffix","password-clear")]:B.value&&A.value,[h.b("hidden")]:l.type==="hidden"},a.class]),u=y(()=>[h.e("wrapper"),h.is("focus",M.value)]),{form:c,formItem:d}=dn(),{inputId:f}=Kn(l,{formItemContext:d}),m=Gt(),v=fn(),h=ue("input"),p=ue("textarea"),g=Lt(),b=Lt(),E=I(!1),C=I(!1),w=I(),k=Lt(l.inputStyle),S=y(()=>g.value||b.value),{wrapperRef:$,isFocused:M,handleFocus:R,handleBlur:N}=Ll(S,{disabled:v,afterBlur(){var ye;l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"blur").catch(Ue=>void 0))}}),O=y(()=>{var ye;return(ye=c==null?void 0:c.statusIcon)!=null?ye:!1}),P=y(()=>(d==null?void 0:d.validateState)||""),W=y(()=>P.value&&gs[P.value]),K=y(()=>C.value?zm:dm),D=y(()=>[a.style]),L=y(()=>[l.inputStyle,k.value,{resize:l.resize}]),z=y(()=>qt(l.modelValue)?"":String(l.modelValue)),B=y(()=>l.clearable&&!v.value&&!l.readonly&&!!z.value&&(M.value||E.value)),A=y(()=>l.showPassword&&!v.value&&!!z.value),ne=y(()=>l.showWordLimit&&!!l.maxlength&&(l.type==="text"||l.type==="textarea")&&!v.value&&!l.readonly&&!l.showPassword),j=y(()=>z.value.length),Q=y(()=>!!ne.value&&j.value>Number(l.maxlength)),Z=y(()=>!!r.suffix||!!l.suffixIcon||B.value||l.showPassword||ne.value||!!P.value&&O.value),[ee,ae]=cg(g);Ft(b,ye=>{if(se(),!ne.value||l.resize!=="both")return;const Ue=ye[0],{width:It}=Ue.contentRect;w.value={right:`calc(100% - ${It+15+6}px)`}});const re=()=>{const{type:ye,autosize:Ue}=l;if(!(!bt||ye!=="textarea"||!b.value))if(Ue){const It=yt(Ue)?Ue.minRows:void 0,Ot=yt(Ue)?Ue.maxRows:void 0,Rt=fu(b.value,It,Ot);k.value={overflowY:"hidden",...Rt},Ee(()=>{b.value.offsetHeight,k.value=Rt})}else k.value={minHeight:fu(b.value).minHeight}},se=(ye=>{let Ue=!1;return()=>{var It;if(Ue||!l.autosize)return;((It=b.value)==null?void 0:It.offsetParent)===null||(ye(),Ue=!0)}})(re),ge=()=>{const ye=S.value,Ue=l.formatter?l.formatter(z.value):z.value;!ye||ye.value===Ue||(ye.value=Ue)},Be=async ye=>{ee();let{value:Ue}=ye.target;if(l.formatter&&l.parser&&(Ue=l.parser(Ue)),!ce.value){if(Ue===z.value){ge();return}n(De,Ue),n(Zt,Ue),await Ee(),ge(),ae()}},te=ye=>{let{value:Ue}=ye.target;l.formatter&&l.parser&&(Ue=l.parser(Ue)),n(nt,Ue)},{isComposing:ce,handleCompositionStart:Ie,handleCompositionUpdate:Ae,handleCompositionEnd:xe}=ha({emit:n,afterComposition:Be}),Ye=()=>{ee(),C.value=!C.value,setTimeout(ae)},$e=()=>{var ye;return(ye=S.value)==null?void 0:ye.focus()},Me=()=>{var ye;return(ye=S.value)==null?void 0:ye.blur()},Pe=ye=>{E.value=!1,n("mouseleave",ye)},Ze=ye=>{E.value=!0,n("mouseenter",ye)},ot=ye=>{n("keydown",ye)},at=()=>{var ye;(ye=S.value)==null||ye.select()},ct=()=>{n(De,""),n(nt,""),n("clear"),n(Zt,"")};return ie(()=>l.modelValue,()=>{var ye;Ee(()=>re()),l.validateEvent&&((ye=d==null?void 0:d.validate)==null||ye.call(d,"change").catch(Ue=>void 0))}),ie(z,()=>ge()),ie(()=>l.type,async()=>{await Ee(),ge(),re()}),Xe(()=>{!l.formatter&&l.parser,ge(),Ee(re)}),t({input:g,textarea:b,ref:S,textareaStyle:L,autosize:wt(l,"autosize"),isComposing:ce,focus:$e,blur:Me,select:at,clear:ct,resizeTextarea:re}),(ye,Ue)=>(_(),V("div",{class:T([o(i),{[o(h).bm("group","append")]:ye.$slots.append,[o(h).bm("group","prepend")]:ye.$slots.prepend}]),style:_e(o(D)),onMouseenter:Ze,onMouseleave:Pe},[J(" input "),ye.type!=="textarea"?(_(),V(Oe,{key:0},[J(" prepend slot "),ye.$slots.prepend?(_(),V("div",{key:0,class:T(o(h).be("group","prepend"))},[G(ye.$slots,"prepend")],2)):J("v-if",!0),F("div",{ref_key:"wrapperRef",ref:$,class:T(o(u))},[J(" prefix slot "),ye.$slots.prefix||ye.prefixIcon?(_(),V("span",{key:0,class:T(o(h).e("prefix"))},[F("span",{class:T(o(h).e("prefix-inner"))},[G(ye.$slots,"prefix"),ye.prefixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.prefixIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0),F("input",et({id:o(f),ref_key:"input",ref:g,class:o(h).e("inner")},o(s),{name:ye.name,minlength:ye.minlength,maxlength:ye.maxlength,type:ye.showPassword?C.value?"text":"password":ye.type,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,tabindex:ye.tabindex,"aria-label":ye.ariaLabel,placeholder:ye.placeholder,style:ye.inputStyle,form:ye.form,autofocus:ye.autofocus,role:ye.containerRole,inputmode:ye.inputmode,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onChange:te,onKeydown:ot}),null,16,["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode","onCompositionstart","onCompositionupdate","onCompositionend"]),J(" suffix slot "),o(Z)?(_(),V("span",{key:1,class:T(o(h).e("suffix"))},[F("span",{class:T(o(h).e("suffix-inner"))},[!o(B)||!o(A)||!o(ne)?(_(),V(Oe,{key:0},[G(ye.$slots,"suffix"),ye.suffixIcon?(_(),oe(o(Se),{key:0,class:T(o(h).e("icon"))},{default:U(()=>[(_(),oe(Ge(ye.suffixIcon)))]),_:1},8,["class"])):J("v-if",!0)],64)):J("v-if",!0),o(B)?(_(),oe(o(Se),{key:1,class:T([o(h).e("icon"),o(h).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:ct},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown"])):J("v-if",!0),o(A)?(_(),oe(o(Se),{key:2,class:T([o(h).e("icon"),o(h).e("password")]),onClick:Ye},{default:U(()=>[(_(),oe(Ge(o(K))))]),_:1},8,["class"])):J("v-if",!0),o(ne)?(_(),V("span",{key:3,class:T(o(h).e("count"))},[F("span",{class:T(o(h).e("count-inner"))},pe(o(j))+" / "+pe(ye.maxlength),3)],2)):J("v-if",!0),o(P)&&o(W)&&o(O)?(_(),oe(o(Se),{key:4,class:T([o(h).e("icon"),o(h).e("validateIcon"),o(h).is("loading",o(P)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(W))))]),_:1},8,["class"])):J("v-if",!0)],2)],2)):J("v-if",!0)],2),J(" append slot "),ye.$slots.append?(_(),V("div",{key:1,class:T(o(h).be("group","append"))},[G(ye.$slots,"append")],2)):J("v-if",!0)],64)):(_(),V(Oe,{key:1},[J(" textarea "),F("textarea",et({id:o(f),ref_key:"textarea",ref:b,class:[o(p).e("inner"),o(h).is("focus",o(M))]},o(s),{minlength:ye.minlength,maxlength:ye.maxlength,tabindex:ye.tabindex,disabled:o(v),readonly:ye.readonly,autocomplete:ye.autocomplete,style:o(L),"aria-label":ye.ariaLabel,placeholder:ye.placeholder,form:ye.form,autofocus:ye.autofocus,rows:ye.rows,role:ye.containerRole,onCompositionstart:o(Ie),onCompositionupdate:o(Ae),onCompositionend:o(xe),onInput:Be,onFocus:o(R),onBlur:o(N),onChange:te,onKeydown:ot}),null,16,["id","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role","onCompositionstart","onCompositionupdate","onCompositionend","onFocus","onBlur"]),o(ne)?(_(),V("span",{key:0,style:_e(w.value),class:T(o(h).e("count"))},pe(o(j))+" / "+pe(ye.maxlength),7)):J("v-if",!0)],64))],38))}});var pg=fe(vg,[["__file","input.vue"]]);const hn=He(pg),no=4,md={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},hg=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),Jr=Symbol("scrollbarContextKey"),mg=de({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),gg="Thumb",bg=x({__name:"thumb",props:mg,setup(e){const t=e,n=we(Jr),l=ue("scrollbar");n||jt(gg,"can not inject scrollbar context");const a=I(),s=I(),r=I({}),i=I(!1);let u=!1,c=!1,d=0,f=0,m=bt?document.onselectstart:null;const v=y(()=>md[t.vertical?"vertical":"horizontal"]),h=y(()=>hg({size:t.size,move:t.move,bar:v.value})),p=y(()=>a.value[v.value.offset]**2/n.wrapElement[v.value.scrollSize]/t.ratio/s.value[v.value.offset]),g=M=>{var R;if(M.stopPropagation(),M.ctrlKey||[1,2].includes(M.button))return;(R=window.getSelection())==null||R.removeAllRanges(),E(M);const N=M.currentTarget;N&&(r.value[v.value.axis]=N[v.value.offset]-(M[v.value.client]-N.getBoundingClientRect()[v.value.direction]))},b=M=>{if(!s.value||!a.value||!n.wrapElement)return;const R=Math.abs(M.target.getBoundingClientRect()[v.value.direction]-M[v.value.client]),N=s.value[v.value.offset]/2,O=(R-N)*100*p.value/a.value[v.value.offset];n.wrapElement[v.value.scroll]=O*n.wrapElement[v.value.scrollSize]/100},E=M=>{M.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",C),document.addEventListener("mouseup",w),m=document.onselectstart,document.onselectstart=()=>!1},C=M=>{if(!a.value||!s.value||u===!1)return;const R=r.value[v.value.axis];if(!R)return;const N=(a.value.getBoundingClientRect()[v.value.direction]-M[v.value.client])*-1,O=s.value[v.value.offset]-R,P=(N-O)*100*p.value/a.value[v.value.offset];v.value.scroll==="scrollLeft"?n.wrapElement[v.value.scroll]=P*f/100:n.wrapElement[v.value.scroll]=P*d/100},w=()=>{u=!1,r.value[v.value.axis]=0,document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",w),$(),c&&(i.value=!1)},k=()=>{c=!1,i.value=!!t.size},S=()=>{c=!0,i.value=u};Nt(()=>{$(),document.removeEventListener("mouseup",w)});const $=()=>{document.onselectstart!==m&&(document.onselectstart=m)};return xt(wt(n,"scrollbarElement"),"mousemove",k),xt(wt(n,"scrollbarElement"),"mouseleave",S),(M,R)=>(_(),oe(an,{name:o(l).b("fade"),persisted:""},{default:U(()=>[We(F("div",{ref_key:"instance",ref:a,class:T([o(l).e("bar"),o(l).is(o(v).key)]),onMousedown:b,onClick:Le(()=>{},["stop"])},[F("div",{ref_key:"thumb",ref:s,class:T(o(l).e("thumb")),style:_e(o(h)),onMousedown:g},null,38)],42,["onClick"]),[[mt,M.always||i.value]])]),_:1},8,["name"]))}});var hu=fe(bg,[["__file","thumb.vue"]]);const yg=de({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),Cg=x({__name:"bar",props:yg,setup(e,{expose:t}){const n=e,l=we(Jr),a=I(0),s=I(0),r=I(""),i=I(""),u=I(1),c=I(1);return t({handleScroll:m=>{if(m){const v=m.offsetHeight-no,h=m.offsetWidth-no;s.value=m.scrollTop*100/v*u.value,a.value=m.scrollLeft*100/h*c.value}},update:()=>{const m=l==null?void 0:l.wrapElement;if(!m)return;const v=m.offsetHeight-no,h=m.offsetWidth-no,p=v**2/m.scrollHeight,g=h**2/m.scrollWidth,b=Math.max(p,n.minSize),E=Math.max(g,n.minSize);u.value=p/(v-p)/(b/(v-b)),c.value=g/(h-g)/(E/(h-E)),i.value=b+no(_(),V(Oe,null,[H(hu,{move:a.value,ratio:c.value,size:r.value,always:m.always},null,8,["move","ratio","size","always"]),H(hu,{move:s.value,ratio:u.value,size:i.value,vertical:"",always:m.always},null,8,["move","ratio","size","always"])],64))}});var wg=fe(Cg,[["__file","bar.vue"]]);const kg=de({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:Y([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},tabindex:{type:[String,Number],default:void 0},id:String,role:String,...cn(["ariaLabel","ariaOrientation"])}),gd={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Te)},Sg="ElScrollbar",Eg=x({name:Sg}),_g=x({...Eg,props:kg,emits:gd,setup(e,{expose:t,emit:n}){const l=e,a=ue("scrollbar");let s,r,i=0,u=0,c="";const d=I(),f=I(),m=I(),v=I(),h=y(()=>{const S={};return l.height&&(S.height=zt(l.height)),l.maxHeight&&(S.maxHeight=zt(l.maxHeight)),[l.wrapStyle,S]}),p=y(()=>[l.wrapClass,a.e("wrap"),{[a.em("wrap","hidden-default")]:!l.native}]),g=y(()=>[a.e("view"),l.viewClass]),b=()=>{var S;if(f.value){(S=v.value)==null||S.handleScroll(f.value);const $=i,M=u;i=f.value.scrollTop,u=f.value.scrollLeft;const R={bottom:i+f.value.clientHeight>=f.value.scrollHeight,top:i<=0&&$!==0,right:u+f.value.clientWidth>=f.value.scrollWidth&&M!==u,left:u<=0&&M!==0};$!==i&&(c=i>$?"bottom":"top"),M!==u&&(c=u>M?"right":"left"),n("scroll",{scrollTop:i,scrollLeft:u}),R[c]&&n("end-reached",c)}};function E(S,$){yt(S)?f.value.scrollTo(S):Te(S)&&Te($)&&f.value.scrollTo(S,$)}const C=S=>{Te(S)&&(f.value.scrollTop=S)},w=S=>{Te(S)&&(f.value.scrollLeft=S)},k=()=>{var S;(S=v.value)==null||S.update()};return ie(()=>l.noresize,S=>{S?(s==null||s(),r==null||r()):({stop:s}=Ft(m,k),r=xt("resize",k))},{immediate:!0}),ie(()=>[l.maxHeight,l.height],()=>{l.native||Ee(()=>{var S;k(),f.value&&((S=v.value)==null||S.handleScroll(f.value))})}),rt(Jr,kt({scrollbarElement:d,wrapElement:f})),Fr(()=>{f.value&&(f.value.scrollTop=i,f.value.scrollLeft=u)}),Xe(()=>{l.native||Ee(()=>{k()})}),hl(()=>k()),t({wrapRef:f,update:k,scrollTo:E,setScrollTop:C,setScrollLeft:w,handleScroll:b}),(S,$)=>(_(),V("div",{ref_key:"scrollbarRef",ref:d,class:T(o(a).b())},[F("div",{ref_key:"wrapRef",ref:f,class:T(o(p)),style:_e(o(h)),tabindex:S.tabindex,onScroll:b},[(_(),oe(Ge(S.tag),{id:S.id,ref_key:"resizeRef",ref:m,class:T(o(g)),style:_e(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:U(()=>[G(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,["tabindex"]),S.native?J("v-if",!0):(_(),oe(wg,{key:0,ref_key:"barRef",ref:v,always:S.always,"min-size":S.minSize},null,8,["always","min-size"]))],2))}});var Tg=fe(_g,[["__file","scrollbar.vue"]]);const jn=He(Tg),Qr=Symbol("popper"),bd=Symbol("popperContent"),yd=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],Cd=de({role:{type:String,values:yd,default:"tooltip"}}),$g=x({name:"ElPopper",inheritAttrs:!1}),Ng=x({...$g,props:Cd,setup(e,{expose:t}){const n=e,l=I(),a=I(),s=I(),r=I(),i=y(()=>n.role),u={triggerRef:l,popperInstanceRef:a,contentRef:s,referenceRef:r,role:i};return t(u),rt(Qr,u),(c,d)=>G(c.$slots,"default")}});var Ig=fe(Ng,[["__file","popper.vue"]]);const Mg=x({name:"ElPopperArrow",inheritAttrs:!1}),Rg=x({...Mg,setup(e,{expose:t}){const n=ue("popper"),{arrowRef:l,arrowStyle:a}=we(bd,void 0);return Nt(()=>{l.value=void 0}),t({arrowRef:l}),(s,r)=>(_(),V("span",{ref_key:"arrowRef",ref:l,class:T(o(n).e("arrow")),style:_e(o(a)),"data-popper-arrow":""},null,6))}});var Pg=fe(Rg,[["__file","arrow.vue"]]);const wd=de({virtualRef:{type:Y(Object)},virtualTriggering:Boolean,onMouseenter:{type:Y(Function)},onMouseleave:{type:Y(Function)},onClick:{type:Y(Function)},onKeydown:{type:Y(Function)},onFocus:{type:Y(Function)},onBlur:{type:Y(Function)},onContextmenu:{type:Y(Function)},id:String,open:Boolean}),kd=Symbol("elForwardRef"),Og=e=>{rt(kd,{setForwardRef:n=>{e.value=n}})},Lg=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),Bg="ElOnlyChild",Sd=x({name:Bg,setup(e,{slots:t,attrs:n}){var l;const a=we(kd),s=Lg((l=a==null?void 0:a.setForwardRef)!=null?l:Bt);return()=>{var r;const i=(r=t.default)==null?void 0:r.call(t,n);if(!i||i.length>1)return null;const u=Ed(i);return u?We(Np(u,n),[[s]]):null}}});function Ed(e){if(!e)return null;const t=e;for(const n of t){if(yt(n))switch(n.type){case jl:continue;case Nc:case"svg":return mu(n);case Oe:return Ed(n.children);default:return n}return mu(n)}return null}function mu(e){const t=ue("only-child");return H("span",{class:t.e("content")},[e])}const Vg=x({name:"ElPopperTrigger",inheritAttrs:!1}),Dg=x({...Vg,props:wd,setup(e,{expose:t}){const n=e,{role:l,triggerRef:a}=we(Qr,void 0);Og(a);const s=y(()=>i.value?n.id:void 0),r=y(()=>{if(l&&l.value==="tooltip")return n.open&&n.id?n.id:void 0}),i=y(()=>{if(l&&l.value!=="tooltip")return l.value}),u=y(()=>i.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return Xe(()=>{ie(()=>n.virtualRef,f=>{f&&(a.value=ua(f))},{immediate:!0}),ie(a,(f,m)=>{c==null||c(),c=void 0,_n(f)&&(d.forEach(v=>{var h;const p=n[v];p&&(f.addEventListener(v.slice(2).toLowerCase(),p),(h=m==null?void 0:m.removeEventListener)==null||h.call(m,v.slice(2).toLowerCase(),p))}),Xo(f)&&(c=ie([s,r,i,u],v=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((h,p)=>{qt(v[p])?f.removeAttribute(h):f.setAttribute(h,v[p])})},{immediate:!0}))),_n(m)&&Xo(m)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(v=>m.removeAttribute(v))},{immediate:!0})}),Nt(()=>{if(c==null||c(),c=void 0,a.value&&_n(a.value)){const f=a.value;d.forEach(m=>{const v=n[m];v&&f.removeEventListener(m.slice(2).toLowerCase(),v)}),a.value=void 0}}),t({triggerRef:a}),(f,m)=>f.virtualTriggering?J("v-if",!0):(_(),oe(o(Sd),et({key:0},f.$attrs,{"aria-controls":o(s),"aria-describedby":o(r),"aria-expanded":o(u),"aria-haspopup":o(i)}),{default:U(()=>[G(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var Ag=fe(Dg,[["__file","trigger.vue"]]);const As="focus-trap.focus-after-trapped",Fs="focus-trap.focus-after-released",Fg="focus-trap.focusout-prevented",gu={cancelable:!0,bubbles:!1},xg={cancelable:!0,bubbles:!1},bu="focusAfterTrapped",yu="focusAfterReleased",ei=Symbol("elFocusTrap"),ti=I(),ys=I(0),ni=I(0);let Sa=0;const _d=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:l=>{const a=l.tagName==="INPUT"&&l.type==="hidden";return l.disabled||l.hidden||a?NodeFilter.FILTER_SKIP:l.tabIndex>=0||l===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},Cu=(e,t)=>{for(const n of e)if(!zg(n,t))return n},zg=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},Hg=e=>{const t=_d(e),n=Cu(t,e),l=Cu(t.reverse(),e);return[n,l]},Kg=e=>e instanceof HTMLInputElement&&"select"in e,al=(e,t)=>{if(e&&e.focus){const n=document.activeElement;let l=!1;_n(e)&&!Xo(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),l=!0),e.focus({preventScroll:!0}),ni.value=window.performance.now(),e!==n&&Kg(e)&&t&&e.select(),_n(e)&&l&&e.removeAttribute("tabindex")}};function wu(e,t){const n=[...e],l=e.indexOf(t);return l!==-1&&n.splice(l,1),n}const Wg=()=>{let e=[];return{push:l=>{const a=e[0];a&&l!==a&&a.pause(),e=wu(e,l),e.unshift(l)},remove:l=>{var a,s;e=wu(e,l),(s=(a=e[0])==null?void 0:a.resume)==null||s.call(a)}}},jg=(e,t=!1)=>{const n=document.activeElement;for(const l of e)if(al(l,t),document.activeElement!==n)return},ku=Wg(),Ug=()=>ys.value>ni.value,Ea=()=>{ti.value="pointer",ys.value=window.performance.now()},Su=()=>{ti.value="keyboard",ys.value=window.performance.now()},Yg=()=>(Xe(()=>{Sa===0&&(document.addEventListener("mousedown",Ea),document.addEventListener("touchstart",Ea),document.addEventListener("keydown",Su)),Sa++}),Nt(()=>{Sa--,Sa<=0&&(document.removeEventListener("mousedown",Ea),document.removeEventListener("touchstart",Ea),document.removeEventListener("keydown",Su))}),{focusReason:ti,lastUserFocusTimestamp:ys,lastAutomatedFocusTimestamp:ni}),_a=e=>new CustomEvent(Fg,{...xg,detail:e}),Ce={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"};let io=[];const Eu=e=>{e.code===Ce.esc&&io.forEach(t=>t(e))},qg=e=>{Xe(()=>{io.length===0&&document.addEventListener("keydown",Eu),bt&&io.push(e)}),Nt(()=>{io=io.filter(t=>t!==e),io.length===0&&bt&&document.removeEventListener("keydown",Eu)})},Gg=x({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[bu,yu,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=I();let l,a;const{focusReason:s}=Yg();qg(h=>{e.trapped&&!r.paused&&t("release-requested",h)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},i=h=>{if(!e.loop&&!e.trapped||r.paused)return;const{code:p,altKey:g,ctrlKey:b,metaKey:E,currentTarget:C,shiftKey:w}=h,{loop:k}=e,S=p===Ce.tab&&!g&&!b&&!E,$=document.activeElement;if(S&&$){const M=C,[R,N]=Hg(M);if(R&&N){if(!w&&$===N){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(R,!0))}else if(w&&[R,M].includes($)){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||(h.preventDefault(),k&&al(N,!0))}}else if($===M){const P=_a({focusReason:s.value});t("focusout-prevented",P),P.defaultPrevented||h.preventDefault()}}};rt(ei,{focusTrapRef:n,onKeydown:i}),ie(()=>e.focusTrapEl,h=>{h&&(n.value=h)},{immediate:!0}),ie([n],([h],[p])=>{h&&(h.addEventListener("keydown",i),h.addEventListener("focusin",d),h.addEventListener("focusout",f)),p&&(p.removeEventListener("keydown",i),p.removeEventListener("focusin",d),p.removeEventListener("focusout",f))});const u=h=>{t(bu,h)},c=h=>t(yu,h),d=h=>{const p=o(n);if(!p)return;const g=h.target,b=h.relatedTarget,E=g&&p.contains(g);e.trapped||b&&p.contains(b)||(l=b),E&&t("focusin",h),!r.paused&&e.trapped&&(E?a=g:al(a,!0))},f=h=>{const p=o(n);if(!(r.paused||!p))if(e.trapped){const g=h.relatedTarget;!qt(g)&&!p.contains(g)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=_a({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||al(a,!0)}},0)}else{const g=h.target;g&&p.contains(g)||t("focusout",h)}};async function m(){await Ee();const h=o(n);if(h){ku.push(r);const p=h.contains(document.activeElement)?l:document.activeElement;if(l=p,!h.contains(p)){const b=new Event(As,gu);h.addEventListener(As,u),h.dispatchEvent(b),b.defaultPrevented||Ee(()=>{let E=e.focusStartEl;Ve(E)||(al(E),document.activeElement!==E&&(E="first")),E==="first"&&jg(_d(h),!0),(document.activeElement===p||E==="container")&&al(h)})}}}function v(){const h=o(n);if(h){h.removeEventListener(As,u);const p=new CustomEvent(Fs,{...gu,detail:{focusReason:s.value}});h.addEventListener(Fs,c),h.dispatchEvent(p),!p.defaultPrevented&&(s.value=="keyboard"||!Ug()||h.contains(document.activeElement))&&al(l??document.body),h.removeEventListener(Fs,c),ku.remove(r)}}return Xe(()=>{e.trapped&&m(),ie(()=>e.trapped,h=>{h?m():v()})}),Nt(()=>{e.trapped&&v(),n.value&&(n.value.removeEventListener("keydown",i),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0)}),{onKeydown:i}}});function Xg(e,t,n,l,a,s){return G(e.$slots,"default",{handleKeydown:e.onKeydown})}var Ro=fe(Gg,[["render",Xg],["__file","focus-trap.vue"]]);const Td=de({arrowOffset:{type:Number,default:5}}),Zg=["fixed","absolute"],Jg=de({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Y(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Xl,default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},strategy:{type:String,values:Zg,default:"absolute"}}),$d=de({...Jg,...Td,id:String,style:{type:Y([String,Array,Object])},className:{type:Y([String,Array,Object])},effect:{type:Y(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:Y([String,Array,Object])},popperStyle:{type:Y([String,Array,Object])},referenceEl:{type:Y(Object)},triggerTargetEl:{type:Y(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...cn(["ariaLabel"])}),Qg={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},eb=(e,t)=>{const n=I(!1),l=I();return{focusStartRef:l,trapped:n,onFocusAfterReleased:c=>{var d;((d=c.detail)==null?void 0:d.focusReason)!=="pointer"&&(l.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:c=>{e.visible&&!n.value&&(c.target&&(l.value=c.target),n.value=!0)},onFocusoutPrevented:c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},onReleaseRequested:()=>{n.value=!1,t("close")}}},tb=(e,t=[])=>{const{placement:n,strategy:l,popperOptions:a}=e,s={placement:n,strategy:l,...a,modifiers:[...lb(e),...t]};return ob(s,a==null?void 0:a.modifiers),s},nb=e=>{if(bt)return ua(e)};function lb(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:l}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:l}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function ob(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const ab=(e,t,n={})=>{const l={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=sb(u);Object.assign(r.value,c)},requires:["computeStyles"]},a=y(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=o(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],l,{name:"applyStyles",enabled:!1}]}}),s=Lt(),r=I({styles:{popper:{position:o(a).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),i=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return ie(a,u=>{const c=o(s);c&&c.setOptions(u)},{deep:!0}),ie([e,t],([u,c])=>{i(),!(!u||!c)&&(s.value=Up(u,c,o(a)))}),Nt(()=>{i()}),{state:y(()=>{var u;return{...((u=o(s))==null?void 0:u.state)||{}}}),styles:y(()=>o(r).styles),attributes:y(()=>o(r).attributes),update:()=>{var u;return(u=o(s))==null?void 0:u.update()},forceUpdate:()=>{var u;return(u=o(s))==null?void 0:u.forceUpdate()},instanceRef:y(()=>o(s))}};function sb(e){const t=Object.keys(e.elements),n=qo(t.map(a=>[a,e.styles[a]||{}])),l=qo(t.map(a=>[a,e.attributes[a]]));return{styles:n,attributes:l}}const rb=0,ib=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:l,role:a}=we(Qr,void 0),s=I(),r=y(()=>e.arrowOffset),i=y(()=>({name:"eventListeners",enabled:!!e.visible})),u=y(()=>{var b;const E=o(s),C=(b=o(r))!=null?b:rb;return{name:"arrow",enabled:!Yp(E),options:{element:E,padding:C}}}),c=y(()=>({onFirstUpdate:()=>{h()},...tb(e,[o(u),o(i)])})),d=y(()=>nb(e.referenceEl)||o(l)),{attributes:f,state:m,styles:v,update:h,forceUpdate:p,instanceRef:g}=ab(d,n,c);return ie(g,b=>t.value=b,{flush:"sync"}),Xe(()=>{ie(()=>{var b;return(b=o(d))==null?void 0:b.getBoundingClientRect()},()=>{h()})}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:g,state:m,styles:v,role:a,forceUpdate:p,update:h}},ub=(e,{attributes:t,styles:n,role:l})=>{const{nextZIndex:a}=Mo(),s=ue("popper"),r=y(()=>o(t).popper),i=I(Te(e.zIndex)?e.zIndex:a()),u=y(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=y(()=>[{zIndex:o(i)},o(n).popper,e.popperStyle||{}]),d=y(()=>l.value==="dialog"?"false":void 0),f=y(()=>o(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:i,updateZIndex:()=>{i.value=Te(e.zIndex)?e.zIndex:a()}}},cb=x({name:"ElPopperContent"}),db=x({...cb,props:$d,emits:Qg,setup(e,{expose:t,emit:n}){const l=e,{focusStartRef:a,trapped:s,onFocusAfterReleased:r,onFocusAfterTrapped:i,onFocusInTrap:u,onFocusoutPrevented:c,onReleaseRequested:d}=eb(l,n),{attributes:f,arrowRef:m,contentRef:v,styles:h,instanceRef:p,role:g,update:b}=ib(l),{ariaModal:E,arrowStyle:C,contentAttrs:w,contentClass:k,contentStyle:S,updateZIndex:$}=ub(l,{styles:h,attributes:f,role:g}),M=we(el,void 0);rt(bd,{arrowStyle:C,arrowRef:m}),M&&rt(el,{...M,addInputId:Bt,removeInputId:Bt});let R;const N=(P=!0)=>{b(),P&&$()},O=()=>{N(!1),l.visible&&l.focusOnShow?s.value=!0:l.visible===!1&&(s.value=!1)};return Xe(()=>{ie(()=>l.triggerTargetEl,(P,W)=>{R==null||R(),R=void 0;const K=o(P||v.value),D=o(W||v.value);_n(K)&&(R=ie([g,()=>l.ariaLabel,E,()=>l.id],L=>{["role","aria-label","aria-modal","id"].forEach((z,B)=>{qt(L[B])?K.removeAttribute(z):K.setAttribute(z,L[B])})},{immediate:!0})),D!==K&&_n(D)&&["role","aria-label","aria-modal","id"].forEach(L=>{D.removeAttribute(L)})},{immediate:!0}),ie(()=>l.visible,O,{immediate:!0})}),Nt(()=>{R==null||R(),R=void 0}),t({popperContentRef:v,popperInstanceRef:p,updatePopper:N,contentStyle:S}),(P,W)=>(_(),V("div",et({ref_key:"contentRef",ref:v},o(w),{style:o(S),class:o(k),tabindex:"-1",onMouseenter:K=>P.$emit("mouseenter",K),onMouseleave:K=>P.$emit("mouseleave",K)}),[H(o(Ro),{trapped:o(s),"trap-on-focus-in":!0,"focus-trap-el":o(v),"focus-start-el":o(a),onFocusAfterTrapped:o(i),onFocusAfterReleased:o(r),onFocusin:o(u),onFocusoutPrevented:o(c),onReleaseRequested:o(d)},{default:U(()=>[G(P.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16,["onMouseenter","onMouseleave"]))}});var fb=fe(db,[["__file","content.vue"]]);const Nd=He(Ig),Cs=Symbol("elTooltip"),ws=de({to:{type:Y([String,Object]),required:!0},disabled:Boolean}),Wt=de({...ad,...$d,appendTo:{type:ws.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:Y(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...cn(["ariaLabel"])}),mo=de({...wd,disabled:Boolean,trigger:{type:Y([String,Array]),default:"hover"},triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space]}}),vb=Un({type:Y(Boolean),default:null}),pb=Un({type:Y(Function)}),hb=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,l=[t],a={[e]:vb,[n]:pb};return{useModelToggle:({indicator:r,toggleReason:i,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const m=lt(),{emit:v}=m,h=m.props,p=y(()=>Qe(h[n])),g=y(()=>h[e]===null),b=$=>{r.value!==!0&&(r.value=!0,i&&(i.value=$),Qe(d)&&d($))},E=$=>{r.value!==!1&&(r.value=!1,i&&(i.value=$),Qe(f)&&f($))},C=$=>{if(h.disabled===!0||Qe(c)&&!c())return;const M=p.value&&bt;M&&v(t,!0),(g.value||!M)&&b($)},w=$=>{if(h.disabled===!0||!bt)return;const M=p.value&&bt;M&&v(t,!1),(g.value||!M)&&E($)},k=$=>{_t($)&&(h.disabled&&$?p.value&&v(t,!1):r.value!==$&&($?b():E()))},S=()=>{r.value?w():C()};return ie(()=>h[e],k),u&&m.appContext.config.globalProperties.$route!==void 0&&ie(()=>({...m.proxy.$route}),()=>{u.value&&r.value&&w()}),Xe(()=>{k(h[e])}),{hide:w,show:C,toggle:S,hasUpdateHandler:p}},useModelToggleProps:a,useModelToggleEmits:l}},{useModelToggleProps:mb,useModelToggleEmits:gb,useModelToggle:bb}=hb("visible"),yb=de({...Cd,...mb,...Wt,...mo,...Td,showArrow:{type:Boolean,default:!0}}),Cb=[...gb,"before-show","before-hide","show","hide","open","close"],wb=(e,t)=>ke(e)?e.includes(t):e===t,lo=(e,t,n)=>l=>{wb(o(e),t)&&n(l)},Ht=(e,t,{checkForDefaultPrevented:n=!0}={})=>a=>{const s=e==null?void 0:e(a);if(n===!1||!s)return t==null?void 0:t(a)},_u=e=>t=>t.pointerType==="mouse"?e(t):void 0,kb=x({name:"ElTooltipTrigger"}),Sb=x({...kb,props:mo,setup(e,{expose:t}){const n=e,l=ue("tooltip"),{controlled:a,id:s,open:r,onOpen:i,onClose:u,onToggle:c}=we(Cs,void 0),d=I(null),f=()=>{if(o(a)||n.disabled)return!0},m=wt(n,"trigger"),v=Ht(f,lo(m,"hover",i)),h=Ht(f,lo(m,"hover",u)),p=Ht(f,lo(m,"click",w=>{w.button===0&&c(w)})),g=Ht(f,lo(m,"focus",i)),b=Ht(f,lo(m,"focus",u)),E=Ht(f,lo(m,"contextmenu",w=>{w.preventDefault(),c(w)})),C=Ht(f,w=>{const{code:k}=w;n.triggerKeys.includes(k)&&(w.preventDefault(),c(w))});return t({triggerRef:d}),(w,k)=>(_(),oe(o(Ag),{id:o(s),"virtual-ref":w.virtualRef,open:o(r),"virtual-triggering":w.virtualTriggering,class:T(o(l).e("trigger")),onBlur:o(b),onClick:o(p),onContextmenu:o(E),onFocus:o(g),onMouseenter:o(v),onMouseleave:o(h),onKeydown:o(C)},{default:U(()=>[G(w.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Eb=fe(Sb,[["__file","trigger.vue"]]);const _b=x({__name:"teleport",props:ws,setup(e){return(t,n)=>t.disabled?G(t.$slots,"default",{key:0}):(_(),oe(Ip,{key:1,to:t.to},[G(t.$slots,"default")],8,["to"]))}});var Tb=fe(_b,[["__file","teleport.vue"]]);const Po=He(Tb),Id=()=>{const e=Kr(),t=Zr(),n=y(()=>`${e.value}-popper-container-${t.prefix}`),l=y(()=>`#${n.value}`);return{id:n,selector:l}},$b=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},Nb=()=>{const{id:e,selector:t}=Id();return xr(()=>{bt&&(document.body.querySelector(t.value)||$b(e.value))}),{id:e,selector:t}},Ib=x({name:"ElTooltipContent",inheritAttrs:!1}),Mb=x({...Ib,props:Wt,setup(e,{expose:t}){const n=e,{selector:l}=Id(),a=ue("tooltip"),s=I(),r=Ha(()=>{var B;return(B=s.value)==null?void 0:B.popperContentRef});let i;const{controlled:u,id:c,open:d,trigger:f,onClose:m,onOpen:v,onShow:h,onHide:p,onBeforeShow:g,onBeforeHide:b}=we(Cs,void 0),E=y(()=>n.transition||`${a.namespace.value}-fade-in-linear`),C=y(()=>n.persistent);Nt(()=>{i==null||i()});const w=y(()=>o(C)?!0:o(d)),k=y(()=>n.disabled?!1:o(d)),S=y(()=>n.appendTo||l.value),$=y(()=>{var B;return(B=n.style)!=null?B:{}}),M=I(!0),R=()=>{p(),z()&&al(document.body),M.value=!0},N=()=>{if(o(u))return!0},O=Ht(N,()=>{n.enterable&&o(f)==="hover"&&v()}),P=Ht(N,()=>{o(f)==="hover"&&m()}),W=()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B),g==null||g()},K=()=>{b==null||b()},D=()=>{h()},L=()=>{n.virtualTriggering||m()},z=B=>{var A;const ne=(A=s.value)==null?void 0:A.popperContentRef,j=(B==null?void 0:B.relatedTarget)||document.activeElement;return ne==null?void 0:ne.contains(j)};return ie(()=>o(d),B=>{B?(M.value=!1,i=zr(r,()=>{if(o(u))return;o(f)!=="hover"&&m()})):i==null||i()},{flush:"post"}),ie(()=>n.content,()=>{var B,A;(A=(B=s.value)==null?void 0:B.updatePopper)==null||A.call(B)}),t({contentRef:s,isFocusInsideContent:z}),(B,A)=>(_(),oe(o(Po),{disabled:!B.teleported,to:o(S)},{default:U(()=>[H(an,{name:o(E),onAfterLeave:R,onBeforeEnter:W,onAfterEnter:D,onBeforeLeave:K},{default:U(()=>[o(w)?We((_(),oe(o(fb),et({key:0,id:o(c),ref_key:"contentRef",ref:s},B.$attrs,{"aria-label":B.ariaLabel,"aria-hidden":M.value,"boundaries-padding":B.boundariesPadding,"fallback-placements":B.fallbackPlacements,"gpu-acceleration":B.gpuAcceleration,offset:B.offset,placement:B.placement,"popper-options":B.popperOptions,"arrow-offset":B.arrowOffset,strategy:B.strategy,effect:B.effect,enterable:B.enterable,pure:B.pure,"popper-class":B.popperClass,"popper-style":[B.popperStyle,o($)],"reference-el":B.referenceEl,"trigger-target-el":B.triggerTargetEl,visible:o(k),"z-index":B.zIndex,onMouseenter:o(O),onMouseleave:o(P),onBlur:L,onClose:o(m)}),{default:U(()=>[G(B.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[mt,o(k)]]):J("v-if",!0)]),_:3},8,["name"])]),_:3},8,["disabled","to"]))}});var Rb=fe(Mb,[["__file","content.vue"]]);const Pb=x({name:"ElTooltip"}),Ob=x({...Pb,props:yb,emits:Cb,setup(e,{expose:t,emit:n}){const l=e;Nb();const a=ue("tooltip"),s=sn(),r=I(),i=I(),u=()=>{var C;const w=o(r);w&&((C=w.popperInstanceRef)==null||C.update())},c=I(!1),d=I(),{show:f,hide:m,hasUpdateHandler:v}=bb({indicator:c,toggleReason:d}),{onOpen:h,onClose:p}=sd({showAfter:wt(l,"showAfter"),hideAfter:wt(l,"hideAfter"),autoClose:wt(l,"autoClose"),open:f,close:m}),g=y(()=>_t(l.visible)&&!v.value),b=y(()=>[a.b(),l.popperClass]);rt(Cs,{controlled:g,id:s,open:Ic(c),trigger:wt(l,"trigger"),onOpen:C=>{h(C)},onClose:C=>{p(C)},onToggle:C=>{o(c)?p(C):h(C)},onShow:()=>{n("show",d.value)},onHide:()=>{n("hide",d.value)},onBeforeShow:()=>{n("before-show",d.value)},onBeforeHide:()=>{n("before-hide",d.value)},updatePopper:u}),ie(()=>l.disabled,C=>{C&&c.value&&(c.value=!1)});const E=C=>{var w;return(w=i.value)==null?void 0:w.isFocusInsideContent(C)};return Mp(()=>c.value&&m()),t({popperRef:r,contentRef:i,isFocusInsideContent:E,updatePopper:u,onOpen:h,onClose:p,hide:m}),(C,w)=>(_(),oe(o(Nd),{ref_key:"popperRef",ref:r,role:C.role},{default:U(()=>[H(Eb,{disabled:C.disabled,trigger:C.trigger,"trigger-keys":C.triggerKeys,"virtual-ref":C.virtualRef,"virtual-triggering":C.virtualTriggering},{default:U(()=>[C.$slots.default?G(C.$slots,"default",{key:0}):J("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),H(Rb,{ref_key:"contentRef",ref:i,"aria-label":C.ariaLabel,"boundaries-padding":C.boundariesPadding,content:C.content,disabled:C.disabled,effect:C.effect,enterable:C.enterable,"fallback-placements":C.fallbackPlacements,"hide-after":C.hideAfter,"gpu-acceleration":C.gpuAcceleration,offset:C.offset,persistent:C.persistent,"popper-class":o(b),"popper-style":C.popperStyle,placement:C.placement,"popper-options":C.popperOptions,"arrow-offset":C.arrowOffset,pure:C.pure,"raw-content":C.rawContent,"reference-el":C.referenceEl,"trigger-target-el":C.triggerTargetEl,"show-after":C.showAfter,strategy:C.strategy,teleported:C.teleported,transition:C.transition,"virtual-triggering":C.virtualTriggering,"z-index":C.zIndex,"append-to":C.appendTo},{default:U(()=>[G(C.$slots,"content",{},()=>[C.rawContent?(_(),V("span",{key:0,innerHTML:C.content},null,8,["innerHTML"])):(_(),V("span",{key:1},pe(C.content),1))]),C.showArrow?(_(),oe(o(Pg),{key:0})):J("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lb=fe(Ob,[["__file","tooltip.vue"]]);const un=He(Lb),Bb=de({...pa,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:Y(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:Y([Function,Array]),default:Bt},popperClass:{type:String,default:""},triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:Wt.teleported,appendTo:Wt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean}),Vb={[De]:e=>Ve(e),[Zt]:e=>Ve(e),[nt]:e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>yt(e)},Md="ElAutocomplete",Db=x({name:Md,inheritAttrs:!1}),Ab=x({...Db,props:Bb,emits:Vb,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>An(l,Object.keys(pa))),s=pl(),r=fn(),i=ue("autocomplete"),u=I(),c=I(),d=I(),f=I();let m=!1,v=!1;const h=I([]),p=I(-1),g=I(""),b=I(!1),E=I(!1),C=I(!1),w=sn(),k=y(()=>s.style),S=y(()=>(h.value.length>0||C.value)&&b.value),$=y(()=>!l.hideLoading&&C.value),M=y(()=>u.value?Array.from(u.value.$el.querySelectorAll("input")):[]),R=()=>{S.value&&(g.value=`${u.value.$el.offsetWidth}px`)},N=()=>{p.value=-1},O=async le=>{if(E.value)return;const se=ge=>{C.value=!1,!E.value&&(ke(ge)?(h.value=ge,p.value=l.highlightFirstItem?0:-1):jt(Md,"autocomplete suggestions must be an array"))};if(C.value=!0,ke(l.fetchSuggestions))se(l.fetchSuggestions);else{const ge=await l.fetchSuggestions(le,se);ke(ge)&&se(ge)}},P=Ln(O,l.debounce),W=le=>{const se=!!le;if(n(Zt,le),n(De,le),E.value=!1,b.value||(b.value=se),!l.triggerOnFocus&&!le){E.value=!0,h.value=[];return}P(le)},K=le=>{var se;r.value||(((se=le.target)==null?void 0:se.tagName)!=="INPUT"||M.value.includes(document.activeElement))&&(b.value=!0)},D=le=>{n(nt,le)},L=le=>{var se;if(v)v=!1;else{b.value=!0,n("focus",le);const ge=(se=l.modelValue)!=null?se:"";l.triggerOnFocus&&!m&&P(String(ge))}},z=le=>{setTimeout(()=>{var se;if((se=d.value)!=null&&se.isFocusInsideContent()){v=!0;return}b.value&&j(),n("blur",le)})},B=()=>{b.value=!1,n(De,""),n("clear")},A=async()=>{S.value&&p.value>=0&&p.value{S.value&&(le.preventDefault(),le.stopPropagation(),j())},j=()=>{b.value=!1},Q=()=>{var le;(le=u.value)==null||le.focus()},Z=()=>{var le;(le=u.value)==null||le.blur()},ee=async le=>{n(Zt,le[l.valueKey]),n(De,le[l.valueKey]),n("select",le),h.value=[],p.value=-1},ae=le=>{if(!S.value||C.value)return;if(le<0){p.value=-1;return}le>=h.value.length&&(le=h.value.length-1);const se=c.value.querySelector(`.${i.be("suggestion","wrap")}`),Be=se.querySelectorAll(`.${i.be("suggestion","list")} li`)[le],te=se.scrollTop,{offsetTop:ce,scrollHeight:Ie}=Be;ce+Ie>te+se.clientHeight&&(se.scrollTop+=Ie),ce{var le;(le=d.value)!=null&&le.isFocusInsideContent()||S.value&&j()});return Nt(()=>{re==null||re()}),Xe(()=>{u.value.ref.setAttribute("role","textbox"),u.value.ref.setAttribute("aria-autocomplete","list"),u.value.ref.setAttribute("aria-controls","id"),u.value.ref.setAttribute("aria-activedescendant",`${w.value}-item-${p.value}`),m=u.value.ref.hasAttribute("readonly")}),t({highlightedIndex:p,activated:b,loading:C,inputRef:u,popperRef:d,suggestions:h,handleSelect:ee,handleKeyEnter:A,focus:Q,blur:Z,close:j,highlight:ae,getData:O}),(le,se)=>(_(),oe(o(un),{ref_key:"popperRef",ref:d,visible:o(S),placement:le.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[o(i).e("popper"),le.popperClass],teleported:le.teleported,"append-to":le.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${o(i).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:R,onHide:N},{content:U(()=>[F("div",{ref_key:"regionRef",ref:c,class:T([o(i).b("suggestion"),o(i).is("loading",o($))]),style:_e({[le.fitInputWidth?"width":"minWidth"]:g.value,outline:"none"}),role:"region"},[H(o(jn),{id:o(w),tag:"ul","wrap-class":o(i).be("suggestion","wrap"),"view-class":o(i).be("suggestion","list"),role:"listbox"},{default:U(()=>[o($)?(_(),V("li",{key:0},[G(le.$slots,"loading",{},()=>[H(o(Se),{class:T(o(i).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])])])):(_(!0),V(Oe,{key:1},ut(h.value,(ge,Be)=>(_(),V("li",{id:`${o(w)}-item-${Be}`,key:Be,class:T({highlighted:p.value===Be}),role:"option","aria-selected":p.value===Be,onClick:te=>ee(ge)},[G(le.$slots,"default",{item:ge},()=>[st(pe(ge[le.valueKey]),1)])],10,["id","aria-selected","onClick"]))),128))]),_:3},8,["id","wrap-class","view-class"])],6)]),default:U(()=>[F("div",{ref_key:"listboxRef",ref:f,class:T([o(i).b(),le.$attrs.class]),style:_e(o(k)),role:"combobox","aria-haspopup":"listbox","aria-expanded":o(S),"aria-owns":o(w)},[H(o(hn),et({ref_key:"inputRef",ref:u},et(o(a),le.$attrs),{"model-value":le.modelValue,disabled:o(r),onInput:W,onChange:D,onFocus:L,onBlur:z,onClear:B,onKeydown:[Tt(Le(ge=>ae(p.value-1),["prevent"]),["up"]),Tt(Le(ge=>ae(p.value+1),["prevent"]),["down"]),Tt(A,["enter"]),Tt(j,["tab"]),Tt(ne,["esc"])],onMousedown:K}),Mn({_:2},[le.$slots.prepend?{name:"prepend",fn:U(()=>[G(le.$slots,"prepend")])}:void 0,le.$slots.append?{name:"append",fn:U(()=>[G(le.$slots,"append")])}:void 0,le.$slots.prefix?{name:"prefix",fn:U(()=>[G(le.$slots,"prefix")])}:void 0,le.$slots.suffix?{name:"suffix",fn:U(()=>[G(le.$slots,"suffix")])}:void 0]),1040,["model-value","disabled","onKeydown"])],14,["aria-expanded","aria-owns"])]),_:3},8,["visible","placement","popper-class","teleported","append-to","transition"]))}});var Fb=fe(Ab,[["__file","autocomplete.vue"]]);const xb=He(Fb),zb=de({size:{type:[Number,String],values:tl,default:"",validator:e=>Te(e)},shape:{type:String,values:["circle","square"],default:"circle"},icon:{type:$t},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:Y(String),default:"cover"}}),Hb={error:e=>e instanceof Event},Kb=x({name:"ElAvatar"}),Wb=x({...Kb,props:zb,emits:Hb,setup(e,{emit:t}){const n=e,l=ue("avatar"),a=I(!1),s=y(()=>{const{size:c,icon:d,shape:f}=n,m=[l.b()];return Ve(c)&&m.push(l.m(c)),d&&m.push(l.m("icon")),f&&m.push(l.m(f)),m}),r=y(()=>{const{size:c}=n;return Te(c)?l.cssVarBlock({size:zt(c)||""}):void 0}),i=y(()=>({objectFit:n.fit}));ie(()=>n.src,()=>a.value=!1);function u(c){a.value=!0,t("error",c)}return(c,d)=>(_(),V("span",{class:T(o(s)),style:_e(o(r))},[(c.src||c.srcSet)&&!a.value?(_(),V("img",{key:0,src:c.src,alt:c.alt,srcset:c.srcSet,style:_e(o(i)),onError:u},null,44,["src","alt","srcset"])):c.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(c.icon)))]),_:1})):G(c.$slots,"default",{key:2})],6))}});var jb=fe(Wb,[["__file","avatar.vue"]]);const Ub=He(jb),Yb={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},qb={click:e=>e instanceof MouseEvent},Gb=(e,t,n)=>{const l=Lt(),a=Lt(),s=I(!1),r=()=>{l.value&&(s.value=l.value.scrollTop>=e.visibilityHeight)},i=c=>{var d;(d=l.value)==null||d.scrollTo({top:0,behavior:"smooth"}),t("click",c)},u=Mc(r,300,!0);return xt(a,"scroll",u),Xe(()=>{var c;a.value=document,l.value=document.documentElement,e.target&&(l.value=(c=document.querySelector(e.target))!=null?c:void 0,l.value||jt(n,`target does not exist: ${e.target}`),a.value=l.value),r()}),{visible:s,handleClick:i}},Rd="ElBacktop",Xb=x({name:Rd}),Zb=x({...Xb,props:Yb,emits:qb,setup(e,{emit:t}){const n=e,l=ue("backtop"),{handleClick:a,visible:s}=Gb(n,t,Rd),r=y(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(i,u)=>(_(),oe(an,{name:`${o(l).namespace.value}-fade-in`},{default:U(()=>[o(s)?(_(),V("div",{key:0,style:_e(o(r)),class:T(o(l).b()),onClick:Le(o(a),["stop"])},[G(i.$slots,"default",{},()=>[H(o(Se),{class:T(o(l).e("icon"))},{default:U(()=>[H(o(Yh))]),_:1},8,["class"])])],14,["onClick"])):J("v-if",!0)]),_:3},8,["name"]))}});var Jb=fe(Zb,[["__file","backtop.vue"]]);const Qb=He(Jb),e0=de({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"},showZero:{type:Boolean,default:!0},color:String,badgeStyle:{type:Y([String,Object,Array])},offset:{type:Y(Array),default:[0,0]},badgeClass:{type:String}}),t0=x({name:"ElBadge"}),n0=x({...t0,props:e0,setup(e,{expose:t}){const n=e,l=ue("badge"),a=y(()=>n.isDot?"":Te(n.value)&&Te(n.max)?n.max{var r,i,u,c,d;return[{backgroundColor:n.color,marginRight:zt(-((i=(r=n.offset)==null?void 0:r[0])!=null?i:0)),marginTop:zt((c=(u=n.offset)==null?void 0:u[1])!=null?c:0)},(d=n.badgeStyle)!=null?d:{}]});return t({content:a}),(r,i)=>(_(),V("div",{class:T(o(l).b())},[G(r.$slots,"default"),H(an,{name:`${o(l).namespace.value}-zoom-in-center`,persisted:""},{default:U(()=>[We(F("sup",{class:T([o(l).e("content"),o(l).em("content",r.type),o(l).is("fixed",!!r.$slots.default),o(l).is("dot",r.isDot),o(l).is("hide-zero",!r.showZero&&n.value===0),r.badgeClass]),style:_e(o(s))},[G(r.$slots,"content",{value:o(a)},()=>[st(pe(o(a)),1)])],6),[[mt,!r.hidden&&(o(a)||r.isDot||r.$slots.content)]])]),_:3},8,["name"])],2))}});var l0=fe(n0,[["__file","badge.vue"]]);const Pd=He(l0),Od=Symbol("breadcrumbKey"),o0=de({separator:{type:String,default:"/"},separatorIcon:{type:$t}}),a0=x({name:"ElBreadcrumb"}),s0=x({...a0,props:o0,setup(e){const t=e,{t:n}=pt(),l=ue("breadcrumb"),a=I();return rt(Od,t),Xe(()=>{const s=a.value.querySelectorAll(`.${l.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(_(),V("div",{ref_key:"breadcrumb",ref:a,class:T(o(l).b()),"aria-label":o(n)("el.breadcrumb.label"),role:"navigation"},[G(s.$slots,"default")],10,["aria-label"]))}});var r0=fe(s0,[["__file","breadcrumb.vue"]]);const i0=de({to:{type:Y([String,Object]),default:""},replace:Boolean}),u0=x({name:"ElBreadcrumbItem"}),c0=x({...u0,props:i0,setup(e){const t=e,n=lt(),l=we(Od,void 0),a=ue("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=I(),i=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(u,c)=>{var d,f;return _(),V("span",{class:T(o(a).e("item"))},[F("span",{ref_key:"link",ref:r,class:T([o(a).e("inner"),o(a).is("link",!!u.to)]),role:"link",onClick:i},[G(u.$slots,"default")],2),(d=o(l))!=null&&d.separatorIcon?(_(),oe(o(Se),{key:0,class:T(o(a).e("separator"))},{default:U(()=>[(_(),oe(Ge(o(l).separatorIcon)))]),_:1},8,["class"])):(_(),V("span",{key:1,class:T(o(a).e("separator")),role:"presentation"},pe((f=o(l))==null?void 0:f.separator),3))],2)}}});var Ld=fe(c0,[["__file","breadcrumb-item.vue"]]);const d0=He(r0,{BreadcrumbItem:Ld}),f0=At(Ld),Bd=Symbol("buttonGroupContextKey"),ul=({from:e,replacement:t,scope:n,version:l,ref:a,type:s="API"},r)=>{ie(()=>o(r),i=>{},{immediate:!0})},v0=(e,t)=>{ul({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},y(()=>e.type==="text"));const n=we(Bd,void 0),l=fa("button"),{form:a}=dn(),s=Gt(y(()=>n==null?void 0:n.size)),r=fn(),i=I(),u=Xt(),c=y(()=>{var g;return e.type||(n==null?void 0:n.type)||((g=l.value)==null?void 0:g.type)||""}),d=y(()=>{var g,b,E;return(E=(b=e.autoInsertSpace)!=null?b:(g=l.value)==null?void 0:g.autoInsertSpace)!=null?E:!1}),f=y(()=>{var g,b,E;return(E=(b=e.plain)!=null?b:(g=l.value)==null?void 0:g.plain)!=null?E:!1}),m=y(()=>{var g,b,E;return(E=(b=e.round)!=null?b:(g=l.value)==null?void 0:g.round)!=null?E:!1}),v=y(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=y(()=>{var g;const b=(g=u.default)==null?void 0:g.call(u);if(d.value&&(b==null?void 0:b.length)===1){const E=b[0];if((E==null?void 0:E.type)===Nc){const C=E.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(C.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:i,_props:v,_plain:f,_round:m,shouldAddSpace:h,handleClick:g=>{if(r.value||e.loading){g.stopPropagation();return}e.nativeType==="reset"&&(a==null||a.resetFields()),t("click",g)}}},or=["default","primary","success","warning","info","danger","text",""],p0=["button","submit","reset"],ar=de({size:Jt,disabled:Boolean,type:{type:String,values:or,default:""},icon:{type:$t},nativeType:{type:String,values:p0,default:"button"},loading:Boolean,loadingIcon:{type:$t,default:()=>Qn},plain:{type:Boolean,default:void 0},text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Y([String,Object]),default:"button"}}),h0={click:e=>e instanceof MouseEvent};function kl(e,t=20){return e.mix("#141414",t).toString()}function m0(e){const t=fn(),n=ue("button");return y(()=>{let l={},a=e.color;if(a){const s=a.match(/var\((.*?)\)/);s&&(a=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new vo(a),i=e.dark?r.tint(20).toString():kl(r,20);if(e.plain)l=n.cssVarBlock({"bg-color":e.dark?kl(r,90):r.tint(90).toString(),"text-color":a,"border-color":e.dark?kl(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":a,"hover-border-color":a,"active-bg-color":i,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":i}),t.value&&(l[n.cssVarBlockName("disabled-bg-color")]=e.dark?kl(r,90):r.tint(90).toString(),l[n.cssVarBlockName("disabled-text-color")]=e.dark?kl(r,50):r.tint(50).toString(),l[n.cssVarBlockName("disabled-border-color")]=e.dark?kl(r,80):r.tint(80).toString());else{const u=e.dark?kl(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(l=n.cssVarBlock({"bg-color":a,"text-color":c,"border-color":a,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":i,"active-border-color":i}),t.value){const d=e.dark?kl(r,50):r.tint(50).toString();l[n.cssVarBlockName("disabled-bg-color")]=d,l[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,l[n.cssVarBlockName("disabled-border-color")]=d}}}return l})}const g0=x({name:"ElButton"}),b0=x({...g0,props:ar,emits:h0,setup(e,{expose:t,emit:n}){const l=e,a=m0(l),s=ue("button"),{_ref:r,_size:i,_type:u,_disabled:c,_props:d,_plain:f,_round:m,shouldAddSpace:v,handleClick:h}=v0(l,n),p=y(()=>[s.b(),s.m(u.value),s.m(i.value),s.is("disabled",c.value),s.is("loading",l.loading),s.is("plain",f.value),s.is("round",m.value),s.is("circle",l.circle),s.is("text",l.text),s.is("link",l.link),s.is("has-bg",l.bg)]);return t({ref:r,size:i,type:u,disabled:c,shouldAddSpace:v}),(g,b)=>(_(),oe(Ge(g.tag),et({ref_key:"_ref",ref:r},o(d),{class:o(p),style:o(a),onClick:o(h)}),{default:U(()=>[g.loading?(_(),V(Oe,{key:0},[g.$slots.loading?G(g.$slots,"loading",{key:0}):(_(),oe(o(Se),{key:1,class:T(o(s).is("loading"))},{default:U(()=>[(_(),oe(Ge(g.loadingIcon)))]),_:1},8,["class"]))],64)):g.icon||g.$slots.icon?(_(),oe(o(Se),{key:1},{default:U(()=>[g.icon?(_(),oe(Ge(g.icon),{key:0})):G(g.$slots,"icon",{key:1})]),_:3})):J("v-if",!0),g.$slots.default?(_(),V("span",{key:2,class:T({[o(s).em("text","expand")]:o(v)})},[G(g.$slots,"default")],2)):J("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var y0=fe(b0,[["__file","button.vue"]]);const C0={size:ar.size,type:ar.type},w0=x({name:"ElButtonGroup"}),k0=x({...w0,props:C0,setup(e){const t=e;rt(Bd,kt({size:wt(t,"size"),type:wt(t,"type")}));const n=ue("button");return(l,a)=>(_(),V("div",{class:T(o(n).b("group"))},[G(l.$slots,"default")],2))}});var Vd=fe(k0,[["__file","button-group.vue"]]);const on=He(y0,{ButtonGroup:Vd}),Dd=At(Vd),xs=(e,t)=>[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),Ad=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),Fd=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Tu=function(e,t){const n=wo(e),l=wo(t);return n&&l?e.getTime()===t.getTime():!n&&!l?e===t:!1},$u=function(e,t){const n=ke(e),l=ke(t);return n&&l?e.length!==t.length?!1:e.every((a,s)=>Tu(a,t[s])):!n&&!l?Tu(e,t):!1},Nu=function(e,t,n){const l=Pn(t)||t==="x"?Ke(e).locale(n):Ke(e,t).locale(n);return l.isValid()?l:void 0},Iu=function(e,t,n){return Pn(t)?e:t==="x"?+e:Ke(e).locale(n).format(t)},zs=(e,t)=>{var n;const l=[],a=t==null?void 0:t();for(let s=0;ske(e)?e.map(t=>t.toDate()):e.toDate(),S0=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return Nl(t).map((l,a)=>n-(t-a-1))},E0=e=>{const t=e.daysInMonth();return Nl(t).map((n,l)=>l+1)},_0=e=>Nl(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),T0=de({selectedDay:{type:Y(Object)},range:{type:Y(Array)},date:{type:Y(Object),required:!0},hideHeader:{type:Boolean}}),$0={pick:e=>yt(e)},N0=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Hs=["sun","mon","tue","wed","thu","fri","sat"],I0=(e,t)=>{Ke.extend(Vc);const n=Ke.localeData().firstDayOfWeek(),{t:l,lang:a}=pt(),s=Ke().locale(a.value),r=y(()=>!!e.range&&!!e.range.length),i=y(()=>{let m=[];if(r.value){const[v,h]=e.range,p=Nl(h.date()-v.date()+1).map(E=>({text:v.date()+E,type:"current"}));let g=p.length%7;g=g===0?0:7-g;const b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=p.concat(b)}else{const v=e.date.startOf("month").day(),h=S0(e.date,(v-n+7)%7).map(E=>({text:E,type:"prev"})),p=E0(e.date).map(E=>({text:E,type:"current"}));m=[...h,...p];const g=7-(m.length%7||7),b=Nl(g).map((E,C)=>({text:C+1,type:"next"}));m=m.concat(b)}return _0(m)}),u=y(()=>{const m=n;return m===0?Hs.map(v=>l(`el.datepicker.weeks.${v}`)):Hs.slice(m).concat(Hs.slice(0,m)).map(v=>l(`el.datepicker.weeks.${v}`))}),c=(m,v)=>{switch(v){case"prev":return e.date.startOf("month").subtract(1,"month").date(m);case"next":return e.date.startOf("month").add(1,"month").date(m);case"current":return e.date.date(m)}};return{now:s,isInRange:r,rows:i,weekDays:u,getFormattedDate:c,handlePickDay:({text:m,type:v})=>{const h=c(m,v);t("pick",h)},getSlotData:({text:m,type:v})=>{const h=c(m,v);return{isSelected:h.isSame(e.selectedDay),type:`${v}-month`,day:h.format("YYYY-MM-DD"),date:h.toDate()}}}},M0=x({name:"DateTable"}),R0=x({...M0,props:T0,emits:$0,setup(e,{expose:t,emit:n}){const l=e,{isInRange:a,now:s,rows:r,weekDays:i,getFormattedDate:u,handlePickDay:c,getSlotData:d}=I0(l,n),f=ue("calendar-table"),m=ue("calendar-day"),v=({text:h,type:p})=>{const g=[p];if(p==="current"){const b=u(h,p);b.isSame(l.selectedDay,"day")&&g.push(m.is("selected")),b.isSame(s,"day")&&g.push(m.is("today"))}return g};return t({getFormattedDate:u}),(h,p)=>(_(),V("table",{class:T([o(f).b(),o(f).is("range",o(a))]),cellspacing:"0",cellpadding:"0"},[h.hideHeader?J("v-if",!0):(_(),V("thead",{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(o(i),g=>(_(),V("th",{key:g,scope:"col"},pe(g),1))),128))])])),F("tbody",null,[(_(!0),V(Oe,null,ut(o(r),(g,b)=>(_(),V("tr",{key:b,class:T({[o(f).e("row")]:!0,[o(f).em("row","hide-border")]:b===0&&h.hideHeader})},[(_(!0),V(Oe,null,ut(g,(E,C)=>(_(),V("td",{key:C,class:T(v(E)),onClick:w=>o(c)(E)},[F("div",{class:T(o(m).b())},[G(h.$slots,"date-cell",{data:o(d)(E)},()=>[F("span",null,pe(E.text),1)])],2)],10,["onClick"]))),128))],2))),128))])],2))}});var Mu=fe(R0,[["__file","date-table.vue"]]);const P0=(e,t)=>{const n=e.endOf("month"),l=t.startOf("month"),s=n.isSame(l,"week")?l.add(1,"week"):l;return[[e,n],[s.startOf("week"),t]]},O0=(e,t)=>{const n=e.endOf("month"),l=e.add(1,"month").startOf("month"),a=n.isSame(l,"week")?l.add(1,"week"):l,s=a.endOf("month"),r=t.startOf("month"),i=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[a.startOf("week"),s],[i.startOf("week"),t]]},L0=(e,t,n)=>{const{lang:l}=pt(),a=I(),s=Ke().locale(l.value),r=y({get(){return e.modelValue?u.value:a.value},set(g){if(!g)return;a.value=g;const b=g.toDate();t(Zt,b),t(De,b)}}),i=y(()=>{if(!e.range||!ke(e.range)||e.range.length!==2||e.range.some(C=>!wo(C)))return[];const g=e.range.map(C=>Ke(C).locale(l.value)),[b,E]=g;return b.isAfter(E)?[]:b.isSame(E,"month")?v(b,E):b.add(1,"month").month()!==E.month()?[]:v(b,E)}),u=y(()=>e.modelValue?Ke(e.modelValue).locale(l.value):r.value||(i.value.length?i.value[0][0]:s)),c=y(()=>u.value.subtract(1,"month").date(1)),d=y(()=>u.value.add(1,"month").date(1)),f=y(()=>u.value.subtract(1,"year").date(1)),m=y(()=>u.value.add(1,"year").date(1)),v=(g,b)=>{const E=g.startOf("week"),C=b.endOf("week"),w=E.get("month"),k=C.get("month");return w===k?[[E,C]]:(w+1)%12===k?P0(E,C):w+2===k||(w+1)%11===k?O0(E,C):[]},h=g=>{r.value=g};return{calculateValidatedDateRange:v,date:u,realSelectedDay:r,pickDay:h,selectDate:g=>{const E={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":m.value,today:s}[g];E.isSame(u.value,"day")||h(E)},validatedRange:i}},B0=e=>ke(e)&&e.length===2&&e.every(t=>wo(t)),V0=de({modelValue:{type:Date},range:{type:Y(Array),validator:B0}}),D0={[De]:e=>wo(e),[Zt]:e=>wo(e)},A0="ElCalendar",F0=x({name:A0}),x0=x({...F0,props:V0,emits:D0,setup(e,{expose:t,emit:n}){const l=e,a=ue("calendar"),{calculateValidatedDateRange:s,date:r,pickDay:i,realSelectedDay:u,selectDate:c,validatedRange:d}=L0(l,n),{t:f}=pt(),m=y(()=>{const v=`el.datepicker.month${r.value.format("M")}`;return`${r.value.year()} ${f("el.datepicker.year")} ${f(v)}`});return t({selectedDay:u,pickDay:i,selectDate:c,calculateValidatedDateRange:s}),(v,h)=>(_(),V("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("header"))},[G(v.$slots,"header",{date:o(m)},()=>[F("div",{class:T(o(a).e("title"))},pe(o(m)),3),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("button-group"))},[H(o(Dd),null,{default:U(()=>[H(o(on),{size:"small",onClick:p=>o(c)("prev-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.prevMonth")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("today")},{default:U(()=>[st(pe(o(f)("el.datepicker.today")),1)]),_:1},8,["onClick"]),H(o(on),{size:"small",onClick:p=>o(c)("next-month")},{default:U(()=>[st(pe(o(f)("el.datepicker.nextMonth")),1)]),_:1},8,["onClick"])]),_:1})],2)):J("v-if",!0)])],2),o(d).length===0?(_(),V("div",{key:0,class:T(o(a).e("body"))},[H(Mu,{date:o(r),"selected-day":o(u),onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(p=>[G(v.$slots,"date-cell",On(cl(p)))])}:void 0]),1032,["date","selected-day","onPick"])],2)):(_(),V("div",{key:1,class:T(o(a).e("body"))},[(_(!0),V(Oe,null,ut(o(d),(p,g)=>(_(),oe(Mu,{key:g,date:p[0],"selected-day":o(u),range:p,"hide-header":g!==0,onPick:o(i)},Mn({_:2},[v.$slots["date-cell"]?{name:"date-cell",fn:U(b=>[G(v.$slots,"date-cell",On(cl(b)))])}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}});var z0=fe(x0,[["__file","calendar.vue"]]);const H0=He(z0),K0=de({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:Y([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:"always"}}),W0=x({name:"ElCard"}),j0=x({...W0,props:K0,setup(e){const t=ue("card");return(n,l)=>(_(),V("div",{class:T([o(t).b(),o(t).is(`${n.shadow}-shadow`)])},[n.$slots.header||n.header?(_(),V("div",{key:0,class:T([o(t).e("header"),n.headerClass])},[G(n.$slots,"header",{},()=>[st(pe(n.header),1)])],2)):J("v-if",!0),F("div",{class:T([o(t).e("body"),n.bodyClass]),style:_e(n.bodyStyle)},[G(n.$slots,"default")],6),n.$slots.footer||n.footer?(_(),V("div",{key:1,class:T([o(t).e("footer"),n.footerClass])},[G(n.$slots,"footer",{},()=>[st(pe(n.footer),1)])],2)):J("v-if",!0)],2))}});var U0=fe(j0,[["__file","card.vue"]]);const Y0=He(U0),q0=de({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},interval:{type:Number,default:3e3},indicatorPosition:{type:String,values:["","none","outside"],default:""},arrow:{type:String,values:["always","hover","never"],default:"hover"},type:{type:String,values:["","card"],default:""},cardScale:{type:Number,default:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),G0={change:(e,t)=>[e,t].every(Te)},xd=Symbol("carouselContextKey"),sr="ElCarouselItem";var Vn=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Vn||{});function rr(e){return Dt(e)&&e.type===Oe}function X0(e){return Dt(e)&&e.type===jl}function Z0(e){return Dt(e)&&!rr(e)&&!X0(e)}const J0=e=>{if(!Dt(e))return{};const t=e.props||{},n=(Dt(e.type)?e.type.props:void 0)||{},l={};return Object.keys(n).forEach(a=>{rn(n[a],"default")&&(l[a]=n[a].default)}),Object.keys(t).forEach(a=>{l[Ar(a)]=t[a]}),l},Q0=e=>{if(!ke(e)||e.length>1)throw new Error("expect to receive a single Vue element child");return e[0]},Zn=e=>{const t=ke(e)?e:[e],n=[];return t.forEach(l=>{var a;ke(l)?n.push(...Zn(l)):Dt(l)&&((a=l.component)!=null&&a.subTree)?n.push(l,...Zn(l.component.subTree)):Dt(l)&&ke(l.children)?n.push(...Zn(l.children)):Dt(l)&&l.shapeFlag===2?n.push(...Zn(l.type())):n.push(l)}),n},ey=(e,t,n)=>Zn(e.subTree).filter(s=>{var r;return Dt(s)&&((r=s.type)==null?void 0:r.name)===t&&!!s.component}).map(s=>s.component.uid).map(s=>n[s]).filter(s=>!!s),ks=(e,t)=>{const n=Lt({}),l=Lt([]),a=new WeakMap,s=d=>{n.value[d.uid]=d,Oa(n),Xe(()=>{const f=d.getVnode().el,m=f.parentNode;if(!a.has(m)){a.set(m,[]);const v=m.insertBefore.bind(m);m.insertBefore=(h,p)=>(a.get(m).some(b=>h===b||p===b)&&Oa(n),v(h,p))}a.get(m).push(f)})},r=d=>{delete n.value[d.uid],Oa(n);const f=d.getVnode().el,m=f.parentNode,v=a.get(m),h=v.indexOf(f);v.splice(h,1)},i=()=>{l.value=ey(e,t,n.value)},u=d=>d.render(),c=x({setup(d,{slots:f}){return()=>(i(),f.default?Re(u,{render:f.default}):null)}});return{children:l,addChild:s,removeChild:r,ChildrenSorter:c}},Ru=300,ty=(e,t,n)=>{const{children:l,addChild:a,removeChild:s,ChildrenSorter:r}=ks(lt(),sr),i=Xt(),u=I(-1),c=I(null),d=I(!1),f=I(),m=I(0),v=I(!0),h=y(()=>e.arrow!=="never"&&!o(b)),p=y(()=>l.value.some(ee=>ee.props.label.toString().length>0)),g=y(()=>e.type==="card"),b=y(()=>e.direction==="vertical"),E=y(()=>e.height!=="auto"?{height:e.height}:{height:`${m.value}px`,overflow:"hidden"}),C=Hl(ee=>{R(ee)},Ru,{trailing:!0}),w=Hl(ee=>{z(ee)},Ru),k=ee=>v.value?u.value<=1?ee<=1:ee>1:!0;function S(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>M(),e.interval))}const M=()=>{u.valuese.props.name===ee);le.length>0&&(ee=l.value.indexOf(le[0]))}if(ee=Number(ee),Number.isNaN(ee)||ee!==Math.floor(ee))return;const ae=l.value.length,re=u.value;ee<0?u.value=e.loop?ae-1:0:ee>=ae?u.value=e.loop?0:ae-1:u.value=ee,re===u.value&&N(re),ne()}function N(ee){l.value.forEach((ae,re)=>{ae.translateItem(re,u.value,ee)})}function O(ee,ae){var re,le,se,ge;const Be=o(l),te=Be.length;if(te===0||!ee.states.inStage)return!1;const ce=ae+1,Ie=ae-1,Ae=te-1,xe=Be[Ae].states.active,Ye=Be[0].states.active,$e=(le=(re=Be[ce])==null?void 0:re.states)==null?void 0:le.active,Me=(ge=(se=Be[Ie])==null?void 0:se.states)==null?void 0:ge.active;return ae===Ae&&Ye||$e?"left":ae===0&&xe||Me?"right":!1}function P(){d.value=!0,e.pauseOnHover&&S()}function W(){d.value=!1,$()}function K(ee){o(b)||l.value.forEach((ae,re)=>{ee===O(ae,re)&&(ae.states.hover=!0)})}function D(){o(b)||l.value.forEach(ee=>{ee.states.hover=!1})}function L(ee){u.value=ee}function z(ee){e.trigger==="hover"&&ee!==u.value&&(u.value=ee)}function B(){R(u.value-1)}function A(){R(u.value+1)}function ne(){S(),e.pauseOnHover||$()}function j(ee){e.height==="auto"&&(m.value=ee)}function Q(){var ee;const ae=(ee=i.default)==null?void 0:ee.call(i);if(!ae)return null;const le=Zn(ae).filter(se=>Dt(se)&&se.type.name===sr);return(le==null?void 0:le.length)===2&&e.loop&&!g.value?(v.value=!0,le):(v.value=!1,null)}ie(()=>u.value,(ee,ae)=>{N(ae),v.value&&(ee=ee%2,ae=ae%2),ae>-1&&t(nt,ee,ae)}),ie(()=>e.autoplay,ee=>{ee?$():S()}),ie(()=>e.loop,()=>{R(u.value)}),ie(()=>e.interval,()=>{ne()});const Z=Lt();return Xe(()=>{ie(()=>l.value,()=>{l.value.length>0&&R(e.initialIndex)},{immediate:!0}),Z.value=Ft(f.value,()=>{N()}),$()}),Nt(()=>{S(),f.value&&Z.value&&Z.value.stop()}),rt(xd,{root:f,isCardType:g,isVertical:b,items:l,loop:e.loop,cardScale:e.cardScale,addItem:a,removeItem:s,setActiveItem:R,setContainerHeight:j}),{root:f,activeIndex:u,arrowDisplay:h,hasLabel:p,hover:d,isCardType:g,items:l,isVertical:b,containerStyle:E,isItemsTwoLength:v,handleButtonEnter:K,handleButtonLeave:D,handleIndicatorClick:L,handleMouseEnter:P,handleMouseLeave:W,setActiveItem:R,prev:B,next:A,PlaceholderItem:Q,isTwoLengthShow:k,ItemsSorter:r,throttledArrowClick:C,throttledIndicatorHover:w}},ny="ElCarousel",ly=x({name:ny}),oy=x({...ly,props:q0,emits:G0,setup(e,{expose:t,emit:n}){const l=e,{root:a,activeIndex:s,arrowDisplay:r,hasLabel:i,hover:u,isCardType:c,items:d,isVertical:f,containerStyle:m,handleButtonEnter:v,handleButtonLeave:h,handleIndicatorClick:p,handleMouseEnter:g,handleMouseLeave:b,setActiveItem:E,prev:C,next:w,PlaceholderItem:k,isTwoLengthShow:S,ItemsSorter:$,throttledArrowClick:M,throttledIndicatorHover:R}=ty(l,n),N=ue("carousel"),{t:O}=pt(),P=y(()=>{const L=[N.b(),N.m(l.direction)];return o(c)&&L.push(N.m("card")),L}),W=y(()=>{const L=[N.e("indicators"),N.em("indicators",l.direction)];return o(i)&&L.push(N.em("indicators","labels")),l.indicatorPosition==="outside"&&L.push(N.em("indicators","outside")),o(f)&&L.push(N.em("indicators","right")),L});function K(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.add(z)}function D(L){if(!l.motionBlur)return;const z=o(f)?`${N.namespace.value}-transitioning-vertical`:`${N.namespace.value}-transitioning`;L.currentTarget.classList.remove(z)}return t({activeIndex:s,setActiveItem:E,prev:C,next:w}),(L,z)=>(_(),V("div",{ref_key:"root",ref:a,class:T(o(P)),onMouseenter:Le(o(g),["stop"]),onMouseleave:Le(o(b),["stop"])},[o(r)?(_(),oe(an,{key:0,name:"carousel-arrow-left",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","left")]),"aria-label":o(O)("el.carousel.leftArrow"),onMouseenter:B=>o(v)("left"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)-1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)>0)]])]),_:1})):J("v-if",!0),o(r)?(_(),oe(an,{key:1,name:"carousel-arrow-right",persisted:""},{default:U(()=>[We(F("button",{type:"button",class:T([o(N).e("arrow"),o(N).em("arrow","right")]),"aria-label":o(O)("el.carousel.rightArrow"),onMouseenter:B=>o(v)("right"),onMouseleave:o(h),onClick:Le(B=>o(M)(o(s)+1),["stop"])},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],42,["aria-label","onMouseenter","onMouseleave","onClick"]),[[mt,(L.arrow==="always"||o(u))&&(l.loop||o(s)[L.indicatorPosition!=="none"?(_(),V("ul",{key:0,class:T(o(W))},[(_(!0),V(Oe,null,ut(o(d),(B,A)=>We((_(),V("li",{key:A,class:T([o(N).e("indicator"),o(N).em("indicator",L.direction),o(N).is("active",A===o(s))]),onMouseenter:ne=>o(R)(A),onClick:Le(ne=>o(p)(A),["stop"])},[F("button",{class:T(o(N).e("button")),"aria-label":o(O)("el.carousel.indicator",{index:A+1})},[o(i)?(_(),V("span",{key:0},pe(B.props.label),1)):J("v-if",!0)],10,["aria-label"])],42,["onMouseenter","onClick"])),[[mt,o(S)(A)]])),128))],2)):J("v-if",!0)]),_:1}),l.motionBlur?(_(),V("svg",{key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},[F("defs",null,[F("filter",{id:"elCarouselHorizontal"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),F("filter",{id:"elCarouselVertical"},[F("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])])])):J("v-if",!0)],42,["onMouseenter","onMouseleave"]))}});var ay=fe(oy,[["__file","carousel.vue"]]);const sy=de({name:{type:String,default:""},label:{type:[String,Number],default:""}}),ry=e=>{const t=we(xd),n=lt(),l=I(),a=I(!1),s=I(0),r=I(1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),{isCardType:f,isVertical:m,cardScale:v}=t;function h(w,k,S){const $=S-1,M=k-1,R=k+1,N=S/2;return k===0&&w===$?-1:k===$&&w===0?S:w=N?S+1:w>R&&w-k>=N?-2:w}function p(w,k){var S,$;const M=o(m)?((S=t.root.value)==null?void 0:S.offsetHeight)||0:(($=t.root.value)==null?void 0:$.offsetWidth)||0;return c.value?M*((2-v)*(w-k)+1)/4:w{var $;const M=o(f),R=($=t.items.value.length)!=null?$:Number.NaN,N=w===k;!M&&!vt(S)&&(d.value=N||w===S),!N&&R>2&&t.loop&&(w=h(w,k,R));const O=o(m);i.value=N,M?(c.value=Math.round(Math.abs(w-k))<=1,s.value=p(w,k),r.value=o(i)?1:v):s.value=g(w,k,O),u.value=!0,N&&l.value&&t.setContainerHeight(l.value.offsetHeight)};function E(){if(t&&o(f)){const w=t.items.value.findIndex(({uid:k})=>k===n.uid);t.setActiveItem(w)}}const C={props:e,states:kt({hover:a,translate:s,scale:r,active:i,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(C),Nt(()=>{t.removeItem(C)}),{carouselItemRef:l,active:i,animating:d,hover:a,inStage:c,isVertical:m,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:E}},iy=x({name:sr}),uy=x({...iy,props:sy,setup(e){const t=e,n=ue("carousel"),{carouselItemRef:l,active:a,animating:s,hover:r,inStage:i,isVertical:u,translate:c,isCardType:d,scale:f,ready:m,handleItemClick:v}=ry(t),h=y(()=>[n.e("item"),n.is("active",a.value),n.is("in-stage",i.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),p=y(()=>{const b=`${`translate${o(u)?"Y":"X"}`}(${o(c)}px)`,E=`scale(${o(f)})`;return{transform:[b,E].join(" ")}});return(g,b)=>We((_(),V("div",{ref_key:"carouselItemRef",ref:l,class:T(o(h)),style:_e(o(p)),onClick:o(v)},[o(d)?We((_(),V("div",{key:0,class:T(o(n).e("mask"))},null,2)),[[mt,!o(a)]]):J("v-if",!0),G(g.$slots,"default")],14,["onClick"])),[[mt,o(m)]])}});var zd=fe(uy,[["__file","carousel-item.vue"]]);const cy=He(ay,{CarouselItem:zd}),dy=At(zd),Hd={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},value:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueValue:{type:[String,Number],default:void 0},falseValue:{type:[String,Number],default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},border:Boolean,size:Jt,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},...cn(["ariaControls"])},Kd={[De]:e=>Ve(e)||Te(e)||_t(e),change:e=>Ve(e)||Te(e)||_t(e)},Oo=Symbol("checkboxGroupContextKey"),fy=({model:e,isChecked:t})=>{const n=we(Oo,void 0),l=y(()=>{var s,r;const i=(s=n==null?void 0:n.max)==null?void 0:s.value,u=(r=n==null?void 0:n.min)==null?void 0:r.value;return!vt(i)&&e.value.length>=i&&!t.value||!vt(u)&&e.value.length<=u&&t.value});return{isDisabled:fn(y(()=>(n==null?void 0:n.disabled.value)||l.value)),isLimitDisabled:l}},vy=(e,{model:t,isLimitExceeded:n,hasOwnLabel:l,isDisabled:a,isLabeledByFormItem:s})=>{const r=we(Oo,void 0),{formItem:i}=dn(),{emit:u}=lt();function c(h){var p,g,b,E;return[!0,e.trueValue,e.trueLabel].includes(h)?(g=(p=e.trueValue)!=null?p:e.trueLabel)!=null?g:!0:(E=(b=e.falseValue)!=null?b:e.falseLabel)!=null?E:!1}function d(h,p){u(nt,c(h),p)}function f(h){if(n.value)return;const p=h.target;u(nt,c(p.checked),h)}async function m(h){n.value||!l.value&&!a.value&&s.value&&(h.composedPath().some(b=>b.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ee(),d(t.value,h)))}const v=y(()=>(r==null?void 0:r.validateEvent)||e.validateEvent);return ie(()=>e.modelValue,()=>{v.value&&(i==null||i.validate("change").catch(h=>void 0))}),{handleChange:f,onClickRoot:m}},py=e=>{const t=I(!1),{emit:n}=lt(),l=we(Oo,void 0),a=y(()=>vt(l)===!1),s=I(!1),r=y({get(){var i,u;return a.value?(i=l==null?void 0:l.modelValue)==null?void 0:i.value:(u=e.modelValue)!=null?u:t.value},set(i){var u,c;a.value&&ke(i)?(s.value=((u=l==null?void 0:l.max)==null?void 0:u.value)!==void 0&&i.length>(l==null?void 0:l.max.value)&&i.length>r.value.length,s.value===!1&&((c=l==null?void 0:l.changeEvent)==null||c.call(l,i))):(n(De,i),t.value=i)}});return{model:r,isGroup:a,isLimitExceeded:s}},hy=(e,t,{model:n})=>{const l=we(Oo,void 0),a=I(!1),s=y(()=>In(e.value)?e.label:e.value),r=y(()=>{const d=n.value;return _t(d)?d:ke(d)?yt(s.value)?d.map(Uo).some(f=>tn(f,s.value)):d.map(Uo).includes(s.value):d!=null?d===e.trueValue||d===e.trueLabel:!!d}),i=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value}),{prop:!0}),u=Gt(y(()=>{var d;return(d=l==null?void 0:l.size)==null?void 0:d.value})),c=y(()=>!!t.default||!In(s.value));return{checkboxButtonSize:i,isChecked:r,isFocused:a,checkboxSize:u,hasOwnLabel:c,actualValue:s}},Wd=(e,t)=>{const{formItem:n}=dn(),{model:l,isGroup:a,isLimitExceeded:s}=py(e),{isFocused:r,isChecked:i,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=hy(e,t,{model:l}),{isDisabled:m}=fy({model:l,isChecked:i}),{inputId:v,isLabeledByFormItem:h}=Kn(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:a}),{handleChange:p,onClickRoot:g}=vy(e,{model:l,isLimitExceeded:s,hasOwnLabel:d,isDisabled:m,isLabeledByFormItem:h});return(()=>{function E(){var C,w;ke(l.value)&&!l.value.includes(f.value)?l.value.push(f.value):l.value=(w=(C=e.trueValue)!=null?C:e.trueLabel)!=null?w:!0}e.checked&&E()})(),ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>a.value&&In(e.value))),ul({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.trueLabel)),ul({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},y(()=>!!e.falseLabel)),{inputId:v,isLabeledByFormItem:h,isChecked:i,isDisabled:m,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:l,actualValue:f,handleChange:p,onClickRoot:g}},my=x({name:"ElCheckbox"}),gy=x({...my,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{inputId:l,isLabeledByFormItem:a,isChecked:s,isDisabled:r,isFocused:i,checkboxSize:u,hasOwnLabel:c,model:d,actualValue:f,handleChange:m,onClickRoot:v}=Wd(t,n),h=ue("checkbox"),p=y(()=>[h.b(),h.m(u.value),h.is("disabled",r.value),h.is("bordered",t.border),h.is("checked",s.value)]),g=y(()=>[h.e("input"),h.is("disabled",r.value),h.is("checked",s.value),h.is("indeterminate",t.indeterminate),h.is("focus",i.value)]);return(b,E)=>(_(),oe(Ge(!o(c)&&o(a)?"span":"label"),{class:T(o(p)),"aria-controls":b.indeterminate?b.ariaControls:null,onClick:o(v)},{default:U(()=>{var C,w,k,S;return[F("span",{class:T(o(g))},[b.trueValue||b.falseValue||b.trueLabel||b.falseLabel?We((_(),V("input",{key:0,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,name:b.name,tabindex:b.tabindex,disabled:o(r),"true-value":(w=(C=b.trueValue)!=null?C:b.trueLabel)!=null?w:!0,"false-value":(S=(k=b.falseValue)!=null?k:b.falseLabel)!=null?S:!1,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]):We((_(),V("input",{key:1,id:o(l),"onUpdate:modelValue":$=>gn(d)?d.value=$:null,class:T(o(h).e("original")),type:"checkbox",indeterminate:b.indeterminate,disabled:o(r),value:o(f),name:b.name,tabindex:b.tabindex,onChange:o(m),onFocus:$=>i.value=!0,onBlur:$=>i.value=!1,onClick:Le(()=>{},["stop"])},null,42,["id","onUpdate:modelValue","indeterminate","disabled","value","name","tabindex","onChange","onFocus","onBlur","onClick"])),[[Ka,o(d)]]),F("span",{class:T(o(h).e("inner"))},null,2)],2),o(c)?(_(),V("span",{key:0,class:T(o(h).e("label"))},[G(b.$slots,"default"),b.$slots.default?J("v-if",!0):(_(),V(Oe,{key:0},[st(pe(b.label),1)],64))],2)):J("v-if",!0)]}),_:3},8,["class","aria-controls","onClick"]))}});var by=fe(gy,[["__file","checkbox.vue"]]);const yy=x({name:"ElCheckboxButton"}),Cy=x({...yy,props:Hd,emits:Kd,setup(e){const t=e,n=Xt(),{isFocused:l,isChecked:a,isDisabled:s,checkboxButtonSize:r,model:i,actualValue:u,handleChange:c}=Wd(t,n),d=we(Oo,void 0),f=ue("checkbox"),m=y(()=>{var h,p,g,b;const E=(p=(h=d==null?void 0:d.fill)==null?void 0:h.value)!=null?p:"";return{backgroundColor:E,borderColor:E,color:(b=(g=d==null?void 0:d.textColor)==null?void 0:g.value)!=null?b:"",boxShadow:E?`-1px 0 0 0 ${E}`:void 0}}),v=y(()=>[f.b("button"),f.bm("button",r.value),f.is("disabled",s.value),f.is("checked",a.value),f.is("focus",l.value)]);return(h,p)=>{var g,b,E,C;return _(),V("label",{class:T(o(v))},[h.trueValue||h.falseValue||h.trueLabel||h.falseLabel?We((_(),V("input",{key:0,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),"true-value":(b=(g=h.trueValue)!=null?g:h.trueLabel)!=null?b:!0,"false-value":(C=(E=h.falseValue)!=null?E:h.falseLabel)!=null?C:!1,onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","true-value","false-value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]):We((_(),V("input",{key:1,"onUpdate:modelValue":w=>gn(i)?i.value=w:null,class:T(o(f).be("button","original")),type:"checkbox",name:h.name,tabindex:h.tabindex,disabled:o(s),value:o(u),onChange:o(c),onFocus:w=>l.value=!0,onBlur:w=>l.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","name","tabindex","disabled","value","onChange","onFocus","onBlur","onClick"])),[[Ka,o(i)]]),h.$slots.default||h.label?(_(),V("span",{key:2,class:T(o(f).be("button","inner")),style:_e(o(a)?o(m):void 0)},[G(h.$slots,"default",{},()=>[st(pe(h.label),1)])],6)):J("v-if",!0)],2)}}});var jd=fe(Cy,[["__file","checkbox-button.vue"]]);const wy=de({modelValue:{type:Y(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:Jt,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),ky={[De]:e=>ke(e),change:e=>ke(e)},Sy=x({name:"ElCheckboxGroup"}),Ey=x({...Sy,props:wy,emits:ky,setup(e,{emit:t}){const n=e,l=ue("checkbox"),{formItem:a}=dn(),{inputId:s,isLabeledByFormItem:r}=Kn(n,{formItemContext:a}),i=async c=>{t(De,c),await Ee(),t(nt,c)},u=y({get(){return n.modelValue},set(c){i(c)}});return rt(Oo,{...An(nn(n),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:u,changeEvent:i}),ie(()=>n.modelValue,()=>{n.validateEvent&&(a==null||a.validate("change").catch(c=>void 0))}),(c,d)=>{var f;return _(),oe(Ge(c.tag),{id:o(s),class:T(o(l).b("group")),role:"group","aria-label":o(r)?void 0:c.ariaLabel||"checkbox-group","aria-labelledby":o(r)?(f=o(a))==null?void 0:f.labelId:void 0},{default:U(()=>[G(c.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var Ud=fe(Ey,[["__file","checkbox-group.vue"]]);const Hn=He(by,{CheckboxButton:jd,CheckboxGroup:Ud}),_y=At(jd),Yd=At(Ud),qd=de({modelValue:{type:[String,Number,Boolean],default:void 0},size:Jt,disabled:Boolean,label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),Ty=de({...qd,border:Boolean}),Gd={[De]:e=>Ve(e)||Te(e)||_t(e),[nt]:e=>Ve(e)||Te(e)||_t(e)},Xd=Symbol("radioGroupKey"),Zd=(e,t)=>{const n=I(),l=we(Xd,void 0),a=y(()=>!!l),s=y(()=>In(e.value)?e.label:e.value),r=y({get(){return a.value?l.modelValue:e.modelValue},set(f){a.value?l.changeEvent(f):t&&t(De,f),n.value.checked=e.modelValue===s.value}}),i=Gt(y(()=>l==null?void 0:l.size)),u=fn(y(()=>l==null?void 0:l.disabled)),c=I(!1),d=y(()=>u.value||a.value&&r.value!==s.value?-1:0);return ul({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},y(()=>a.value&&In(e.value))),{radioRef:n,isGroup:a,radioGroup:l,focus:c,size:i,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},$y=x({name:"ElRadio"}),Ny=x({...$y,props:Ty,emits:Gd,setup(e,{emit:t}){const n=e,l=ue("radio"),{radioRef:a,radioGroup:s,focus:r,size:i,disabled:u,modelValue:c,actualValue:d}=Zd(n,t);function f(){Ee(()=>t(nt,c.value))}return(m,v)=>{var h;return _(),V("label",{class:T([o(l).b(),o(l).is("disabled",o(u)),o(l).is("focus",o(r)),o(l).is("bordered",m.border),o(l).is("checked",o(c)===o(d)),o(l).m(o(i))])},[F("span",{class:T([o(l).e("input"),o(l).is("disabled",o(u)),o(l).is("checked",o(c)===o(d))])},[We(F("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":p=>gn(c)?c.value=p:null,class:T(o(l).e("original")),value:o(d),name:m.name||((h=o(s))==null?void 0:h.name),disabled:o(u),checked:o(c)===o(d),type:"radio",onFocus:p=>r.value=!0,onBlur:p=>r.value=!1,onChange:f,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","checked","onFocus","onBlur","onClick"]),[[Rc,o(c)]]),F("span",{class:T(o(l).e("inner"))},null,2)],2),F("span",{class:T(o(l).e("label")),onKeydown:Le(()=>{},["stop"])},[G(m.$slots,"default",{},()=>[st(pe(m.label),1)])],42,["onKeydown"])],2)}}});var Iy=fe(Ny,[["__file","radio.vue"]]);const My=de({...qd}),Ry=x({name:"ElRadioButton"}),Py=x({...Ry,props:My,setup(e){const t=e,n=ue("radio"),{radioRef:l,focus:a,size:s,disabled:r,modelValue:i,radioGroup:u,actualValue:c}=Zd(t),d=y(()=>({backgroundColor:(u==null?void 0:u.fill)||"",borderColor:(u==null?void 0:u.fill)||"",boxShadow:u!=null&&u.fill?`-1px 0 0 0 ${u.fill}`:"",color:(u==null?void 0:u.textColor)||""}));return(f,m)=>{var v;return _(),V("label",{class:T([o(n).b("button"),o(n).is("active",o(i)===o(c)),o(n).is("disabled",o(r)),o(n).is("focus",o(a)),o(n).bm("button",o(s))])},[We(F("input",{ref_key:"radioRef",ref:l,"onUpdate:modelValue":h=>gn(i)?i.value=h:null,class:T(o(n).be("button","original-radio")),value:o(c),type:"radio",name:f.name||((v=o(u))==null?void 0:v.name),disabled:o(r),onFocus:h=>a.value=!0,onBlur:h=>a.value=!1,onClick:Le(()=>{},["stop"])},null,42,["onUpdate:modelValue","value","name","disabled","onFocus","onBlur","onClick"]),[[Rc,o(i)]]),F("span",{class:T(o(n).be("button","inner")),style:_e(o(i)===o(c)?o(d):{}),onKeydown:Le(()=>{},["stop"])},[G(f.$slots,"default",{},()=>[st(pe(f.label),1)])],46,["onKeydown"])],2)}}});var Jd=fe(Py,[["__file","radio-button.vue"]]);const Oy=de({id:{type:String,default:void 0},size:Jt,disabled:Boolean,modelValue:{type:[String,Number,Boolean],default:void 0},fill:{type:String,default:""},textColor:{type:String,default:""},name:{type:String,default:void 0},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"])}),Ly=Gd,By=x({name:"ElRadioGroup"}),Vy=x({...By,props:Oy,emits:Ly,setup(e,{emit:t}){const n=e,l=ue("radio"),a=sn(),s=I(),{formItem:r}=dn(),{inputId:i,isLabeledByFormItem:u}=Kn(n,{formItemContext:r}),c=f=>{t(De,f),Ee(()=>t(nt,f))};Xe(()=>{const f=s.value.querySelectorAll("[type=radio]"),m=f[0];!Array.from(f).some(v=>v.checked)&&m&&(m.tabIndex=0)});const d=y(()=>n.name||a.value);return rt(Xd,kt({...nn(n),changeEvent:c,name:d})),ie(()=>n.modelValue,()=>{n.validateEvent&&(r==null||r.validate("change").catch(f=>void 0))}),(f,m)=>(_(),V("div",{id:o(i),ref_key:"radioGroupRef",ref:s,class:T(o(l).b("group")),role:"radiogroup","aria-label":o(u)?void 0:f.ariaLabel||"radio-group","aria-labelledby":o(u)?o(r).labelId:void 0},[G(f.$slots,"default")],10,["id","aria-label","aria-labelledby"]))}});var Qd=fe(Vy,[["__file","radio-group.vue"]]);const ef=He(Iy,{RadioButton:Jd,RadioGroup:Qd}),Dy=At(Qd),Ay=At(Jd);function Fy(e){return!!(ke(e)?e.every(({type:t})=>t===jl):(e==null?void 0:e.type)===jl)}var xy=x({name:"NodeContent",props:{node:{type:Object,required:!0},renderLabelFn:Function},setup(e){const t=ue("cascader-node"),{renderLabelFn:n,node:l}=e,{data:a,label:s}=l,r=()=>{const i=n==null?void 0:n({node:l,data:a});return Fy(i)?s:i??s};return()=>H("span",{class:t.e("label")},[r()])}});const li=Symbol(),zy=x({name:"ElCascaderNode"}),Hy=x({...zy,props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,l=we(li),a=ue("cascader-node"),s=y(()=>l.isHoverMenu),r=y(()=>l.config.multiple),i=y(()=>l.config.checkStrictly),u=y(()=>{var $;return($=l.checkedNodes[0])==null?void 0:$.uid}),c=y(()=>n.node.isDisabled),d=y(()=>n.node.isLeaf),f=y(()=>i.value&&!d.value||!c.value),m=y(()=>h(l.expandingNode)),v=y(()=>i.value&&l.checkedNodes.some(h)),h=$=>{var M;const{level:R,uid:N}=n.node;return((M=$==null?void 0:$.pathNodes[R-1])==null?void 0:M.uid)===N},p=()=>{m.value||l.expandNode(n.node)},g=$=>{const{node:M}=n;$!==M.checked&&l.handleCheckChange(M,$)},b=()=>{l.lazyLoad(n.node,()=>{d.value||p()})},E=$=>{s.value&&(C(),!d.value&&t("expand",$))},C=()=>{const{node:$}=n;!f.value||$.loading||($.loaded?p():b())},w=()=>{s.value&&!d.value||(d.value&&!c.value&&!i.value&&!r.value?S(!0):C())},k=$=>{i.value?(g($),n.node.loaded&&p()):S($)},S=$=>{n.node.loaded?(g($),!i.value&&p()):b()};return($,M)=>(_(),V("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!o(d),"aria-owns":o(d)?void 0:e.menuId,"aria-expanded":o(m),tabindex:o(f)?-1:void 0,class:T([o(a).b(),o(a).is("selectable",o(i)),o(a).is("active",e.node.checked),o(a).is("disabled",!o(f)),o(m)&&"in-active-path",o(v)&&"in-checked-path"]),onMouseenter:E,onFocus:E,onClick:w},[J(" prefix "),o(r)?(_(),oe(o(Hn),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:o(c),onClick:Le(()=>{},["stop"]),"onUpdate:modelValue":k},null,8,["model-value","indeterminate","disabled","onClick"])):o(i)?(_(),oe(o(ef),{key:1,"model-value":o(u),label:e.node.uid,disabled:o(c),"onUpdate:modelValue":k,onClick:Le(()=>{},["stop"])},{default:U(()=>[J(`
+ Add an empty element to avoid render label,
+ do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485
+ `),F("span")]),_:1},8,["model-value","label","disabled","onClick"])):o(d)&&e.node.checked?(_(),oe(o(Se),{key:2,class:T(o(a).e("prefix"))},{default:U(()=>[H(o(va))]),_:1},8,["class"])):J("v-if",!0),H(o(xy),{"render-label-fn":o(l).renderLabelFn,node:e.node},null,8,["render-label-fn","node"]),J(" postfix "),o(d)?J("v-if",!0):(_(),V(Oe,{key:3},[e.node.loading?(_(),oe(o(Se),{key:0,class:T([o(a).is("loading"),o(a).e("postfix")])},{default:U(()=>[H(o(Qn))]),_:1},8,["class"])):(_(),oe(o(Se),{key:1,class:T(["arrow-right",o(a).e("postfix")])},{default:U(()=>[H(o(Cn))]),_:1},8,["class"]))],64))],42,["id","aria-haspopup","aria-owns","aria-expanded","tabindex"]))}});var Ky=fe(Hy,[["__file","node.vue"]]);const Wy=x({name:"ElCascaderMenu"}),jy=x({...Wy,props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=e,n=lt(),l=ue("cascader-menu"),{t:a}=pt(),s=sn();let r,i;const u=we(li),c=I(),d=y(()=>!t.nodes.length),f=y(()=>!u.initialLoaded),m=y(()=>`${s.value}-${t.index}`),v=b=>{r=b.target},h=b=>{if(!(!u.isHoverMenu||!r||!c.value))if(r.contains(b.target)){p();const E=n.vnode.el,{left:C}=E.getBoundingClientRect(),{offsetWidth:w,offsetHeight:k}=E,S=b.clientX-C,$=r.offsetTop,M=$+r.offsetHeight;c.value.innerHTML=`
+
+
+ `}else i||(i=window.setTimeout(g,u.config.hoverThreshold))},p=()=>{i&&(clearTimeout(i),i=void 0)},g=()=>{c.value&&(c.value.innerHTML="",p())};return(b,E)=>(_(),oe(o(jn),{key:o(m),tag:"ul",role:"menu",class:T(o(l).b()),"wrap-class":o(l).e("wrap"),"view-class":[o(l).e("list"),o(l).is("empty",o(d))],onMousemove:h,onMouseleave:g},{default:U(()=>{var C;return[(_(!0),V(Oe,null,ut(e.nodes,w=>(_(),oe(Ky,{key:w.uid,node:w,"menu-id":o(m),onExpand:v},null,8,["node","menu-id"]))),128)),o(f)?(_(),V("div",{key:0,class:T(o(l).e("empty-text"))},[H(o(Se),{size:"14",class:T(o(l).is("loading"))},{default:U(()=>[H(o(Qn))]),_:1},8,["class"]),st(" "+pe(o(a)("el.cascader.loading")),1)],2)):o(d)?(_(),V("div",{key:1,class:T(o(l).e("empty-text"))},[G(b.$slots,"empty",{},()=>[st(pe(o(a)("el.cascader.noData")),1)])],2)):(C=o(u))!=null&&C.isHoverMenu?(_(),V(Oe,{key:2},[J(" eslint-disable-next-line vue/html-self-closing "),(_(),V("svg",{ref_key:"hoverZone",ref:c,class:T(o(l).e("hover-zone"))},null,2))],2112)):J("v-if",!0)]}),_:3},8,["class","wrap-class","view-class"]))}});var Uy=fe(jy,[["__file","menu.vue"]]);let Yy=0;const qy=e=>{const t=[e];let{parent:n}=e;for(;n;)t.unshift(n),n=n.parent;return t};let ir=class ur{constructor(t,n,l,a=!1){this.data=t,this.config=n,this.parent=l,this.root=a,this.uid=Yy++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:s,label:r,children:i}=n,u=t[i],c=qy(this);this.level=a?0:l?l.level+1:1,this.value=t[s],this.label=t[r],this.pathNodes=c,this.pathValues=c.map(d=>d.value),this.pathLabels=c.map(d=>d.label),this.childrenData=u,this.children=(u||[]).map(d=>new ur(d,n,this)),this.loaded=!n.lazy||this.isLeaf||!Pn(u),this.text=""}get isDisabled(){const{data:t,parent:n,config:l}=this,{disabled:a,checkStrictly:s}=l;return(Qe(a)?a(t,this):!!t[a])||!s&&!!(n!=null&&n.isDisabled)}get isLeaf(){const{data:t,config:n,childrenData:l,loaded:a}=this,{lazy:s,leaf:r}=n,i=Qe(r)?r(t,this):t[r];return vt(i)?s&&!a?!1:!(ke(l)&&l.length):!!i}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:l}=this,a=new ur(t,this.config,this);return ke(n)?n.push(t):this.childrenData=[t],l.push(a),a}calcText(t,n){const l=t?this.pathLabels.join(n):this.label;return this.text=l,l}broadcast(t){this.children.forEach(n=>{var l;n&&(n.broadcast(t),(l=n.onParentCheck)==null||l.call(n,t))})}emit(){var t;const{parent:n}=this;n&&((t=n.onChildCheck)==null||t.call(n),n.emit())}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(a=>!a.isDisabled),l=n.length?n.every(a=>a.checked):!1;this.setCheckState(l)}setCheckState(t){const n=this.children.length,l=this.children.reduce((a,s)=>{const r=s.checked?1:s.indeterminate?.5:0;return a+r},0);this.checked=this.loaded&&this.children.filter(a=>!a.isDisabled).every(a=>a.loaded&&a.checked)&&t,this.indeterminate=this.loaded&&l!==n&&l>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:l}=this.config;n||!l?this.checked=t:(this.broadcast(t),this.setCheckState(t),this.emit())}};const cr=(e,t)=>e.reduce((n,l)=>(l.isLeaf?n.push(l):(!t&&n.push(l),n=n.concat(cr(l.children,t))),n),[]);class Pu{constructor(t,n){this.config=n;const l=(t||[]).map(a=>new ir(a,this.config));this.nodes=l,this.allNodes=cr(l,!1),this.leafNodes=cr(l,!0)}getNodes(){return this.nodes}getFlattedNodes(t){return t?this.leafNodes:this.allNodes}appendNode(t,n){const l=n?n.appendChild(t):new ir(t,this.config);n||this.nodes.push(l),this.appendAllNodesAndLeafNodes(l)}appendNodes(t,n){t.forEach(l=>this.appendNode(l,n))}appendAllNodesAndLeafNodes(t){this.allNodes.push(t),t.isLeaf&&this.leafNodes.push(t),t.children&&t.children.forEach(n=>{this.appendAllNodesAndLeafNodes(n)})}getNodeByValue(t,n=!1){return In(t)?null:this.getFlattedNodes(n).find(a=>tn(a.value,t)||tn(a.pathValues,t))||null}getSameNode(t){return t&&this.getFlattedNodes(!1).find(({value:l,level:a})=>tn(t.value,l)&&t.level===a)||null}}const tf=de({modelValue:{type:Y([Number,String,Array])},options:{type:Y(Array),default:()=>[]},props:{type:Y(Object),default:()=>({})}}),Gy={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:Bt,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500},Xy=de({...tf,border:{type:Boolean,default:!0},renderLabel:{type:Function}}),Ou=e=>!0,Zy={[De]:Ou,[nt]:Ou,close:()=>!0,"expand-change":e=>e},Jy=e=>y(()=>({...Gy,...e.props})),Lu=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},Qy=e=>{if(!e)return;const t=e.querySelector("input");t?t.click():pd(e)&&e.click()},eC=(e,t)=>{const n=t.slice(0),l=n.map(s=>s.uid),a=e.reduce((s,r)=>{const i=l.indexOf(r.uid);return i>-1&&(s.push(r),n.splice(i,1),l.splice(i,1)),s},[]);return a.push(...n),a},Bu=e=>[...new Set(e)],En=e=>!e&&e!==0?[]:ke(e)?e:[e],tC=x({name:"ElCascaderPanel",inheritAttrs:!1}),nC=x({...tC,props:Xy,emits:Zy,setup(e,{expose:t,emit:n}){const l=e;let a=!1;const s=ue("cascader"),r=Jy(l),i=Xt();let u;const c=I(!0),d=I([]),f=I(),m=I([]),v=I(),h=I([]),p=y(()=>r.value.expandTrigger==="hover"),g=y(()=>l.renderLabel||i.default),b=()=>{const{options:K}=l,D=r.value;a=!1,u=new Pu(K,D),m.value=[u.getNodes()],D.lazy&&Pn(l.options)?(c.value=!1,E(void 0,L=>{L&&(u=new Pu(L,D),m.value=[u.getNodes()]),c.value=!0,N(!1,!0)})):N(!1,!0)},E=(K,D)=>{const L=r.value;K=K||new ir({},L,void 0,!0),K.loading=!0;const z=B=>{const A=K,ne=A.root?null:A;B&&(u==null||u.appendNodes(B,ne)),A.loading=!1,A.loaded=!0,A.childrenData=A.childrenData||[],B&&(D==null||D(B))};L.lazyLoad(K,z)},C=(K,D)=>{var L;const{level:z}=K,B=m.value.slice(0,z);let A;K.isLeaf?A=K.pathNodes[z-2]:(A=K,B.push(K.children)),((L=v.value)==null?void 0:L.uid)!==(A==null?void 0:A.uid)&&(v.value=K,m.value=B,!D&&n("expand-change",(K==null?void 0:K.pathValues)||[]))},w=(K,D,L=!0)=>{const{checkStrictly:z,multiple:B}=r.value,A=h.value[0];a=!0,!B&&(A==null||A.doCheck(!1)),K.doCheck(D),R(),L&&!B&&!z&&n("close"),!L&&!B&&!z&&k(K)},k=K=>{K&&(K=K.parent,k(K),K&&C(K))},S=K=>u==null?void 0:u.getFlattedNodes(K),$=K=>{var D;return(D=S(K))==null?void 0:D.filter(({checked:L})=>L!==!1)},M=()=>{h.value.forEach(K=>K.doCheck(!1)),R(),m.value=m.value.slice(0,1),v.value=void 0,n("expand-change",[])},R=()=>{const{checkStrictly:K,multiple:D}=r.value,L=h.value,z=$(!K),B=eC(L,z),A=B.map(ne=>ne.valueByOption);h.value=B,f.value=D?A:A[0]},N=(K=!1,D=!1)=>{const{modelValue:L}=l,{lazy:z,multiple:B,checkStrictly:A}=r.value,ne=!A;if(!(!c.value||a||!D&&tn(L,f.value)))if(z&&!K){const Q=Bu(qp(En(L))).map(Z=>u==null?void 0:u.getNodeByValue(Z)).filter(Z=>!!Z&&!Z.loaded&&!Z.loading);Q.length?Q.forEach(Z=>{E(Z,()=>N(!1,D))}):N(!0,D)}else{const j=B?En(L):[L],Q=Bu(j.map(Z=>u==null?void 0:u.getNodeByValue(Z,ne)));O(Q,D),f.value=Wa(L)}},O=(K,D=!0)=>{const{checkStrictly:L}=r.value,z=h.value,B=K.filter(j=>!!j&&(L||j.isLeaf)),A=u==null?void 0:u.getSameNode(v.value),ne=D&&A||B[0];ne?ne.pathNodes.forEach(j=>C(j,!0)):v.value=void 0,z.forEach(j=>j.doCheck(!1)),kt(B).forEach(j=>j.doCheck(!0)),h.value=B,Ee(P)},P=()=>{bt&&d.value.forEach(K=>{const D=K==null?void 0:K.$el;if(D){const L=D.querySelector(`.${s.namespace.value}-scrollbar__wrap`),z=D.querySelector(`.${s.b("node")}.${s.is("active")}:last-child`)||D.querySelector(`.${s.b("node")}.in-active-path`);Ur(L,z)}})},W=K=>{const D=K.target,{code:L}=K;switch(L){case Ce.up:case Ce.down:{K.preventDefault();const z=L===Ce.up?-1:1;Ba(hd(D,z,`.${s.b("node")}[tabindex="-1"]`));break}case Ce.left:{K.preventDefault();const z=d.value[Lu(D)-1],B=z==null?void 0:z.$el.querySelector(`.${s.b("node")}[aria-expanded="true"]`);Ba(B);break}case Ce.right:{K.preventDefault();const z=d.value[Lu(D)+1],B=z==null?void 0:z.$el.querySelector(`.${s.b("node")}[tabindex="-1"]`);Ba(B);break}case Ce.enter:case Ce.numpadEnter:Qy(D);break}};return rt(li,kt({config:r,expandingNode:v,checkedNodes:h,isHoverMenu:p,initialLoaded:c,renderLabelFn:g,lazyLoad:E,expandNode:C,handleCheckChange:w})),ie([r,()=>l.options],(K,D)=>{tn(K,D)||b()},{deep:!0,immediate:!0}),ie(()=>l.modelValue,()=>{a=!1,N()},{deep:!0}),ie(()=>f.value,K=>{tn(K,l.modelValue)||(n(De,K),n(nt,K))}),Pc(()=>d.value=[]),Xe(()=>!Pn(l.modelValue)&&N()),t({menuList:d,menus:m,checkedNodes:h,handleKeyDown:W,handleCheckChange:w,getFlattedNodes:S,getCheckedNodes:$,clearCheckedNodes:M,calculateCheckedValue:R,scrollToExpandingNode:P}),(K,D)=>(_(),V("div",{class:T([o(s).b("panel"),o(s).is("bordered",K.border)]),onKeydown:W},[(_(!0),V(Oe,null,ut(m.value,(L,z)=>(_(),oe(Uy,{key:z,ref_for:!0,ref:B=>d.value[z]=B,index:z,nodes:[...L]},{empty:U(()=>[G(K.$slots,"empty")]),_:2},1032,["index","nodes"]))),128))],34))}});var lC=fe(nC,[["__file","index.vue"]]);const nf=He(lC),fl=de({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:tl},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),oC={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},aC=x({name:"ElTag"}),sC=x({...aC,props:fl,emits:oC,setup(e,{emit:t}){const n=e,l=Gt(),a=ue("tag"),s=y(()=>{const{type:c,hit:d,effect:f,closable:m,round:v}=n;return[a.b(),a.is("closable",m),a.m(c||"primary"),a.m(l.value),a.m(f),a.is("hit",d),a.is("round",v)]}),r=c=>{t("close",c)},i=c=>{t("click",c)},u=c=>{var d,f,m;(m=(f=(d=c==null?void 0:c.component)==null?void 0:d.subTree)==null?void 0:f.component)!=null&&m.bum&&(c.component.subTree.component.bum=null)};return(c,d)=>c.disableTransitions?(_(),V("span",{key:0,class:T(o(s)),style:_e({backgroundColor:c.color}),onClick:i},[F("span",{class:T(o(a).e("content"))},[G(c.$slots,"default")],2),c.closable?(_(),oe(o(Se),{key:0,class:T(o(a).e("close")),onClick:Le(r,["stop"])},{default:U(()=>[H(o(zn))]),_:1},8,["class","onClick"])):J("v-if",!0)],6)):(_(),oe(an,{key:1,name:`${o(a).namespace.value}-zoom-in-center`,appear:"",onVnodeMounted:u},{default:U(()=>[F("span",{class:T(o(s)),style:_e({backgroundColor:c.color}),onClick:i},[F("span",{class:T(o(a).e("content"))},[G(c.$slots,"default")],2),c.closable?(_(),oe(o(Se),{key:0,class:T(o(a).e("close")),onClick:Le(r,["stop"])},{default:U(()=>[H(o(zn))]),_:1},8,["class","onClick"])):J("v-if",!0)],6)]),_:3},8,["name"]))}});var rC=fe(sC,[["__file","tag.vue"]]);const So=He(rC),iC=de({...tf,size:Jt,placeholder:String,disabled:Boolean,clearable:Boolean,filterable:Boolean,filterMethod:{type:Y(Function),default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:Boolean,maxCollapseTagsTooltipHeight:{type:[String,Number]},debounce:{type:Number,default:300},beforeFilter:{type:Y(Function),default:()=>!0},placement:{type:Y(String),values:Xl,default:"bottom-start"},fallbackPlacements:{type:Y(Array),default:["bottom-start","bottom","top-start","top","right","left"]},popperClass:{type:String,default:""},teleported:Wt.teleported,tagType:{...fl.type,default:"info"},tagEffect:{...fl.effect,default:"light"},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},...Zl}),Vu=e=>!0,uC={[De]:Vu,[nt]:Vu,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,visibleChange:e=>_t(e),expandChange:e=>!!e,removeTag:e=>!!e},Sl=new Map;if(bt){let e;document.addEventListener("mousedown",t=>e=t),document.addEventListener("mouseup",t=>{if(e){for(const n of Sl.values())for(const{documentHandler:l}of n)l(t,e);e=void 0}})}function Du(e,t){let n=[];return ke(t.arg)?n=t.arg:_n(t.arg)&&n.push(t.arg),function(l,a){const s=t.instance.popperRef,r=l.target,i=a==null?void 0:a.target,u=!t||!t.instance,c=!r||!i,d=e.contains(r)||e.contains(i),f=e===r,m=n.length&&n.some(h=>h==null?void 0:h.contains(r))||n.length&&n.includes(i),v=s&&(s.contains(r)||s.contains(i));u||c||d||f||m||v||t.value(l,a)}}const vl={beforeMount(e,t){Sl.has(e)||Sl.set(e,[]),Sl.get(e).push({documentHandler:Du(e,t),bindingFn:t.value})},updated(e,t){Sl.has(e)||Sl.set(e,[]);const n=Sl.get(e),l=n.findIndex(s=>s.bindingFn===t.oldValue),a={documentHandler:Du(e,t),bindingFn:t.value};l>=0?n.splice(l,1,a):n.push(a)},unmounted(e){Sl.delete(e)}},cC="ElCascader",dC=x({name:cC}),fC=x({...dC,props:iC,emits:uC,setup(e,{expose:t,emit:n}){const l=e,a={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:X})=>{const{modifiersData:ve,placement:q}=X;["right","left","bottom","top"].includes(q)||ve.arrow&&(ve.arrow.x=35)},requires:["arrow"]}]},s=pl();let r=0,i=0;const u=ue("cascader"),c=ue("input"),{t:d}=pt(),{form:f,formItem:m}=dn(),{valueOnClear:v}=da(l),{isComposing:h,handleComposition:p}=ha({afterComposition(X){var ve;const q=(ve=X.target)==null?void 0:ve.value;tt(q)}}),g=I(null),b=I(null),E=I(null),C=I(null),w=I(null),k=I(!1),S=I(!1),$=I(!1),M=I(!1),R=I(""),N=I(""),O=I([]),P=I([]),W=I([]),K=y(()=>s.style),D=y(()=>l.disabled||(f==null?void 0:f.disabled)),L=y(()=>{var X;return(X=l.placeholder)!=null?X:d("el.cascader.placeholder")}),z=y(()=>N.value||O.value.length>0||h.value?"":L.value),B=Gt(),A=y(()=>B.value==="small"?"small":"default"),ne=y(()=>!!l.props.multiple),j=y(()=>!l.filterable||ne.value),Q=y(()=>ne.value?N.value:R.value),Z=y(()=>{var X;return((X=C.value)==null?void 0:X.checkedNodes)||[]}),ee=y(()=>!l.clearable||D.value||$.value||!S.value?!1:!!Z.value.length),ae=y(()=>{const{showAllLevels:X,separator:ve}=l,q=Z.value;return q.length?ne.value?"":q[0].calcText(X,ve):""}),re=y(()=>(m==null?void 0:m.validateState)||""),le=y({get(){return Wa(l.modelValue)},set(X){const ve=X??v.value;n(De,ve),n(nt,ve),l.validateEvent&&(m==null||m.validate("change").catch(q=>void 0))}}),se=y(()=>[u.b(),u.m(B.value),u.is("disabled",D.value),s.class]),ge=y(()=>[c.e("icon"),"icon-arrow-down",u.is("reverse",k.value)]),Be=y(()=>u.is("focus",k.value||M.value)),te=y(()=>{var X,ve;return(ve=(X=g.value)==null?void 0:X.popperRef)==null?void 0:ve.contentRef}),ce=X=>{var ve,q,be;D.value||(X=X??!k.value,X!==k.value&&(k.value=X,(q=(ve=b.value)==null?void 0:ve.input)==null||q.setAttribute("aria-expanded",`${X}`),X?(Ie(),Ee((be=C.value)==null?void 0:be.scrollToExpandingNode)):l.filterable&&Ue(),n("visibleChange",X)))},Ie=()=>{Ee(()=>{var X;(X=g.value)==null||X.updatePopper()})},Ae=()=>{$.value=!1},xe=X=>{const{showAllLevels:ve,separator:q}=l;return{node:X,key:X.uid,text:X.calcText(ve,q),hitState:!1,closable:!D.value&&!X.isDisabled,isCollapseTag:!1}},Ye=X=>{var ve;const q=X.node;q.doCheck(!1),(ve=C.value)==null||ve.calculateCheckedValue(),n("removeTag",q.valueByOption)},$e=()=>{if(!ne.value)return;const X=Z.value,ve=[],q=[];if(X.forEach(be=>q.push(xe(be))),P.value=q,X.length){X.slice(0,l.maxCollapseTags).forEach(ft=>ve.push(xe(ft)));const be=X.slice(l.maxCollapseTags),qe=be.length;qe&&(l.collapseTags?ve.push({key:-1,text:`+ ${qe}`,closable:!1,isCollapseTag:!0}):be.forEach(ft=>ve.push(xe(ft))))}O.value=ve},Me=()=>{var X,ve;const{filterMethod:q,showAllLevels:be,separator:qe}=l,ft=(ve=(X=C.value)==null?void 0:X.getFlattedNodes(!l.props.checkStrictly))==null?void 0:ve.filter(Pt=>Pt.isDisabled?!1:(Pt.calcText(be,qe),q(Pt,Q.value)));ne.value&&(O.value.forEach(Pt=>{Pt.hitState=!1}),P.value.forEach(Pt=>{Pt.hitState=!1})),$.value=!0,W.value=ft,Ie()},Pe=()=>{var X;let ve;$.value&&w.value?ve=w.value.$el.querySelector(`.${u.e("suggestion-item")}`):ve=(X=C.value)==null?void 0:X.$el.querySelector(`.${u.b("node")}[tabindex="-1"]`),ve&&(ve.focus(),!$.value&&ve.click())},Ze=()=>{var X,ve;const q=(X=b.value)==null?void 0:X.input,be=E.value,qe=(ve=w.value)==null?void 0:ve.$el;if(!(!bt||!q)){if(qe){const ft=qe.querySelector(`.${u.e("suggestion-list")}`);ft.style.minWidth=`${q.offsetWidth}px`}if(be){const{offsetHeight:ft}=be,Pt=O.value.length>0?`${Math.max(ft,r)-2}px`:`${r}px`;q.style.height=Pt,Ie()}}},ot=X=>{var ve;return(ve=C.value)==null?void 0:ve.getCheckedNodes(X)},at=X=>{Ie(),n("expandChange",X)},ct=X=>{if(!h.value)switch(X.code){case Ce.enter:case Ce.numpadEnter:ce();break;case Ce.down:ce(!0),Ee(Pe),X.preventDefault();break;case Ce.esc:k.value===!0&&(X.preventDefault(),X.stopPropagation(),ce(!1));break;case Ce.tab:ce(!1);break}},ye=()=>{var X;(X=C.value)==null||X.clearCheckedNodes(),!k.value&&l.filterable&&Ue(),ce(!1),n("clear")},Ue=()=>{const{value:X}=ae;R.value=X,N.value=X},It=X=>{var ve,q;const{checked:be}=X;ne.value?(ve=C.value)==null||ve.handleCheckChange(X,!be,!1):(!be&&((q=C.value)==null||q.handleCheckChange(X,!0,!1)),ce(!1))},Ot=X=>{const ve=X.target,{code:q}=X;switch(q){case Ce.up:case Ce.down:{X.preventDefault();const be=q===Ce.up?-1:1;Ba(hd(ve,be,`.${u.e("suggestion-item")}[tabindex="-1"]`));break}case Ce.enter:case Ce.numpadEnter:ve.click();break}},Rt=()=>{const X=O.value,ve=X[X.length-1];i=N.value?0:i+1,!(!ve||!i||l.collapseTags&&X.length>1)&&(ve.hitState?Ye(ve):ve.hitState=!0)},Mt=X=>{const ve=X.target,q=u.e("search-input");ve.className===q&&(M.value=!0),n("focus",X)},St=X=>{M.value=!1,n("blur",X)},je=Ln(()=>{const{value:X}=Q;if(!X)return;const ve=l.beforeFilter(X);Yo(ve)?ve.then(Me).catch(()=>{}):ve!==!1?Me():Ae()},l.debounce),tt=(X,ve)=>{!k.value&&ce(!0),!(ve!=null&&ve.isComposing)&&(X?je():Ae())},it=X=>Number.parseFloat(Rp(c.cssVarName("input-height"),X).value)-2;return ie($,Ie),ie([Z,D,()=>l.collapseTags],$e),ie(O,()=>{Ee(()=>Ze())}),ie(B,async()=>{await Ee();const X=b.value.input;r=it(X)||r,Ze()}),ie(ae,Ue,{immediate:!0}),Xe(()=>{const X=b.value.input,ve=it(X);r=X.offsetHeight||ve,Ft(X,Ze)}),t({getCheckedNodes:ot,cascaderPanelRef:C,togglePopperVisible:ce,contentRef:te,presentText:ae}),(X,ve)=>(_(),oe(o(un),{ref_key:"tooltipRef",ref:g,visible:k.value,teleported:X.teleported,"popper-class":[o(u).e("dropdown"),X.popperClass],"popper-options":a,"fallback-placements":X.fallbackPlacements,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:X.placement,transition:`${o(u).namespace.value}-zoom-in-top`,effect:"light",pure:"",persistent:X.persistent,onHide:Ae},{default:U(()=>[We((_(),V("div",{class:T(o(se)),style:_e(o(K)),onClick:()=>ce(o(j)?void 0:!0),onKeydown:ct,onMouseenter:q=>S.value=!0,onMouseleave:q=>S.value=!1},[H(o(hn),{ref_key:"input",ref:b,modelValue:R.value,"onUpdate:modelValue":q=>R.value=q,placeholder:o(z),readonly:o(j),disabled:o(D),"validate-event":!1,size:o(B),class:T(o(Be)),tabindex:o(ne)&&X.filterable&&!o(D)?-1:void 0,onCompositionstart:o(p),onCompositionupdate:o(p),onCompositionend:o(p),onFocus:Mt,onBlur:St,onInput:tt},Mn({suffix:U(()=>[o(ee)?(_(),oe(o(Se),{key:"clear",class:T([o(c).e("icon"),"icon-circle-close"]),onClick:Le(ye,["stop"])},{default:U(()=>[H(o(ml))]),_:1},8,["class","onClick"])):(_(),oe(o(Se),{key:"arrow-down",class:T(o(ge)),onClick:Le(q=>ce(),["stop"])},{default:U(()=>[H(o(nl))]),_:1},8,["class","onClick"]))]),_:2},[X.$slots.prefix?{name:"prefix",fn:U(()=>[G(X.$slots,"prefix")])}:void 0]),1032,["modelValue","onUpdate:modelValue","placeholder","readonly","disabled","size","class","tabindex","onCompositionstart","onCompositionupdate","onCompositionend"]),o(ne)?(_(),V("div",{key:0,ref_key:"tagWrapper",ref:E,class:T([o(u).e("tags"),o(u).is("validate",!!o(re))])},[G(X.$slots,"tag",{data:P.value,deleteTag:Ye},()=>[(_(!0),V(Oe,null,ut(O.value,q=>(_(),oe(o(So),{key:q.key,type:X.tagType,size:o(A),effect:X.tagEffect,hit:q.hitState,closable:q.closable,"disable-transitions":"",onClose:be=>Ye(q)},{default:U(()=>[q.isCollapseTag===!1?(_(),V("span",{key:0},pe(q.text),1)):(_(),oe(o(un),{key:1,disabled:k.value||!X.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom",effect:"light"},{default:U(()=>[F("span",null,pe(q.text),1)]),content:U(()=>[H(o(jn),{"max-height":X.maxCollapseTagsTooltipHeight},{default:U(()=>[F("div",{class:T(o(u).e("collapse-tags"))},[(_(!0),V(Oe,null,ut(P.value.slice(X.maxCollapseTags),(be,qe)=>(_(),V("div",{key:qe,class:T(o(u).e("collapse-tag"))},[(_(),oe(o(So),{key:be.key,class:"in-tooltip",type:X.tagType,size:o(A),effect:X.tagEffect,hit:be.hitState,closable:be.closable,"disable-transitions":"",onClose:ft=>Ye(be)},{default:U(()=>[F("span",null,pe(be.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))],2))),128))],2)]),_:1},8,["max-height"])]),_:2},1032,["disabled"]))]),_:2},1032,["type","size","effect","hit","closable","onClose"]))),128))]),X.filterable&&!o(D)?We((_(),V("input",{key:0,"onUpdate:modelValue":q=>N.value=q,type:"text",class:T(o(u).e("search-input")),placeholder:o(ae)?"":o(L),onInput:q=>tt(N.value,q),onClick:Le(q=>ce(!0),["stop"]),onKeydown:Tt(Rt,["delete"]),onCompositionstart:o(p),onCompositionupdate:o(p),onCompositionend:o(p),onFocus:Mt,onBlur:St},null,42,["onUpdate:modelValue","placeholder","onInput","onClick","onKeydown","onCompositionstart","onCompositionupdate","onCompositionend"])),[[ds,N.value]]):J("v-if",!0)],2)):J("v-if",!0)],46,["onClick","onMouseenter","onMouseleave"])),[[o(vl),()=>ce(!1),o(te)]])]),content:U(()=>[We(H(o(nf),{ref_key:"cascaderPanelRef",ref:C,modelValue:o(le),"onUpdate:modelValue":q=>gn(le)?le.value=q:null,options:X.options,props:l.props,border:!1,"render-label":X.$slots.default,onExpandChange:at,onClose:q=>X.$nextTick(()=>ce(!1))},{empty:U(()=>[G(X.$slots,"empty")]),_:3},8,["modelValue","onUpdate:modelValue","options","props","render-label","onClose"]),[[mt,!$.value]]),X.filterable?We((_(),oe(o(jn),{key:0,ref_key:"suggestionPanel",ref:w,tag:"ul",class:T(o(u).e("suggestion-panel")),"view-class":o(u).e("suggestion-list"),onKeydown:Ot},{default:U(()=>[W.value.length?(_(!0),V(Oe,{key:0},ut(W.value,q=>(_(),V("li",{key:q.uid,class:T([o(u).e("suggestion-item"),o(u).is("checked",q.checked)]),tabindex:-1,onClick:be=>It(q)},[G(X.$slots,"suggestion-item",{item:q},()=>[F("span",null,pe(q.text),1),q.checked?(_(),oe(o(Se),{key:0},{default:U(()=>[H(o(va))]),_:1})):J("v-if",!0)])],10,["onClick"]))),128)):G(X.$slots,"empty",{key:1},()=>[F("li",{class:T(o(u).e("empty-text"))},pe(o(d)("el.cascader.noMatch")),3)])]),_:3},8,["class","view-class"])),[[mt,$.value]]):J("v-if",!0)]),_:3},8,["visible","teleported","popper-class","fallback-placements","placement","transition","persistent"]))}});var vC=fe(fC,[["__file","cascader.vue"]]);const pC=He(vC),hC=de({checked:Boolean,disabled:Boolean,type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"}}),mC={"update:checked":e=>_t(e),[nt]:e=>_t(e)},gC=x({name:"ElCheckTag"}),bC=x({...gC,props:hC,emits:mC,setup(e,{emit:t}){const n=e,l=ue("check-tag"),a=y(()=>n.disabled),s=y(()=>[l.b(),l.is("checked",n.checked),l.is("disabled",a.value),l.m(n.type||"primary")]),r=()=>{if(a.value)return;const i=!n.checked;t(nt,i),t("update:checked",i)};return(i,u)=>(_(),V("span",{class:T(o(s)),onClick:r},[G(i.$slots,"default")],2))}});var yC=fe(bC,[["__file","check-tag.vue"]]);const CC=He(yC),wC=de({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:Y([Number,Object]),default:()=>Vt({})},sm:{type:Y([Number,Object]),default:()=>Vt({})},md:{type:Y([Number,Object]),default:()=>Vt({})},lg:{type:Y([Number,Object]),default:()=>Vt({})},xl:{type:Y([Number,Object]),default:()=>Vt({})}}),lf=Symbol("rowContextKey"),kC=x({name:"ElCol"}),SC=x({...kC,props:wC,setup(e){const t=e,{gutter:n}=we(lf,{gutter:y(()=>0)}),l=ue("col"),a=y(()=>{const r={};return n.value&&(r.paddingLeft=r.paddingRight=`${n.value/2}px`),r}),s=y(()=>{const r=[];return["span","offset","pull","push"].forEach(c=>{const d=t[c];Te(d)&&(c==="span"?r.push(l.b(`${t[c]}`)):d>0&&r.push(l.b(`${c}-${t[c]}`)))}),["xs","sm","md","lg","xl"].forEach(c=>{Te(t[c])?r.push(l.b(`${c}-${t[c]}`)):yt(t[c])&&Object.entries(t[c]).forEach(([d,f])=>{r.push(d!=="span"?l.b(`${c}-${d}-${f}`):l.b(`${c}-${f}`))})}),n.value&&r.push(l.is("guttered")),[l.b(),r]});return(r,i)=>(_(),oe(Ge(r.tag),{class:T(o(s)),style:_e(o(a))},{default:U(()=>[G(r.$slots,"default")]),_:3},8,["class","style"]))}});var EC=fe(SC,[["__file","col.vue"]]);const _C=He(EC),Au=e=>Te(e)||Ve(e)||ke(e),TC=de({accordion:Boolean,modelValue:{type:Y([Array,String,Number]),default:()=>Vt([])},expandIconPosition:{type:Y([String]),default:"right"},beforeCollapse:{type:Y(Function)}}),$C={[De]:Au,[nt]:Au},of=Symbol("collapseContextKey"),NC="ElCollapse",IC=(e,t)=>{const n=I(ln(e.modelValue)),l=r=>{n.value=r;const i=e.accordion?n.value[0]:n.value;t(De,i),t(nt,i)},a=r=>{if(e.accordion)l([n.value[0]===r?"":r]);else{const i=[...n.value],u=i.indexOf(r);u>-1?i.splice(u,1):i.push(r),l(i)}},s=async r=>{const{beforeCollapse:i}=e;if(!i){a(r);return}const u=i(r);[Yo(u),_t(u)].includes(!0)||jt(NC,"beforeCollapse must return type `Promise` or `boolean`"),Yo(u)?u.then(d=>{d!==!1&&a(r)}).catch(d=>{}):u&&a(r)};return ie(()=>e.modelValue,()=>n.value=ln(e.modelValue),{deep:!0}),rt(of,{activeNames:n,handleItemClick:s}),{activeNames:n,setActiveNames:l}},MC=e=>{const t=ue("collapse");return{rootKls:y(()=>[t.b(),t.b(`icon-position-${e.expandIconPosition}`)])}},RC=x({name:"ElCollapse"}),PC=x({...RC,props:TC,emits:$C,setup(e,{expose:t,emit:n}){const l=e,{activeNames:a,setActiveNames:s}=IC(l,n),{rootKls:r}=MC(l);return t({activeNames:a,setActiveNames:s}),(i,u)=>(_(),V("div",{class:T(o(r))},[G(i.$slots,"default")],2))}});var OC=fe(PC,[["__file","collapse.vue"]]);const LC=x({name:"ElCollapseTransition"}),BC=x({...LC,setup(e){const t=ue("collapse-transition"),n=a=>{a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom},l={beforeEnter(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.style.height&&(a.dataset.elExistsHeight=a.style.height),a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0},enter(a){requestAnimationFrame(()=>{a.dataset.oldOverflow=a.style.overflow,a.dataset.elExistsHeight?a.style.maxHeight=a.dataset.elExistsHeight:a.scrollHeight!==0?a.style.maxHeight=`${a.scrollHeight}px`:a.style.maxHeight=0,a.style.paddingTop=a.dataset.oldPaddingTop,a.style.paddingBottom=a.dataset.oldPaddingBottom,a.style.overflow="hidden"})},afterEnter(a){a.style.maxHeight="",a.style.overflow=a.dataset.oldOverflow},enterCancelled(a){n(a)},beforeLeave(a){a.dataset||(a.dataset={}),a.dataset.oldPaddingTop=a.style.paddingTop,a.dataset.oldPaddingBottom=a.style.paddingBottom,a.dataset.oldOverflow=a.style.overflow,a.style.maxHeight=`${a.scrollHeight}px`,a.style.overflow="hidden"},leave(a){a.scrollHeight!==0&&(a.style.maxHeight=0,a.style.paddingTop=0,a.style.paddingBottom=0)},afterLeave(a){n(a)},leaveCancelled(a){n(a)}};return(a,s)=>(_(),oe(an,et({name:o(t).b()},Pp(l)),{default:U(()=>[G(a.$slots,"default")]),_:3},16,["name"]))}});var VC=fe(BC,[["__file","collapse-transition.vue"]]);const Ss=He(VC),DC=de({title:{type:String,default:""},name:{type:Y([String,Number]),default:void 0},icon:{type:$t,default:Cn},disabled:Boolean}),AC=e=>{const t=we(of),{namespace:n}=ue("collapse"),l=I(!1),a=I(!1),s=Zr(),r=y(()=>s.current++),i=y(()=>{var m;return(m=e.name)!=null?m:`${n.value}-id-${s.prefix}-${o(r)}`}),u=y(()=>t==null?void 0:t.activeNames.value.includes(o(i)));return{focusing:l,id:r,isActive:u,handleFocus:()=>{setTimeout(()=>{a.value?a.value=!1:l.value=!0},50)},handleHeaderClick:m=>{if(e.disabled)return;const v=m.target;v!=null&&v.closest("input, textarea, select")||(t==null||t.handleItemClick(o(i)),l.value=!1,a.value=!0)},handleEnterClick:m=>{const v=m.target;v!=null&&v.closest("input, textarea, select")||(m.preventDefault(),t==null||t.handleItemClick(o(i)))}}},FC=(e,{focusing:t,isActive:n,id:l})=>{const a=ue("collapse"),s=y(()=>[a.b("item"),a.is("active",o(n)),a.is("disabled",e.disabled)]),r=y(()=>[a.be("item","header"),a.is("active",o(n)),{focusing:o(t)&&!e.disabled}]),i=y(()=>[a.be("item","arrow"),a.is("active",o(n))]),u=y(()=>[a.be("item","title")]),c=y(()=>a.be("item","wrap")),d=y(()=>a.be("item","content")),f=y(()=>a.b(`content-${o(l)}`)),m=y(()=>a.b(`head-${o(l)}`));return{itemTitleKls:u,arrowKls:i,headKls:r,rootKls:s,itemWrapperKls:c,itemContentKls:d,scopedContentId:f,scopedHeadId:m}},xC=x({name:"ElCollapseItem"}),zC=x({...xC,props:DC,setup(e,{expose:t}){const n=e,{focusing:l,id:a,isActive:s,handleFocus:r,handleHeaderClick:i,handleEnterClick:u}=AC(n),{arrowKls:c,headKls:d,rootKls:f,itemTitleKls:m,itemWrapperKls:v,itemContentKls:h,scopedContentId:p,scopedHeadId:g}=FC(n,{focusing:l,isActive:s,id:a});return t({isActive:s}),(b,E)=>(_(),V("div",{class:T(o(f))},[F("div",{id:o(g),class:T(o(d)),"aria-expanded":o(s),"aria-controls":o(p),"aria-describedby":o(p),tabindex:b.disabled?-1:0,role:"button",onClick:o(i),onKeydown:Tt(Le(o(u),["stop"]),["space","enter"]),onFocus:o(r),onBlur:C=>l.value=!1},[F("span",{class:T(o(m))},[G(b.$slots,"title",{isActive:o(s)},()=>[st(pe(b.title),1)])],2),G(b.$slots,"icon",{isActive:o(s)},()=>[H(o(Se),{class:T(o(c))},{default:U(()=>[(_(),oe(Ge(b.icon)))]),_:1},8,["class"])])],42,["id","aria-expanded","aria-controls","aria-describedby","tabindex","onClick","onKeydown","onFocus","onBlur"]),H(o(Ss),null,{default:U(()=>[We(F("div",{id:o(p),role:"region",class:T(o(v)),"aria-hidden":!o(s),"aria-labelledby":o(g)},[F("div",{class:T(o(h))},[G(b.$slots,"default")],2)],10,["id","aria-hidden","aria-labelledby"]),[[mt,o(s)]])]),_:3})],2))}});var af=fe(zC,[["__file","collapse-item.vue"]]);const HC=He(OC,{CollapseItem:af}),KC=At(af),WC=de({color:{type:Y(Object),required:!0},vertical:Boolean});let Ks=!1;function Zo(e,t){if(!bt)return;const n=function(s){var r;(r=t.drag)==null||r.call(t,s)},l=function(s){var r;document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",l),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",l),document.onselectstart=null,document.ondragstart=null,Ks=!1,(r=t.end)==null||r.call(t,s)},a=function(s){var r;Ks||(s.preventDefault(),document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",l),document.addEventListener("touchmove",n),document.addEventListener("touchend",l),Ks=!0,(r=t.start)==null||r.call(t,s))};e.addEventListener("mousedown",a),e.addEventListener("touchstart",a,{passive:!1})}const jC=(e,t)=>{if(!bt||!e||!t)return!1;const n=e.getBoundingClientRect();let l;return t instanceof Element?l=t.getBoundingClientRect():l={top:0,right:window.innerWidth,bottom:window.innerHeight,left:0},n.topl.top&&n.right>l.left&&n.left{let t=0,n=e;for(;n;)t+=n.offsetTop,n=n.offsetParent;return t},dr=(e,t)=>Math.abs(Fu(e)-Fu(t)),oi=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}},UC=e=>{const t=lt(),{t:n}=pt(),l=Lt(),a=Lt(),s=y(()=>e.color.get("alpha")),r=y(()=>n("el.colorpicker.alphaLabel"));function i(f){var m;f.target!==l.value&&u(f),(m=l.value)==null||m.focus()}function u(f){if(!a.value||!l.value)return;const v=t.vnode.el.getBoundingClientRect(),{clientX:h,clientY:p}=oi(f);if(e.vertical){let g=p-v.top;g=Math.max(l.value.offsetHeight/2,g),g=Math.min(g,v.height-l.value.offsetHeight/2),e.color.set("alpha",Math.round((g-l.value.offsetHeight/2)/(v.height-l.value.offsetHeight)*100))}else{let g=h-v.left;g=Math.max(l.value.offsetWidth/2,g),g=Math.min(g,v.width-l.value.offsetWidth/2),e.color.set("alpha",Math.round((g-l.value.offsetWidth/2)/(v.width-l.value.offsetWidth)*100))}}function c(f){const{code:m,shiftKey:v}=f,h=v?10:1;switch(m){case Ce.left:case Ce.down:f.preventDefault(),f.stopPropagation(),d(-h);break;case Ce.right:case Ce.up:f.preventDefault(),f.stopPropagation(),d(h);break}}function d(f){let m=s.value+f;m=m<0?0:m>100?100:m,e.color.set("alpha",m)}return{thumb:l,bar:a,alpha:s,alphaLabel:r,handleDrag:u,handleClick:i,handleKeydown:c}},YC=(e,{bar:t,thumb:n,handleDrag:l})=>{const a=lt(),s=ue("color-alpha-slider"),r=I(0),i=I(0),u=I();function c(){if(!n.value||e.vertical)return 0;const E=a.vnode.el,C=e.color.get("alpha");return E?Math.round(C*(E.offsetWidth-n.value.offsetWidth/2)/100):0}function d(){if(!n.value)return 0;const E=a.vnode.el;if(!e.vertical)return 0;const C=e.color.get("alpha");return E?Math.round(C*(E.offsetHeight-n.value.offsetHeight/2)/100):0}function f(){if(e.color&&e.color.value){const{r:E,g:C,b:w}=e.color.toRgb();return`linear-gradient(to right, rgba(${E}, ${C}, ${w}, 0) 0%, rgba(${E}, ${C}, ${w}, 1) 100%)`}return""}function m(){r.value=c(),i.value=d(),u.value=f()}Xe(()=>{if(!t.value||!n.value)return;const E={drag:C=>{l(C)},end:C=>{l(C)}};Zo(t.value,E),Zo(n.value,E),m()}),ie(()=>e.color.get("alpha"),()=>m()),ie(()=>e.color.value,()=>m());const v=y(()=>[s.b(),s.is("vertical",e.vertical)]),h=y(()=>s.e("bar")),p=y(()=>s.e("thumb")),g=y(()=>({background:u.value})),b=y(()=>({left:zt(r.value),top:zt(i.value)}));return{rootKls:v,barKls:h,barStyle:g,thumbKls:p,thumbStyle:b,update:m}},qC="ElColorAlphaSlider",GC=x({name:qC}),XC=x({...GC,props:WC,setup(e,{expose:t}){const n=e,{alpha:l,alphaLabel:a,bar:s,thumb:r,handleDrag:i,handleClick:u,handleKeydown:c}=UC(n),{rootKls:d,barKls:f,barStyle:m,thumbKls:v,thumbStyle:h,update:p}=YC(n,{bar:s,thumb:r,handleDrag:i});return t({update:p,bar:s,thumb:r}),(g,b)=>(_(),V("div",{class:T(o(d))},[F("div",{ref_key:"bar",ref:s,class:T(o(f)),style:_e(o(m)),onClick:o(u)},null,14,["onClick"]),F("div",{ref_key:"thumb",ref:r,class:T(o(v)),style:_e(o(h)),"aria-label":o(a),"aria-valuenow":o(l),"aria-orientation":g.vertical?"vertical":"horizontal","aria-valuemin":"0","aria-valuemax":"100",role:"slider",tabindex:"0",onKeydown:o(c)},null,46,["aria-label","aria-valuenow","aria-orientation","onKeydown"])],2))}});var ZC=fe(XC,[["__file","alpha-slider.vue"]]);const JC=x({name:"ElColorHueSlider",props:{color:{type:Object,required:!0},vertical:Boolean},setup(e){const t=ue("color-hue-slider"),n=lt(),l=I(),a=I(),s=I(0),r=I(0),i=y(()=>e.color.get("hue"));ie(()=>i.value,()=>{m()});function u(v){v.target!==l.value&&c(v)}function c(v){if(!a.value||!l.value)return;const p=n.vnode.el.getBoundingClientRect(),{clientX:g,clientY:b}=oi(v);let E;if(e.vertical){let C=b-p.top;C=Math.min(C,p.height-l.value.offsetHeight/2),C=Math.max(l.value.offsetHeight/2,C),E=Math.round((C-l.value.offsetHeight/2)/(p.height-l.value.offsetHeight)*360)}else{let C=g-p.left;C=Math.min(C,p.width-l.value.offsetWidth/2),C=Math.max(l.value.offsetWidth/2,C),E=Math.round((C-l.value.offsetWidth/2)/(p.width-l.value.offsetWidth)*360)}e.color.set("hue",E)}function d(){if(!l.value)return 0;const v=n.vnode.el;if(e.vertical)return 0;const h=e.color.get("hue");return v?Math.round(h*(v.offsetWidth-l.value.offsetWidth/2)/360):0}function f(){if(!l.value)return 0;const v=n.vnode.el;if(!e.vertical)return 0;const h=e.color.get("hue");return v?Math.round(h*(v.offsetHeight-l.value.offsetHeight/2)/360):0}function m(){s.value=d(),r.value=f()}return Xe(()=>{if(!a.value||!l.value)return;const v={drag:h=>{c(h)},end:h=>{c(h)}};Zo(a.value,v),Zo(l.value,v),m()}),{bar:a,thumb:l,thumbLeft:s,thumbTop:r,hueValue:i,handleClick:u,update:m,ns:t}}});function QC(e,t,n,l,a,s){return _(),V("div",{class:T([e.ns.b(),e.ns.is("vertical",e.vertical)])},[F("div",{ref:"bar",class:T(e.ns.e("bar")),onClick:e.handleClick},null,10,["onClick"]),F("div",{ref:"thumb",class:T(e.ns.e("thumb")),style:_e({left:e.thumbLeft+"px",top:e.thumbTop+"px"})},null,6)],2)}var ew=fe(JC,[["render",QC],["__file","hue-slider.vue"]]);const tw=de({modelValue:{type:Y(String),default:void 0},id:String,showAlpha:Boolean,colorFormat:String,disabled:Boolean,size:Jt,popperClass:{type:String,default:""},tabindex:{type:[String,Number],default:0},teleported:Wt.teleported,predefine:{type:Y(Array)},validateEvent:{type:Boolean,default:!0},...Zl,...cn(["ariaLabel"])}),nw={[De]:e=>Ve(e)||qt(e),[nt]:e=>Ve(e)||qt(e),activeChange:e=>Ve(e)||qt(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},sf=Symbol("colorPickerContextKey");class Ua{constructor(t={}){this._hue=0,this._saturation=100,this._value=100,this._alpha=100,this._tiny=new vo,this._isValid=!1,this.enableAlpha=!1,this.format="",this.value="";for(const n in t)rn(t,n)&&(this[n]=t[n]);t.value?this.fromString(t.value):this.doOnChange()}set(t,n){if(arguments.length===1&&typeof t=="object"){for(const l in t)rn(t,l)&&this.set(l,t[l]);return}this[`_${t}`]=n,this._isValid=!0,this.doOnChange()}get(t){return["hue","saturation","value","alpha"].includes(t)?Math.round(this[`_${t}`]):this[`_${t}`]}toRgb(){return this._isValid?this._tiny.toRgb():{r:255,g:255,b:255,a:0}}fromString(t){const n=new vo(t);if(this._isValid=n.isValid,n.isValid){const{h:l,s:a,v:s,a:r}=n.toHsv();this._hue=l,this._saturation=a*100,this._value=s*100,this._alpha=r*100}else this._hue=0,this._saturation=100,this._value=100,this._alpha=100;this.doOnChange()}compare(t){const n=new vo({h:t._hue,s:t._saturation/100,v:t._value/100,a:t._alpha/100});return this._tiny.equals(n)}doOnChange(){const{_hue:t,_saturation:n,_value:l,_alpha:a,format:s,enableAlpha:r}=this;let i=s||(r?"rgb":"hex");s==="hex"&&r&&(i="hex8"),this._tiny=new vo({h:t,s:n/100,v:l/100,a:a/100}),this.value=this._isValid?this._tiny.toString(i):""}}const lw=x({props:{colors:{type:Array,required:!0},color:{type:Object,required:!0},enableAlpha:{type:Boolean,required:!0}},setup(e){const t=ue("color-predefine"),{currentColor:n}=we(sf),l=I(s(e.colors,e.color));ie(()=>n.value,r=>{const i=new Ua({value:r});l.value.forEach(u=>{u.selected=i.compare(u)})}),bn(()=>{l.value=s(e.colors,e.color)});function a(r){e.color.fromString(e.colors[r])}function s(r,i){return r.map(u=>{const c=new Ua({value:u});return c.selected=c.compare(i),c})}return{rgbaColors:l,handleSelect:a,ns:t}}});function ow(e,t,n,l,a,s){return _(),V("div",{class:T(e.ns.b())},[F("div",{class:T(e.ns.e("colors"))},[(_(!0),V(Oe,null,ut(e.rgbaColors,(r,i)=>(_(),V("div",{key:e.colors[i],class:T([e.ns.e("color-selector"),e.ns.is("alpha",r.get("alpha")<100),{selected:r.selected}]),onClick:u=>e.handleSelect(i)},[F("div",{style:_e({backgroundColor:r.value})},null,4)],10,["onClick"]))),128))],2)],2)}var aw=fe(lw,[["render",ow],["__file","predefine.vue"]]);const sw=x({name:"ElSlPanel",props:{color:{type:Object,required:!0}},setup(e){const t=ue("color-svpanel"),n=lt(),l=I(0),a=I(0),s=I("hsl(0, 100%, 50%)"),r=y(()=>{const c=e.color.get("hue"),d=e.color.get("value");return{hue:c,value:d}});function i(){const c=e.color.get("saturation"),d=e.color.get("value"),f=n.vnode.el,{clientWidth:m,clientHeight:v}=f;a.value=c*m/100,l.value=(100-d)*v/100,s.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}function u(c){const f=n.vnode.el.getBoundingClientRect(),{clientX:m,clientY:v}=oi(c);let h=m-f.left,p=v-f.top;h=Math.max(0,h),h=Math.min(h,f.width),p=Math.max(0,p),p=Math.min(p,f.height),a.value=h,l.value=p,e.color.set({saturation:h/f.width*100,value:100-p/f.height*100})}return ie(()=>r.value,()=>{i()}),Xe(()=>{Zo(n.vnode.el,{drag:c=>{u(c)},end:c=>{u(c)}}),i()}),{cursorTop:l,cursorLeft:a,background:s,colorValue:r,handleDrag:u,update:i,ns:t}}});function rw(e,t,n,l,a,s){return _(),V("div",{class:T(e.ns.b()),style:_e({backgroundColor:e.background})},[F("div",{class:T(e.ns.e("white"))},null,2),F("div",{class:T(e.ns.e("black"))},null,2),F("div",{class:T(e.ns.e("cursor")),style:_e({top:e.cursorTop+"px",left:e.cursorLeft+"px"})},[F("div")],6)],6)}var iw=fe(sw,[["render",rw],["__file","sv-panel.vue"]]);const uw=x({name:"ElColorPicker"}),cw=x({...uw,props:tw,emits:nw,setup(e,{expose:t,emit:n}){const l=e,{t:a}=pt(),s=ue("color"),{formItem:r}=dn(),i=Gt(),u=fn(),{valueOnClear:c,isEmptyValue:d}=da(l,null),{inputId:f,isLabeledByFormItem:m}=Kn(l,{formItemContext:r}),v=I(),h=I(),p=I(),g=I(),b=I(),E=I(),{isFocused:C,handleFocus:w,handleBlur:k}=Ll(b,{disabled:u,beforeBlur(te){var ce;return(ce=g.value)==null?void 0:ce.isFocusInsideContent(te)},afterBlur(){z(!1),j()}});let S=!0;const $=kt(new Ua({enableAlpha:l.showAlpha,format:l.colorFormat||"",value:l.modelValue})),M=I(!1),R=I(!1),N=I(""),O=y(()=>!l.modelValue&&!R.value?"transparent":L($,l.showAlpha)),P=y(()=>!l.modelValue&&!R.value?"":$.value),W=y(()=>m.value?void 0:l.ariaLabel||a("el.colorpicker.defaultLabel")),K=y(()=>m.value?r==null?void 0:r.labelId:void 0),D=y(()=>[s.b("picker"),s.is("disabled",u.value),s.bm("picker",i.value),s.is("focused",C.value)]);function L(te,ce){const{r:Ie,g:Ae,b:xe,a:Ye}=te.toRgb();return ce?`rgba(${Ie}, ${Ae}, ${xe}, ${Ye})`:`rgb(${Ie}, ${Ae}, ${xe})`}function z(te){M.value=te}const B=Ln(z,100,{leading:!0});function A(){u.value||z(!0)}function ne(){B(!1),j()}function j(){Ee(()=>{l.modelValue?$.fromString(l.modelValue):($.value="",!P.value&&N.value&&(N.value=""),Ee(()=>{R.value=!1}))})}function Q(){u.value||(M.value&&j(),B(!M.value))}function Z(){$.fromString(N.value),$.value!==N.value&&(N.value=$.value)}function ee(){const te=d($.value)?c.value:$.value;n(De,te),n(nt,te),l.validateEvent&&(r==null||r.validate("change").catch(ce=>void 0)),B(!1),Ee(()=>{const ce=new Ua({enableAlpha:l.showAlpha,format:l.colorFormat||"",value:l.modelValue});$.compare(ce)||j()})}function ae(){B(!1),n(De,c.value),n(nt,c.value),l.modelValue!==c.value&&l.validateEvent&&(r==null||r.validate("change").catch(te=>void 0)),j()}function re(){M.value&&(ne(),C.value&&ge())}function le(te){te.preventDefault(),te.stopPropagation(),z(!1),j()}function se(te){switch(te.code){case Ce.enter:case Ce.numpadEnter:case Ce.space:te.preventDefault(),te.stopPropagation(),A(),E.value.focus();break;case Ce.esc:le(te);break}}function ge(){b.value.focus()}function Be(){b.value.blur()}return Xe(()=>{l.modelValue&&(N.value=P.value)}),ie(()=>l.modelValue,te=>{te?te&&te!==$.value&&(S=!1,$.fromString(te)):R.value=!1}),ie(()=>[l.colorFormat,l.showAlpha],()=>{$.enableAlpha=l.showAlpha,$.format=l.colorFormat||$.format,$.doOnChange(),n(De,$.value)}),ie(()=>P.value,te=>{N.value=te,S&&n("activeChange",te),S=!0}),ie(()=>$.value,()=>{!l.modelValue&&!R.value&&(R.value=!0)}),ie(()=>M.value,()=>{Ee(()=>{var te,ce,Ie;(te=v.value)==null||te.update(),(ce=h.value)==null||ce.update(),(Ie=p.value)==null||Ie.update()})}),rt(sf,{currentColor:P}),t({color:$,show:A,hide:ne,focus:ge,blur:Be}),(te,ce)=>(_(),oe(o(un),{ref_key:"popper",ref:g,visible:M.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[o(s).be("picker","panel"),o(s).b("dropdown"),te.popperClass],"stop-popper-mouse-event":!1,effect:"light",trigger:"click",teleported:te.teleported,transition:`${o(s).namespace.value}-zoom-in-top`,persistent:"",onHide:Ie=>z(!1)},{content:U(()=>[We((_(),V("div",{onKeydown:Tt(le,["esc"])},[F("div",{class:T(o(s).be("dropdown","main-wrapper"))},[H(ew,{ref_key:"hue",ref:v,class:"hue-slider",color:o($),vertical:""},null,8,["color"]),H(iw,{ref_key:"sv",ref:h,color:o($)},null,8,["color"])],2),te.showAlpha?(_(),oe(ZC,{key:0,ref_key:"alpha",ref:p,color:o($)},null,8,["color"])):J("v-if",!0),te.predefine?(_(),oe(aw,{key:1,ref:"predefine","enable-alpha":te.showAlpha,color:o($),colors:te.predefine},null,8,["enable-alpha","color","colors"])):J("v-if",!0),F("div",{class:T(o(s).be("dropdown","btns"))},[F("span",{class:T(o(s).be("dropdown","value"))},[H(o(hn),{ref_key:"inputRef",ref:E,modelValue:N.value,"onUpdate:modelValue":Ie=>N.value=Ie,"validate-event":!1,size:"small",onChange:Z},null,8,["modelValue","onUpdate:modelValue"])],2),H(o(on),{class:T(o(s).be("dropdown","link-btn")),text:"",size:"small",onClick:ae},{default:U(()=>[st(pe(o(a)("el.colorpicker.clear")),1)]),_:1},8,["class"]),H(o(on),{plain:"",size:"small",class:T(o(s).be("dropdown","btn")),onClick:ee},{default:U(()=>[st(pe(o(a)("el.colorpicker.confirm")),1)]),_:1},8,["class"])],2)],40,["onKeydown"])),[[o(vl),re,b.value]])]),default:U(()=>[F("div",et({id:o(f),ref_key:"triggerRef",ref:b},te.$attrs,{class:o(D),role:"button","aria-label":o(W),"aria-labelledby":o(K),"aria-description":o(a)("el.colorpicker.description",{color:te.modelValue||""}),"aria-disabled":o(u),tabindex:o(u)?void 0:te.tabindex,onKeydown:se,onFocus:o(w),onBlur:o(k)}),[F("div",{class:T(o(s).be("picker","trigger")),onClick:Q},[F("span",{class:T([o(s).be("picker","color"),o(s).is("alpha",te.showAlpha)])},[F("span",{class:T(o(s).be("picker","color-inner")),style:_e({backgroundColor:o(O)})},[We(H(o(Se),{class:T([o(s).be("picker","icon"),o(s).is("icon-arrow-down")])},{default:U(()=>[H(o(nl))]),_:1},8,["class"]),[[mt,te.modelValue||R.value]]),We(H(o(Se),{class:T([o(s).be("picker","empty"),o(s).is("icon-close")])},{default:U(()=>[H(o(zn))]),_:1},8,["class"]),[[mt,!te.modelValue&&!R.value]])],6)],2)],2)],16,["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex","onFocus","onBlur"])]),_:1},8,["visible","popper-class","teleported","transition","onHide"]))}});var dw=fe(cw,[["__file","color-picker.vue"]]);const fw=He(dw),vw=de({a11y:{type:Boolean,default:!0},locale:{type:Y(Object)},size:Jt,button:{type:Y(Object)},link:{type:Y(Object)},experimentalFeatures:{type:Y(Object)},keyboardNavigation:{type:Boolean,default:!0},message:{type:Y(Object)},zIndex:Number,namespace:{type:String,default:"el"},...Zl}),Rn={},pw=x({name:"ElConfigProvider",props:vw,setup(e,{slots:t}){const n=Wr(e);return ie(()=>e.message,l=>{var a,s;Object.assign(Rn,(s=(a=n==null?void 0:n.value)==null?void 0:a.message)!=null?s:{},l??{})},{immediate:!0,deep:!0}),()=>G(t,"default",{config:n==null?void 0:n.value})}}),hw=He(pw),mw=x({name:"ElContainer"}),gw=x({...mw,props:{direction:{type:String}},setup(e){const t=e,n=Xt(),l=ue("container"),a=y(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(r=>{const i=r.type.name;return i==="ElHeader"||i==="ElFooter"}):!1);return(s,r)=>(_(),V("section",{class:T([o(l).b(),o(l).is("vertical",o(a))])},[G(s.$slots,"default")],2))}});var bw=fe(gw,[["__file","container.vue"]]);const yw=x({name:"ElAside"}),Cw=x({...yw,props:{width:{type:String,default:null}},setup(e){const t=e,n=ue("aside"),l=y(()=>t.width?n.cssVarBlock({width:t.width}):{});return(a,s)=>(_(),V("aside",{class:T(o(n).b()),style:_e(o(l))},[G(a.$slots,"default")],6))}});var rf=fe(Cw,[["__file","aside.vue"]]);const ww=x({name:"ElFooter"}),kw=x({...ww,props:{height:{type:String,default:null}},setup(e){const t=e,n=ue("footer"),l=y(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,s)=>(_(),V("footer",{class:T(o(n).b()),style:_e(o(l))},[G(a.$slots,"default")],6))}});var uf=fe(kw,[["__file","footer.vue"]]);const Sw=x({name:"ElHeader"}),Ew=x({...Sw,props:{height:{type:String,default:null}},setup(e){const t=e,n=ue("header"),l=y(()=>t.height?n.cssVarBlock({height:t.height}):{});return(a,s)=>(_(),V("header",{class:T(o(n).b()),style:_e(o(l))},[G(a.$slots,"default")],6))}});var cf=fe(Ew,[["__file","header.vue"]]);const _w=x({name:"ElMain"}),Tw=x({..._w,setup(e){const t=ue("main");return(n,l)=>(_(),V("main",{class:T(o(t).b())},[G(n.$slots,"default")],2))}});var df=fe(Tw,[["__file","main.vue"]]);const $w=He(bw,{Aside:rf,Footer:uf,Header:cf,Main:df}),Nw=At(rf),Iw=At(uf),Mw=At(cf),Rw=At(df),xu=["hours","minutes","seconds"],gl="EP_PICKER_BASE",ai="ElPopperOptions",Ya="HH:mm:ss",uo="YYYY-MM-DD",Pw={date:uo,dates:uo,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",months:"YYYY-MM",datetime:`${uo} ${Ya}`,monthrange:"YYYY-MM",yearrange:"YYYY",daterange:uo,datetimerange:`${uo} ${Ya}`},ff=de({disabledHours:{type:Y(Function)},disabledMinutes:{type:Y(Function)},disabledSeconds:{type:Y(Function)}}),vf=de({visible:Boolean,actualVisible:{type:Boolean,default:void 0},format:{type:String,default:""}}),si=de({id:{type:Y([Array,String])},name:{type:Y([Array,String])},popperClass:{type:String,default:""},format:String,valueFormat:String,dateFormat:String,timeFormat:String,type:{type:String,default:""},clearable:{type:Boolean,default:!0},clearIcon:{type:Y([String,Object]),default:ml},editable:{type:Boolean,default:!0},prefixIcon:{type:Y([String,Object]),default:""},size:Jt,readonly:Boolean,disabled:Boolean,placeholder:{type:String,default:""},popperOptions:{type:Y(Object),default:()=>({})},modelValue:{type:Y([Date,Array,String,Number]),default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:Y([Date,Array])},defaultTime:{type:Y([Date,Array])},isRange:Boolean,...ff,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,tabindex:{type:Y([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,placement:{type:Y(String),values:Xl,default:"bottom"},fallbackPlacements:{type:Y(Array),default:["bottom","top","right","left"]},...Zl,...cn(["ariaLabel"]),showNow:{type:Boolean,default:!0},showWeekNumber:Boolean}),Ow=de({id:{type:Y(Array)},name:{type:Y(Array)},modelValue:{type:Y([Array,String])},startPlaceholder:String,endPlaceholder:String,disabled:Boolean}),Lw=x({name:"PickerRangeTrigger",inheritAttrs:!1}),Bw=x({...Lw,props:Ow,emits:["mouseenter","mouseleave","click","touchstart","focus","blur","startInput","endInput","startChange","endChange"],setup(e,{expose:t,emit:n}){const l=e,a=bs(),s=ue("date"),r=ue("range"),i=I(),u=I(),{wrapperRef:c,isFocused:d}=Ll(i,{disabled:y(()=>l.disabled)}),f=k=>{n("click",k)},m=k=>{n("mouseenter",k)},v=k=>{n("mouseleave",k)},h=k=>{n("mouseenter",k)},p=k=>{n("startInput",k)},g=k=>{n("endInput",k)},b=k=>{n("startChange",k)},E=k=>{n("endChange",k)};return t({focus:()=>{var k;(k=i.value)==null||k.focus()},blur:()=>{var k,S;(k=i.value)==null||k.blur(),(S=u.value)==null||S.blur()}}),(k,S)=>(_(),V("div",{ref_key:"wrapperRef",ref:c,class:T([o(s).is("active",o(d)),k.$attrs.class]),style:_e(k.$attrs.style),onClick:f,onMouseenter:m,onMouseleave:v,onTouchstartPassive:h},[G(k.$slots,"prefix"),F("input",et(o(a),{id:k.id&&k.id[0],ref_key:"inputRef",ref:i,name:k.name&&k.name[0],placeholder:k.startPlaceholder,value:k.modelValue&&k.modelValue[0],class:o(r).b("input"),disabled:k.disabled,onInput:p,onChange:b}),null,16,["id","name","placeholder","value","disabled"]),G(k.$slots,"range-separator"),F("input",et(o(a),{id:k.id&&k.id[1],ref_key:"endInputRef",ref:u,name:k.name&&k.name[1],placeholder:k.endPlaceholder,value:k.modelValue&&k.modelValue[1],class:o(r).b("input"),disabled:k.disabled,onInput:g,onChange:E}),null,16,["id","name","placeholder","value","disabled"]),G(k.$slots,"suffix")],38))}});var Vw=fe(Bw,[["__file","picker-range-trigger.vue"]]);const Dw=x({name:"Picker"}),Aw=x({...Dw,props:si,emits:[De,nt,"focus","blur","clear","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const l=e,a=pl(),{lang:s}=pt(),r=ue("date"),i=ue("input"),u=ue("range"),{form:c,formItem:d}=dn(),f=we(ai,{}),{valueOnClear:m}=da(l,null),v=I(),h=I(),p=I(!1),g=I(!1),b=I(null);let E=!1;const C=y(()=>l.disabled||!!(c!=null&&c.disabled)),{isFocused:w,handleFocus:k,handleBlur:S}=Ll(h,{disabled:C,beforeFocus(){return l.readonly},afterFocus(){p.value=!0},beforeBlur(q){var be;return!E&&((be=v.value)==null?void 0:be.isFocusInsideContent(q))},afterBlur(){Ze(),p.value=!1,E=!1,l.validateEvent&&(d==null||d.validate("blur").catch(q=>void 0))}}),$=y(()=>[r.b("editor"),r.bm("editor",l.type),i.e("wrapper"),r.is("disabled",C.value),r.is("active",p.value),u.b("editor"),Ye?u.bm("editor",Ye.value):"",a.class]),M=y(()=>[i.e("icon"),u.e("close-icon"),se.value?"":u.e("close-icon--hidden")]);ie(p,q=>{q?Ee(()=>{q&&(b.value=l.modelValue)}):(Pe.value=null,Ee(()=>{R(l.modelValue)}))});const R=(q,be)=>{(be||!$u(q,b.value))&&(n(nt,q),be&&(b.value=q),l.validateEvent&&(d==null||d.validate("change").catch(qe=>void 0)))},N=q=>{if(!$u(l.modelValue,q)){let be;ke(q)?be=q.map(qe=>Iu(qe,l.valueFormat,s.value)):q&&(be=Iu(q,l.valueFormat,s.value)),n(De,q&&be,s.value)}},O=q=>{n("keydown",q)},P=y(()=>h.value?Array.from(h.value.$el.querySelectorAll("input")):[]),W=(q,be,qe)=>{const ft=P.value;ft.length&&(!qe||qe==="min"?(ft[0].setSelectionRange(q,be),ft[0].focus()):qe==="max"&&(ft[1].setSelectionRange(q,be),ft[1].focus()))},K=(q="",be=!1)=>{p.value=be;let qe;ke(q)?qe=q.map(ft=>ft.toDate()):qe=q&&q.toDate(),Pe.value=null,N(qe)},D=()=>{g.value=!0},L=()=>{n("visible-change",!0)},z=()=>{g.value=!1,p.value=!1,n("visible-change",!1)},B=()=>{p.value=!0},A=()=>{p.value=!1},ne=y(()=>{let q;if(Be.value?St.value.getDefaultValue&&(q=St.value.getDefaultValue()):ke(l.modelValue)?q=l.modelValue.map(be=>Nu(be,l.valueFormat,s.value)):q=Nu(l.modelValue,l.valueFormat,s.value),St.value.getRangeAvailableTime){const be=St.value.getRangeAvailableTime(q);tn(be,q)||(q=be,Be.value||N(Ta(q)))}return ke(q)&&q.some(be=>!be)&&(q=[]),q}),j=y(()=>{if(!St.value.panelReady)return"";const q=at(ne.value);return ke(Pe.value)?[Pe.value[0]||q&&q[0]||"",Pe.value[1]||q&&q[1]||""]:Pe.value!==null?Pe.value:!Z.value&&Be.value||!p.value&&Be.value?"":q?ee.value||ae.value||re.value?q.join(", "):q:""}),Q=y(()=>l.type.includes("time")),Z=y(()=>l.type.startsWith("time")),ee=y(()=>l.type==="dates"),ae=y(()=>l.type==="months"),re=y(()=>l.type==="years"),le=y(()=>l.prefixIcon||(Q.value?id:Wh)),se=I(!1),ge=q=>{l.readonly||C.value||(se.value&&(q.stopPropagation(),St.value.handleClear?St.value.handleClear():N(m.value),R(m.value,!0),se.value=!1,z()),n("clear"))},Be=y(()=>{const{modelValue:q}=l;return!q||ke(q)&&!q.filter(Boolean).length}),te=async q=>{var be;l.readonly||C.value||(((be=q.target)==null?void 0:be.tagName)!=="INPUT"||w.value)&&(p.value=!0)},ce=()=>{l.readonly||C.value||!Be.value&&l.clearable&&(se.value=!0)},Ie=()=>{se.value=!1},Ae=q=>{var be;l.readonly||C.value||(((be=q.touches[0].target)==null?void 0:be.tagName)!=="INPUT"||w.value)&&(p.value=!0)},xe=y(()=>l.type.includes("range")),Ye=Gt(),$e=y(()=>{var q,be;return(be=(q=o(v))==null?void 0:q.popperRef)==null?void 0:be.contentRef}),Me=zr(h,q=>{const be=o($e),qe=ua(h);be&&(q.target===be||q.composedPath().includes(be))||q.target===qe||qe&&q.composedPath().includes(qe)||(p.value=!1)});Nt(()=>{Me==null||Me()});const Pe=I(null),Ze=()=>{if(Pe.value){const q=ot(j.value);q&&ct(q)&&(N(Ta(q)),Pe.value=null)}Pe.value===""&&(N(m.value),R(m.value,!0),Pe.value=null)},ot=q=>q?St.value.parseUserInput(q):null,at=q=>q?St.value.formatToString(q):null,ct=q=>St.value.isValidValue(q),ye=async q=>{if(l.readonly||C.value)return;const{code:be}=q;if(O(q),be===Ce.esc){p.value===!0&&(p.value=!1,q.preventDefault(),q.stopPropagation());return}if(be===Ce.down&&(St.value.handleFocusPicker&&(q.preventDefault(),q.stopPropagation()),p.value===!1&&(p.value=!0,await Ee()),St.value.handleFocusPicker)){St.value.handleFocusPicker();return}if(be===Ce.tab){E=!0;return}if(be===Ce.enter||be===Ce.numpadEnter){(Pe.value===null||Pe.value===""||ct(ot(j.value)))&&(Ze(),p.value=!1),q.stopPropagation();return}if(Pe.value){q.stopPropagation();return}St.value.handleKeydownInput&&St.value.handleKeydownInput(q)},Ue=q=>{Pe.value=q,p.value||(p.value=!0)},It=q=>{const be=q.target;Pe.value?Pe.value=[be.value,Pe.value[1]]:Pe.value=[be.value,null]},Ot=q=>{const be=q.target;Pe.value?Pe.value=[Pe.value[0],be.value]:Pe.value=[null,be.value]},Rt=()=>{var q;const be=Pe.value,qe=ot(be&&be[0]),ft=o(ne);if(qe&&qe.isValid()){Pe.value=[at(qe),((q=j.value)==null?void 0:q[1])||null];const Pt=[qe,ft&&(ft[1]||null)];ct(Pt)&&(N(Ta(Pt)),Pe.value=null)}},Mt=()=>{var q;const be=o(Pe),qe=ot(be&&be[1]),ft=o(ne);if(qe&&qe.isValid()){Pe.value=[((q=o(j))==null?void 0:q[0])||null,at(qe)];const Pt=[ft&&ft[0],qe];ct(Pt)&&(N(Ta(Pt)),Pe.value=null)}},St=I({}),je=q=>{St.value[q[0]]=q[1],St.value.panelReady=!0},tt=q=>{n("calendar-change",q)},it=(q,be,qe)=>{n("panel-change",q,be,qe)},X=()=>{var q;(q=h.value)==null||q.focus()},ve=()=>{var q;(q=h.value)==null||q.blur()};return rt(gl,{props:l}),t({focus:X,blur:ve,handleOpen:B,handleClose:A,onPick:K}),(q,be)=>(_(),oe(o(un),et({ref_key:"refPopper",ref:v,visible:p.value,effect:"light",pure:"",trigger:"click"},q.$attrs,{role:"dialog",teleported:"",transition:`${o(r).namespace.value}-zoom-in-top`,"popper-class":[`${o(r).namespace.value}-picker__popper`,q.popperClass],"popper-options":o(f),"fallback-placements":q.fallbackPlacements,"gpu-acceleration":!1,placement:q.placement,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:D,onShow:L,onHide:z}),{default:U(()=>[o(xe)?(_(),oe(Vw,{key:1,id:q.id,ref_key:"inputRef",ref:h,"model-value":o(j),name:q.name,disabled:o(C),readonly:!q.editable||q.readonly,"start-placeholder":q.startPlaceholder,"end-placeholder":q.endPlaceholder,class:T(o($)),style:_e(q.$attrs.style),"aria-label":q.ariaLabel,tabindex:q.tabindex,autocomplete:"off",role:"combobox",onClick:te,onFocus:o(k),onBlur:o(S),onStartInput:It,onStartChange:Rt,onEndInput:Ot,onEndChange:Mt,onMousedown:te,onMouseenter:ce,onMouseleave:Ie,onTouchstartPassive:Ae,onKeydown:ye},{prefix:U(()=>[o(le)?(_(),oe(o(Se),{key:0,class:T([o(i).e("icon"),o(u).e("icon")])},{default:U(()=>[(_(),oe(Ge(o(le))))]),_:1},8,["class"])):J("v-if",!0)]),"range-separator":U(()=>[G(q.$slots,"range-separator",{},()=>[F("span",{class:T(o(u).b("separator"))},pe(q.rangeSeparator),3)])]),suffix:U(()=>[q.clearIcon?(_(),oe(o(Se),{key:0,class:T(o(M)),onMousedown:Le(o(Bt),["prevent"]),onClick:ge},{default:U(()=>[(_(),oe(Ge(q.clearIcon)))]),_:1},8,["class","onMousedown"])):J("v-if",!0)]),_:3},8,["id","model-value","name","disabled","readonly","start-placeholder","end-placeholder","class","style","aria-label","tabindex","onFocus","onBlur"])):(_(),oe(o(hn),{key:0,id:q.id,ref_key:"inputRef",ref:h,"container-role":"combobox","model-value":o(j),name:q.name,size:o(Ye),disabled:o(C),placeholder:q.placeholder,class:T([o(r).b("editor"),o(r).bm("editor",q.type),q.$attrs.class]),style:_e(q.$attrs.style),readonly:!q.editable||q.readonly||o(ee)||o(ae)||o(re)||q.type==="week","aria-label":q.ariaLabel,tabindex:q.tabindex,"validate-event":!1,onInput:Ue,onFocus:o(k),onBlur:o(S),onKeydown:ye,onChange:Ze,onMousedown:te,onMouseenter:ce,onMouseleave:Ie,onTouchstartPassive:Ae,onClick:Le(()=>{},["stop"])},{prefix:U(()=>[o(le)?(_(),oe(o(Se),{key:0,class:T(o(i).e("icon")),onMousedown:Le(te,["prevent"]),onTouchstartPassive:Ae},{default:U(()=>[(_(),oe(Ge(o(le))))]),_:1},8,["class","onMousedown"])):J("v-if",!0)]),suffix:U(()=>[se.value&&q.clearIcon?(_(),oe(o(Se),{key:0,class:T(`${o(i).e("icon")} clear-icon`),onMousedown:Le(o(Bt),["prevent"]),onClick:ge},{default:U(()=>[(_(),oe(Ge(q.clearIcon)))]),_:1},8,["class","onMousedown"])):J("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","aria-label","tabindex","onFocus","onBlur","onClick"]))]),content:U(()=>[G(q.$slots,"default",{visible:p.value,actualVisible:g.value,parsedValue:o(ne),format:q.format,dateFormat:q.dateFormat,timeFormat:q.timeFormat,unlinkPanels:q.unlinkPanels,type:q.type,defaultValue:q.defaultValue,showNow:q.showNow,showWeekNumber:q.showWeekNumber,onPick:K,onSelectRange:W,onSetPickerOption:je,onCalendarChange:tt,onPanelChange:it,onMousedown:Le(()=>{},["stop"])})]),_:3},16,["visible","transition","popper-class","popper-options","fallback-placements","placement"]))}});var pf=fe(Aw,[["__file","picker.vue"]]);const Fw=de({...vf,datetimeRole:String,parsedValue:{type:Y(Object)}}),hf=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const l=(r,i,u,c)=>{const d={hour:e,minute:t,second:n};let f=r;return["hour","minute","second"].forEach(m=>{if(d[m]){let v;const h=d[m];switch(m){case"minute":{v=h(f.hour(),i,c);break}case"second":{v=h(f.hour(),f.minute(),i,c);break}default:{v=h(i,c);break}}if(v!=null&&v.length&&!v.includes(f[m]())){const p=u?0:v.length-1;f=f[m](v[p])}}}),f},a={};return{timePickerOptions:a,getAvailableTime:l,onSetOption:([r,i])=>{a[r]=i}}},Ws=e=>{const t=(l,a)=>l||a,n=l=>l!==!0;return e.map(t).filter(n)},mf=(e,t,n)=>({getHoursList:(r,i)=>zs(24,e&&(()=>e==null?void 0:e(r,i))),getMinutesList:(r,i,u)=>zs(60,t&&(()=>t==null?void 0:t(r,i,u))),getSecondsList:(r,i,u,c)=>zs(60,n&&(()=>n==null?void 0:n(r,i,u,c)))}),gf=(e,t,n)=>{const{getHoursList:l,getMinutesList:a,getSecondsList:s}=mf(e,t,n);return{getAvailableHours:(c,d)=>Ws(l(c,d)),getAvailableMinutes:(c,d,f)=>Ws(a(c,d,f)),getAvailableSeconds:(c,d,f,m)=>Ws(s(c,d,f,m))}},bf=e=>{const t=I(e.parsedValue);return ie(()=>e.visible,n=>{n||(t.value=e.parsedValue)}),t},xw=de({role:{type:String,required:!0},spinnerDate:{type:Y(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:Y(String),default:""},...ff}),zw=100,Hw=600,qa={beforeMount(e,t){const n=t.value,{interval:l=zw,delay:a=Hw}=Qe(n)?{}:n;let s,r;const i=()=>Qe(n)?n():n.handler(),u=()=>{r&&(clearTimeout(r),r=void 0),s&&(clearInterval(s),s=void 0)};e.addEventListener("mousedown",c=>{c.button===0&&(u(),i(),document.addEventListener("mouseup",()=>u(),{once:!0}),r=setTimeout(()=>{s=setInterval(()=>{i()},l)},a))})}},Kw=x({__name:"basic-time-spinner",props:xw,emits:[nt,"select-range","set-option"],setup(e,{emit:t}){const n=e,l=we(gl),{isRange:a,format:s}=l.props,r=ue("time"),{getHoursList:i,getMinutesList:u,getSecondsList:c}=mf(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let d=!1;const f=I(),m=I(),v=I(),h=I(),p={hours:m,minutes:v,seconds:h},g=y(()=>n.showSeconds?xu:xu.slice(0,2)),b=y(()=>{const{spinnerDate:Q}=n,Z=Q.hour(),ee=Q.minute(),ae=Q.second();return{hours:Z,minutes:ee,seconds:ae}}),E=y(()=>{const{hours:Q,minutes:Z}=o(b),{role:ee,spinnerDate:ae}=n,re=a?void 0:ae;return{hours:i(ee,re),minutes:u(Q,ee,re),seconds:c(Q,Z,ee,re)}}),C=y(()=>{const{hours:Q,minutes:Z,seconds:ee}=o(b);return{hours:xs(Q,23),minutes:xs(Z,59),seconds:xs(ee,59)}}),w=Ln(Q=>{d=!1,$(Q)},200),k=Q=>{if(!!!n.amPmMode)return"";const ee=n.amPmMode==="A";let ae=Q<12?" am":" pm";return ee&&(ae=ae.toUpperCase()),ae},S=Q=>{let Z=[0,0];if(!s||s===Ya)switch(Q){case"hours":Z=[0,2];break;case"minutes":Z=[3,5];break;case"seconds":Z=[6,8];break}const[ee,ae]=Z;t("select-range",ee,ae),f.value=Q},$=Q=>{N(Q,o(b)[Q])},M=()=>{$("hours"),$("minutes"),$("seconds")},R=Q=>Q.querySelector(`.${r.namespace.value}-scrollbar__wrap`),N=(Q,Z)=>{if(n.arrowControl)return;const ee=o(p[Q]);ee&&ee.$el&&(R(ee.$el).scrollTop=Math.max(0,Z*O(Q)))},O=Q=>{const Z=o(p[Q]),ee=Z==null?void 0:Z.$el.querySelector("li");return ee&&Number.parseFloat(rl(ee,"height"))||0},P=()=>{K(1)},W=()=>{K(-1)},K=Q=>{f.value||S("hours");const Z=f.value,ee=o(b)[Z],ae=f.value==="hours"?24:60,re=D(Z,ee,Q,ae);L(Z,re),N(Z,re),Ee(()=>S(Z))},D=(Q,Z,ee,ae)=>{let re=(Z+ee+ae)%ae;const le=o(E)[Q];for(;le[re]&&re!==Z;)re=(re+ee+ae)%ae;return re},L=(Q,Z)=>{if(o(E)[Q][Z])return;const{hours:re,minutes:le,seconds:se}=o(b);let ge;switch(Q){case"hours":ge=n.spinnerDate.hour(Z).minute(le).second(se);break;case"minutes":ge=n.spinnerDate.hour(re).minute(Z).second(se);break;case"seconds":ge=n.spinnerDate.hour(re).minute(le).second(Z);break}t(nt,ge)},z=(Q,{value:Z,disabled:ee})=>{ee||(L(Q,Z),S(Q),N(Q,Z))},B=Q=>{const Z=o(p[Q]);if(!Z)return;d=!0,w(Q);const ee=Math.min(Math.round((R(Z.$el).scrollTop-(A(Q)*.5-10)/O(Q)+3)/O(Q)),Q==="hours"?23:59);L(Q,ee)},A=Q=>o(p[Q]).$el.offsetHeight,ne=()=>{const Q=Z=>{const ee=o(p[Z]);ee&&ee.$el&&(R(ee.$el).onscroll=()=>{B(Z)})};Q("hours"),Q("minutes"),Q("seconds")};Xe(()=>{Ee(()=>{!n.arrowControl&&ne(),M(),n.role==="start"&&S("hours")})});const j=(Q,Z)=>{p[Z].value=Q??void 0};return t("set-option",[`${n.role}_scrollDown`,K]),t("set-option",[`${n.role}_emitSelectRange`,S]),ie(()=>n.spinnerDate,()=>{d||M()}),(Q,Z)=>(_(),V("div",{class:T([o(r).b("spinner"),{"has-seconds":Q.showSeconds}])},[Q.arrowControl?J("v-if",!0):(_(!0),V(Oe,{key:0},ut(o(g),ee=>(_(),oe(o(jn),{key:ee,ref_for:!0,ref:ae=>j(ae,ee),class:T(o(r).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":o(r).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:ae=>S(ee),onMousemove:ae=>$(ee)},{default:U(()=>[(_(!0),V(Oe,null,ut(o(E)[ee],(ae,re)=>(_(),V("li",{key:re,class:T([o(r).be("spinner","item"),o(r).is("active",re===o(b)[ee]),o(r).is("disabled",ae)]),onClick:le=>z(ee,{value:re,disabled:ae})},[ee==="hours"?(_(),V(Oe,{key:0},[st(pe(("0"+(Q.amPmMode?re%12||12:re)).slice(-2))+pe(k(re)),1)],64)):(_(),V(Oe,{key:1},[st(pe(("0"+re).slice(-2)),1)],64))],10,["onClick"]))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),Q.arrowControl?(_(!0),V(Oe,{key:1},ut(o(g),ee=>(_(),V("div",{key:ee,class:T([o(r).be("spinner","wrapper"),o(r).is("arrow")]),onMouseenter:ae=>S(ee)},[We((_(),oe(o(Se),{class:T(["arrow-up",o(r).be("spinner","arrow")])},{default:U(()=>[H(o(hs))]),_:1},8,["class"])),[[o(qa),W]]),We((_(),oe(o(Se),{class:T(["arrow-down",o(r).be("spinner","arrow")])},{default:U(()=>[H(o(nl))]),_:1},8,["class"])),[[o(qa),P]]),F("ul",{class:T(o(r).be("spinner","list"))},[(_(!0),V(Oe,null,ut(o(C)[ee],(ae,re)=>(_(),V("li",{key:re,class:T([o(r).be("spinner","item"),o(r).is("active",ae===o(b)[ee]),o(r).is("disabled",o(E)[ee][ae])])},[o(Te)(ae)?(_(),V(Oe,{key:0},[ee==="hours"?(_(),V(Oe,{key:0},[st(pe(("0"+(Q.amPmMode?ae%12||12:ae)).slice(-2))+pe(k(ae)),1)],64)):(_(),V(Oe,{key:1},[st(pe(("0"+ae).slice(-2)),1)],64))],64)):J("v-if",!0)],2))),128))],2)],42,["onMouseenter"]))),128)):J("v-if",!0)],2))}});var fr=fe(Kw,[["__file","basic-time-spinner.vue"]]);const Ww=x({__name:"panel-time-pick",props:Fw,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,l=we(gl),{arrowControl:a,disabledHours:s,disabledMinutes:r,disabledSeconds:i,defaultValue:u}=l.props,{getAvailableHours:c,getAvailableMinutes:d,getAvailableSeconds:f}=gf(s,r,i),m=ue("time"),{t:v,lang:h}=pt(),p=I([0,2]),g=bf(n),b=y(()=>vt(n.actualVisible)?`${m.namespace.value}-zoom-in-top`:""),E=y(()=>n.format.includes("ss")),C=y(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),w=B=>{const A=Ke(B).locale(h.value),ne=K(A);return A.isSame(ne)},k=()=>{t("pick",g.value,!1)},S=(B=!1,A=!1)=>{A||t("pick",n.parsedValue,B)},$=B=>{if(!n.visible)return;const A=K(B).millisecond(0);t("pick",A,!0)},M=(B,A)=>{t("select-range",B,A),p.value=[B,A]},R=B=>{const A=[0,3].concat(E.value?[6]:[]),ne=["hours","minutes"].concat(E.value?["seconds"]:[]),Q=(A.indexOf(p.value[0])+B+A.length)%A.length;O.start_emitSelectRange(ne[Q])},N=B=>{const A=B.code,{left:ne,right:j,up:Q,down:Z}=Ce;if([ne,j].includes(A)){R(A===ne?-1:1),B.preventDefault();return}if([Q,Z].includes(A)){const ee=A===Q?-1:1;O.start_scrollDown(ee),B.preventDefault();return}},{timePickerOptions:O,onSetOption:P,getAvailableTime:W}=hf({getAvailableHours:c,getAvailableMinutes:d,getAvailableSeconds:f}),K=B=>W(B,n.datetimeRole||"",!0),D=B=>B?Ke(B,n.format).locale(h.value):null,L=B=>B?B.format(n.format):null,z=()=>Ke(u).locale(h.value);return t("set-picker-option",["isValidValue",w]),t("set-picker-option",["formatToString",L]),t("set-picker-option",["parseUserInput",D]),t("set-picker-option",["handleKeydownInput",N]),t("set-picker-option",["getRangeAvailableTime",K]),t("set-picker-option",["getDefaultValue",z]),(B,A)=>(_(),oe(an,{name:o(b)},{default:U(()=>[B.actualVisible||B.visible?(_(),V("div",{key:0,class:T(o(m).b("panel"))},[F("div",{class:T([o(m).be("panel","content"),{"has-seconds":o(E)}])},[H(fr,{ref:"spinner",role:B.datetimeRole||"start","arrow-control":o(a),"show-seconds":o(E),"am-pm-mode":o(C),"spinner-date":B.parsedValue,"disabled-hours":o(s),"disabled-minutes":o(r),"disabled-seconds":o(i),onChange:$,onSetOption:o(P),onSelectRange:M},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),F("div",{class:T(o(m).be("panel","footer"))},[F("button",{type:"button",class:T([o(m).be("panel","btn"),"cancel"]),onClick:k},pe(o(v)("el.datepicker.cancel")),3),F("button",{type:"button",class:T([o(m).be("panel","btn"),"confirm"]),onClick:ne=>S()},pe(o(v)("el.datepicker.confirm")),11,["onClick"])],2)],2)):J("v-if",!0)]),_:1},8,["name"]))}});var Ga=fe(Ww,[["__file","panel-time-pick.vue"]]);const jw=de({...vf,parsedValue:{type:Y(Array)}}),Uw=x({__name:"panel-time-range",props:jw,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,l=(te,ce)=>{const Ie=[];for(let Ae=te;Ae<=ce;Ae++)Ie.push(Ae);return Ie},{t:a,lang:s}=pt(),r=ue("time"),i=ue("picker"),u=we(gl),{arrowControl:c,disabledHours:d,disabledMinutes:f,disabledSeconds:m,defaultValue:v}=u.props,h=y(()=>[r.be("range-picker","body"),r.be("panel","content"),r.is("arrow",c),w.value?"has-seconds":""]),p=y(()=>[r.be("range-picker","body"),r.be("panel","content"),r.is("arrow",c),w.value?"has-seconds":""]),g=y(()=>n.parsedValue[0]),b=y(()=>n.parsedValue[1]),E=bf(n),C=()=>{t("pick",E.value,!1)},w=y(()=>n.format.includes("ss")),k=y(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),S=(te=!1)=>{t("pick",[g.value,b.value],te)},$=te=>{N(te.millisecond(0),b.value)},M=te=>{N(g.value,te.millisecond(0))},R=te=>{const ce=te.map(Ae=>Ke(Ae).locale(s.value)),Ie=j(ce);return ce[0].isSame(Ie[0])&&ce[1].isSame(Ie[1])},N=(te,ce)=>{n.visible&&t("pick",[te,ce],!0)},O=y(()=>g.value>b.value),P=I([0,2]),W=(te,ce)=>{t("select-range",te,ce,"min"),P.value=[te,ce]},K=y(()=>w.value?11:8),D=(te,ce)=>{t("select-range",te,ce,"max");const Ie=o(K);P.value=[te+Ie,ce+Ie]},L=te=>{const ce=w.value?[0,3,6,11,14,17]:[0,3,8,11],Ie=["hours","minutes"].concat(w.value?["seconds"]:[]),xe=(ce.indexOf(P.value[0])+te+ce.length)%ce.length,Ye=ce.length/2;xe{const ce=te.code,{left:Ie,right:Ae,up:xe,down:Ye}=Ce;if([Ie,Ae].includes(ce)){L(ce===Ie?-1:1),te.preventDefault();return}if([xe,Ye].includes(ce)){const $e=ce===xe?-1:1,Me=P.value[0]{const Ie=d?d(te):[],Ae=te==="start",Ye=(ce||(Ae?b.value:g.value)).hour(),$e=Ae?l(Ye+1,23):l(0,Ye-1);return Ds(Ie,$e)},A=(te,ce,Ie)=>{const Ae=f?f(te,ce):[],xe=ce==="start",Ye=Ie||(xe?b.value:g.value),$e=Ye.hour();if(te!==$e)return Ae;const Me=Ye.minute(),Pe=xe?l(Me+1,59):l(0,Me-1);return Ds(Ae,Pe)},ne=(te,ce,Ie,Ae)=>{const xe=m?m(te,ce,Ie):[],Ye=Ie==="start",$e=Ae||(Ye?b.value:g.value),Me=$e.hour(),Pe=$e.minute();if(te!==Me||ce!==Pe)return xe;const Ze=$e.second(),ot=Ye?l(Ze+1,59):l(0,Ze-1);return Ds(xe,ot)},j=([te,ce])=>[re(te,"start",!0,ce),re(ce,"end",!1,te)],{getAvailableHours:Q,getAvailableMinutes:Z,getAvailableSeconds:ee}=gf(B,A,ne),{timePickerOptions:ae,getAvailableTime:re,onSetOption:le}=hf({getAvailableHours:Q,getAvailableMinutes:Z,getAvailableSeconds:ee}),se=te=>te?ke(te)?te.map(ce=>Ke(ce,n.format).locale(s.value)):Ke(te,n.format).locale(s.value):null,ge=te=>te?ke(te)?te.map(ce=>ce.format(n.format)):te.format(n.format):null,Be=()=>{if(ke(v))return v.map(ce=>Ke(ce).locale(s.value));const te=Ke(v).locale(s.value);return[te,te.add(60,"m")]};return t("set-picker-option",["formatToString",ge]),t("set-picker-option",["parseUserInput",se]),t("set-picker-option",["isValidValue",R]),t("set-picker-option",["handleKeydownInput",z]),t("set-picker-option",["getDefaultValue",Be]),t("set-picker-option",["getRangeAvailableTime",j]),(te,ce)=>te.actualVisible?(_(),V("div",{key:0,class:T([o(r).b("range-picker"),o(i).b("panel")])},[F("div",{class:T(o(r).be("range-picker","content"))},[F("div",{class:T(o(r).be("range-picker","cell"))},[F("div",{class:T(o(r).be("range-picker","header"))},pe(o(a)("el.datepicker.startTime")),3),F("div",{class:T(o(h))},[H(fr,{ref:"minSpinner",role:"start","show-seconds":o(w),"am-pm-mode":o(k),"arrow-control":o(c),"spinner-date":o(g),"disabled-hours":B,"disabled-minutes":A,"disabled-seconds":ne,onChange:$,onSetOption:o(le),onSelectRange:W},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),F("div",{class:T(o(r).be("range-picker","cell"))},[F("div",{class:T(o(r).be("range-picker","header"))},pe(o(a)("el.datepicker.endTime")),3),F("div",{class:T(o(p))},[H(fr,{ref:"maxSpinner",role:"end","show-seconds":o(w),"am-pm-mode":o(k),"arrow-control":o(c),"spinner-date":o(b),"disabled-hours":B,"disabled-minutes":A,"disabled-seconds":ne,onChange:M,onSetOption:o(le),onSelectRange:D},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),F("div",{class:T(o(r).be("panel","footer"))},[F("button",{type:"button",class:T([o(r).be("panel","btn"),"cancel"]),onClick:Ie=>C()},pe(o(a)("el.datepicker.cancel")),11,["onClick"]),F("button",{type:"button",class:T([o(r).be("panel","btn"),"confirm"]),disabled:o(O),onClick:Ie=>S()},pe(o(a)("el.datepicker.confirm")),11,["disabled","onClick"])],2)],2)):J("v-if",!0)}});var Yw=fe(Uw,[["__file","panel-time-range.vue"]]);Ke.extend(Hr);var qw=x({name:"ElTimePicker",install:null,props:{...si,isRange:Boolean},emits:[De],setup(e,t){const n=I(),[l,a]=e.isRange?["timerange",Yw]:["time",Ga],s=r=>t.emit(De,r);return rt(ai,e.popperOptions),t.expose({focus:()=>{var r;(r=n.value)==null||r.focus()},blur:()=>{var r;(r=n.value)==null||r.blur()},handleOpen:()=>{var r;(r=n.value)==null||r.handleOpen()},handleClose:()=>{var r;(r=n.value)==null||r.handleClose()}}),()=>{var r;const i=(r=e.format)!=null?r:Ya;return H(pf,et(e,{ref:n,type:l,format:i,"onUpdate:modelValue":s}),{default:u=>H(a,u,null)})}}});const Gw=He(qw),ri=Symbol(),ma="ElIsDefaultFormat",Xw=de({...si,type:{type:Y(String),default:"date"}}),Zw=["date","dates","year","years","month","months","week","range"],ii=de({disabledDate:{type:Y(Function)},date:{type:Y(Object),required:!0},minDate:{type:Y(Object)},maxDate:{type:Y(Object)},parsedValue:{type:Y([Object,Array])},rangeState:{type:Y(Object),default:()=>({endDate:null,selecting:!1})}}),yf=de({type:{type:Y(String),required:!0,values:N0},dateFormat:String,timeFormat:String,showNow:{type:Boolean,default:!0},showWeekNumber:Boolean}),ui=de({unlinkPanels:Boolean,visible:Boolean,parsedValue:{type:Y(Array)}}),ci=e=>({type:String,values:Zw,default:e}),Jw=de({...yf,parsedValue:{type:Y([Object,Array])},visible:{type:Boolean},format:{type:String,default:""}}),Jo=e=>{if(!ke(e))return!1;const[t,n]=e;return Ke.isDayjs(t)&&Ke.isDayjs(n)&&Ke(t).isValid()&&Ke(n).isValid()&&t.isSameOrBefore(n)},Es=(e,{lang:t,step:n=1,unit:l,unlinkPanels:a})=>{let s;if(ke(e)){let[r,i]=e.map(u=>Ke(u).locale(t));return a||(i=r.add(n,l)),[r,i]}else e?s=Ke(e):s=Ke();return s=s.locale(t),[s,s.add(n,l)]},Qw=(e,t,{columnIndexOffset:n,startDate:l,nextEndDate:a,now:s,unit:r,relativeDateGetter:i,setCellMetadata:u,setRowMetadata:c})=>{for(let d=0;d{const a=Ke().locale(l).startOf("month").month(n).year(t).hour(e.hour()).minute(e.minute()).second(e.second()),s=a.daysInMonth();return Nl(s).map(r=>a.add(r,"day").toDate())},Eo=(e,t,n,l,a)=>{const s=Ke().year(t).month(n).startOf("month").hour(e.hour()).minute(e.minute()).second(e.second()),r=Xa(e,t,n,l).find(i=>!(a!=null&&a(i)));return r?Ke(r).locale(l):s.locale(l)},Za=(e,t,n)=>{const l=e.year();if(!(n!=null&&n(e.toDate())))return e.locale(t);const a=e.month();if(!Xa(e,l,a,t).every(n))return Eo(e,l,a,t,n);for(let s=0;s<12;s++)if(!Xa(e,l,s,t).every(n))return Eo(e,l,s,t,n);return e},_o=(e,t,n,l)=>{if(ke(e))return e.map(a=>_o(a,t,n,l));if(Ve(e)){const a=l.value?Ke(e):Ke(e,t);if(!a.isValid())return a}return Ke(e,t).locale(n)},e1=de({...ii,cellClassName:{type:Y(Function)},showWeekNumber:Boolean,selectionMode:ci("date")}),t1=["changerange","pick","select"],vr=(e="")=>["normal","today"].includes(e),n1=(e,t)=>{const{lang:n}=pt(),l=I(),a=I(),s=I(),r=I(),i=I([[],[],[],[],[],[]]);let u=!1;const c=e.date.$locale().weekStart||7,d=e.date.locale("en").localeData().weekdaysShort().map(A=>A.toLowerCase()),f=y(()=>c>3?7-c:-c),m=y(()=>{const A=e.date.startOf("month");return A.subtract(A.day()||7,"day")}),v=y(()=>d.concat(d).slice(c,c+7)),h=y(()=>Gp(o(w)).some(A=>A.isCurrent)),p=y(()=>{const A=e.date.startOf("month"),ne=A.day()||7,j=A.daysInMonth(),Q=A.subtract(1,"month").daysInMonth();return{startOfMonthDay:ne,dateCountOfMonth:j,dateCountOfLastMonth:Q}}),g=y(()=>e.selectionMode==="dates"?En(e.parsedValue):[]),b=(A,{count:ne,rowIndex:j,columnIndex:Q})=>{const{startOfMonthDay:Z,dateCountOfMonth:ee,dateCountOfLastMonth:ae}=o(p),re=o(f);if(j>=0&&j<=1){const le=Z+re<0?7+Z+re:Z+re;if(Q+j*7>=le)return A.text=ne,!0;A.text=ae-(le-Q%7)+1+j*7,A.type="prev-month"}else return ne<=ee?A.text=ne:(A.text=ne-ee,A.type="next-month"),!0;return!1},E=(A,{columnIndex:ne,rowIndex:j},Q)=>{const{disabledDate:Z,cellClassName:ee}=e,ae=o(g),re=b(A,{count:Q,rowIndex:j,columnIndex:ne}),le=A.dayjs.toDate();return A.selected=ae.find(se=>se.isSame(A.dayjs,"day")),A.isSelected=!!A.selected,A.isCurrent=S(A),A.disabled=Z==null?void 0:Z(le),A.customClass=ee==null?void 0:ee(le),re},C=A=>{if(e.selectionMode==="week"){const[ne,j]=e.showWeekNumber?[1,7]:[0,6],Q=B(A[ne+1]);A[ne].inRange=Q,A[ne].start=Q,A[j].inRange=Q,A[j].end=Q}},w=y(()=>{const{minDate:A,maxDate:ne,rangeState:j,showWeekNumber:Q}=e,Z=o(f),ee=o(i),ae="day";let re=1;if(Qw({row:6,column:7},ee,{startDate:A,columnIndexOffset:Q?1:0,nextEndDate:j.endDate||ne||j.selecting&&A||null,now:Ke().locale(o(n)).startOf(ae),unit:ae,relativeDateGetter:le=>o(m).add(le-Z,ae),setCellMetadata:(...le)=>{E(...le,re)&&(re+=1)},setRowMetadata:C}),Q)for(let le=0;le<6;le++)ee[le][1].dayjs&&(ee[le][0]={type:"week",text:ee[le][1].dayjs.week()});return ee});ie(()=>e.date,async()=>{var A;(A=o(l))!=null&&A.contains(document.activeElement)&&(await Ee(),await k())});const k=async()=>{var A;return(A=o(a))==null?void 0:A.focus()},S=A=>e.selectionMode==="date"&&vr(A.type)&&$(A,e.parsedValue),$=(A,ne)=>ne?Ke(ne).locale(o(n)).isSame(e.date.date(Number(A.text)),"day"):!1,M=(A,ne)=>{const j=A*7+(ne-(e.showWeekNumber?1:0))-o(f);return o(m).add(j,"day")},R=A=>{var ne;if(!e.rangeState.selecting)return;let j=A.target;if(j.tagName==="SPAN"&&(j=(ne=j.parentNode)==null?void 0:ne.parentNode),j.tagName==="DIV"&&(j=j.parentNode),j.tagName!=="TD")return;const Q=j.parentNode.rowIndex-1,Z=j.cellIndex;o(w)[Q][Z].disabled||(Q!==o(s)||Z!==o(r))&&(s.value=Q,r.value=Z,t("changerange",{selecting:!0,endDate:M(Q,Z)}))},N=A=>!o(h)&&(A==null?void 0:A.text)===1&&A.type==="normal"||A.isCurrent,O=A=>{u||o(h)||e.selectionMode!=="date"||z(A,!0)},P=A=>{A.target.closest("td")&&(u=!0)},W=A=>{A.target.closest("td")&&(u=!1)},K=A=>{!e.rangeState.selecting||!e.minDate?(t("pick",{minDate:A,maxDate:null}),t("select",!0)):(A>=e.minDate?t("pick",{minDate:e.minDate,maxDate:A}):t("pick",{minDate:A,maxDate:e.minDate}),t("select",!1))},D=A=>{const ne=A.week(),j=`${A.year()}w${ne}`;t("pick",{year:A.year(),week:ne,value:j,date:A.startOf("week")})},L=(A,ne)=>{const j=ne?En(e.parsedValue).filter(Q=>(Q==null?void 0:Q.valueOf())!==A.valueOf()):En(e.parsedValue).concat([A]);t("pick",j)},z=(A,ne=!1)=>{const j=A.target.closest("td");if(!j)return;const Q=j.parentNode.rowIndex-1,Z=j.cellIndex,ee=o(w)[Q][Z];if(ee.disabled||ee.type==="week")return;const ae=M(Q,Z);switch(e.selectionMode){case"range":{K(ae);break}case"date":{t("pick",ae,ne);break}case"week":{D(ae);break}case"dates":{L(ae,!!ee.selected);break}}},B=A=>{if(e.selectionMode!=="week")return!1;let ne=e.date.startOf("day");if(A.type==="prev-month"&&(ne=ne.subtract(1,"month")),A.type==="next-month"&&(ne=ne.add(1,"month")),ne=ne.date(Number.parseInt(A.text,10)),e.parsedValue&&!ke(e.parsedValue)){const j=(e.parsedValue.day()-c+7)%7-1;return e.parsedValue.subtract(j,"day").isSame(ne,"day")}return!1};return{WEEKS:v,rows:w,tbodyRef:l,currentCellRef:a,focus:k,isCurrent:S,isWeekActive:B,isSelectedCell:N,handlePickDate:z,handleMouseUp:W,handleMouseDown:P,handleMouseMove:R,handleFocus:O}},l1=(e,{isCurrent:t,isWeekActive:n})=>{const l=ue("date-table"),{t:a}=pt(),s=y(()=>[l.b(),{"is-week-mode":e.selectionMode==="week"}]),r=y(()=>a("el.datepicker.dateTablePrompt")),i=c=>{const d=[];return vr(c.type)&&!c.disabled?(d.push("available"),c.type==="today"&&d.push("today")):d.push(c.type),t(c)&&d.push("current"),c.inRange&&(vr(c.type)||e.selectionMode==="week")&&(d.push("in-range"),c.start&&d.push("start-date"),c.end&&d.push("end-date")),c.disabled&&d.push("disabled"),c.selected&&d.push("selected"),c.customClass&&d.push(c.customClass),d.join(" ")},u=c=>[l.e("row"),{current:n(c)}];return{tableKls:s,tableLabel:r,weekHeaderClass:l.e("week-header"),getCellClasses:i,getRowKls:u,t:a}},o1=de({cell:{type:Y(Object)}});var di=x({name:"ElDatePickerCell",props:o1,setup(e){const t=ue("date-table-cell"),{slots:n}=we(ri);return()=>{const{cell:l}=e;return G(n,"default",{...l},()=>{var a;return[H("div",{class:t.b()},[H("span",{class:t.e("text")},[(a=l==null?void 0:l.renderText)!=null?a:l==null?void 0:l.text])])]})}}});const a1=x({__name:"basic-date-table",props:e1,emits:t1,setup(e,{expose:t,emit:n}){const l=e,{WEEKS:a,rows:s,tbodyRef:r,currentCellRef:i,focus:u,isCurrent:c,isWeekActive:d,isSelectedCell:f,handlePickDate:m,handleMouseUp:v,handleMouseDown:h,handleMouseMove:p,handleFocus:g}=n1(l,n),{tableLabel:b,tableKls:E,getCellClasses:C,getRowKls:w,weekHeaderClass:k,t:S}=l1(l,{isCurrent:c,isWeekActive:d});let $=!1;return Nt(()=>{$=!0}),t({focus:u}),(M,R)=>(_(),V("table",{"aria-label":o(b),class:T(o(E)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:o(m),onMousemove:o(p),onMousedown:Le(o(h),["prevent"]),onMouseup:o(v)},[F("tbody",{ref_key:"tbodyRef",ref:r},[F("tr",null,[M.showWeekNumber?(_(),V("th",{key:0,scope:"col",class:T(o(k))},null,2)):J("v-if",!0),(_(!0),V(Oe,null,ut(o(a),(N,O)=>(_(),V("th",{key:O,"aria-label":o(S)("el.datepicker.weeksFull."+N),scope:"col"},pe(o(S)("el.datepicker.weeks."+N)),9,["aria-label"]))),128))]),(_(!0),V(Oe,null,ut(o(s),(N,O)=>(_(),V("tr",{key:O,class:T(o(w)(N[1]))},[(_(!0),V(Oe,null,ut(N,(P,W)=>(_(),V("td",{key:`${O}.${W}`,ref_for:!0,ref:K=>!o($)&&o(f)(P)&&(i.value=K),class:T(o(C)(P)),"aria-current":P.isCurrent?"date":void 0,"aria-selected":P.isCurrent,tabindex:o(f)(P)?0:-1,onFocus:o(g)},[H(o(di),{cell:P},null,8,["cell"])],42,["aria-current","aria-selected","tabindex","onFocus"]))),128))],2))),128))],512)],42,["aria-label","onClick","onMousemove","onMousedown","onMouseup"]))}});var pr=fe(a1,[["__file","basic-date-table.vue"]]);const s1=de({...ii,selectionMode:ci("month")}),r1=x({__name:"basic-month-table",props:s1,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const l=e,a=ue("month-table"),{t:s,lang:r}=pt(),i=I(),u=I(),c=I(l.date.locale("en").localeData().monthsShort().map(C=>C.toLowerCase())),d=I([[],[],[]]),f=I(),m=I(),v=y(()=>{var C,w;const k=d.value,S=Ke().locale(r.value).startOf("month");for(let $=0;$<3;$++){const M=k[$];for(let R=0;R<4;R++){const N=M[R]||(M[R]={row:$,column:R,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1});N.type="normal";const O=$*4+R,P=l.date.startOf("year").month(O),W=l.rangeState.endDate||l.maxDate||l.rangeState.selecting&&l.minDate||null;N.inRange=!!(l.minDate&&P.isSameOrAfter(l.minDate,"month")&&W&&P.isSameOrBefore(W,"month"))||!!(l.minDate&&P.isSameOrBefore(l.minDate,"month")&&W&&P.isSameOrAfter(W,"month")),(C=l.minDate)!=null&&C.isSameOrAfter(W)?(N.start=!!(W&&P.isSame(W,"month")),N.end=l.minDate&&P.isSame(l.minDate,"month")):(N.start=!!(l.minDate&&P.isSame(l.minDate,"month")),N.end=!!(W&&P.isSame(W,"month"))),S.isSame(P)&&(N.type="today"),N.text=O,N.disabled=((w=l.disabledDate)==null?void 0:w.call(l,P.toDate()))||!1}}return k}),h=()=>{var C;(C=u.value)==null||C.focus()},p=C=>{const w={},k=l.date.year(),S=new Date,$=C.text;return w.disabled=l.disabledDate?Xa(l.date,k,$,r.value).every(l.disabledDate):!1,w.current=En(l.parsedValue).findIndex(M=>Ke.isDayjs(M)&&M.year()===k&&M.month()===$)>=0,w.today=S.getFullYear()===k&&S.getMonth()===$,C.inRange&&(w["in-range"]=!0,C.start&&(w["start-date"]=!0),C.end&&(w["end-date"]=!0)),w},g=C=>{const w=l.date.year(),k=C.text;return En(l.date).findIndex(S=>S.year()===w&&S.month()===k)>=0},b=C=>{var w;if(!l.rangeState.selecting)return;let k=C.target;if(k.tagName==="SPAN"&&(k=(w=k.parentNode)==null?void 0:w.parentNode),k.tagName==="DIV"&&(k=k.parentNode),k.tagName!=="TD")return;const S=k.parentNode.rowIndex,$=k.cellIndex;v.value[S][$].disabled||(S!==f.value||$!==m.value)&&(f.value=S,m.value=$,n("changerange",{selecting:!0,endDate:l.date.startOf("year").month(S*4+$)}))},E=C=>{var w;const k=(w=C.target)==null?void 0:w.closest("td");if((k==null?void 0:k.tagName)!=="TD"||Nn(k,"disabled"))return;const S=k.cellIndex,M=k.parentNode.rowIndex*4+S,R=l.date.startOf("year").month(M);if(l.selectionMode==="months"){if(C.type==="keydown"){n("pick",En(l.parsedValue),!1);return}const N=Eo(l.date,l.date.year(),M,r.value,l.disabledDate),O=Nn(k,"current")?En(l.parsedValue).filter(P=>(P==null?void 0:P.year())!==N.year()||(P==null?void 0:P.month())!==N.month()):En(l.parsedValue).concat([Ke(N)]);n("pick",O)}else l.selectionMode==="range"?l.rangeState.selecting?(l.minDate&&R>=l.minDate?n("pick",{minDate:l.minDate,maxDate:R}):n("pick",{minDate:R,maxDate:l.minDate}),n("select",!1)):(n("pick",{minDate:R,maxDate:null}),n("select",!0)):n("pick",M)};return ie(()=>l.date,async()=>{var C,w;(C=i.value)!=null&&C.contains(document.activeElement)&&(await Ee(),(w=u.value)==null||w.focus())}),t({focus:h}),(C,w)=>(_(),V("table",{role:"grid","aria-label":o(s)("el.datepicker.monthTablePrompt"),class:T(o(a).b()),onClick:E,onMousemove:b},[F("tbody",{ref_key:"tbodyRef",ref:i},[(_(!0),V(Oe,null,ut(o(v),(k,S)=>(_(),V("tr",{key:S},[(_(!0),V(Oe,null,ut(k,($,M)=>(_(),V("td",{key:M,ref_for:!0,ref:R=>g($)&&(u.value=R),class:T(p($)),"aria-selected":`${g($)}`,"aria-label":o(s)(`el.datepicker.month${+$.text+1}`),tabindex:g($)?0:-1,onKeydown:[Tt(Le(E,["prevent","stop"]),["space"]),Tt(Le(E,["prevent","stop"]),["enter"])]},[H(o(di),{cell:{...$,renderText:o(s)("el.datepicker.months."+c.value[$.text])}},null,8,["cell"])],42,["aria-selected","aria-label","tabindex","onKeydown"]))),128))]))),128))],512)],42,["aria-label"]))}});var Qo=fe(r1,[["__file","basic-month-table.vue"]]);const i1=de({...ii,selectionMode:ci("year")}),u1=x({__name:"basic-year-table",props:i1,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const l=e,a=(w,k)=>{const S=Ke(String(w)).locale(k).startOf("year"),M=S.endOf("year").dayOfYear();return Nl(M).map(R=>S.add(R,"day").toDate())},s=ue("year-table"),{t:r,lang:i}=pt(),u=I(),c=I(),d=y(()=>Math.floor(l.date.year()/10)*10),f=I([[],[],[]]),m=I(),v=I(),h=y(()=>{var w;const k=f.value,S=Ke().locale(i.value).startOf("year");for(let $=0;$<3;$++){const M=k[$];for(let R=0;R<4&&!($*4+R>=10);R++){let N=M[R];N||(N={row:$,column:R,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1}),N.type="normal";const O=$*4+R+d.value,P=Ke().year(O),W=l.rangeState.endDate||l.maxDate||l.rangeState.selecting&&l.minDate||null;N.inRange=!!(l.minDate&&P.isSameOrAfter(l.minDate,"year")&&W&&P.isSameOrBefore(W,"year"))||!!(l.minDate&&P.isSameOrBefore(l.minDate,"year")&&W&&P.isSameOrAfter(W,"year")),(w=l.minDate)!=null&&w.isSameOrAfter(W)?(N.start=!!(W&&P.isSame(W,"year")),N.end=!!(l.minDate&&P.isSame(l.minDate,"year"))):(N.start=!!(l.minDate&&P.isSame(l.minDate,"year")),N.end=!!(W&&P.isSame(W,"year"))),S.isSame(P)&&(N.type="today"),N.text=O;const D=P.toDate();N.disabled=l.disabledDate&&l.disabledDate(D)||!1,M[R]=N}}return k}),p=()=>{var w;(w=c.value)==null||w.focus()},g=w=>{const k={},S=Ke().locale(i.value),$=w.text;return k.disabled=l.disabledDate?a($,i.value).every(l.disabledDate):!1,k.today=S.year()===$,k.current=En(l.parsedValue).findIndex(M=>M.year()===$)>=0,w.inRange&&(k["in-range"]=!0,w.start&&(k["start-date"]=!0),w.end&&(k["end-date"]=!0)),k},b=w=>{const k=w.text;return En(l.date).findIndex(S=>S.year()===k)>=0},E=w=>{var k;const S=(k=w.target)==null?void 0:k.closest("td");if(!S||!S.textContent||Nn(S,"disabled"))return;const $=S.cellIndex,R=S.parentNode.rowIndex*4+$+d.value,N=Ke().year(R);if(l.selectionMode==="range")l.rangeState.selecting?(l.minDate&&N>=l.minDate?n("pick",{minDate:l.minDate,maxDate:N}):n("pick",{minDate:N,maxDate:l.minDate}),n("select",!1)):(n("pick",{minDate:N,maxDate:null}),n("select",!0));else if(l.selectionMode==="years"){if(w.type==="keydown"){n("pick",En(l.parsedValue),!1);return}const O=Za(N.startOf("year"),i.value,l.disabledDate),P=Nn(S,"current")?En(l.parsedValue).filter(W=>(W==null?void 0:W.year())!==R):En(l.parsedValue).concat([O]);n("pick",P)}else n("pick",R)},C=w=>{var k;if(!l.rangeState.selecting)return;const S=(k=w.target)==null?void 0:k.closest("td");if(!S)return;const $=S.parentNode.rowIndex,M=S.cellIndex;h.value[$][M].disabled||($!==m.value||M!==v.value)&&(m.value=$,v.value=M,n("changerange",{selecting:!0,endDate:Ke().year(d.value).add($*4+M,"year")}))};return ie(()=>l.date,async()=>{var w,k;(w=u.value)!=null&&w.contains(document.activeElement)&&(await Ee(),(k=c.value)==null||k.focus())}),t({focus:p}),(w,k)=>(_(),V("table",{role:"grid","aria-label":o(r)("el.datepicker.yearTablePrompt"),class:T(o(s).b()),onClick:E,onMousemove:C},[F("tbody",{ref_key:"tbodyRef",ref:u},[(_(!0),V(Oe,null,ut(o(h),(S,$)=>(_(),V("tr",{key:$},[(_(!0),V(Oe,null,ut(S,(M,R)=>(_(),V("td",{key:`${$}_${R}`,ref_for:!0,ref:N=>b(M)&&(c.value=N),class:T(["available",g(M)]),"aria-selected":b(M),"aria-label":String(M.text),tabindex:b(M)?0:-1,onKeydown:[Tt(Le(E,["prevent","stop"]),["space"]),Tt(Le(E,["prevent","stop"]),["enter"])]},[H(o(di),{cell:M},null,8,["cell"])],42,["aria-selected","aria-label","tabindex","onKeydown"]))),128))]))),128))],512)],42,["aria-label"]))}});var ea=fe(u1,[["__file","basic-year-table.vue"]]);const c1=x({__name:"panel-date-pick",props:Jw,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=e,l=(X,ve,q)=>!0,a=ue("picker-panel"),s=ue("date-picker"),r=pl(),i=Xt(),{t:u,lang:c}=pt(),d=we(gl),f=we(ma),m=we(Cs),{shortcuts:v,disabledDate:h,cellClassName:p,defaultTime:g}=d.props,b=wt(d.props,"defaultValue"),E=I(),C=I(Ke().locale(c.value)),w=I(!1);let k=!1;const S=y(()=>Ke(g).locale(c.value)),$=y(()=>C.value.month()),M=y(()=>C.value.year()),R=I([]),N=I(null),O=I(null),P=X=>R.value.length>0?l(X,R.value,n.format||"HH:mm:ss"):!0,W=X=>g&&!Ye.value&&!w.value&&!k?S.value.year(X.year()).month(X.month()).date(X.date()):se.value?X.millisecond(0):X.startOf("day"),K=(X,...ve)=>{if(!X)t("pick",X,...ve);else if(ke(X)){const q=X.map(W);t("pick",q,...ve)}else t("pick",W(X),...ve);N.value=null,O.value=null,w.value=!1,k=!1},D=async(X,ve)=>{if(j.value==="date"){X=X;let q=n.parsedValue?n.parsedValue.year(X.year()).month(X.month()).date(X.date()):X;P(q),C.value=q,K(q,se.value||ve),n.type==="datetime"&&(await Ee(),Mt())}else j.value==="week"?K(X.date):j.value==="dates"&&K(X,!0)},L=X=>{const ve=X?"add":"subtract";C.value=C.value[ve](1,"month"),it("month")},z=X=>{const ve=C.value,q=X?"add":"subtract";C.value=B.value==="year"?ve[q](10,"year"):ve[q](1,"year"),it("year")},B=I("date"),A=y(()=>{const X=u("el.datepicker.year");if(B.value==="year"){const ve=Math.floor(M.value/10)*10;return X?`${ve} ${X} - ${ve+9} ${X}`:`${ve} - ${ve+9}`}return`${M.value} ${X}`}),ne=X=>{const ve=Qe(X.value)?X.value():X.value;if(ve){k=!0,K(Ke(ve).locale(c.value));return}X.onClick&&X.onClick({attrs:r,slots:i,emit:t})},j=y(()=>{const{type:X}=n;return["week","month","months","year","years","dates"].includes(X)?X:"date"}),Q=y(()=>j.value==="dates"||j.value==="months"||j.value==="years"),Z=y(()=>j.value==="date"?B.value:j.value),ee=y(()=>!!v.length),ae=async(X,ve)=>{j.value==="month"?(C.value=Eo(C.value,C.value.year(),X,c.value,h),K(C.value,!1)):j.value==="months"?K(X,ve??!0):(C.value=Eo(C.value,C.value.year(),X,c.value,h),B.value="date",["month","year","date","week"].includes(j.value)&&(K(C.value,!0),await Ee(),Mt())),it("month")},re=async(X,ve)=>{if(j.value==="year"){const q=C.value.startOf("year").year(X);C.value=Za(q,c.value,h),K(C.value,!1)}else if(j.value==="years")K(X,ve??!0);else{const q=C.value.year(X);C.value=Za(q,c.value,h),B.value="month",["month","year","date","week"].includes(j.value)&&(K(C.value,!0),await Ee(),Mt())}it("year")},le=async X=>{B.value=X,await Ee(),Mt()},se=y(()=>n.type==="datetime"||n.type==="datetimerange"),ge=y(()=>{const X=se.value||j.value==="dates",ve=j.value==="years",q=j.value==="months",be=B.value==="date",qe=B.value==="year",ft=B.value==="month";return X&&be||ve&&qe||q&&ft}),Be=y(()=>h?n.parsedValue?ke(n.parsedValue)?h(n.parsedValue[0].toDate()):h(n.parsedValue.toDate()):!0:!1),te=()=>{if(Q.value)K(n.parsedValue);else{let X=n.parsedValue;if(!X){const ve=Ke(g).locale(c.value),q=Rt();X=ve.year(q.year()).month(q.month()).date(q.date())}C.value=X,K(X)}},ce=y(()=>h?h(Ke().locale(c.value).toDate()):!1),Ie=()=>{const ve=Ke().locale(c.value).toDate();w.value=!0,(!h||!h(ve))&&P(ve)&&(C.value=Ke().locale(c.value),K(C.value))},Ae=y(()=>n.timeFormat||Fd(n.format)),xe=y(()=>n.dateFormat||Ad(n.format)),Ye=y(()=>{if(O.value)return O.value;if(!(!n.parsedValue&&!b.value))return(n.parsedValue||C.value).format(Ae.value)}),$e=y(()=>{if(N.value)return N.value;if(!(!n.parsedValue&&!b.value))return(n.parsedValue||C.value).format(xe.value)}),Me=I(!1),Pe=()=>{Me.value=!0},Ze=()=>{Me.value=!1},ot=X=>({hour:X.hour(),minute:X.minute(),second:X.second(),year:X.year(),month:X.month(),date:X.date()}),at=(X,ve,q)=>{const{hour:be,minute:qe,second:ft}=ot(X),Pt=n.parsedValue?n.parsedValue.hour(be).minute(qe).second(ft):X;C.value=Pt,K(C.value,!0),q||(Me.value=ve)},ct=X=>{const ve=Ke(X,Ae.value).locale(c.value);if(ve.isValid()&&P(ve)){const{year:q,month:be,date:qe}=ot(C.value);C.value=ve.year(q).month(be).date(qe),O.value=null,Me.value=!1,K(C.value,!0)}},ye=X=>{const ve=_o(X,xe.value,c.value,f);if(ve.isValid()){if(h&&h(ve.toDate()))return;const{hour:q,minute:be,second:qe}=ot(C.value);C.value=ve.hour(q).minute(be).second(qe),N.value=null,K(C.value,!0)}},Ue=X=>Ke.isDayjs(X)&&X.isValid()&&(h?!h(X.toDate()):!0),It=X=>ke(X)?X.map(ve=>ve.format(n.format)):X.format(n.format),Ot=X=>_o(X,n.format,c.value,f),Rt=()=>{const X=Ke(b.value).locale(c.value);if(!b.value){const ve=S.value;return Ke().hour(ve.hour()).minute(ve.minute()).second(ve.second()).locale(c.value)}return X},Mt=()=>{var X;["week","month","year","date"].includes(j.value)&&((X=E.value)==null||X.focus())},St=()=>{Mt(),j.value==="week"&&tt(Ce.down)},je=X=>{const{code:ve}=X;[Ce.up,Ce.down,Ce.left,Ce.right,Ce.home,Ce.end,Ce.pageUp,Ce.pageDown].includes(ve)&&(tt(ve),X.stopPropagation(),X.preventDefault()),[Ce.enter,Ce.space,Ce.numpadEnter].includes(ve)&&N.value===null&&O.value===null&&(X.preventDefault(),K(C.value,!1))},tt=X=>{var ve;const{up:q,down:be,left:qe,right:ft,home:Pt,end:Kt,pageUp:Ut,pageDown:ll}=Ce,en={year:{[q]:-4,[be]:4,[qe]:-1,[ft]:1,offset:(Ne,gt)=>Ne.setFullYear(Ne.getFullYear()+gt)},month:{[q]:-4,[be]:4,[qe]:-1,[ft]:1,offset:(Ne,gt)=>Ne.setMonth(Ne.getMonth()+gt)},week:{[q]:-1,[be]:1,[qe]:-1,[ft]:1,offset:(Ne,gt)=>Ne.setDate(Ne.getDate()+gt*7)},date:{[q]:-7,[be]:7,[qe]:-1,[ft]:1,[Pt]:Ne=>-Ne.getDay(),[Kt]:Ne=>-Ne.getDay()+6,[Ut]:Ne=>-new Date(Ne.getFullYear(),Ne.getMonth(),0).getDate(),[ll]:Ne=>new Date(Ne.getFullYear(),Ne.getMonth()+1,0).getDate(),offset:(Ne,gt)=>Ne.setDate(Ne.getDate()+gt)}},Bn=C.value.toDate();for(;Math.abs(C.value.diff(Bn,"year",!0))<1;){const Ne=en[Z.value];if(!Ne)return;if(Ne.offset(Bn,Qe(Ne[X])?Ne[X](Bn):(ve=Ne[X])!=null?ve:0),h&&h(Bn))break;const gt=Ke(Bn).locale(c.value);C.value=gt,t("pick",gt,!0);break}},it=X=>{t("panel-change",C.value.toDate(),X,B.value)};return ie(()=>j.value,X=>{if(["month","year"].includes(X)){B.value=X;return}else if(X==="years"){B.value="year";return}else if(X==="months"){B.value="month";return}B.value="date"},{immediate:!0}),ie(()=>B.value,()=>{m==null||m.updatePopper()}),ie(()=>b.value,X=>{X&&(C.value=Rt())},{immediate:!0}),ie(()=>n.parsedValue,X=>{if(X){if(Q.value||ke(X))return;C.value=X}else C.value=Rt()},{immediate:!0}),t("set-picker-option",["isValidValue",Ue]),t("set-picker-option",["formatToString",It]),t("set-picker-option",["parseUserInput",Ot]),t("set-picker-option",["handleFocusPicker",St]),(X,ve)=>(_(),V("div",{class:T([o(a).b(),o(s).b(),{"has-sidebar":X.$slots.sidebar||o(ee),"has-time":o(se)}])},[F("div",{class:T(o(a).e("body-wrapper"))},[G(X.$slots,"sidebar",{class:T(o(a).e("sidebar"))}),o(ee)?(_(),V("div",{key:0,class:T(o(a).e("sidebar"))},[(_(!0),V(Oe,null,ut(o(v),(q,be)=>(_(),V("button",{key:be,type:"button",class:T(o(a).e("shortcut")),onClick:qe=>ne(q)},pe(q.text),11,["onClick"]))),128))],2)):J("v-if",!0),F("div",{class:T(o(a).e("body"))},[o(se)?(_(),V("div",{key:0,class:T(o(s).e("time-header"))},[F("span",{class:T(o(s).e("editor-wrap"))},[H(o(hn),{placeholder:o(u)("el.datepicker.selectDate"),"model-value":o($e),size:"small","validate-event":!1,onInput:q=>N.value=q,onChange:ye},null,8,["placeholder","model-value","onInput"])],2),We((_(),V("span",{class:T(o(s).e("editor-wrap"))},[H(o(hn),{placeholder:o(u)("el.datepicker.selectTime"),"model-value":o(Ye),size:"small","validate-event":!1,onFocus:Pe,onInput:q=>O.value=q,onChange:ct},null,8,["placeholder","model-value","onInput"]),H(o(Ga),{visible:Me.value,format:o(Ae),"parsed-value":C.value,onPick:at},null,8,["visible","format","parsed-value"])],2)),[[o(vl),Ze]])],2)):J("v-if",!0),We(F("div",{class:T([o(s).e("header"),(B.value==="year"||B.value==="month")&&o(s).e("header--bordered")])},[F("span",{class:T(o(s).e("prev-btn"))},[F("button",{type:"button","aria-label":o(u)("el.datepicker.prevYear"),class:T(["d-arrow-left",o(a).e("icon-btn")]),onClick:q=>z(!1)},[G(X.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["aria-label","onClick"]),We(F("button",{type:"button","aria-label":o(u)("el.datepicker.prevMonth"),class:T([o(a).e("icon-btn"),"arrow-left"]),onClick:q=>L(!1)},[G(X.$slots,"prev-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})])],10,["aria-label","onClick"]),[[mt,B.value==="date"]])],2),F("span",{role:"button",class:T(o(s).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:Tt(q=>le("year"),["enter"]),onClick:q=>le("year")},pe(o(A)),43,["onKeydown","onClick"]),We(F("span",{role:"button","aria-live":"polite",tabindex:"0",class:T([o(s).e("header-label"),{active:B.value==="month"}]),onKeydown:Tt(q=>le("month"),["enter"]),onClick:q=>le("month")},pe(o(u)(`el.datepicker.month${o($)+1}`)),43,["onKeydown","onClick"]),[[mt,B.value==="date"]]),F("span",{class:T(o(s).e("next-btn"))},[We(F("button",{type:"button","aria-label":o(u)("el.datepicker.nextMonth"),class:T([o(a).e("icon-btn"),"arrow-right"]),onClick:q=>L(!0)},[G(X.$slots,"next-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})])],10,["aria-label","onClick"]),[[mt,B.value==="date"]]),F("button",{type:"button","aria-label":o(u)("el.datepicker.nextYear"),class:T([o(a).e("icon-btn"),"d-arrow-right"]),onClick:q=>z(!0)},[G(X.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["aria-label","onClick"])],2)],2),[[mt,B.value!=="time"]]),F("div",{class:T(o(a).e("content")),onKeydown:je},[B.value==="date"?(_(),oe(pr,{key:0,ref_key:"currentViewRef",ref:E,"selection-mode":o(j),date:C.value,"parsed-value":X.parsedValue,"disabled-date":o(h),"cell-class-name":o(p),"show-week-number":X.showWeekNumber,onPick:D},null,8,["selection-mode","date","parsed-value","disabled-date","cell-class-name","show-week-number"])):J("v-if",!0),B.value==="year"?(_(),oe(ea,{key:1,ref_key:"currentViewRef",ref:E,"selection-mode":o(j),date:C.value,"disabled-date":o(h),"parsed-value":X.parsedValue,onPick:re},null,8,["selection-mode","date","disabled-date","parsed-value"])):J("v-if",!0),B.value==="month"?(_(),oe(Qo,{key:2,ref_key:"currentViewRef",ref:E,"selection-mode":o(j),date:C.value,"parsed-value":X.parsedValue,"disabled-date":o(h),onPick:ae},null,8,["selection-mode","date","parsed-value","disabled-date"])):J("v-if",!0)],34)],2)],2),We(F("div",{class:T(o(a).e("footer"))},[We(H(o(on),{text:"",size:"small",class:T(o(a).e("link-btn")),disabled:o(ce),onClick:Ie},{default:U(()=>[st(pe(o(u)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[mt,!o(Q)&&X.showNow]]),H(o(on),{plain:"",size:"small",class:T(o(a).e("link-btn")),disabled:o(Be),onClick:te},{default:U(()=>[st(pe(o(u)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])],2),[[mt,o(ge)]])],2))}});var d1=fe(c1,[["__file","panel-date-pick.vue"]]);const f1=de({...yf,...ui}),v1=e=>{const{emit:t}=lt(),n=pl(),l=Xt();return s=>{const r=Qe(s.value)?s.value():s.value;if(r){t("pick",[Ke(r[0]).locale(e.value),Ke(r[1]).locale(e.value)]);return}s.onClick&&s.onClick({attrs:n,slots:l,emit:t})}},fi=(e,{defaultValue:t,defaultTime:n,leftDate:l,rightDate:a,step:s,unit:r,onParsedValueChanged:i})=>{const{emit:u}=lt(),{pickerNs:c}=we(ri),d=ue("date-range-picker"),{t:f,lang:m}=pt(),v=v1(m),h=I(),p=I(),g=I({endDate:null,selecting:!1}),b=S=>{g.value=S},E=(S=!1)=>{const $=o(h),M=o(p);Jo([$,M])&&u("pick",[$,M],S)},C=S=>{g.value.selecting=S,S||(g.value.endDate=null)},w=S=>{if(ke(S)&&S.length===2){const[$,M]=S;h.value=$,l.value=$,p.value=M,i(o(h),o(p))}else k()},k=()=>{let[S,$]=Es(o(t),{lang:o(m),step:s,unit:r,unlinkPanels:e.unlinkPanels});const M=N=>N.diff(N.startOf("d"),"ms"),R=o(n);if(R){let N=0,O=0;if(ke(R)){const[P,W]=R.map(Ke);N=M(P),O=M(W)}else{const P=M(Ke(R));N=P,O=P}S=S.startOf("d").add(N,"ms"),$=$.startOf("d").add(O,"ms")}h.value=void 0,p.value=void 0,l.value=S,a.value=$};return ie(t,S=>{S&&k()},{immediate:!0}),ie(()=>e.parsedValue,w,{immediate:!0}),{minDate:h,maxDate:p,rangeState:g,lang:m,ppNs:c,drpNs:d,handleChangeRange:b,handleRangeConfirm:E,handleShortcutClick:v,onSelect:C,onReset:w,t:f}},p1=(e,t,n,l)=>{const a=I("date"),s=I(),r=I("date"),i=I(),u=we(gl),{disabledDate:c}=u.props,{t:d,lang:f}=pt(),m=y(()=>n.value.year()),v=y(()=>n.value.month()),h=y(()=>l.value.year()),p=y(()=>l.value.month());function g(S,$){const M=d("el.datepicker.year");if(S.value==="year"){const R=Math.floor($.value/10)*10;return M?`${R} ${M} - ${R+9} ${M}`:`${R} - ${R+9}`}return`${$.value} ${M}`}function b(S){S==null||S.focus()}async function E(S,$){const M=S==="left"?a:r,R=S==="left"?s:i;M.value=$,await Ee(),b(R.value)}async function C(S,$,M){const R=$==="left",N=R?n:l,O=R?l:n,P=R?a:r,W=R?s:i;if(S==="year"){const K=N.value.year(M);N.value=Za(K,f.value,c)}S==="month"&&(N.value=Eo(N.value,N.value.year(),M,f.value,c)),e.unlinkPanels||(O.value=$==="left"?N.value.add(1,"month"):N.value.subtract(1,"month")),P.value=S==="year"?"month":"date",await Ee(),b(W.value),w(S)}function w(S){t("panel-change",[n.value.toDate(),l.value.toDate()],S)}function k(S,$,M){const R=M?"add":"subtract";return S==="year"?$[R](10,"year"):$[R](1,"year")}return{leftCurrentView:a,rightCurrentView:r,leftCurrentViewRef:s,rightCurrentViewRef:i,leftYear:m,rightYear:h,leftMonth:v,rightMonth:p,leftYearLabel:y(()=>g(a,m)),rightYearLabel:y(()=>g(r,h)),showLeftPicker:S=>E("left",S),showRightPicker:S=>E("right",S),handleLeftYearPick:S=>C("year","left",S),handleRightYearPick:S=>C("year","right",S),handleLeftMonthPick:S=>C("month","left",S),handleRightMonthPick:S=>C("month","right",S),handlePanelChange:w,adjustDateByView:k}},$a="month",h1=x({__name:"panel-date-range",props:f1,emits:["pick","set-picker-option","calendar-change","panel-change"],setup(e,{emit:t}){const n=e,l=we(gl),a=we(ma),{disabledDate:s,cellClassName:r,defaultTime:i,clearable:u}=l.props,c=wt(l.props,"format"),d=wt(l.props,"shortcuts"),f=wt(l.props,"defaultValue"),{lang:m}=pt(),v=I(Ke().locale(m.value)),h=I(Ke().locale(m.value).add(1,$a)),{minDate:p,maxDate:g,rangeState:b,ppNs:E,drpNs:C,handleChangeRange:w,handleRangeConfirm:k,handleShortcutClick:S,onSelect:$,onReset:M,t:R}=fi(n,{defaultValue:f,defaultTime:i,leftDate:v,rightDate:h,unit:$a,onParsedValueChanged:Bn});ie(()=>n.visible,Ne=>{!Ne&&b.value.selecting&&(M(n.parsedValue),$(!1))});const N=I({min:null,max:null}),O=I({min:null,max:null}),{leftCurrentView:P,rightCurrentView:W,leftCurrentViewRef:K,rightCurrentViewRef:D,leftYear:L,rightYear:z,leftMonth:B,rightMonth:A,leftYearLabel:ne,rightYearLabel:j,showLeftPicker:Q,showRightPicker:Z,handleLeftYearPick:ee,handleRightYearPick:ae,handleLeftMonthPick:re,handleRightMonthPick:le,handlePanelChange:se,adjustDateByView:ge}=p1(n,t,v,h),Be=y(()=>!!d.value.length),te=y(()=>N.value.min!==null?N.value.min:p.value?p.value.format(Ye.value):""),ce=y(()=>N.value.max!==null?N.value.max:g.value||p.value?(g.value||p.value).format(Ye.value):""),Ie=y(()=>O.value.min!==null?O.value.min:p.value?p.value.format(xe.value):""),Ae=y(()=>O.value.max!==null?O.value.max:g.value||p.value?(g.value||p.value).format(xe.value):""),xe=y(()=>n.timeFormat||Fd(c.value)),Ye=y(()=>n.dateFormat||Ad(c.value)),$e=Ne=>Jo(Ne)&&(s?!s(Ne[0].toDate())&&!s(Ne[1].toDate()):!0),Me=()=>{v.value=ge(P.value,v.value,!1),n.unlinkPanels||(h.value=v.value.add(1,"month")),se("year")},Pe=()=>{v.value=v.value.subtract(1,"month"),n.unlinkPanels||(h.value=v.value.add(1,"month")),se("month")},Ze=()=>{n.unlinkPanels?h.value=ge(W.value,h.value,!0):(v.value=ge(W.value,v.value,!0),h.value=v.value.add(1,"month")),se("year")},ot=()=>{n.unlinkPanels?h.value=h.value.add(1,"month"):(v.value=v.value.add(1,"month"),h.value=v.value.add(1,"month")),se("month")},at=()=>{v.value=ge(P.value,v.value,!0),se("year")},ct=()=>{v.value=v.value.add(1,"month"),se("month")},ye=()=>{h.value=ge(W.value,h.value,!1),se("year")},Ue=()=>{h.value=h.value.subtract(1,"month"),se("month")},It=y(()=>{const Ne=(B.value+1)%12,gt=B.value+1>=12?1:0;return n.unlinkPanels&&new Date(L.value+gt,Ne)n.unlinkPanels&&z.value*12+A.value-(L.value*12+B.value+1)>=12),Rt=y(()=>!(p.value&&g.value&&!b.value.selecting&&Jo([p.value,g.value]))),Mt=y(()=>n.type==="datetime"||n.type==="datetimerange"),St=(Ne,gt)=>{if(Ne)return i?Ke(i[gt]||i).locale(m.value).year(Ne.year()).month(Ne.month()).date(Ne.date()):Ne},je=(Ne,gt=!0)=>{const Je=Ne.minDate,wn=Ne.maxDate,qn=St(Je,0),bl=St(wn,1);g.value===bl&&p.value===qn||(t("calendar-change",[Je.toDate(),wn&&wn.toDate()]),g.value=bl,p.value=qn,!(!gt||Mt.value)&&k())},tt=I(!1),it=I(!1),X=()=>{tt.value=!1},ve=()=>{it.value=!1},q=(Ne,gt)=>{N.value[gt]=Ne;const Je=Ke(Ne,Ye.value).locale(m.value);if(Je.isValid()){if(s&&s(Je.toDate()))return;gt==="min"?(v.value=Je,p.value=(p.value||v.value).year(Je.year()).month(Je.month()).date(Je.date()),!n.unlinkPanels&&(!g.value||g.value.isBefore(p.value))&&(h.value=Je.add(1,"month"),g.value=p.value.add(1,"month"))):(h.value=Je,g.value=(g.value||h.value).year(Je.year()).month(Je.month()).date(Je.date()),!n.unlinkPanels&&(!p.value||p.value.isAfter(g.value))&&(v.value=Je.subtract(1,"month"),p.value=g.value.subtract(1,"month")))}},be=(Ne,gt)=>{N.value[gt]=null},qe=(Ne,gt)=>{O.value[gt]=Ne;const Je=Ke(Ne,xe.value).locale(m.value);Je.isValid()&&(gt==="min"?(tt.value=!0,p.value=(p.value||v.value).hour(Je.hour()).minute(Je.minute()).second(Je.second())):(it.value=!0,g.value=(g.value||h.value).hour(Je.hour()).minute(Je.minute()).second(Je.second()),h.value=g.value))},ft=(Ne,gt)=>{O.value[gt]=null,gt==="min"?(v.value=p.value,tt.value=!1,(!g.value||g.value.isBefore(p.value))&&(g.value=p.value)):(h.value=g.value,it.value=!1,g.value&&g.value.isBefore(p.value)&&(p.value=g.value))},Pt=(Ne,gt,Je)=>{O.value.min||(Ne&&(v.value=Ne,p.value=(p.value||v.value).hour(Ne.hour()).minute(Ne.minute()).second(Ne.second())),Je||(tt.value=gt),(!g.value||g.value.isBefore(p.value))&&(g.value=p.value,h.value=Ne))},Kt=(Ne,gt,Je)=>{O.value.max||(Ne&&(h.value=Ne,g.value=(g.value||h.value).hour(Ne.hour()).minute(Ne.minute()).second(Ne.second())),Je||(it.value=gt),g.value&&g.value.isBefore(p.value)&&(p.value=g.value))},Ut=()=>{v.value=Es(o(f),{lang:o(m),unit:"month",unlinkPanels:n.unlinkPanels})[0],h.value=v.value.add(1,"month"),g.value=void 0,p.value=void 0,t("pick",null)},ll=Ne=>ke(Ne)?Ne.map(gt=>gt.format(c.value)):Ne.format(c.value),en=Ne=>_o(Ne,c.value,m.value,a);function Bn(Ne,gt){if(n.unlinkPanels&>){const Je=(Ne==null?void 0:Ne.year())||0,wn=(Ne==null?void 0:Ne.month())||0,qn=gt.year(),bl=gt.month();h.value=Je===qn&&wn===bl?gt.add(1,$a):gt}else h.value=v.value.add(1,$a),gt&&(h.value=h.value.hour(gt.hour()).minute(gt.minute()).second(gt.second()))}return t("set-picker-option",["isValidValue",$e]),t("set-picker-option",["parseUserInput",en]),t("set-picker-option",["formatToString",ll]),t("set-picker-option",["handleClear",Ut]),(Ne,gt)=>(_(),V("div",{class:T([o(E).b(),o(C).b(),{"has-sidebar":Ne.$slots.sidebar||o(Be),"has-time":o(Mt)}])},[F("div",{class:T(o(E).e("body-wrapper"))},[G(Ne.$slots,"sidebar",{class:T(o(E).e("sidebar"))}),o(Be)?(_(),V("div",{key:0,class:T(o(E).e("sidebar"))},[(_(!0),V(Oe,null,ut(o(d),(Je,wn)=>(_(),V("button",{key:wn,type:"button",class:T(o(E).e("shortcut")),onClick:qn=>o(S)(Je)},pe(Je.text),11,["onClick"]))),128))],2)):J("v-if",!0),F("div",{class:T(o(E).e("body"))},[o(Mt)?(_(),V("div",{key:0,class:T(o(C).e("time-header"))},[F("span",{class:T(o(C).e("editors-wrap"))},[F("span",{class:T(o(C).e("time-picker-wrap"))},[H(o(hn),{size:"small",disabled:o(b).selecting,placeholder:o(R)("el.datepicker.startDate"),class:T(o(C).e("editor")),"model-value":o(te),"validate-event":!1,onInput:Je=>q(Je,"min"),onChange:Je=>be(Je,"min")},null,8,["disabled","placeholder","class","model-value","onInput","onChange"])],2),We((_(),V("span",{class:T(o(C).e("time-picker-wrap"))},[H(o(hn),{size:"small",class:T(o(C).e("editor")),disabled:o(b).selecting,placeholder:o(R)("el.datepicker.startTime"),"model-value":o(Ie),"validate-event":!1,onFocus:Je=>tt.value=!0,onInput:Je=>qe(Je,"min"),onChange:Je=>ft(Je,"min")},null,8,["class","disabled","placeholder","model-value","onFocus","onInput","onChange"]),H(o(Ga),{visible:tt.value,format:o(xe),"datetime-role":"start","parsed-value":v.value,onPick:Pt},null,8,["visible","format","parsed-value"])],2)),[[o(vl),X]])],2),F("span",null,[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})]),F("span",{class:T([o(C).e("editors-wrap"),"is-right"])},[F("span",{class:T(o(C).e("time-picker-wrap"))},[H(o(hn),{size:"small",class:T(o(C).e("editor")),disabled:o(b).selecting,placeholder:o(R)("el.datepicker.endDate"),"model-value":o(ce),readonly:!o(p),"validate-event":!1,onInput:Je=>q(Je,"max"),onChange:Je=>be(Je,"max")},null,8,["class","disabled","placeholder","model-value","readonly","onInput","onChange"])],2),We((_(),V("span",{class:T(o(C).e("time-picker-wrap"))},[H(o(hn),{size:"small",class:T(o(C).e("editor")),disabled:o(b).selecting,placeholder:o(R)("el.datepicker.endTime"),"model-value":o(Ae),readonly:!o(p),"validate-event":!1,onFocus:Je=>o(p)&&(it.value=!0),onInput:Je=>qe(Je,"max"),onChange:Je=>ft(Je,"max")},null,8,["class","disabled","placeholder","model-value","readonly","onFocus","onInput","onChange"]),H(o(Ga),{"datetime-role":"end",visible:it.value,format:o(xe),"parsed-value":h.value,onPick:Kt},null,8,["visible","format","parsed-value"])],2)),[[o(vl),ve]])],2)],2)):J("v-if",!0),F("div",{class:T([[o(E).e("content"),o(C).e("content")],"is-left"])},[F("div",{class:T(o(C).e("header"))},[F("button",{type:"button",class:T([o(E).e("icon-btn"),"d-arrow-left"]),"aria-label":o(R)("el.datepicker.prevYear"),onClick:Me},[G(Ne.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["aria-label"]),We(F("button",{type:"button",class:T([o(E).e("icon-btn"),"arrow-left"]),"aria-label":o(R)("el.datepicker.prevMonth"),onClick:Pe},[G(Ne.$slots,"prev-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})])],10,["aria-label"]),[[mt,o(P)==="date"]]),Ne.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(Ot),class:T([[o(E).e("icon-btn"),{"is-disabled":!o(Ot)}],"d-arrow-right"]),"aria-label":o(R)("el.datepicker.nextYear"),onClick:at},[G(Ne.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["disabled","aria-label"])):J("v-if",!0),Ne.unlinkPanels&&o(P)==="date"?(_(),V("button",{key:1,type:"button",disabled:!o(It),class:T([[o(E).e("icon-btn"),{"is-disabled":!o(It)}],"arrow-right"]),"aria-label":o(R)("el.datepicker.nextMonth"),onClick:ct},[G(Ne.$slots,"next-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})])],10,["disabled","aria-label"])):J("v-if",!0),F("div",null,[F("span",{role:"button",class:T(o(C).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:Tt(Je=>o(Q)("year"),["enter"]),onClick:Je=>o(Q)("year")},pe(o(ne)),43,["onKeydown","onClick"]),We(F("span",{role:"button","aria-live":"polite",tabindex:"0",class:T([o(C).e("header-label"),{active:o(P)==="month"}]),onKeydown:Tt(Je=>o(Q)("month"),["enter"]),onClick:Je=>o(Q)("month")},pe(o(R)(`el.datepicker.month${v.value.month()+1}`)),43,["onKeydown","onClick"]),[[mt,o(P)==="date"]])])],2),o(P)==="date"?(_(),oe(pr,{key:0,ref_key:"leftCurrentViewRef",ref:K,"selection-mode":"range",date:v.value,"min-date":o(p),"max-date":o(g),"range-state":o(b),"disabled-date":o(s),"cell-class-name":o(r),"show-week-number":Ne.showWeekNumber,onChangerange:o(w),onPick:je,onSelect:o($)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","onChangerange","onSelect"])):J("v-if",!0),o(P)==="year"?(_(),oe(ea,{key:1,ref_key:"leftCurrentViewRef",ref:K,"selection-mode":"year",date:v.value,"disabled-date":o(s),"parsed-value":Ne.parsedValue,onPick:o(ee)},null,8,["date","disabled-date","parsed-value","onPick"])):J("v-if",!0),o(P)==="month"?(_(),oe(Qo,{key:2,ref_key:"leftCurrentViewRef",ref:K,"selection-mode":"month",date:v.value,"parsed-value":Ne.parsedValue,"disabled-date":o(s),onPick:o(re)},null,8,["date","parsed-value","disabled-date","onPick"])):J("v-if",!0)],2),F("div",{class:T([[o(E).e("content"),o(C).e("content")],"is-right"])},[F("div",{class:T(o(C).e("header"))},[Ne.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(Ot),class:T([[o(E).e("icon-btn"),{"is-disabled":!o(Ot)}],"d-arrow-left"]),"aria-label":o(R)("el.datepicker.prevYear"),onClick:ye},[G(Ne.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["disabled","aria-label"])):J("v-if",!0),Ne.unlinkPanels&&o(W)==="date"?(_(),V("button",{key:1,type:"button",disabled:!o(It),class:T([[o(E).e("icon-btn"),{"is-disabled":!o(It)}],"arrow-left"]),"aria-label":o(R)("el.datepicker.prevMonth"),onClick:Ue},[G(Ne.$slots,"prev-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})])],10,["disabled","aria-label"])):J("v-if",!0),F("button",{type:"button","aria-label":o(R)("el.datepicker.nextYear"),class:T([o(E).e("icon-btn"),"d-arrow-right"]),onClick:Ze},[G(Ne.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["aria-label"]),We(F("button",{type:"button",class:T([o(E).e("icon-btn"),"arrow-right"]),"aria-label":o(R)("el.datepicker.nextMonth"),onClick:ot},[G(Ne.$slots,"next-month",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})])],10,["aria-label"]),[[mt,o(W)==="date"]]),F("div",null,[F("span",{role:"button",class:T(o(C).e("header-label")),"aria-live":"polite",tabindex:"0",onKeydown:Tt(Je=>o(Z)("year"),["enter"]),onClick:Je=>o(Z)("year")},pe(o(j)),43,["onKeydown","onClick"]),We(F("span",{role:"button","aria-live":"polite",tabindex:"0",class:T([o(C).e("header-label"),{active:o(W)==="month"}]),onKeydown:Tt(Je=>o(Z)("month"),["enter"]),onClick:Je=>o(Z)("month")},pe(o(R)(`el.datepicker.month${h.value.month()+1}`)),43,["onKeydown","onClick"]),[[mt,o(W)==="date"]])])],2),o(W)==="date"?(_(),oe(pr,{key:0,ref_key:"rightCurrentViewRef",ref:D,"selection-mode":"range",date:h.value,"min-date":o(p),"max-date":o(g),"range-state":o(b),"disabled-date":o(s),"cell-class-name":o(r),"show-week-number":Ne.showWeekNumber,onChangerange:o(w),onPick:je,onSelect:o($)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","onChangerange","onSelect"])):J("v-if",!0),o(W)==="year"?(_(),oe(ea,{key:1,ref_key:"rightCurrentViewRef",ref:D,"selection-mode":"year",date:h.value,"disabled-date":o(s),"parsed-value":Ne.parsedValue,onPick:o(ae)},null,8,["date","disabled-date","parsed-value","onPick"])):J("v-if",!0),o(W)==="month"?(_(),oe(Qo,{key:2,ref_key:"rightCurrentViewRef",ref:D,"selection-mode":"month",date:h.value,"parsed-value":Ne.parsedValue,"disabled-date":o(s),onPick:o(le)},null,8,["date","parsed-value","disabled-date","onPick"])):J("v-if",!0)],2)],2)],2),o(Mt)?(_(),V("div",{key:0,class:T(o(E).e("footer"))},[o(u)?(_(),oe(o(on),{key:0,text:"",size:"small",class:T(o(E).e("link-btn")),onClick:Ut},{default:U(()=>[st(pe(o(R)("el.datepicker.clear")),1)]),_:1},8,["class"])):J("v-if",!0),H(o(on),{plain:"",size:"small",class:T(o(E).e("link-btn")),disabled:o(Rt),onClick:Je=>o(k)(!1)},{default:U(()=>[st(pe(o(R)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled","onClick"])],2)):J("v-if",!0)],2))}});var m1=fe(h1,[["__file","panel-date-range.vue"]]);const g1=de({...ui}),b1=["pick","set-picker-option","calendar-change"],y1=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const{t:l}=pt(),a=()=>{t.value=t.value.subtract(1,"year"),e.value||(n.value=n.value.subtract(1,"year"))},s=()=>{e.value||(t.value=t.value.add(1,"year")),n.value=n.value.add(1,"year")},r=()=>{t.value=t.value.add(1,"year")},i=()=>{n.value=n.value.subtract(1,"year")},u=y(()=>`${t.value.year()} ${l("el.datepicker.year")}`),c=y(()=>`${n.value.year()} ${l("el.datepicker.year")}`),d=y(()=>t.value.year()),f=y(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year());return{leftPrevYear:a,rightNextYear:s,leftNextYear:r,rightPrevYear:i,leftLabel:u,rightLabel:c,leftYear:d,rightYear:f}},Na="year",C1=x({name:"DatePickerMonthRange"}),w1=x({...C1,props:g1,emits:b1,setup(e,{emit:t}){const n=e,{lang:l}=pt(),a=we(gl),s=we(ma),{shortcuts:r,disabledDate:i}=a.props,u=wt(a.props,"format"),c=wt(a.props,"defaultValue"),d=I(Ke().locale(l.value)),f=I(Ke().locale(l.value).add(1,Na)),{minDate:m,maxDate:v,rangeState:h,ppNs:p,drpNs:g,handleChangeRange:b,handleRangeConfirm:E,handleShortcutClick:C,onSelect:w,onReset:k}=fi(n,{defaultValue:c,leftDate:d,rightDate:f,unit:Na,onParsedValueChanged:ne}),S=y(()=>!!r.length),{leftPrevYear:$,rightNextYear:M,leftNextYear:R,rightPrevYear:N,leftLabel:O,rightLabel:P,leftYear:W,rightYear:K}=y1({unlinkPanels:wt(n,"unlinkPanels"),leftDate:d,rightDate:f}),D=y(()=>n.unlinkPanels&&K.value>W.value+1),L=(j,Q=!0)=>{const Z=j.minDate,ee=j.maxDate;v.value===ee&&m.value===Z||(t("calendar-change",[Z.toDate(),ee&&ee.toDate()]),v.value=ee,m.value=Z,Q&&E())},z=()=>{d.value=Es(o(c),{lang:o(l),unit:"year",unlinkPanels:n.unlinkPanels})[0],f.value=d.value.add(1,"year"),t("pick",null)},B=j=>ke(j)?j.map(Q=>Q.format(u.value)):j.format(u.value),A=j=>_o(j,u.value,l.value,s);function ne(j,Q){if(n.unlinkPanels&&Q){const Z=(j==null?void 0:j.year())||0,ee=Q.year();f.value=Z===ee?Q.add(1,Na):Q}else f.value=d.value.add(1,Na)}return ie(()=>n.visible,j=>{!j&&h.value.selecting&&(k(n.parsedValue),w(!1))}),t("set-picker-option",["isValidValue",Jo]),t("set-picker-option",["formatToString",B]),t("set-picker-option",["parseUserInput",A]),t("set-picker-option",["handleClear",z]),(j,Q)=>(_(),V("div",{class:T([o(p).b(),o(g).b(),{"has-sidebar":!!j.$slots.sidebar||o(S)}])},[F("div",{class:T(o(p).e("body-wrapper"))},[G(j.$slots,"sidebar",{class:T(o(p).e("sidebar"))}),o(S)?(_(),V("div",{key:0,class:T(o(p).e("sidebar"))},[(_(!0),V(Oe,null,ut(o(r),(Z,ee)=>(_(),V("button",{key:ee,type:"button",class:T(o(p).e("shortcut")),onClick:ae=>o(C)(Z)},pe(Z.text),11,["onClick"]))),128))],2)):J("v-if",!0),F("div",{class:T(o(p).e("body"))},[F("div",{class:T([[o(p).e("content"),o(g).e("content")],"is-left"])},[F("div",{class:T(o(g).e("header"))},[F("button",{type:"button",class:T([o(p).e("icon-btn"),"d-arrow-left"]),onClick:o($)},[G(j.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["onClick"]),j.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(D),class:T([[o(p).e("icon-btn"),{[o(p).is("disabled")]:!o(D)}],"d-arrow-right"]),onClick:o(R)},[G(j.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["disabled","onClick"])):J("v-if",!0),F("div",null,pe(o(O)),1)],2),H(Qo,{"selection-mode":"range",date:d.value,"min-date":o(m),"max-date":o(v),"range-state":o(h),"disabled-date":o(i),onChangerange:o(b),onPick:L,onSelect:o(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2),F("div",{class:T([[o(p).e("content"),o(g).e("content")],"is-right"])},[F("div",{class:T(o(g).e("header"))},[j.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(D),class:T([[o(p).e("icon-btn"),{"is-disabled":!o(D)}],"d-arrow-left"]),onClick:o(N)},[G(j.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["disabled","onClick"])):J("v-if",!0),F("button",{type:"button",class:T([o(p).e("icon-btn"),"d-arrow-right"]),onClick:o(M)},[G(j.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["onClick"]),F("div",null,pe(o(P)),1)],2),H(Qo,{"selection-mode":"range",date:f.value,"min-date":o(m),"max-date":o(v),"range-state":o(h),"disabled-date":o(i),onChangerange:o(b),onPick:L,onSelect:o(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2)],2)],2)],2))}});var k1=fe(w1,[["__file","panel-month-range.vue"]]);const S1=de({...ui}),E1=["pick","set-picker-option","calendar-change"],_1=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const l=()=>{t.value=t.value.subtract(10,"year"),e.value||(n.value=n.value.subtract(10,"year"))},a=()=>{e.value||(t.value=t.value.add(10,"year")),n.value=n.value.add(10,"year")},s=()=>{t.value=t.value.add(10,"year")},r=()=>{n.value=n.value.subtract(10,"year")},i=y(()=>{const f=Math.floor(t.value.year()/10)*10;return`${f}-${f+9}`}),u=y(()=>{const f=Math.floor(n.value.year()/10)*10;return`${f}-${f+9}`}),c=y(()=>Math.floor(t.value.year()/10)*10+9),d=y(()=>Math.floor(n.value.year()/10)*10);return{leftPrevYear:l,rightNextYear:a,leftNextYear:s,rightPrevYear:r,leftLabel:i,rightLabel:u,leftYear:c,rightYear:d}},oo=10,Do="year",T1=x({name:"DatePickerYearRange"}),$1=x({...T1,props:S1,emits:E1,setup(e,{emit:t}){const n=e,{lang:l}=pt(),a=I(Ke().locale(l.value)),s=I(Ke().locale(l.value).add(oo,Do)),r=we(ma),i=we(gl),{shortcuts:u,disabledDate:c}=i.props,d=wt(i.props,"format"),f=wt(i.props,"defaultValue"),{minDate:m,maxDate:v,rangeState:h,ppNs:p,drpNs:g,handleChangeRange:b,handleRangeConfirm:E,handleShortcutClick:C,onSelect:w,onReset:k}=fi(n,{defaultValue:f,leftDate:a,rightDate:s,step:oo,unit:Do,onParsedValueChanged:ee}),{leftPrevYear:S,rightNextYear:$,leftNextYear:M,rightPrevYear:R,leftLabel:N,rightLabel:O,leftYear:P,rightYear:W}=_1({unlinkPanels:wt(n,"unlinkPanels"),leftDate:a,rightDate:s}),K=y(()=>!!u.length),D=y(()=>[p.b(),g.b(),{"has-sidebar":!!Xt().sidebar||K.value}]),L=y(()=>({content:[p.e("content"),g.e("content"),"is-left"],arrowLeftBtn:[p.e("icon-btn"),"d-arrow-left"],arrowRightBtn:[p.e("icon-btn"),{[p.is("disabled")]:!B.value},"d-arrow-right"]})),z=y(()=>({content:[p.e("content"),g.e("content"),"is-right"],arrowLeftBtn:[p.e("icon-btn"),{"is-disabled":!B.value},"d-arrow-left"],arrowRightBtn:[p.e("icon-btn"),"d-arrow-right"]})),B=y(()=>n.unlinkPanels&&W.value>P.value+1),A=(ae,re=!0)=>{const le=ae.minDate,se=ae.maxDate;v.value===se&&m.value===le||(t("calendar-change",[le.toDate(),se&&se.toDate()]),v.value=se,m.value=le,re&&E())},ne=ae=>_o(ae,d.value,l.value,r),j=ae=>ke(ae)?ae.map(re=>re.format(d.value)):ae.format(d.value),Q=ae=>Jo(ae)&&(c?!c(ae[0].toDate())&&!c(ae[1].toDate()):!0),Z=()=>{const ae=Es(o(f),{lang:o(l),step:oo,unit:Do,unlinkPanels:n.unlinkPanels});a.value=ae[0],s.value=ae[1],t("pick",null)};function ee(ae,re){if(n.unlinkPanels&&re){const le=(ae==null?void 0:ae.year())||0,se=re.year();s.value=le+oo>se?re.add(oo,Do):re}else s.value=a.value.add(oo,Do)}return ie(()=>n.visible,ae=>{!ae&&h.value.selecting&&(k(n.parsedValue),w(!1))}),t("set-picker-option",["isValidValue",Q]),t("set-picker-option",["parseUserInput",ne]),t("set-picker-option",["formatToString",j]),t("set-picker-option",["handleClear",Z]),(ae,re)=>(_(),V("div",{class:T(o(D))},[F("div",{class:T(o(p).e("body-wrapper"))},[G(ae.$slots,"sidebar",{class:T(o(p).e("sidebar"))}),o(K)?(_(),V("div",{key:0,class:T(o(p).e("sidebar"))},[(_(!0),V(Oe,null,ut(o(u),(le,se)=>(_(),V("button",{key:se,type:"button",class:T(o(p).e("shortcut")),onClick:ge=>o(C)(le)},pe(le.text),11,["onClick"]))),128))],2)):J("v-if",!0),F("div",{class:T(o(p).e("body"))},[F("div",{class:T(o(L).content)},[F("div",{class:T(o(g).e("header"))},[F("button",{type:"button",class:T(o(L).arrowLeftBtn),onClick:o(S)},[G(ae.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["onClick"]),ae.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(B),class:T(o(L).arrowRightBtn),onClick:o(M)},[G(ae.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["disabled","onClick"])):J("v-if",!0),F("div",null,pe(o(N)),1)],2),H(ea,{"selection-mode":"range",date:a.value,"min-date":o(m),"max-date":o(v),"range-state":o(h),"disabled-date":o(c),onChangerange:o(b),onPick:A,onSelect:o(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2),F("div",{class:T(o(z).content)},[F("div",{class:T(o(g).e("header"))},[ae.unlinkPanels?(_(),V("button",{key:0,type:"button",disabled:!o(B),class:T(o(z).arrowLeftBtn),onClick:o(R)},[G(ae.$slots,"prev-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Rl))]),_:1})])],10,["disabled","onClick"])):J("v-if",!0),F("button",{type:"button",class:T(o(z).arrowRightBtn),onClick:o($)},[G(ae.$slots,"next-year",{},()=>[H(o(Se),null,{default:U(()=>[H(o(Pl))]),_:1})])],10,["onClick"]),F("div",null,pe(o(O)),1)],2),H(ea,{"selection-mode":"range",date:s.value,"min-date":o(m),"max-date":o(v),"range-state":o(h),"disabled-date":o(c),onChangerange:o(b),onPick:A,onSelect:o(w)},null,8,["date","min-date","max-date","range-state","disabled-date","onChangerange","onSelect"])],2)],2)],2)],2))}});var N1=fe($1,[["__file","panel-year-range.vue"]]);const I1=function(e){switch(e){case"daterange":case"datetimerange":return m1;case"monthrange":return k1;case"yearrange":return N1;default:return d1}};Ke.extend(Vc);Ke.extend(Xp);Ke.extend(Hr);Ke.extend(Zp);Ke.extend(Jp);Ke.extend(Qp);Ke.extend(eh);Ke.extend(th);var M1=x({name:"ElDatePicker",install:null,props:Xw,emits:[De],setup(e,{expose:t,emit:n,slots:l}){const a=ue("picker-panel"),s=y(()=>!e.format);rt(ma,s),rt(ai,kt(wt(e,"popperOptions"))),rt(ri,{slots:l,pickerNs:a});const r=I();t({focus:()=>{var c;(c=r.value)==null||c.focus()},blur:()=>{var c;(c=r.value)==null||c.blur()},handleOpen:()=>{var c;(c=r.value)==null||c.handleOpen()},handleClose:()=>{var c;(c=r.value)==null||c.handleClose()}});const u=c=>{n(De,c)};return()=>{var c;const d=(c=e.format)!=null?c:Pw[e.type]||uo,f=I1(e.type);return H(pf,et(e,{format:d,type:e.type,ref:r,"onUpdate:modelValue":u}),{default:m=>H(f,m,{"prev-month":l["prev-month"],"next-month":l["next-month"],"prev-year":l["prev-year"],"next-year":l["next-year"]}),"range-separator":l["range-separator"]})}}});const R1=He(M1),vi=Symbol("elDescriptions");var Ao=x({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:we(vi,{})}},render(){var e;const t=J0(this.cell),n=(((e=this.cell)==null?void 0:e.dirs)||[]).map(b=>{const{dir:E,arg:C,modifiers:w,value:k}=b;return[E,k,C,w]}),{border:l,direction:a}=this.descriptions,s=a==="vertical",r=()=>{var b,E,C;return((C=(E=(b=this.cell)==null?void 0:b.children)==null?void 0:E.label)==null?void 0:C.call(E))||t.label},i=()=>{var b,E,C;return(C=(E=(b=this.cell)==null?void 0:b.children)==null?void 0:E.default)==null?void 0:C.call(E)},u=t.span,c=t.rowspan,d=t.align?`is-${t.align}`:"",f=t.labelAlign?`is-${t.labelAlign}`:d,m=t.className,v=t.labelClassName,h=this.type==="label"&&(t.labelWidth||this.descriptions.labelWidth)||t.width,p={width:zt(h),minWidth:zt(t.minWidth)},g=ue("descriptions");switch(this.type){case"label":return We(Re(this.tag,{style:p,class:[g.e("cell"),g.e("label"),g.is("bordered-label",l),g.is("vertical-label",s),f,v],colSpan:s?u:1,rowspan:s?1:c},r()),n);case"content":return We(Re(this.tag,{style:p,class:[g.e("cell"),g.e("content"),g.is("bordered-content",l),g.is("vertical-content",s),d,m],colSpan:s?u:u*2-1,rowspan:s?c*2-1:c},i()),n);default:{const b=r(),E={},C=zt(t.labelWidth||this.descriptions.labelWidth);return C&&(E.width=C,E.display="inline-block"),We(Re("td",{style:p,class:[g.e("cell"),d],colSpan:u,rowspan:c},[qt(b)?void 0:Re("span",{style:E,class:[g.e("label"),v]},b),Re("span",{class:[g.e("content"),m]},i())]),n)}}}});const P1=de({row:{type:Y(Array),default:()=>[]}}),O1=x({name:"ElDescriptionsRow"}),L1=x({...O1,props:P1,setup(e){const t=we(vi,{});return(n,l)=>o(t).direction==="vertical"?(_(),V(Oe,{key:0},[F("tr",null,[(_(!0),V(Oe,null,ut(n.row,(a,s)=>(_(),oe(o(Ao),{key:`tr1-${s}`,cell:a,tag:"th",type:"label"},null,8,["cell"]))),128))]),F("tr",null,[(_(!0),V(Oe,null,ut(n.row,(a,s)=>(_(),oe(o(Ao),{key:`tr2-${s}`,cell:a,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(_(),V("tr",{key:1},[(_(!0),V(Oe,null,ut(n.row,(a,s)=>(_(),V(Oe,{key:`tr3-${s}`},[o(t).border?(_(),V(Oe,{key:0},[H(o(Ao),{cell:a,tag:"td",type:"label"},null,8,["cell"]),H(o(Ao),{cell:a,tag:"td",type:"content"},null,8,["cell"])],64)):(_(),oe(o(Ao),{key:1,cell:a,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}});var B1=fe(L1,[["__file","descriptions-row.vue"]]);const V1=de({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:Jt,title:{type:String,default:""},extra:{type:String,default:""},labelWidth:{type:[String,Number],default:""}}),Cf="ElDescriptionsItem",D1=x({name:"ElDescriptions"}),A1=x({...D1,props:V1,setup(e){const t=e,n=ue("descriptions"),l=Gt(),a=Xt();rt(vi,t);const s=y(()=>[n.b(),n.m(l.value)]),r=(u,c,d,f=!1)=>(u.props||(u.props={}),c>d&&(u.props.span=d),f&&(u.props.span=c),u),i=()=>{if(!a.default)return[];const u=Zn(a.default()).filter(h=>{var p;return((p=h==null?void 0:h.type)==null?void 0:p.name)===Cf}),c=[];let d=[],f=t.column,m=0;const v=[];return u.forEach((h,p)=>{var g,b,E;const C=((g=h.props)==null?void 0:g.span)||1,w=((b=h.props)==null?void 0:b.rowspan)||1,k=c.length;if(v[k]||(v[k]=0),w>1)for(let S=1;S0&&(f-=v[k],v[k]=0),pf?f:C),p===u.length-1){const S=t.column-m%t.column;d.push(r(h,S,f,!0)),c.push(d);return}C(_(),V("div",{class:T(o(s))},[u.title||u.extra||u.$slots.title||u.$slots.extra?(_(),V("div",{key:0,class:T(o(n).e("header"))},[F("div",{class:T(o(n).e("title"))},[G(u.$slots,"title",{},()=>[st(pe(u.title),1)])],2),F("div",{class:T(o(n).e("extra"))},[G(u.$slots,"extra",{},()=>[st(pe(u.extra),1)])],2)],2)):J("v-if",!0),F("div",{class:T(o(n).e("body"))},[F("table",{class:T([o(n).e("table"),o(n).is("bordered",u.border)])},[F("tbody",null,[(_(!0),V(Oe,null,ut(i(),(d,f)=>(_(),oe(B1,{key:f,row:d},null,8,["row"]))),128))])],2)],2)],2))}});var F1=fe(A1,[["__file","description.vue"]]);const zu=["left","center","right"],x1=de({label:{type:String,default:""},span:{type:Number,default:1},rowspan:{type:Number,default:1},width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},labelWidth:{type:[String,Number],default:""},align:{type:String,values:zu,default:"left"},labelAlign:{type:String,values:zu},className:{type:String,default:""},labelClassName:{type:String,default:""}}),wf=x({name:Cf,props:x1}),z1=He(F1,{DescriptionsItem:wf}),H1=At(wf),pi=e=>{if(!e)return{onClick:Bt,onMousedown:Bt,onMouseup:Bt};let t=!1,n=!1;return{onClick:r=>{t&&n&&e(r),t=n=!1},onMousedown:r=>{t=r.target===r.currentTarget},onMouseup:r=>{n=r.target===r.currentTarget}}},K1=de({mask:{type:Boolean,default:!0},customMaskEvent:Boolean,overlayClass:{type:Y([String,Array,Object])},zIndex:{type:Y([String,Number])}}),W1={click:e=>e instanceof MouseEvent},j1="overlay";var U1=x({name:"ElOverlay",props:K1,emits:W1,setup(e,{slots:t,emit:n}){const l=ue(j1),a=u=>{n("click",u)},{onClick:s,onMousedown:r,onMouseup:i}=pi(e.customMaskEvent?void 0:a);return()=>e.mask?H("div",{class:[l.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:s,onMousedown:r,onMouseup:i},[G(t,"default")],Vn.STYLE|Vn.CLASS|Vn.PROPS,["onClick","onMouseup","onMousedown"]):Re("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[G(t,"default")])}});const hi=U1,kf=Symbol("dialogInjectionKey"),Sf=de({center:Boolean,alignCenter:Boolean,closeIcon:{type:$t},draggable:Boolean,overflow:Boolean,fullscreen:Boolean,headerClass:String,bodyClass:String,footerClass:String,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),Y1={close:()=>!0},Ef=(e,t,n,l)=>{const a={offsetX:0,offsetY:0},s=(f,m)=>{if(e.value){const{offsetX:v,offsetY:h}=a,p=e.value.getBoundingClientRect(),g=p.left,b=p.top,E=p.width,C=p.height,w=document.documentElement.clientWidth,k=document.documentElement.clientHeight,S=-g+v,$=-b+h,M=w-g-E+v,R=k-b-(C{const m=f.clientX,v=f.clientY,{offsetX:h,offsetY:p}=a,g=E=>{const C=h+E.clientX-m,w=p+E.clientY-v;s(C,w)},b=()=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",b)};document.addEventListener("mousemove",g),document.addEventListener("mouseup",b)},i=()=>{t.value&&e.value&&(t.value.addEventListener("mousedown",r),window.addEventListener("resize",d))},u=()=>{t.value&&e.value&&(t.value.removeEventListener("mousedown",r),window.removeEventListener("resize",d))},c=()=>{a.offsetX=0,a.offsetY=0,e.value&&(e.value.style.transform="")},d=()=>{const{offsetX:f,offsetY:m}=a;s(f,m)};return Xe(()=>{bn(()=>{n.value?i():u()})}),Nt(()=>{u()}),{resetPosition:c,updatePosition:d}},_s=(...e)=>t=>{e.forEach(n=>{Qe(n)?n(t):n.value=t})},q1=x({name:"ElDialogContent"}),G1=x({...q1,props:Sf,emits:Y1,setup(e,{expose:t}){const n=e,{t:l}=pt(),{Close:a}=fd,{dialogRef:s,headerRef:r,bodyId:i,ns:u,style:c}=we(kf),{focusTrapRef:d}=we(ei),f=y(()=>[u.b(),u.is("fullscreen",n.fullscreen),u.is("draggable",n.draggable),u.is("align-center",n.alignCenter),{[u.m("center")]:n.center}]),m=_s(d,s),v=y(()=>n.draggable),h=y(()=>n.overflow),{resetPosition:p,updatePosition:g}=Ef(s,r,v,h);return t({resetPosition:p,updatePosition:g}),(b,E)=>(_(),V("div",{ref:o(m),class:T(o(f)),style:_e(o(c)),tabindex:"-1"},[F("header",{ref_key:"headerRef",ref:r,class:T([o(u).e("header"),b.headerClass,{"show-close":b.showClose}])},[G(b.$slots,"header",{},()=>[F("span",{role:"heading","aria-level":b.ariaLevel,class:T(o(u).e("title"))},pe(b.title),11,["aria-level"])]),b.showClose?(_(),V("button",{key:0,"aria-label":o(l)("el.dialog.close"),class:T(o(u).e("headerbtn")),type:"button",onClick:C=>b.$emit("close")},[H(o(Se),{class:T(o(u).e("close"))},{default:U(()=>[(_(),oe(Ge(b.closeIcon||o(a))))]),_:1},8,["class"])],10,["aria-label","onClick"])):J("v-if",!0)],2),F("div",{id:o(i),class:T([o(u).e("body"),b.bodyClass])},[G(b.$slots,"default")],10,["id"]),b.$slots.footer?(_(),V("footer",{key:0,class:T([o(u).e("footer"),b.footerClass])},[G(b.$slots,"footer")],2)):J("v-if",!0)],6))}});var X1=fe(G1,[["__file","dialog-content.vue"]]);const _f=de({...Sf,appendToBody:Boolean,appendTo:{type:ws.to.type,default:"body"},beforeClose:{type:Y(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,headerClass:String,bodyClass:String,footerClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:Boolean,headerAriaLevel:{type:String,default:"2"}}),Tf={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[De]:e=>_t(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},mi=(e,t={})=>{gn(e)||jt("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||ue("popup"),l=y(()=>n.bm("parent","hidden"));if(!bt||Nn(document.body,l.value))return;let a=0,s=!1,r="0";const i=()=>{setTimeout(()=>{typeof document>"u"||s&&document&&(document.body.style.width=r,yn(document.body,l.value))},200)};ie(e,u=>{if(!u){i();return}s=!Nn(document.body,l.value),s&&(r=document.body.style.width,Fn(document.body,l.value)),a=nd(n.namespace.value);const c=document.documentElement.clientHeight0&&(c||d==="scroll")&&s&&(document.body.style.width=`calc(100% - ${a}px)`)}),Op(()=>i())},$f=(e,t)=>{var n;const a=lt().emit,{nextZIndex:s}=Mo();let r="";const i=sn(),u=sn(),c=I(!1),d=I(!1),f=I(!1),m=I((n=e.zIndex)!=null?n:s());let v,h;const p=fa("namespace",Ko),g=y(()=>{const D={},L=`--${p.value}-dialog`;return e.fullscreen||(e.top&&(D[`${L}-margin-top`]=e.top),e.width&&(D[`${L}-width`]=zt(e.width))),D}),b=y(()=>e.alignCenter?{display:"flex"}:{});function E(){a("opened")}function C(){a("closed"),a(De,!1),e.destroyOnClose&&(f.value=!1)}function w(){a("close")}function k(){h==null||h(),v==null||v(),e.openDelay&&e.openDelay>0?{stop:v}=Ul(()=>R(),e.openDelay):R()}function S(){v==null||v(),h==null||h(),e.closeDelay&&e.closeDelay>0?{stop:h}=Ul(()=>N(),e.closeDelay):N()}function $(){function D(L){L||(d.value=!0,c.value=!1)}e.beforeClose?e.beforeClose(D):S()}function M(){e.closeOnClickModal&&$()}function R(){bt&&(c.value=!0)}function N(){c.value=!1}function O(){a("openAutoFocus")}function P(){a("closeAutoFocus")}function W(D){var L;((L=D.detail)==null?void 0:L.focusReason)==="pointer"&&D.preventDefault()}e.lockScroll&&mi(c);function K(){e.closeOnPressEscape&&$()}return ie(()=>e.zIndex,()=>{var D;m.value=(D=e.zIndex)!=null?D:s()}),ie(()=>e.modelValue,D=>{var L;D?(d.value=!1,k(),f.value=!0,m.value=(L=e.zIndex)!=null?L:s(),Ee(()=>{a("open"),t.value&&(t.value.parentElement.scrollTop=0,t.value.parentElement.scrollLeft=0,t.value.scrollTop=0)})):c.value&&S()}),ie(()=>e.fullscreen,D=>{t.value&&(D?(r=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=r)}),Xe(()=>{e.modelValue&&(c.value=!0,f.value=!0,k())}),{afterEnter:E,afterLeave:C,beforeLeave:w,handleClose:$,onModalClick:M,close:S,doClose:N,onOpenAutoFocus:O,onCloseAutoFocus:P,onCloseRequested:K,onFocusoutPrevented:W,titleId:i,bodyId:u,closed:d,style:g,overlayDialogStyle:b,rendered:f,visible:c,zIndex:m}},Z1=x({name:"ElDialog",inheritAttrs:!1}),J1=x({...Z1,props:_f,emits:Tf,setup(e,{expose:t}){const n=e,l=Xt();ul({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},y(()=>!!l.title));const a=ue("dialog"),s=I(),r=I(),i=I(),{visible:u,titleId:c,bodyId:d,style:f,overlayDialogStyle:m,rendered:v,zIndex:h,afterEnter:p,afterLeave:g,beforeLeave:b,handleClose:E,onModalClick:C,onOpenAutoFocus:w,onCloseAutoFocus:k,onCloseRequested:S,onFocusoutPrevented:$}=$f(n,s);rt(kf,{dialogRef:s,headerRef:r,bodyId:d,ns:a,rendered:v,style:f});const M=pi(C),R=y(()=>n.draggable&&!n.fullscreen);return t({visible:u,dialogContentRef:i,resetPosition:()=>{var O;(O=i.value)==null||O.resetPosition()},handleClose:E}),(O,P)=>(_(),oe(o(Po),{to:O.appendTo,disabled:O.appendTo!=="body"?!1:!O.appendToBody},{default:U(()=>[H(an,{name:"dialog-fade",onAfterEnter:o(p),onAfterLeave:o(g),onBeforeLeave:o(b),persisted:""},{default:U(()=>[We(H(o(hi),{"custom-mask-event":"",mask:O.modal,"overlay-class":O.modalClass,"z-index":o(h)},{default:U(()=>[F("div",{role:"dialog","aria-modal":"true","aria-label":O.title||void 0,"aria-labelledby":O.title?void 0:o(c),"aria-describedby":o(d),class:T(`${o(a).namespace.value}-overlay-dialog`),style:_e(o(m)),onClick:o(M).onClick,onMousedown:o(M).onMousedown,onMouseup:o(M).onMouseup},[H(o(Ro),{loop:"",trapped:o(u),"focus-start-el":"container",onFocusAfterTrapped:o(w),onFocusAfterReleased:o(k),onFocusoutPrevented:o($),onReleaseRequested:o(S)},{default:U(()=>[o(v)?(_(),oe(X1,et({key:0,ref_key:"dialogContentRef",ref:i},O.$attrs,{center:O.center,"align-center":O.alignCenter,"close-icon":O.closeIcon,draggable:o(R),overflow:O.overflow,fullscreen:O.fullscreen,"header-class":O.headerClass,"body-class":O.bodyClass,"footer-class":O.footerClass,"show-close":O.showClose,title:O.title,"aria-level":O.headerAriaLevel,onClose:o(E)}),Mn({header:U(()=>[O.$slots.title?G(O.$slots,"title",{key:1}):G(O.$slots,"header",{key:0,close:o(E),titleId:o(c),titleClass:o(a).e("title")})]),default:U(()=>[G(O.$slots,"default")]),_:2},[O.$slots.footer?{name:"footer",fn:U(()=>[G(O.$slots,"footer")])}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","header-class","body-class","footer-class","show-close","title","aria-level","onClose"])):J("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,["aria-label","aria-labelledby","aria-describedby","onClick","onMousedown","onMouseup"])]),_:3},8,["mask","overlay-class","z-index"]),[[mt,o(u)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])]),_:3},8,["to","disabled"]))}});var Q1=fe(J1,[["__file","dialog.vue"]]);const ek=He(Q1),tk=de({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Y(String),default:"solid"}}),nk=x({name:"ElDivider"}),lk=x({...nk,props:tk,setup(e){const t=e,n=ue("divider"),l=y(()=>n.cssVar({"border-style":t.borderStyle}));return(a,s)=>(_(),V("div",{class:T([o(n).b(),o(n).m(a.direction)]),style:_e(o(l)),role:"separator"},[a.$slots.default&&a.direction!=="vertical"?(_(),V("div",{key:0,class:T([o(n).e("text"),o(n).is(a.contentPosition)])},[G(a.$slots,"default")],2)):J("v-if",!0)],6))}});var ok=fe(lk,[["__file","divider.vue"]]);const Nf=He(ok),ak=de({..._f,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),sk=Tf,rk=x({name:"ElDrawer",inheritAttrs:!1}),ik=x({...rk,props:ak,emits:sk,setup(e,{expose:t}){const n=e,l=Xt();ul({scope:"el-drawer",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/drawer.html#slots"},y(()=>!!l.title));const a=I(),s=I(),r=ue("drawer"),{t:i}=pt(),{afterEnter:u,afterLeave:c,beforeLeave:d,visible:f,rendered:m,titleId:v,bodyId:h,zIndex:p,onModalClick:g,onOpenAutoFocus:b,onCloseAutoFocus:E,onFocusoutPrevented:C,onCloseRequested:w,handleClose:k}=$f(n,a),S=y(()=>n.direction==="rtl"||n.direction==="ltr"),$=y(()=>zt(n.size));return t({handleClose:k,afterEnter:u,afterLeave:c}),(M,R)=>(_(),oe(o(Po),{to:M.appendTo,disabled:M.appendTo!=="body"?!1:!M.appendToBody},{default:U(()=>[H(an,{name:o(r).b("fade"),onAfterEnter:o(u),onAfterLeave:o(c),onBeforeLeave:o(d),persisted:""},{default:U(()=>[We(H(o(hi),{mask:M.modal,"overlay-class":M.modalClass,"z-index":o(p),onClick:o(g)},{default:U(()=>[H(o(Ro),{loop:"",trapped:o(f),"focus-trap-el":a.value,"focus-start-el":s.value,onFocusAfterTrapped:o(b),onFocusAfterReleased:o(E),onFocusoutPrevented:o(C),onReleaseRequested:o(w)},{default:U(()=>[F("div",et({ref_key:"drawerRef",ref:a,"aria-modal":"true","aria-label":M.title||void 0,"aria-labelledby":M.title?void 0:o(v),"aria-describedby":o(h)},M.$attrs,{class:[o(r).b(),M.direction,o(f)&&"open"],style:o(S)?"width: "+o($):"height: "+o($),role:"dialog",onClick:Le(()=>{},["stop"])}),[F("span",{ref_key:"focusStartRef",ref:s,class:T(o(r).e("sr-focus")),tabindex:"-1"},null,2),M.withHeader?(_(),V("header",{key:0,class:T([o(r).e("header"),M.headerClass])},[M.$slots.title?G(M.$slots,"title",{key:1},()=>[J(" DEPRECATED SLOT ")]):G(M.$slots,"header",{key:0,close:o(k),titleId:o(v),titleClass:o(r).e("title")},()=>[M.$slots.title?J("v-if",!0):(_(),V("span",{key:0,id:o(v),role:"heading","aria-level":M.headerAriaLevel,class:T(o(r).e("title"))},pe(M.title),11,["id","aria-level"]))]),M.showClose?(_(),V("button",{key:2,"aria-label":o(i)("el.drawer.close"),class:T(o(r).e("close-btn")),type:"button",onClick:o(k)},[H(o(Se),{class:T(o(r).e("close"))},{default:U(()=>[H(o(zn))]),_:1},8,["class"])],10,["aria-label","onClick"])):J("v-if",!0)],2)):J("v-if",!0),o(m)?(_(),V("div",{key:1,id:o(h),class:T([o(r).e("body"),M.bodyClass])},[G(M.$slots,"default")],10,["id"])):J("v-if",!0),M.$slots.footer?(_(),V("div",{key:2,class:T([o(r).e("footer"),M.footerClass])},[G(M.$slots,"footer")],2)):J("v-if",!0)],16,["aria-label","aria-labelledby","aria-describedby","onClick"])]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[mt,o(f)]])]),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])]),_:3},8,["to","disabled"]))}});var uk=fe(ik,[["__file","drawer.vue"]]);const ck=He(uk),dk=x({inheritAttrs:!1});function fk(e,t,n,l,a,s){return G(e.$slots,"default")}var vk=fe(dk,[["render",fk],["__file","collection.vue"]]);const pk=x({name:"ElCollectionItem",inheritAttrs:!1});function hk(e,t,n,l,a,s){return G(e.$slots,"default")}var mk=fe(pk,[["render",hk],["__file","collection-item.vue"]]);const If="data-el-collection-item",Mf=e=>{const t=`El${e}Collection`,n=`${t}Item`,l=Symbol(t),a=Symbol(n),s={...vk,name:t,setup(){const i=I(),u=new Map;rt(l,{itemMap:u,getItems:()=>{const d=o(i);if(!d)return[];const f=Array.from(d.querySelectorAll(`[${If}]`));return[...u.values()].sort((v,h)=>f.indexOf(v.ref)-f.indexOf(h.ref))},collectionRef:i})}},r={...mk,name:n,setup(i,{attrs:u}){const c=I(),d=we(l,void 0);rt(a,{collectionItemRef:c}),Xe(()=>{const f=o(c);f&&d.itemMap.set(f,{ref:f,...u})}),Nt(()=>{const f=o(c);d.itemMap.delete(f)})}};return{COLLECTION_INJECTION_KEY:l,COLLECTION_ITEM_INJECTION_KEY:a,ElCollection:s,ElCollectionItem:r}},gk=de({style:{type:Y([String,Array,Object])},currentTabId:{type:Y(String)},defaultCurrentTabId:String,loop:Boolean,dir:{type:String,values:["ltr","rtl"],default:"ltr"},orientation:{type:Y(String)},onBlur:Function,onFocus:Function,onMousedown:Function}),{ElCollection:bk,ElCollectionItem:yk,COLLECTION_INJECTION_KEY:gi,COLLECTION_ITEM_INJECTION_KEY:Ck}=Mf("RovingFocusGroup"),bi=Symbol("elRovingFocusGroup"),Rf=Symbol("elRovingFocusGroupItem"),wk={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"},kk=(e,t)=>e,Sk=(e,t,n)=>{const l=kk(e.code);return wk[l]},Ek=(e,t)=>e.map((n,l)=>e[(l+t)%e.length]),yi=e=>{const{activeElement:t}=document;for(const n of e)if(n===t||(n.focus(),t!==document.activeElement))return},Hu="currentTabIdChange",Ku="rovingFocusGroup.entryFocus",_k={bubbles:!1,cancelable:!0},Tk=x({name:"ElRovingFocusGroupImpl",inheritAttrs:!1,props:gk,emits:[Hu,"entryFocus"],setup(e,{emit:t}){var n;const l=I((n=e.currentTabId||e.defaultCurrentTabId)!=null?n:null),a=I(!1),s=I(!1),r=I(),{getItems:i}=we(gi,void 0),u=y(()=>[{outline:"none"},e.style]),c=p=>{t(Hu,p)},d=()=>{a.value=!0},f=Ht(p=>{var g;(g=e.onMousedown)==null||g.call(e,p)},()=>{s.value=!0}),m=Ht(p=>{var g;(g=e.onFocus)==null||g.call(e,p)},p=>{const g=!o(s),{target:b,currentTarget:E}=p;if(b===E&&g&&!o(a)){const C=new Event(Ku,_k);if(E==null||E.dispatchEvent(C),!C.defaultPrevented){const w=i().filter(R=>R.focusable),k=w.find(R=>R.active),S=w.find(R=>R.id===o(l)),M=[k,S,...w].filter(Boolean).map(R=>R.ref);yi(M)}}s.value=!1}),v=Ht(p=>{var g;(g=e.onBlur)==null||g.call(e,p)},()=>{a.value=!1}),h=(...p)=>{t("entryFocus",...p)};rt(bi,{currentTabbedId:Ic(l),loop:wt(e,"loop"),tabIndex:y(()=>o(a)?-1:0),rovingFocusGroupRef:r,rovingFocusGroupRootStyle:u,orientation:wt(e,"orientation"),dir:wt(e,"dir"),onItemFocus:c,onItemShiftTab:d,onBlur:v,onFocus:m,onMousedown:f}),ie(()=>e.currentTabId,p=>{l.value=p??null}),xt(r,Ku,h)}});function $k(e,t,n,l,a,s){return G(e.$slots,"default")}var Nk=fe(Tk,[["render",$k],["__file","roving-focus-group-impl.vue"]]);const Ik=x({name:"ElRovingFocusGroup",components:{ElFocusGroupCollection:bk,ElRovingFocusGroupImpl:Nk}});function Mk(e,t,n,l,a,s){const r=ht("el-roving-focus-group-impl"),i=ht("el-focus-group-collection");return _(),oe(i,null,{default:U(()=>[H(r,On(cl(e.$attrs)),{default:U(()=>[G(e.$slots,"default")]),_:3},16)]),_:3})}var Rk=fe(Ik,[["render",Mk],["__file","roving-focus-group.vue"]]);const Va=de({trigger:mo.trigger,triggerKeys:{type:Y(Array),default:()=>[Ce.enter,Ce.numpadEnter,Ce.space,Ce.down]},effect:{...Wt.effect,default:"light"},type:{type:Y(String)},placement:{type:Y(String),default:"bottom"},popperOptions:{type:Y(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:Y([Number,String]),default:0},maxHeight:{type:Y([Number,String]),default:""},popperClass:{type:String,default:""},disabled:Boolean,role:{type:String,values:yd,default:"menu"},buttonProps:{type:Y(Object)},teleported:Wt.teleported,persistent:{type:Boolean,default:!0}}),Pf=de({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:$t}}),Pk=de({onKeydown:{type:Y(Function)}}),Ok=[Ce.down,Ce.pageDown,Ce.home],Of=[Ce.up,Ce.pageUp,Ce.end],Lk=[...Ok,...Of],{ElCollection:Bk,ElCollectionItem:Vk,COLLECTION_INJECTION_KEY:Dk,COLLECTION_ITEM_INJECTION_KEY:Ak}=Mf("Dropdown"),Ts=Symbol("elDropdown"),Lf="elDropdown",{ButtonGroup:Fk}=on,xk=x({name:"ElDropdown",components:{ElButton:on,ElButtonGroup:Fk,ElScrollbar:jn,ElDropdownCollection:Bk,ElTooltip:un,ElRovingFocusGroup:Rk,ElOnlyChild:Sd,ElIcon:Se,ArrowDown:nl},props:Va,emits:["visible-change","click","command"],setup(e,{emit:t}){const n=lt(),l=ue("dropdown"),{t:a}=pt(),s=I(),r=I(),i=I(),u=I(),c=I(null),d=I(null),f=I(!1),m=y(()=>({maxHeight:zt(e.maxHeight)})),v=y(()=>[l.m(w.value)]),h=y(()=>ln(e.trigger)),p=sn().value,g=y(()=>e.id||p);ie([s,h],([L,z],[B])=>{var A,ne,j;(A=B==null?void 0:B.$el)!=null&&A.removeEventListener&&B.$el.removeEventListener("pointerenter",S),(ne=L==null?void 0:L.$el)!=null&&ne.removeEventListener&&L.$el.removeEventListener("pointerenter",S),(j=L==null?void 0:L.$el)!=null&&j.addEventListener&&z.includes("hover")&&L.$el.addEventListener("pointerenter",S)},{immediate:!0}),Nt(()=>{var L,z;(z=(L=s.value)==null?void 0:L.$el)!=null&&z.removeEventListener&&s.value.$el.removeEventListener("pointerenter",S)});function b(){E()}function E(){var L;(L=i.value)==null||L.onClose()}function C(){var L;(L=i.value)==null||L.onOpen()}const w=Gt();function k(...L){t("command",...L)}function S(){var L,z;(z=(L=s.value)==null?void 0:L.$el)==null||z.focus()}function $(){}function M(){const L=o(u);h.value.includes("hover")&&(L==null||L.focus()),d.value=null}function R(L){d.value=L}function N(L){f.value||(L.preventDefault(),L.stopImmediatePropagation())}function O(){t("visible-change",!0)}function P(L){var z;(L==null?void 0:L.type)==="keydown"&&((z=u.value)==null||z.focus())}function W(){t("visible-change",!1)}return rt(Ts,{contentRef:u,role:y(()=>e.role),triggerId:g,isUsingKeyboard:f,onItemEnter:$,onItemLeave:M}),rt(Lf,{instance:n,dropdownSize:w,handleClick:b,commandHandler:k,trigger:wt(e,"trigger"),hideOnClick:wt(e,"hideOnClick")}),{t:a,ns:l,scrollbar:c,wrapStyle:m,dropdownTriggerKls:v,dropdownSize:w,triggerId:g,currentTabId:d,handleCurrentTabIdChange:R,handlerMainButtonClick:L=>{t("click",L)},handleEntryFocus:N,handleClose:E,handleOpen:C,handleBeforeShowTooltip:O,handleShowTooltip:P,handleBeforeHideTooltip:W,onFocusAfterTrapped:L=>{var z,B;L.preventDefault(),(B=(z=u.value)==null?void 0:z.focus)==null||B.call(z,{preventScroll:!0})},popperRef:i,contentRef:u,triggeringElementRef:s,referenceElementRef:r}}});function zk(e,t,n,l,a,s){var r;const i=ht("el-dropdown-collection"),u=ht("el-roving-focus-group"),c=ht("el-scrollbar"),d=ht("el-only-child"),f=ht("el-tooltip"),m=ht("el-button"),v=ht("arrow-down"),h=ht("el-icon"),p=ht("el-button-group");return _(),V("div",{class:T([e.ns.b(),e.ns.is("disabled",e.disabled)])},[H(f,{ref:"popperRef",role:e.role,effect:e.effect,"fallback-placements":["bottom","top"],"popper-options":e.popperOptions,"gpu-acceleration":!1,"hide-after":e.trigger==="hover"?e.hideTimeout:0,"manual-mode":!0,placement:e.placement,"popper-class":[e.ns.e("popper"),e.popperClass],"reference-element":(r=e.referenceElementRef)==null?void 0:r.$el,trigger:e.trigger,"trigger-keys":e.triggerKeys,"trigger-target-el":e.contentRef,"show-after":e.trigger==="hover"?e.showTimeout:0,"stop-popper-mouse-event":!1,"virtual-ref":e.triggeringElementRef,"virtual-triggering":e.splitButton,disabled:e.disabled,transition:`${e.ns.namespace.value}-zoom-in-top`,teleported:e.teleported,pure:"",persistent:e.persistent,onBeforeShow:e.handleBeforeShowTooltip,onShow:e.handleShowTooltip,onBeforeHide:e.handleBeforeHideTooltip},Mn({content:U(()=>[H(c,{ref:"scrollbar","wrap-style":e.wrapStyle,tag:"div","view-class":e.ns.e("list")},{default:U(()=>[H(u,{loop:e.loop,"current-tab-id":e.currentTabId,orientation:"horizontal",onCurrentTabIdChange:e.handleCurrentTabIdChange,onEntryFocus:e.handleEntryFocus},{default:U(()=>[H(i,null,{default:U(()=>[G(e.$slots,"dropdown")]),_:3})]),_:3},8,["loop","current-tab-id","onCurrentTabIdChange","onEntryFocus"])]),_:3},8,["wrap-style","view-class"])]),_:2},[e.splitButton?void 0:{name:"default",fn:U(()=>[H(d,{id:e.triggerId,ref:"triggeringElementRef",role:"button",tabindex:e.tabindex},{default:U(()=>[G(e.$slots,"default")]),_:3},8,["id","tabindex"])])}]),1032,["role","effect","popper-options","hide-after","placement","popper-class","reference-element","trigger","trigger-keys","trigger-target-el","show-after","virtual-ref","virtual-triggering","disabled","transition","teleported","persistent","onBeforeShow","onShow","onBeforeHide"]),e.splitButton?(_(),oe(p,{key:0},{default:U(()=>[H(m,et({ref:"referenceElementRef"},e.buttonProps,{size:e.dropdownSize,type:e.type,disabled:e.disabled,tabindex:e.tabindex,onClick:e.handlerMainButtonClick}),{default:U(()=>[G(e.$slots,"default")]),_:3},16,["size","type","disabled","tabindex","onClick"]),H(m,et({id:e.triggerId,ref:"triggeringElementRef"},e.buttonProps,{role:"button",size:e.dropdownSize,type:e.type,class:e.ns.e("caret-button"),disabled:e.disabled,tabindex:e.tabindex,"aria-label":e.t("el.dropdown.toggleDropdown")}),{default:U(()=>[H(h,{class:T(e.ns.e("icon"))},{default:U(()=>[H(v)]),_:1},8,["class"])]),_:1},16,["id","size","type","class","disabled","tabindex","aria-label"])]),_:3})):J("v-if",!0)],2)}var Hk=fe(xk,[["render",zk],["__file","dropdown.vue"]]);const Kk=x({components:{ElRovingFocusCollectionItem:yk},props:{focusable:{type:Boolean,default:!0},active:Boolean},emits:["mousedown","focus","keydown"],setup(e,{emit:t}){const{currentTabbedId:n,loop:l,onItemFocus:a,onItemShiftTab:s}=we(bi,void 0),{getItems:r}=we(gi,void 0),i=sn(),u=I(),c=Ht(v=>{t("mousedown",v)},v=>{e.focusable?a(o(i)):v.preventDefault()}),d=Ht(v=>{t("focus",v)},()=>{a(o(i))}),f=Ht(v=>{t("keydown",v)},v=>{const{code:h,shiftKey:p,target:g,currentTarget:b}=v;if(h===Ce.tab&&p){s();return}if(g!==b)return;const E=Sk(v);if(E){v.preventDefault();let w=r().filter(k=>k.focusable).map(k=>k.ref);switch(E){case"last":{w.reverse();break}case"prev":case"next":{E==="prev"&&w.reverse();const k=w.indexOf(b);w=l.value?Ek(w,k+1):w.slice(k+1);break}}Ee(()=>{yi(w)})}}),m=y(()=>n.value===o(i));return rt(Rf,{rovingFocusGroupItemRef:u,tabIndex:y(()=>o(m)?0:-1),handleMousedown:c,handleFocus:d,handleKeydown:f}),{id:i,handleKeydown:f,handleFocus:d,handleMousedown:c}}});function Wk(e,t,n,l,a,s){const r=ht("el-roving-focus-collection-item");return _(),oe(r,{id:e.id,focusable:e.focusable,active:e.active},{default:U(()=>[G(e.$slots,"default")]),_:3},8,["id","focusable","active"])}var jk=fe(Kk,[["render",Wk],["__file","roving-focus-item.vue"]]);const Uk=x({name:"DropdownItemImpl",components:{ElIcon:Se},props:Pf,emits:["pointermove","pointerleave","click","clickimpl"],setup(e,{emit:t}){const n=ue("dropdown"),{role:l}=we(Ts,void 0),{collectionItemRef:a}=we(Ak,void 0),{collectionItemRef:s}=we(Ck,void 0),{rovingFocusGroupItemRef:r,tabIndex:i,handleFocus:u,handleKeydown:c,handleMousedown:d}=we(Rf,void 0),f=_s(a,s,r),m=y(()=>l.value==="menu"?"menuitem":l.value==="navigation"?"link":"button"),v=Ht(h=>{if([Ce.enter,Ce.numpadEnter,Ce.space].includes(h.code))return h.preventDefault(),h.stopImmediatePropagation(),t("clickimpl",h),!0},c);return{ns:n,itemRef:f,dataset:{[If]:""},role:m,tabIndex:i,handleFocus:u,handleKeydown:v,handleMousedown:d}}});function Yk(e,t,n,l,a,s){const r=ht("el-icon");return _(),V(Oe,null,[e.divided?(_(),V("li",{key:0,role:"separator",class:T(e.ns.bem("menu","item","divided"))},null,2)):J("v-if",!0),F("li",et({ref:e.itemRef},{...e.dataset,...e.$attrs},{"aria-disabled":e.disabled,class:[e.ns.be("menu","item"),e.ns.is("disabled",e.disabled)],tabindex:e.tabIndex,role:e.role,onClick:i=>e.$emit("clickimpl",i),onFocus:e.handleFocus,onKeydown:Le(e.handleKeydown,["self"]),onMousedown:e.handleMousedown,onPointermove:i=>e.$emit("pointermove",i),onPointerleave:i=>e.$emit("pointerleave",i)}),[e.icon?(_(),oe(r,{key:0},{default:U(()=>[(_(),oe(Ge(e.icon)))]),_:1})):J("v-if",!0),G(e.$slots,"default")],16,["aria-disabled","tabindex","role","onClick","onFocus","onKeydown","onMousedown","onPointermove","onPointerleave"])],64)}var qk=fe(Uk,[["render",Yk],["__file","dropdown-item-impl.vue"]]);const Bf=()=>{const e=we(Lf,{}),t=y(()=>e==null?void 0:e.dropdownSize);return{elDropdown:e,_elDropdownSize:t}},Gk=x({name:"ElDropdownItem",components:{ElDropdownCollectionItem:Vk,ElRovingFocusItem:jk,ElDropdownItemImpl:qk},inheritAttrs:!1,props:Pf,emits:["pointermove","pointerleave","click"],setup(e,{emit:t,attrs:n}){const{elDropdown:l}=Bf(),a=lt(),s=I(null),r=y(()=>{var v,h;return(h=(v=o(s))==null?void 0:v.textContent)!=null?h:""}),{onItemEnter:i,onItemLeave:u}=we(Ts,void 0),c=Ht(v=>(t("pointermove",v),v.defaultPrevented),_u(v=>{if(e.disabled){u(v);return}const h=v.currentTarget;h===document.activeElement||h.contains(document.activeElement)||(i(v),v.defaultPrevented||h==null||h.focus())})),d=Ht(v=>(t("pointerleave",v),v.defaultPrevented),_u(u)),f=Ht(v=>{if(!e.disabled)return t("click",v),v.type!=="keydown"&&v.defaultPrevented},v=>{var h,p,g;if(e.disabled){v.stopImmediatePropagation();return}(h=l==null?void 0:l.hideOnClick)!=null&&h.value&&((p=l.handleClick)==null||p.call(l)),(g=l.commandHandler)==null||g.call(l,e.command,a,v)}),m=y(()=>({...e,...n}));return{handleClick:f,handlePointerMove:c,handlePointerLeave:d,textContent:r,propsAndAttrs:m}}});function Xk(e,t,n,l,a,s){var r;const i=ht("el-dropdown-item-impl"),u=ht("el-roving-focus-item"),c=ht("el-dropdown-collection-item");return _(),oe(c,{disabled:e.disabled,"text-value":(r=e.textValue)!=null?r:e.textContent},{default:U(()=>[H(u,{focusable:!e.disabled},{default:U(()=>[H(i,et(e.propsAndAttrs,{onPointerleave:e.handlePointerLeave,onPointermove:e.handlePointerMove,onClickimpl:e.handleClick}),{default:U(()=>[G(e.$slots,"default")]),_:3},16,["onPointerleave","onPointermove","onClickimpl"])]),_:3},8,["focusable"])]),_:3},8,["disabled","text-value"])}var Vf=fe(Gk,[["render",Xk],["__file","dropdown-item.vue"]]);const Zk=x({name:"ElDropdownMenu",props:Pk,setup(e){const t=ue("dropdown"),{_elDropdownSize:n}=Bf(),l=n.value,{focusTrapRef:a,onKeydown:s}=we(ei,void 0),{contentRef:r,role:i,triggerId:u}=we(Ts,void 0),{collectionRef:c,getItems:d}=we(Dk,void 0),{rovingFocusGroupRef:f,rovingFocusGroupRootStyle:m,tabIndex:v,onBlur:h,onFocus:p,onMousedown:g}=we(bi,void 0),{collectionRef:b}=we(gi,void 0),E=y(()=>[t.b("menu"),t.bm("menu",l==null?void 0:l.value)]),C=_s(r,c,a,f,b),w=Ht(S=>{var $;($=e.onKeydown)==null||$.call(e,S)},S=>{const{currentTarget:$,code:M,target:R}=S;if($.contains(R),Ce.tab===M&&S.stopImmediatePropagation(),S.preventDefault(),R!==o(r)||!Lk.includes(M))return;const O=d().filter(P=>!P.disabled).map(P=>P.ref);Of.includes(M)&&O.reverse(),yi(O)});return{size:l,rovingFocusGroupRootStyle:m,tabIndex:v,dropdownKls:E,role:i,triggerId:u,dropdownListWrapperRef:C,handleKeydown:S=>{w(S),s(S)},onBlur:h,onFocus:p,onMousedown:g}}});function Jk(e,t,n,l,a,s){return _(),V("ul",{ref:e.dropdownListWrapperRef,class:T(e.dropdownKls),style:_e(e.rovingFocusGroupRootStyle),tabindex:-1,role:e.role,"aria-labelledby":e.triggerId,onBlur:e.onBlur,onFocus:e.onFocus,onKeydown:Le(e.handleKeydown,["self"]),onMousedown:Le(e.onMousedown,["self"])},[G(e.$slots,"default")],46,["role","aria-labelledby","onBlur","onFocus","onKeydown","onMousedown"])}var Df=fe(Zk,[["render",Jk],["__file","dropdown-menu.vue"]]);const Qk=He(Hk,{DropdownItem:Vf,DropdownMenu:Df}),eS=At(Vf),tS=At(Df),nS=x({name:"ImgEmpty"}),lS=x({...nS,setup(e){const t=ue("empty"),n=sn();return(l,a)=>(_(),V("svg",{viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},[F("defs",null,[F("linearGradient",{id:`linearGradient-1-${o(n)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[F("stop",{"stop-color":`var(${o(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,["stop-color"]),F("stop",{"stop-color":`var(${o(t).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,["stop-color"])],8,["id"]),F("linearGradient",{id:`linearGradient-2-${o(n)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[F("stop",{"stop-color":`var(${o(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,["stop-color"]),F("stop",{"stop-color":`var(${o(t).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,["stop-color"])],8,["id"]),F("rect",{id:`path-3-${o(n)}`,x:"0",y:"0",width:"17",height:"36"},null,8,["id"])]),F("g",{stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},[F("g",{transform:"translate(-1268.000000, -535.000000)"},[F("g",{transform:"translate(1268.000000, 535.000000)"},[F("path",{d:"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z",fill:`var(${o(t).cssVarBlockName("fill-color-3")})`},null,8,["fill"]),F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-7")})`,transform:"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ",points:"13 58 53 58 42 45 2 45"},null,8,["fill"]),F("g",{transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},[F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-7")})`,transform:"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ",points:"2.84078316e-14 3 18 3 23 7 5 7"},null,8,["fill"]),F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,["fill"]),F("rect",{fill:`url(#linearGradient-1-${o(n)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,["fill"]),F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-2")})`,transform:"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ",points:"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"},null,8,["fill"])]),F("rect",{fill:`url(#linearGradient-2-${o(n)})`,x:"13",y:"45",width:"40",height:"36"},null,8,["fill"]),F("g",{transform:"translate(53.000000, 45.000000)"},[F("use",{fill:`var(${o(t).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${o(n)}`},null,8,["fill","xlink:href"]),F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${o(n)})`,transform:"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ",points:"7 0 24 0 20 18 7 16.5"},null,8,["fill","mask"])]),F("polygon",{fill:`var(${o(t).cssVarBlockName("fill-color-2")})`,transform:"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ",points:"62 45 79 45 70 58 53 58"},null,8,["fill"])])])])]))}});var oS=fe(lS,[["__file","img-empty.vue"]]);const aS=de({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),sS=x({name:"ElEmpty"}),rS=x({...sS,props:aS,setup(e){const t=e,{t:n}=pt(),l=ue("empty"),a=y(()=>t.description||n("el.table.emptyText")),s=y(()=>({width:zt(t.imageSize)}));return(r,i)=>(_(),V("div",{class:T(o(l).b())},[F("div",{class:T(o(l).e("image")),style:_e(o(s))},[r.image?(_(),V("img",{key:0,src:r.image,ondragstart:"return false"},null,8,["src"])):G(r.$slots,"image",{key:1},()=>[H(oS)])],6),F("div",{class:T(o(l).e("description"))},[r.$slots.description?G(r.$slots,"description",{key:0}):(_(),V("p",{key:1},pe(o(a)),1))],2),r.$slots.default?(_(),V("div",{key:0,class:T(o(l).e("bottom"))},[G(r.$slots,"default")],2)):J("v-if",!0)],2))}});var iS=fe(rS,[["__file","empty.vue"]]);const Af=He(iS),uS=de({size:{type:String,values:tl},disabled:Boolean}),cS=de({...uS,model:Object,rules:{type:Y(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean],default:!0}}),dS={validate:(e,t,n)=>(ke(e)||Ve(e))&&_t(t)&&Ve(n)};function fS(){const e=I([]),t=y(()=>{if(!e.value.length)return"0";const s=Math.max(...e.value);return s?`${s}px`:""});function n(s){const r=e.value.indexOf(s);return r===-1&&t.value,r}function l(s,r){if(s&&r){const i=n(r);e.value.splice(i,1,s)}else s&&e.value.push(s)}function a(s){const r=n(s);r>-1&&e.value.splice(r,1)}return{autoLabelWidth:t,registerLabelWidth:l,deregisterLabelWidth:a}}const Ia=(e,t)=>{const n=ln(t).map(l=>ke(l)?l.join("."):l);return n.length>0?e.filter(l=>l.propString&&n.includes(l.propString)):e},vS="ElForm",pS=x({name:vS}),hS=x({...pS,props:cS,emits:dS,setup(e,{expose:t,emit:n}){const l=e,a=I(),s=kt([]),r=Gt(),i=ue("form"),u=y(()=>{const{labelPosition:w,inline:k}=l;return[i.b(),i.m(r.value||"default"),{[i.m(`label-${w}`)]:w,[i.m("inline")]:k}]}),c=w=>Ia(s,[w])[0],d=w=>{s.push(w)},f=w=>{w.prop&&s.splice(s.indexOf(w),1)},m=(w=[])=>{l.model&&Ia(s,w).forEach(k=>k.resetField())},v=(w=[])=>{Ia(s,w).forEach(k=>k.clearValidate())},h=y(()=>!!l.model),p=w=>{if(s.length===0)return[];const k=Ia(s,w);return k.length?k:[]},g=async w=>E(void 0,w),b=async(w=[])=>{if(!h.value)return!1;const k=p(w);if(k.length===0)return!0;let S={};for(const $ of k)try{await $.validate(""),$.validateState==="error"&&$.resetField()}catch(M){S={...S,...M}}return Object.keys(S).length===0?!0:Promise.reject(S)},E=async(w=[],k)=>{let S=!1;const $=!Qe(k);try{return S=await b(w),S===!0&&await(k==null?void 0:k(S)),S}catch(M){if(M instanceof Error)throw M;const R=M;if(l.scrollToError&&a.value){const N=a.value.querySelector(`.${i.b()}-item.is-error`);N==null||N.scrollIntoView(l.scrollIntoViewOptions)}return!S&&await(k==null?void 0:k(!1,R)),$&&Promise.reject(R)}},C=w=>{var k;const S=c(w);S&&((k=S.$el)==null||k.scrollIntoView(l.scrollIntoViewOptions))};return ie(()=>l.rules,()=>{l.validateOnRuleChange&&g().catch(w=>void 0)},{deep:!0,flush:"post"}),rt(Jl,kt({...nn(l),emit:n,resetFields:m,clearValidate:v,validateField:E,getField:c,addField:d,removeField:f,...fS()})),t({validate:g,validateField:E,resetFields:m,clearValidate:v,scrollToField:C,getField:c,fields:s}),(w,k)=>(_(),V("form",{ref_key:"formRef",ref:a,class:T(o(u))},[G(w.$slots,"default")],2))}});var mS=fe(hS,[["__file","form.vue"]]);const gS=["","error","validating","success"],bS=de({label:String,labelWidth:{type:[String,Number],default:""},labelPosition:{type:String,values:["left","right","top",""],default:""},prop:{type:Y([String,Array])},required:{type:Boolean,default:void 0},rules:{type:Y([Object,Array])},error:String,validateStatus:{type:String,values:gS},for:String,inlineMessage:{type:[String,Boolean],default:""},showMessage:{type:Boolean,default:!0},size:{type:String,values:tl}}),Wu="ElLabelWrap";var yS=x({name:Wu,props:{isAutoWidth:Boolean,updateAll:Boolean},setup(e,{slots:t}){const n=we(Jl,void 0),l=we(el);l||jt(Wu,"usage: ");const a=ue("form"),s=I(),r=I(0),i=()=>{var d;if((d=s.value)!=null&&d.firstElementChild){const f=window.getComputedStyle(s.value.firstElementChild).width;return Math.ceil(Number.parseFloat(f))}else return 0},u=(d="update")=>{Ee(()=>{t.default&&e.isAutoWidth&&(d==="update"?r.value=i():d==="remove"&&(n==null||n.deregisterLabelWidth(r.value)))})},c=()=>u("update");return Xe(()=>{c()}),Nt(()=>{u("remove")}),hl(()=>c()),ie(r,(d,f)=>{e.updateAll&&(n==null||n.registerLabelWidth(d,f))}),Ft(y(()=>{var d,f;return(f=(d=s.value)==null?void 0:d.firstElementChild)!=null?f:null}),c),()=>{var d,f;if(!t)return null;const{isAutoWidth:m}=e;if(m){const v=n==null?void 0:n.autoLabelWidth,h=l==null?void 0:l.hasLabel,p={};if(h&&v&&v!=="auto"){const g=Math.max(0,Number.parseInt(v,10)-r.value),E=(l.labelPosition||n.labelPosition)==="left"?"marginRight":"marginLeft";g&&(p[E]=`${g}px`)}return H("div",{ref:s,class:[a.be("item","label-wrap")],style:p},[(d=t.default)==null?void 0:d.call(t)])}else return H(Oe,{ref:s},[(f=t.default)==null?void 0:f.call(t)])}}});const CS=x({name:"ElFormItem"}),wS=x({...CS,props:bS,setup(e,{expose:t}){const n=e,l=Xt(),a=we(Jl,void 0),s=we(el,void 0),r=Gt(void 0,{formItem:!1}),i=ue("form-item"),u=sn().value,c=I([]),d=I(""),f=Lp(d,100),m=I(""),v=I();let h,p=!1;const g=y(()=>n.labelPosition||(a==null?void 0:a.labelPosition)),b=y(()=>{if(g.value==="top")return{};const se=zt(n.labelWidth||(a==null?void 0:a.labelWidth)||"");return se?{width:se}:{}}),E=y(()=>{if(g.value==="top"||a!=null&&a.inline)return{};if(!n.label&&!n.labelWidth&&N)return{};const se=zt(n.labelWidth||(a==null?void 0:a.labelWidth)||"");return!n.label&&!l.label?{marginLeft:se}:{}}),C=y(()=>[i.b(),i.m(r.value),i.is("error",d.value==="error"),i.is("validating",d.value==="validating"),i.is("success",d.value==="success"),i.is("required",D.value||n.required),i.is("no-asterisk",a==null?void 0:a.hideRequiredAsterisk),(a==null?void 0:a.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[i.m("feedback")]:a==null?void 0:a.statusIcon,[i.m(`label-${g.value}`)]:g.value}]),w=y(()=>_t(n.inlineMessage)?n.inlineMessage:(a==null?void 0:a.inlineMessage)||!1),k=y(()=>[i.e("error"),{[i.em("error","inline")]:w.value}]),S=y(()=>n.prop?ke(n.prop)?n.prop.join("."):n.prop:""),$=y(()=>!!(n.label||l.label)),M=y(()=>{var se;return(se=n.for)!=null?se:c.value.length===1?c.value[0]:void 0}),R=y(()=>!M.value&&$.value),N=!!s,O=y(()=>{const se=a==null?void 0:a.model;if(!(!se||!n.prop))return Wo(se,n.prop).value}),P=y(()=>{const{required:se}=n,ge=[];n.rules&&ge.push(...ln(n.rules));const Be=a==null?void 0:a.rules;if(Be&&n.prop){const te=Wo(Be,n.prop).value;te&&ge.push(...ln(te))}if(se!==void 0){const te=ge.map((ce,Ie)=>[ce,Ie]).filter(([ce])=>Object.keys(ce).includes("required"));if(te.length>0)for(const[ce,Ie]of te)ce.required!==se&&(ge[Ie]={...ce,required:se});else ge.push({required:se})}return ge}),W=y(()=>P.value.length>0),K=se=>P.value.filter(Be=>!Be.trigger||!se?!0:ke(Be.trigger)?Be.trigger.includes(se):Be.trigger===se).map(({trigger:Be,...te})=>te),D=y(()=>P.value.some(se=>se.required)),L=y(()=>{var se;return f.value==="error"&&n.showMessage&&((se=a==null?void 0:a.showMessage)!=null?se:!0)}),z=y(()=>`${n.label||""}${(a==null?void 0:a.labelSuffix)||""}`),B=se=>{d.value=se},A=se=>{var ge,Be;const{errors:te,fields:ce}=se;(!te||!ce)&&console.error(se),B("error"),m.value=te?(Be=(ge=te==null?void 0:te[0])==null?void 0:ge.message)!=null?Be:`${n.prop} is required`:"",a==null||a.emit("validate",n.prop,!1,m.value)},ne=()=>{B("success"),a==null||a.emit("validate",n.prop,!0,"")},j=async se=>{const ge=S.value;return new nh({[ge]:se}).validate({[ge]:O.value},{firstFields:!0}).then(()=>(ne(),!0)).catch(te=>(A(te),Promise.reject(te)))},Q=async(se,ge)=>{if(p||!n.prop)return!1;const Be=Qe(ge);if(!W.value)return ge==null||ge(!1),!1;const te=K(se);return te.length===0?(ge==null||ge(!0),!0):(B("validating"),j(te).then(()=>(ge==null||ge(!0),!0)).catch(ce=>{const{fields:Ie}=ce;return ge==null||ge(!1,Ie),Be?!1:Promise.reject(Ie)}))},Z=()=>{B(""),m.value="",p=!1},ee=async()=>{const se=a==null?void 0:a.model;if(!se||!n.prop)return;const ge=Wo(se,n.prop);p=!0,ge.value=lu(h),await Ee(),Z(),p=!1},ae=se=>{c.value.includes(se)||c.value.push(se)},re=se=>{c.value=c.value.filter(ge=>ge!==se)};ie(()=>n.error,se=>{m.value=se||"",B(se?"error":"")},{immediate:!0}),ie(()=>n.validateStatus,se=>B(se||""));const le=kt({...nn(n),$el:v,size:r,validateMessage:m,validateState:d,labelId:u,inputIds:c,isGroup:R,hasLabel:$,fieldValue:O,addInputId:ae,removeInputId:re,resetField:ee,clearValidate:Z,validate:Q,propString:S});return rt(el,le),Xe(()=>{n.prop&&(a==null||a.addField(le),h=lu(O.value))}),Nt(()=>{a==null||a.removeField(le)}),t({size:r,validateMessage:m,validateState:d,validate:Q,clearValidate:Z,resetField:ee}),(se,ge)=>{var Be;return _(),V("div",{ref_key:"formItemRef",ref:v,class:T(o(C)),role:o(R)?"group":void 0,"aria-labelledby":o(R)?o(u):void 0},[H(o(yS),{"is-auto-width":o(b).width==="auto","update-all":((Be=o(a))==null?void 0:Be.labelWidth)==="auto"},{default:U(()=>[o($)?(_(),oe(Ge(o(M)?"label":"div"),{key:0,id:o(u),for:o(M),class:T(o(i).e("label")),style:_e(o(b))},{default:U(()=>[G(se.$slots,"label",{label:o(z)},()=>[st(pe(o(z)),1)])]),_:3},8,["id","for","class","style"])):J("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),F("div",{class:T(o(i).e("content")),style:_e(o(E))},[G(se.$slots,"default"),H(Oc,{name:`${o(i).namespace.value}-zoom-in-top`},{default:U(()=>[o(L)?G(se.$slots,"error",{key:0,error:m.value},()=>[F("div",{class:T(o(k))},pe(m.value),3)]):J("v-if",!0)]),_:3},8,["name"])],6)],10,["role","aria-labelledby"])}}});var Ff=fe(wS,[["__file","form-item.vue"]]);const kS=He(mS,{FormItem:Ff}),SS=At(Ff),ES=de({urlList:{type:Y(Array),default:()=>Vt([])},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:Y(String)}}),_S={close:()=>!0,switch:e=>Te(e),rotate:e=>Te(e)},TS=x({name:"ElImageViewer"}),$S=x({...TS,props:ES,emits:_S,setup(e,{expose:t,emit:n}){var l;const a=e,s={CONTAIN:{name:"contain",icon:$l(um)},ORIGINAL:{name:"original",icon:$l(Im)}};let r,i="";const{t:u}=pt(),c=ue("image-viewer"),{nextZIndex:d}=Mo(),f=I(),m=I([]),v=Bp(),h=I(!0),p=I(a.initialIndex),g=Lt(s.CONTAIN),b=I({scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),E=I((l=a.zIndex)!=null?l:d()),C=y(()=>{const{urlList:re}=a;return re.length<=1}),w=y(()=>p.value===0),k=y(()=>p.value===a.urlList.length-1),S=y(()=>a.urlList[p.value]),$=y(()=>[c.e("btn"),c.e("prev"),c.is("disabled",!a.infinite&&w.value)]),M=y(()=>[c.e("btn"),c.e("next"),c.is("disabled",!a.infinite&&k.value)]),R=y(()=>{const{scale:re,deg:le,offsetX:se,offsetY:ge,enableTransition:Be}=b.value;let te=se/re,ce=ge/re;const Ie=le*Math.PI/180,Ae=Math.cos(Ie),xe=Math.sin(Ie);te=te*Ae+ce*xe,ce=ce*Ae-se/re*xe;const Ye={transform:`scale(${re}) rotate(${le}deg) translate(${te}px, ${ce}px)`,transition:Be?"transform .3s":""};return g.value.name===s.CONTAIN.name&&(Ye.maxWidth=Ye.maxHeight="100%"),Ye}),N=y(()=>`${p.value+1} / ${a.urlList.length}`);function O(){W(),r==null||r(),document.body.style.overflow=i,n("close")}function P(){const re=Hl(se=>{switch(se.code){case Ce.esc:a.closeOnPressEscape&&O();break;case Ce.space:B();break;case Ce.left:ne();break;case Ce.up:Q("zoomIn");break;case Ce.right:j();break;case Ce.down:Q("zoomOut");break}}),le=Hl(se=>{const ge=se.deltaY||se.deltaX;Q(ge<0?"zoomIn":"zoomOut",{zoomRate:a.zoomRate,enableTransition:!1})});v.run(()=>{xt(document,"keydown",re),xt(document,"wheel",le)})}function W(){v.stop()}function K(){h.value=!1}function D(re){h.value=!1,re.target.alt=u("el.image.error")}function L(re){if(h.value||re.button!==0||!f.value)return;b.value.enableTransition=!1;const{offsetX:le,offsetY:se}=b.value,ge=re.pageX,Be=re.pageY,te=Hl(Ie=>{b.value={...b.value,offsetX:le+Ie.pageX-ge,offsetY:se+Ie.pageY-Be}}),ce=xt(document,"mousemove",te);xt(document,"mouseup",()=>{ce()}),re.preventDefault()}function z(){b.value={scale:1,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function B(){if(h.value)return;const re=ko(s),le=Object.values(s),se=g.value.name,Be=(le.findIndex(te=>te.name===se)+1)%re.length;g.value=s[re[Be]],z()}function A(re){const le=a.urlList.length;p.value=(re+le)%le}function ne(){w.value&&!a.infinite||A(p.value-1)}function j(){k.value&&!a.infinite||A(p.value+1)}function Q(re,le={}){if(h.value)return;const{minScale:se,maxScale:ge}=a,{zoomRate:Be,rotateDeg:te,enableTransition:ce}={zoomRate:a.zoomRate,rotateDeg:90,enableTransition:!0,...le};switch(re){case"zoomOut":b.value.scale>se&&(b.value.scale=Number.parseFloat((b.value.scale/Be).toFixed(3)));break;case"zoomIn":b.value.scale0)return re.preventDefault(),!1}}return ie(S,()=>{Ee(()=>{const re=m.value[0];re!=null&&re.complete||(h.value=!0)})}),ie(p,re=>{z(),n("switch",re)}),Xe(()=>{P(),r=xt("wheel",ae,{passive:!1}),i=document.body.style.overflow,document.body.style.overflow="hidden"}),t({setActiveItem:A}),(re,le)=>(_(),oe(o(Po),{to:"body",disabled:!re.teleported},{default:U(()=>[H(an,{name:"viewer-fade",appear:""},{default:U(()=>[F("div",{ref_key:"wrapper",ref:f,tabindex:-1,class:T(o(c).e("wrapper")),style:_e({zIndex:E.value})},[H(o(Ro),{loop:"",trapped:"","focus-trap-el":f.value,"focus-start-el":"container",onFocusoutPrevented:Z,onReleaseRequested:ee},{default:U(()=>[F("div",{class:T(o(c).e("mask")),onClick:Le(se=>re.hideOnClickModal&&O(),["self"])},null,10,["onClick"]),J(" CLOSE "),F("span",{class:T([o(c).e("btn"),o(c).e("close")]),onClick:O},[H(o(Se),null,{default:U(()=>[H(o(zn))]),_:1})],2),J(" ARROW "),o(C)?J("v-if",!0):(_(),V(Oe,{key:0},[F("span",{class:T(o($)),onClick:ne},[H(o(Se),null,{default:U(()=>[H(o(dl))]),_:1})],2),F("span",{class:T(o(M)),onClick:j},[H(o(Se),null,{default:U(()=>[H(o(Cn))]),_:1})],2)],64)),re.$slots.progress||re.showProgress?(_(),V("div",{key:1,class:T([o(c).e("btn"),o(c).e("progress")])},[G(re.$slots,"progress",{activeIndex:p.value,total:re.urlList.length},()=>[st(pe(o(N)),1)])],2)):J("v-if",!0),J(" ACTIONS "),F("div",{class:T([o(c).e("btn"),o(c).e("actions")])},[F("div",{class:T(o(c).e("actions__inner"))},[G(re.$slots,"toolbar",{actions:Q,prev:ne,next:j,reset:B,activeIndex:p.value,setActiveItem:A},()=>[H(o(Se),{onClick:se=>Q("zoomOut")},{default:U(()=>[H(o(jm))]),_:1},8,["onClick"]),H(o(Se),{onClick:se=>Q("zoomIn")},{default:U(()=>[H(o(dd))]),_:1},8,["onClick"]),F("i",{class:T(o(c).e("actions__divider"))},null,2),H(o(Se),{onClick:B},{default:U(()=>[(_(),oe(Ge(o(g).icon)))]),_:1}),F("i",{class:T(o(c).e("actions__divider"))},null,2),H(o(Se),{onClick:se=>Q("anticlockwise")},{default:U(()=>[H(o(_m))]),_:1},8,["onClick"]),H(o(Se),{onClick:se=>Q("clockwise")},{default:U(()=>[H(o($m))]),_:1},8,["onClick"])])],2)],2),J(" CANVAS "),F("div",{class:T(o(c).e("canvas"))},[(_(!0),V(Oe,null,ut(re.urlList,(se,ge)=>(_(),V(Oe,{key:ge},[ge===p.value?(_(),V("img",{key:0,ref_for:!0,ref:Be=>m.value[ge]=Be,src:se,style:_e(o(R)),class:T(o(c).e("img")),crossorigin:re.crossorigin,onLoad:K,onError:D,onMousedown:L},null,46,["src","crossorigin"])):J("v-if",!0)],64))),128))],2),G(re.$slots,"default")]),_:3},8,["focus-trap-el"])],6)]),_:3})]),_:3},8,["disabled"]))}});var NS=fe($S,[["__file","image-viewer.vue"]]);const xf=He(NS),IS=de({hideOnClickModal:Boolean,src:{type:String,default:""},fit:{type:String,values:["","contain","cover","fill","none","scale-down"],default:""},loading:{type:String,values:["eager","lazy"]},lazy:Boolean,scrollContainer:{type:Y([String,Object])},previewSrcList:{type:Y(Array),default:()=>Vt([])},previewTeleported:Boolean,zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:Y(String)}}),MS={load:e=>e instanceof Event,error:e=>e instanceof Event,switch:e=>Te(e),close:()=>!0,show:()=>!0},RS=x({name:"ElImage",inheritAttrs:!1}),PS=x({...RS,props:IS,emits:MS,setup(e,{expose:t,emit:n}){const l=e,{t:a}=pt(),s=ue("image"),r=pl(),i=y(()=>qo(Object.entries(r).filter(([L])=>/^(data-|on[A-Z])/i.test(L)||["id","style"].includes(L)))),u=bs({excludeListeners:!0,excludeKeys:y(()=>Object.keys(i.value))}),c=I(),d=I(!1),f=I(!0),m=I(!1),v=I(),h=I(),p=bt&&"loading"in HTMLImageElement.prototype;let g;const b=y(()=>[s.e("inner"),C.value&&s.e("preview"),f.value&&s.is("loading")]),E=y(()=>{const{fit:L}=l;return bt&&L?{objectFit:L}:{}}),C=y(()=>{const{previewSrcList:L}=l;return ke(L)&&L.length>0}),w=y(()=>{const{previewSrcList:L,initialIndex:z}=l;let B=z;return z>L.length-1&&(B=0),B}),k=y(()=>l.loading==="eager"?!1:!p&&l.loading==="lazy"||l.lazy),S=()=>{bt&&(f.value=!0,d.value=!1,c.value=l.src)};function $(L){f.value=!1,d.value=!1,n("load",L)}function M(L){f.value=!1,d.value=!0,n("error",L)}function R(){jC(v.value,h.value)&&(S(),P())}const N=Mc(R,200,!0);async function O(){var L;if(!bt)return;await Ee();const{scrollContainer:z}=l;_n(z)?h.value=z:Ve(z)&&z!==""?h.value=(L=document.querySelector(z))!=null?L:void 0:v.value&&(h.value=jr(v.value)),h.value&&(g=xt(h,"scroll",N),setTimeout(()=>R(),100))}function P(){!bt||!h.value||!N||(g==null||g(),h.value=void 0)}function W(){C.value&&(m.value=!0,n("show"))}function K(){m.value=!1,n("close")}function D(L){n("switch",L)}return ie(()=>l.src,()=>{k.value?(f.value=!0,d.value=!1,P(),O()):S()}),Xe(()=>{k.value?O():S()}),t({showPreview:W}),(L,z)=>(_(),V("div",et({ref_key:"container",ref:v},o(i),{class:[o(s).b(),L.$attrs.class]}),[d.value?G(L.$slots,"error",{key:0},()=>[F("div",{class:T(o(s).e("error"))},pe(o(a)("el.image.error")),3)]):(_(),V(Oe,{key:1},[c.value!==void 0?(_(),V("img",et({key:0},o(u),{src:c.value,loading:L.loading,style:o(E),class:o(b),crossorigin:L.crossorigin,onClick:W,onLoad:$,onError:M}),null,16,["src","loading","crossorigin"])):J("v-if",!0),f.value?(_(),V("div",{key:1,class:T(o(s).e("wrapper"))},[G(L.$slots,"placeholder",{},()=>[F("div",{class:T(o(s).e("placeholder"))},null,2)])],2)):J("v-if",!0)],64)),o(C)?(_(),V(Oe,{key:2},[m.value?(_(),oe(o(xf),{key:0,"z-index":L.zIndex,"initial-index":o(w),infinite:L.infinite,"zoom-rate":L.zoomRate,"min-scale":L.minScale,"max-scale":L.maxScale,"show-progress":L.showProgress,"url-list":L.previewSrcList,crossorigin:L.crossorigin,"hide-on-click-modal":L.hideOnClickModal,teleported:L.previewTeleported,"close-on-press-escape":L.closeOnPressEscape,onClose:K,onSwitch:D},Mn({toolbar:U(B=>[G(L.$slots,"toolbar",On(cl(B)))]),default:U(()=>[L.$slots.viewer?(_(),V("div",{key:0},[G(L.$slots,"viewer")])):J("v-if",!0)]),_:2},[L.$slots.progress?{name:"progress",fn:U(B=>[G(L.$slots,"progress",On(cl(B)))])}:void 0]),1032,["z-index","initial-index","infinite","zoom-rate","min-scale","max-scale","show-progress","url-list","crossorigin","hide-on-click-modal","teleported","close-on-press-escape"])):J("v-if",!0)],64)):J("v-if",!0)],16))}});var OS=fe(PS,[["__file","image.vue"]]);const LS=He(OS),BS=de({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.MAX_SAFE_INTEGER},min:{type:Number,default:Number.MIN_SAFE_INTEGER},modelValue:{type:[Number,null]},readonly:Boolean,disabled:Boolean,size:Jt,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:[String,Number,null],validator:e=>e===null||Te(e)||["min","max"].includes(e),default:null},name:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0},...cn(["ariaLabel"]),inputmode:{type:Y(String),default:void 0}}),VS={[nt]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[Zt]:e=>Te(e)||qt(e),[De]:e=>Te(e)||qt(e)},DS=x({name:"ElInputNumber"}),AS=x({...DS,props:BS,emits:VS,setup(e,{expose:t,emit:n}){const l=e,{t:a}=pt(),s=ue("input-number"),r=I(),i=kt({currentValue:l.modelValue,userInput:null}),{formItem:u}=dn(),c=y(()=>Te(l.modelValue)&&l.modelValue<=l.min),d=y(()=>Te(l.modelValue)&&l.modelValue>=l.max),f=y(()=>{const D=b(l.step);return vt(l.precision)?Math.max(b(l.modelValue),D):(D>l.precision,l.precision)}),m=y(()=>l.controls&&l.controlsPosition==="right"),v=Gt(),h=fn(),p=y(()=>{if(i.userInput!==null)return i.userInput;let D=i.currentValue;if(qt(D))return"";if(Te(D)){if(Number.isNaN(D))return"";vt(l.precision)||(D=D.toFixed(l.precision))}return D}),g=(D,L)=>{if(vt(L)&&(L=f.value),L===0)return Math.round(D);let z=String(D);const B=z.indexOf(".");if(B===-1||!z.replace(".","").split("")[B+L])return D;const j=z.length;return z.charAt(j-1)==="5"&&(z=`${z.slice(0,Math.max(0,j-1))}6`),Number.parseFloat(Number(z).toFixed(L))},b=D=>{if(qt(D))return 0;const L=D.toString(),z=L.indexOf(".");let B=0;return z!==-1&&(B=L.length-z-1),B},E=(D,L=1)=>Te(D)?D>=Number.MAX_SAFE_INTEGER&&L===1||D<=Number.MIN_SAFE_INTEGER&&L===-1?D:g(D+l.step*L):i.currentValue,C=()=>{if(l.readonly||h.value||d.value)return;const D=Number(p.value)||0,L=E(D);S(L),n(Zt,i.currentValue),W()},w=()=>{if(l.readonly||h.value||c.value)return;const D=Number(p.value)||0,L=E(D,-1);S(L),n(Zt,i.currentValue),W()},k=(D,L)=>{const{max:z,min:B,step:A,precision:ne,stepStrictly:j,valueOnClear:Q}=l;zz||Zz?z:B,L&&n(De,Z)),Z},S=(D,L=!0)=>{var z;const B=i.currentValue,A=k(D);if(!L){n(De,A);return}B===A&&D||(i.userInput=null,n(De,A),B!==A&&n(nt,A,B),l.validateEvent&&((z=u==null?void 0:u.validate)==null||z.call(u,"change").catch(ne=>void 0)),i.currentValue=A)},$=D=>{i.userInput=D;const L=D===""?null:Number(D);n(Zt,L),S(L,!1)},M=D=>{const L=D!==""?Number(D):"";(Te(L)&&!Number.isNaN(L)||D==="")&&S(L),W(),i.userInput=null},R=()=>{var D,L;(L=(D=r.value)==null?void 0:D.focus)==null||L.call(D)},N=()=>{var D,L;(L=(D=r.value)==null?void 0:D.blur)==null||L.call(D)},O=D=>{n("focus",D)},P=D=>{var L,z;i.userInput=null,i.currentValue===null&&((L=r.value)!=null&&L.input)&&(r.value.input.value=""),n("blur",D),l.validateEvent&&((z=u==null?void 0:u.validate)==null||z.call(u,"blur").catch(B=>void 0))},W=()=>{i.currentValue!==l.modelValue&&(i.currentValue=l.modelValue)},K=D=>{document.activeElement===D.target&&D.preventDefault()};return ie(()=>l.modelValue,(D,L)=>{const z=k(D,!0);i.userInput===null&&z!==L&&(i.currentValue=z)},{immediate:!0}),Xe(()=>{var D;const{min:L,max:z,modelValue:B}=l,A=(D=r.value)==null?void 0:D.input;if(A.setAttribute("role","spinbutton"),Number.isFinite(z)?A.setAttribute("aria-valuemax",String(z)):A.removeAttribute("aria-valuemax"),Number.isFinite(L)?A.setAttribute("aria-valuemin",String(L)):A.removeAttribute("aria-valuemin"),A.setAttribute("aria-valuenow",i.currentValue||i.currentValue===0?String(i.currentValue):""),A.setAttribute("aria-disabled",String(h.value)),!Te(B)&&B!=null){let ne=Number(B);Number.isNaN(ne)&&(ne=null),n(De,ne)}A.addEventListener("wheel",K,{passive:!1})}),hl(()=>{var D,L;const z=(D=r.value)==null?void 0:D.input;z==null||z.setAttribute("aria-valuenow",`${(L=i.currentValue)!=null?L:""}`)}),t({focus:R,blur:N}),(D,L)=>(_(),V("div",{class:T([o(s).b(),o(s).m(o(v)),o(s).is("disabled",o(h)),o(s).is("without-controls",!D.controls),o(s).is("controls-right",o(m))]),onDragstart:Le(()=>{},["prevent"])},[D.controls?We((_(),V("span",{key:0,role:"button","aria-label":o(a)("el.inputNumber.decrease"),class:T([o(s).e("decrease"),o(s).is("disabled",o(c))]),onKeydown:Tt(w,["enter"])},[G(D.$slots,"decrease-icon",{},()=>[H(o(Se),null,{default:U(()=>[o(m)?(_(),oe(o(nl),{key:0})):(_(),oe(o(hm),{key:1}))]),_:1})])],42,["aria-label","onKeydown"])),[[o(qa),w]]):J("v-if",!0),D.controls?We((_(),V("span",{key:1,role:"button","aria-label":o(a)("el.inputNumber.increase"),class:T([o(s).e("increase"),o(s).is("disabled",o(d))]),onKeydown:Tt(C,["enter"])},[G(D.$slots,"increase-icon",{},()=>[H(o(Se),null,{default:U(()=>[o(m)?(_(),oe(o(hs),{key:0})):(_(),oe(o(ud),{key:1}))]),_:1})])],42,["aria-label","onKeydown"])),[[o(qa),C]]):J("v-if",!0),H(o(hn),{id:D.id,ref_key:"input",ref:r,type:"number",step:D.step,"model-value":o(p),placeholder:D.placeholder,readonly:D.readonly,disabled:o(h),size:o(v),max:D.max,min:D.min,name:D.name,"aria-label":D.ariaLabel,"validate-event":!1,inputmode:D.inputmode,onKeydown:[Tt(Le(C,["prevent"]),["up"]),Tt(Le(w,["prevent"]),["down"])],onBlur:P,onFocus:O,onInput:$,onChange:M},Mn({_:2},[D.$slots.prefix?{name:"prefix",fn:U(()=>[G(D.$slots,"prefix")])}:void 0,D.$slots.suffix?{name:"suffix",fn:U(()=>[G(D.$slots,"suffix")])}:void 0]),1032,["id","step","model-value","placeholder","readonly","disabled","size","max","min","name","aria-label","inputmode","onKeydown"])],42,["onDragstart"]))}});var FS=fe(AS,[["__file","input-number.vue"]]);const zf=He(FS),xS=de({modelValue:{type:Y(Array)},max:Number,tagType:{...fl.type,default:"info"},tagEffect:fl.effect,trigger:{type:Y(String),default:Ce.enter},draggable:Boolean,delimiter:{type:[String,RegExp],default:""},size:Jt,clearable:Boolean,disabled:{type:Boolean,default:void 0},validateEvent:{type:Boolean,default:!0},readonly:Boolean,autofocus:Boolean,id:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},placeholder:String,autocomplete:{type:String,default:"off"},saveOnBlur:{type:Boolean,default:!0},ariaLabel:String}),zS={[De]:e=>ke(e)||vt(e),[nt]:e=>ke(e)||vt(e),[Zt]:e=>Ve(e),"add-tag":e=>Ve(e)||ke(e),"remove-tag":e=>Ve(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0};function HS({props:e,emit:t,formItem:n}){const l=fn(),a=Gt(),s=Lt(),r=I(),i=y(()=>["small"].includes(a.value)?"small":"default"),u=y(()=>{var O;return(O=e.modelValue)!=null&&O.length?void 0:e.placeholder}),c=y(()=>!(e.readonly||l.value)),d=y(()=>{var O,P;return vt(e.max)?!1:((P=(O=e.modelValue)==null?void 0:O.length)!=null?P:0)>=e.max}),f=O=>{var P;const W=[...(P=e.modelValue)!=null?P:[],...ln(O)];t(De,W),t(nt,W),t("add-tag",O),r.value=void 0},m=O=>{var P,W;const K=O.split(e.delimiter).filter(D=>D&&D!==O);if(e.max){const D=e.max-((W=(P=e.modelValue)==null?void 0:P.length)!=null?W:0);K.splice(D)}return K.length===1?K[0]:K},v=O=>{if(d.value){r.value=void 0;return}if(!$.value){if(e.delimiter&&r.value){const P=m(r.value);P.length&&f(P)}t(Zt,O.target.value)}},h=O=>{var P;if(!$.value)switch(O.code){case e.trigger:O.preventDefault(),O.stopPropagation(),p();break;case Ce.numpadEnter:e.trigger===Ce.enter&&(O.preventDefault(),O.stopPropagation(),p());break;case Ce.backspace:!r.value&&((P=e.modelValue)!=null&&P.length)&&(O.preventDefault(),O.stopPropagation(),g(e.modelValue.length-1));break}},p=()=>{var O;const P=(O=r.value)==null?void 0:O.trim();!P||d.value||f(P)},g=O=>{var P;const W=((P=e.modelValue)!=null?P:[]).slice(),[K]=W.splice(O,1);t(De,W),t(nt,W),t("remove-tag",K)},b=()=>{r.value=void 0,t(De,void 0),t(nt,void 0),t("clear")},E=(O,P,W)=>{var K;const D=((K=e.modelValue)!=null?K:[]).slice(),[L]=D.splice(O,1),z=P>O&&W==="before"?-1:P{var O;(O=s.value)==null||O.focus()},w=()=>{var O;(O=s.value)==null||O.blur()},{wrapperRef:k,isFocused:S}=Ll(s,{disabled:l,afterBlur(){var O;e.saveOnBlur?p():r.value=void 0,e.validateEvent&&((O=n==null?void 0:n.validate)==null||O.call(n,"blur").catch(P=>void 0))}}),{isComposing:$,handleCompositionStart:M,handleCompositionUpdate:R,handleCompositionEnd:N}=ha({afterComposition:v});return ie(()=>e.modelValue,()=>{var O;e.validateEvent&&((O=n==null?void 0:n.validate)==null||O.call(n,nt).catch(P=>void 0))}),{inputRef:s,wrapperRef:k,isFocused:S,isComposing:$,inputValue:r,size:a,tagSize:i,placeholder:u,closable:c,disabled:l,inputLimit:d,handleDragged:E,handleInput:v,handleKeydown:h,handleAddTag:p,handleRemoveTag:g,handleClear:b,handleCompositionStart:M,handleCompositionUpdate:R,handleCompositionEnd:N,focus:C,blur:w}}function KS(){const e=I(!1);return{hovering:e,handleMouseEnter:()=>{e.value=!0},handleMouseLeave:()=>{e.value=!1}}}function Ci(){const e=Lt(),t=I(0),n=11,l=y(()=>({minWidth:`${Math.max(t.value,n)}px`}));return Ft(e,()=>{var s,r;t.value=(r=(s=e.value)==null?void 0:s.getBoundingClientRect().width)!=null?r:0}),{calculatorRef:e,calculatorWidth:t,inputStyle:l}}function WS({wrapperRef:e,handleDragged:t,afterDragged:n}){const l=ue("input-tag"),a=Lt(),s=I(!1);let r,i,u,c;function d(h){return`.${l.e("inner")} .${l.namespace.value}-tag:nth-child(${h+1})`}function f(h,p){r=p,i=e.value.querySelector(d(p)),i&&(i.style.opacity="0.5"),h.dataTransfer.effectAllowed="move"}function m(h,p){if(u=p,h.preventDefault(),h.dataTransfer.dropEffect="move",vt(r)||r===p){s.value=!1;return}const g=e.value.querySelector(d(p)).getBoundingClientRect(),b=r+1!==p,E=r-1!==p,C=h.clientX-g.left,w=b?E?.5:1:-1,k=E?b?.5:0:1;C<=g.width*w?c="before":C>g.width*k?c="after":c=void 0;const S=e.value.querySelector(`.${l.e("inner")}`),$=S.getBoundingClientRect(),M=Number.parseFloat(rl(S,"gap"))/2,R=g.top-$.top;let N=-9999;if(c==="before")N=Math.max(g.left-$.left-M,Math.floor(-M/2));else if(c==="after"){const O=g.right-$.left;N=O+($.width===O?Math.floor(M/2):M)}td(a.value,{top:`${R}px`,left:`${N}px`}),s.value=!!c}function v(h){h.preventDefault(),i&&(i.style.opacity=""),c&&!vt(r)&&!vt(u)&&r!==u&&t(r,u,c),s.value=!1,r=void 0,i=null,u=void 0,c=void 0,n==null||n()}return{dropIndicatorRef:a,showDropIndicator:s,handleDragStart:f,handleDragOver:m,handleDragEnd:v}}function jS({props:e,isFocused:t,hovering:n,disabled:l,inputValue:a,size:s,validateState:r,validateIcon:i,needStatusIcon:u}){const c=pl(),d=Xt(),f=ue("input-tag"),m=ue("input"),v=y(()=>[f.b(),f.is("focused",t.value),f.is("hovering",n.value),f.is("disabled",l.value),f.m(s.value),f.e("wrapper"),c.class]),h=y(()=>[c.style]),p=y(()=>{var E,C;return[f.e("inner"),f.is("draggable",e.draggable),f.is("left-space",!((E=e.modelValue)!=null&&E.length)&&!d.prefix),f.is("right-space",!((C=e.modelValue)!=null&&C.length)&&!b.value)]}),g=y(()=>{var E;return e.clearable&&!l.value&&!e.readonly&&(((E=e.modelValue)==null?void 0:E.length)||a.value)&&(t.value||n.value)}),b=y(()=>d.suffix||g.value||r.value&&i.value&&u.value);return{ns:f,nsInput:m,containerKls:v,containerStyle:h,innerKls:p,showClear:g,showSuffix:b}}const US=x({name:"ElInputTag",inheritAttrs:!1}),YS=x({...US,props:xS,emits:zS,setup(e,{expose:t,emit:n}){const l=e,a=bs(),s=Xt(),{form:r,formItem:i}=dn(),{inputId:u}=Kn(l,{formItemContext:i}),c=y(()=>{var ce;return(ce=r==null?void 0:r.statusIcon)!=null?ce:!1}),d=y(()=>(i==null?void 0:i.validateState)||""),f=y(()=>d.value&&gs[d.value]),{inputRef:m,wrapperRef:v,isFocused:h,inputValue:p,size:g,tagSize:b,placeholder:E,closable:C,disabled:w,handleDragged:k,handleInput:S,handleKeydown:$,handleRemoveTag:M,handleClear:R,handleCompositionStart:N,handleCompositionUpdate:O,handleCompositionEnd:P,focus:W,blur:K}=HS({props:l,emit:n,formItem:i}),{hovering:D,handleMouseEnter:L,handleMouseLeave:z}=KS(),{calculatorRef:B,inputStyle:A}=Ci(),{dropIndicatorRef:ne,showDropIndicator:j,handleDragStart:Q,handleDragOver:Z,handleDragEnd:ee}=WS({wrapperRef:v,handleDragged:k,afterDragged:W}),{ns:ae,nsInput:re,containerKls:le,containerStyle:se,innerKls:ge,showClear:Be,showSuffix:te}=jS({props:l,hovering:D,isFocused:h,inputValue:p,disabled:w,size:g,validateState:d,validateIcon:f,needStatusIcon:c});return t({focus:W,blur:K}),(ce,Ie)=>(_(),V("div",{ref_key:"wrapperRef",ref:v,class:T(o(le)),style:_e(o(se)),onMouseenter:o(L),onMouseleave:o(z)},[o(s).prefix?(_(),V("div",{key:0,class:T(o(ae).e("prefix"))},[G(ce.$slots,"prefix")],2)):J("v-if",!0),F("div",{class:T(o(ge))},[(_(!0),V(Oe,null,ut(ce.modelValue,(Ae,xe)=>(_(),oe(o(So),{key:xe,size:o(b),closable:o(C),type:ce.tagType,effect:ce.tagEffect,draggable:o(C)&&ce.draggable,"disable-transitions":"",onClose:Ye=>o(M)(xe),onDragstart:Ye=>o(Q)(Ye,xe),onDragover:Ye=>o(Z)(Ye,xe),onDragend:o(ee),onDrop:Le(()=>{},["stop"])},{default:U(()=>[G(ce.$slots,"tag",{value:Ae,index:xe},()=>[st(pe(Ae),1)])]),_:2},1032,["size","closable","type","effect","draggable","onClose","onDragstart","onDragover","onDragend","onDrop"]))),128)),F("div",{class:T(o(ae).e("input-wrapper"))},[We(F("input",et({id:o(u),ref_key:"inputRef",ref:m,"onUpdate:modelValue":Ae=>gn(p)?p.value=Ae:null},o(a),{type:"text",minlength:ce.minlength,maxlength:ce.maxlength,disabled:o(w),readonly:ce.readonly,autocomplete:ce.autocomplete,tabindex:ce.tabindex,placeholder:o(E),autofocus:ce.autofocus,ariaLabel:ce.ariaLabel,class:o(ae).e("input"),style:o(A),onCompositionstart:o(N),onCompositionupdate:o(O),onCompositionend:o(P),onInput:o(S),onKeydown:o($)}),null,16,["id","onUpdate:modelValue","minlength","maxlength","disabled","readonly","autocomplete","tabindex","placeholder","autofocus","ariaLabel","onCompositionstart","onCompositionupdate","onCompositionend","onInput","onKeydown"]),[[ds,o(p)]]),F("span",{ref_key:"calculatorRef",ref:B,"aria-hidden":"true",class:T(o(ae).e("input-calculator")),textContent:pe(o(p))},null,10,["textContent"])],2),We(F("div",{ref_key:"dropIndicatorRef",ref:ne,class:T(o(ae).e("drop-indicator"))},null,2),[[mt,o(j)]])],2),o(te)?(_(),V("div",{key:1,class:T(o(ae).e("suffix"))},[G(ce.$slots,"suffix"),o(Be)?(_(),oe(o(Se),{key:0,class:T([o(ae).e("icon"),o(ae).e("clear")]),onMousedown:Le(o(Bt),["prevent"]),onClick:o(R)},{default:U(()=>[H(o(ml))]),_:1},8,["class","onMousedown","onClick"])):J("v-if",!0),o(d)&&o(f)&&o(c)?(_(),oe(o(Se),{key:1,class:T([o(re).e("icon"),o(re).e("validateIcon"),o(re).is("loading",o(d)==="validating")])},{default:U(()=>[(_(),oe(Ge(o(f))))]),_:1},8,["class"])):J("v-if",!0)],2)):J("v-if",!0)],46,["onMouseenter","onMouseleave"]))}});var qS=fe(YS,[["__file","input-tag.vue"]]);const GS=He(qS),XS=de({type:{type:String,values:["primary","success","warning","info","danger","default"],default:void 0},underline:{type:[Boolean,String],values:[!0,!1,"always","never","hover"],default:void 0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:$t}}),ZS={click:e=>e instanceof MouseEvent},JS=x({name:"ElLink"}),QS=x({...JS,props:XS,emits:ZS,setup(e,{emit:t}){const n=e,l=fa("link");ul({scope:"el-link",from:"The underline option (boolean)",replacement:"'always' | 'hover' | 'never'",version:"3.0.0",ref:"https://element-plus.org/en-US/component/link.html#underline"},y(()=>_t(n.underline)));const a=ue("link"),s=y(()=>{var u,c,d;return[a.b(),a.m((d=(c=n.type)!=null?c:(u=l.value)==null?void 0:u.type)!=null?d:"default"),a.is("disabled",n.disabled),a.is("underline",r.value==="always"),a.is("hover-underline",r.value==="hover"&&!n.disabled)]}),r=y(()=>{var u,c,d;return _t(n.underline)?n.underline?"hover":"never":(d=(c=n.underline)!=null?c:(u=l.value)==null?void 0:u.underline)!=null?d:"hover"});function i(u){n.disabled||t("click",u)}return(u,c)=>(_(),V("a",{class:T(o(s)),href:u.disabled||!u.href?void 0:u.href,target:u.disabled||!u.href?void 0:u.target,onClick:i},[u.icon?(_(),oe(o(Se),{key:0},{default:U(()=>[(_(),oe(Ge(u.icon)))]),_:1})):J("v-if",!0),u.$slots.default?(_(),V("span",{key:1,class:T(o(a).e("inner"))},[G(u.$slots,"default")],2)):J("v-if",!0),u.$slots.icon?G(u.$slots,"icon",{key:2}):J("v-if",!0)],10,["href","target"]))}});var e2=fe(QS,[["__file","link.vue"]]);const t2=He(e2);let n2=class{constructor(t,n){this.parent=t,this.domNode=n,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,n=>{n.addEventListener("keydown",l=>{let a=!1;switch(l.code){case Ce.down:{this.gotoSubIndex(this.subIndex+1),a=!0;break}case Ce.up:{this.gotoSubIndex(this.subIndex-1),a=!0;break}case Ce.tab:{La(t,"mouseleave");break}case Ce.enter:case Ce.numpadEnter:case Ce.space:{a=!0,l.currentTarget.click();break}}return a&&(l.preventDefault(),l.stopPropagation()),!1})})}},l2=class{constructor(t,n){this.domNode=t,this.submenu=null,this.submenu=null,this.init(n)}init(t){this.domNode.setAttribute("tabindex","0");const n=this.domNode.querySelector(`.${t}-menu`);n&&(this.submenu=new n2(this,n)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{let n=!1;switch(t.code){case Ce.down:{La(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break}case Ce.up:{La(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break}case Ce.tab:{La(t.currentTarget,"mouseleave");break}case Ce.enter:case Ce.numpadEnter:case Ce.space:{n=!0,t.currentTarget.click();break}}n&&t.preventDefault()})}},o2=class{constructor(t,n){this.domNode=t,this.init(n)}init(t){const n=this.domNode.childNodes;Array.from(n).forEach(l=>{l.nodeType===1&&new l2(l,t)})}};const a2=x({name:"ElMenuCollapseTransition"}),s2=x({...a2,setup(e){const t=ue("menu"),n={onBeforeEnter:l=>l.style.opacity="0.2",onEnter(l,a){Fn(l,`${t.namespace.value}-opacity-transition`),l.style.opacity="1",a()},onAfterEnter(l){yn(l,`${t.namespace.value}-opacity-transition`),l.style.opacity=""},onBeforeLeave(l){l.dataset||(l.dataset={}),Nn(l,t.m("collapse"))?(yn(l,t.m("collapse")),l.dataset.oldOverflow=l.style.overflow,l.dataset.scrollWidth=l.clientWidth.toString(),Fn(l,t.m("collapse"))):(Fn(l,t.m("collapse")),l.dataset.oldOverflow=l.style.overflow,l.dataset.scrollWidth=l.clientWidth.toString(),yn(l,t.m("collapse"))),l.style.width=`${l.scrollWidth}px`,l.style.overflow="hidden"},onLeave(l){Fn(l,"horizontal-collapse-transition"),l.style.width=`${l.dataset.scrollWidth}px`}};return(l,a)=>(_(),oe(an,et({mode:"out-in"},o(n)),{default:U(()=>[G(l.$slots,"default")]),_:3},16))}});var r2=fe(s2,[["__file","menu-collapse-transition.vue"]]);function Hf(e,t){const n=y(()=>{let a=e.parent;const s=[t.value];for(;a.type.name!=="ElMenu";)a.props.index&&s.unshift(a.props.index),a=a.parent;return s});return{parentMenu:y(()=>{let a=e.parent;for(;a&&!["ElMenu","ElSubMenu"].includes(a.type.name);)a=a.parent;return a}),indexPath:n}}function i2(e){return y(()=>{const n=e.backgroundColor;return n?new vo(n).shade(20).toString():""})}const Kf=(e,t)=>{const n=ue("menu");return y(()=>n.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":i2(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},wi="rootMenu",Ja="subMenu:",u2=de({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:$t},expandOpenIcon:{type:$t},collapseCloseIcon:{type:$t},collapseOpenIcon:{type:$t}}),js="ElSubMenu";var ki=x({name:js,props:u2,setup(e,{slots:t,expose:n}){const l=lt(),{indexPath:a,parentMenu:s}=Hf(l,y(()=>e.index)),r=ue("menu"),i=ue("sub-menu"),u=we(wi);u||jt(js,"can not inject root menu");const c=we(`${Ja}${s.value.uid}`);c||jt(js,"can not inject sub menu");const d=I({}),f=I({});let m;const v=I(!1),h=I(),p=I(),g=y(()=>M.value==="horizontal"&&E.value?"bottom-start":"right-start"),b=y(()=>M.value==="horizontal"&&E.value||M.value==="vertical"&&!u.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?S.value?e.expandOpenIcon:e.expandCloseIcon:nl:e.collapseCloseIcon&&e.collapseOpenIcon?S.value?e.collapseOpenIcon:e.collapseCloseIcon:Cn),E=y(()=>c.level===0),C=y(()=>{const j=e.teleported;return vt(j)?E.value:j}),w=y(()=>u.props.collapse?`${r.namespace.value}-zoom-in-left`:`${r.namespace.value}-zoom-in-top`),k=y(()=>M.value==="horizontal"&&E.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),S=y(()=>u.openedMenus.includes(e.index)),$=y(()=>[...Object.values(d.value),...Object.values(f.value)].some(({active:j})=>j)),M=y(()=>u.props.mode),R=y(()=>u.props.persistent),N=kt({index:e.index,indexPath:a,active:$}),O=Kf(u.props,c.level+1),P=y(()=>{var j;return(j=e.popperOffset)!=null?j:u.props.popperOffset}),W=y(()=>{var j;return(j=e.popperClass)!=null?j:u.props.popperClass}),K=y(()=>{var j;return(j=e.showTimeout)!=null?j:u.props.showTimeout}),D=y(()=>{var j;return(j=e.hideTimeout)!=null?j:u.props.hideTimeout}),L=()=>{var j,Q,Z;return(Z=(Q=(j=p.value)==null?void 0:j.popperRef)==null?void 0:Q.popperInstanceRef)==null?void 0:Z.destroy()},z=j=>{j||L()},B=()=>{u.props.menuTrigger==="hover"&&u.props.mode==="horizontal"||u.props.collapse&&u.props.mode==="vertical"||e.disabled||u.handleSubMenuClick({index:e.index,indexPath:a.value,active:$.value})},A=(j,Q=K.value)=>{var Z;if(j.type!=="focus"){if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"||e.disabled){c.mouseInChild.value=!0;return}c.mouseInChild.value=!0,m==null||m(),{stop:m}=Ul(()=>{u.openMenu(e.index,a.value)},Q),C.value&&((Z=s.value.vnode.el)==null||Z.dispatchEvent(new MouseEvent("mouseenter")))}},ne=(j=!1)=>{var Q;if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"){c.mouseInChild.value=!1;return}m==null||m(),c.mouseInChild.value=!1,{stop:m}=Ul(()=>!v.value&&u.closeMenu(e.index,a.value),D.value),C.value&&j&&((Q=c.handleMouseleave)==null||Q.call(c,!0))};ie(()=>u.props.collapse,j=>z(!!j));{const j=Z=>{f.value[Z.index]=Z},Q=Z=>{delete f.value[Z.index]};rt(`${Ja}${l.uid}`,{addSubMenu:j,removeSubMenu:Q,handleMouseleave:ne,mouseInChild:v,level:c.level+1})}return n({opened:S}),Xe(()=>{u.addSubMenu(N),c.addSubMenu(N)}),Nt(()=>{c.removeSubMenu(N),u.removeSubMenu(N)}),()=>{var j;const Q=[(j=t.title)==null?void 0:j.call(t),Re(Se,{class:i.e("icon-arrow"),style:{transform:S.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&u.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>Ve(b.value)?Re(l.appContext.components[b.value]):Re(b.value)})],Z=u.isMenuPopup?Re(un,{ref:p,visible:S.value,effect:"light",pure:!0,offset:P.value,showArrow:!1,persistent:R.value,popperClass:W.value,placement:g.value,teleported:C.value,fallbackPlacements:k.value,transition:w.value,gpuAcceleration:!1},{content:()=>{var ee;return Re("div",{class:[r.m(M.value),r.m("popup-container"),W.value],onMouseenter:ae=>A(ae,100),onMouseleave:()=>ne(!0),onFocus:ae=>A(ae,100)},[Re("ul",{class:[r.b(),r.m("popup"),r.m(`popup-${g.value}`)],style:O.value},[(ee=t.default)==null?void 0:ee.call(t)])])},default:()=>Re("div",{class:i.e("title"),onClick:B},Q)}):Re(Oe,{},[Re("div",{class:i.e("title"),ref:h,onClick:B},Q),Re(Ss,{},{default:()=>{var ee;return We(Re("ul",{role:"menu",class:[r.b(),r.m("inline")],style:O.value},[(ee=t.default)==null?void 0:ee.call(t)]),[[mt,S.value]])}})]);return Re("li",{class:[i.b(),i.is("active",$.value),i.is("opened",S.value),i.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:S.value,onMouseenter:A,onMouseleave:()=>ne(),onFocus:A},[Z])}}});const c2=de({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Y(Array),default:()=>Vt([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:$t,default:()=>bm},popperEffect:{type:Y(String),default:"dark"},popperClass:String,showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),Us=e=>ke(e)&&e.every(t=>Ve(t)),d2={close:(e,t)=>Ve(e)&&Us(t),open:(e,t)=>Ve(e)&&Us(t),select:(e,t,n,l)=>Ve(e)&&Us(t)&&yt(n)&&(vt(l)||l instanceof Promise)};var f2=x({name:"ElMenu",props:c2,emits:d2,setup(e,{emit:t,slots:n,expose:l}){const a=lt(),s=a.appContext.config.globalProperties.$router,r=I(),i=ue("menu"),u=ue("sub-menu"),c=I(-1),d=I(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),f=I(e.defaultActive),m=I({}),v=I({}),h=y(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),p=()=>{const D=f.value&&m.value[f.value];if(!D||e.mode==="horizontal"||e.collapse)return;D.indexPath.forEach(z=>{const B=v.value[z];B&&g(z,B.indexPath)})},g=(D,L)=>{d.value.includes(D)||(e.uniqueOpened&&(d.value=d.value.filter(z=>L.includes(z))),d.value.push(D),t("open",D,L))},b=D=>{const L=d.value.indexOf(D);L!==-1&&d.value.splice(L,1)},E=(D,L)=>{b(D),t("close",D,L)},C=({index:D,indexPath:L})=>{d.value.includes(D)?E(D,L):g(D,L)},w=D=>{(e.mode==="horizontal"||e.collapse)&&(d.value=[]);const{index:L,indexPath:z}=D;if(!(qt(L)||qt(z)))if(e.router&&s){const B=D.route||L,A=s.push(B).then(ne=>(ne||(f.value=L),ne));t("select",L,z,{index:L,indexPath:z,route:B},A)}else f.value=L,t("select",L,z,{index:L,indexPath:z})},k=D=>{var L;const z=m.value,B=z[D]||f.value&&z[f.value]||z[e.defaultActive];f.value=(L=B==null?void 0:B.index)!=null?L:D},S=D=>{const L=getComputedStyle(D),z=Number.parseInt(L.marginLeft,10),B=Number.parseInt(L.marginRight,10);return D.offsetWidth+z+B||0},$=()=>{var D,L;if(!r.value)return-1;const z=Array.from((L=(D=r.value)==null?void 0:D.childNodes)!=null?L:[]).filter(ae=>ae.nodeName!=="#text"||ae.nodeValue),B=64,A=getComputedStyle(r.value),ne=Number.parseInt(A.paddingLeft,10),j=Number.parseInt(A.paddingRight,10),Q=r.value.clientWidth-ne-j;let Z=0,ee=0;return z.forEach((ae,re)=>{ae.nodeName!=="#comment"&&(Z+=S(ae),Z<=Q-B&&(ee=re+1))}),ee===z.length?-1:ee},M=D=>v.value[D].indexPath,R=(D,L=33.34)=>{let z;return()=>{z&&clearTimeout(z),z=setTimeout(()=>{D()},L)}};let N=!0;const O=()=>{if(c.value===$())return;const D=()=>{c.value=-1,Ee(()=>{c.value=$()})};N?D():R(D)(),N=!1};ie(()=>e.defaultActive,D=>{m.value[D]||(f.value=""),k(D)}),ie(()=>e.collapse,D=>{D&&(d.value=[])}),ie(m.value,p);let P;bn(()=>{e.mode==="horizontal"&&e.ellipsis?P=Ft(r,O).stop:P==null||P()});const W=I(!1);{const D=A=>{v.value[A.index]=A},L=A=>{delete v.value[A.index]};rt(wi,kt({props:e,openedMenus:d,items:m,subMenus:v,activeIndex:f,isMenuPopup:h,addMenuItem:A=>{m.value[A.index]=A},removeMenuItem:A=>{delete m.value[A.index]},addSubMenu:D,removeSubMenu:L,openMenu:g,closeMenu:E,handleMenuItemClick:w,handleSubMenuClick:C})),rt(`${Ja}${a.uid}`,{addSubMenu:D,removeSubMenu:L,mouseInChild:W,level:0})}Xe(()=>{e.mode==="horizontal"&&new o2(a.vnode.el,i.namespace.value)}),l({open:L=>{const{indexPath:z}=v.value[L];z.forEach(B=>g(B,z))},close:b,updateActiveIndex:k,handleResize:O});const K=Kf(e,0);return()=>{var D,L;let z=(L=(D=n.default)==null?void 0:D.call(n))!=null?L:[];const B=[];if(e.mode==="horizontal"&&r.value){const j=Zn(z),Q=c.value===-1?j:j.slice(0,c.value),Z=c.value===-1?[]:j.slice(c.value);Z!=null&&Z.length&&e.ellipsis&&(z=Q,B.push(Re(ki,{index:"sub-menu-more",class:u.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>Re(Se,{class:u.e("icon-more")},{default:()=>Re(e.ellipsisIcon)}),default:()=>Z})))}const A=e.closeOnClickOutside?[[vl,()=>{d.value.length&&(W.value||(d.value.forEach(j=>t("close",j,M(j))),d.value=[]))}]]:[],ne=We(Re("ul",{key:String(e.collapse),role:"menubar",ref:r,style:K.value,class:{[i.b()]:!0,[i.m(e.mode)]:!0,[i.m("collapse")]:e.collapse}},[...z,...B]),A);return e.collapseTransition&&e.mode==="vertical"?Re(r2,()=>ne):ne}}});const v2=de({index:{type:Y([String,null]),default:null},route:{type:Y([String,Object])},disabled:Boolean}),p2={click:e=>Ve(e.index)&&ke(e.indexPath)},hr="ElMenuItem",h2=x({name:hr}),m2=x({...h2,props:v2,emits:p2,setup(e,{expose:t,emit:n}){const l=e;In(l.index)&&void 0;const a=lt(),s=we(wi),r=ue("menu"),i=ue("menu-item");s||jt(hr,"can not inject root menu");const{parentMenu:u,indexPath:c}=Hf(a,wt(l,"index")),d=we(`${Ja}${u.value.uid}`);d||jt(hr,"can not inject sub menu");const f=y(()=>l.index===s.activeIndex),m=kt({index:l.index,indexPath:c,active:f}),v=()=>{l.disabled||(s.handleMenuItemClick({index:l.index,indexPath:c.value,route:l.route}),n("click",m))};return Xe(()=>{d.addSubMenu(m),s.addMenuItem(m)}),Nt(()=>{d.removeSubMenu(m),s.removeMenuItem(m)}),t({parentMenu:u,rootMenu:s,active:f,nsMenu:r,nsMenuItem:i,handleClick:v}),(h,p)=>(_(),V("li",{class:T([o(i).b(),o(i).is("active",o(f)),o(i).is("disabled",h.disabled)]),role:"menuitem",tabindex:"-1",onClick:v},[o(u).type.name==="ElMenu"&&o(s).props.collapse&&h.$slots.title?(_(),oe(o(un),{key:0,effect:o(s).props.popperEffect,placement:"right","fallback-placements":["left"],persistent:o(s).props.persistent},{content:U(()=>[G(h.$slots,"title")]),default:U(()=>[F("div",{class:T(o(r).be("tooltip","trigger"))},[G(h.$slots,"default")],2)]),_:3},8,["effect","persistent"])):(_(),V(Oe,{key:1},[G(h.$slots,"default"),G(h.$slots,"title")],64))],2))}});var Wf=fe(m2,[["__file","menu-item.vue"]]);const g2={title:String},b2=x({name:"ElMenuItemGroup"}),y2=x({...b2,props:g2,setup(e){const t=ue("menu-item-group");return(n,l)=>(_(),V("li",{class:T(o(t).b())},[F("div",{class:T(o(t).e("title"))},[n.$slots.title?G(n.$slots,"title",{key:1}):(_(),V(Oe,{key:0},[st(pe(n.title),1)],64))],2),F("ul",null,[G(n.$slots,"default")])],2))}});var jf=fe(y2,[["__file","menu-item-group.vue"]]);const C2=He(f2,{MenuItem:Wf,MenuItemGroup:jf,SubMenu:ki}),w2=At(Wf),k2=At(jf),S2=At(ki),E2=de({icon:{type:$t,default:()=>Hh},title:String,content:{type:String,default:""}}),_2={back:()=>!0},T2=x({name:"ElPageHeader"}),$2=x({...T2,props:E2,emits:_2,setup(e,{emit:t}){const{t:n}=pt(),l=ue("page-header");function a(){t("back")}return(s,r)=>(_(),V("div",{class:T([o(l).b(),{[o(l).m("has-breadcrumb")]:!!s.$slots.breadcrumb,[o(l).m("has-extra")]:!!s.$slots.extra,[o(l).is("contentful")]:!!s.$slots.default}])},[s.$slots.breadcrumb?(_(),V("div",{key:0,class:T(o(l).e("breadcrumb"))},[G(s.$slots,"breadcrumb")],2)):J("v-if",!0),F("div",{class:T(o(l).e("header"))},[F("div",{class:T(o(l).e("left"))},[F("div",{class:T(o(l).e("back")),role:"button",tabindex:"0",onClick:a},[s.icon||s.$slots.icon?(_(),V("div",{key:0,"aria-label":s.title||o(n)("el.pageHeader.title"),class:T(o(l).e("icon"))},[G(s.$slots,"icon",{},()=>[s.icon?(_(),oe(o(Se),{key:0},{default:U(()=>[(_(),oe(Ge(s.icon)))]),_:1})):J("v-if",!0)])],10,["aria-label"])):J("v-if",!0),F("div",{class:T(o(l).e("title"))},[G(s.$slots,"title",{},()=>[st(pe(s.title||o(n)("el.pageHeader.title")),1)])],2)],2),H(o(Nf),{direction:"vertical"}),F("div",{class:T(o(l).e("content"))},[G(s.$slots,"content",{},()=>[st(pe(s.content),1)])],2)],2),s.$slots.extra?(_(),V("div",{key:0,class:T(o(l).e("extra"))},[G(s.$slots,"extra")],2)):J("v-if",!0)],2),s.$slots.default?(_(),V("div",{key:1,class:T(o(l).e("main"))},[G(s.$slots,"default")],2)):J("v-if",!0)],2))}});var N2=fe($2,[["__file","page-header.vue"]]);const I2=He(N2),Uf=Symbol("elPaginationKey"),M2=de({disabled:Boolean,currentPage:{type:Number,default:1},prevText:{type:String},prevIcon:{type:$t}}),R2={click:e=>e instanceof MouseEvent},P2=x({name:"ElPaginationPrev"}),O2=x({...P2,props:M2,emits:R2,setup(e){const t=e,{t:n}=pt(),l=y(()=>t.disabled||t.currentPage<=1);return(a,s)=>(_(),V("button",{type:"button",class:"btn-prev",disabled:o(l),"aria-label":a.prevText||o(n)("el.pagination.prev"),"aria-disabled":o(l),onClick:r=>a.$emit("click",r)},[a.prevText?(_(),V("span",{key:0},pe(a.prevText),1)):(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(a.prevIcon)))]),_:1}))],8,["disabled","aria-label","aria-disabled","onClick"]))}});var L2=fe(O2,[["__file","prev.vue"]]);const B2=de({disabled:Boolean,currentPage:{type:Number,default:1},pageCount:{type:Number,default:50},nextText:{type:String},nextIcon:{type:$t}}),V2=x({name:"ElPaginationNext"}),D2=x({...V2,props:B2,emits:["click"],setup(e){const t=e,{t:n}=pt(),l=y(()=>t.disabled||t.currentPage===t.pageCount||t.pageCount===0);return(a,s)=>(_(),V("button",{type:"button",class:"btn-next",disabled:o(l),"aria-label":a.nextText||o(n)("el.pagination.next"),"aria-disabled":o(l),onClick:r=>a.$emit("click",r)},[a.nextText?(_(),V("span",{key:0},pe(a.nextText),1)):(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(a.nextIcon)))]),_:1}))],8,["disabled","aria-label","aria-disabled","onClick"]))}});var A2=fe(D2,[["__file","next.vue"]]);const Yf=Symbol("ElSelectGroup"),Lo=Symbol("ElSelect"),mr="ElOption",F2=de({value:{type:[String,Number,Boolean,Object],required:!0},label:{type:[String,Number]},created:Boolean,disabled:Boolean}),Si=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),_l=e=>Vp(e);function x2(e,t){const n=we(Lo);n||jt(mr,"usage: ");const l=we(Yf,{disabled:!1}),a=y(()=>d(ln(n.props.modelValue),e.value)),s=y(()=>{var v;if(n.props.multiple){const h=ln((v=n.props.modelValue)!=null?v:[]);return!a.value&&h.length>=n.props.multipleLimit&&n.props.multipleLimit>0}else return!1}),r=y(()=>{var v;return(v=e.label)!=null?v:yt(e.value)?"":e.value}),i=y(()=>e.value||e.label||""),u=y(()=>e.disabled||t.groupDisabled||s.value),c=lt(),d=(v=[],h)=>{if(yt(e.value)){const p=n.props.valueKey;return v&&v.some(g=>Uo(Yt(g,p))===Yt(h,p))}else return v&&v.includes(h)},f=()=>{!e.disabled&&!l.disabled&&(n.states.hoveringIndex=n.optionsArray.indexOf(c.proxy))},m=v=>{const h=new RegExp(Si(v),"i");t.visible=h.test(String(r.value))||e.created};return ie(()=>r.value,()=>{!e.created&&!n.props.remote&&n.setSelected()}),ie(()=>e.value,(v,h)=>{const{remote:p,valueKey:g}=n.props;if((p?v!==h:!tn(v,h))&&(n.onOptionDestroy(h,c.proxy),n.onOptionCreate(c.proxy)),!e.created&&!p){if(g&&yt(v)&&yt(h)&&v[g]===h[g])return;n.setSelected()}}),ie(()=>l.disabled,()=>{t.groupDisabled=l.disabled},{immediate:!0}),{select:n,currentLabel:r,currentValue:i,itemSelected:a,isDisabled:u,hoverItem:f,updateOption:m}}const z2=x({name:mr,componentName:mr,props:F2,setup(e){const t=ue("select"),n=sn(),l=y(()=>[t.be("dropdown","item"),t.is("disabled",o(i)),t.is("selected",o(r)),t.is("hovering",o(m))]),a=kt({index:-1,groupDisabled:!1,visible:!0,hover:!1}),{currentLabel:s,itemSelected:r,isDisabled:i,select:u,hoverItem:c,updateOption:d}=x2(e,a),{visible:f,hover:m}=nn(a),v=lt().proxy;u.onOptionCreate(v),Nt(()=>{const p=v.value,{selected:g}=u.states,b=g.some(E=>E.value===v.value);Ee(()=>{u.states.cachedOptions.get(p)===v&&!b&&u.states.cachedOptions.delete(p)}),u.onOptionDestroy(p,v)});function h(){i.value||u.handleOptionSelect(v)}return{ns:t,id:n,containerKls:l,currentLabel:s,itemSelected:r,isDisabled:i,select:u,visible:f,hover:m,states:a,hoverItem:c,updateOption:d,selectOptionClick:h}}});function H2(e,t){return We((_(),V("li",{id:e.id,class:T(e.containerKls),role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected,onMousemove:e.hoverItem,onClick:Le(e.selectOptionClick,["stop"])},[G(e.$slots,"default",{},()=>[F("span",null,pe(e.currentLabel),1)])],42,["id","aria-disabled","aria-selected","onMousemove","onClick"])),[[mt,e.visible]])}var Ei=fe(z2,[["render",H2],["__file","option.vue"]]);const K2=x({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=we(Lo),t=ue("select"),n=y(()=>e.props.popperClass),l=y(()=>e.props.multiple),a=y(()=>e.props.fitInputWidth),s=I("");function r(){var i;s.value=`${(i=e.selectRef)==null?void 0:i.offsetWidth}px`}return Xe(()=>{r(),Ft(e.selectRef,r)}),{ns:t,minWidth:s,popperClass:n,isMultiple:l,isFitInputWidth:a}}});function W2(e,t,n,l,a,s){return _(),V("div",{class:T([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:_e({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(_(),V("div",{key:0,class:T(e.ns.be("dropdown","header"))},[G(e.$slots,"header")],2)):J("v-if",!0),G(e.$slots,"default"),e.$slots.footer?(_(),V("div",{key:1,class:T(e.ns.be("dropdown","footer"))},[G(e.$slots,"footer")],2)):J("v-if",!0)],6)}var j2=fe(K2,[["render",W2],["__file","select-dropdown.vue"]]);const U2=(e,t)=>{const{t:n}=pt(),l=sn(),a=ue("select"),s=ue("input"),r=kt({inputValue:"",options:new Map,cachedOptions:new Map,optionValues:[],selected:[],selectionWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),i=I(),u=I(),c=I(),d=I(),f=I(),m=I(),v=I(),h=I(),p=I(),g=I(),b=I(),E=I(!1),C=I(),{form:w,formItem:k}=dn(),{inputId:S}=Kn(e,{formItemContext:k}),{valueOnClear:$,isEmptyValue:M}=da(e),{isComposing:R,handleCompositionStart:N,handleCompositionUpdate:O,handleCompositionEnd:P}=ha({afterComposition:me=>Rt(me)}),W=y(()=>e.disabled||!!(w!=null&&w.disabled)),{wrapperRef:K,isFocused:D,handleBlur:L}=Ll(f,{disabled:W,afterFocus(){e.automaticDropdown&&!E.value&&(E.value=!0,r.menuVisibleOnFocus=!0)},beforeBlur(me){var ze,Et;return((ze=c.value)==null?void 0:ze.isFocusInsideContent(me))||((Et=d.value)==null?void 0:Et.isFocusInsideContent(me))},afterBlur(){var me;E.value=!1,r.menuVisibleOnFocus=!1,e.validateEvent&&((me=k==null?void 0:k.validate)==null||me.call(k,"blur").catch(ze=>void 0))}}),z=y(()=>ke(e.modelValue)?e.modelValue.length>0:!M(e.modelValue)),B=y(()=>{var me;return(me=w==null?void 0:w.statusIcon)!=null?me:!1}),A=y(()=>e.clearable&&!W.value&&r.inputHovering&&z.value),ne=y(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),j=y(()=>a.is("reverse",!!(ne.value&&E.value))),Q=y(()=>(k==null?void 0:k.validateState)||""),Z=y(()=>Q.value&&gs[Q.value]),ee=y(()=>e.remote?300:0),ae=y(()=>e.remote&&!r.inputValue&&r.options.size===0),re=y(()=>e.loading?e.loadingText||n("el.select.loading"):e.filterable&&r.inputValue&&r.options.size>0&&le.value===0?e.noMatchText||n("el.select.noMatch"):r.options.size===0?e.noDataText||n("el.select.noData"):null),le=y(()=>se.value.filter(me=>me.visible).length),se=y(()=>{const me=Array.from(r.options.values()),ze=[];return r.optionValues.forEach(Et=>{const Qt=me.findIndex(vn=>vn.value===Et);Qt>-1&&ze.push(me[Qt])}),ze.length>=me.length?ze:me}),ge=y(()=>Array.from(r.cachedOptions.values())),Be=y(()=>{const me=se.value.filter(ze=>!ze.created).some(ze=>ze.currentLabel===r.inputValue);return e.filterable&&e.allowCreate&&r.inputValue!==""&&!me}),te=()=>{e.filterable&&Qe(e.filterMethod)||e.filterable&&e.remote&&Qe(e.remoteMethod)||se.value.forEach(me=>{var ze;(ze=me.updateOption)==null||ze.call(me,r.inputValue)})},ce=Gt(),Ie=y(()=>["small"].includes(ce.value)?"small":"default"),Ae=y({get(){return E.value&&!ae.value},set(me){E.value=me}}),xe=y(()=>{if(e.multiple&&!vt(e.modelValue))return ln(e.modelValue).length===0&&!r.inputValue;const me=ke(e.modelValue)?e.modelValue[0]:e.modelValue;return e.filterable||vt(me)?!r.inputValue:!0}),Ye=y(()=>{var me;const ze=(me=e.placeholder)!=null?me:n("el.select.placeholder");return e.multiple||!z.value?ze:r.selectedLabel}),$e=y(()=>nr?null:"mouseenter");ie(()=>e.modelValue,(me,ze)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(r.inputValue="",Me("")),Ze(),!tn(me,ze)&&e.validateEvent&&(k==null||k.validate("change").catch(Et=>void 0))},{flush:"post",deep:!0}),ie(()=>E.value,me=>{me?Me(r.inputValue):(r.inputValue="",r.previousQuery=null,r.isBeforeHide=!0),t("visible-change",me)}),ie(()=>r.options.entries(),()=>{bt&&(Ze(),e.defaultFirstOption&&(e.filterable||e.remote)&&le.value&&Pe())},{flush:"post"}),ie([()=>r.hoveringIndex,se],([me])=>{Te(me)&&me>-1?C.value=se.value[me]||{}:C.value={},se.value.forEach(ze=>{ze.hover=C.value===ze})}),bn(()=>{r.isBeforeHide||te()});const Me=me=>{r.previousQuery===me||R.value||(r.previousQuery=me,e.filterable&&Qe(e.filterMethod)?e.filterMethod(me):e.filterable&&e.remote&&Qe(e.remoteMethod)&&e.remoteMethod(me),e.defaultFirstOption&&(e.filterable||e.remote)&&le.value?Ee(Pe):Ee(at))},Pe=()=>{const me=se.value.filter(vn=>vn.visible&&!vn.disabled&&!vn.states.groupDisabled),ze=me.find(vn=>vn.created),Et=me[0],Qt=se.value.map(vn=>vn.value);r.hoveringIndex=q(Qt,ze||Et)},Ze=()=>{if(e.multiple)r.selectedLabel="";else{const ze=ke(e.modelValue)?e.modelValue[0]:e.modelValue,Et=ot(ze);r.selectedLabel=Et.currentLabel,r.selected=[Et];return}const me=[];vt(e.modelValue)||ln(e.modelValue).forEach(ze=>{me.push(ot(ze))}),r.selected=me},ot=me=>{let ze;const Et=lr(me);for(let yl=r.cachedOptions.size-1;yl>=0;yl--){const Gn=ge.value[yl];if(Et?Yt(Gn.value,e.valueKey)===Yt(me,e.valueKey):Gn.value===me){ze={value:me,currentLabel:Gn.currentLabel,get isDisabled(){return Gn.isDisabled}};break}}if(ze)return ze;const Qt=Et?me.label:me??"";return{value:me,currentLabel:Qt}},at=()=>{r.hoveringIndex=se.value.findIndex(me=>r.selected.some(ze=>wn(ze)===wn(me)))},ct=()=>{r.selectionWidth=Number.parseFloat(window.getComputedStyle(u.value).width)},ye=()=>{r.collapseItemWidth=g.value.getBoundingClientRect().width},Ue=()=>{var me,ze;(ze=(me=c.value)==null?void 0:me.updatePopper)==null||ze.call(me)},It=()=>{var me,ze;(ze=(me=d.value)==null?void 0:me.updatePopper)==null||ze.call(me)},Ot=()=>{r.inputValue.length>0&&!E.value&&(E.value=!0),Me(r.inputValue)},Rt=me=>{if(r.inputValue=me.target.value,e.remote)Mt();else return Ot()},Mt=Ln(()=>{Ot()},ee.value),St=me=>{tn(e.modelValue,me)||t(nt,me)},je=me=>Dc(me,ze=>{const Et=r.cachedOptions.get(ze);return Et&&!Et.disabled&&!Et.states.groupDisabled}),tt=me=>{if(e.multiple&&me.code!==Ce.delete&&me.target.value.length<=0){const ze=ln(e.modelValue).slice(),Et=je(ze);if(Et<0)return;const Qt=ze[Et];ze.splice(Et,1),t(De,ze),St(ze),t("remove-tag",Qt)}},it=(me,ze)=>{const Et=r.selected.indexOf(ze);if(Et>-1&&!W.value){const Qt=ln(e.modelValue).slice();Qt.splice(Et,1),t(De,Qt),St(Qt),t("remove-tag",ze.value)}me.stopPropagation(),Ut()},X=me=>{me.stopPropagation();const ze=e.multiple?[]:$.value;if(e.multiple)for(const Et of r.selected)Et.isDisabled&&ze.push(Et.value);t(De,ze),St(ze),r.hoveringIndex=-1,E.value=!1,t("clear"),Ut()},ve=me=>{var ze;if(e.multiple){const Et=ln((ze=e.modelValue)!=null?ze:[]).slice(),Qt=q(Et,me);Qt>-1?Et.splice(Qt,1):(e.multipleLimit<=0||Et.length{be(me)})},q=(me,ze)=>vt(ze)?-1:yt(ze.value)?me.findIndex(Et=>tn(Yt(Et,e.valueKey),wn(ze))):me.indexOf(ze.value),be=me=>{var ze,Et,Qt,vn,yl;const Gn=ke(me)?me[0]:me;let Cl=null;if(Gn!=null&&Gn.value){const wl=se.value.filter(eo=>eo.value===Gn.value);wl.length>0&&(Cl=wl[0].$el)}if(c.value&&Cl){const wl=(vn=(Qt=(Et=(ze=c.value)==null?void 0:ze.popperRef)==null?void 0:Et.contentRef)==null?void 0:Qt.querySelector)==null?void 0:vn.call(Qt,`.${a.be("dropdown","wrap")}`);wl&&Ur(wl,Cl)}(yl=b.value)==null||yl.handleScroll()},qe=me=>{r.options.set(me.value,me),r.cachedOptions.set(me.value,me)},ft=(me,ze)=>{r.options.get(me)===ze&&r.options.delete(me)},Pt=y(()=>{var me,ze;return(ze=(me=c.value)==null?void 0:me.popperRef)==null?void 0:ze.contentRef}),Kt=()=>{r.isBeforeHide=!1,Ee(()=>{var me;(me=b.value)==null||me.update(),be(r.selected)})},Ut=()=>{var me;(me=f.value)==null||me.focus()},ll=()=>{var me;if(E.value){E.value=!1,Ee(()=>{var ze;return(ze=f.value)==null?void 0:ze.blur()});return}(me=f.value)==null||me.blur()},en=me=>{X(me)},Bn=me=>{if(E.value=!1,D.value){const ze=new FocusEvent("focus",me);Ee(()=>L(ze))}},Ne=()=>{r.inputValue.length>0?r.inputValue="":E.value=!1},gt=()=>{W.value||(nr&&(r.inputHovering=!0),r.menuVisibleOnFocus?r.menuVisibleOnFocus=!1:E.value=!E.value)},Je=()=>{if(!E.value)gt();else{const me=se.value[r.hoveringIndex];me&&!me.isDisabled&&ve(me)}},wn=me=>yt(me.value)?Yt(me.value,e.valueKey):me.value,qn=y(()=>se.value.filter(me=>me.visible).every(me=>me.isDisabled)),bl=y(()=>e.multiple?e.collapseTags?r.selected.slice(0,e.maxCollapseTags):r.selected:[]),Ql=y(()=>e.multiple?e.collapseTags?r.selected.slice(e.maxCollapseTags):[]:[]),ya=me=>{if(!E.value){E.value=!0;return}if(!(r.options.size===0||le.value===0||R.value)&&!qn.value){me==="next"?(r.hoveringIndex++,r.hoveringIndex===r.options.size&&(r.hoveringIndex=0)):me==="prev"&&(r.hoveringIndex--,r.hoveringIndex<0&&(r.hoveringIndex=r.options.size-1));const ze=se.value[r.hoveringIndex];(ze.isDisabled||!ze.visible)&&ya(me),Ee(()=>be(C.value))}},Ps=()=>{if(!u.value)return 0;const me=window.getComputedStyle(u.value);return Number.parseFloat(me.gap||"6px")},Os=y(()=>{const me=Ps();return{maxWidth:`${g.value&&e.maxCollapseTags===1?r.selectionWidth-r.collapseItemWidth-me:r.selectionWidth}px`}}),Ls=y(()=>({maxWidth:`${r.selectionWidth}px`})),Bs=me=>{t("popup-scroll",me)};return Ft(u,ct),Ft(h,Ue),Ft(K,Ue),Ft(p,It),Ft(g,ye),Xe(()=>{Ze()}),{inputId:S,contentId:l,nsSelect:a,nsInput:s,states:r,isFocused:D,expanded:E,optionsArray:se,hoverOption:C,selectSize:ce,filteredOptionsCount:le,updateTooltip:Ue,updateTagTooltip:It,debouncedOnInputChange:Mt,onInput:Rt,deletePrevTag:tt,deleteTag:it,deleteSelected:X,handleOptionSelect:ve,scrollToOption:be,hasModelValue:z,shouldShowPlaceholder:xe,currentPlaceholder:Ye,mouseEnterEventName:$e,needStatusIcon:B,showClose:A,iconComponent:ne,iconReverse:j,validateState:Q,validateIcon:Z,showNewOption:Be,updateOptions:te,collapseTagSize:Ie,setSelected:Ze,selectDisabled:W,emptyText:re,handleCompositionStart:N,handleCompositionUpdate:O,handleCompositionEnd:P,onOptionCreate:qe,onOptionDestroy:ft,handleMenuEnter:Kt,focus:Ut,blur:ll,handleClearClick:en,handleClickOutside:Bn,handleEsc:Ne,toggleMenu:gt,selectOption:Je,getValueKey:wn,navigateOptions:ya,dropdownMenuVisible:Ae,showTagList:bl,collapseTagList:Ql,popupScroll:Bs,tagStyle:Os,collapseTagStyle:Ls,popperRef:Pt,inputRef:f,tooltipRef:c,tagTooltipRef:d,prefixRef:m,suffixRef:v,selectRef:i,wrapperRef:K,selectionRef:u,scrollbarRef:b,menuRef:h,tagMenuRef:p,collapseItemRef:g}};var Y2=x({name:"ElOptions",setup(e,{slots:t}){const n=we(Lo);let l=[];return()=>{var a,s;const r=(a=t.default)==null?void 0:a.call(t),i=[];function u(c){ke(c)&&c.forEach(d=>{var f,m,v,h;const p=(f=(d==null?void 0:d.type)||{})==null?void 0:f.name;p==="ElOptionGroup"?u(!Ve(d.children)&&!ke(d.children)&&Qe((m=d.children)==null?void 0:m.default)?(v=d.children)==null?void 0:v.default():d.children):p==="ElOption"?i.push((h=d.props)==null?void 0:h.value):ke(d.children)&&u(d.children)})}return r.length&&u((s=r[0])==null?void 0:s.children),tn(i,l)||(l=i,n&&(n.states.optionValues=i)),r}}});const q2=de({name:String,id:String,modelValue:{type:Y([Array,String,Number,Boolean,Object]),default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:Jt,effect:{type:Y(String),default:"light"},disabled:Boolean,clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperOptions:{type:Y(Object),default:()=>({})},remote:Boolean,loadingText:String,noMatchText:String,noDataText:String,remoteMethod:Function,filterMethod:Function,multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},teleported:Wt.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:$t,default:ml},fitInputWidth:Boolean,suffixIcon:{type:$t,default:nl},tagType:{...fl.type,default:"info"},tagEffect:{...fl.effect,default:"light"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:Y(String),values:Xl,default:"bottom-start"},fallbackPlacements:{type:Y(Array),default:["bottom-start","top-start","right","left"]},tabindex:{type:[String,Number],default:0},appendTo:Wt.appendTo,...Zl,...cn(["ariaLabel"])});gd.scroll;const ju="ElSelect",G2=x({name:ju,componentName:ju,components:{ElSelectMenu:j2,ElOption:Ei,ElOptions:Y2,ElTag:So,ElScrollbar:jn,ElTooltip:un,ElIcon:Se},directives:{ClickOutside:vl},props:q2,emits:[De,nt,"remove-tag","clear","visible-change","focus","blur","popup-scroll"],setup(e,{emit:t,slots:n}){const l=lt();l.appContext.config.warnHandler=(...m)=>{!m[0]||m[0].includes('Slot "default" invoked outside of the render function')||console.warn(...m)};const a=y(()=>{const{modelValue:m,multiple:v}=e,h=v?[]:void 0;return ke(m)?v?m:h:v?h:m}),s=kt({...nn(e),modelValue:a}),r=U2(s,t),{calculatorRef:i,inputStyle:u}=Ci(),c=m=>m.reduce((v,h)=>(v.push(h),h.children&&h.children.length>0&&v.push(...c(h.children)),v),[]),d=m=>{Zn(m||[]).forEach(h=>{var p;if(yt(h)&&(h.type.name==="ElOption"||h.type.name==="ElTree")){const g=h.type.name;if(g==="ElTree"){const b=((p=h.props)==null?void 0:p.data)||[];c(b).forEach(C=>{C.currentLabel=C.label||(yt(C.value)?"":C.value),r.onOptionCreate(C)})}else if(g==="ElOption"){const b={...h.props};b.currentLabel=b.label||(yt(b.value)?"":b.value),r.onOptionCreate(b)}}})};ie(()=>{var m;return(m=n.default)==null?void 0:m.call(n)},m=>{e.persistent||d(m)},{immediate:!0}),rt(Lo,kt({props:s,states:r.states,selectRef:r.selectRef,optionsArray:r.optionsArray,setSelected:r.setSelected,handleOptionSelect:r.handleOptionSelect,onOptionCreate:r.onOptionCreate,onOptionDestroy:r.onOptionDestroy}));const f=y(()=>e.multiple?r.states.selected.map(m=>m.currentLabel):r.states.selectedLabel);return Nt(()=>{l.appContext.config.warnHandler=void 0}),{...r,modelValue:a,selectedLabel:f,calculatorRef:i,inputStyle:u}}});function X2(e,t){const n=ht("el-tag"),l=ht("el-tooltip"),a=ht("el-icon"),s=ht("el-option"),r=ht("el-options"),i=ht("el-scrollbar"),u=ht("el-select-menu"),c=fs("click-outside");return We((_(),V("div",{ref:"selectRef",class:T([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),[Dp(e.mouseEnterEventName)]:d=>e.states.inputHovering=!0,onMouseleave:d=>e.states.inputHovering=!1},[H(l,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:d=>e.states.isBeforeHide=!1},{default:U(()=>{var d;return[F("div",{ref:"wrapperRef",class:T([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:Le(e.toggleMenu,["prevent"])},[e.$slots.prefix?(_(),V("div",{key:0,ref:"prefixRef",class:T(e.nsSelect.e("prefix"))},[G(e.$slots,"prefix")],2)):J("v-if",!0),F("div",{ref:"selectionRef",class:T([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?G(e.$slots,"tag",{key:0,data:e.states.selected,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>[(_(!0),V(Oe,null,ut(e.showTagList,f=>(_(),V("div",{key:e.getValueKey(f),class:T(e.nsSelect.e("selected-item"))},[H(n,{closable:!e.selectDisabled&&!f.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:_e(e.tagStyle),onClose:m=>e.deleteTag(m,f)},{default:U(()=>[F("span",{class:T(e.nsSelect.e("tags-text"))},[G(e.$slots,"label",{label:f.currentLabel,value:f.value},()=>[st(pe(f.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(_(),oe(l,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom","popper-class":e.popperClass,teleported:e.teleported},{default:U(()=>[F("div",{ref:"collapseItemRef",class:T(e.nsSelect.e("selected-item"))},[H(n,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:_e(e.collapseTagStyle)},{default:U(()=>[F("span",{class:T(e.nsSelect.e("tags-text"))}," + "+pe(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:U(()=>[F("div",{ref:"tagMenuRef",class:T(e.nsSelect.e("selection"))},[(_(!0),V(Oe,null,ut(e.collapseTagList,f=>(_(),V("div",{key:e.getValueKey(f),class:T(e.nsSelect.e("selected-item"))},[H(n,{class:"in-tooltip",closable:!e.selectDisabled&&!f.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:m=>e.deleteTag(m,f)},{default:U(()=>[F("span",{class:T(e.nsSelect.e("tags-text"))},[G(e.$slots,"label",{label:f.currentLabel,value:f.value},()=>[st(pe(f.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","effect","popper-class","teleported"])):J("v-if",!0)]):J("v-if",!0),F("div",{class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable)])},[We(F("input",{id:e.inputId,ref:"inputRef","onUpdate:modelValue":f=>e.states.inputValue=f,type:"text",name:e.name,class:T([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:_e(e.inputStyle),tabindex:e.tabindex,role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":((d=e.hoverOption)==null?void 0:d.id)||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onKeydown:[Tt(Le(f=>e.navigateOptions("next"),["stop","prevent"]),["down"]),Tt(Le(f=>e.navigateOptions("prev"),["stop","prevent"]),["up"]),Tt(Le(e.handleEsc,["stop","prevent"]),["esc"]),Tt(Le(e.selectOption,["stop","prevent"]),["enter"]),Tt(Le(e.deletePrevTag,["stop"]),["delete"])],onCompositionstart:e.handleCompositionStart,onCompositionupdate:e.handleCompositionUpdate,onCompositionend:e.handleCompositionEnd,onInput:e.onInput,onClick:Le(e.toggleMenu,["stop"])},null,46,["id","onUpdate:modelValue","name","disabled","autocomplete","tabindex","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label","onKeydown","onCompositionstart","onCompositionupdate","onCompositionend","onInput","onClick"]),[[ds,e.states.inputValue]]),e.filterable?(_(),V("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:T(e.nsSelect.e("input-calculator")),textContent:pe(e.states.inputValue)},null,10,["textContent"])):J("v-if",!0)],2),e.shouldShowPlaceholder?(_(),V("div",{key:1,class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?G(e.$slots,"label",{key:0,label:e.currentPlaceholder,value:e.modelValue},()=>[F("span",null,pe(e.currentPlaceholder),1)]):(_(),V("span",{key:1},pe(e.currentPlaceholder),1))],2)):J("v-if",!0)],2),F("div",{ref:"suffixRef",class:T(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClose?(_(),oe(a,{key:0,class:T([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:U(()=>[(_(),oe(Ge(e.iconComponent)))]),_:1},8,["class"])):J("v-if",!0),e.showClose&&e.clearIcon?(_(),oe(a,{key:1,class:T([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.nsSelect.e("clear")]),onClick:e.handleClearClick},{default:U(()=>[(_(),oe(Ge(e.clearIcon)))]),_:1},8,["class","onClick"])):J("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(_(),oe(a,{key:2,class:T([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:U(()=>[(_(),oe(Ge(e.validateIcon)))]),_:1},8,["class"])):J("v-if",!0)],2)],10,["onClick"])]}),content:U(()=>[H(u,{ref:"menuRef"},{default:U(()=>[e.$slots.header?(_(),V("div",{key:0,class:T(e.nsSelect.be("dropdown","header")),onClick:Le(()=>{},["stop"])},[G(e.$slots,"header")],10,["onClick"])):J("v-if",!0),We(H(i,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:T([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical",onScroll:e.popupScroll},{default:U(()=>[e.showNewOption?(_(),oe(s,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):J("v-if",!0),H(r,null,{default:U(()=>[G(e.$slots,"default")]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label","onScroll"]),[[mt,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(_(),V("div",{key:1,class:T(e.nsSelect.be("dropdown","loading"))},[G(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(_(),V("div",{key:2,class:T(e.nsSelect.be("dropdown","empty"))},[G(e.$slots,"empty",{},()=>[F("span",null,pe(e.emptyText),1)])],2)):J("v-if",!0),e.$slots.footer?(_(),V("div",{key:3,class:T(e.nsSelect.be("dropdown","footer")),onClick:Le(()=>{},["stop"])},[G(e.$slots,"footer")],10,["onClick"])):J("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-options","fallback-placements","effect","transition","persistent","append-to","show-arrow","offset","onBeforeShow","onHide"])],16,["onMouseleave"])),[[c,e.handleClickOutside,e.popperRef]])}var Z2=fe(G2,[["render",X2],["__file","select.vue"]]);const J2=x({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=ue("select"),n=I(),l=lt(),a=I([]);rt(Yf,kt({...nn(e)}));const s=y(()=>a.value.some(c=>c.visible===!0)),r=c=>{var d;return c.type.name==="ElOption"&&!!((d=c.component)!=null&&d.proxy)},i=c=>{const d=ln(c),f=[];return d.forEach(m=>{var v;Dt(m)&&(r(m)?f.push(m.component.proxy):ke(m.children)&&m.children.length?f.push(...i(m.children)):(v=m.component)!=null&&v.subTree&&f.push(...i(m.component.subTree)))}),f},u=()=>{a.value=i(l.subTree)};return Xe(()=>{u()}),Lc(n,u,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:s,ns:t}}});function Q2(e,t,n,l,a,s){return We((_(),V("ul",{ref:"groupRef",class:T(e.ns.be("group","wrap"))},[F("li",{class:T(e.ns.be("group","title"))},pe(e.label),3),F("li",null,[F("ul",{class:T(e.ns.b("group"))},[G(e.$slots,"default")],2)])],2)),[[mt,e.visible]])}var qf=fe(J2,[["render",Q2],["__file","option-group.vue"]]);const ql=He(Z2,{Option:Ei,OptionGroup:qf}),Qa=At(Ei),eE=At(qf),_i=()=>we(Uf,{}),tE=de({pageSize:{type:Number,required:!0},pageSizes:{type:Y(Array),default:()=>Vt([10,20,30,40,50,100])},popperClass:{type:String},disabled:Boolean,teleported:Boolean,size:{type:String,values:tl},appendSizeTo:String}),nE=x({name:"ElPaginationSizes"}),lE=x({...nE,props:tE,emits:["page-size-change"],setup(e,{emit:t}){const n=e,{t:l}=pt(),a=ue("pagination"),s=_i(),r=I(n.pageSize);ie(()=>n.pageSizes,(c,d)=>{if(!tn(c,d)&&ke(c)){const f=c.includes(n.pageSize)?n.pageSize:n.pageSizes[0];t("page-size-change",f)}}),ie(()=>n.pageSize,c=>{r.value=c});const i=y(()=>n.pageSizes);function u(c){var d;c!==r.value&&(r.value=c,(d=s.handleSizeChange)==null||d.call(s,Number(c)))}return(c,d)=>(_(),V("span",{class:T(o(a).e("sizes"))},[H(o(ql),{"model-value":r.value,disabled:c.disabled,"popper-class":c.popperClass,size:c.size,teleported:c.teleported,"validate-event":!1,"append-to":c.appendSizeTo,onChange:u},{default:U(()=>[(_(!0),V(Oe,null,ut(o(i),f=>(_(),oe(o(Qa),{key:f,value:f,label:f+o(l)("el.pagination.pagesize")},null,8,["value","label"]))),128))]),_:1},8,["model-value","disabled","popper-class","size","teleported","append-to"])],2))}});var oE=fe(lE,[["__file","sizes.vue"]]);const aE=de({size:{type:String,values:tl}}),sE=x({name:"ElPaginationJumper"}),rE=x({...sE,props:aE,setup(e){const{t}=pt(),n=ue("pagination"),{pageCount:l,disabled:a,currentPage:s,changeEvent:r}=_i(),i=I(),u=y(()=>{var f;return(f=i.value)!=null?f:s==null?void 0:s.value});function c(f){i.value=f?+f:""}function d(f){f=Math.trunc(+f),r==null||r(f),i.value=void 0}return(f,m)=>(_(),V("span",{class:T(o(n).e("jump")),disabled:o(a)},[F("span",{class:T([o(n).e("goto")])},pe(o(t)("el.pagination.goto")),3),H(o(hn),{size:f.size,class:T([o(n).e("editor"),o(n).is("in-pagination")]),min:1,max:o(l),disabled:o(a),"model-value":o(u),"validate-event":!1,"aria-label":o(t)("el.pagination.page"),type:"number","onUpdate:modelValue":c,onChange:d},null,8,["size","class","max","disabled","model-value","aria-label"]),F("span",{class:T([o(n).e("classifier")])},pe(o(t)("el.pagination.pageClassifier")),3)],10,["disabled"]))}});var iE=fe(rE,[["__file","jumper.vue"]]);const uE=de({total:{type:Number,default:1e3}}),cE=x({name:"ElPaginationTotal"}),dE=x({...cE,props:uE,setup(e){const{t}=pt(),n=ue("pagination"),{disabled:l}=_i();return(a,s)=>(_(),V("span",{class:T(o(n).e("total")),disabled:o(l)},pe(o(t)("el.pagination.total",{total:a.total})),11,["disabled"]))}});var fE=fe(dE,[["__file","total.vue"]]);const vE=de({currentPage:{type:Number,default:1},pageCount:{type:Number,required:!0},pagerCount:{type:Number,default:7},disabled:Boolean}),pE=x({name:"ElPaginationPager"}),hE=x({...pE,props:vE,emits:[nt],setup(e,{emit:t}){const n=e,l=ue("pager"),a=ue("icon"),{t:s}=pt(),r=I(!1),i=I(!1),u=I(!1),c=I(!1),d=I(!1),f=I(!1),m=y(()=>{const w=n.pagerCount,k=(w-1)/2,S=Number(n.currentPage),$=Number(n.pageCount);let M=!1,R=!1;$>w&&(S>w-k&&(M=!0),S<$-k&&(R=!0));const N=[];if(M&&!R){const O=$-(w-2);for(let P=O;P<$;P++)N.push(P)}else if(!M&&R)for(let O=2;O["more","btn-quickprev",a.b(),l.is("disabled",n.disabled)]),h=y(()=>["more","btn-quicknext",a.b(),l.is("disabled",n.disabled)]),p=y(()=>n.disabled?-1:0);bn(()=>{const w=(n.pagerCount-1)/2;r.value=!1,i.value=!1,n.pageCount>n.pagerCount&&(n.currentPage>n.pagerCount-w&&(r.value=!0),n.currentPage$&&(S=$)),S!==M&&t(nt,S)}return(w,k)=>(_(),V("ul",{class:T(o(l).b()),onClick:C,onKeyup:Tt(E,["enter"])},[w.pageCount>0?(_(),V("li",{key:0,class:T([[o(l).is("active",w.currentPage===1),o(l).is("disabled",w.disabled)],"number"]),"aria-current":w.currentPage===1,"aria-label":o(s)("el.pagination.currentPage",{pager:1}),tabindex:o(p)}," 1 ",10,["aria-current","aria-label","tabindex"])):J("v-if",!0),r.value?(_(),V("li",{key:1,class:T(o(v)),tabindex:o(p),"aria-label":o(s)("el.pagination.prevPages",{pager:w.pagerCount-2}),onMouseenter:S=>g(!0),onMouseleave:S=>u.value=!1,onFocus:S=>b(!0),onBlur:S=>d.value=!1},[(u.value||d.value)&&!w.disabled?(_(),oe(o(Rl),{key:0})):(_(),oe(o(du),{key:1}))],42,["tabindex","aria-label","onMouseenter","onMouseleave","onFocus","onBlur"])):J("v-if",!0),(_(!0),V(Oe,null,ut(o(m),S=>(_(),V("li",{key:S,class:T([[o(l).is("active",w.currentPage===S),o(l).is("disabled",w.disabled)],"number"]),"aria-current":w.currentPage===S,"aria-label":o(s)("el.pagination.currentPage",{pager:S}),tabindex:o(p)},pe(S),11,["aria-current","aria-label","tabindex"]))),128)),i.value?(_(),V("li",{key:2,class:T(o(h)),tabindex:o(p),"aria-label":o(s)("el.pagination.nextPages",{pager:w.pagerCount-2}),onMouseenter:S=>g(),onMouseleave:S=>c.value=!1,onFocus:S=>b(),onBlur:S=>f.value=!1},[(c.value||f.value)&&!w.disabled?(_(),oe(o(Pl),{key:0})):(_(),oe(o(du),{key:1}))],42,["tabindex","aria-label","onMouseenter","onMouseleave","onFocus","onBlur"])):J("v-if",!0),w.pageCount>1?(_(),V("li",{key:3,class:T([[o(l).is("active",w.currentPage===w.pageCount),o(l).is("disabled",w.disabled)],"number"]),"aria-current":w.currentPage===w.pageCount,"aria-label":o(s)("el.pagination.currentPage",{pager:w.pageCount}),tabindex:o(p)},pe(w.pageCount),11,["aria-current","aria-label","tabindex"])):J("v-if",!0)],42,["onKeyup"]))}});var mE=fe(hE,[["__file","pager.vue"]]);const kn=e=>typeof e!="number",gE=de({pageSize:Number,defaultPageSize:Number,total:Number,pageCount:Number,pagerCount:{type:Number,validator:e=>Te(e)&&Math.trunc(e)===e&&e>4&&e<22&&e%2===1,default:7},currentPage:Number,defaultCurrentPage:Number,layout:{type:String,default:["prev","pager","next","jumper","->","total"].join(", ")},pageSizes:{type:Y(Array),default:()=>Vt([10,20,30,40,50,100])},popperClass:{type:String,default:""},prevText:{type:String,default:""},prevIcon:{type:$t,default:()=>dl},nextText:{type:String,default:""},nextIcon:{type:$t,default:()=>Cn},teleported:{type:Boolean,default:!0},small:Boolean,size:Jt,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean,appendSizeTo:String}),bE={"update:current-page":e=>Te(e),"update:page-size":e=>Te(e),"size-change":e=>Te(e),change:(e,t)=>Te(e)&&Te(t),"current-change":e=>Te(e),"prev-click":e=>Te(e),"next-click":e=>Te(e)},Uu="ElPagination";var yE=x({name:Uu,props:gE,emits:bE,setup(e,{emit:t,slots:n}){const{t:l}=pt(),a=ue("pagination"),s=lt().vnode.props||{},r=Zc(),i=y(()=>{var k;return e.small?"small":(k=e.size)!=null?k:r.value});ul({from:"small",replacement:"size",version:"3.0.0",scope:"el-pagination",ref:"https://element-plus.org/zh-CN/component/pagination.html"},y(()=>!!e.small));const u="onUpdate:currentPage"in s||"onUpdate:current-page"in s||"onCurrentChange"in s,c="onUpdate:pageSize"in s||"onUpdate:page-size"in s||"onSizeChange"in s,d=y(()=>{if(kn(e.total)&&kn(e.pageCount)||!kn(e.currentPage)&&!u)return!1;if(e.layout.includes("sizes")){if(kn(e.pageCount)){if(!kn(e.total)&&!kn(e.pageSize)&&!c)return!1}else if(!c)return!1}return!0}),f=I(kn(e.defaultPageSize)?10:e.defaultPageSize),m=I(kn(e.defaultCurrentPage)?1:e.defaultCurrentPage),v=y({get(){return kn(e.pageSize)?f.value:e.pageSize},set(k){kn(e.pageSize)&&(f.value=k),c&&(t("update:page-size",k),t("size-change",k))}}),h=y(()=>{let k=0;return kn(e.pageCount)?kn(e.total)||(k=Math.max(1,Math.ceil(e.total/v.value))):k=e.pageCount,k}),p=y({get(){return kn(e.currentPage)?m.value:e.currentPage},set(k){let S=k;k<1?S=1:k>h.value&&(S=h.value),kn(e.currentPage)&&(m.value=S),u&&(t("update:current-page",S),t("current-change",S))}});ie(h,k=>{p.value>k&&(p.value=k)}),ie([p,v],k=>{t(nt,...k)},{flush:"post"});function g(k){p.value=k}function b(k){v.value=k;const S=h.value;p.value>S&&(p.value=S)}function E(){e.disabled||(p.value-=1,t("prev-click",p.value))}function C(){e.disabled||(p.value+=1,t("next-click",p.value))}function w(k,S){k&&(k.props||(k.props={}),k.props.class=[k.props.class,S].join(" "))}return rt(Uf,{pageCount:h,disabled:y(()=>e.disabled),currentPage:p,changeEvent:g,handleSizeChange:b}),()=>{var k,S;if(!d.value)return l("el.pagination.deprecationWarning"),null;if(!e.layout||e.hideOnSinglePage&&h.value<=1)return null;const $=[],M=[],R=Re("div",{class:a.e("rightwrapper")},M),N={prev:Re(L2,{disabled:e.disabled,currentPage:p.value,prevText:e.prevText,prevIcon:e.prevIcon,onClick:E}),jumper:Re(iE,{size:i.value}),pager:Re(mE,{currentPage:p.value,pageCount:h.value,pagerCount:e.pagerCount,onChange:g,disabled:e.disabled}),next:Re(A2,{disabled:e.disabled,currentPage:p.value,pageCount:h.value,nextText:e.nextText,nextIcon:e.nextIcon,onClick:C}),sizes:Re(oE,{pageSize:v.value,pageSizes:e.pageSizes,popperClass:e.popperClass,disabled:e.disabled,teleported:e.teleported,size:i.value,appendSizeTo:e.appendSizeTo}),slot:(S=(k=n==null?void 0:n.default)==null?void 0:k.call(n))!=null?S:null,total:Re(fE,{total:kn(e.total)?0:e.total})},O=e.layout.split(",").map(W=>W.trim());let P=!1;return O.forEach(W=>{if(W==="->"){P=!0;return}P?M.push(N[W]):$.push(N[W])}),w($[0],a.is("first")),w($[$.length-1],a.is("last")),P&&M.length>0&&(w(M[0],a.is("first")),w(M[M.length-1],a.is("last")),$.push(R)),Re("div",{class:[a.b(),a.is("background",e.background),a.m(i.value)]},$)}}});const CE=He(yE),wE=de({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:or,default:"primary"},cancelButtonType:{type:String,values:or,default:"text"},icon:{type:$t,default:()=>Sm},iconColor:{type:String,default:"#f90"},hideIcon:Boolean,hideAfter:{type:Number,default:200},teleported:Wt.teleported,persistent:Wt.persistent,width:{type:[String,Number],default:150}}),kE={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},SE=x({name:"ElPopconfirm"}),EE=x({...SE,props:wE,emits:kE,setup(e,{emit:t}){const n=e,{t:l}=pt(),a=ue("popconfirm"),s=I(),r=()=>{var m,v;(v=(m=s.value)==null?void 0:m.onClose)==null||v.call(m)},i=y(()=>({width:zt(n.width)})),u=m=>{t("confirm",m),r()},c=m=>{t("cancel",m),r()},d=y(()=>n.confirmButtonText||l("el.popconfirm.confirmButtonText")),f=y(()=>n.cancelButtonText||l("el.popconfirm.cancelButtonText"));return(m,v)=>(_(),oe(o(un),et({ref_key:"tooltipRef",ref:s,trigger:"click",effect:"light"},m.$attrs,{"popper-class":`${o(a).namespace.value}-popover`,"popper-style":o(i),teleported:m.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":m.hideAfter,persistent:m.persistent}),{content:U(()=>[F("div",{class:T(o(a).b())},[F("div",{class:T(o(a).e("main"))},[!m.hideIcon&&m.icon?(_(),oe(o(Se),{key:0,class:T(o(a).e("icon")),style:_e({color:m.iconColor})},{default:U(()=>[(_(),oe(Ge(m.icon)))]),_:1},8,["class","style"])):J("v-if",!0),st(" "+pe(m.title),1)],2),F("div",{class:T(o(a).e("action"))},[G(m.$slots,"actions",{confirm:u,cancel:c},()=>[H(o(on),{size:"small",type:m.cancelButtonType==="text"?"":m.cancelButtonType,text:m.cancelButtonType==="text",onClick:c},{default:U(()=>[st(pe(o(f)),1)]),_:1},8,["type","text"]),H(o(on),{size:"small",type:m.confirmButtonType==="text"?"":m.confirmButtonType,text:m.confirmButtonType==="text",onClick:u},{default:U(()=>[st(pe(o(d)),1)]),_:1},8,["type","text"])])],2)],2)]),default:U(()=>[m.$slots.reference?G(m.$slots,"reference",{key:0}):J("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});var _E=fe(EE,[["__file","popconfirm.vue"]]);const TE=He(_E),$E=de({trigger:mo.trigger,triggerKeys:mo.triggerKeys,placement:Va.placement,disabled:mo.disabled,visible:Wt.visible,transition:Wt.transition,popperOptions:Va.popperOptions,tabindex:Va.tabindex,content:Wt.content,popperStyle:Wt.popperStyle,popperClass:Wt.popperClass,enterable:{...Wt.enterable,default:!0},effect:{...Wt.effect,default:"light"},teleported:Wt.teleported,appendTo:Wt.appendTo,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),NE={"update:visible":e=>_t(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},IE="onUpdate:visible",ME=x({name:"ElPopover"}),RE=x({...ME,props:$E,emits:NE,setup(e,{expose:t,emit:n}){const l=e,a=y(()=>l[IE]),s=ue("popover"),r=I(),i=y(()=>{var g;return(g=o(r))==null?void 0:g.popperRef}),u=y(()=>[{width:zt(l.width)},l.popperStyle]),c=y(()=>[s.b(),l.popperClass,{[s.m("plain")]:!!l.content}]),d=y(()=>l.transition===`${s.namespace.value}-fade-in-linear`),f=()=>{var g;(g=r.value)==null||g.hide()},m=()=>{n("before-enter")},v=()=>{n("before-leave")},h=()=>{n("after-enter")},p=()=>{n("update:visible",!1),n("after-leave")};return t({popperRef:i,hide:f}),(g,b)=>(_(),oe(o(un),et({ref_key:"tooltipRef",ref:r},g.$attrs,{trigger:g.trigger,"trigger-keys":g.triggerKeys,placement:g.placement,disabled:g.disabled,visible:g.visible,transition:g.transition,"popper-options":g.popperOptions,tabindex:g.tabindex,content:g.content,offset:g.offset,"show-after":g.showAfter,"hide-after":g.hideAfter,"auto-close":g.autoClose,"show-arrow":g.showArrow,"aria-label":g.title,effect:g.effect,enterable:g.enterable,"popper-class":o(c),"popper-style":o(u),teleported:g.teleported,"append-to":g.appendTo,persistent:g.persistent,"gpu-acceleration":o(d),"onUpdate:visible":o(a),onBeforeShow:m,onBeforeHide:v,onShow:h,onHide:p}),{content:U(()=>[g.title?(_(),V("div",{key:0,class:T(o(s).e("title")),role:"title"},pe(g.title),3)):J("v-if",!0),G(g.$slots,"default",{},()=>[st(pe(g.content),1)])]),default:U(()=>[g.$slots.reference?G(g.$slots,"reference",{key:0}):J("v-if",!0)]),_:3},16,["trigger","trigger-keys","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","append-to","persistent","gpu-acceleration","onUpdate:visible"]))}});var PE=fe(RE,[["__file","popover.vue"]]);const Yu=(e,t)=>{const n=t.arg||t.value,l=n==null?void 0:n.popperRef;l&&(l.triggerRef=e)};var OE={mounted(e,t){Yu(e,t)},updated(e,t){Yu(e,t)}};const LE="popover",Gf=Rh(OE,LE),BE=He(PE,{directive:Gf}),VE=de({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:Y(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:Y([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:Y(Function),default:e=>`${e}%`}}),DE=x({name:"ElProgress"}),AE=x({...DE,props:VE,setup(e){const t=e,n={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},l=ue("progress"),a=y(()=>{const C={width:`${t.percentage}%`,animationDuration:`${t.duration}s`},w=E(t.percentage);return w.includes("gradient")?C.background=w:C.backgroundColor=w,C}),s=y(()=>(t.strokeWidth/t.width*100).toFixed(1)),r=y(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(`${50-Number.parseFloat(s.value)/2}`,10):0),i=y(()=>{const C=r.value,w=t.type==="dashboard";return`
+ M 50 50
+ m 0 ${w?"":"-"}${C}
+ a ${C} ${C} 0 1 1 0 ${w?"-":""}${C*2}
+ a ${C} ${C} 0 1 1 0 ${w?"":"-"}${C*2}
+ `}),u=y(()=>2*Math.PI*r.value),c=y(()=>t.type==="dashboard"?.75:1),d=y(()=>`${-1*u.value*(1-c.value)/2}px`),f=y(()=>({strokeDasharray:`${u.value*c.value}px, ${u.value}px`,strokeDashoffset:d.value})),m=y(()=>({strokeDasharray:`${u.value*c.value*(t.percentage/100)}px, ${u.value}px`,strokeDashoffset:d.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),v=y(()=>{let C;return t.color?C=E(t.percentage):C=n[t.status]||n.default,C}),h=y(()=>t.status==="warning"?ms:t.type==="line"?t.status==="success"?Yr:ml:t.status==="success"?va:zn),p=y(()=>t.type==="line"?12+t.strokeWidth*.4:t.width*.111111+2),g=y(()=>t.format(t.percentage));function b(C){const w=100/C.length;return C.map((S,$)=>Ve(S)?{color:S,percentage:($+1)*w}:S).sort((S,$)=>S.percentage-$.percentage)}const E=C=>{var w;const{color:k}=t;if(Qe(k))return k(C);if(Ve(k))return k;{const S=b(k);for(const $ of S)if($.percentage>C)return $.color;return(w=S[S.length-1])==null?void 0:w.color}};return(C,w)=>(_(),V("div",{class:T([o(l).b(),o(l).m(C.type),o(l).is(C.status),{[o(l).m("without-text")]:!C.showText,[o(l).m("text-inside")]:C.textInside}]),role:"progressbar","aria-valuenow":C.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[C.type==="line"?(_(),V("div",{key:0,class:T(o(l).b("bar"))},[F("div",{class:T(o(l).be("bar","outer")),style:_e({height:`${C.strokeWidth}px`})},[F("div",{class:T([o(l).be("bar","inner"),{[o(l).bem("bar","inner","indeterminate")]:C.indeterminate},{[o(l).bem("bar","inner","striped")]:C.striped},{[o(l).bem("bar","inner","striped-flow")]:C.stripedFlow}]),style:_e(o(a))},[(C.showText||C.$slots.default)&&C.textInside?(_(),V("div",{key:0,class:T(o(l).be("bar","innerText"))},[G(C.$slots,"default",{percentage:C.percentage},()=>[F("span",null,pe(o(g)),1)])],2)):J("v-if",!0)],6)],6)],2)):(_(),V("div",{key:1,class:T(o(l).b("circle")),style:_e({height:`${C.width}px`,width:`${C.width}px`})},[(_(),V("svg",{viewBox:"0 0 100 100"},[F("path",{class:T(o(l).be("circle","track")),d:o(i),stroke:`var(${o(l).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":C.strokeLinecap,"stroke-width":o(s),fill:"none",style:_e(o(f))},null,14,["d","stroke","stroke-linecap","stroke-width"]),F("path",{class:T(o(l).be("circle","path")),d:o(i),stroke:o(v),fill:"none",opacity:C.percentage?1:0,"stroke-linecap":C.strokeLinecap,"stroke-width":o(s),style:_e(o(m))},null,14,["d","stroke","opacity","stroke-linecap","stroke-width"])]))],6)),(C.showText||C.$slots.default)&&!C.textInside?(_(),V("div",{key:2,class:T(o(l).e("text")),style:_e({fontSize:`${o(p)}px`})},[G(C.$slots,"default",{percentage:C.percentage},()=>[C.status?(_(),oe(o(Se),{key:1},{default:U(()=>[(_(),oe(Ge(o(h))))]),_:1})):(_(),V("span",{key:0},pe(o(g)),1))])],6)):J("v-if",!0)],10,["aria-valuenow"]))}});var FE=fe(AE,[["__file","progress.vue"]]);const Xf=He(FE),xE=de({modelValue:{type:Number,default:0},id:{type:String,default:void 0},lowThreshold:{type:Number,default:2},highThreshold:{type:Number,default:4},max:{type:Number,default:5},colors:{type:Y([Array,Object]),default:()=>Vt(["","",""])},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:Y([Array,Object]),default:()=>[ka,ka,ka]},voidIcon:{type:$t,default:()=>Am},disabledVoidIcon:{type:$t,default:()=>ka},disabled:Boolean,allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:Y(Array),default:()=>Vt(["Extremely bad","Disappointed","Fair","Satisfied","Surprise"])},scoreTemplate:{type:String,default:"{value}"},size:Jt,clearable:Boolean,...cn(["ariaLabel"])}),zE={[nt]:e=>Te(e),[De]:e=>Te(e)},HE=x({name:"ElRate"}),KE=x({...HE,props:xE,emits:zE,setup(e,{expose:t,emit:n}){const l=e;function a(L,z){const B=j=>yt(j),A=Object.keys(z).map(j=>+j).filter(j=>{const Q=z[j];return(B(Q)?Q.excluded:!1)?Lj-Q),ne=z[A[0]];return B(ne)&&ne.value||ne}const s=we(Jl,void 0),r=we(el,void 0),i=Gt(),u=ue("rate"),{inputId:c,isLabeledByFormItem:d}=Kn(l,{formItemContext:r}),f=I(l.modelValue),m=I(-1),v=I(!0),h=y(()=>[u.b(),u.m(i.value)]),p=y(()=>l.disabled||(s==null?void 0:s.disabled)),g=y(()=>u.cssVarBlock({"void-color":l.voidColor,"disabled-void-color":l.disabledVoidColor,"fill-color":w.value})),b=y(()=>{let L="";return l.showScore?L=l.scoreTemplate.replace(/\{\s*value\s*\}/,p.value?`${l.modelValue}`:`${f.value}`):l.showText&&(L=l.texts[Math.ceil(f.value)-1]),L}),E=y(()=>l.modelValue*100-Math.floor(l.modelValue)*100),C=y(()=>ke(l.colors)?{[l.lowThreshold]:l.colors[0],[l.highThreshold]:{value:l.colors[1],excluded:!0},[l.max]:l.colors[2]}:l.colors),w=y(()=>{const L=a(f.value,C.value);return yt(L)?"":L}),k=y(()=>{let L="";return p.value?L=`${E.value}%`:l.allowHalf&&(L="50%"),{color:w.value,width:L}}),S=y(()=>{let L=ke(l.icons)?[...l.icons]:{...l.icons};return L=$l(L),ke(L)?{[l.lowThreshold]:L[0],[l.highThreshold]:{value:L[1],excluded:!0},[l.max]:L[2]}:L}),$=y(()=>a(l.modelValue,S.value)),M=y(()=>p.value?Ve(l.disabledVoidIcon)?l.disabledVoidIcon:$l(l.disabledVoidIcon):Ve(l.voidIcon)?l.voidIcon:$l(l.voidIcon)),R=y(()=>a(f.value,S.value));function N(L){const z=p.value&&E.value>0&&L-1l.modelValue,B=l.allowHalf&&v.value&&L-.5<=f.value&&L>f.value;return z||B}function O(L){l.clearable&&L===l.modelValue&&(L=0),n(De,L),l.modelValue!==L&&n(nt,L)}function P(L){p.value||(l.allowHalf&&v.value?O(f.value):O(L))}function W(L){if(p.value)return;let z=f.value;const B=L.code;return B===Ce.up||B===Ce.right?(l.allowHalf?z+=.5:z+=1,L.stopPropagation(),L.preventDefault()):(B===Ce.left||B===Ce.down)&&(l.allowHalf?z-=.5:z-=1,L.stopPropagation(),L.preventDefault()),z=z<0?0:z,z=z>l.max?l.max:z,n(De,z),n(nt,z),z}function K(L,z){if(!p.value){if(l.allowHalf&&z){let B=z.target;Nn(B,u.e("item"))&&(B=B.querySelector(`.${u.e("icon")}`)),(B.clientWidth===0||Nn(B,u.e("decimal")))&&(B=B.parentNode),v.value=z.offsetX*2<=B.clientWidth,f.value=v.value?L-.5:L}else f.value=L;m.value=L}}function D(){p.value||(l.allowHalf&&(v.value=l.modelValue!==Math.floor(l.modelValue)),f.value=l.modelValue,m.value=-1)}return ie(()=>l.modelValue,L=>{f.value=L,v.value=l.modelValue!==Math.floor(l.modelValue)}),l.modelValue||n(De,0),t({setCurrentValue:K,resetCurrentValue:D}),(L,z)=>{var B;return _(),V("div",{id:o(c),class:T([o(h),o(u).is("disabled",o(p))]),role:"slider","aria-label":o(d)?void 0:L.ariaLabel||"rating","aria-labelledby":o(d)?(B=o(r))==null?void 0:B.labelId:void 0,"aria-valuenow":f.value,"aria-valuetext":o(b)||void 0,"aria-valuemin":"0","aria-valuemax":L.max,tabindex:"0",style:_e(o(g)),onKeydown:W},[(_(!0),V(Oe,null,ut(L.max,(A,ne)=>(_(),V("span",{key:ne,class:T(o(u).e("item")),onMousemove:j=>K(A,j),onMouseleave:D,onClick:j=>P(A)},[H(o(Se),{class:T([o(u).e("icon"),{hover:m.value===A},o(u).is("active",A<=f.value)])},{default:U(()=>[N(A)?J("v-if",!0):(_(),V(Oe,{key:0},[We((_(),oe(Ge(o(R)),null,null,512)),[[mt,A<=f.value]]),We((_(),oe(Ge(o(M)),null,null,512)),[[mt,!(A<=f.value)]])],64)),N(A)?(_(),V(Oe,{key:1},[(_(),oe(Ge(o(M)),{class:T([o(u).em("decimal","box")])},null,8,["class"])),H(o(Se),{style:_e(o(k)),class:T([o(u).e("icon"),o(u).e("decimal")])},{default:U(()=>[(_(),oe(Ge(o($))))]),_:1},8,["style","class"])],64)):J("v-if",!0)]),_:2},1032,["class"])],42,["onMousemove","onClick"]))),128)),L.showText||L.showScore?(_(),V("span",{key:0,class:T(o(u).e("text")),style:_e({color:L.textColor})},pe(o(b)),7)):J("v-if",!0)],46,["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax"])}}});var WE=fe(KE,[["__file","rate.vue"]]);const jE=He(WE),Dl={primary:"icon-primary",success:"icon-success",warning:"icon-warning",error:"icon-error",info:"icon-info"},qu={[Dl.primary]:Go,[Dl.success]:Xh,[Dl.warning]:ms,[Dl.error]:qr,[Dl.info]:Go},UE=de({title:{type:String,default:""},subTitle:{type:String,default:""},icon:{type:String,values:["primary","success","warning","info","error"],default:"info"}}),YE=x({name:"ElResult"}),qE=x({...YE,props:UE,setup(e){const t=e,n=ue("result"),l=y(()=>{const a=t.icon,s=a&&Dl[a]?Dl[a]:"icon-info",r=qu[s]||qu["icon-info"];return{class:s,component:r}});return(a,s)=>(_(),V("div",{class:T(o(n).b())},[F("div",{class:T(o(n).e("icon"))},[G(a.$slots,"icon",{},()=>[o(l).component?(_(),oe(Ge(o(l).component),{key:0,class:T(o(l).class)},null,8,["class"])):J("v-if",!0)])],2),a.title||a.$slots.title?(_(),V("div",{key:0,class:T(o(n).e("title"))},[G(a.$slots,"title",{},()=>[F("p",null,pe(a.title),1)])],2)):J("v-if",!0),a.subTitle||a.$slots["sub-title"]?(_(),V("div",{key:1,class:T(o(n).e("subtitle"))},[G(a.$slots,"sub-title",{},()=>[F("p",null,pe(a.subTitle),1)])],2)):J("v-if",!0),a.$slots.extra?(_(),V("div",{key:2,class:T(o(n).e("extra"))},[G(a.$slots,"extra")],2)):J("v-if",!0)],2))}});var GE=fe(qE,[["__file","result.vue"]]);const XE=He(GE),ZE=["start","center","end","space-around","space-between","space-evenly"],JE=["top","middle","bottom"],QE=de({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:ZE,default:"start"},align:{type:String,values:JE}}),e_=x({name:"ElRow"}),t_=x({...e_,props:QE,setup(e){const t=e,n=ue("row"),l=y(()=>t.gutter);rt(lf,{gutter:l});const a=y(()=>{const r={};return t.gutter&&(r.marginRight=r.marginLeft=`-${t.gutter/2}px`),r}),s=y(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(r,i)=>(_(),oe(Ge(r.tag),{class:T(o(s)),style:_e(o(a))},{default:U(()=>[G(r.$slots,"default")]),_:3},8,["class","style"]))}});var n_=fe(t_,[["__file","row.vue"]]);const l_=He(n_),o_=x({props:{item:{type:Object,required:!0},style:{type:Object},height:Number},setup(){return{ns:ue("select")}}});function a_(e,t,n,l,a,s){return _(),V("div",{class:T(e.ns.be("group","title")),style:_e({...e.style,lineHeight:`${e.height}px`})},pe(e.item.label),7)}var s_=fe(o_,[["render",a_],["__file","group-item.vue"]]);function r_(e,{emit:t}){return{hoverItem:()=>{e.disabled||t("hover",e.index)},selectOptionClick:()=>{e.disabled||t("select",e.item,e.index)}}}const Zf={label:"label",value:"value",disabled:"disabled",options:"options"};function $s(e){const t=y(()=>({...Zf,...e.props}));return{aliasProps:t,getLabel:r=>Yt(r,t.value.label),getValue:r=>Yt(r,t.value.value),getDisabled:r=>Yt(r,t.value.disabled),getOptions:r=>Yt(r,t.value.options)}}const i_=de({allowCreate:Boolean,autocomplete:{type:Y(String),default:"none"},automaticDropdown:Boolean,clearable:Boolean,clearIcon:{type:$t,default:ml},effect:{type:Y(String),default:"light"},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},defaultFirstOption:Boolean,disabled:Boolean,estimatedOptionHeight:{type:Number,default:void 0},filterable:Boolean,filterMethod:Function,height:{type:Number,default:274},itemHeight:{type:Number,default:34},id:String,loading:Boolean,loadingText:String,modelValue:{type:Y([Array,String,Number,Boolean,Object])},multiple:Boolean,multipleLimit:{type:Number,default:0},name:String,noDataText:String,noMatchText:String,remoteMethod:Function,reserveKeyword:{type:Boolean,default:!0},options:{type:Y(Array),required:!0},placeholder:{type:String},teleported:Wt.teleported,persistent:{type:Boolean,default:!0},popperClass:{type:String,default:""},popperOptions:{type:Y(Object),default:()=>({})},remote:Boolean,size:Jt,props:{type:Y(Object),default:()=>Zf},valueKey:{type:String,default:"value"},scrollbarAlwaysOn:Boolean,validateEvent:{type:Boolean,default:!0},offset:{type:Number,default:12},showArrow:{type:Boolean,default:!0},placement:{type:Y(String),values:Xl,default:"bottom-start"},fallbackPlacements:{type:Y(Array),default:["bottom-start","top-start","right","left"]},tagType:{...fl.type,default:"info"},tagEffect:{...fl.effect,default:"light"},tabindex:{type:[String,Number],default:0},appendTo:Wt.appendTo,fitInputWidth:{type:[Boolean,Number],default:!0,validator(e){return _t(e)||Te(e)}},suffixIcon:{type:$t,default:nl},...Zl,...cn(["ariaLabel"])}),u_=de({data:Array,disabled:Boolean,hovering:Boolean,item:{type:Y(Object),required:!0},index:Number,style:Object,selected:Boolean,created:Boolean}),c_={[De]:e=>!0,[nt]:e=>!0,"remove-tag":e=>!0,"visible-change":e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},d_={hover:e=>Te(e),select:(e,t)=>!0},Ti=Symbol("ElSelectV2Injection"),f_=x({props:u_,emits:d_,setup(e,{emit:t}){const n=we(Ti),l=ue("select"),{hoverItem:a,selectOptionClick:s}=r_(e,{emit:t}),{getLabel:r}=$s(n.props);return{ns:l,hoverItem:a,selectOptionClick:s,getLabel:r}}});function v_(e,t,n,l,a,s){return _(),V("li",{"aria-selected":e.selected,style:_e(e.style),class:T([e.ns.be("dropdown","item"),e.ns.is("selected",e.selected),e.ns.is("disabled",e.disabled),e.ns.is("created",e.created),e.ns.is("hovering",e.hovering)]),onMousemove:e.hoverItem,onClick:Le(e.selectOptionClick,["stop"])},[G(e.$slots,"default",{item:e.item,index:e.index,disabled:e.disabled},()=>[F("span",null,pe(e.getLabel(e.item)),1)])],46,["aria-selected","onMousemove","onClick"])}var p_=fe(f_,[["render",v_],["__file","option-item.vue"]]);const Jf=()=>{const t=lt().proxy.$props;return y(()=>{const n=(l,a,s)=>({});return t.perfMode?lh(n):oh(n)})},gr=50,es="itemRendered",ts="scroll",po="forward",ns="backward",xn="auto",Ns="smart",ta="start",Jn="center",na="end",To="horizontal",$i="vertical",h_="ltr",go="rtl",la="negative",Ni="positive-ascending",Ii="positive-descending",m_={[To]:"left",[$i]:"top"},g_=20,b_={[To]:"deltaX",[$i]:"deltaY"},y_=({atEndEdge:e,atStartEdge:t,layout:n},l)=>{let a,s=0;const r=u=>u<0&&t.value||u>0&&e.value;return{hasReachedEdge:r,onWheel:u=>{Yl(a);const c=u[b_[n.value]];r(s)&&r(s+c)||(s+=c,Xr()||u.preventDefault(),a=Ml(()=>{l(s),s=0}))}}},br=Un({type:Y([Number,Function]),required:!0}),yr=Un({type:Number}),Cr=Un({type:Number,default:2}),C_=Un({type:String,values:["ltr","rtl"],default:"ltr"}),wr=Un({type:Number,default:0}),ls=Un({type:Number,required:!0}),Qf=Un({type:String,values:["horizontal","vertical"],default:$i}),ev=de({className:{type:String,default:""},containerElement:{type:Y([String,Object]),default:"div"},data:{type:Y(Array),default:()=>Vt([])},direction:C_,height:{type:[String,Number],required:!0},innerElement:{type:[String,Object],default:"div"},style:{type:Y([Object,String,Array])},useIsScrolling:Boolean,width:{type:[Number,String],required:!1},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:Boolean}),tv=de({cache:Cr,estimatedItemSize:yr,layout:Qf,initScrollOffset:wr,total:ls,itemSize:br,...ev}),kr={type:Number,default:6},nv={type:Number,default:0},lv={type:Number,default:2},Kl=de({columnCache:Cr,columnWidth:br,estimatedColumnWidth:yr,estimatedRowHeight:yr,initScrollLeft:wr,initScrollTop:wr,itemKey:{type:Y(Function),default:({columnIndex:e,rowIndex:t})=>`${t}:${e}`},rowCache:Cr,rowHeight:br,totalColumn:ls,totalRow:ls,hScrollbarSize:kr,vScrollbarSize:kr,scrollbarStartGap:nv,scrollbarEndGap:lv,role:String,...ev}),ov=de({alwaysOn:Boolean,class:String,layout:Qf,total:ls,ratio:{type:Number,required:!0},clientSize:{type:Number,required:!0},scrollFrom:{type:Number,required:!0},scrollbarSize:kr,startGap:nv,endGap:lv,visible:Boolean}),Fl=(e,t)=>ee===h_||e===go||e===To,Gu=e=>e===go;let ao=null;function os(e=!1){if(ao===null||e){const t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";const l=document.createElement("div"),a=l.style;return a.width="100px",a.height="100px",t.appendChild(l),document.body.appendChild(t),t.scrollLeft>0?ao=Ii:(t.scrollLeft=1,t.scrollLeft===0?ao=la:ao=Ni),document.body.removeChild(t),ao}return ao}function w_({move:e,size:t,bar:n},l){const a={},s=`translate${n.axis}(${e}px)`;return a[n.size]=t,a.transform=s,l==="horizontal"?a.height="100%":a.width="100%",a}const Sr=x({name:"ElVirtualScrollBar",props:ov,emits:["scroll","start-move","stop-move"],setup(e,{emit:t}){const n=y(()=>e.startGap+e.endGap),l=ue("virtual-scrollbar"),a=ue("scrollbar"),s=I(),r=I();let i=null,u=null;const c=kt({isDragging:!1,traveled:0}),d=y(()=>md[e.layout]),f=y(()=>e.clientSize-o(n)),m=y(()=>({position:"absolute",width:`${To===e.layout?f.value:e.scrollbarSize}px`,height:`${To===e.layout?e.scrollbarSize:f.value}px`,[m_[e.layout]]:"2px",right:"2px",bottom:"2px",borderRadius:"4px"})),v=y(()=>{const S=e.ratio;if(S>=100)return Number.POSITIVE_INFINITY;if(S>=50)return S*f.value/100;const $=f.value/3;return Math.floor(Math.min(Math.max(S*f.value,g_),$))}),h=y(()=>{if(!Number.isFinite(v.value))return{display:"none"};const S=`${v.value}px`;return w_({bar:d.value,size:S,move:c.traveled},e.layout)}),p=y(()=>Math.ceil(e.clientSize-v.value-o(n))),g=()=>{window.addEventListener("mousemove",w),window.addEventListener("mouseup",C);const S=o(r);S&&(u=document.onselectstart,document.onselectstart=()=>!1,S.addEventListener("touchmove",w,{passive:!0}),S.addEventListener("touchend",C))},b=()=>{window.removeEventListener("mousemove",w),window.removeEventListener("mouseup",C),document.onselectstart=u,u=null;const S=o(r);S&&(S.removeEventListener("touchmove",w),S.removeEventListener("touchend",C))},E=S=>{S.stopImmediatePropagation(),!(S.ctrlKey||[1,2].includes(S.button))&&(c.isDragging=!0,c[d.value.axis]=S.currentTarget[d.value.offset]-(S[d.value.client]-S.currentTarget.getBoundingClientRect()[d.value.direction]),t("start-move"),g())},C=()=>{c.isDragging=!1,c[d.value.axis]=0,t("stop-move"),b()},w=S=>{const{isDragging:$}=c;if(!$||!r.value||!s.value)return;const M=c[d.value.axis];if(!M)return;Yl(i);const R=(s.value.getBoundingClientRect()[d.value.direction]-S[d.value.client])*-1,N=r.value[d.value.offset]-M,O=R-N;i=Ml(()=>{c.traveled=Math.max(0,Math.min(O,p.value)),t("scroll",O,p.value)})},k=S=>{const $=Math.abs(S.target.getBoundingClientRect()[d.value.direction]-S[d.value.client]),M=r.value[d.value.offset]/2,R=$-M;c.traveled=Math.max(0,Math.min(R,p.value)),t("scroll",R,p.value)};return ie(()=>e.scrollFrom,S=>{c.isDragging||(c.traveled=Math.ceil(S*p.value))}),Nt(()=>{b()}),()=>Re("div",{role:"presentation",ref:s,class:[l.b(),e.class,(e.alwaysOn||c.isDragging)&&"always-on"],style:m.value,onMousedown:Le(k,["stop","prevent"]),onTouchstartPrevent:E},Re("div",{ref:r,class:a.e("thumb"),style:h.value,onMousedown:E},[]))}}),av=({name:e,getOffset:t,getItemSize:n,getItemOffset:l,getEstimatedTotalSize:a,getStartIndexForOffset:s,getStopIndexForStartIndex:r,initCache:i,clearCache:u,validateProps:c})=>x({name:e??"ElVirtualList",props:tv,emits:[es,ts],setup(d,{emit:f,expose:m}){c(d);const v=lt(),h=ue("vl"),p=I(i(d,v)),g=Jf(),b=I(),E=I(),C=I(),w=I({isScrolling:!1,scrollDir:"forward",scrollOffset:Te(d.initScrollOffset)?d.initScrollOffset:0,updateRequested:!1,isScrollbarDragging:!1,scrollbarAlwaysOn:d.scrollbarAlwaysOn}),k=y(()=>{const{total:Z,cache:ee}=d,{isScrolling:ae,scrollDir:re,scrollOffset:le}=o(w);if(Z===0)return[0,0,0,0];const se=s(d,le,o(p)),ge=r(d,se,le,o(p)),Be=!ae||re===ns?Math.max(1,ee):1,te=!ae||re===po?Math.max(1,ee):1;return[Math.max(0,se-Be),Math.max(0,Math.min(Z-1,ge+te)),se,ge]}),S=y(()=>a(d,o(p))),$=y(()=>oa(d.layout)),M=y(()=>[{position:"relative",[`overflow-${$.value?"x":"y"}`]:"scroll",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:d.direction,height:Te(d.height)?`${d.height}px`:d.height,width:Te(d.width)?`${d.width}px`:d.width},d.style]),R=y(()=>{const Z=o(S),ee=o($);return{height:ee?"100%":`${Z}px`,pointerEvents:o(w).isScrolling?"none":void 0,width:ee?`${Z}px`:"100%"}}),N=y(()=>$.value?d.width:d.height),{onWheel:O}=y_({atStartEdge:y(()=>w.value.scrollOffset<=0),atEndEdge:y(()=>w.value.scrollOffset>=S.value),layout:y(()=>d.layout)},Z=>{var ee,ae;(ae=(ee=C.value).onMouseUp)==null||ae.call(ee),z(Math.min(w.value.scrollOffset+Z,S.value-N.value))});xt(b,"wheel",O,{passive:!1});const P=()=>{const{total:Z}=d;if(Z>0){const[le,se,ge,Be]=o(k);f(es,le,se,ge,Be)}const{scrollDir:ee,scrollOffset:ae,updateRequested:re}=o(w);f(ts,ee,ae,re)},W=Z=>{const{clientHeight:ee,scrollHeight:ae,scrollTop:re}=Z.currentTarget,le=o(w);if(le.scrollOffset===re)return;const se=Math.max(0,Math.min(re,ae-ee));w.value={...le,isScrolling:!0,scrollDir:Fl(le.scrollOffset,se),scrollOffset:se,updateRequested:!1},Ee(ne)},K=Z=>{const{clientWidth:ee,scrollLeft:ae,scrollWidth:re}=Z.currentTarget,le=o(w);if(le.scrollOffset===ae)return;const{direction:se}=d;let ge=ae;if(se===go)switch(os()){case la:{ge=-ae;break}case Ii:{ge=re-ee-ae;break}}ge=Math.max(0,Math.min(ge,re-ee)),w.value={...le,isScrolling:!0,scrollDir:Fl(le.scrollOffset,ge),scrollOffset:ge,updateRequested:!1},Ee(ne)},D=Z=>{o($)?K(Z):W(Z),P()},L=(Z,ee)=>{const ae=(S.value-N.value)/ee*Z;z(Math.min(S.value-N.value,ae))},z=Z=>{Z=Math.max(Z,0),Z!==o(w).scrollOffset&&(w.value={...o(w),scrollOffset:Z,scrollDir:Fl(o(w).scrollOffset,Z),updateRequested:!0},Ee(ne))},B=(Z,ee=xn)=>{const{scrollOffset:ae}=o(w);Z=Math.max(0,Math.min(Z,d.total-1)),z(t(d,Z,ee,ae,o(p)))},A=Z=>{const{direction:ee,itemSize:ae,layout:re}=d,le=g.value(u&&ae,u&&re,u&&ee);let se;if(rn(le,String(Z)))se=le[Z];else{const ge=l(d,Z,o(p)),Be=n(d,Z,o(p)),te=o($),ce=ee===go,Ie=te?ge:0;le[Z]=se={position:"absolute",left:ce?void 0:`${Ie}px`,right:ce?`${Ie}px`:void 0,top:te?0:`${ge}px`,height:te?"100%":`${Be}px`,width:te?`${Be}px`:"100%"}}return se},ne=()=>{w.value.isScrolling=!1,Ee(()=>{g.value(-1,null,null)})},j=()=>{const Z=b.value;Z&&(Z.scrollTop=0)};Xe(()=>{if(!bt)return;const{initScrollOffset:Z}=d,ee=o(b);Te(Z)&&ee&&(o($)?ee.scrollLeft=Z:ee.scrollTop=Z),P()}),hl(()=>{const{direction:Z,layout:ee}=d,{scrollOffset:ae,updateRequested:re}=o(w),le=o(b);if(re&&le)if(ee===To)if(Z===go)switch(os()){case la:{le.scrollLeft=-ae;break}case Ni:{le.scrollLeft=ae;break}default:{const{clientWidth:se,scrollWidth:ge}=le;le.scrollLeft=ge-se-ae;break}}else le.scrollLeft=ae;else le.scrollTop=ae}),Fr(()=>{o(b).scrollTop=o(w).scrollOffset});const Q={ns:h,clientSize:N,estimatedTotalSize:S,windowStyle:M,windowRef:b,innerRef:E,innerStyle:R,itemsToRender:k,scrollbarRef:C,states:w,getItemStyle:A,onScroll:D,onScrollbarScroll:L,onWheel:O,scrollTo:z,scrollToItem:B,resetScrollTop:j};return m({windowRef:b,innerRef:E,getItemStyleCache:g,scrollTo:z,scrollToItem:B,resetScrollTop:j,states:w}),Q},render(d){var f;const{$slots:m,className:v,clientSize:h,containerElement:p,data:g,getItemStyle:b,innerElement:E,itemsToRender:C,innerStyle:w,layout:k,total:S,onScroll:$,onScrollbarScroll:M,states:R,useIsScrolling:N,windowStyle:O,ns:P}=d,[W,K]=C,D=Ge(p),L=Ge(E),z=[];if(S>0)for(let j=W;j<=K;j++)z.push(Re(Oe,{key:j},(f=m.default)==null?void 0:f.call(m,{data:g,index:j,isScrolling:N?R.isScrolling:void 0,style:b(j)})));const B=[Re(L,{style:w,ref:"innerRef"},Ve(L)?z:{default:()=>z})],A=Re(Sr,{ref:"scrollbarRef",clientSize:h,layout:k,onScroll:M,ratio:h*100/this.estimatedTotalSize,scrollFrom:R.scrollOffset/(this.estimatedTotalSize-h),total:S,alwaysOn:R.scrollbarAlwaysOn}),ne=Re(D,{class:[P.e("window"),v],style:O,onScroll:$,ref:"windowRef",key:0},Ve(D)?[B]:{default:()=>[B]});return Re("div",{key:0,class:[P.e("wrapper"),R.scrollbarAlwaysOn?"always-on":""]},[ne,A])}}),sv=av({name:"ElFixedSizeList",getItemOffset:({itemSize:e},t)=>t*e,getItemSize:({itemSize:e})=>e,getEstimatedTotalSize:({total:e,itemSize:t})=>t*e,getOffset:({height:e,total:t,itemSize:n,layout:l,width:a},s,r,i)=>{const u=oa(l)?a:e,c=Math.max(0,t*n-u),d=Math.min(c,s*n),f=Math.max(0,(s+1)*n-u);switch(r===Ns&&(i>=f-u&&i<=d+u?r=xn:r=Jn),r){case ta:return d;case na:return f;case Jn:{const m=Math.round(f+(d-f)/2);return mc+Math.floor(u/2)?c:m}case xn:default:return i>=f&&i<=d?i:iMath.max(0,Math.min(e-1,Math.floor(n/t))),getStopIndexForStartIndex:({height:e,total:t,itemSize:n,layout:l,width:a},s,r)=>{const i=s*n,u=oa(l)?a:e,c=Math.ceil((u+r-i)/n);return Math.max(0,Math.min(t-1,s+c-1))},initCache(){},clearCache:!0,validateProps(){}}),ho=(e,t,n)=>{const{itemSize:l}=e,{items:a,lastVisitedIndex:s}=n;if(t>s){let r=0;if(s>=0){const i=a[s];r=i.offset+i.size}for(let i=s+1;i<=t;i++){const u=l(i);a[i]={offset:r,size:u},r+=u}n.lastVisitedIndex=t}return a[t]},k_=(e,t,n)=>{const{items:l,lastVisitedIndex:a}=t;return(a>0?l[a].offset:0)>=n?rv(e,t,0,a,n):S_(e,t,Math.max(0,a),n)},rv=(e,t,n,l,a)=>{for(;n<=l;){const s=n+Math.floor((l-n)/2),r=ho(e,s,t).offset;if(r===a)return s;ra&&(l=s-1)}return Math.max(0,n-1)},S_=(e,t,n,l)=>{const{total:a}=e;let s=1;for(;n{let a=0;if(l>=e&&(l=e-1),l>=0){const i=t[l];a=i.offset+i.size}const r=(e-l-1)*n;return a+r},E_=av({name:"ElDynamicSizeList",getItemOffset:(e,t,n)=>ho(e,t,n).offset,getItemSize:(e,t,{items:n})=>n[t].size,getEstimatedTotalSize:Xu,getOffset:(e,t,n,l,a)=>{const{height:s,layout:r,width:i}=e,u=oa(r)?i:s,c=ho(e,t,a),d=Xu(e,a),f=Math.max(0,Math.min(d-u,c.offset)),m=Math.max(0,c.offset-u+c.size);switch(n===Ns&&(l>=m-u&&l<=f+u?n=xn:n=Jn),n){case ta:return f;case na:return m;case Jn:return Math.round(m+(f-m)/2);case xn:default:return l>=m&&l<=f?l:lk_(e,n,t),getStopIndexForStartIndex:(e,t,n,l)=>{const{height:a,total:s,layout:r,width:i}=e,u=oa(r)?i:a,c=ho(e,t,l),d=n+u;let f=c.offset+c.size,m=t;for(;m{var s,r;n.lastVisitedIndex=Math.min(n.lastVisitedIndex,l-1),(s=t.exposed)==null||s.getItemStyleCache(-1),a&&((r=t.proxy)==null||r.$forceUpdate())},n},clearCache:!1,validateProps:({itemSize:e})=>{}}),__={loading:Boolean,data:{type:Array,required:!0},hoveringIndex:Number,width:Number};var T_=x({name:"ElSelectDropdown",props:__,setup(e,{slots:t,expose:n}){const l=we(Ti),a=ue("select"),{getLabel:s,getValue:r,getDisabled:i}=$s(l.props),u=I([]),c=I(),d=y(()=>e.data.length);ie(()=>d.value,()=>{var O,P;(P=(O=l.tooltipRef.value)==null?void 0:O.updatePopper)==null||P.call(O)});const f=y(()=>vt(l.props.estimatedOptionHeight)),m=y(()=>f.value?{itemSize:l.props.itemHeight}:{estimatedSize:l.props.estimatedOptionHeight,itemSize:O=>u.value[O]}),v=(O=[],P)=>{const{props:{valueKey:W}}=l;return yt(P)?O&&O.some(K=>Uo(Yt(K,W))===Yt(P,W)):O.includes(P)},h=(O,P)=>{if(yt(P)){const{valueKey:W}=l.props;return Yt(O,W)===Yt(P,W)}else return O===P},p=(O,P)=>l.props.multiple?v(O,r(P)):h(O,r(P)),g=(O,P)=>{const{disabled:W,multiple:K,multipleLimit:D}=l.props;return W||!P&&(K?D>0&&O.length>=D:!1)},b=O=>e.hoveringIndex===O;n({listRef:c,isSized:f,isItemDisabled:g,isItemHovering:b,isItemSelected:p,scrollToItem:O=>{const P=c.value;P&&P.scrollToItem(O)},resetScrollTop:()=>{const O=c.value;O&&O.resetScrollTop()}});const k=O=>{const{index:P,data:W,style:K}=O,D=o(f),{itemSize:L,estimatedSize:z}=o(m),{modelValue:B}=l.props,{onSelect:A,onHover:ne}=l,j=W[P];if(j.type==="Group")return H(s_,{item:j,style:K,height:D?L:z},null);const Q=p(B,j),Z=g(B,Q),ee=b(P);return H(p_,et(O,{selected:Q,disabled:i(j)||Z,created:!!j.created,hovering:ee,item:j,onSelect:A,onHover:ne}),{default:ae=>{var re;return((re=t.default)==null?void 0:re.call(t,ae))||H("span",null,[s(j)])}})},{onKeyboardNavigate:S,onKeyboardSelect:$}=l,M=()=>{S("forward")},R=()=>{S("backward")},N=O=>{const{code:P}=O,{tab:W,esc:K,down:D,up:L,enter:z,numpadEnter:B}=Ce;switch([K,D,L,z,B].includes(P)&&(O.preventDefault(),O.stopPropagation()),P){case W:case K:break;case D:M();break;case L:R();break;case z:case B:$();break}};return()=>{var O,P,W,K;const{data:D,width:L}=e,{height:z,multiple:B,scrollbarAlwaysOn:A}=l.props,ne=y(()=>nr?!0:A),j=o(f)?sv:E_;return H("div",{class:[a.b("dropdown"),a.is("multiple",B)],style:{width:`${L}px`}},[(O=t.header)==null?void 0:O.call(t),((P=t.loading)==null?void 0:P.call(t))||((W=t.empty)==null?void 0:W.call(t))||H(j,et({ref:c},o(m),{className:a.be("dropdown","list"),scrollbarAlwaysOn:ne.value,data:D,height:z,width:L,total:D.length,onKeydown:N}),{default:Q=>H(k,Q,null)}),(K=t.footer)==null?void 0:K.call(t)])}}});function $_(e,t){const{aliasProps:n,getLabel:l,getValue:a}=$s(e),s=I(0),r=I(),i=y(()=>e.allowCreate&&e.filterable);function u(v){const h=p=>l(p)===v;return e.options&&e.options.some(h)||t.createdOptions.some(h)}function c(v){i.value&&(e.multiple&&v.created?s.value++:r.value=v)}function d(v){if(i.value)if(v&&v.length>0){if(u(v))return;const h={[n.value.value]:v,[n.value.label]:v,created:!0,[n.value.disabled]:!1};t.createdOptions.length>=s.value?t.createdOptions[s.value]=h:t.createdOptions.push(h)}else if(e.multiple)t.createdOptions.length=s.value;else{const h=r.value;t.createdOptions.length=0,h&&h.created&&t.createdOptions.push(h)}}function f(v){if(!i.value||!v||!v.created||v.created&&e.reserveKeyword&&t.inputValue===l(v))return;const h=t.createdOptions.findIndex(p=>a(p)===a(v));~h&&(t.createdOptions.splice(h,1),s.value--)}function m(){i.value&&(t.createdOptions.length=0,s.value=0)}return{createNewOption:d,removeNewOption:f,selectNewOption:c,clearAllNewOption:m}}const N_=(e,t)=>{const{t:n}=pt(),l=ue("select"),a=ue("input"),{form:s,formItem:r}=dn(),{inputId:i}=Kn(e,{formItemContext:r}),{aliasProps:u,getLabel:c,getValue:d,getDisabled:f,getOptions:m}=$s(e),{valueOnClear:v,isEmptyValue:h}=da(e),p=kt({inputValue:"",cachedOptions:[],createdOptions:[],hoveringIndex:-1,inputHovering:!1,selectionWidth:0,collapseItemWidth:0,previousQuery:null,previousValue:void 0,selectedLabel:"",menuVisibleOnFocus:!1,isBeforeHide:!1}),g=I(-1),b=I(),E=I(),C=I(),w=I(),k=I(),S=I(),$=I(),M=I(),R=I(),N=I(),{isComposing:O,handleCompositionStart:P,handleCompositionEnd:W,handleCompositionUpdate:K}=ha({afterComposition:he=>vn(he)}),D=y(()=>e.disabled||!!(s!=null&&s.disabled)),{wrapperRef:L,isFocused:z,handleBlur:B}=Ll(k,{disabled:D,afterFocus(){e.automaticDropdown&&!Q.value&&(Q.value=!0,p.menuVisibleOnFocus=!0)},beforeBlur(he){var Fe,dt;return((Fe=C.value)==null?void 0:Fe.isFocusInsideContent(he))||((dt=w.value)==null?void 0:dt.isFocusInsideContent(he))},afterBlur(){var he;Q.value=!1,p.menuVisibleOnFocus=!1,e.validateEvent&&((he=r==null?void 0:r.validate)==null||he.call(r,"blur").catch(Fe=>void 0))}}),A=y(()=>Ie("")),ne=y(()=>e.loading?!1:e.options.length>0||p.createdOptions.length>0),j=I([]),Q=I(!1),Z=y(()=>{var he;return(he=s==null?void 0:s.statusIcon)!=null?he:!1}),ee=y(()=>{const he=j.value.length*e.itemHeight;return he>e.height?e.height:he}),ae=y(()=>e.multiple?ke(e.modelValue)&&e.modelValue.length>0:!h(e.modelValue)),re=y(()=>e.clearable&&!D.value&&p.inputHovering&&ae.value),le=y(()=>e.remote&&e.filterable?"":e.suffixIcon),se=y(()=>le.value&&l.is("reverse",Q.value)),ge=y(()=>(r==null?void 0:r.validateState)||""),Be=y(()=>{if(ge.value)return gs[ge.value]}),te=y(()=>e.remote?300:0),ce=y(()=>e.loading?e.loadingText||n("el.select.loading"):e.remote&&!p.inputValue&&!ne.value?!1:e.filterable&&p.inputValue&&ne.value&&j.value.length===0?e.noMatchText||n("el.select.noMatch"):ne.value?null:e.noDataText||n("el.select.noData")),Ie=he=>{const Fe=new RegExp(Si(he),"i"),{filterMethod:dt,remoteMethod:Ct}=Uo(e),pn=e.filterable&&Qe(dt),ol=e.filterable&&e.remote&&Qe(Ct),Vo=Xn=>pn||ol?!0:he?Fe.test(c(Xn)||""):!0;return e.loading?[]:[...p.createdOptions,...e.options].reduce((Xn,to)=>{const Vs=m(to);if(ke(Vs)){const Ca=Vs.filter(Vo);Ca.length>0&&Xn.push({label:c(to),type:"Group"},...Ca)}else(e.remote||Vo(to))&&Xn.push(to);return Xn},[])},Ae=()=>{j.value=Ie(p.inputValue)},xe=y(()=>{const he=new Map;return A.value.forEach((Fe,dt)=>{he.set(en(d(Fe)),{option:Fe,index:dt})}),he}),Ye=y(()=>{const he=new Map;return j.value.forEach((Fe,dt)=>{he.set(en(d(Fe)),{option:Fe,index:dt})}),he}),$e=y(()=>j.value.every(he=>f(he))),Me=Gt(),Pe=y(()=>Me.value==="small"?"small":"default"),Ze=()=>{var he;if(Te(e.fitInputWidth)){g.value=e.fitInputWidth;return}const Fe=((he=b.value)==null?void 0:he.offsetWidth)||200;!e.fitInputWidth&&ne.value?Ee(()=>{g.value=Math.max(Fe,ot())}):g.value=Fe},ot=()=>{var he,Fe;const Ct=document.createElement("canvas").getContext("2d"),pn=l.be("dropdown","item"),Vo=(((Fe=(he=M.value)==null?void 0:he.listRef)==null?void 0:Fe.innerRef)||document).querySelector(`.${pn}`);if(Vo===null||Ct===null)return 0;const Xn=getComputedStyle(Vo),to=Number.parseFloat(Xn.paddingLeft)+Number.parseFloat(Xn.paddingRight);return Ct.font=`bold ${Xn.font.replace(new RegExp(`\\b${Xn.fontWeight}\\b`),"")}`,j.value.reduce((Ca,Sp)=>{const Ep=Ct.measureText(c(Sp));return Math.max(Ep.width,Ca)},0)+to},at=()=>{if(!E.value)return 0;const he=window.getComputedStyle(E.value);return Number.parseFloat(he.gap||"6px")},ct=y(()=>{const he=at();return{maxWidth:`${N.value&&e.maxCollapseTags===1?p.selectionWidth-p.collapseItemWidth-he:p.selectionWidth}px`}}),ye=y(()=>({maxWidth:`${p.selectionWidth}px`})),Ue=y(()=>ke(e.modelValue)?e.modelValue.length===0&&!p.inputValue:e.filterable?!p.inputValue:!0),It=y(()=>{var he;const Fe=(he=e.placeholder)!=null?he:n("el.select.placeholder");return e.multiple||!ae.value?Fe:p.selectedLabel}),Ot=y(()=>{var he,Fe;return(Fe=(he=C.value)==null?void 0:he.popperRef)==null?void 0:Fe.contentRef}),Rt=y(()=>{if(e.multiple){const he=e.modelValue.length;if(e.modelValue.length>0&&Ye.value.has(e.modelValue[he-1])){const{index:Fe}=Ye.value.get(e.modelValue[he-1]);return Fe}}else if(!h(e.modelValue)&&Ye.value.has(e.modelValue)){const{index:he}=Ye.value.get(e.modelValue);return he}return-1}),Mt=y({get(){return Q.value&&ce.value!==!1},set(he){Q.value=he}}),St=y(()=>e.multiple?e.collapseTags?p.cachedOptions.slice(0,e.maxCollapseTags):p.cachedOptions:[]),je=y(()=>e.multiple?e.collapseTags?p.cachedOptions.slice(e.maxCollapseTags):[]:[]),{createNewOption:tt,removeNewOption:it,selectNewOption:X,clearAllNewOption:ve}=$_(e,p),q=()=>{D.value||(p.menuVisibleOnFocus?p.menuVisibleOnFocus=!1:Q.value=!Q.value)},be=()=>{p.inputValue.length>0&&!Q.value&&(Q.value=!0),tt(p.inputValue),Ee(()=>{ft(p.inputValue)})},qe=Ln(be,te.value),ft=he=>{p.previousQuery===he||O.value||(p.previousQuery=he,e.filterable&&Qe(e.filterMethod)?e.filterMethod(he):e.filterable&&e.remote&&Qe(e.remoteMethod)&&e.remoteMethod(he),e.defaultFirstOption&&(e.filterable||e.remote)&&j.value.length?Ee(Pt):Ee(Qt))},Pt=()=>{const he=j.value.filter(Ct=>!Ct.disabled&&Ct.type!=="Group"),Fe=he.find(Ct=>Ct.created),dt=he[0];p.hoveringIndex=ll(j.value,Fe||dt)},Kt=he=>{tn(e.modelValue,he)||t(nt,he)},Ut=he=>{t(De,he),Kt(he),p.previousValue=e.multiple?String(he):he,Ee(()=>{if(e.multiple&&ke(e.modelValue)){const Fe=p.cachedOptions.slice(),dt=e.modelValue.map(Ct=>wl(Ct,Fe));tn(p.cachedOptions,dt)||(p.cachedOptions=dt)}else eo(!0)})},ll=(he=[],Fe)=>{if(!yt(Fe))return he.indexOf(Fe);const dt=e.valueKey;let Ct=-1;return he.some((pn,ol)=>Yt(pn,dt)===Yt(Fe,dt)?(Ct=ol,!0):!1),Ct},en=he=>yt(he)?Yt(he,e.valueKey):he,Bn=()=>{Ze()},Ne=()=>{p.selectionWidth=Number.parseFloat(window.getComputedStyle(E.value).width)},gt=()=>{p.collapseItemWidth=N.value.getBoundingClientRect().width},Je=()=>{var he,Fe;(Fe=(he=C.value)==null?void 0:he.updatePopper)==null||Fe.call(he)},wn=()=>{var he,Fe;(Fe=(he=w.value)==null?void 0:he.updatePopper)==null||Fe.call(he)},qn=he=>{if(e.multiple){let Fe=e.modelValue.slice();const dt=ll(Fe,d(he));dt>-1?(Fe=[...Fe.slice(0,dt),...Fe.slice(dt+1)],p.cachedOptions.splice(dt,1),it(he)):(e.multipleLimit<=0||Fe.length