import{a as Ze}from"./element-plus-BaMaLFJp.js";import{r as k,aR as et,o as _,V as tt,x as u,y as n,z as e,L as w,K as g,al as qe,aY as ze,aX as Ee,aq as U,aZ as st,C as M,O as C,c as fe,P as b,I as ge,a5 as Oe,q as Je,an as se,Q as xe,ac as ve,R as de,u as le,J as lt,Y as Re,B as Pe}from"./vue-vendor-DfnFpxGJ.js";import{s as h}from"./toast-BvwA7Mwb.js";import{a as V,_ as ot}from"./index-D9ma8Jeq.js";import{C as We}from"./CustomDropdown-DWXoBE8S.js";import"./vendor-BDiMbLwQ.js";const Ge=k(!1),Ne=k({title:"",message:"",confirmText:"继续",cancelText:"取消"}),ce=k(null);function Ye(){return{showConfirmModal:Ge,confirmOptions:Ne,showConfirm:(q,c,y="继续",G="取消")=>new Promise(K=>{Ne.value={title:q,message:c,confirmText:y,cancelText:G},ce.value=K,Ge.value=!0}),handleConfirm:()=>{Ge.value=!1,ce.value&&(ce.value(!0),ce.value=null)},handleCancel:()=>{Ge.value=!1,ce.value&&(ce.value(!1),ce.value=null)}}}const Qe=et("accounts",()=>{const F=k([]),J=k([]),m=k([]),q=k([]),c=k(!1),y=k(null),G=k(""),K=k("asc"),T=async()=>{c.value=!0,y.value=null;try{const f=await V.get("/admin/claude-accounts");if(f.success)F.value=f.data||[];else throw new Error(f.message||"获取Claude账户失败")}catch(f){throw y.value=f.message,f}finally{c.value=!1}},S=async()=>{c.value=!0,y.value=null;try{const f=await V.get("/admin/claude-console-accounts");if(f.success)J.value=f.data||[];else throw new Error(f.message||"获取Claude Console账户失败")}catch(f){throw y.value=f.message,f}finally{c.value=!1}},v=async()=>{c.value=!0,y.value=null;try{const f=await V.get("/admin/bedrock-accounts");if(f.success)m.value=f.data||[];else throw new Error(f.message||"获取Bedrock账户失败")}catch(f){throw y.value=f.message,f}finally{c.value=!1}},L=async()=>{c.value=!0,y.value=null;try{const f=await V.get("/admin/gemini-accounts");if(f.success)q.value=f.data||[];else throw new Error(f.message||"获取Gemini账户失败")}catch(f){throw y.value=f.message,f}finally{c.value=!1}};return{claudeAccounts:F,claudeConsoleAccounts:J,bedrockAccounts:m,geminiAccounts:q,loading:c,error:y,sortBy:G,sortOrder:K,fetchClaudeAccounts:T,fetchClaudeConsoleAccounts:S,fetchBedrockAccounts:v,fetchGeminiAccounts:L,fetchAllAccounts:async()=>{c.value=!0,y.value=null;try{await Promise.all([T(),S(),v(),L()])}catch(f){throw y.value=f.message,f}finally{c.value=!1}},createClaudeAccount:async f=>{c.value=!0,y.value=null;try{const d=await V.post("/admin/claude-accounts",f);if(d.success)return await T(),d.data;throw new Error(d.message||"创建Claude账户失败")}catch(d){throw y.value=d.message,d}finally{c.value=!1}},createClaudeConsoleAccount:async f=>{c.value=!0,y.value=null;try{const d=await V.post("/admin/claude-console-accounts",f);if(d.success)return await S(),d.data;throw new Error(d.message||"创建Claude Console账户失败")}catch(d){throw y.value=d.message,d}finally{c.value=!1}},createBedrockAccount:async f=>{c.value=!0,y.value=null;try{const d=await V.post("/admin/bedrock-accounts",f);if(d.success)return await v(),d.data;throw new Error(d.message||"创建Bedrock账户失败")}catch(d){throw y.value=d.message,d}finally{c.value=!1}},createGeminiAccount:async f=>{c.value=!0,y.value=null;try{const d=await V.post("/admin/gemini-accounts",f);if(d.success)return await L(),d.data;throw new Error(d.message||"创建Gemini账户失败")}catch(d){throw y.value=d.message,d}finally{c.value=!1}},updateClaudeAccount:async(f,d)=>{c.value=!0,y.value=null;try{const A=await V.put(`/admin/claude-accounts/${f}`,d);if(A.success)return await T(),A;throw new Error(A.message||"更新Claude账户失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},updateClaudeConsoleAccount:async(f,d)=>{c.value=!0,y.value=null;try{const A=await V.put(`/admin/claude-console-accounts/${f}`,d);if(A.success)return await S(),A;throw new Error(A.message||"更新Claude Console账户失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},updateBedrockAccount:async(f,d)=>{c.value=!0,y.value=null;try{const A=await V.put(`/admin/bedrock-accounts/${f}`,d);if(A.success)return await v(),A;throw new Error(A.message||"更新Bedrock账户失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},updateGeminiAccount:async(f,d)=>{c.value=!0,y.value=null;try{const A=await V.put(`/admin/gemini-accounts/${f}`,d);if(A.success)return await L(),A;throw new Error(A.message||"更新Gemini账户失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},toggleAccount:async(f,d)=>{c.value=!0,y.value=null;try{let A;f==="claude"?A=`/admin/claude-accounts/${d}/toggle`:f==="claude-console"?A=`/admin/claude-console-accounts/${d}/toggle`:f==="bedrock"?A=`/admin/bedrock-accounts/${d}/toggle`:A=`/admin/gemini-accounts/${d}/toggle`;const te=await V.put(A);if(te.success)return f==="claude"?await T():f==="claude-console"?await S():f==="bedrock"?await v():await L(),te;throw new Error(te.message||"切换状态失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},deleteAccount:async(f,d)=>{c.value=!0,y.value=null;try{let A;f==="claude"?A=`/admin/claude-accounts/${d}`:f==="claude-console"?A=`/admin/claude-console-accounts/${d}`:f==="bedrock"?A=`/admin/bedrock-accounts/${d}`:A=`/admin/gemini-accounts/${d}`;const te=await V.delete(A);if(te.success)return f==="claude"?await T():f==="claude-console"?await S():f==="bedrock"?await v():await L(),te;throw new Error(te.message||"删除失败")}catch(A){throw y.value=A.message,A}finally{c.value=!1}},refreshClaudeToken:async f=>{c.value=!0,y.value=null;try{const d=await V.post(`/admin/claude-accounts/${f}/refresh`);if(d.success)return await T(),d;throw new Error(d.message||"Token刷新失败")}catch(d){throw y.value=d.message,d}finally{c.value=!1}},generateClaudeAuthUrl:async f=>{try{const d=await V.post("/admin/claude-accounts/generate-auth-url",f);if(d.success)return d.data;throw new Error(d.message||"生成授权URL失败")}catch(d){throw y.value=d.message,d}},exchangeClaudeCode:async f=>{try{const d=await V.post("/admin/claude-accounts/exchange-code",f);if(d.success)return d.data;throw new Error(d.message||"交换授权码失败")}catch(d){throw y.value=d.message,d}},generateClaudeSetupTokenUrl:async f=>{try{const d=await V.post("/admin/claude-accounts/generate-setup-token-url",f);if(d.success)return d.data;throw new Error(d.message||"生成Setup Token URL失败")}catch(d){throw y.value=d.message,d}},exchangeClaudeSetupTokenCode:async f=>{try{const d=await V.post("/admin/claude-accounts/exchange-setup-token-code",f);if(d.success)return d.data;throw new Error(d.message||"交换Setup Token授权码失败")}catch(d){throw y.value=d.message,d}},generateGeminiAuthUrl:async f=>{try{const d=await V.post("/admin/gemini-accounts/generate-auth-url",f);if(d.success)return d.data;throw new Error(d.message||"生成授权URL失败")}catch(d){throw y.value=d.message,d}},exchangeGeminiCode:async f=>{try{const d=await V.post("/admin/gemini-accounts/exchange-code",f);if(d.success)return d.data;throw new Error(d.message||"交换授权码失败")}catch(d){throw y.value=d.message,d}},sortAccounts:f=>{G.value===f?K.value=K.value==="asc"?"desc":"asc":(G.value=f,K.value="asc")},reset:()=>{F.value=[],J.value=[],m.value=[],q.value=[],c.value=!1,y.value=null,G.value="",K.value="asc"}}}),at={class:"space-y-4"},rt={class:"flex items-center justify-between"},nt={class:"flex cursor-pointer items-center"},it={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4"},ut={class:"grid grid-cols-2 gap-4"},dt={class:"space-y-4"},pt={class:"flex items-center"},mt={key:0,class:"grid grid-cols-2 gap-4"},ct={class:"relative"},ft=["type"],He={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(F,{emit:J}){const m=F,q=J,c=k({...m.modelValue}),y=k(!!(c.value.username||c.value.password)),G=k(!1);_(()=>m.modelValue,S=>{JSON.stringify(S)!==JSON.stringify(c.value)&&(c.value={...S},y.value=!!(S.username||S.password))},{deep:!0}),_(()=>c.value.enabled,()=>{T()}),_(()=>c.value.type,()=>{T()}),_(()=>c.value.host,()=>{T()}),_(()=>c.value.port,()=>{T()}),_(()=>c.value.username,()=>{T()}),_(()=>c.value.password,()=>{T()}),_(y,S=>{S||(c.value.username="",c.value.password="",T())});let K=null;function T(){K&&clearTimeout(K),K=setTimeout(()=>{const S={...c.value};y.value||(S.username="",S.password=""),q("update:modelValue",S)},100)}return tt(()=>{K&&clearTimeout(K)}),(S,v)=>(n(),u("div",at,[e("div",rt,[v[9]||(v[9]=e("h4",{class:"text-sm font-semibold text-gray-700"},"代理设置 (可选)",-1)),e("label",nt,[g(e("input",{"onUpdate:modelValue":v[0]||(v[0]=L=>c.value.enabled=L),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[qe,c.value.enabled]]),v[8]||(v[8]=e("span",{class:"ml-2 text-sm text-gray-700"},"启用代理",-1))])]),c.value.enabled?(n(),u("div",it,[v[17]||(v[17]=ze('
配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。
请确保代理服务器稳定可用,否则会影响账户的正常使用。
',1)),e("div",null,[v[11]||(v[11]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"代理类型",-1)),g(e("select",{"onUpdate:modelValue":v[1]||(v[1]=L=>c.value.type=L),class:"form-input w-full"},v[10]||(v[10]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[Ee,c.value.type]])]),e("div",ut,[e("div",null,[v[12]||(v[12]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"主机地址",-1)),g(e("input",{"onUpdate:modelValue":v[2]||(v[2]=L=>c.value.host=L),class:"form-input w-full",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[U,c.value.host]])]),e("div",null,[v[13]||(v[13]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"端口",-1)),g(e("input",{"onUpdate:modelValue":v[3]||(v[3]=L=>c.value.port=L),class:"form-input w-full",placeholder:"例如: 1080",type:"number"},null,512),[[U,c.value.port]])])]),e("div",dt,[e("div",pt,[g(e("input",{id:"proxyAuth","onUpdate:modelValue":v[4]||(v[4]=L=>y.value=L),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[qe,y.value]]),v[14]||(v[14]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700",for:"proxyAuth"}," 需要身份验证 ",-1))]),y.value?(n(),u("div",mt,[e("div",null,[v[15]||(v[15]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"用户名",-1)),g(e("input",{"onUpdate:modelValue":v[5]||(v[5]=L=>c.value.username=L),class:"form-input w-full",placeholder:"代理用户名",type:"text"},null,512),[[U,c.value.username]])]),e("div",null,[v[16]||(v[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700"},"密码",-1)),e("div",ct,[g(e("input",{"onUpdate:modelValue":v[6]||(v[6]=L=>c.value.password=L),class:"form-input w-full pr-10",placeholder:"代理密码",type:G.value?"text":"password"},null,8,ft),[[st,c.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600",type:"button",onClick:v[7]||(v[7]=L=>G.value=!G.value)},[e("i",{class:M(G.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):w("",!0)]),v[18]||(v[18]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("p",{class:"text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),C("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):w("",!0)]))}},xt={class:"space-y-6"},vt={key:0},gt={class:"rounded-lg border border-blue-200 bg-blue-50 p-6"},yt={class:"flex items-start gap-4"},bt={class:"flex-1"},kt={class:"space-y-4"},wt={class:"rounded-lg border border-blue-300 bg-white/80 p-4"},ht={class:"flex items-start gap-3"},$t={class:"flex-1"},Ct=["disabled"],Tt={key:0,class:"fas fa-link mr-2"},At={key:1,class:"loading-spinner mr-2"},Ut={key:1,class:"space-y-3"},It={class:"flex items-center gap-2"},St=["value"],Vt={class:"rounded-lg border border-blue-300 bg-white/80 p-4"},Kt={class:"flex items-start gap-3"},jt={class:"flex-1"},Mt={class:"space-y-3"},Lt={key:1},Dt={class:"rounded-lg border border-green-200 bg-green-50 p-6"},Rt={class:"flex items-start gap-4"},Gt={class:"flex-1"},Pt={class:"space-y-4"},Wt={class:"rounded-lg border border-green-300 bg-white/80 p-4"},zt={class:"flex items-start gap-3"},Et={class:"flex-1"},Ot=["disabled"],Ft={key:0,class:"fas fa-link mr-2"},Bt={key:1,class:"loading-spinner mr-2"},qt={key:1,class:"space-y-3"},Nt={class:"flex items-center gap-2"},Ht=["value"],_t={class:"rounded-lg border border-green-300 bg-white/80 p-4"},Jt={class:"flex items-start gap-3"},Yt={class:"flex-1"},Qt={class:"space-y-3"},Xt={class:"flex gap-3 pt-4"},Zt=["disabled"],es={key:0,class:"loading-spinner mr-2"},ts={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(F,{emit:J}){const m=F,q=J,c=Qe(),y=k(!1),G=k(!1),K=k(""),T=k(""),S=k(!1),v=k(""),L=fe(()=>K.value&&T.value.trim());_(T,P=>{if(!P||typeof P!="string")return;const p=P.trim();if(!p)return;if(p.startsWith("http://")||p.startsWith("https://"))if(p.startsWith("http://localhost:45462"))try{const ae=new URL(p).searchParams.get("code");ae?(T.value=ae,h("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):h("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(B){console.error("Failed to parse URL:",B),h("链接格式错误,请检查是否为完整的 URL","error")}else if(m.platform==="gemini")try{const ae=new URL(p).searchParams.get("code");ae&&(T.value=ae,h("成功提取授权码!","success"))}catch{}else h("请粘贴以 http://localhost:45462 开头的链接","error")});const D=async()=>{var P;y.value=!0;try{const p=(P=m.proxy)!=null&&P.enabled?{proxy:{type:m.proxy.type,host:m.proxy.host,port:parseInt(m.proxy.port),username:m.proxy.username||null,password:m.proxy.password||null}}:{};if(m.platform==="claude"){const R=await c.generateClaudeAuthUrl(p);K.value=R.authUrl,v.value=R.sessionId}else if(m.platform==="gemini"){const R=await c.generateGeminiAuthUrl(p);K.value=R.authUrl,v.value=R.sessionId}}catch(p){h(p.message||"生成授权链接失败","error")}finally{y.value=!1}},z=()=>{K.value="",T.value="",D()},N=async()=>{try{await navigator.clipboard.writeText(K.value),S.value=!0,h("链接已复制","success"),setTimeout(()=>{S.value=!1},2e3)}catch{const p=document.createElement("input");p.value=K.value,document.body.appendChild(p),p.select(),document.execCommand("copy"),document.body.removeChild(p),S.value=!0,h("链接已复制","success"),setTimeout(()=>{S.value=!1},2e3)}},Y=async()=>{var P;if(L.value){G.value=!0;try{let p={};m.platform==="claude"?p={sessionId:v.value,callbackUrl:T.value.trim()}:m.platform==="gemini"&&(p={code:T.value.trim(),sessionId:v.value}),(P=m.proxy)!=null&&P.enabled&&(p.proxy={type:m.proxy.type,host:m.proxy.host,port:parseInt(m.proxy.port),username:m.proxy.username||null,password:m.proxy.password||null});let R;m.platform==="claude"?R=await c.exchangeClaudeCode(p):m.platform==="gemini"&&(R=await c.exchangeGeminiCode(p)),q("success",R)}catch(p){h(p.message||"授权失败,请检查授权码是否正确","error")}finally{G.value=!1}}};return(P,p)=>(n(),u("div",xt,[F.platform==="claude"?(n(),u("div",vt,[e("div",gt,[e("div",yt,[p[14]||(p[14]=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",bt,[p[12]||(p[12]=e("h4",{class:"mb-3 font-semibold text-blue-900"},"Claude 账户授权",-1)),p[13]||(p[13]=e("p",{class:"mb-4 text-sm text-blue-800"},"请按照以下步骤完成 Claude 账户的授权:",-1)),e("div",kt,[e("div",wt,[e("div",ht,[p[5]||(p[5]=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",$t,[p[4]||(p[4]=e("p",{class:"mb-2 font-medium text-blue-900"},"点击下方按钮生成授权链接",-1)),K.value?(n(),u("div",Ut,[e("div",It,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs",readonly:"",type:"text",value:K.value},null,8,St),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200",title:"复制链接",onClick:N},[e("i",{class:M(S.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:z},p[3]||(p[3]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),C("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:y.value,onClick:D},[y.value?(n(),u("div",At)):(n(),u("i",Tt)),C(" "+b(y.value?"生成中...":"生成授权链接"),1)],8,Ct))])])]),p[11]||(p[11]=ze(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Claude 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",Vt,[e("div",Kt,[p[10]||(p[10]=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",jt,[p[8]||(p[8]=e("p",{class:"mb-2 font-medium text-blue-900"},"输入 Authorization Code",-1)),p[9]||(p[9]=e("p",{class:"mb-3 text-sm text-blue-700"},[C(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),C(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Mt,[e("div",null,[p[6]||(p[6]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),C("Authorization Code ")],-1)),g(e("textarea",{"onUpdate:modelValue":p[0]||(p[0]=R=>T.value=R),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[U,T.value]])]),p[7]||(p[7]=e("p",{class:"mt-2 text-xs text-gray-500"},[e("i",{class:"fas fa-info-circle mr-1"}),C(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):F.platform==="gemini"?(n(),u("div",Lt,[e("div",Dt,[e("div",Rt,[p[26]||(p[26]=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",Gt,[p[24]||(p[24]=e("h4",{class:"mb-3 font-semibold text-green-900"},"Gemini 账户授权",-1)),p[25]||(p[25]=e("p",{class:"mb-4 text-sm text-green-800"},"请按照以下步骤完成 Gemini 账户的授权:",-1)),e("div",Pt,[e("div",Wt,[e("div",zt,[p[17]||(p[17]=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",Et,[p[16]||(p[16]=e("p",{class:"mb-2 font-medium text-green-900"},"点击下方按钮生成授权链接",-1)),K.value?(n(),u("div",qt,[e("div",Nt,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs",readonly:"",type:"text",value:K.value},null,8,Ht),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200",title:"复制链接",onClick:N},[e("i",{class:M(S.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:z},p[15]||(p[15]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),C("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:y.value,onClick:D},[y.value?(n(),u("div",Bt)):(n(),u("i",Ft)),C(" "+b(y.value?"生成中...":"生成授权链接"),1)],8,Ot))])])]),p[23]||(p[23]=ze(' 2
在浏览器中打开链接并完成授权
请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。
注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。
',1)),e("div",_t,[e("div",Jt,[p[22]||(p[22]=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",Yt,[p[20]||(p[20]=e("p",{class:"mb-2 font-medium text-green-900"},"输入 Authorization Code",-1)),p[21]||(p[21]=e("p",{class:"mb-3 text-sm text-green-700"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",Qt,[e("div",null,[p[18]||(p[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),C("Authorization Code ")],-1)),g(e("textarea",{"onUpdate:modelValue":p[1]||(p[1]=R=>T.value=R),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[U,T.value]])]),p[19]||(p[19]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),C(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):w("",!0),e("div",Xt,[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:p[2]||(p[2]=R=>P.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!L.value||G.value,type:"button",onClick:Y},[G.value?(n(),u("div",es)):w("",!0),C(" "+b(G.value?"验证中...":"完成授权"),1)],8,Zt)])]))}},ss={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-4"},ls={class:"modal-content mx-auto w-full max-w-md p-6"},os={class:"mb-6 flex items-start gap-4"},as={class:"flex-1"},rs={class:"mb-2 text-lg font-bold text-gray-900"},ns={class:"whitespace-pre-line text-sm leading-relaxed text-gray-600"},is={class:"flex gap-3"},Xe={__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(F){return(J,m)=>(n(),ge(Oe,{to:"body"},[F.show?(n(),u("div",ss,[e("div",ls,[e("div",os,[m[2]||(m[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",as,[e("h3",rs,b(F.title),1),e("p",ns,b(F.message),1)])]),e("div",is,[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",onClick:m[0]||(m[0]=q=>J.$emit("cancel"))},b(F.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:m[1]||(m[1]=q=>J.$emit("confirm"))},b(F.confirmText),1)])])])):w("",!0)]))}},us={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},ds={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"},ps={class:"mb-4 flex items-center justify-between sm:mb-6"},ms={class:"mb-6"},cs={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},fs={class:"space-y-4"},xs={class:"flex gap-4"},vs={class:"flex cursor-pointer items-center"},gs={class:"flex cursor-pointer items-center"},ys={class:"flex gap-3"},bs=["disabled"],ks={key:0,class:"loading-spinner mr-2"},ws={class:"space-y-4"},hs={key:0,class:"py-8 text-center"},$s={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},Cs={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},Ts={class:"mb-3 flex items-start justify-between"},As={class:"flex-1"},Us={class:"font-semibold text-gray-900"},Is={class:"mt-1 text-sm text-gray-500"},Ss={class:"ml-4 flex items-center gap-2"},Vs={class:"flex items-center justify-between text-sm text-gray-600"},Ks={class:"flex items-center gap-4"},js={class:"flex items-center gap-2"},Ms=["onClick"],Ls=["disabled","onClick"],Ds={key:1,class:"modal z-60 fixed inset-0 flex items-center justify-center p-3 sm:p-4"},Rs={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Gs={class:"space-y-4"},Ps={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},Ws={class:"flex gap-3 pt-4"},zs=["disabled"],Es={key:0,class:"loading-spinner mr-2"},Os={__name:"GroupManagementModal",emits:["close","refresh"],setup(F,{emit:J}){const m=J,q=k(!0),c=k(!1),y=k([]),G=k(!1),K=k(!1),T=k({name:"",platform:"claude",description:""}),S=k(!1),v=k(!1),L=k(null),D=k({name:"",platform:"",description:""}),z=s=>s?new Date(s).toLocaleDateString("zh-CN"):"-",N=async()=>{c.value=!0;try{const s=await V.get("/admin/account-groups");y.value=s.data||[]}catch{h("加载分组列表失败","error")}finally{c.value=!1}},Y=async()=>{var s,x;if(!T.value.name||!T.value.platform){h("请填写必填项","error");return}K.value=!0;try{await V.post("/admin/account-groups",{name:T.value.name,platform:T.value.platform,description:T.value.description}),h("分组创建成功","success"),P(),await N(),m("refresh")}catch(j){h(((x=(s=j.response)==null?void 0:s.data)==null?void 0:x.error)||"创建分组失败","error")}finally{K.value=!1}},P=()=>{G.value=!1,T.value={name:"",platform:"claude",description:""}},p=s=>{L.value=s,D.value={name:s.name,platform:s.platform,description:s.description||""},S.value=!0},R=async()=>{var s,x;if(!D.value.name){h("请填写分组名称","error");return}v.value=!0;try{await V.put(`/admin/account-groups/${L.value.id}`,{name:D.value.name,description:D.value.description}),h("分组更新成功","success"),B(),await N(),m("refresh")}catch(j){h(((x=(s=j.response)==null?void 0:s.data)==null?void 0:x.error)||"更新分组失败","error")}finally{v.value=!1}},B=()=>{S.value=!1,L.value=null,D.value={name:"",platform:"",description:""}},ae=async s=>{var x,j;if(s.memberCount>0){h("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${s.name}" 吗?`))try{await V.delete(`/admin/account-groups/${s.id}`),h("分组删除成功","success"),await N(),m("refresh")}catch($){h(((j=(x=$.response)==null?void 0:x.data)==null?void 0:j.error)||"删除分组失败","error")}};return Je(()=>{N()}),(s,x)=>(n(),ge(Oe,{to:"body"},[q.value?(n(),u("div",us,[e("div",ds,[e("div",ps,[x[9]||(x[9]=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:x[0]||(x[0]=j=>s.$emit("close"))},x[8]||(x[8]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",ms,[e("button",{class:"btn btn-primary px-4 py-2",onClick:x[1]||(x[1]=j=>G.value=!0)},x[10]||(x[10]=[e("i",{class:"fas fa-plus mr-2"},null,-1),C(" 创建新分组 ",-1)]))]),G.value?(n(),u("div",cs,[x[16]||(x[16]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",fs,[e("div",null,[x[11]||(x[11]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),g(e("input",{"onUpdate:modelValue":x[2]||(x[2]=j=>T.value.name=j),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[U,T.value.name]])]),e("div",null,[x[14]||(x[14]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",xs,[e("label",vs,[g(e("input",{"onUpdate:modelValue":x[3]||(x[3]=j=>T.value.platform=j),class:"mr-2",type:"radio",value:"claude"},null,512),[[se,T.value.platform]]),x[12]||(x[12]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",gs,[g(e("input",{"onUpdate:modelValue":x[4]||(x[4]=j=>T.value.platform=j),class:"mr-2",type:"radio",value:"gemini"},null,512),[[se,T.value.platform]]),x[13]||(x[13]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))])])]),e("div",null,[x[15]||(x[15]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),g(e("textarea",{"onUpdate:modelValue":x[5]||(x[5]=j=>T.value.description=j),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[U,T.value.description]])]),e("div",ys,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!T.value.name||!T.value.platform||K.value,onClick:Y},[K.value?(n(),u("div",ks)):w("",!0),C(" "+b(K.value?"创建中...":"创建"),1)],8,bs),e("button",{class:"btn btn-secondary px-4 py-2",onClick:P},"取消")])])])):w("",!0),e("div",ws,[c.value?(n(),u("div",hs,x[17]||(x[17]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):y.value.length===0?(n(),u("div",$s,x[18]||(x[18]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(n(),u("div",Cs,[(n(!0),u(xe,null,ve(y.value,j=>(n(),u("div",{key:j.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",Ts,[e("div",As,[e("h4",Us,b(j.name),1),e("p",Is,b(j.description||"暂无描述"),1)]),e("div",Ss,[e("span",{class:M(["rounded-full px-2 py-1 text-xs font-medium",j.platform==="claude"?"bg-purple-100 text-purple-700":"bg-blue-100 text-blue-700"])},b(j.platform==="claude"?"Claude":"Gemini"),3)])]),e("div",Vs,[e("div",Ks,[e("span",null,[x[19]||(x[19]=e("i",{class:"fas fa-users mr-1"},null,-1)),C(" "+b(j.memberCount||0)+" 个成员 ",1)]),e("span",null,[x[20]||(x[20]=e("i",{class:"fas fa-clock mr-1"},null,-1)),C(" "+b(z(j.createdAt)),1)])]),e("div",js,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:$=>p(j)},x[21]||(x[21]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Ms),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:j.memberCount>0,title:"删除",onClick:$=>ae(j)},x[22]||(x[22]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Ls)])])]))),128))]))])])])):w("",!0),S.value?(n(),u("div",Ds,[e("div",Rs,[e("div",{class:"mb-4 flex items-center justify-between"},[x[24]||(x[24]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:B},x[23]||(x[23]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Gs,[e("div",null,[x[25]||(x[25]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),g(e("input",{"onUpdate:modelValue":x[6]||(x[6]=j=>D.value.name=j),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[U,D.value.name]])]),e("div",null,[x[27]||(x[27]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Ps,[C(b(D.value.platform==="claude"?"Claude":"Gemini")+" ",1),x[26]||(x[26]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[x[28]||(x[28]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),g(e("textarea",{"onUpdate:modelValue":x[7]||(x[7]=j=>D.value.description=j),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[U,D.value.description]])]),e("div",Ws,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!D.value.name||v.value,onClick:R},[v.value?(n(),u("div",Es)):w("",!0),C(" "+b(v.value?"更新中...":"更新"),1)],8,zs),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:B},"取消")])])])])):w("",!0)]))}},Fs={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Bs={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"},qs={class:"mb-4 flex items-center justify-between sm:mb-6"},Ns={class:"flex items-center gap-2 sm:gap-3"},Hs={class:"text-lg font-bold text-gray-900 sm:text-xl"},_s={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Js={class:"flex items-center space-x-2 sm:space-x-4"},Ys={class:"flex items-center"},Qs={class:"flex items-center"},Xs={key:1},Zs={class:"space-y-6"},el={key:0},tl={class:"flex gap-4"},sl={class:"flex cursor-pointer items-center"},ll={class:"flex cursor-pointer items-center"},ol={class:"flex cursor-pointer items-center"},al={class:"flex cursor-pointer items-center"},rl={key:1},nl={class:"flex flex-wrap gap-4"},il={key:0,class:"flex cursor-pointer items-center"},ul={class:"flex cursor-pointer items-center"},dl={class:"flex cursor-pointer items-center"},pl={key:0,class:"mt-1 text-xs text-red-500"},ml={class:"flex gap-4"},cl={class:"flex cursor-pointer items-center"},fl={class:"flex cursor-pointer items-center"},xl={class:"flex cursor-pointer items-center"},vl={key:2},gl={class:"flex gap-2"},yl=["value"],bl={key:3},kl={key:4,class:"space-y-4"},wl={key:0,class:"mt-1 text-xs text-red-500"},hl={key:0,class:"mt-1 text-xs text-red-500"},$l={key:0,class:"mt-1 text-xs text-red-500"},Cl={key:5,class:"space-y-4"},Tl={key:0,class:"mt-1 text-xs text-red-500"},Al={key:0,class:"mt-1 text-xs text-red-500"},Ul={class:"mb-3 space-y-2"},Il=["onUpdate:modelValue"],Sl=["onUpdate:modelValue"],Vl=["onClick"],Kl={class:"mt-3 flex flex-wrap gap-2"},jl={key:6},Ml={key:7,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},Ll={class:"mb-4 flex items-start gap-3"},Dl={key:0,class:"mb-2 text-sm text-blue-800"},Rl={key:1,class:"mb-2 text-sm text-blue-800"},Gl={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3"},Pl={key:0,class:"text-xs text-blue-800"},Wl={key:1,class:"text-xs text-blue-800"},zl={key:0,class:"mt-1 text-xs text-red-500"},El={class:"flex gap-3 pt-4"},Ol=["disabled"],Fl=["disabled"],Bl={key:0,class:"loading-spinner mr-2"},ql={key:3,class:"space-y-6"},Nl={key:0},Hl={class:"rounded-lg border border-blue-200 bg-blue-50 p-6"},_l={class:"flex items-start gap-4"},Jl={class:"flex-1"},Yl={class:"space-y-4"},Ql={class:"rounded-lg border border-blue-300 bg-white/80 p-4"},Xl={class:"flex items-start gap-3"},Zl={class:"flex-1"},eo=["disabled"],to={key:0,class:"fas fa-link mr-2"},so={key:1,class:"loading-spinner mr-2"},lo={key:1,class:"space-y-3"},oo={class:"flex items-center gap-2"},ao=["value"],ro={class:"rounded-lg border border-blue-300 bg-white/80 p-4"},no={class:"flex items-start gap-3"},io={class:"flex-1"},uo={class:"space-y-3"},po={class:"flex gap-3 pt-4"},mo=["disabled"],co={key:0,class:"loading-spinner mr-2"},fo={key:4,class:"space-y-6"},xo={class:"flex gap-4"},vo={class:"flex cursor-pointer items-center"},go={class:"flex cursor-pointer items-center"},yo={class:"flex cursor-pointer items-center"},bo={key:0},ko={class:"flex gap-2"},wo=["value"],ho={key:1},$o={key:2},Co={key:3,class:"space-y-4"},To={class:"mb-3 space-y-2"},Ao=["onUpdate:modelValue"],Uo=["onUpdate:modelValue"],Io=["onClick"],So={class:"mt-3 flex flex-wrap gap-2"},Vo={key:4,class:"space-y-4"},Ko={key:5,class:"rounded-lg border border-amber-200 bg-amber-50 p-4"},jo={class:"space-y-4"},Mo={class:"flex gap-3 pt-4"},Lo=["disabled"],Do={key:0,class:"loading-spinner mr-2"},_e={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(F,{emit:J}){var Ie,Se,Ve,Ke,je,Me,Le,i,l,I,o,W,E,oe,Q,X,O;const m=F,q=J,c=Qe(),{showConfirmModal:y,confirmOptions:G,showConfirm:K,handleConfirm:T,handleCancel:S}=Ye(),v=fe(()=>!!m.account),L=k(!0),D=k(1),z=k(!1),N=k(!1),Y=k(!1),P=k(""),p=k(""),R=k(!1),B=k(""),ae=()=>{var r;return(r=m.account)!=null&&r.proxy&&m.account.proxy.host&&m.account.proxy.port?{enabled:!0,type:m.account.proxy.type||"socks5",host:m.account.proxy.host,port:m.account.proxy.port,username:m.account.proxy.username||"",password:m.account.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}},s=k({platform:((Ie=m.account)==null?void 0:Ie.platform)||"claude",addType:((Se=m.account)==null?void 0:Se.platform)==="gemini"?"oauth":"setup-token",name:((Ve=m.account)==null?void 0:Ve.name)||"",description:((Ke=m.account)==null?void 0:Ke.description)||"",accountType:((je=m.account)==null?void 0:je.accountType)||"shared",groupId:"",projectId:((Me=m.account)==null?void 0:Me.projectId)||"",accessToken:"",refreshToken:"",proxy:ae(),apiUrl:((Le=m.account)==null?void 0:Le.apiUrl)||"",apiKey:((i=m.account)==null?void 0:i.apiKey)||"",priority:((l=m.account)==null?void 0:l.priority)||50,supportedModels:(()=>{var t;const r=(t=m.account)==null?void 0:t.supportedModels;return r?typeof r=="object"&&!Array.isArray(r)?Object.keys(r).join(`
`):Array.isArray(r)?r.join(`
`):"":""})(),userAgent:((I=m.account)==null?void 0:I.userAgent)||"",rateLimitDuration:((o=m.account)==null?void 0:o.rateLimitDuration)||60,accessKeyId:((W=m.account)==null?void 0:W.accessKeyId)||"",secretAccessKey:((E=m.account)==null?void 0:E.secretAccessKey)||"",region:((oe=m.account)==null?void 0:oe.region)||"",sessionToken:((Q=m.account)==null?void 0:Q.sessionToken)||"",defaultModel:((X=m.account)==null?void 0:X.defaultModel)||"",smallFastModel:((O=m.account)==null?void 0:O.smallFastModel)||""}),x=k([]),j=()=>{var r;(r=m.account)!=null&&r.supportedModels&&(typeof m.account.supportedModels=="object"&&!Array.isArray(m.account.supportedModels)?x.value=Object.entries(m.account.supportedModels).map(([t,a])=>({from:t,to:a})):Array.isArray(m.account.supportedModels)&&(x.value=m.account.supportedModels.map(t=>({from:t,to:t}))))},$=k({name:"",accessToken:"",apiUrl:"",apiKey:"",accessKeyId:"",secretAccessKey:"",region:""}),be=fe(()=>{var r;return((r=s.value.name)==null?void 0:r.trim())&&s.value.platform}),ie=fe(()=>P.value&&p.value.trim()),ee=async()=>{if($.value.name="",!be.value){(!s.value.name||s.value.name.trim()==="")&&($.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupId||s.value.groupId.trim()==="")){h("请选择一个分组","error");return}s.value.platform==="gemini"&&D.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await K("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写")||(D.value=2)},re=async()=>{var r;N.value=!0;try{const t=(r=s.value.proxy)!=null&&r.enabled?{proxy:{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}}:{},a=await c.generateClaudeSetupTokenUrl(t);P.value=a.authUrl,B.value=a.sessionId}catch(t){h(t.message||"生成Setup Token授权链接失败","error")}finally{N.value=!1}},ue=()=>{P.value="",p.value="",re()},ke=async()=>{try{await navigator.clipboard.writeText(P.value),R.value=!0,h("链接已复制","success"),setTimeout(()=>{R.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=P.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(R.value=!0,h("链接已复制","success")):h("复制失败,请手动复制","error")}catch{h("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{R.value=!1},2e3)}},Ce=async()=>{var r;if(ie.value){Y.value=!0;try{const t={sessionId:B.value,callbackUrl:p.value.trim()};(r=s.value.proxy)!=null&&r.enabled&&(t.proxy={type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null});const a=await c.exchangeClaudeSetupTokenCode(t);await f(a)}catch(t){h(t.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{Y.value=!1}}},f=async r=>{z.value=!0;try{const t={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};s.value.platform==="claude"?(t.claudeAiOauth=r.claudeAiOauth||r,t.priority=s.value.priority||50):s.value.platform==="gemini"&&(t.geminiOauth=r.tokens||r,s.value.projectId&&(t.projectId=s.value.projectId));let a;s.value.platform==="claude"?a=await c.createClaudeAccount(t):a=await c.createGeminiAccount(t),q("success",a)}catch(t){h(t.message||"账户创建失败","error")}finally{z.value=!1}},d=async()=>{$.value.name="",$.value.accessToken="",$.value.apiUrl="",$.value.apiKey="";let r=!1;if((!s.value.name||s.value.name.trim()==="")&&($.value.name="请填写账户名称",r=!0),s.value.platform==="claude-console"?((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&($.value.apiUrl="请填写 API URL",r=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&($.value.apiKey="请填写 API Key",r=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&($.value.accessKeyId="请填写 AWS 访问密钥 ID",r=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&($.value.secretAccessKey="请填写 AWS 秘密访问密钥",r=!0),(!s.value.region||s.value.region.trim()==="")&&($.value.region="请选择 AWS 区域",r=!0)):s.value.addType==="manual"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&($.value.accessToken="请填写 Access Token",r=!0),s.value.accountType==="group"&&(!s.value.groupId||s.value.groupId.trim()==="")&&(h("请选择一个分组","error"),r=!0),!r){z.value=!0;try{const t={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.platform==="claude"){const H=s.value.refreshToken?6e5:31536e6;t.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+H,scopes:["user:inference"]},t.priority=s.value.priority||50}else if(s.value.platform==="gemini"){const H=s.value.refreshToken?6e5:31536e6;t.geminiOauth={access_token:s.value.accessToken,refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+H},s.value.projectId&&(t.projectId=s.value.projectId)}else s.value.platform==="claude-console"?(t.apiUrl=s.value.apiUrl,t.apiKey=s.value.apiKey,t.priority=s.value.priority||50,t.supportedModels=$e()||{},t.userAgent=s.value.userAgent||null,t.rateLimitDuration=s.value.rateLimitDuration||60):s.value.platform==="bedrock"&&(t.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},t.region=s.value.region,t.defaultModel=s.value.defaultModel||null,t.smallFastModel=s.value.smallFastModel||null,t.priority=s.value.priority||50,t.rateLimitDuration=s.value.rateLimitDuration||60);let a;s.value.platform==="claude"?a=await c.createClaudeAccount(t):s.value.platform==="claude-console"?a=await c.createClaudeConsoleAccount(t):s.value.platform==="bedrock"?a=await c.createBedrockAccount(t):a=await c.createGeminiAccount(t),q("success",a)}catch(t){h(t.message||"账户创建失败","error")}finally{z.value=!1}}},A=async()=>{if($.value.name="",!s.value.name||s.value.name.trim()===""){$.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupId||s.value.groupId.trim()==="")){h("请选择一个分组","error");return}if(!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await K("项目 ID 未填写",`您尚未填写项目 ID。
如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。
如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){z.value=!0;try{const r={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.accessToken||s.value.refreshToken){if(m.account.platform==="claude"){const t=s.value.refreshToken?6e5:31536e6;r.claudeAiOauth={accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+t,scopes:["user:inference"]}}else if(m.account.platform==="gemini"){const t=s.value.refreshToken?6e5:31536e6;r.geminiOauth={access_token:s.value.accessToken||"",refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+t}}}m.account.platform==="gemini"&&s.value.projectId&&(r.projectId=s.value.projectId),m.account.platform==="claude"&&(r.priority=s.value.priority||50),m.account.platform==="claude-console"&&(r.apiUrl=s.value.apiUrl,s.value.apiKey&&(r.apiKey=s.value.apiKey),r.priority=s.value.priority||50,r.supportedModels=$e()||{},r.userAgent=s.value.userAgent||null,r.rateLimitDuration=s.value.rateLimitDuration||60),m.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(r.awsCredentials={},s.value.accessKeyId&&(r.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(r.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(r.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(r.region=s.value.region),r.defaultModel=s.value.defaultModel||null,r.smallFastModel=s.value.smallFastModel||null,r.priority=s.value.priority||50,r.rateLimitDuration=s.value.rateLimitDuration||60),m.account.platform==="claude"?await c.updateClaudeAccount(m.account.id,r):m.account.platform==="claude-console"?await c.updateClaudeConsoleAccount(m.account.id,r):m.account.platform==="bedrock"?await c.updateBedrockAccount(m.account.id,r):await c.updateGeminiAccount(m.account.id,r),q("success")}catch(r){h(r.message||"账户更新失败","error")}finally{z.value=!1}}};_(()=>s.value.name,()=>{var r;$.value.name&&((r=s.value.name)!=null&&r.trim())&&($.value.name="")}),_(()=>s.value.accessToken,()=>{var r;$.value.accessToken&&((r=s.value.accessToken)!=null&&r.trim())&&($.value.accessToken="")}),_(()=>s.value.apiUrl,()=>{var r;$.value.apiUrl&&((r=s.value.apiUrl)!=null&&r.trim())&&($.value.apiUrl="")}),_(()=>s.value.apiKey,()=>{var r;$.value.apiKey&&((r=s.value.apiKey)!=null&&r.trim())&&($.value.apiKey="")});const te=k([]),ye=k(!1),pe=k(!1),we=fe(()=>{const r=s.value.platform==="claude-console"?"claude":s.value.platform;return te.value.filter(t=>t.platform===r)}),me=async()=>{ye.value=!0;try{const r=await V.get("/admin/account-groups");te.value=r.data||[]}catch{h("加载分组列表失败","error"),te.value=[]}finally{ye.value=!1}},Te=async()=>{await me(),h("分组列表已刷新","success")},Ae=async()=>{await me()};_(()=>s.value.platform,r=>{r==="claude-console"||r==="bedrock"?s.value.addType="manual":r==="claude"?s.value.addType="setup-token":r==="gemini"&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="")}),_(p,r=>{if(!r||typeof r!="string")return;const t=r.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const Z=new URL(t).searchParams.get("code");Z?(p.value=Z,h("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):h("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(H){console.error("Failed to parse URL:",H),h("链接格式错误,请检查是否为完整的 URL","error")}else h("请粘贴以 http://localhost:45462 开头的链接","error")}),_(()=>s.value.accountType,r=>{r==="group"&&te.value.length===0&&me()}),_(()=>s.value.groupId,r=>{r==="__new__"&&(s.value.groupId="",pe.value=!0)});const he=()=>{x.value.push({from:"",to:""})},Ue=r=>{x.value.splice(r,1)},ne=(r,t)=>{if(x.value.some(H=>H.from===r)){h(`模型 ${r} 的映射已存在`,"info");return}x.value.push({from:r,to:t}),h(`已添加映射: ${r} → ${t}`,"success")},$e=()=>{const r={};return x.value.forEach(t=>{t.from&&t.to&&(r[t.from]=t.to)}),Object.keys(r).length>0?r:null};return _(()=>m.account,r=>{if(r){j();const t=r.proxy&&r.proxy.host&&r.proxy.port?{enabled:!0,type:r.proxy.type||"socks5",host:r.proxy.host,port:r.proxy.port,username:r.proxy.username||"",password:r.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""};s.value={platform:r.platform,addType:"oauth",name:r.name,description:r.description||"",accountType:r.accountType||"shared",groupId:"",projectId:r.projectId||"",accessToken:"",refreshToken:"",proxy:t,apiUrl:r.apiUrl||"",apiKey:"",priority:r.priority||50,supportedModels:(()=>{const a=r.supportedModels;return a?typeof a=="object"&&!Array.isArray(a)?Object.keys(a).join(`
`):Array.isArray(a)?a.join(`
`):"":""})(),userAgent:r.userAgent||"",rateLimitDuration:r.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:r.region||"",sessionToken:"",defaultModel:r.defaultModel||"",smallFastModel:r.smallFastModel||""},r.accountType==="group"&&me().then(()=>{r.groupInfo&&r.groupInfo.id?s.value.groupId=r.groupInfo.id:te.value.forEach(a=>{V.get(`/admin/account-groups/${a.id}/members`).then(H=>{(H.data||[]).some(De=>De.id===r.id)&&(s.value.groupId=a.id)}).catch(()=>{})})})}},{immediate:!0}),(r,t)=>(n(),ge(Oe,{to:"body"},[L.value?(n(),u("div",Fs,[e("div",Bs,[e("div",qs,[e("div",Ns,[t[66]||(t[66]=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",Hs,b(v.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=a=>r.$emit("close"))},t[67]||(t[67]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!v.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),u("div",_s,[e("div",Js,[e("div",Ys,[e("div",{class:M(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",D.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[68]||(t[68]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[70]||(t[70]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Qs,[e("div",{class:M(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",D.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[69]||(t[69]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):w("",!0),D.value===1&&!v.value?(n(),u("div",Xs,[e("div",Zs,[v.value?w("",!0):(n(),u("div",el,[t[75]||(t[75]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"平台",-1)),e("div",tl,[e("label",sl,[g(e("input",{"onUpdate:modelValue":t[1]||(t[1]=a=>s.value.platform=a),class:"mr-2",type:"radio",value:"claude"},null,512),[[se,s.value.platform]]),t[71]||(t[71]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",ll,[g(e("input",{"onUpdate:modelValue":t[2]||(t[2]=a=>s.value.platform=a),class:"mr-2",type:"radio",value:"claude-console"},null,512),[[se,s.value.platform]]),t[72]||(t[72]=e("span",{class:"text-sm text-gray-700"},"Claude Console",-1))]),e("label",ol,[g(e("input",{"onUpdate:modelValue":t[3]||(t[3]=a=>s.value.platform=a),class:"mr-2",type:"radio",value:"gemini"},null,512),[[se,s.value.platform]]),t[73]||(t[73]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",al,[g(e("input",{"onUpdate:modelValue":t[4]||(t[4]=a=>s.value.platform=a),class:"mr-2",type:"radio",value:"bedrock"},null,512),[[se,s.value.platform]]),t[74]||(t[74]=e("span",{class:"text-sm text-gray-700"},"Bedrock",-1))])])])),!v.value&&s.value.platform!=="claude-console"&&s.value.platform!=="bedrock"?(n(),u("div",rl,[t[79]||(t[79]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"添加方式",-1)),e("div",nl,[s.value.platform==="claude"?(n(),u("label",il,[g(e("input",{"onUpdate:modelValue":t[5]||(t[5]=a=>s.value.addType=a),class:"mr-2",type:"radio",value:"setup-token"},null,512),[[se,s.value.addType]]),t[76]||(t[76]=e("span",{class:"text-sm text-gray-700"},"Setup Token (推荐)",-1))])):w("",!0),e("label",ul,[g(e("input",{"onUpdate:modelValue":t[6]||(t[6]=a=>s.value.addType=a),class:"mr-2",type:"radio",value:"oauth"},null,512),[[se,s.value.addType]]),t[77]||(t[77]=e("span",{class:"text-sm text-gray-700"},"OAuth 授权",-1))]),e("label",dl,[g(e("input",{"onUpdate:modelValue":t[7]||(t[7]=a=>s.value.addType=a),class:"mr-2",type:"radio",value:"manual"},null,512),[[se,s.value.addType]]),t[78]||(t[78]=e("span",{class:"text-sm text-gray-700"},"手动输入 Access Token",-1))])])])):w("",!0),e("div",null,[t[80]||(t[80]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"账户名称",-1)),g(e("input",{"onUpdate:modelValue":t[8]||(t[8]=a=>s.value.name=a),class:M(["form-input w-full",{"border-red-500":$.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[U,s.value.name]]),$.value.name?(n(),u("p",pl,b($.value.name),1)):w("",!0)]),e("div",null,[t[81]||(t[81]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),g(e("textarea",{"onUpdate:modelValue":t[9]||(t[9]=a=>s.value.description=a),class:"form-input w-full resize-none",placeholder:"账户用途说明...",rows:"3"},null,512),[[U,s.value.description]])]),e("div",null,[t[85]||(t[85]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"账户类型",-1)),e("div",ml,[e("label",cl,[g(e("input",{"onUpdate:modelValue":t[10]||(t[10]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"shared"},null,512),[[se,s.value.accountType]]),t[82]||(t[82]=e("span",{class:"text-sm text-gray-700"},"共享账户",-1))]),e("label",fl,[g(e("input",{"onUpdate:modelValue":t[11]||(t[11]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"dedicated"},null,512),[[se,s.value.accountType]]),t[83]||(t[83]=e("span",{class:"text-sm text-gray-700"},"专属账户",-1))]),e("label",xl,[g(e("input",{"onUpdate:modelValue":t[12]||(t[12]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"group"},null,512),[[se,s.value.accountType]]),t[84]||(t[84]=e("span",{class:"text-sm text-gray-700"},"分组调度",-1))])]),t[86]||(t[86]=e("p",{class:"mt-2 text-xs text-gray-500"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),u("div",vl,[t[89]||(t[89]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"选择分组 *",-1)),e("div",gl,[g(e("select",{"onUpdate:modelValue":t[13]||(t[13]=a=>s.value.groupId=a),class:"form-input flex-1",required:""},[t[87]||(t[87]=e("option",{value:""},"请选择分组",-1)),(n(!0),u(xe,null,ve(we.value,a=>(n(),u("option",{key:a.id,value:a.id},b(a.name)+" ("+b(a.memberCount||0)+" 个成员) ",9,yl))),128)),t[88]||(t[88]=e("option",{value:"__new__"},"+ 新建分组",-1))],512),[[Ee,s.value.groupId]]),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",type:"button",onClick:Te},[e("i",{class:M(["fas fa-sync-alt",{"animate-spin":ye.value}])},null,2)])])])):w("",!0),s.value.platform==="gemini"?(n(),u("div",bl,[t[90]||(t[90]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"项目 ID (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[14]||(t[14]=a=>s.value.projectId=a),class:"form-input w-full",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[U,s.value.projectId]]),t[91]||(t[91]=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,[C(" 访问 "),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,[C(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),C(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),C("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):w("",!0),s.value.platform==="bedrock"&&!v.value?(n(),u("div",kl,[e("div",null,[t[92]||(t[92]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID *",-1)),g(e("input",{"onUpdate:modelValue":t[15]||(t[15]=a=>s.value.accessKeyId=a),class:M(["form-input w-full",{"border-red-500":$.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[U,s.value.accessKeyId]]),$.value.accessKeyId?(n(),u("p",wl,b($.value.accessKeyId),1)):w("",!0)]),e("div",null,[t[93]||(t[93]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥 *",-1)),g(e("input",{"onUpdate:modelValue":t[16]||(t[16]=a=>s.value.secretAccessKey=a),class:M(["form-input w-full",{"border-red-500":$.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[U,s.value.secretAccessKey]]),$.value.secretAccessKey?(n(),u("p",hl,b($.value.secretAccessKey),1)):w("",!0)]),e("div",null,[t[94]||(t[94]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域 *",-1)),g(e("input",{"onUpdate:modelValue":t[17]||(t[17]=a=>s.value.region=a),class:M(["form-input w-full",{"border-red-500":$.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[U,s.value.region]]),$.value.region?(n(),u("p",$l,b($.value.region),1)):w("",!0),t[95]||(t[95]=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 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600"},"💡 请输入完整的区域代码,如 us-east-1")])])],-1))]),e("div",null,[t[96]||(t[96]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[18]||(t[18]=a=>s.value.sessionToken=a),class:"form-input w-full",placeholder:"如果使用临时凭证,请输入会话令牌",type:"password"},null,512),[[U,s.value.sessionToken]]),t[97]||(t[97]=e("p",{class:"mt-1 text-xs text-gray-500"},"仅在使用临时 AWS 凭证时需要填写",-1))]),e("div",null,[t[98]||(t[98]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[19]||(t[19]=a=>s.value.defaultModel=a),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[U,s.value.defaultModel]]),t[99]||(t[99]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[100]||(t[100]=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[101]||(t[101]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"小快速模型 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[20]||(t[20]=a=>s.value.smallFastModel=a),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[U,s.value.smallFastModel]]),t[102]||(t[102]=e("p",{class:"mt-1 text-xs text-gray-500"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))]),e("div",null,[t[103]||(t[103]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),g(e("input",{"onUpdate:modelValue":t[21]||(t[21]=a=>s.value.rateLimitDuration=a),class:"form-input w-full",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[U,s.value.rateLimitDuration,void 0,{number:!0}]]),t[104]||(t[104]=e("p",{class:"mt-1 text-xs text-gray-500"}," 当账号返回429错误时,暂停调度的时间(分钟) ",-1))])])):w("",!0),s.value.platform==="claude-console"&&!v.value?(n(),u("div",Cl,[e("div",null,[t[105]||(t[105]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL *",-1)),g(e("input",{"onUpdate:modelValue":t[22]||(t[22]=a=>s.value.apiUrl=a),class:M(["form-input w-full",{"border-red-500":$.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[U,s.value.apiUrl]]),$.value.apiUrl?(n(),u("p",Tl,b($.value.apiUrl),1)):w("",!0)]),e("div",null,[t[106]||(t[106]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key *",-1)),g(e("input",{"onUpdate:modelValue":t[23]||(t[23]=a=>s.value.apiKey=a),class:M(["form-input w-full",{"border-red-500":$.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[U,s.value.apiKey]]),$.value.apiKey?(n(),u("p",Al,b($.value.apiKey),1)):w("",!0)]),e("div",null,[t[110]||(t[110]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"模型映射表 (可选)",-1)),t[111]||(t[111]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3"},[e("p",{class:"text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-1"}),C(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Ul,[(n(!0),u(xe,null,ve(x.value,(a,H)=>(n(),u("div",{key:H,class:"flex items-center gap-2"},[g(e("input",{"onUpdate:modelValue":Z=>a.from=Z,class:"form-input flex-1",placeholder:"原始模型名称",type:"text"},null,8,Il),[[U,a.from]]),t[108]||(t[108]=e("i",{class:"fas fa-arrow-right text-gray-400"},null,-1)),g(e("input",{"onUpdate:modelValue":Z=>a.to=Z,class:"form-input flex-1",placeholder:"映射后的模型名称",type:"text"},null,8,Sl),[[U,a.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50",type:"button",onClick:Z=>Ue(H)},t[107]||(t[107]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Vl)]))),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",type:"button",onClick:he},t[109]||(t[109]=[e("i",{class:"fas fa-plus mr-2"},null,-1),C(" 添加模型映射 ",-1)])),e("div",Kl,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200",type:"button",onClick:t[24]||(t[24]=a=>ne("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200",type:"button",onClick:t[25]||(t[25]=a=>ne("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",type:"button",onClick:t[26]||(t[26]=a=>ne("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200",type:"button",onClick:t[27]||(t[27]=a=>ne("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[112]||(t[112]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[113]||(t[113]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[28]||(t[28]=a=>s.value.userAgent=a),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[U,s.value.userAgent]]),t[114]||(t[114]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[115]||(t[115]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),g(e("input",{"onUpdate:modelValue":t[29]||(t[29]=a=>s.value.rateLimitDuration=a),class:"form-input w-full",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[U,s.value.rateLimitDuration,void 0,{number:!0}]]),t[116]||(t[116]=e("p",{class:"mt-1 text-xs text-gray-500"}," 当账号返回429错误时,暂停调度的时间(分钟) ",-1))])])):w("",!0),s.value.platform==="claude"||s.value.platform==="claude-console"||s.value.platform==="bedrock"?(n(),u("div",jl,[t[117]||(t[117]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"调度优先级 (1-100)",-1)),g(e("input",{"onUpdate:modelValue":t[30]||(t[30]=a=>s.value.priority=a),class:"form-input w-full",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[U,s.value.priority,void 0,{number:!0}]]),t[118]||(t[118]=e("p",{class:"mt-1 text-xs text-gray-500"},"数字越小优先级越高,建议范围:1-100",-1))])):w("",!0),s.value.addType==="manual"&&s.value.platform!=="claude-console"&&s.value.platform!=="bedrock"?(n(),u("div",Ml,[e("div",Ll,[t[124]||(t[124]=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[122]||(t[122]=e("h5",{class:"mb-2 font-semibold text-blue-900"},"手动输入 Token",-1)),s.value.platform==="claude"?(n(),u("p",Dl," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),u("p",Rl," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):w("",!0),e("div",Gl,[t[121]||(t[121]=e("p",{class:"mb-1 text-sm font-medium text-blue-900"},[e("i",{class:"fas fa-folder-open mr-1"}),C(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),u("p",Pl,t[119]||(t[119]=[C(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono"},"~/.claude/.credentials.json",-1),C(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),u("p",Wl,t[120]||(t[120]=[C(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono"},"~/.config/gemini/credentials.json",-1),C(" 文件中的凭证。 ",-1)]))):w("",!0)]),t[123]||(t[123]=e("p",{class:"text-xs text-blue-600"}," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ",-1))])]),e("div",null,[t[125]||(t[125]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"Access Token *",-1)),g(e("textarea",{"onUpdate:modelValue":t[31]||(t[31]=a=>s.value.accessToken=a),class:M(["form-input w-full resize-none font-mono text-xs",{"border-red-500":$.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[U,s.value.accessToken]]),$.value.accessToken?(n(),u("p",zl,b($.value.accessToken),1)):w("",!0)]),e("div",null,[t[126]||(t[126]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"Refresh Token (可选)",-1)),g(e("textarea",{"onUpdate:modelValue":t[32]||(t[32]=a=>s.value.refreshToken=a),class:"form-input w-full resize-none font-mono text-xs",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[U,s.value.refreshToken]])])])):w("",!0),de(He,{modelValue:s.value.proxy,"onUpdate:modelValue":t[33]||(t[33]=a=>s.value.proxy=a)},null,8,["modelValue"]),e("div",El,[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:t[34]||(t[34]=a=>r.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="bedrock"?(n(),u("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"button",onClick:ee}," 下一步 ",8,Ol)):(n(),u("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"button",onClick:d},[z.value?(n(),u("div",Bl)):w("",!0),C(" "+b(z.value?"创建中...":"创建"),1)],8,Fl))])])])):w("",!0),D.value===2&&s.value.addType==="oauth"?(n(),ge(ts,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[35]||(t[35]=a=>D.value=1),onSuccess:f},null,8,["platform","proxy"])):w("",!0),D.value===2&&s.value.addType==="setup-token"?(n(),u("div",ql,[s.value.platform==="claude"?(n(),u("div",Nl,[e("div",Hl,[e("div",_l,[t[138]||(t[138]=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",Jl,[t[136]||(t[136]=e("h4",{class:"mb-3 font-semibold text-blue-900"},"Claude Setup Token 授权",-1)),t[137]||(t[137]=e("p",{class:"mb-4 text-sm text-blue-800"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Yl,[e("div",Ql,[e("div",Xl,[t[129]||(t[129]=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",Zl,[t[128]||(t[128]=e("p",{class:"mb-2 font-medium text-blue-900"},"点击下方按钮生成授权链接",-1)),P.value?(n(),u("div",lo,[e("div",oo,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs",readonly:"",type:"text",value:P.value},null,8,ao),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200",title:"复制链接",onClick:ke},[e("i",{class:M(R.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:ue},t[127]||(t[127]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),C("重新生成 ",-1)]))])):(n(),u("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:re},[N.value?(n(),u("div",so)):(n(),u("i",to)),C(" "+b(N.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,eo))])])]),t[135]||(t[135]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4"},[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"},"在浏览器中打开链接并完成授权"),e("p",{class:"mb-2 text-sm text-blue-700"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3"},[e("p",{class:"text-xs text-yellow-800"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),C("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",ro,[e("div",no,[t[134]||(t[134]=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",io,[t[132]||(t[132]=e("p",{class:"mb-2 font-medium text-blue-900"},"输入 Authorization Code",-1)),t[133]||(t[133]=e("p",{class:"mb-3 text-sm text-blue-700"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",uo,[e("div",null,[t[130]||(t[130]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),C("Authorization Code ")],-1)),g(e("textarea",{"onUpdate:modelValue":t[36]||(t[36]=a=>p.value=a),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[U,p.value]])]),t[131]||(t[131]=e("p",{class:"mt-2 text-xs text-gray-500"},[e("i",{class:"fas fa-info-circle mr-1"}),C(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):w("",!0),e("div",po,[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:t[37]||(t[37]=a=>D.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!ie.value||Y.value,type:"button",onClick:Ce},[Y.value?(n(),u("div",co)):w("",!0),C(" "+b(Y.value?"验证中...":"完成授权"),1)],8,mo)])])):w("",!0),v.value?(n(),u("div",fo,[e("div",null,[t[139]||(t[139]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"账户名称",-1)),g(e("input",{"onUpdate:modelValue":t[38]||(t[38]=a=>s.value.name=a),class:"form-input w-full",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[U,s.value.name]])]),e("div",null,[t[140]||(t[140]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),g(e("textarea",{"onUpdate:modelValue":t[39]||(t[39]=a=>s.value.description=a),class:"form-input w-full resize-none",placeholder:"账户用途说明...",rows:"3"},null,512),[[U,s.value.description]])]),e("div",null,[t[144]||(t[144]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"账户类型",-1)),e("div",xo,[e("label",vo,[g(e("input",{"onUpdate:modelValue":t[40]||(t[40]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"shared"},null,512),[[se,s.value.accountType]]),t[141]||(t[141]=e("span",{class:"text-sm text-gray-700"},"共享账户",-1))]),e("label",go,[g(e("input",{"onUpdate:modelValue":t[41]||(t[41]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"dedicated"},null,512),[[se,s.value.accountType]]),t[142]||(t[142]=e("span",{class:"text-sm text-gray-700"},"专属账户",-1))]),e("label",yo,[g(e("input",{"onUpdate:modelValue":t[42]||(t[42]=a=>s.value.accountType=a),class:"mr-2",type:"radio",value:"group"},null,512),[[se,s.value.accountType]]),t[143]||(t[143]=e("span",{class:"text-sm text-gray-700"},"分组调度",-1))])]),t[145]||(t[145]=e("p",{class:"mt-2 text-xs text-gray-500"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),u("div",bo,[t[148]||(t[148]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"选择分组 *",-1)),e("div",ko,[g(e("select",{"onUpdate:modelValue":t[43]||(t[43]=a=>s.value.groupId=a),class:"form-input flex-1",required:""},[t[146]||(t[146]=e("option",{value:""},"请选择分组",-1)),(n(!0),u(xe,null,ve(we.value,a=>(n(),u("option",{key:a.id,value:a.id},b(a.name)+" ("+b(a.memberCount||0)+" 个成员) ",9,wo))),128)),t[147]||(t[147]=e("option",{value:"__new__"},"+ 新建分组",-1))],512),[[Ee,s.value.groupId]]),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",type:"button",onClick:Te},[e("i",{class:M(["fas fa-sync-alt",{"animate-spin":ye.value}])},null,2)])])])):w("",!0),s.value.platform==="gemini"?(n(),u("div",ho,[t[149]||(t[149]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"项目 ID (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[44]||(t[44]=a=>s.value.projectId=a),class:"form-input w-full",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[U,s.value.projectId]]),t[150]||(t[150]=e("p",{class:"mt-2 text-xs text-gray-500"},"Google Cloud/Workspace 账号可能需要提供项目 ID",-1))])):w("",!0),s.value.platform==="claude"||s.value.platform==="claude-console"||s.value.platform==="bedrock"?(n(),u("div",$o,[t[151]||(t[151]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"调度优先级 (1-100)",-1)),g(e("input",{"onUpdate:modelValue":t[45]||(t[45]=a=>s.value.priority=a),class:"form-input w-full",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[U,s.value.priority,void 0,{number:!0}]]),t[152]||(t[152]=e("p",{class:"mt-1 text-xs text-gray-500"},"数字越小优先级越高,建议范围:1-100",-1))])):w("",!0),s.value.platform==="claude-console"?(n(),u("div",Co,[e("div",null,[t[153]||(t[153]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),g(e("input",{"onUpdate:modelValue":t[46]||(t[46]=a=>s.value.apiUrl=a),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[U,s.value.apiUrl]])]),e("div",null,[t[154]||(t[154]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),g(e("input",{"onUpdate:modelValue":t[47]||(t[47]=a=>s.value.apiKey=a),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[U,s.value.apiKey]]),t[155]||(t[155]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[159]||(t[159]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"模型映射表 (可选)",-1)),t[160]||(t[160]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3"},[e("p",{class:"text-xs text-blue-700"},[e("i",{class:"fas fa-info-circle mr-1"}),C(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",To,[(n(!0),u(xe,null,ve(x.value,(a,H)=>(n(),u("div",{key:H,class:"flex items-center gap-2"},[g(e("input",{"onUpdate:modelValue":Z=>a.from=Z,class:"form-input flex-1",placeholder:"原始模型名称",type:"text"},null,8,Ao),[[U,a.from]]),t[157]||(t[157]=e("i",{class:"fas fa-arrow-right text-gray-400"},null,-1)),g(e("input",{"onUpdate:modelValue":Z=>a.to=Z,class:"form-input flex-1",placeholder:"映射后的模型名称",type:"text"},null,8,Uo),[[U,a.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50",type:"button",onClick:Z=>Ue(H)},t[156]||(t[156]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Io)]))),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",type:"button",onClick:he},t[158]||(t[158]=[e("i",{class:"fas fa-plus mr-2"},null,-1),C(" 添加模型映射 ",-1)])),e("div",So,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200",type:"button",onClick:t[48]||(t[48]=a=>ne("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200",type:"button",onClick:t[49]||(t[49]=a=>ne("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",type:"button",onClick:t[50]||(t[50]=a=>ne("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200",type:"button",onClick:t[51]||(t[51]=a=>ne("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus 4.1 → Sonnet 4 ")]),t[161]||(t[161]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空表示支持所有模型。如果指定模型,请求中的模型不在列表内将不会调度到此账号 ",-1))]),e("div",null,[t[162]||(t[162]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[52]||(t[52]=a=>s.value.userAgent=a),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[U,s.value.userAgent]]),t[163]||(t[163]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[164]||(t[164]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),g(e("input",{"onUpdate:modelValue":t[53]||(t[53]=a=>s.value.rateLimitDuration=a),class:"form-input w-full",min:"1",type:"number"},null,512),[[U,s.value.rateLimitDuration,void 0,{number:!0}]])])])):w("",!0),s.value.platform==="bedrock"?(n(),u("div",Vo,[e("div",null,[t[165]||(t[165]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),g(e("input",{"onUpdate:modelValue":t[54]||(t[54]=a=>s.value.accessKeyId=a),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[U,s.value.accessKeyId]]),t[166]||(t[166]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[167]||(t[167]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),g(e("input",{"onUpdate:modelValue":t[55]||(t[55]=a=>s.value.secretAccessKey=a),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[U,s.value.secretAccessKey]]),t[168]||(t[168]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[169]||(t[169]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),g(e("input",{"onUpdate:modelValue":t[56]||(t[56]=a=>s.value.region=a),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[U,s.value.region]]),t[170]||(t[170]=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[171]||(t[171]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[57]||(t[57]=a=>s.value.sessionToken=a),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[U,s.value.sessionToken]])]),e("div",null,[t[172]||(t[172]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[58]||(t[58]=a=>s.value.defaultModel=a),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[U,s.value.defaultModel]]),t[173]||(t[173]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[174]||(t[174]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"小快速模型 (可选)",-1)),g(e("input",{"onUpdate:modelValue":t[59]||(t[59]=a=>s.value.smallFastModel=a),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[U,s.value.smallFastModel]]),t[175]||(t[175]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[176]||(t[176]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),g(e("input",{"onUpdate:modelValue":t[60]||(t[60]=a=>s.value.rateLimitDuration=a),class:"form-input w-full",min:"1",type:"number"},null,512),[[U,s.value.rateLimitDuration,void 0,{number:!0}]])])])):w("",!0),s.value.platform!=="claude-console"&&s.value.platform!=="bedrock"?(n(),u("div",Ko,[t[179]||(t[179]=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"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600"},"💡 留空表示不更新该字段。")])],-1)),e("div",jo,[e("div",null,[t[177]||(t[177]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"新的 Access Token",-1)),g(e("textarea",{"onUpdate:modelValue":t[61]||(t[61]=a=>s.value.accessToken=a),class:"form-input w-full resize-none font-mono text-xs",placeholder:"留空表示不更新...",rows:"4"},null,512),[[U,s.value.accessToken]])]),e("div",null,[t[178]||(t[178]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"新的 Refresh Token",-1)),g(e("textarea",{"onUpdate:modelValue":t[62]||(t[62]=a=>s.value.refreshToken=a),class:"form-input w-full resize-none font-mono text-xs",placeholder:"留空表示不更新...",rows:"4"},null,512),[[U,s.value.refreshToken]])])])])):w("",!0),de(He,{modelValue:s.value.proxy,"onUpdate:modelValue":t[63]||(t[63]=a=>s.value.proxy=a)},null,8,["modelValue"]),e("div",Mo,[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:t[64]||(t[64]=a=>r.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:z.value,type:"button",onClick:A},[z.value?(n(),u("div",Do)):w("",!0),C(" "+b(z.value?"更新中...":"更新"),1)],8,Lo)])])):w("",!0)])])):w("",!0),de(Xe,{"cancel-text":le(G).cancelText,"confirm-text":le(G).confirmText,message:le(G).message,show:le(y),title:le(G).title,onCancel:le(S),onConfirm:le(T)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),pe.value?(n(),ge(Os,{key:1,onClose:t[65]||(t[65]=a=>pe.value=!1),onRefresh:Ae})):w("",!0)]))}},Ro={class:"accounts-container"},Go={class:"card p-4 sm:p-6"},Po={class:"mb-4 flex flex-col gap-4 sm:mb-6"},Wo={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},zo={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Eo={class:"group relative min-w-[160px]"},Oo={class:"group relative min-w-[140px]"},Fo={class:"group relative min-w-[160px]"},Bo={class:"relative"},qo=["disabled"],No={key:0,class:"py-12 text-center"},Ho={key:1,class:"py-12 text-center"},_o={key:2,class:"table-container hidden md:block"},Jo={class:"w-full table-fixed"},Yo={class:"bg-gray-50/80 backdrop-blur-sm"},Qo={key:1,class:"fas fa-sort ml-1 text-gray-400"},Xo={key:1,class:"fas fa-sort ml-1 text-gray-400"},Zo={key:1,class:"fas fa-sort ml-1 text-gray-400"},ea={key:1,class:"fas fa-sort ml-1 text-gray-400"},ta={class:"divide-y divide-gray-200/50"},sa={class:"px-3 py-4"},la={class:"flex items-center"},oa={class:"min-w-0"},aa={class:"flex items-center gap-2"},ra=["title"],na={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},ia={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},ua={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},da=["title"],pa=["title"],ma={class:"px-3 py-4"},ca={class:"flex items-center gap-1"},fa={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"},xa={class:"text-xs font-medium text-yellow-700"},va={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"},ga={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"},ya={key:3,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"},ba={class:"text-xs font-medium text-indigo-700"},ka={class:"whitespace-nowrap px-3 py-4"},wa={class:"flex flex-col gap-1"},ha={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},$a={key:0},Ca={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Ta=["title"],Aa={key:3,class:"text-xs text-gray-500"},Ua={class:"whitespace-nowrap px-3 py-4"},Ia={key:0,class:"flex items-center gap-2"},Sa={class:"h-2 w-16 rounded-full bg-gray-200"},Va={class:"min-w-[20px] text-xs font-medium text-gray-700"},Ka={key:1,class:"text-sm text-gray-400"},ja={class:"px-3 py-4 text-sm text-gray-600"},Ma=["title"],La={key:1,class:"text-gray-400"},Da={class:"whitespace-nowrap px-3 py-4 text-sm"},Ra={key:0,class:"space-y-1"},Ga={class:"flex items-center gap-2"},Pa={class:"text-sm font-medium text-gray-900"},Wa={class:"flex items-center gap-2"},za={class:"text-xs text-gray-600"},Ea={key:0,class:"text-xs text-gray-500"},Oa={key:1,class:"text-xs text-gray-400"},Fa={class:"whitespace-nowrap px-3 py-4"},Ba={key:0,class:"space-y-2"},qa={class:"flex items-center gap-2"},Na={class:"h-2 w-24 rounded-full bg-gray-200"},Ha={class:"min-w-[32px] text-xs font-medium text-gray-700"},_a={class:"text-xs text-gray-600"},Ja={key:0,class:"font-medium text-indigo-600"},Ya={key:1,class:"text-sm text-gray-400"},Qa={key:2,class:"text-sm text-gray-400"},Xa={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600"},Za={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},er={class:"flex flex-wrap items-center gap-1"},tr=["disabled","title","onClick"],sr=["disabled","title","onClick"],lr=["disabled","title","onClick"],or={class:"ml-1"},ar=["onClick"],rr=["onClick"],nr={key:3,class:"space-y-3 md:hidden"},ir={class:"mb-3 flex items-start justify-between"},ur={class:"flex items-center gap-3"},dr={class:"text-sm font-semibold text-gray-900"},pr={class:"mt-0.5 flex items-center gap-2"},mr={class:"text-xs text-gray-500"},cr={class:"text-xs text-gray-500"},fr={class:"mb-3 grid grid-cols-2 gap-3"},xr={class:"text-sm font-semibold text-gray-900"},vr={class:"mt-0.5 text-xs text-gray-500"},gr={class:"text-sm font-semibold text-gray-900"},yr={class:"mt-0.5 text-xs text-gray-500"},br={class:"mb-3 space-y-2"},kr={key:0,class:"space-y-1.5 rounded-lg bg-gray-50 p-2"},wr={class:"flex items-center justify-between text-xs"},hr={class:"font-medium text-gray-700"},$r={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200"},Cr={class:"flex items-center justify-between text-xs"},Tr={class:"text-gray-500"},Ar={key:0,class:"font-medium text-indigo-600"},Ur={key:1,class:"text-gray-500"},Ir={class:"flex items-center justify-between text-xs"},Sr={class:"text-gray-700"},Vr={key:1,class:"flex items-center justify-between text-xs"},Kr={class:"text-gray-700"},jr={class:"flex items-center justify-between text-xs"},Mr={class:"font-medium text-gray-700"},Lr={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Dr=["disabled","onClick"],Rr=["disabled","onClick"],Gr=["onClick"],Pr=["onClick"],Wr={__name:"AccountsView",setup(F){const{showConfirmModal:J,confirmOptions:m,showConfirm:q,handleConfirm:c,handleCancel:y}=Ye(),G=k([]),K=k(!1),T=k("name"),S=k(""),v=k("asc"),L=k([]),D=k({}),z=k([]),N=k("all"),Y=k("all"),P=k(!1),p=k(!1),R=k(!1),B=k(new Map),ae=k([{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"}]),s=k([{value:"all",label:"所有平台",icon:"fa-globe"},{value:"claude",label:"Claude",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"gemini",label:"Gemini",icon:"fa-robot"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"}]),x=fe(()=>{const i=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return z.value.forEach(l=>{i.push({value:l.id,label:`${l.name} (${l.platform==="claude"?"Claude":"Gemini"})`,icon:l.platform==="claude"?"fa-brain":"fa-robot"})}),i}),j=k(!1),$=k(!1),be=k(null),ie=fe(()=>{const i=G.value;return S.value?[...i].sort((I,o)=>{var oe,Q,X,O,r,t,a,H,Z,De,Fe,Be;let W=I[S.value],E=o[S.value];return S.value==="dailyTokens"?(W=((Q=(oe=I.usage)==null?void 0:oe.daily)==null?void 0:Q.allTokens)||0,E=((O=(X=o.usage)==null?void 0:X.daily)==null?void 0:O.allTokens)||0):S.value==="dailyRequests"?(W=((t=(r=I.usage)==null?void 0:r.daily)==null?void 0:t.requests)||0,E=((H=(a=o.usage)==null?void 0:a.daily)==null?void 0:H.requests)||0):S.value==="totalTokens"&&(W=((De=(Z=I.usage)==null?void 0:Z.total)==null?void 0:De.allTokens)||0,E=((Be=(Fe=o.usage)==null?void 0:Fe.total)==null?void 0:Be.allTokens)||0),S.value==="lastUsed"&&(W=I.lastUsedAt?new Date(I.lastUsedAt).getTime():0,E=o.lastUsedAt?new Date(o.lastUsedAt).getTime():0),S.value==="status"&&(W=I.isActive?1:0,E=o.isActive?1:0),WE?v.value==="asc"?1:-1:0}):i}),ee=async(i=!1)=>{K.value=!0;try{const l={};Y.value!=="all"&&(l.platform=Y.value),N.value!=="all"&&(l.groupId=N.value);const I=[];if(Y.value==="all")I.push(V.get("/admin/claude-accounts",{params:l}),V.get("/admin/claude-console-accounts",{params:l}),V.get("/admin/bedrock-accounts",{params:l}),V.get("/admin/gemini-accounts",{params:l}));else switch(Y.value){case"claude":I.push(V.get("/admin/claude-accounts",{params:l}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"claude-console":I.push(Promise.resolve({success:!0,data:[]}),V.get("/admin/claude-console-accounts",{params:l}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"bedrock":I.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/bedrock-accounts",{params:l}),Promise.resolve({success:!0,data:[]}));break;case"gemini":I.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),V.get("/admin/gemini-accounts",{params:l}));break}await Promise.all([Ce(i),f(i)]),await d(i);const[o,W,E,oe]=await Promise.all(I),Q=[];if(o.success){const X=(o.data||[]).map(O=>{const r=L.value.filter(a=>a.claudeAccountId===O.id).length,t=B.value.get(O.id)||null;return{...O,platform:"claude",boundApiKeysCount:r,groupInfo:t}});Q.push(...X)}if(W.success){const X=(W.data||[]).map(O=>{const r=B.value.get(O.id)||null;return{...O,platform:"claude-console",boundApiKeysCount:0,groupInfo:r}});Q.push(...X)}if(E.success){const X=(E.data||[]).map(O=>{const r=B.value.get(O.id)||null;return{...O,platform:"bedrock",boundApiKeysCount:0,groupInfo:r}});Q.push(...X)}if(oe.success){const X=(oe.data||[]).map(O=>{const r=L.value.filter(a=>a.geminiAccountId===O.id).length,t=B.value.get(O.id)||null;return{...O,platform:"gemini",boundApiKeysCount:r,groupInfo:t}});Q.push(...X)}G.value=Q}catch{h("加载账户失败","error")}finally{K.value=!1}},re=i=>{i&&(S.value===i?v.value=v.value==="asc"?"desc":"asc":(S.value=i,v.value="asc"))},ue=i=>{if(i==null)return"0";const l=Number(i);return l>=1e6?Math.floor(l/1e6).toLocaleString()+"M":l.toLocaleString()},ke=i=>{if(!i)return"从未使用";const l=new Date(i),o=new Date-l;return o<6e4?"刚刚":o<36e5?`${Math.floor(o/6e4)} 分钟前`:o<864e5?`${Math.floor(o/36e5)} 小时前`:o<6048e5?`${Math.floor(o/864e5)} 天前`:l.toLocaleDateString("zh-CN")},Ce=async(i=!1)=>{if(!(!i&&P.value))try{const l=await V.get("/admin/api-keys");l.success&&(L.value=l.data||[],P.value=!0)}catch(l){console.error("Failed to load API keys:",l)}},f=async(i=!1)=>{if(!(!i&&p.value))try{const l=await V.get("/admin/account-groups");l.success&&(z.value=l.data||[],p.value=!0)}catch(l){console.error("Failed to load account groups:",l)}},d=async(i=!1)=>{if(!(!i&&R.value))try{B.value.clear();for(const l of z.value)try{const I=await V.get(`/admin/account-groups/${l.id}/members`);I.success&&(I.data||[]).forEach(W=>{B.value.set(W.id,l)})}catch(I){console.error(`Failed to load members for group ${l.id}:`,I)}R.value=!0}catch(l){console.error("Failed to load group members:",l)}},A=()=>{P.value=!1,p.value=!1,R.value=!1,B.value.clear()},te=()=>{ee()},ye=()=>{ee()},pe=i=>{if(!i||!i.host||!i.port)return null;const l=i.type==="socks5"?"S5":i.type.toUpperCase();let I=i.host;I.length>15&&(I=I.substring(0,12)+"...");let o=`${l}://${I}:${i.port}`;return i.username&&(o=`${l}://***@${I}:${i.port}`),o},we=(i,l)=>{if(!i||!l)return"--";const I=new Date(i),o=new Date(l),W=I.getHours().toString().padStart(2,"0"),E=I.getMinutes().toString().padStart(2,"0"),oe=o.getHours().toString().padStart(2,"0"),Q=o.getMinutes().toString().padStart(2,"0");return`${W}:${E} - ${oe}:${Q}`},me=i=>{if(!i||i<=0)return"已结束";const l=Math.floor(i/60),I=i%60;return l>0?`${l}小时${I}分钟`:`${I}分钟`},Te=()=>{j.value=!0},Ae=i=>{be.value=i,$.value=!0},he=async i=>{const l=L.value.filter(o=>o.claudeAccountId===i.id||o.geminiAccountId===i.id).length;if(l>0){h(`无法删除此账号,有 ${l} 个API Key绑定到此账号,请先解绑所有API Key`,"error");return}if(await q("删除账户",`确定要删除账户 "${i.name}" 吗?
此操作不可恢复。`,"删除","取消"))try{let o;i.platform==="claude"?o=`/admin/claude-accounts/${i.id}`:i.platform==="claude-console"?o=`/admin/claude-console-accounts/${i.id}`:i.platform==="bedrock"?o=`/admin/bedrock-accounts/${i.id}`:o=`/admin/gemini-accounts/${i.id}`;const W=await V.delete(o);W.success?(h("账户已删除","success"),R.value=!1,ee()):h(W.message||"删除失败","error")}catch{h("删除失败","error")}},Ue=async i=>{if(!i.isRefreshing)try{i.isRefreshing=!0;const l=await V.post(`/admin/claude-accounts/${i.id}/refresh`);l.success?(h("Token刷新成功","success"),ee()):h(l.message||"Token刷新失败","error")}catch{h("Token刷新失败","error")}finally{i.isRefreshing=!1}},ne=async i=>{if(i.isResetting)return;let l=!1;if(window.showConfirm?l=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):l=confirm("确定要重置此账户的所有异常状态吗?"),!!l)try{i.isResetting=!0;const I=await V.post(`/admin/claude-accounts/${i.id}/reset-status`);I.success?(h("账户状态已重置","success"),ee()):h(I.message||"状态重置失败","error")}catch{h("状态重置失败","error")}finally{i.isResetting=!1}},$e=async i=>{if(!i.isTogglingSchedulable)try{i.isTogglingSchedulable=!0;let l;if(i.platform==="claude")l=`/admin/claude-accounts/${i.id}/toggle-schedulable`;else if(i.platform==="claude-console")l=`/admin/claude-console-accounts/${i.id}/toggle-schedulable`;else if(i.platform==="bedrock")l=`/admin/bedrock-accounts/${i.id}/toggle-schedulable`;else if(i.platform==="gemini")l=`/admin/gemini-accounts/${i.id}/toggle-schedulable`;else{h("该账户类型暂不支持调度控制","warning");return}const I=await V.put(l);I.success?(i.schedulable=I.schedulable,h(I.schedulable?"已启用调度":"已禁用调度","success")):h(I.message||"操作失败","error")}catch{h("切换调度状态失败","error")}finally{i.isTogglingSchedulable=!1}},Ie=()=>{j.value=!1,h("账户创建成功","success"),A(),ee()},Se=()=>{$.value=!1,h("账户更新成功","success"),R.value=!1,ee()},Ve=i=>i.status==="blocked"?"已封锁":i.status==="unauthorized"?"异常":i.isRateLimited||i.status==="rate_limited"||i.rateLimitStatus&&i.rateLimitStatus.isRateLimited||i.rateLimitStatus==="limited"?"限流中":i.status==="error"||!i.isActive?"错误":i.schedulable===!1?"已暂停":"正常",Ke=i=>i.status==="blocked"||i.status==="unauthorized"?"bg-red-100 text-red-800":i.isRateLimited||i.status==="rate_limited"||i.rateLimitStatus&&i.rateLimitStatus.isRateLimited||i.rateLimitStatus==="limited"?"bg-orange-100 text-orange-800":i.status==="error"||!i.isActive?"bg-red-100 text-red-800":i.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",je=i=>i.status==="blocked"||i.status==="unauthorized"?"bg-red-500":i.isRateLimited||i.status==="rate_limited"||i.rateLimitStatus&&i.rateLimitStatus.isRateLimited||i.rateLimitStatus==="limited"?"bg-orange-500":i.status==="error"||!i.isActive?"bg-red-500":i.schedulable===!1?"bg-gray-500":"bg-green-500",Me=i=>ke(i),Le=async i=>{if(!D.value[i.id])try{D.value[i.id]=!0;const l=await V.post(`/admin/claude-accounts/${i.id}/refresh`);l.success?(h("Token刷新成功","success"),ee()):h(l.message||"Token刷新失败","error")}catch{h("Token刷新失败","error")}finally{D.value[i.id]=!1}};return _(T,i=>{const l={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};l[i]&&re(l[i])}),Je(()=>{ee(!0)}),(i,l)=>{const I=Ze;return n(),u("div",Ro,[e("div",Go,[e("div",Po,[l[19]||(l[19]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 sm:mb-2 sm:text-xl"},"账户管理"),e("p",{class:"text-sm text-gray-600 sm:text-base"},"管理您的 Claude 和 Gemini 账户及代理配置")],-1)),e("div",Wo,[e("div",zo,[e("div",Eo,[l[13]||(l[13]=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)),de(We,{modelValue:T.value,"onUpdate:modelValue":l[0]||(l[0]=o=>T.value=o),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:ae.value,placeholder:"选择排序",onChange:l[1]||(l[1]=o=>re())},null,8,["modelValue","options"])]),e("div",Oo,[l[14]||(l[14]=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)),de(We,{modelValue:Y.value,"onUpdate:modelValue":l[2]||(l[2]=o=>Y.value=o),icon:"fa-server","icon-color":"text-blue-500",options:s.value,placeholder:"选择平台",onChange:te},null,8,["modelValue","options"])]),e("div",Fo,[l[15]||(l[15]=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)),de(We,{modelValue:N.value,"onUpdate:modelValue":l[3]||(l[3]=o=>N.value=o),icon:"fa-layer-group","icon-color":"text-purple-500",options:x.value,placeholder:"选择分组",onChange:ye},null,8,["modelValue","options"])]),e("div",Bo,[de(I,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:lt(()=>[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 sm:w-auto",disabled:K.value,onClick:[l[4]||(l[4]=Re(o=>ee(!0),["ctrl","exact"])),l[5]||(l[5]=Re(o=>ee(!1),["exact"])),l[6]||(l[6]=Re(o=>ee(!0),["meta","exact"]))]},[l[16]||(l[16]=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:M(["fas relative text-green-500",K.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),l[17]||(l[17]=e("span",{class:"relative"},"刷新",-1))],8,qo)]),_:1})])]),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:Re(Te,["stop"])},l[18]||(l[18]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])]),K.value?(n(),u("div",No,l[20]||(l[20]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"正在加载账户...",-1)]))):ie.value.length===0?(n(),u("div",Ho,l[21]||(l[21]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400"},"点击上方按钮添加您的第一个账户",-1)]))):(n(),u("div",_o,[e("table",Jo,[e("thead",Yo,[e("tr",null,[e("th",{class:"w-[22%] 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",onClick:l[7]||(l[7]=o=>re("name"))},[l[22]||(l[22]=C(" 名称 ",-1)),S.value==="name"?(n(),u("i",{key:0,class:M(["fas",v.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Qo))]),e("th",{class:"w-[15%] min-w-[120px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100",onClick:l[8]||(l[8]=o=>re("platform"))},[l[23]||(l[23]=C(" 平台/类型 ",-1)),S.value==="platform"?(n(),u("i",{key:0,class:M(["fas",v.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Xo))]),e("th",{class:"w-[12%] 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",onClick:l[9]||(l[9]=o=>re("status"))},[l[24]||(l[24]=C(" 状态 ",-1)),S.value==="status"?(n(),u("i",{key:0,class:M(["fas",v.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",Zo))]),e("th",{class:"w-[8%] 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",onClick:l[10]||(l[10]=o=>re("priority"))},[l[25]||(l[25]=C(" 优先级 ",-1)),S.value==="priority"?(n(),u("i",{key:0,class:M(["fas",v.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),u("i",ea))]),l[26]||(l[26]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700"}," 代理 ",-1)),l[27]||(l[27]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700"}," 今日使用 ",-1)),l[28]||(l[28]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700"}," 会话窗口 ",-1)),l[29]||(l[29]=e("th",{class:"w-[8%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700"}," 最后使用 ",-1)),l[30]||(l[30]=e("th",{class:"w-[15%] min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700"}," 操作 ",-1))])]),e("tbody",ta,[(n(!0),u(xe,null,ve(ie.value,o=>{var W;return n(),u("tr",{key:o.id,class:"table-row"},[e("td",sa,[e("div",la,[l[35]||(l[35]=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",oa,[e("div",aa,[e("div",{class:"truncate text-sm font-semibold text-gray-900",title:o.name},b(o.name),9,ra),o.accountType==="dedicated"?(n(),u("span",na,l[31]||(l[31]=[e("i",{class:"fas fa-lock mr-1"},null,-1),C("专属 ",-1)]))):o.accountType==="group"?(n(),u("span",ia,l[32]||(l[32]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),C("分组调度 ",-1)]))):(n(),u("span",ua,l[33]||(l[33]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),C("共享 ",-1)]))),o.groupInfo?(n(),u("span",{key:3,class:"ml-1 inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600",title:`所属分组: ${o.groupInfo.name}`},[l[34]||(l[34]=e("i",{class:"fas fa-folder mr-1"},null,-1)),C(b(o.groupInfo.name),1)],8,da)):w("",!0)]),e("div",{class:"truncate text-xs text-gray-500",title:o.id},b(o.id),9,pa)])])]),e("td",ma,[e("div",ca,[o.platform==="gemini"?(n(),u("div",fa,[l[36]||(l[36]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),l[37]||(l[37]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),l[38]||(l[38]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",xa,b(o.scopes&&o.scopes.length>0?"OAuth":"传统"),1)])):o.platform==="claude-console"?(n(),u("div",va,l[39]||(l[39]=[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)]))):o.platform==="bedrock"?(n(),u("div",ga,l[40]||(l[40]=[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)]))):(n(),u("div",ya,[l[41]||(l[41]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),l[42]||(l[42]=e("span",{class:"text-xs font-semibold text-indigo-800"},"Claude",-1)),l[43]||(l[43]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",ba,b(o.scopes&&o.scopes.length>0?"OAuth":"传统"),1)]))])]),e("td",ka,[e("div",wa,[e("span",{class:M(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",o.status==="blocked"?"bg-orange-100 text-orange-800":o.status==="unauthorized"?"bg-red-100 text-red-800":o.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:M(["mr-2 h-2 w-2 rounded-full",o.status==="blocked"?"bg-orange-500":o.status==="unauthorized"?"bg-red-500":o.isActive?"bg-green-500":"bg-red-500"])},null,2),C(" "+b(o.status==="blocked"?"已封锁":o.status==="unauthorized"?"异常":o.isActive?"正常":"异常"),1)],2),o.rateLimitStatus&&o.rateLimitStatus.isRateLimited||o.rateLimitStatus==="limited"?(n(),u("span",ha,[l[44]||(l[44]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),l[45]||(l[45]=C(" 限流中 ",-1)),o.rateLimitStatus&&typeof o.rateLimitStatus=="object"&&o.rateLimitStatus.minutesRemaining>0?(n(),u("span",$a,"("+b(o.rateLimitStatus.minutesRemaining)+"分钟)",1)):w("",!0)])):w("",!0),o.schedulable===!1?(n(),u("span",Ca,l[46]||(l[46]=[e("i",{class:"fas fa-pause-circle mr-1"},null,-1),C(" 不可调度 ",-1)]))):w("",!0),o.status==="blocked"&&o.errorMessage?(n(),u("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500",title:o.errorMessage},b(o.errorMessage),9,Ta)):w("",!0),o.accountType==="dedicated"?(n(),u("span",Aa," 绑定: "+b(o.boundApiKeysCount||0)+" 个API Key ",1)):w("",!0)])]),e("td",Ua,[o.platform==="claude"||o.platform==="claude-console"||o.platform==="bedrock"?(n(),u("div",Ia,[e("div",Sa,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Pe({width:101-(o.priority||50)+"%"})},null,4)]),e("span",Va,b(o.priority||50),1)])):(n(),u("div",Ka,l[47]||(l[47]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",ja,[pe(o.proxy)?(n(),u("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:pe(o.proxy)},b(pe(o.proxy)),9,Ma)):(n(),u("div",La,"无代理"))]),e("td",Da,[o.usage&&o.usage.daily?(n(),u("div",Ra,[e("div",Ga,[l[48]||(l[48]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Pa,b(o.usage.daily.requests||0)+" 次",1)]),e("div",Wa,[l[49]||(l[49]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",za,b(ue(o.usage.daily.allTokens||0))+" tokens",1)]),o.usage.averages&&o.usage.averages.rpm>0?(n(),u("div",Ea," 平均 "+b(o.usage.averages.rpm.toFixed(2))+" RPM ",1)):w("",!0)])):(n(),u("div",Oa,"暂无数据"))]),e("td",Fa,[o.platform==="claude"&&o.sessionWindow&&o.sessionWindow.hasActiveWindow?(n(),u("div",Ba,[e("div",qa,[e("div",Na,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-blue-500 to-indigo-600 transition-all duration-300",style:Pe({width:o.sessionWindow.progress+"%"})},null,4)]),e("span",Ha,b(o.sessionWindow.progress)+"% ",1)]),e("div",_a,[e("div",null,b(we(o.sessionWindow.windowStart,o.sessionWindow.windowEnd)),1),o.sessionWindow.remainingTime>0?(n(),u("div",Ja," 剩余 "+b(me(o.sessionWindow.remainingTime)),1)):w("",!0)])])):o.platform==="claude"?(n(),u("div",Ya,l[50]||(l[50]=[e("i",{class:"fas fa-minus"},null,-1)]))):(n(),u("div",Qa,l[51]||(l[51]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",Xa,b(ke(o.lastUsedAt)),1),e("td",Za,[e("div",er,[o.platform==="claude"&&o.scopes?(n(),u("button",{key:0,class:M(["rounded px-2.5 py-1 text-xs font-medium transition-colors",o.isRefreshing?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-blue-100 text-blue-700 hover:bg-blue-200"]),disabled:o.isRefreshing,title:o.isRefreshing?"刷新中...":"刷新Token",onClick:E=>Ue(o)},[e("i",{class:M(["fas fa-sync-alt",o.isRefreshing?"animate-spin":""])},null,2),l[52]||(l[52]=e("span",{class:"ml-1"},"刷新",-1))],10,tr)):w("",!0),o.platform==="claude"&&(o.status==="unauthorized"||o.status!=="active"||(W=o.rateLimitStatus)!=null&&W.isRateLimited||o.rateLimitStatus==="limited"||!o.isActive)?(n(),u("button",{key:1,class:M(["rounded px-2.5 py-1 text-xs font-medium transition-colors",o.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:o.isResetting,title:o.isResetting?"重置中...":"重置所有异常状态",onClick:E=>ne(o)},[e("i",{class:M(["fas fa-redo",o.isResetting?"animate-spin":""])},null,2),l[53]||(l[53]=e("span",{class:"ml-1"},"重置状态",-1))],10,sr)):w("",!0),e("button",{class:M(["rounded px-2.5 py-1 text-xs font-medium transition-colors",o.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":o.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:o.isTogglingSchedulable,title:o.schedulable?"点击禁用调度":"点击启用调度",onClick:E=>$e(o)},[e("i",{class:M(["fas",o.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",or,b(o.schedulable?"调度":"停用"),1)],10,lr),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:E=>Ae(o)},l[54]||(l[54]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,ar),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:E=>he(o)},l[55]||(l[55]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,rr)])])])}),128))])])])),!K.value&&ie.value.length>0?(n(),u("div",nr,[(n(!0),u(xe,null,ve(ie.value,o=>{var W,E,oe,Q,X,O,r,t;return n(),u("div",{key:o.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",ir,[e("div",ur,[e("div",{class:M(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",o.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":o.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:M(["text-sm text-white",o.platform==="claude"?"fas fa-brain":o.platform==="bedrock"?"fab fa-aws":"fas fa-robot"])},null,2)],2),e("div",null,[e("h4",dr,b(o.name||o.email),1),e("div",pr,[e("span",mr,b(o.platform),1),l[56]||(l[56]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",cr,b(o.type),1)])])]),e("span",{class:M(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",Ke(o)])},[e("div",{class:M(["mr-1.5 h-1.5 w-1.5 rounded-full",je(o)])},null,2),C(" "+b(Ve(o)),1)],2)]),e("div",fr,[e("div",null,[l[57]||(l[57]=e("p",{class:"text-xs text-gray-500"},"今日使用",-1)),e("p",xr,b(ue(((E=(W=o.usage)==null?void 0:W.daily)==null?void 0:E.requests)||0))+" 次 ",1),e("p",vr,b(ue(((Q=(oe=o.usage)==null?void 0:oe.daily)==null?void 0:Q.allTokens)||0))+" tokens ",1)]),e("div",null,[l[58]||(l[58]=e("p",{class:"text-xs text-gray-500"},"总使用量",-1)),e("p",gr,b(ue(((O=(X=o.usage)==null?void 0:X.total)==null?void 0:O.requests)||0))+" 次 ",1),e("p",yr,b(ue(((t=(r=o.usage)==null?void 0:r.total)==null?void 0:t.allTokens)||0))+" tokens ",1)])]),e("div",br,[o.platform==="claude"&&o.sessionWindow&&o.sessionWindow.hasActiveWindow?(n(),u("div",kr,[e("div",wr,[l[59]||(l[59]=e("span",{class:"font-medium text-gray-600"},"会话窗口",-1)),e("span",hr,b(o.sessionWindow.progress)+"% ",1)]),e("div",$r,[e("div",{class:"h-full bg-gradient-to-r from-blue-500 to-indigo-600 transition-all duration-300",style:Pe({width:o.sessionWindow.progress+"%"})},null,4)]),e("div",Cr,[e("span",Tr,b(we(o.sessionWindow.windowStart,o.sessionWindow.windowEnd)),1),o.sessionWindow.remainingTime>0?(n(),u("span",Ar," 剩余 "+b(me(o.sessionWindow.remainingTime)),1)):(n(),u("span",Ur," 已结束 "))])])):w("",!0),e("div",Ir,[l[60]||(l[60]=e("span",{class:"text-gray-500"},"最后使用",-1)),e("span",Sr,b(o.lastUsedAt?Me(o.lastUsedAt):"从未使用"),1)]),o.proxyConfig&&o.proxyConfig.type!=="none"?(n(),u("div",Vr,[l[61]||(l[61]=e("span",{class:"text-gray-500"},"代理",-1)),e("span",Kr,b(o.proxyConfig.type.toUpperCase()),1)])):w("",!0),e("div",jr,[l[62]||(l[62]=e("span",{class:"text-gray-500"},"优先级",-1)),e("span",Mr,b(o.priority||0),1)])]),e("div",Lr,[o.platform==="claude"&&o.type==="oauth"?(n(),u("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-blue-50 px-3 py-2 text-xs text-blue-600 transition-colors hover:bg-blue-100",disabled:D.value[o.id],onClick:a=>Le(o)},[e("i",{class:M(["fas fa-sync-alt",{"animate-spin":D.value[o.id]}])},null,2),C(" "+b(D.value[o.id]?"刷新中":"刷新"),1)],8,Dr)):w("",!0),e("button",{class:M(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",o.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:o.isTogglingSchedulable,onClick:a=>$e(o)},[e("i",{class:M(["fas",o.schedulable?"fa-pause":"fa-play"])},null,2),C(" "+b(o.schedulable?"暂停":"启用"),1)],10,Rr),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:a=>Ae(o)},l[63]||(l[63]=[e("i",{class:"fas fa-edit mr-1"},null,-1),C(" 编辑 ",-1)]),8,Gr),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:a=>he(o)},l[64]||(l[64]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Pr)])])}),128))])):w("",!0)]),j.value?(n(),ge(_e,{key:0,onClose:l[11]||(l[11]=o=>j.value=!1),onSuccess:Ie})):w("",!0),$.value?(n(),ge(_e,{key:1,account:be.value,onClose:l[12]||(l[12]=o=>$.value=!1),onSuccess:Se},null,8,["account"])):w("",!0),de(Xe,{"cancel-text":le(m).cancelText,"confirm-text":le(m).confirmText,message:le(m).message,show:le(J),title:le(m).title,onCancel:le(y),onConfirm:le(c)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"])])}}},Nr=ot(Wr,[["__scopeId","data-v-102b6582"]]);export{Nr as default};