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