import{a as ms}from"./element-plus-CqiD73Lu.js";import{r as T,aP as ys,o as re,V as os,x as i,y as n,z as e,L as f,K as x,al as ye,aT as vt,O as $,aq as K,aa as cs,P as m,aV as ns,aY as Zt,C as S,c as pe,Z as xs,q as Bt,I as Fe,an as ge,Q as xe,ac as _e,a5 as Ht,R as Je,B as Me,u as Oe,aX as fs,D as bs,J as St,Y as Ft}from"./vue-vendor-Bsazo-x0.js";import{c as M,s as V,_ as Jt,a as vs}from"./index-BvtLV4Ic.js";import{C as is}from"./ConfirmModal-XRt-Z-9z.js";import{C as ks}from"./chart-yFHxLHpB.js";import{C as Yt}from"./CustomDropdown-CYApkol8.js";import"./vendor-Dr8jvgFu.js";const Qt=T(!1),ss=T({title:"",message:"",confirmText:"继续",cancelText:"取消"}),ft=T(null);function ds(){return{showConfirmModal:Qt,confirmOptions:ss,showConfirm:(me,_,N="继续",se="取消")=>new Promise(h=>{ss.value={title:me,message:_,confirmText:N,cancelText:se},ft.value=h,Qt.value=!0}),handleConfirm:()=>{Qt.value=!1,ft.value&&(ft.value(!0),ft.value=null)},handleCancel:()=>{Qt.value=!1,ft.value&&(ft.value(!1),ft.value=null)}}}const us=ys("accounts",()=>{const Q=T([]),he=T([]),p=T([]),me=T([]),_=T([]),N=T([]),se=T([]),h=T([]),k=T(!1),v=T(null),R=T(""),G=T("asc"),B=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/claude-accounts");if(y.success)Q.value=y.data||[];else throw new Error(y.message||"获取Claude账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},ee=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/claude-console-accounts");if(y.success)he.value=y.data||[];else throw new Error(y.message||"获取Claude Console账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},Z=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/bedrock-accounts");if(y.success)p.value=y.data||[];else throw new Error(y.message||"获取Bedrock账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},J=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/gemini-accounts");if(y.success)me.value=y.data||[];else throw new Error(y.message||"获取Gemini账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},q=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/openai-accounts");if(y.success)_.value=y.data||[];else throw new Error(y.message||"获取OpenAI账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},A=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/azure-openai-accounts");if(y.success)N.value=y.data||[];else throw new Error(y.message||"获取Azure OpenAI账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},b=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/openai-responses-accounts");if(y.success)se.value=y.data||[];else throw new Error(y.message||"获取OpenAI-Responses账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}},P=async()=>{k.value=!0,v.value=null;try{const y=await M.get("/admin/droid-accounts");if(y.success)h.value=y.data||[];else throw new Error(y.message||"获取Droid账户失败")}catch(y){throw v.value=y.message,y}finally{k.value=!1}};return{claudeAccounts:Q,claudeConsoleAccounts:he,bedrockAccounts:p,geminiAccounts:me,openaiAccounts:_,azureOpenaiAccounts:N,openaiResponsesAccounts:se,droidAccounts:h,loading:k,error:v,sortBy:R,sortOrder:G,fetchClaudeAccounts:B,fetchClaudeConsoleAccounts:ee,fetchBedrockAccounts:Z,fetchGeminiAccounts:J,fetchOpenAIAccounts:q,fetchAzureOpenAIAccounts:A,fetchOpenAIResponsesAccounts:b,fetchDroidAccounts:P,fetchAllAccounts:async()=>{k.value=!0,v.value=null;try{await Promise.all([B(),ee(),Z(),J(),q(),A(),b(),P()])}catch(y){throw v.value=y.message,y}finally{k.value=!1}},createClaudeAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/claude-accounts",y);if(g.success)return await B(),g.data;throw new Error(g.message||"创建Claude账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createClaudeConsoleAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/claude-console-accounts",y);if(g.success)return await ee(),g.data;throw new Error(g.message||"创建Claude Console账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createBedrockAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/bedrock-accounts",y);if(g.success)return await Z(),g.data;throw new Error(g.message||"创建Bedrock账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createGeminiAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/gemini-accounts",y);if(g.success)return await J(),g.data;throw new Error(g.message||"创建Gemini账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createOpenAIAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/openai-accounts",y);if(g.success)return await q(),g.data;throw new Error(g.message||"创建OpenAI账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createDroidAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/droid-accounts",y);if(g.success)return await P(),g.data;throw new Error(g.message||"创建Droid账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},updateDroidAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/droid-accounts/${y}`,g);if(I.success)return await P(),I.data;throw new Error(I.message||"更新Droid账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},createAzureOpenAIAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/azure-openai-accounts",y);if(g.success)return await A(),g.data;throw new Error(g.message||"创建Azure OpenAI账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},createOpenAIResponsesAccount:async y=>{k.value=!0,v.value=null;try{const g=await M.post("/admin/openai-responses-accounts",y);if(g.success)return await b(),g.data;throw new Error(g.message||"创建OpenAI-Responses账户失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},updateClaudeAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/claude-accounts/${y}`,g);if(I.success)return await B(),I;throw new Error(I.message||"更新Claude账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateClaudeConsoleAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/claude-console-accounts/${y}`,g);if(I.success)return await ee(),I;throw new Error(I.message||"更新Claude Console账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateBedrockAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/bedrock-accounts/${y}`,g);if(I.success)return await Z(),I;throw new Error(I.message||"更新Bedrock账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateGeminiAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/gemini-accounts/${y}`,g);if(I.success)return await J(),I;throw new Error(I.message||"更新Gemini账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateOpenAIAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/openai-accounts/${y}`,g);if(I.success)return await q(),I;throw new Error(I.message||"更新OpenAI账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateAzureOpenAIAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/azure-openai-accounts/${y}`,g);if(I.success)return await A(),I;throw new Error(I.message||"更新Azure OpenAI账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},updateOpenAIResponsesAccount:async(y,g)=>{k.value=!0,v.value=null;try{const I=await M.put(`/admin/openai-responses-accounts/${y}`,g);if(I.success)return await b(),I;throw new Error(I.message||"更新OpenAI-Responses账户失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},toggleAccount:async(y,g)=>{k.value=!0,v.value=null;try{let I;y==="claude"?I=`/admin/claude-accounts/${g}/toggle`:y==="claude-console"?I=`/admin/claude-console-accounts/${g}/toggle`:y==="bedrock"?I=`/admin/bedrock-accounts/${g}/toggle`:y==="gemini"?I=`/admin/gemini-accounts/${g}/toggle`:y==="openai"?I=`/admin/openai-accounts/${g}/toggle`:y==="azure_openai"?I=`/admin/azure-openai-accounts/${g}/toggle`:y==="openai-responses"?I=`/admin/openai-responses-accounts/${g}/toggle`:I=`/admin/openai-accounts/${g}/toggle`;const Se=await M.put(I);if(Se.success)return y==="claude"?await B():y==="claude-console"?await ee():y==="bedrock"?await Z():y==="gemini"?await J():y==="openai"?await q():y==="azure_openai"?await A():y==="openai-responses"?await b():await q(),Se;throw new Error(Se.message||"切换状态失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},deleteAccount:async(y,g)=>{k.value=!0,v.value=null;try{let I;y==="claude"?I=`/admin/claude-accounts/${g}`:y==="claude-console"?I=`/admin/claude-console-accounts/${g}`:y==="bedrock"?I=`/admin/bedrock-accounts/${g}`:y==="gemini"?I=`/admin/gemini-accounts/${g}`:y==="openai"?I=`/admin/openai-accounts/${g}`:y==="azure_openai"?I=`/admin/azure-openai-accounts/${g}`:y==="openai-responses"?I=`/admin/openai-responses-accounts/${g}`:I=`/admin/openai-accounts/${g}`;const Se=await M.delete(I);if(Se.success)return y==="claude"?await B():y==="claude-console"?await ee():y==="bedrock"?await Z():y==="gemini"?await J():y==="openai"?await q():y==="azure_openai"?await A():y==="openai-responses"?await b():await q(),Se;throw new Error(Se.message||"删除失败")}catch(I){throw v.value=I.message,I}finally{k.value=!1}},refreshClaudeToken:async y=>{k.value=!0,v.value=null;try{const g=await M.post(`/admin/claude-accounts/${y}/refresh`);if(g.success)return await B(),g;throw new Error(g.message||"Token刷新失败")}catch(g){throw v.value=g.message,g}finally{k.value=!1}},generateClaudeAuthUrl:async y=>{try{const g=await M.post("/admin/claude-accounts/generate-auth-url",y);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw v.value=g.message,g}},exchangeClaudeCode:async y=>{try{const g=await M.post("/admin/claude-accounts/exchange-code",y);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw v.value=g.message,g}},generateClaudeSetupTokenUrl:async y=>{try{const g=await M.post("/admin/claude-accounts/generate-setup-token-url",y);if(g.success)return g.data;throw new Error(g.message||"生成Setup Token URL失败")}catch(g){throw v.value=g.message,g}},exchangeClaudeSetupTokenCode:async y=>{try{const g=await M.post("/admin/claude-accounts/exchange-setup-token-code",y);if(g.success)return g.data;throw new Error(g.message||"交换Setup Token授权码失败")}catch(g){throw v.value=g.message,g}},generateGeminiAuthUrl:async y=>{try{const g=await M.post("/admin/gemini-accounts/generate-auth-url",y);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw v.value=g.message,g}},exchangeGeminiCode:async y=>{try{const g=await M.post("/admin/gemini-accounts/exchange-code",y);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw v.value=g.message,g}},generateOpenAIAuthUrl:async y=>{try{const g=await M.post("/admin/openai-accounts/generate-auth-url",y);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw v.value=g.message,g}},exchangeOpenAICode:async y=>{try{const g=await M.post("/admin/openai-accounts/exchange-code",y);if(g.success)return g.data;throw new Error(g.message||"交换授权码失败")}catch(g){throw v.value=g.message,g}},generateDroidAuthUrl:async y=>{v.value=null;try{const g=await M.post("/admin/droid-accounts/generate-auth-url",y);if(g.success)return g.data;throw new Error(g.message||"生成授权URL失败")}catch(g){throw v.value=g.message,g}},exchangeDroidCode:async y=>{v.value=null;try{return await M.post("/admin/droid-accounts/exchange-code",y)}catch(g){throw v.value=g.message,g}},sortAccounts:y=>{R.value===y?G.value=G.value==="asc"?"desc":"asc":(R.value=y,G.value="asc")},reset:()=>{Q.value=[],he.value=[],p.value=[],me.value=[],_.value=[],N.value=[],se.value=[],h.value=[],k.value=!1,v.value=null,R.value="",G.value="asc"}}}),hs={class:"space-y-4"},ws={class:"flex items-center justify-between"},$s={class:"flex cursor-pointer items-center"},As={key:0,class:"space-y-4 rounded-lg border border-gray-200 bg-gray-50 p-4 dark:border-gray-600 dark:bg-gray-800"},Cs={class:"relative"},Us={key:0,class:"mt-1 text-xs text-red-500"},Ts={key:1,class:"mt-1 text-xs text-green-500"},Is={class:"grid grid-cols-2 gap-4"},_s={class:"space-y-4"},Ks={class:"flex items-center"},Ss={key:0,class:"grid grid-cols-2 gap-4"},Ps={class:"relative"},Ms=["type"],Xt={__name:"ProxyConfig",props:{modelValue:{type:Object,default:()=>({enabled:!1,type:"socks5",host:"",port:"",username:"",password:""})}},emits:["update:modelValue"],setup(Q,{emit:he}){const p=Q,me=he,_=T({...p.modelValue}),N=T(!!(_.value.username||_.value.password)),se=T(!1),h=T(""),k=T(""),v=T(!1);re(()=>p.modelValue,q=>{JSON.stringify(q)!==JSON.stringify(_.value)&&(_.value={...q},N.value=!!(q.username||q.password))},{deep:!0}),re(()=>_.value.enabled,()=>{G()}),re(()=>_.value.type,()=>{G()}),re(()=>_.value.host,()=>{G()}),re(()=>_.value.port,()=>{G()}),re(()=>_.value.username,()=>{G()}),re(()=>_.value.password,()=>{G()}),re(N,q=>{q||(_.value.username="",_.value.password="",G())});let R=null;function G(){R&&clearTimeout(R),R=setTimeout(()=>{const q={..._.value};N.value||(q.username="",q.password=""),me("update:modelValue",q)},100)}function B(){if(k.value="",v.value=!1,!!h.value)try{const q=h.value.split("#")[0].trim();if(!q)return;const A=/^(socks5|https?):\/\/(?:([^:@]+):([^@]+)@)?([^:]+):(\d+)$/i,b=q.match(A);if(!b){const be=/^([^:]+):(\d+)$/,Ie=q.match(be);if(Ie){_.value.type="socks5",_.value.host=Ie[1],_.value.port=Ie[2],_.value.username="",_.value.password="",N.value=!1,v.value=!0,G(),setTimeout(()=>{v.value=!1},3e3);return}k.value="无效的代理URL格式,请检查输入";return}const[,P,te,O,U,D]=b;_.value.type=P.toLowerCase(),_.value.host=U,_.value.port=D,te&&O?(_.value.username=decodeURIComponent(te),_.value.password=decodeURIComponent(O),N.value=!0):(_.value.username="",_.value.password="",N.value=!1),v.value=!0,G(),setTimeout(()=>{v.value=!1},3e3)}catch{k.value="解析失败,请检查URL格式"}}function ee(){h.value="",k.value="",v.value=!1}function Z(){setTimeout(()=>{B()},0)}function J(){const q=h.value.trim();q.includes("://")?(/^(socks5|https?):\/\/[^:]+:\d+/i.test(q)||/^(socks5|https?):\/\/[^:@]+:[^@]+@[^:]+:\d+/i.test(q))&&B():/^[^:]+:\d{2,5}$/.test(q)&&B()}return os(()=>{R&&clearTimeout(R)}),(q,A)=>(n(),i("div",hs,[e("div",ws,[A[10]||(A[10]=e("h4",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},"代理设置 (可选)",-1)),e("label",$s,[x(e("input",{"onUpdate:modelValue":A[0]||(A[0]=b=>_.value.enabled=b),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ye,_.value.enabled]]),A[9]||(A[9]=e("span",{class:"ml-2 text-sm text-gray-700 dark:text-gray-300"},"启用代理",-1))])]),_.value.enabled?(n(),i("div",As,[A[22]||(A[22]=vt('

配置代理以访问受限的网络资源。支持 SOCKS5 和 HTTP 代理。

请确保代理服务器稳定可用,否则会影响账户的正常使用。

',1)),e("div",null,[A[14]||(A[14]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},[$(" 快速配置 "),e("span",{class:"ml-1 text-xs font-normal text-gray-500 dark:text-gray-400"}," (粘贴完整代理URL自动填充) ")],-1)),e("div",Cs,[x(e("input",{"onUpdate:modelValue":A[1]||(A[1]=b=>h.value=b),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: socks5://username:password@host:port 或 http://host:port",type:"text",onInput:J,onKeyup:cs(B,["enter"]),onPaste:Z},null,544),[[K,h.value]]),h.value?(n(),i("button",{key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:ee},A[11]||(A[11]=[e("i",{class:"fas fa-times"},null,-1)]))):f("",!0)]),k.value?(n(),i("p",Us,[A[12]||(A[12]=e("i",{class:"fas fa-exclamation-circle mr-1"},null,-1)),$(" "+m(k.value),1)])):v.value?(n(),i("p",Ts,A[13]||(A[13]=[e("i",{class:"fas fa-check-circle mr-1"},null,-1),$(" 代理配置已自动填充 ",-1)]))):f("",!0)]),A[23]||(A[23]=e("div",{class:"my-3 border-t border-gray-200 dark:border-gray-600"},null,-1)),e("div",null,[A[16]||(A[16]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"代理类型",-1)),x(e("select",{"onUpdate:modelValue":A[2]||(A[2]=b=>_.value.type=b),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200"},A[15]||(A[15]=[e("option",{value:"socks5"},"SOCKS5",-1),e("option",{value:"http"},"HTTP",-1),e("option",{value:"https"},"HTTPS",-1)]),512),[[ns,_.value.type]])]),e("div",Is,[e("div",null,[A[17]||(A[17]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"主机地址",-1)),x(e("input",{"onUpdate:modelValue":A[3]||(A[3]=b=>_.value.host=b),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 192.168.1.100",type:"text"},null,512),[[K,_.value.host]])]),e("div",null,[A[18]||(A[18]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"端口",-1)),x(e("input",{"onUpdate:modelValue":A[4]||(A[4]=b=>_.value.port=b),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如: 1080",type:"number"},null,512),[[K,_.value.port]])])]),e("div",_s,[e("div",Ks,[x(e("input",{id:"proxyAuth","onUpdate:modelValue":A[5]||(A[5]=b=>N.value=b),class:"h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500",type:"checkbox"},null,512),[[ye,N.value]]),A[19]||(A[19]=e("label",{class:"ml-2 cursor-pointer text-sm text-gray-700 dark:text-gray-300",for:"proxyAuth"}," 需要身份验证 ",-1))]),N.value?(n(),i("div",Ss,[e("div",null,[A[20]||(A[20]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"用户名",-1)),x(e("input",{"onUpdate:modelValue":A[6]||(A[6]=b=>_.value.username=b),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理用户名",type:"text"},null,512),[[K,_.value.username]])]),e("div",null,[A[21]||(A[21]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"},"密码",-1)),e("div",Ps,[x(e("input",{"onUpdate:modelValue":A[7]||(A[7]=b=>_.value.password=b),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"代理密码",type:se.value?"text":"password"},null,8,Ms),[[Zt,_.value.password]]),e("button",{class:"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:A[8]||(A[8]=b=>se.value=!se.value)},[e("i",{class:S(se.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])])])])):f("",!0)]),A[24]||(A[24]=e("div",{class:"rounded-lg border border-blue-200 bg-blue-50 p-3 dark:border-blue-700 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-info-circle mr-1"}),e("strong",null,"提示:"),$("代理设置将用于所有与此账户相关的API请求。请确保代理服务器支持HTTPS流量转发。 ")])],-1))])):f("",!0)]))}},Ds={class:"space-y-6"},Vs={key:0},Rs={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},zs={class:"flex items-start gap-4"},js={class:"flex-1"},Os={class:"space-y-4"},Ls={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Es={class:"flex items-start gap-3"},Ns={class:"flex-1"},qs=["disabled"],Ws={key:0,class:"fas fa-link mr-2"},Gs={key:1,class:"loading-spinner mr-2"},Fs={key:1,class:"space-y-3"},Qs={class:"flex items-center gap-2"},Bs=["value"],Hs={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Js={class:"flex items-start gap-3"},Ys={class:"flex-1"},Zs={class:"space-y-3"},Xs={key:1},ea={class:"rounded-lg border border-green-200 bg-green-50 p-6 dark:border-green-700 dark:bg-green-900/30"},ta={class:"flex items-start gap-4"},sa={class:"flex-1"},aa={class:"space-y-4"},ra={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},la={class:"flex items-start gap-3"},oa={class:"flex-1"},na=["disabled"],ia={key:0,class:"fas fa-link mr-2"},da={key:1,class:"loading-spinner mr-2"},ua={key:1,class:"space-y-3"},pa={class:"flex items-center gap-2"},ga=["value"],ma={class:"rounded-lg border border-green-300 bg-white/80 p-4 dark:border-green-600 dark:bg-gray-800/80"},ya={class:"flex items-start gap-3"},ca={class:"flex-1"},xa={class:"space-y-3"},fa={key:2},ba={class:"rounded-lg border border-orange-200 bg-orange-50 p-6 dark:border-orange-700 dark:bg-orange-900/30"},va={class:"flex items-start gap-4"},ka={class:"flex-1"},ha={class:"space-y-4"},wa={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},$a={class:"flex items-start gap-3"},Aa={class:"flex-1"},Ca=["disabled"],Ua={key:0,class:"fas fa-link mr-2"},Ta={key:1,class:"loading-spinner mr-2"},Ia={key:1,class:"space-y-3"},_a={class:"flex items-center gap-2"},Ka=["value"],Sa={class:"rounded-lg border border-orange-300 bg-white/80 p-4 dark:border-orange-600 dark:bg-gray-800/80"},Pa={class:"flex items-start gap-3"},Ma={class:"flex-1"},Da={class:"space-y-3"},Va={key:3},Ra={class:"rounded-lg border border-cyan-200 bg-cyan-50 p-6 dark:border-cyan-700 dark:bg-cyan-900/30"},za={class:"flex items-start gap-4"},ja={class:"flex-1"},Oa={class:"space-y-4"},La={class:"rounded-lg border border-cyan-300 bg-white/80 p-4 dark:border-cyan-600 dark:bg-gray-800/80"},Ea={class:"flex items-start gap-3"},Na={class:"flex-1"},qa=["disabled"],Wa={key:0,class:"fas fa-link mr-2"},Ga={key:1,class:"loading-spinner mr-2"},Fa={key:1,class:"space-y-4"},Qa={class:"space-y-2"},Ba={class:"flex flex-col gap-2 rounded-md border border-cyan-200 bg-white p-3 dark:border-cyan-700 dark:bg-gray-800"},Ha={class:"flex items-center gap-2"},Ja=["value"],Ya={class:"space-y-2"},Za={class:"flex items-center justify-between rounded-md border border-cyan-200 bg-cyan-50 px-4 py-3 dark:border-cyan-700 dark:bg-cyan-900/30"},Xa={class:"font-mono text-xl font-semibold text-cyan-700 dark:text-cyan-200"},er={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},tr={class:"flex gap-3 pt-4"},sr=["disabled"],ar={key:0,class:"loading-spinner mr-2"},rr={__name:"OAuthFlow",props:{platform:{type:String,required:!0},proxy:{type:Object,default:null}},emits:["success","back"],setup(Q,{emit:he}){const p=Q,me=he,_=us(),N=T(!1),se=T(!1),h=T(""),k=T(""),v=T(!1),R=T(""),G=T(""),B=T(""),ee=T(""),Z=T(0);let J=null;const q=pe(()=>p.platform==="droid"?!!R.value:h.value&&k.value.trim()),A=pe(()=>{if(!Z.value||Z.value<=0)return"00:00";const s=Math.floor(Z.value/60),d=Z.value%60;return`${s.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}`}),b=s=>{if(P(),!s||s<=0){Z.value=0;return}Z.value=Math.floor(s),J=setInterval(()=>{Z.value<=1?(Z.value=0,P()):Z.value-=1},1e3)},P=()=>{J&&(clearInterval(J),J=null)};re(k,s=>{if(p.platform==="droid"||!s||typeof s!="string")return;const d=s.trim();if(!d)return;if(d.startsWith("http://")||d.startsWith("https://"))if(d.startsWith("http://localhost:45462")||d.startsWith("http://localhost:1455"))try{const oe=new URL(d).searchParams.get("code");oe?(k.value=oe,V("成功提取授权码!","success"),console.log("Successfully extracted authorization code from URL")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch(Y){console.error("Failed to parse URL:",Y),V("链接格式错误,请检查是否为完整的 URL","error")}else if(p.platform==="gemini"||p.platform==="openai")try{const oe=new URL(d).searchParams.get("code");oe&&(k.value=oe,V("成功提取授权码!","success"))}catch{}else V("请粘贴以 http://localhost:1455 或 http://localhost:45462 开头的链接","error")});const te=async()=>{var s;P(),h.value="",k.value="",G.value="",B.value="",ee.value="",Z.value=0,R.value="",v.value=!1,N.value=!0;try{const d=(s=p.proxy)!=null&&s.enabled?{proxy:{type:p.proxy.type,host:p.proxy.host,port:parseInt(p.proxy.port),username:p.proxy.username||null,password:p.proxy.password||null}}:{};if(p.platform==="claude"){const j=await _.generateClaudeAuthUrl(d);h.value=j.authUrl,R.value=j.sessionId}else if(p.platform==="gemini"){const j=await _.generateGeminiAuthUrl(d);h.value=j.authUrl,R.value=j.sessionId}else if(p.platform==="openai"){const j=await _.generateOpenAIAuthUrl(d);h.value=j.authUrl,R.value=j.sessionId}else if(p.platform==="droid"){const j=await _.generateDroidAuthUrl(d);h.value=j.verificationUriComplete||j.verificationUri,B.value=j.verificationUri,ee.value=j.verificationUriComplete||j.verificationUri,G.value=j.userCode,b(j.expiresIn||300),R.value=j.sessionId}}catch(d){V(d.message||"生成授权链接失败","error")}finally{N.value=!1}},O=()=>{P(),h.value="",k.value="",G.value="",B.value="",ee.value="",Z.value=0,R.value="",te()},U=async()=>{if(!h.value){V("请先生成授权链接","warning");return}try{await navigator.clipboard.writeText(h.value),v.value=!0,V("链接已复制","success"),setTimeout(()=>{v.value=!1},2e3)}catch{const d=document.createElement("input");d.value=h.value,document.body.appendChild(d),d.select(),document.execCommand("copy"),document.body.removeChild(d),v.value=!0,V("链接已复制","success"),setTimeout(()=>{v.value=!1},2e3)}},D=async()=>{if(!G.value){V("请先生成授权验证码","warning");return}try{await navigator.clipboard.writeText(G.value),V("验证码已复制","success")}catch{const d=document.createElement("input");d.value=G.value,document.body.appendChild(d),d.select(),document.execCommand("copy"),document.body.removeChild(d),V("验证码已复制","success")}},be=()=>{ee.value?window.open(ee.value,"_blank","noopener"):B.value&&window.open(B.value,"_blank","noopener")},Ie=async()=>{var s;if(q.value){se.value=!0;try{let d={};p.platform==="claude"?d={sessionId:R.value,callbackUrl:k.value.trim()}:p.platform==="gemini"?d={code:k.value.trim(),sessionId:R.value}:p.platform==="openai"?d={code:k.value.trim(),sessionId:R.value}:p.platform==="droid"&&(d={sessionId:R.value}),(s=p.proxy)!=null&&s.enabled&&(d.proxy={type:p.proxy.type,host:p.proxy.host,port:parseInt(p.proxy.port),username:p.proxy.username||null,password:p.proxy.password||null});let j;if(p.platform==="claude")j=await _.exchangeClaudeCode(d);else if(p.platform==="gemini")j=await _.exchangeGeminiCode(d);else if(p.platform==="openai")j=await _.exchangeOpenAICode(d);else if(p.platform==="droid"){const Y=await _.exchangeDroidCode(d);if(!Y.success){if(Y.pending){const oe=Y.message||"授权尚未完成,请在浏览器确认后稍候再次尝试。";V(oe,"info"),typeof Y.expiresIn=="number"&&Y.expiresIn>=0&&b(Y.expiresIn);return}throw new Error(Y.message||"授权失败,请重试")}j=Y.data,P()}me("success",j)}catch(d){V(d.message||"授权失败,请检查授权码是否正确","error")}finally{se.value=!1}}};return xs(()=>{P()}),(s,d)=>(n(),i("div",Ds,[Q.platform==="claude"?(n(),i("div",Vs,[e("div",Rs,[e("div",zs,[d[15]||(d[15]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-link text-white"})],-1)),e("div",js,[d[13]||(d[13]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"},"Claude 账户授权",-1)),d[14]||(d[14]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤完成 Claude 账户的授权: ",-1)),e("div",Os,[e("div",Ls,[e("div",Es,[d[6]||(d[6]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Ns,[d[5]||(d[5]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),h.value?(n(),i("div",Fs,[e("div",Qs,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:h.value},null,8,Bs),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:U},[e("i",{class:S(v.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:O},d[4]||(d[4]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:te},[N.value?(n(),i("div",Gs)):(n(),i("i",Ws)),$(" "+m(N.value?"生成中...":"生成授权链接"),1)],8,qs))])])]),d[12]||(d[12]=vt('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 Claude 账户并授权。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",Hs,[e("div",Js,[d[11]||(d[11]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ys,[d[9]||(d[9]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),d[10]||(d[10]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"},[$(" 授权完成后,页面会显示一个 "),e("strong",null,"Authorization Code"),$(",请将其复制并粘贴到下方输入框: ")],-1)),e("div",Zs,[e("div",null,[d[7]||(d[7]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),$("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":d[0]||(d[0]=j=>k.value=j),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Claude页面获取的Authorization Code...",rows:"3"},null,512),[[K,k.value]])]),d[8]||(d[8]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 请粘贴从Claude页面复制的Authorization Code ")],-1))])])])])])])])])])):Q.platform==="gemini"?(n(),i("div",Xs,[e("div",ea,[e("div",ta,[d[27]||(d[27]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-green-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",sa,[d[25]||(d[25]=e("h4",{class:"mb-3 font-semibold text-green-900 dark:text-green-200"},"Gemini 账户授权",-1)),d[26]||(d[26]=e("p",{class:"mb-4 text-sm text-green-800 dark:text-green-300"}," 请按照以下步骤完成 Gemini 账户的授权: ",-1)),e("div",aa,[e("div",ra,[e("div",la,[d[18]||(d[18]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",oa,[d[17]||(d[17]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 点击下方按钮生成授权链接 ",-1)),h.value?(n(),i("div",ua,[e("div",pa,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:h.value},null,8,ga),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:U},[e("i",{class:S(v.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:O},d[16]||(d[16]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:te},[N.value?(n(),i("div",da)):(n(),i("i",ia)),$(" "+m(N.value?"生成中...":"生成授权链接"),1)],8,na))])])]),d[24]||(d[24]=vt('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 Gemini 账户并授权。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",ma,[e("div",ya,[d[23]||(d[23]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-green-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",ca,[d[21]||(d[21]=e("p",{class:"mb-2 font-medium text-green-900 dark:text-green-200"}," 输入 Authorization Code ",-1)),d[22]||(d[22]=e("p",{class:"mb-3 text-sm text-green-700 dark:text-green-300"}," 授权完成后,页面会显示一个 Authorization Code,请将其复制并粘贴到下方输入框: ",-1)),e("div",xa,[e("div",null,[d[19]||(d[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-green-500"}),$("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":d[1]||(d[1]=j=>k.value=j),class:"form-input w-full resize-none font-mono text-sm",placeholder:"粘贴从Gemini页面获取的Authorization Code...",rows:"3"},null,512),[[K,k.value]])]),d[20]||(d[20]=e("div",{class:"mt-2 space-y-1"},[e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},[e("i",{class:"fas fa-check-circle mr-1 text-green-500"}),$(" 请粘贴从Gemini页面复制的Authorization Code ")])],-1))])])])])])])])])])):Q.platform==="openai"?(n(),i("div",fa,[e("div",ba,[e("div",va,[d[39]||(d[39]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-orange-500"},[e("i",{class:"fas fa-brain text-white"})],-1)),e("div",ka,[d[37]||(d[37]=e("h4",{class:"mb-3 font-semibold text-orange-900 dark:text-orange-200"},"OpenAI 账户授权",-1)),d[38]||(d[38]=e("p",{class:"mb-4 text-sm text-orange-800 dark:text-orange-300"}," 请按照以下步骤完成 OpenAI 账户的授权: ",-1)),e("div",ha,[e("div",wa,[e("div",$a,[d[30]||(d[30]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Aa,[d[29]||(d[29]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 点击下方按钮生成授权链接 ",-1)),h.value?(n(),i("div",Ia,[e("div",_a,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:h.value},null,8,Ka),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:U},[e("i",{class:S(v.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("button",{class:"text-xs text-orange-600 hover:text-orange-700",onClick:O},d[28]||(d[28]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:te},[N.value?(n(),i("div",Ta)):(n(),i("i",Ua)),$(" "+m(N.value?"生成中...":"生成授权链接"),1)],8,Ca))])])]),d[36]||(d[36]=vt('
2

在浏览器中打开链接并完成授权

请在新标签页中打开授权链接,登录您的 OpenAI 账户并授权。

重要提示:授权后页面可能会加载较长时间,请耐心等待。

当浏览器地址栏变为 http://localhost:1455/... 开头时,表示授权已完成。

注意:如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。

',1)),e("div",Sa,[e("div",Pa,[d[35]||(d[35]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-orange-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Ma,[d[33]||(d[33]=e("p",{class:"mb-2 font-medium text-orange-900 dark:text-orange-200"}," 输入授权链接或 Code ",-1)),d[34]||(d[34]=e("p",{class:"mb-3 text-sm text-orange-700 dark:text-orange-300"},[$(" 授权完成后,当页面地址变为 "),e("strong",{class:"font-mono"},"http://localhost:1455/..."),$(" 时: ")],-1)),e("div",Da,[e("div",null,[d[31]||(d[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-orange-500"}),$("授权链接或 Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":d[2]||(d[2]=j=>k.value=j),class:"form-input w-full resize-none font-mono text-sm",placeholder:`方式1:复制完整的链接(http://localhost:1455/auth/callback?code=...) 方式2:仅复制 code 参数的值 系统会自动识别并提取所需信息`,rows:"3"},null,512),[[K,k.value]])]),d[32]||(d[32]=vt('

提示:您可以直接复制整个链接或仅复制 code 参数值,系统会自动识别。

• 完整链接示例:http://localhost:1455/auth/callback?code=ac_4hm8...

• 仅 Code 示例:ac_4hm8iqmx9A2fzMy_cwye7U3W7...

',1))])])])])])])])])])):Q.platform==="droid"?(n(),i("div",Va,[e("div",Ra,[e("div",za,[d[51]||(d[51]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-cyan-500"},[e("i",{class:"fas fa-robot text-white"})],-1)),e("div",ja,[d[49]||(d[49]=e("h4",{class:"mb-3 font-semibold text-cyan-900 dark:text-cyan-200"},"Droid 账户授权",-1)),d[50]||(d[50]=e("p",{class:"mb-4 text-sm text-cyan-800 dark:text-cyan-300"}," 请按照以下步骤完成 Factory (Droid) 账户的授权: ",-1)),e("div",Oa,[e("div",La,[e("div",Ea,[d[47]||(d[47]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-cyan-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",Na,[d[46]||(d[46]=e("p",{class:"mb-2 font-medium text-cyan-900 dark:text-cyan-200"}," 点击下方按钮生成授权链接 ",-1)),h.value?(n(),i("div",Fa,[e("div",Qa,[d[42]||(d[42]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权链接",-1)),e("div",Ba,[e("div",Ha,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:h.value},null,8,Ja),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:U},[e("i",{class:S(v.value?"fas fa-check text-green-500":"fas fa-copy")},null,2)])]),e("div",{class:"flex flex-wrap items-center gap-2"},[e("button",{class:"inline-flex items-center gap-1 rounded-md border border-cyan-200 bg-white px-3 py-1.5 text-xs font-medium text-cyan-600 shadow-sm transition-colors hover:border-cyan-300 hover:bg-cyan-50 dark:border-cyan-700 dark:bg-cyan-900/40 dark:text-cyan-200 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/60",onClick:be},d[40]||(d[40]=[e("i",{class:"fas fa-external-link-alt text-xs"},null,-1),$(" 在新标签中打开 ",-1)])),e("button",{class:"inline-flex items-center gap-1 rounded-md px-3 py-1.5 text-xs font-medium text-cyan-600 transition-colors hover:text-cyan-700 dark:text-cyan-300 dark:hover:text-cyan-200",onClick:O},d[41]||(d[41]=[e("i",{class:"fas fa-sync-alt text-xs"},null,-1),$("重新生成 ",-1)]))])])]),e("div",Ya,[d[44]||(d[44]=e("label",{class:"text-xs font-semibold text-gray-600 dark:text-gray-300"},"授权验证码",-1)),e("div",Za,[e("span",Xa,m(G.value||"------"),1),e("button",{class:"rounded-lg bg-white px-3 py-1 text-sm text-cyan-600 transition-colors hover:bg-cyan-100 dark:bg-cyan-800 dark:text-cyan-200 dark:hover:bg-cyan-700",onClick:D},d[43]||(d[43]=[e("i",{class:"fas fa-copy mr-1"},null,-1),$("复制 ",-1)]))])]),e("div",er,[e("span",null,[d[45]||(d[45]=e("i",{class:"fas fa-hourglass-half mr-1 text-cyan-500"},null,-1)),$(" 剩余有效期:"+m(A.value),1)])])])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:N.value,onClick:te},[N.value?(n(),i("div",Ga)):(n(),i("i",Wa)),$(" "+m(N.value?"生成中...":"生成授权链接"),1)],8,qa))])])]),d[48]||(d[48]=vt('
2

在浏览器中打开链接并完成授权

在浏览器中打开授权页面,输入上方验证码并登录 Factory / Droid 账户,最后点击允许授权。

3

完成授权后点击下方“完成授权”按钮,系统会自动获取访问令牌。

若提示授权仍在等待确认,请稍候片刻后系统会自动重试。

',2))])])])])])):f("",!0),e("div",tr,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:d[3]||(d[3]=j=>s.$emit("back"))}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!q.value||se.value,type:"button",onClick:Ie},[se.value?(n(),i("div",ar)):f("",!0),$(" "+m(se.value?"验证中...":"完成授权"),1)],8,sr)])]))}},lr={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},or={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-4xl overflow-y-auto p-4 sm:p-6 md:p-8"},nr={class:"mb-4 flex items-center justify-between sm:mb-6"},ir={class:"mb-6"},dr={key:0,class:"mb-6 rounded-lg border border-blue-200 bg-blue-50 p-4"},ur={class:"space-y-4"},pr={class:"flex gap-4"},gr={class:"flex cursor-pointer items-center"},mr={class:"flex cursor-pointer items-center"},yr={class:"flex cursor-pointer items-center"},cr={class:"flex cursor-pointer items-center"},xr={class:"flex gap-3"},fr=["disabled"],br={key:0,class:"loading-spinner mr-2"},vr={class:"space-y-4"},kr={key:0,class:"py-8 text-center"},hr={key:1,class:"rounded-lg bg-gray-50 py-8 text-center"},wr={key:2,class:"grid grid-cols-1 gap-4 md:grid-cols-2"},$r={class:"mb-3 flex items-start justify-between"},Ar={class:"flex-1"},Cr={class:"font-semibold text-gray-900"},Ur={class:"mt-1 text-sm text-gray-500"},Tr={class:"ml-4 flex items-center gap-2"},Ir={class:"flex items-center justify-between text-sm text-gray-600"},_r={class:"flex items-center gap-4"},Kr={class:"flex items-center gap-2"},Sr=["onClick"],Pr=["disabled","onClick"],Mr={key:1,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Dr={class:"modal-content w-full max-w-lg p-4 sm:p-6"},Vr={class:"space-y-4"},Rr={class:"rounded-lg bg-gray-100 px-3 py-2 text-sm text-gray-600"},zr={class:"flex gap-3 pt-4"},jr=["disabled"],Or={key:0,class:"loading-spinner mr-2"},Lr={__name:"GroupManagementModal",emits:["close","refresh"],setup(Q,{emit:he}){const p=he,me=T(!0),_=T(!1),N=T([]),se=T(!1),h=T(!1),k=T({name:"",platform:"claude",description:""}),v=T(!1),R=T(!1),G=T(null),B=T({name:"",platform:"",description:""}),ee=O=>O?new Date(O).toLocaleDateString("zh-CN"):"-",Z=async()=>{_.value=!0;try{const O=await M.get("/admin/account-groups");N.value=O.data||[]}catch{V("加载分组列表失败","error")}finally{_.value=!1}},J=async()=>{var O,U;if(!k.value.name||!k.value.platform){V("请填写必填项","error");return}h.value=!0;try{await M.post("/admin/account-groups",{name:k.value.name,platform:k.value.platform,description:k.value.description}),V("分组创建成功","success"),q(),await Z(),p("refresh")}catch(D){V(((U=(O=D.response)==null?void 0:O.data)==null?void 0:U.error)||"创建分组失败","error")}finally{h.value=!1}},q=()=>{se.value=!1,k.value={name:"",platform:"claude",description:""}},A=O=>{G.value=O,B.value={name:O.name,platform:O.platform,description:O.description||""},v.value=!0},b=async()=>{var O,U;if(!B.value.name){V("请填写分组名称","error");return}R.value=!0;try{await M.put(`/admin/account-groups/${G.value.id}`,{name:B.value.name,description:B.value.description}),V("分组更新成功","success"),P(),await Z(),p("refresh")}catch(D){V(((U=(O=D.response)==null?void 0:O.data)==null?void 0:U.error)||"更新分组失败","error")}finally{R.value=!1}},P=()=>{v.value=!1,G.value=null,B.value={name:"",platform:"",description:""}},te=async O=>{var U,D;if(O.memberCount>0){V("分组内还有成员,无法删除","error");return}if(confirm(`确定要删除分组 "${O.name}" 吗?`))try{await M.delete(`/admin/account-groups/${O.id}`),V("分组删除成功","success"),await Z(),p("refresh")}catch(be){V(((D=(U=be.response)==null?void 0:U.data)==null?void 0:D.error)||"删除分组失败","error")}};return Bt(()=>{Z()}),(O,U)=>(n(),Fe(Ht,{to:"body"},[me.value?(n(),i("div",lr,[e("div",or,[e("div",nr,[U[11]||(U[11]=e("div",{class:"flex items-center gap-2 sm:gap-3"},[e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-layer-group text-sm text-white sm:text-base"})]),e("h3",{class:"text-lg font-bold text-gray-900 sm:text-xl"},"账户分组管理")],-1)),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:U[0]||(U[0]=D=>O.$emit("close"))},U[10]||(U[10]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",ir,[e("button",{class:"btn btn-primary px-4 py-2",onClick:U[1]||(U[1]=D=>se.value=!0)},U[12]||(U[12]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 创建新分组 ",-1)]))]),se.value?(n(),i("div",dr,[U[20]||(U[20]=e("h4",{class:"mb-4 text-lg font-semibold text-gray-900"},"创建新分组",-1)),e("div",ur,[e("div",null,[U[13]||(U[13]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":U[2]||(U[2]=D=>k.value.name=D),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[K,k.value.name]])]),e("div",null,[U[18]||(U[18]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型 *",-1)),e("div",pr,[e("label",gr,[x(e("input",{"onUpdate:modelValue":U[3]||(U[3]=D=>k.value.platform=D),class:"mr-2",type:"radio",value:"claude"},null,512),[[ge,k.value.platform]]),U[14]||(U[14]=e("span",{class:"text-sm text-gray-700"},"Claude",-1))]),e("label",mr,[x(e("input",{"onUpdate:modelValue":U[4]||(U[4]=D=>k.value.platform=D),class:"mr-2",type:"radio",value:"gemini"},null,512),[[ge,k.value.platform]]),U[15]||(U[15]=e("span",{class:"text-sm text-gray-700"},"Gemini",-1))]),e("label",yr,[x(e("input",{"onUpdate:modelValue":U[5]||(U[5]=D=>k.value.platform=D),class:"mr-2",type:"radio",value:"openai"},null,512),[[ge,k.value.platform]]),U[16]||(U[16]=e("span",{class:"text-sm text-gray-700"},"OpenAI",-1))]),e("label",cr,[x(e("input",{"onUpdate:modelValue":U[6]||(U[6]=D=>k.value.platform=D),class:"mr-2",type:"radio",value:"droid"},null,512),[[ge,k.value.platform]]),U[17]||(U[17]=e("span",{class:"text-sm text-gray-700"},"Droid",-1))])])]),e("div",null,[U[19]||(U[19]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":U[7]||(U[7]=D=>k.value.description=D),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[K,k.value.description]])]),e("div",xr,[e("button",{class:"btn btn-primary px-4 py-2",disabled:!k.value.name||!k.value.platform||h.value,onClick:J},[h.value?(n(),i("div",br)):f("",!0),$(" "+m(h.value?"创建中...":"创建"),1)],8,fr),e("button",{class:"btn btn-secondary px-4 py-2",onClick:q},"取消")])])])):f("",!0),e("div",vr,[_.value?(n(),i("div",kr,U[21]||(U[21]=[e("div",{class:"loading-spinner-lg mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500"},"加载中...",-1)]))):N.value.length===0?(n(),i("div",hr,U[22]||(U[22]=[e("i",{class:"fas fa-layer-group mb-4 text-4xl text-gray-300"},null,-1),e("p",{class:"text-gray-500"},"暂无分组",-1)]))):(n(),i("div",wr,[(n(!0),i(xe,null,_e(N.value,D=>(n(),i("div",{key:D.id,class:"rounded-lg border bg-white p-4 transition-shadow hover:shadow-md"},[e("div",$r,[e("div",Ar,[e("h4",Cr,m(D.name),1),e("p",Ur,m(D.description||"暂无描述"),1)]),e("div",Tr,[e("span",{class:S(["rounded-full px-2 py-1 text-xs font-medium",D.platform==="claude"?"bg-purple-100 text-purple-700":D.platform==="gemini"?"bg-blue-100 text-blue-700":D.platform==="openai"?"bg-gray-100 text-gray-700":"bg-cyan-100 text-cyan-700"])},m(D.platform==="claude"?"Claude":D.platform==="gemini"?"Gemini":D.platform==="openai"?"OpenAI":"Droid"),3)])]),e("div",Ir,[e("div",_r,[e("span",null,[U[23]||(U[23]=e("i",{class:"fas fa-users mr-1"},null,-1)),$(" "+m(D.memberCount||0)+" 个成员 ",1)]),e("span",null,[U[24]||(U[24]=e("i",{class:"fas fa-clock mr-1"},null,-1)),$(" "+m(ee(D.createdAt)),1)])]),e("div",Kr,[e("button",{class:"text-blue-600 transition-colors hover:text-blue-800",title:"编辑",onClick:be=>A(D)},U[25]||(U[25]=[e("i",{class:"fas fa-edit"},null,-1)]),8,Sr),e("button",{class:"text-red-600 transition-colors hover:text-red-800",disabled:D.memberCount>0,title:"删除",onClick:be=>te(D)},U[26]||(U[26]=[e("i",{class:"fas fa-trash"},null,-1)]),8,Pr)])])]))),128))]))])])])):f("",!0),v.value?(n(),i("div",Mr,[e("div",Dr,[e("div",{class:"mb-4 flex items-center justify-between"},[U[28]||(U[28]=e("h3",{class:"text-lg font-bold text-gray-900"},"编辑分组",-1)),e("button",{class:"text-gray-400 transition-colors hover:text-gray-600",onClick:P},U[27]||(U[27]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",Vr,[e("div",null,[U[29]||(U[29]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"分组名称 *",-1)),x(e("input",{"onUpdate:modelValue":U[8]||(U[8]=D=>B.value.name=D),class:"form-input w-full",placeholder:"输入分组名称",type:"text"},null,512),[[K,B.value.name]])]),e("div",null,[U[31]||(U[31]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"平台类型",-1)),e("div",Rr,[$(m(B.value.platform==="claude"?"Claude":B.value.platform==="gemini"?"Gemini":"OpenAI")+" ",1),U[30]||(U[30]=e("span",{class:"ml-2 text-xs text-gray-500"},"(不可修改)",-1))])]),e("div",null,[U[32]||(U[32]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":U[9]||(U[9]=D=>B.value.description=D),class:"form-input w-full resize-none",placeholder:"分组描述...",rows:"2"},null,512),[[K,B.value.description]])]),e("div",zr,[e("button",{class:"btn btn-primary flex-1 px-4 py-2",disabled:!B.value.name||R.value,onClick:b},[R.value?(n(),i("div",Or)):f("",!0),$(" "+m(R.value?"更新中...":"更新"),1)],8,jr),e("button",{class:"btn btn-secondary flex-1 px-4 py-2",onClick:P},"取消")])])])])):f("",!0)]))}},Er={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Nr={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},qr={class:"mb-4 flex items-center justify-between sm:mb-6"},Wr={class:"flex items-center gap-2 sm:gap-3"},Gr={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Fr={key:0,class:"mb-4 flex items-center justify-center sm:mb-8"},Qr={class:"flex items-center space-x-2 sm:space-x-4"},Br={class:"flex items-center"},Hr={class:"flex items-center"},Jr={key:1},Yr={class:"space-y-6"},Zr={key:0},Xr={class:"space-y-3"},el={class:"grid grid-cols-2 gap-2 sm:grid-cols-4"},tl={class:"p-3"},sl={class:"flex items-center justify-between"},al={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-indigo-500"},rl={class:"p-3"},ll={class:"flex items-center justify-between"},ol={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-emerald-500"},nl={class:"p-3"},il={class:"flex items-center justify-between"},dl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-blue-500"},ul={class:"p-3"},pl={class:"flex items-center justify-between"},gl={key:0,class:"flex h-5 w-5 items-center justify-center rounded-full bg-rose-500"},ml={key:0,class:"animate-fadeIn rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},yl={class:"grid grid-cols-2 gap-2 sm:grid-cols-3"},cl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-indigo-500"},xl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-purple-500"},fl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-orange-500"},bl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-cyan-500"},vl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-emerald-500"},kl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-teal-500"},hl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},wl={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-blue-500"},$l={key:0,class:"absolute right-1 top-1 flex h-4 w-4 items-center justify-center rounded-full bg-rose-500"},Al={key:1},Cl={class:"flex flex-wrap gap-4"},Ul={class:"flex cursor-pointer items-center"},Tl={class:"text-sm text-gray-700 dark:text-gray-300"},Il={key:0},_l={key:0,class:"flex cursor-pointer items-center"},Kl={class:"flex cursor-pointer items-center"},Sl={key:1,class:"flex cursor-pointer items-center"},Pl={key:0,class:"mt-1 text-xs text-red-500"},Ml={class:"flex gap-4"},Dl={class:"flex cursor-pointer items-center"},Vl={class:"flex cursor-pointer items-center"},Rl={class:"flex cursor-pointer items-center"},zl={key:2},jl={class:"flex gap-2"},Ol={class:"flex-1"},Ll={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},El={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Nl=["value"],ql={class:"text-sm text-gray-700 dark:text-gray-200"},Wl={key:3},Gl={key:4,class:"space-y-4"},Fl={key:0,class:"mt-1 text-xs text-red-500"},Ql={key:0,class:"mt-1 text-xs text-red-500"},Bl={key:0,class:"mt-1 text-xs text-red-500"},Hl={key:5,class:"space-y-4"},Jl={key:0,class:"mt-1 text-xs text-red-500"},Yl={key:0,class:"mt-1 text-xs text-red-500"},Zl={key:0,class:"mt-1 text-xs text-red-500"},Xl={class:"flex flex-wrap gap-2"},eo=["value"],to={class:"text-sm text-gray-700 dark:text-gray-300"},so={key:6},ao={class:"mb-3"},ro={class:"inline-flex cursor-pointer items-center"},lo={key:0},oo={key:7,class:"space-y-4"},no={key:0,class:"mt-1 text-xs text-red-500"},io={key:0,class:"mt-1 text-xs text-red-500"},uo={class:"grid grid-cols-2 gap-4"},po={class:"mb-4 flex gap-2"},go={key:0},mo={class:"mb-3 grid grid-cols-2 gap-2"},yo=["value"],co={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},xo={class:"text-xs text-gray-500 dark:text-gray-400"},fo={key:0},bo={key:1},vo={class:"mb-3 space-y-2"},ko=["onUpdate:modelValue"],ho=["onUpdate:modelValue"],wo=["onClick"],$o={class:"mt-3 flex flex-wrap gap-2"},Ao={class:"mb-3"},Co={class:"inline-flex cursor-pointer items-center"},Uo={key:0},To={key:8,class:"space-y-4"},Io={class:"relative"},_o=["type"],Ko={key:9},So={class:"flex gap-4"},Po={class:"flex cursor-pointer items-center"},Mo={class:"flex cursor-pointer items-center"},Do={key:10,class:"mt-4"},Vo={class:"flex items-start"},Ro={key:11,class:"mt-4"},zo={class:"flex items-start"},jo={class:"ml-3"},Oo={key:0,class:"mt-1"},Lo={class:"flex items-center justify-between"},Eo={class:"text-xs text-green-600 dark:text-green-400"},No=["disabled"],qo={key:0,class:"fas fa-trash-alt mr-1"},Wo={key:1,class:"loading-spinner mr-1"},Go={key:1,class:"mt-1"},Fo={key:12,class:"mt-4"},Qo={class:"flex items-start"},Bo={class:"ml-3 flex-1"},Ho={key:0,class:"mt-3"},Jo={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Yo={class:"flex items-center gap-2"},Zo={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Xo={class:"text-blue-600 dark:text-blue-400"},en={class:"text-gray-500 dark:text-gray-500"},tn={class:"text-blue-600 dark:text-blue-400"},sn={key:13,class:"space-y-4 rounded-lg border border-blue-200 bg-blue-50 p-4"},an={class:"mb-4 flex items-start gap-3"},rn={key:0,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},ln={key:1,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},on={key:2,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},nn={key:3,class:"mb-2 text-sm text-blue-800 dark:text-blue-300"},dn={class:"mb-2 mt-2 rounded-lg border border-blue-300 bg-white/80 p-3 dark:border-blue-600 dark:bg-gray-800/80"},un={key:0,class:"text-xs text-blue-800 dark:text-blue-300"},pn={key:1,class:"text-xs text-blue-800 dark:text-blue-300"},gn={key:2,class:"text-xs text-blue-800 dark:text-blue-300"},mn={key:3,class:"text-xs text-blue-800 dark:text-blue-300"},yn={key:4,class:"text-xs text-blue-600 dark:text-blue-400"},cn={key:5,class:"text-xs text-red-600 dark:text-red-400"},xn={key:0},fn={key:1},bn={key:0,class:"mt-1 text-xs text-red-500"},vn={key:2},kn={key:0,class:"mt-1 text-xs text-red-500"},hn={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},wn={key:3},$n={key:14,class:"space-y-4 rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},An={key:0,class:"mt-1 text-xs text-red-500"},Cn={class:"flex gap-3 pt-4"},Un=["disabled"],Tn=["disabled"],In={key:0,class:"loading-spinner mr-2"},_n={key:3,class:"space-y-6"},Kn={key:0},Sn={class:"rounded-lg border border-blue-200 bg-blue-50 p-6 dark:border-blue-700 dark:bg-blue-900/30"},Pn={class:"flex items-start gap-4"},Mn={class:"flex-1"},Dn={class:"space-y-4"},Vn={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Rn={class:"flex items-start gap-3"},zn={class:"flex-1"},jn=["disabled"],On={key:0,class:"fas fa-link mr-2"},Ln={key:1,class:"loading-spinner mr-2"},En={key:1,class:"space-y-3"},Nn={class:"flex items-center gap-2"},qn=["value"],Wn={class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},Gn={class:"flex items-start gap-3"},Fn={class:"flex-1"},Qn={class:"space-y-3"},Bn={class:"flex gap-3 pt-4"},Hn=["disabled"],Jn={key:0,class:"loading-spinner mr-2"},Yn={key:4,class:"space-y-6"},Zn={class:"flex gap-4"},Xn={class:"flex cursor-pointer items-center"},ei={class:"flex cursor-pointer items-center"},ti={class:"flex cursor-pointer items-center"},si={key:0},ai={class:"flex gap-2"},ri={class:"flex-1"},li={class:"max-h-48 space-y-2 overflow-y-auto rounded-md border p-3 dark:border-gray-600 dark:bg-gray-700"},oi={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ni=["value"],ii={class:"text-sm text-gray-700 dark:text-gray-200"},di={key:1},ui={key:2},pi={class:"flex gap-4"},gi={class:"flex cursor-pointer items-center"},mi={class:"flex cursor-pointer items-center"},yi={key:3,class:"mt-4"},ci={class:"flex items-start"},xi={key:4,class:"mt-4"},fi={class:"flex items-start"},bi={class:"ml-3"},vi={key:0,class:"mt-1"},ki={class:"flex items-center justify-between"},hi={class:"text-xs text-green-600 dark:text-green-400"},wi=["disabled"],$i={key:0,class:"fas fa-trash-alt mr-1"},Ai={key:1,class:"loading-spinner mr-1"},Ci={key:1,class:"mt-1"},Ui={key:5,class:"mt-4"},Ti={class:"flex items-start"},Ii={class:"ml-3 flex-1"},_i={key:0,class:"mt-3"},Ki={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800/50"},Si={class:"flex items-center gap-2"},Pi={class:"block w-full select-all break-all rounded bg-gray-100 px-3 py-2 font-mono text-xs text-gray-700 dark:bg-gray-900 dark:text-gray-300"},Mi={class:"text-blue-600 dark:text-blue-400"},Di={class:"text-gray-500 dark:text-gray-500"},Vi={class:"text-blue-600 dark:text-blue-400"},Ri={key:6,class:"space-y-4"},zi={class:"grid grid-cols-2 gap-4"},ji={key:0,class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},Oi={class:"mb-2 flex items-center justify-between"},Li={class:"text-sm text-gray-500 dark:text-gray-400"},Ei={class:"relative h-2 w-full rounded-full bg-gray-200 dark:bg-gray-700"},Ni={class:"mt-2 flex items-center justify-between text-xs"},qi={class:"text-gray-500 dark:text-gray-400"},Wi={class:"text-gray-500 dark:text-gray-400"},Gi={class:"mb-4 flex gap-2"},Fi={key:0},Qi={class:"mb-3 grid grid-cols-2 gap-2"},Bi=["value"],Hi={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Ji={class:"text-xs text-gray-500 dark:text-gray-400"},Yi={key:0},Zi={key:1},Xi={class:"mb-3 space-y-2"},ed=["onUpdate:modelValue"],td=["onUpdate:modelValue"],sd=["onClick"],ad={class:"mt-3 flex flex-wrap gap-2"},rd={class:"mb-3"},ld={class:"inline-flex cursor-pointer items-center"},od={key:0},nd={key:7,class:"space-y-4"},id={class:"relative"},dd=["type"],ud={class:"grid grid-cols-2 gap-4"},pd={key:8,class:"space-y-4"},gd={class:"mb-3"},md={class:"inline-flex cursor-pointer items-center"},yd={key:0},cd={key:9,class:"space-y-4"},xd={key:0,class:"mt-1 text-xs text-red-500"},fd={key:0,class:"mt-1 text-xs text-red-500"},bd={key:0,class:"mt-1 text-xs text-red-500"},vd={class:"flex flex-wrap gap-2"},kd=["value"],hd={class:"text-sm text-gray-700 dark:text-gray-300"},wd={key:10,class:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-700 dark:bg-purple-900/30"},$d={class:"mb-4 flex items-start gap-3"},Ad={class:"mb-1 text-sm text-purple-800 dark:text-purple-200"},Cd={class:"space-y-4"},Ud={key:0,class:"mt-1 text-xs text-red-500"},Td={class:"flex cursor-pointer items-center gap-2 rounded-md border border-purple-200 bg-white/80 px-3 py-2 text-sm text-purple-800 transition-colors hover:border-purple-300 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},Id={key:11,class:"rounded-lg border border-amber-200 bg-amber-50 p-4 dark:border-amber-700 dark:bg-amber-900/30"},_d={class:"space-y-4"},Kd={class:"flex gap-3 pt-4"},Sd=["disabled"],Pd={key:0,class:"loading-spinner mr-2"},Md={__name:"AccountForm",props:{account:{type:Object,default:null}},emits:["close","success","platform-changed"],setup(Q,{emit:he}){var lt,yt,He,Pt,Mt,bt,kt,ht,Dt,Vt,wt,$t,At,Rt,Ct,Ut,zt,jt,Tt,It,_t,Ot,Lt,Et,Nt,Kt,qt,Wt,Gt;const p=Q,me=he,_=us(),{showConfirmModal:N,confirmOptions:se,showConfirm:h,handleConfirm:k,handleCancel:v}=ds(),R=pe(()=>!!p.account),G=T(!0),B=T(1),ee=T(!1),Z=T(!1),J=T(!1),q=T(!1),A=T(""),b=T(""),P=T(!1),te=T(""),O=T(""),U=T(!1),D=T(""),be=u=>["claude","claude-console","ccr","bedrock"].includes(u)?"claude":["openai","openai-responses","azure_openai"].includes(u)?"openai":u==="gemini"?"gemini":u==="droid"?"droid":"",Ie=()=>{var u;return(u=p.account)!=null&&u.proxy&&p.account.proxy.host&&p.account.proxy.port?{enabled:!0,type:p.account.proxy.type||"socks5",host:p.account.proxy.host,port:p.account.proxy.port,username:p.account.proxy.username||"",password:p.account.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""}},s=T({platform:((lt=p.account)==null?void 0:lt.platform)||"claude",addType:(()=>{var t;const u=((t=p.account)==null?void 0:t.platform)||"claude";return u==="gemini"||u==="openai"||u==="claude"?"oauth":"manual"})(),name:((yt=p.account)==null?void 0:yt.name)||"",description:((He=p.account)==null?void 0:He.description)||"",accountType:((Pt=p.account)==null?void 0:Pt.accountType)||"shared",authenticationMethod:((Mt=p.account)==null?void 0:Mt.authenticationMethod)||"",subscriptionType:"claude_max",autoStopOnWarning:((bt=p.account)==null?void 0:bt.autoStopOnWarning)||!1,useUnifiedUserAgent:((kt=p.account)==null?void 0:kt.useUnifiedUserAgent)||!1,useUnifiedClientId:((ht=p.account)==null?void 0:ht.useUnifiedClientId)||!1,unifiedClientId:((Dt=p.account)==null?void 0:Dt.unifiedClientId)||"",groupId:"",groupIds:[],projectId:((Vt=p.account)==null?void 0:Vt.projectId)||"",accessToken:"",refreshToken:"",apiKeysInput:"",clearExistingApiKeys:!1,proxy:Ie(),apiUrl:((wt=p.account)==null?void 0:wt.apiUrl)||"",apiKey:(($t=p.account)==null?void 0:$t.apiKey)||"",priority:((At=p.account)==null?void 0:At.priority)||50,endpointType:((Rt=p.account)==null?void 0:Rt.endpointType)||"anthropic",baseApi:((Ct=p.account)==null?void 0:Ct.baseApi)||"",rateLimitDuration:((Ut=p.account)==null?void 0:Ut.rateLimitDuration)||60,supportedModels:(()=>{var t;const u=(t=p.account)==null?void 0:t.supportedModels;return u?typeof u=="object"&&!Array.isArray(u)?Object.keys(u):Array.isArray(u)?u:[]:[]})(),userAgent:((zt=p.account)==null?void 0:zt.userAgent)||"",enableRateLimit:p.account?p.account.rateLimitDuration>0:!0,dailyQuota:((jt=p.account)==null?void 0:jt.dailyQuota)||0,dailyUsage:((Tt=p.account)==null?void 0:Tt.dailyUsage)||0,quotaResetTime:((It=p.account)==null?void 0:It.quotaResetTime)||"00:00",accessKeyId:((_t=p.account)==null?void 0:_t.accessKeyId)||"",secretAccessKey:((Ot=p.account)==null?void 0:Ot.secretAccessKey)||"",region:((Lt=p.account)==null?void 0:Lt.region)||"",sessionToken:((Et=p.account)==null?void 0:Et.sessionToken)||"",defaultModel:((Nt=p.account)==null?void 0:Nt.defaultModel)||"",smallFastModel:((Kt=p.account)==null?void 0:Kt.smallFastModel)||"",azureEndpoint:((qt=p.account)==null?void 0:qt.azureEndpoint)||"",apiVersion:((Wt=p.account)==null?void 0:Wt.apiVersion)||"",deploymentName:((Gt=p.account)==null?void 0:Gt.deploymentName)||""}),d=T("whitelist"),j=T(["claude-sonnet-4-20250514","claude-sonnet-4-5-20250929","claude-3-5-haiku-20241022"]),Y=[{value:"claude-sonnet-4-20250514",label:"Claude Sonnet 4",color:"blue"},{value:"claude-sonnet-4-5-20250929",label:"Claude Sonnet 4.5",color:"indigo"},{value:"claude-3-5-haiku-20241022",label:"Claude 3.5 Haiku",color:"green"},{value:"claude-opus-4-20250514",label:"Claude Opus 4",color:"purple"},{value:"claude-opus-4-1-20250805",label:"Claude Opus 4.1",color:"purple"}],oe=T([]),Qe=()=>{var u;if((u=p.account)!=null&&u.supportedModels)if(typeof p.account.supportedModels=="object"&&!Array.isArray(p.account.supportedModels)){const t=Object.entries(p.account.supportedModels);oe.value=t.map(([L,F])=>({from:L,to:F})),t.every(([L,F])=>L===F)?(d.value="whitelist",j.value=t.map(([L])=>L)):d.value="mapping"}else Array.isArray(p.account.supportedModels)&&(oe.value=p.account.supportedModels.map(t=>({from:t,to:t})),d.value="whitelist",j.value=p.account.supportedModels)},$e=u=>{if(!u||typeof u!="string")return[];const t=u.split(/\r?\n/).map(L=>L.trim()).filter(L=>L.length>0);return t.length===0?[]:Array.from(new Set(t))},w=T({name:"",refreshToken:"",accessToken:"",apiKeys:"",apiUrl:"",apiKey:"",baseApi:"",accessKeyId:"",secretAccessKey:"",region:"",azureEndpoint:"",deploymentName:""}),Ye=pe(()=>{var u;return((u=s.value.name)==null?void 0:u.trim())&&s.value.platform}),at=pe(()=>A.value&&b.value.trim()),Xe=()=>{var u;return!R.value||!((u=p.account)!=null&&u.id)?0:typeof s.value.dailyUsage=="number"?s.value.dailyUsage:0},Ze=pe(()=>!s.value.dailyQuota||s.value.dailyQuota<=0?0:Xe()/s.value.dailyQuota*100),ot=pe(()=>{if(!p.account||p.account.platform!=="droid")return 0;let u=0;if(Array.isArray(p.account.apiKeys))u=p.account.apiKeys.length;else if(typeof p.account.apiKeys=="string")try{const o=JSON.parse(p.account.apiKeys);Array.isArray(o)&&(u=o.length)}catch{u=0}const t=p.account.apiKeyCount??p.account.apiKeysCount??p.account.api_key_count??u;return Number(t)||0}),Be=pe(()=>{var t,o,L;if(!R.value||s.value.platform!=="droid")return!1;const u=s.value.authenticationMethod||((t=p.account)==null?void 0:t.authenticationMethod)||((o=p.account)==null?void 0:o.authMethod)||((L=p.account)==null?void 0:L.authentication_mode)||"";return typeof u!="string"?!1:u.trim().toLowerCase()==="api_key"}),Ee=async()=>{var u;if(!(!R.value||!((u=p.account)!=null&&u.id)))try{const t=await M.get(`/admin/claude-console-accounts/${p.account.id}/usage`);t&&(s.value.dailyUsage=t.dailyUsage||0)}catch{}},Ke=u=>{D.value=u,u==="claude"?s.value.platform="claude":u==="openai"?s.value.platform="openai":u==="gemini"?s.value.platform="gemini":u==="droid"&&(s.value.platform="droid")},Ne=async()=>{if(w.value.name="",!Ye.value){(!s.value.name||s.value.name.trim()==="")&&(w.value.name="请填写账户名称");return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){V("请选择一个分组","error");return}s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&B.value===1&&s.value.addType==="oauth"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await h("项目 ID 未填写",`您尚未填写项目 ID。 如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。 如果您使用的是普通个人账号,可以继续不填写。`,"继续","返回填写"))&&(B.value=2)},qe=async()=>{var u;J.value=!0;try{const t=(u=s.value.proxy)!=null&&u.enabled?{proxy:{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}}:{},o=await _.generateClaudeSetupTokenUrl(t);A.value=o.authUrl,te.value=o.sessionId}catch(t){V(t.message||"生成Setup Token授权链接失败","error")}finally{J.value=!1}},nt=()=>{A.value="",b.value="",qe()},it=async()=>{try{await navigator.clipboard.writeText(A.value),P.value=!0,V("链接已复制","success"),setTimeout(()=>{P.value=!1},2e3)}catch{const t=document.createElement("textarea");t.value=A.value,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();try{document.execCommand("copy")?(P.value=!0,V("链接已复制","success")):V("复制失败,请手动复制","error")}catch{V("复制失败,请手动复制","error")}document.body.removeChild(t),setTimeout(()=>{P.value=!1},2e3)}},et=async()=>{var u;if(at.value){q.value=!0;try{const t={sessionId:te.value,callbackUrl:b.value.trim()};(u=s.value.proxy)!=null&&u.enabled&&(t.proxy={type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null});const o=await _.exchangeClaudeSetupTokenCode(t);s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=Re()),await tt(o)}catch(t){V(t.message||"Setup Token授权失败,请检查授权码是否正确","error")}finally{q.value=!1}}},tt=async u=>{var t,o,L,F,Ce,ke;ee.value=!0;try{s.value.platform==="claude"&&s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=Re());const E={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds: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},ce=s.value.platform;if(ce==="claude")E.claudeAiOauth=u.claudeAiOauth||u,E.priority=s.value.priority||50,E.autoStopOnWarning=s.value.autoStopOnWarning||!1,E.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,E.useUnifiedClientId=s.value.useUnifiedClientId||!1,E.unifiedClientId=s.value.unifiedClientId||"",E.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0};else if(ce==="gemini")E.geminiOauth=u.tokens||u,s.value.projectId&&(E.projectId=s.value.projectId),E.priority=s.value.priority||50;else if(ce==="openai")E.openaiOauth=u.tokens||u,E.accountInfo=u.accountInfo,E.priority=s.value.priority||50;else if(ce==="droid"){const W=u.tokens||u||{},H={accessToken:W.accessToken||W.access_token||"",refreshToken:W.refreshToken||W.refresh_token||"",expiresAt:W.expiresAt||W.expires_at||"",expiresIn:W.expiresIn||W.expires_in||null,tokenType:W.tokenType||W.token_type||"Bearer",organizationId:W.organizationId||W.organization_id||"",authenticationMethod:W.authenticationMethod||W.authentication_method||""};if(!H.refreshToken){ee.value=!1,V("授权成功但未返回 Refresh Token,请确认已授予离线访问权限后重试。","error");return}if(E.refreshToken=H.refreshToken,E.accessToken=H.accessToken,E.expiresAt=H.expiresAt,H.expiresIn!==null&&H.expiresIn!==void 0&&(E.expiresIn=H.expiresIn),E.priority=s.value.priority||50,E.endpointType=s.value.endpointType||"anthropic",E.platform="droid",E.tokenType=H.tokenType,E.authenticationMethod=H.authenticationMethod,H.organizationId&&(E.organizationId=H.organizationId),W.user){const X=W.user,fe=[];typeof X.first_name=="string"&&X.first_name.trim()&&fe.push(X.first_name.trim()),typeof X.last_name=="string"&&X.last_name.trim()&&fe.push(X.last_name.trim());const ct=fe.join(" ").trim()||(typeof X.name=="string"?X.name.trim():"")||(typeof X.display_name=="string"?X.display_name.trim():"");typeof X.email=="string"&&X.email.trim()&&(E.ownerEmail=X.email.trim()),ct?(E.ownerName=ct,E.ownerDisplayName=ct):E.ownerEmail&&(E.ownerName=E.ownerName||E.ownerEmail,E.ownerDisplayName=E.ownerDisplayName||E.ownerEmail),typeof X.id=="string"&&X.id.trim()&&(E.userId=X.id.trim())}}let c;ce==="claude"?c=await _.createClaudeAccount(E):ce==="gemini"?c=await _.createGeminiAccount(E):ce==="openai"?c=await _.createOpenAIAccount(E):ce==="droid"?c=await _.createDroidAccount(E):c=await _.createGeminiAccount(E),me("success",c)}catch(E){const ce=((o=(t=E.response)==null?void 0:t.data)==null?void 0:o.error)||E.message||"账户创建失败",c=((F=(L=E.response)==null?void 0:L.data)==null?void 0:F.suggestion)||"",W=((ke=(Ce=E.response)==null?void 0:Ce.data)==null?void 0:ke.errorDetails)||null;let H=ce;c&&(H+=` ${c}`),W&&W.error_description?H+=` 详细信息: ${W.error_description}`:W&&W.error&&W.error.message&&(H+=` 详细信息: ${W.error.message}`),V(H,"error","",8e3)}finally{ee.value=!1}},dt=async()=>{var t,o,L,F,Ce,ke,E,ce;w.value.name="",w.value.accessToken="",w.value.refreshToken="",w.value.apiUrl="",w.value.apiKey="",w.value.apiKeys="";let u=!1;if((!s.value.name||s.value.name.trim()==="")&&(w.value.name="请填写账户名称",u=!0),s.value.platform==="claude-console"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(w.value.apiUrl="请填写 API URL",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(w.value.apiKey="请填写 API Key",u=!0)),s.value.platform==="ccr"&&((!s.value.apiUrl||s.value.apiUrl.trim()==="")&&(w.value.apiUrl="请填写 API URL",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(w.value.apiKey="请填写 API Key",u=!0)),s.value.platform==="openai-responses"?((!s.value.baseApi||s.value.baseApi.trim()==="")&&(w.value.baseApi="请填写 API 基础地址",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(w.value.apiKey="请填写 API 密钥",u=!0)):s.value.platform==="bedrock"?((!s.value.accessKeyId||s.value.accessKeyId.trim()==="")&&(w.value.accessKeyId="请填写 AWS 访问密钥 ID",u=!0),(!s.value.secretAccessKey||s.value.secretAccessKey.trim()==="")&&(w.value.secretAccessKey="请填写 AWS 秘密访问密钥",u=!0),(!s.value.region||s.value.region.trim()==="")&&(w.value.region="请选择 AWS 区域",u=!0)):s.value.platform==="azure_openai"?((!s.value.azureEndpoint||s.value.azureEndpoint.trim()==="")&&(w.value.azureEndpoint="请填写 Azure Endpoint",u=!0),(!s.value.deploymentName||s.value.deploymentName.trim()==="")&&(w.value.deploymentName="请填写部署名称",u=!0),(!s.value.apiKey||s.value.apiKey.trim()==="")&&(w.value.apiKey="请填写 API Key",u=!0)):s.value.addType==="manual"?s.value.platform==="openai"?(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(w.value.refreshToken="请填写 Refresh Token",u=!0):s.value.platform==="gemini"?(!s.value.accessToken||s.value.accessToken.trim()==="")&&(w.value.accessToken="请填写 Access Token",u=!0):s.value.platform==="droid"?((!s.value.accessToken||s.value.accessToken.trim()==="")&&(w.value.accessToken="请填写 Access Token",u=!0),(!s.value.refreshToken||s.value.refreshToken.trim()==="")&&(w.value.refreshToken="请填写 Refresh Token",u=!0)):s.value.platform==="claude"&&(!s.value.accessToken||s.value.accessToken.trim()==="")&&(w.value.accessToken="请填写 Access Token",u=!0):s.value.addType==="apikey"&&$e(s.value.apiKeysInput).length===0&&(w.value.apiKeys="请至少填写一个 API Key",u=!0),s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)&&(V("请选择一个分组","error"),u=!0),s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!u){ee.value=!0;try{const c={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds:void 0,proxy:s.value.proxy.enabled?{type:s.value.proxy.type,host:s.value.proxy.host,port:parseInt(s.value.proxy.port),username:s.value.proxy.username||null,password:s.value.proxy.password||null}:null};if(s.value.platform==="claude"){const H=s.value.refreshToken?6e5:31536e6;s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=Re()),c.claudeAiOauth={accessToken:s.value.accessToken,refreshToken:s.value.refreshToken||"",expiresAt:Date.now()+H,scopes:[]},c.priority=s.value.priority||50,c.autoStopOnWarning=s.value.autoStopOnWarning||!1,c.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,c.useUnifiedClientId=s.value.useUnifiedClientId||!1,c.unifiedClientId=s.value.unifiedClientId||"",c.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}}else if(s.value.platform==="gemini"){const H=s.value.refreshToken?6e5:31536e6;c.geminiOauth={access_token:s.value.accessToken,refresh_token:s.value.refreshToken||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+H},s.value.projectId&&(c.projectId=s.value.projectId),c.priority=s.value.priority||50}else if(s.value.platform==="openai"){const H=s.value.refreshToken?6e5:31536e6;c.openaiOauth={idToken:"",accessToken:s.value.accessToken||"",refreshToken:s.value.refreshToken,expires_in:Math.floor(H/1e3)},c.accountInfo={accountId:"",chatgptUserId:"",organizationId:"",organizationRole:"",organizationTitle:"",planType:"",email:"",emailVerified:!1},c.needsImmediateRefresh=!0,c.requireRefreshSuccess=!0,c.priority=s.value.priority||50}else if(s.value.platform==="droid")if(c.priority=s.value.priority||50,c.endpointType=s.value.endpointType||"anthropic",c.platform="droid",s.value.addType==="apikey"){const H=$e(s.value.apiKeysInput);c.apiKeys=H,c.authenticationMethod="api_key",c.isActive=!0,c.schedulable=!0}else{const H=((t=s.value.accessToken)==null?void 0:t.trim())||"",X=((o=s.value.refreshToken)==null?void 0:o.trim())||"",fe=new Date(Date.now()+8*60*60*1e3).toISOString();c.accessToken=H,c.refreshToken=X,c.expiresAt=fe,c.expiresIn=8*60*60,c.tokenType="Bearer",c.authenticationMethod="manual"}else s.value.platform==="claude-console"||s.value.platform==="ccr"?(c.apiUrl=s.value.apiUrl,c.apiKey=s.value.apiKey,c.priority=s.value.priority||50,c.supportedModels=Ae()||{},c.userAgent=s.value.userAgent||null,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="openai-responses"?(c.baseApi=s.value.baseApi,c.apiKey=s.value.apiKey,c.userAgent=s.value.userAgent||"",c.priority=s.value.priority||50,c.rateLimitDuration=60,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"):s.value.platform==="bedrock"?(c.awsCredentials={accessKeyId:s.value.accessKeyId,secretAccessKey:s.value.secretAccessKey,sessionToken:s.value.sessionToken||null},c.region=s.value.region,c.defaultModel=s.value.defaultModel||null,c.smallFastModel=s.value.smallFastModel||null,c.priority=s.value.priority||50,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0):s.value.platform==="azure_openai"&&(c.azureEndpoint=s.value.azureEndpoint,c.apiKey=s.value.apiKey,c.apiVersion=s.value.apiVersion||"2024-02-01",c.deploymentName=s.value.deploymentName,c.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],c.priority=s.value.priority||50,c.isActive=s.value.isActive!==!1,c.schedulable=s.value.schedulable!==!1);let W;if(s.value.platform==="claude")W=await _.createClaudeAccount(c);else if(s.value.platform==="claude-console"||s.value.platform==="ccr")W=await _.createClaudeConsoleAccount(c);else if(s.value.platform==="droid")W=await _.createDroidAccount(c);else if(s.value.platform==="openai-responses")W=await _.createOpenAIResponsesAccount(c);else if(s.value.platform==="bedrock")W=await _.createBedrockAccount(c);else if(s.value.platform==="openai")W=await _.createOpenAIAccount(c);else if(s.value.platform==="azure_openai")W=await _.createAzureOpenAIAccount(c);else if(s.value.platform==="gemini")W=await _.createGeminiAccount(c);else throw new Error(`不支持的平台: ${s.value.platform}`);me("success",W)}catch(c){const W=((F=(L=c.response)==null?void 0:L.data)==null?void 0:F.error)||c.message||"账户创建失败",H=((ke=(Ce=c.response)==null?void 0:Ce.data)==null?void 0:ke.suggestion)||"",X=((ce=(E=c.response)==null?void 0:E.data)==null?void 0:ce.errorDetails)||null;let fe=W;H&&(fe+=` ${H}`),X&&X.error_description?fe+=` 详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(fe+=` 详细信息: ${X.error.message}`),V(fe,"error","",8e3)}finally{ee.value=!1}}},Le=async()=>{var u,t,o,L,F,Ce,ke,E,ce;if(w.value.name="",w.value.apiKeys="",!s.value.name||s.value.name.trim()===""){w.value.name="请填写账户名称";return}if(s.value.accountType==="group"&&(!s.value.groupIds||s.value.groupIds.length===0)){V("请选择一个分组","error");return}if(s.value.accountType==="group"&&(s.value.groupIds&&s.value.groupIds.length>0?s.value.groupId=s.value.groupIds[0]:s.value.groupId=""),!(s.value.platform==="gemini"&&(!s.value.projectId||s.value.projectId.trim()==="")&&!await h("项目 ID 未填写",`您尚未填写项目 ID。 如果您的Google账号绑定了Google Cloud或被识别为Workspace账号,需要提供项目 ID。 如果您使用的是普通个人账号,可以继续不填写。`,"继续保存","返回填写"))){ee.value=!0;try{const c={name:s.value.name,description:s.value.description,accountType:s.value.accountType,groupId:s.value.accountType==="group"?s.value.groupId:void 0,groupIds:s.value.accountType==="group"?s.value.groupIds: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){const W=((u=s.value.accessToken)==null?void 0:u.trim())||"",H=((t=s.value.refreshToken)==null?void 0:t.trim())||"";if(p.account.platform==="claude"){const X=s.value.refreshToken?6e5:31536e6;c.claudeAiOauth={accessToken:W||"",refreshToken:H||"",expiresAt:Date.now()+X,scopes:p.account.scopes||[]}}else if(p.account.platform==="gemini"){const X=s.value.refreshToken?6e5:31536e6;c.geminiOauth={access_token:W||"",refresh_token:H||"",scope:"https://www.googleapis.com/auth/cloud-platform",token_type:"Bearer",expiry_date:Date.now()+X}}else if(p.account.platform==="openai"){const X=s.value.refreshToken?6e5:31536e6;c.openaiOauth={idToken:"",accessToken:W||"",refreshToken:H||"",expires_in:Math.floor(X/1e3)},H&&H!==p.account.refreshToken&&(c.needsImmediateRefresh=!0,c.requireRefreshSuccess=!0)}else p.account.platform==="droid"&&(W&&(c.accessToken=W),H&&(c.refreshToken=H))}if(p.account.platform==="droid"){const W=((o=s.value.apiKeysInput)==null?void 0:o.trim())||"";if(W){const H=$e(W);if(H.length===0){w.value.apiKeys="请至少填写一个 API Key",ee.value=!1;return}c.apiKeys=H}s.value.clearExistingApiKeys&&(c.clearApiKeys=!0),Be.value&&(c.authenticationMethod="api_key")}if(p.account.platform==="gemini"&&(c.projectId=s.value.projectId||""),p.account.platform==="droid"&&(c.priority=s.value.priority||50,c.endpointType=s.value.endpointType||"anthropic"),p.account.platform==="claude"&&(s.value.useUnifiedClientId&&!s.value.unifiedClientId&&(s.value.unifiedClientId=Re()),c.priority=s.value.priority||50,c.autoStopOnWarning=s.value.autoStopOnWarning||!1,c.useUnifiedUserAgent=s.value.useUnifiedUserAgent||!1,c.useUnifiedClientId=s.value.useUnifiedClientId||!1,c.unifiedClientId=s.value.unifiedClientId||"",c.subscriptionInfo={accountType:s.value.subscriptionType||"claude_max",hasClaudeMax:s.value.subscriptionType==="claude_max",hasClaudePro:s.value.subscriptionType==="claude_pro",manuallySet:!0}),p.account.platform==="openai"&&(c.priority=s.value.priority||50),p.account.platform==="gemini"&&(c.priority=s.value.priority||50),p.account.platform==="claude-console"&&(c.apiUrl=s.value.apiUrl,s.value.apiKey&&(c.apiKey=s.value.apiKey),c.priority=s.value.priority||50,c.supportedModels=Ae()||{},c.userAgent=s.value.userAgent||null,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"),p.account.platform==="openai-responses"&&(c.baseApi=s.value.baseApi,s.value.apiKey&&(c.apiKey=s.value.apiKey),c.userAgent=s.value.userAgent||"",c.priority=s.value.priority||50,c.dailyQuota=s.value.dailyQuota||0,c.quotaResetTime=s.value.quotaResetTime||"00:00"),p.account.platform==="bedrock"&&((s.value.accessKeyId||s.value.secretAccessKey||s.value.sessionToken)&&(c.awsCredentials={},s.value.accessKeyId&&(c.awsCredentials.accessKeyId=s.value.accessKeyId),s.value.secretAccessKey&&(c.awsCredentials.secretAccessKey=s.value.secretAccessKey),s.value.sessionToken!==void 0&&(c.awsCredentials.sessionToken=s.value.sessionToken||null)),s.value.region&&(c.region=s.value.region),c.defaultModel=s.value.defaultModel||null,c.smallFastModel=s.value.smallFastModel||null,c.priority=s.value.priority||50,c.rateLimitDuration=s.value.enableRateLimit?s.value.rateLimitDuration||60:0),p.account.platform==="azure_openai"&&(c.azureEndpoint=s.value.azureEndpoint,c.apiVersion=s.value.apiVersion||"2024-02-01",c.deploymentName=s.value.deploymentName,c.supportedModels=Array.isArray(s.value.supportedModels)?s.value.supportedModels:[],c.priority=s.value.priority||50,s.value.apiKey&&s.value.apiKey.trim()&&(c.apiKey=s.value.apiKey)),p.account.platform==="claude")await _.updateClaudeAccount(p.account.id,c);else if(p.account.platform==="claude-console")await _.updateClaudeConsoleAccount(p.account.id,c);else if(p.account.platform==="openai-responses")await _.updateOpenAIResponsesAccount(p.account.id,c);else if(p.account.platform==="bedrock")await _.updateBedrockAccount(p.account.id,c);else if(p.account.platform==="openai")await _.updateOpenAIAccount(p.account.id,c);else if(p.account.platform==="azure_openai")await _.updateAzureOpenAIAccount(p.account.id,c);else if(p.account.platform==="gemini")await _.updateGeminiAccount(p.account.id,c);else if(p.account.platform==="droid")await _.updateDroidAccount(p.account.id,c);else throw new Error(`不支持的平台: ${p.account.platform}`);me("success")}catch(c){const W=((F=(L=c.response)==null?void 0:L.data)==null?void 0:F.error)||c.message||"账户更新失败",H=((ke=(Ce=c.response)==null?void 0:Ce.data)==null?void 0:ke.suggestion)||"",X=((ce=(E=c.response)==null?void 0:E.data)==null?void 0:ce.errorDetails)||null;let fe=W;H&&(fe+=` ${H}`),X&&X.error_description?fe+=` 详细信息: ${X.error_description}`:X&&X.error&&X.error.message&&(fe+=` 详细信息: ${X.error.message}`),V(fe,"error","",8e3)}finally{ee.value=!1}}};re(()=>s.value.name,()=>{var u;w.value.name&&((u=s.value.name)!=null&&u.trim())&&(w.value.name="")}),re(()=>s.value.accessToken,()=>{var u;w.value.accessToken&&((u=s.value.accessToken)!=null&&u.trim())&&(w.value.accessToken="")}),re(()=>s.value.refreshToken,()=>{var u;w.value.refreshToken&&((u=s.value.refreshToken)!=null&&u.trim())&&(w.value.refreshToken="")}),re(()=>s.value.apiUrl,()=>{var u;w.value.apiUrl&&((u=s.value.apiUrl)!=null&&u.trim())&&(w.value.apiUrl="")}),re(()=>s.value.apiKey,()=>{var u;w.value.apiKey&&((u=s.value.apiKey)!=null&&u.trim())&&(w.value.apiKey="")}),re(()=>s.value.azureEndpoint,()=>{var u;w.value.azureEndpoint&&((u=s.value.azureEndpoint)!=null&&u.trim())&&(w.value.azureEndpoint="")}),re(()=>s.value.deploymentName,()=>{var u;w.value.deploymentName&&((u=s.value.deploymentName)!=null&&u.trim())&&(w.value.deploymentName="")});const ve=T([]),De=T(!1),y=T(!1),g=pe(()=>{let u=s.value.platform;return s.value.platform==="claude-console"||s.value.platform==="ccr"?u="claude":s.value.platform==="openai-responses"&&(u="openai"),ve.value.filter(t=>t.platform===u)}),I=async()=>{De.value=!0;try{const u=await M.get("/admin/account-groups");ve.value=u.data||[]}catch{V("加载分组列表失败","error"),ve.value=[]}finally{De.value=!1}},Se=async()=>{await I(),V("分组列表已刷新","success")},We=()=>{y.value=!0},we=async()=>{await I()};re(()=>s.value.platform,u=>{u==="claude-console"||u==="ccr"||u==="bedrock"||u==="openai-responses"?s.value.addType="manual":(u==="claude"||u==="gemini"||u==="openai")&&(s.value.addType="oauth"),s.value.accountType==="group"&&(s.value.groupId="",s.value.groupIds=[])}),re(()=>s.value.groupIds,u=>{s.value.accountType==="group"&&(u&&u.length>0?s.value.groupId=u[0]:s.value.groupId="")},{deep:!0}),re(()=>s.value.addType,(u,t)=>{u!==t&&(u==="apikey"?(s.value.accessToken="",s.value.refreshToken="",w.value.accessToken="",w.value.refreshToken="",s.value.authenticationMethod="api_key"):t==="apikey"&&(s.value.apiKeysInput="",s.value.clearExistingApiKeys=!1,w.value.apiKeys="",R.value||(s.value.authenticationMethod="")))}),re(()=>s.value.apiKeysInput,u=>{w.value.apiKeys&&$e(u).length>0&&(w.value.apiKeys="")}),re(b,u=>{if(!u||typeof u!="string")return;const t=u.trim();if(!t)return;if(t.startsWith("http://")||t.startsWith("https://"))if(t.startsWith("http://localhost:45462"))try{const F=new URL(t).searchParams.get("code");F?(b.value=F,V("成功提取授权码!","success")):V("URL 中未找到授权码参数,请检查链接是否正确","error")}catch{V("链接格式错误,请检查是否为完整的 URL","error")}else V("请粘贴以 http://localhost:45462 开头的链接","error")}),re(()=>s.value.platform,u=>{R.value||me("platform-changed",u)}),re(()=>s.value.accountType,u=>{u==="group"&&ve.value.length===0&&I()}),re(()=>s.value.groupId,u=>{u==="__new__"&&(s.value.groupId="",y.value=!0)});const ut=()=>{oe.value.push({from:"",to:""})},pt=u=>{oe.value.splice(u,1)},Ve=(u,t)=>{if(oe.value.some(L=>L.from===u)){V(`模型 ${u} 的映射已存在`,"info");return}oe.value.push({from:u,to:t}),V(`已添加映射: ${u} → ${t}`,"success")},Ae=()=>{const u={};return d.value==="whitelist"?j.value.forEach(t=>{u[t]=t}):oe.value.forEach(t=>{t.from&&t.to&&(u[t.from]=t.to)}),Object.keys(u).length>0?u:null};re(()=>p.account,u=>{if(u){Qe();const t=u.proxy&&u.proxy.host&&u.proxy.port?{enabled:!0,type:u.proxy.type||"socks5",host:u.proxy.host,port:u.proxy.port,username:u.proxy.username||"",password:u.proxy.password||""}:{enabled:!1,type:"socks5",host:"",port:"",username:"",password:""};let o="";u.accountType==="group"&&(o=u.groupId||u.groupInfo&&u.groupInfo.id||"");let L="claude_max";if(u.subscriptionInfo){const F=typeof u.subscriptionInfo=="string"?JSON.parse(u.subscriptionInfo):u.subscriptionInfo;F.accountType?L=F.accountType:F.hasClaudeMax?L="claude_max":F.hasClaudePro?L="claude_pro":L="claude_free"}s.value={platform:u.platform,addType:"oauth",name:u.name,description:u.description||"",accountType:u.accountType||"shared",subscriptionType:L,autoStopOnWarning:u.autoStopOnWarning||!1,useUnifiedUserAgent:u.useUnifiedUserAgent||!1,useUnifiedClientId:u.useUnifiedClientId||!1,unifiedClientId:u.unifiedClientId||"",groupId:o,groupIds:[],projectId:u.projectId||"",accessToken:"",refreshToken:"",proxy:t,apiUrl:u.apiUrl||"",apiKey:"",priority:u.priority||50,supportedModels:(()=>{const F=u.supportedModels;return F?typeof F=="object"&&!Array.isArray(F)?Object.keys(F):Array.isArray(F)?F:[]:[]})(),userAgent:u.userAgent||"",enableRateLimit:!!(u.rateLimitDuration&&u.rateLimitDuration>0),rateLimitDuration:u.rateLimitDuration||60,accessKeyId:"",secretAccessKey:"",region:u.region||"",sessionToken:"",defaultModel:u.defaultModel||"",smallFastModel:u.smallFastModel||"",azureEndpoint:u.azureEndpoint||"",apiVersion:u.apiVersion||"",deploymentName:u.deploymentName||"",baseApi:u.baseApi||"",dailyQuota:u.dailyQuota||0,dailyUsage:u.dailyUsage||0,quotaResetTime:u.quotaResetTime||"00:00"},u.platform==="claude-console"&&Ee(),u.accountType==="group"&&I().then(async()=>{const F=[];if(u.groupInfo&&u.groupInfo.id)s.value.groupId=u.groupInfo.id,F.push(u.groupInfo.id);else if(u.groupId)s.value.groupId=u.groupId,F.push(u.groupId);else if(u.groupIds&&Array.isArray(u.groupIds)&&u.groupIds.length>0)s.value.groupId=u.groupIds[0],F.push(...u.groupIds);else{const Ce=ve.value.map(async ke=>{try{((await M.get(`/admin/account-groups/${ke.id}/members`)).data||[]).some(c=>c.id===u.id)&&(F.push(ke.id),s.value.groupId||(s.value.groupId=ke.id))}catch{}});await Promise.all(Ce)}s.value.groupIds=F})}},{immediate:!0});const gt=async()=>{try{const u=await M.get("/admin/claude-code-version");u.success&&u.userAgent?O.value=u.userAgent:O.value=""}catch{O.value=""}},Ge=async()=>{U.value=!0;try{(await M.post("/admin/claude-code-version/clear")).success?(O.value="",V("统一User-Agent缓存已清除","success")):V("清除缓存失败","error")}catch(u){V("清除缓存失败:"+(u.message||"未知错误"),"error")}finally{U.value=!1}},Re=()=>{const u=new Uint8Array(32);return crypto.getRandomValues(u),Array.from(u,t=>t.toString(16).padStart(2,"0")).join("")},rt=()=>{s.value.unifiedClientId=Re(),V("已生成新的客户端标识","success")},mt=()=>{s.value.useUnifiedClientId&&(s.value.useUnifiedUserAgent=!0,s.value.unifiedClientId||(s.value.unifiedClientId=Re()))};return Bt(()=>{var u;D.value=be(s.value.platform),R.value&&Qe(),gt(),R.value&&((u=p.account)==null?void 0:u.platform)==="claude-console"&&Ee()}),re(()=>s.value.platform,u=>{u==="claude"&>()}),(u,t)=>(n(),Fe(Ht,{to:"body"},[G.value?(n(),i("div",Er,[e("div",Nr,[e("div",qr,[e("div",Wr,[t[127]||(t[127]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-user-circle text-sm text-white sm:text-base"})],-1)),e("h3",Gr,m(R.value?"编辑账户":"添加账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:t[0]||(t[0]=o=>u.$emit("close"))},t[128]||(t[128]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),!R.value&&(s.value.addType==="oauth"||s.value.addType==="setup-token")?(n(),i("div",Fr,[e("div",Qr,[e("div",Br,[e("div",{class:S(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",B.value>=1?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 1 ",2),t[129]||(t[129]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"基本信息",-1))]),t[131]||(t[131]=e("div",{class:"h-0.5 w-4 bg-gray-300 sm:w-8"},null,-1)),e("div",Hr,[e("div",{class:S(["flex h-6 w-6 items-center justify-center rounded-full text-xs font-semibold sm:h-8 sm:w-8 sm:text-sm",B.value>=2?"bg-blue-500 text-white":"bg-gray-200 text-gray-500"])}," 2 ",2),t[130]||(t[130]=e("span",{class:"ml-1.5 text-xs font-medium text-gray-700 dark:text-gray-300 sm:ml-2 sm:text-sm"},"授权认证",-1))])])])):f("",!0),B.value===1&&!R.value?(n(),i("div",Jr,[e("div",Yr,[R.value?f("",!0):(n(),i("div",Zr,[t[167]||(t[167]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择平台",-1)),e("div",Xr,[e("div",el,[e("div",{class:S(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[D.value==="claude"?"border-indigo-500 bg-gradient-to-br from-indigo-50 to-purple-50 shadow-md dark:from-indigo-900/20 dark:to-purple-900/20":"border-gray-200 bg-white hover:border-indigo-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-indigo-600"]]),onClick:t[1]||(t[1]=o=>Ke("claude"))},[e("div",tl,[e("div",sl,[t[133]||(t[133]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-indigo-500 to-purple-600"},[e("i",{class:"fas fa-brain text-sm text-white"})],-1)),D.value==="claude"?(n(),i("div",al,t[132]||(t[132]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[134]||(t[134]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Claude ",-1)),t[135]||(t[135]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Anthropic",-1))])],2),e("div",{class:S(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[D.value==="openai"?"border-emerald-500 bg-gradient-to-br from-emerald-50 to-teal-50 shadow-md dark:from-emerald-900/20 dark:to-teal-900/20":"border-gray-200 bg-white hover:border-emerald-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-emerald-600"]]),onClick:t[2]||(t[2]=o=>Ke("openai"))},[e("div",rl,[e("div",ll,[t[137]||(t[137]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-emerald-500 to-teal-600"},[e("svg",{class:"h-5 w-5 text-white",fill:"currentColor",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},[e("path",{d:"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.4069-.6813zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"})])],-1)),D.value==="openai"?(n(),i("div",ol,t[136]||(t[136]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[138]||(t[138]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," OpenAI ",-1)),t[139]||(t[139]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"GPT 系列",-1))])],2),e("div",{class:S(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[D.value==="gemini"?"border-blue-500 bg-gradient-to-br from-blue-50 to-indigo-50 shadow-md dark:from-blue-900/20 dark:to-indigo-900/20":"border-gray-200 bg-white hover:border-blue-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-blue-600"]]),onClick:t[3]||(t[3]=o=>Ke("gemini"))},[e("div",nl,[e("div",il,[t[141]||(t[141]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-indigo-600"},[e("i",{class:"fab fa-google text-sm text-white"})],-1)),D.value==="gemini"?(n(),i("div",dl,t[140]||(t[140]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[142]||(t[142]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Gemini ",-1)),t[143]||(t[143]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Google AI",-1))])],2),e("div",{class:S(["group relative cursor-pointer overflow-hidden rounded-lg border-2 transition-all duration-200",[D.value==="droid"?"border-rose-500 bg-gradient-to-br from-rose-50 to-orange-50 shadow-md dark:from-rose-900/20 dark:to-orange-900/20":"border-gray-200 bg-white hover:border-rose-300 hover:shadow dark:border-gray-700 dark:bg-gray-800 dark:hover:border-rose-600"]]),onClick:t[4]||(t[4]=o=>Ke("droid"))},[e("div",ul,[e("div",pl,[t[145]||(t[145]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-rose-500 to-orange-500"},[e("i",{class:"fas fa-robot text-sm text-white"})],-1)),D.value==="droid"?(n(),i("div",gl,t[144]||(t[144]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)]),t[146]||(t[146]=e("h4",{class:"mt-2 text-sm font-semibold text-gray-900 dark:text-gray-100"}," Droid ",-1)),t[147]||(t[147]=e("p",{class:"text-xs text-gray-600 dark:text-gray-400"},"Claude Droid",-1))])],2)]),D.value?(n(),i("div",ml,[t[166]||(t[166]=e("p",{class:"mb-2 text-xs font-medium text-gray-700 dark:text-gray-300"}," 选择具体平台类型: ",-1)),e("div",yl,[D.value==="claude"?(n(),i(xe,{key:0},[e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude"?"border-indigo-500 bg-indigo-50 dark:border-indigo-400 dark:bg-indigo-900/30":"border-gray-300 bg-white hover:border-indigo-400 hover:bg-indigo-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-indigo-500 dark:hover:bg-indigo-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude"},null,512),[[ge,s.value.platform]]),t[149]||(t[149]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-brain text-sm text-indigo-600 dark:text-indigo-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Code"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="claude"?(n(),i("div",cl,t[148]||(t[148]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="claude-console"?"border-purple-500 bg-purple-50 dark:border-purple-400 dark:bg-purple-900/30":"border-gray-300 bg-white hover:border-purple-400 hover:bg-purple-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-purple-500 dark:hover:bg-purple-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[6]||(t[6]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"claude-console"},null,512),[[ge,s.value.platform]]),t[151]||(t[151]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-terminal text-sm text-purple-600 dark:text-purple-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Claude Console"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"标准API")])],-1)),s.value.platform==="claude-console"?(n(),i("div",xl,t[150]||(t[150]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="bedrock"?"border-orange-500 bg-orange-50 dark:border-orange-400 dark:bg-orange-900/30":"border-gray-300 bg-white hover:border-orange-400 hover:bg-orange-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-orange-500 dark:hover:bg-orange-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"bedrock"},null,512),[[ge,s.value.platform]]),t[153]||(t[153]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-aws text-sm text-orange-600 dark:text-orange-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Bedrock"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"AWS")])],-1)),s.value.platform==="bedrock"?(n(),i("div",fl,t[152]||(t[152]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="ccr"?"border-cyan-500 bg-cyan-50 dark:border-cyan-400 dark:bg-cyan-900/30":"border-gray-300 bg-white hover:border-cyan-400 hover:bg-cyan-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-cyan-500 dark:hover:bg-cyan-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"ccr"},null,512),[[ge,s.value.platform]]),t[155]||(t[155]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-code-branch text-sm text-cyan-600 dark:text-cyan-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"CCR"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Claude Code Router")])],-1)),s.value.platform==="ccr"?(n(),i("div",bl,t[154]||(t[154]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)],64)):f("",!0),D.value==="openai"?(n(),i(xe,{key:1},[e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai"?"border-emerald-500 bg-emerald-50 dark:border-emerald-400 dark:bg-emerald-900/30":"border-gray-300 bg-white hover:border-emerald-400 hover:bg-emerald-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-emerald-500 dark:hover:bg-emerald-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[9]||(t[9]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai"},null,512),[[ge,s.value.platform]]),t[157]||(t[157]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-emerald-600 dark:text-emerald-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Codex Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="openai"?(n(),i("div",vl,t[156]||(t[156]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="openai-responses"?"border-teal-500 bg-teal-50 dark:border-teal-400 dark:bg-teal-900/30":"border-gray-300 bg-white hover:border-teal-400 hover:bg-teal-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-teal-500 dark:hover:bg-teal-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[10]||(t[10]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"openai-responses"},null,512),[[ge,s.value.platform]]),t[159]||(t[159]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-server text-sm text-teal-600 dark:text-teal-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Responses"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Openai-Responses")])],-1)),s.value.platform==="openai-responses"?(n(),i("div",kl,t[158]||(t[158]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2),e("label",{class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="azure_openai"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[11]||(t[11]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"azure_openai"},null,512),[[ge,s.value.platform]]),t[161]||(t[161]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-microsoft text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Azure"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"Azure Openai")])],-1)),s.value.platform==="azure_openai"?(n(),i("div",hl,t[160]||(t[160]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)],64)):f("",!0),D.value==="gemini"?(n(),i("label",{key:2,class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="gemini"?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300 bg-white hover:border-blue-400 hover:bg-blue-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-blue-500 dark:hover:bg-blue-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[12]||(t[12]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"gemini"},null,512),[[ge,s.value.platform]]),t[163]||(t[163]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fab fa-google text-sm text-blue-600 dark:text-blue-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Gemini Cli"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="gemini"?(n(),i("div",wl,t[162]||(t[162]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)):f("",!0),D.value==="droid"?(n(),i("label",{key:3,class:S(["group relative flex cursor-pointer items-center rounded-md border p-2 transition-all",[s.value.platform==="droid"?"border-rose-500 bg-rose-50 dark:border-rose-400 dark:bg-rose-900/30":"border-gray-300 bg-white hover:border-rose-400 hover:bg-rose-50/50 dark:border-gray-600 dark:bg-gray-700 dark:hover:border-rose-500 dark:hover:bg-rose-900/20"]])},[x(e("input",{"onUpdate:modelValue":t[13]||(t[13]=o=>s.value.platform=o),class:"sr-only",type:"radio",value:"droid"},null,512),[[ge,s.value.platform]]),t[165]||(t[165]=e("div",{class:"flex items-center gap-2"},[e("i",{class:"fas fa-robot text-sm text-rose-600 dark:text-rose-400"}),e("div",null,[e("span",{class:"block text-xs font-medium text-gray-900 dark:text-gray-100"},"Droid 专属"),e("span",{class:"text-xs text-gray-500 dark:text-gray-400"},"官方")])],-1)),s.value.platform==="droid"?(n(),i("div",$l,t[164]||(t[164]=[e("i",{class:"fas fa-check text-xs text-white"},null,-1)]))):f("",!0)],2)):f("",!0)])])):f("",!0)])])),!R.value&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),i("div",Al,[t[172]||(t[172]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"添加方式",-1)),e("div",Cl,[e("label",Ul,[x(e("input",{"onUpdate:modelValue":t[14]||(t[14]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"oauth"},null,512),[[ge,s.value.addType]]),e("span",Tl,[t[168]||(t[168]=$(" OAuth 授权",-1)),s.value.platform==="claude"||s.value.platform==="openai"?(n(),i("span",Il," (用量可视化)")):f("",!0)])]),s.value.platform==="claude"?(n(),i("label",_l,[x(e("input",{"onUpdate:modelValue":t[15]||(t[15]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"setup-token"},null,512),[[ge,s.value.addType]]),t[169]||(t[169]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Setup Token (效期长)",-1))])):f("",!0),e("label",Kl,[x(e("input",{"onUpdate:modelValue":t[16]||(t[16]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"manual"},null,512),[[ge,s.value.addType]]),t[170]||(t[170]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"手动输入 Access Token",-1))]),s.value.platform==="droid"?(n(),i("label",Sl,[x(e("input",{"onUpdate:modelValue":t[17]||(t[17]=o=>s.value.addType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"apikey"},null,512),[[ge,s.value.addType]]),t[171]||(t[171]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"使用 API Key (支持多个)",-1))])):f("",!0)])])):f("",!0),e("div",null,[t[173]||(t[173]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[18]||(t[18]=o=>s.value.name=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[K,s.value.name]]),w.value.name?(n(),i("p",Pl,m(w.value.name),1)):f("",!0)]),e("div",null,[t[174]||(t[174]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[19]||(t[19]=o=>s.value.description=o),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[K,s.value.description]])]),e("div",null,[t[178]||(t[178]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Ml,[e("label",Dl,[x(e("input",{"onUpdate:modelValue":t[20]||(t[20]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ge,s.value.accountType]]),t[175]||(t[175]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",Vl,[x(e("input",{"onUpdate:modelValue":t[21]||(t[21]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ge,s.value.accountType]]),t[176]||(t[176]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",Rl,[x(e("input",{"onUpdate:modelValue":t[22]||(t[22]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ge,s.value.accountType]]),t[177]||(t[177]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[179]||(t[179]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),i("div",zl,[t[181]||(t[181]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",jl,[e("div",Ol,[e("div",Ll,[g.value.length===0?(n(),i("div",El," 暂无可用分组 ")):f("",!0),(n(!0),i(xe,null,_e(g.value,o=>(n(),i("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[23]||(t[23]=L=>s.value.groupIds=L),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,Nl),[[ye,s.value.groupIds]]),e("span",ql,m(o.name)+" ("+m(o.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:We},t[180]||(t[180]=[e("i",{class:"fas fa-plus"},null,-1),$(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Se},[e("i",{class:S(["fas fa-sync-alt",{"animate-spin":De.value}])},null,2)])])])):f("",!0),s.value.platform==="gemini"?(n(),i("div",Wl,[t[182]||(t[182]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[24]||(t[24]=o=>s.value.projectId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[K,s.value.projectId]]),t[183]||(t[183]=e("div",{class:"mt-2 rounded-lg border border-yellow-200 bg-yellow-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-yellow-600"}),e("div",{class:"text-xs text-yellow-700"},[e("p",{class:"mb-1 font-medium"},"Google Cloud/Workspace 账号需要提供项目 ID"),e("p",null," 某些 Google 账号(特别是绑定了 Google Cloud 的账号)会被识别为 Workspace 账号,需要提供额外的项目 ID。 "),e("div",{class:"mt-2 rounded border border-yellow-300 bg-white p-2"},[e("p",{class:"mb-1 font-medium"},"如何获取项目 ID:"),e("ol",{class:"ml-2 list-inside list-decimal space-y-1"},[e("li",null,[$(" 访问 "),e("a",{class:"font-medium text-blue-600 hover:underline",href:"https://console.cloud.google.com/welcome",target:"_blank"},"Google Cloud Console")]),e("li",null,[$(" 复制"),e("span",{class:"font-semibold text-red-600"},"项目 ID(Project ID)"),$(",通常是字符串格式 ")]),e("li",{class:"text-red-600"}," ⚠️ 注意:要复制项目 ID(Project ID),不要复制项目编号(Project Number)! ")])]),e("p",{class:"mt-2"},[e("strong",null,"提示:"),$("如果您的账号是普通个人账号(未绑定 Google Cloud),请留空此字段。 ")])])])],-1))])):f("",!0),s.value.platform==="bedrock"&&!R.value?(n(),i("div",Gl,[e("div",null,[t[184]||(t[184]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 访问密钥 ID *",-1)),x(e("input",{"onUpdate:modelValue":t[25]||(t[25]=o=>s.value.accessKeyId=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.accessKeyId}]),placeholder:"请输入 AWS Access Key ID",required:"",type:"text"},null,2),[[K,s.value.accessKeyId]]),w.value.accessKeyId?(n(),i("p",Fl,m(w.value.accessKeyId),1)):f("",!0)]),e("div",null,[t[185]||(t[185]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 秘密访问密钥 *",-1)),x(e("input",{"onUpdate:modelValue":t[26]||(t[26]=o=>s.value.secretAccessKey=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.secretAccessKey}]),placeholder:"请输入 AWS Secret Access Key",required:"",type:"password"},null,2),[[K,s.value.secretAccessKey]]),w.value.secretAccessKey?(n(),i("p",Ql,m(w.value.secretAccessKey),1)):f("",!0)]),e("div",null,[t[186]||(t[186]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"AWS 区域 *",-1)),x(e("input",{"onUpdate:modelValue":t[27]||(t[27]=o=>s.value.region=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.region}]),placeholder:"例如:us-east-1",required:"",type:"text"},null,2),[[K,s.value.region]]),w.value.region?(n(),i("p",Bl,m(w.value.region),1)):f("",!0),t[187]||(t[187]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")]),e("p",{class:"mt-2 text-blue-600"},"💡 请输入完整的区域代码,如 us-east-1")])])],-1))]),e("div",null,[t[188]||(t[188]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[28]||(t[28]=o=>s.value.sessionToken=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"如果使用临时凭证,请输入会话令牌",type:"password"},null,512),[[K,s.value.sessionToken]]),t[189]||(t[189]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 仅在使用临时 AWS 凭证时需要填写 ",-1))]),e("div",null,[t[190]||(t[190]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[29]||(t[29]=o=>s.value.defaultModel=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[K,s.value.defaultModel]]),t[191]||(t[191]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1)),t[192]||(t[192]=e("div",{class:"mt-2 rounded-lg border border-amber-200 bg-amber-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-amber-600"}),e("div",{class:"text-xs text-amber-700"},[e("p",{class:"mb-1 font-medium"},"Bedrock 模型配置说明:"),e("ul",{class:"list-inside list-disc space-y-1 text-xs"},[e("li",null,"支持 Inference Profile ID(推荐)"),e("li",null,"支持 Application Inference Profile ARN"),e("li",null,"常用模型:us.anthropic.claude-sonnet-4-20250514-v1:0"),e("li",null,"留空将使用系统配置的默认模型")])])])],-1))]),e("div",null,[t[193]||(t[193]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[30]||(t[30]=o=>s.value.smallFastModel=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[K,s.value.smallFastModel]]),t[194]||(t[194]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 用于快速响应的轻量级模型,留空将使用系统默认 ",-1))])])):f("",!0),s.value.platform==="azure_openai"&&!R.value?(n(),i("div",Hl,[e("div",null,[t[195]||(t[195]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint *",-1)),x(e("input",{"onUpdate:modelValue":t[31]||(t[31]=o=>s.value.azureEndpoint=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",required:"",type:"url"},null,2),[[K,s.value.azureEndpoint]]),w.value.azureEndpoint?(n(),i("p",Jl,m(w.value.azureEndpoint),1)):f("",!0),t[196]||(t[196]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI 资源的终结点 URL,格式:https://your-resource.openai.azure.com ",-1))]),e("div",null,[t[197]||(t[197]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[32]||(t[32]=o=>s.value.apiVersion=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[K,s.value.apiVersion]]),t[198]||(t[198]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[199]||(t[199]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称 *",-1)),x(e("input",{"onUpdate:modelValue":t[33]||(t[33]=o=>s.value.deploymentName=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.deploymentName}]),placeholder:"gpt-4",required:"",type:"text"},null,2),[[K,s.value.deploymentName]]),w.value.deploymentName?(n(),i("p",Yl,m(w.value.deploymentName),1)):f("",!0),t[200]||(t[200]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 在 Azure OpenAI Studio 中创建的部署名称 ",-1))]),e("div",null,[t[201]||(t[201]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[34]||(t[34]=o=>s.value.apiKey=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiKey}]),placeholder:"请输入 Azure OpenAI API Key",required:"",type:"password"},null,2),[[K,s.value.apiKey]]),w.value.apiKey?(n(),i("p",Zl,m(w.value.apiKey),1)):f("",!0),t[202]||(t[202]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 从 Azure 门户获取的 API 密钥 ",-1))]),e("div",null,[t[203]||(t[203]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",Xl,[(n(),i(xe,null,_e(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[35]||(t[35]=L=>s.value.supportedModels=L),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,eo),[[ye,s.value.supportedModels]]),e("span",to,m(o),1)])),64))]),t[204]||(t[204]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 选择此部署支持的模型类型 ",-1))])])):f("",!0),s.value.platform==="bedrock"&&!R.value?(n(),i("div",so,[e("div",null,[t[209]||(t[209]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",ao,[e("label",ro,[x(e("input",{"onUpdate:modelValue":t[36]||(t[36]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.enableRateLimit]]),t[205]||(t[205]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[206]||(t[206]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",lo,[t[207]||(t[207]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[37]||(t[37]=o=>s.value.rateLimitDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]]),t[208]||(t[208]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)])])):f("",!0),(s.value.platform==="claude-console"||s.value.platform==="ccr")&&!R.value?(n(),i("div",oo,[e("div",null,[t[210]||(t[210]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":t[38]||(t[38]=o=>s.value.apiUrl=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiUrl}]),placeholder:"例如:https://api.example.com",required:"",type:"text"},null,2),[[K,s.value.apiUrl]]),w.value.apiUrl?(n(),i("p",no,m(w.value.apiUrl),1)):f("",!0)]),e("div",null,[t[211]||(t[211]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key *",-1)),x(e("input",{"onUpdate:modelValue":t[39]||(t[39]=o=>s.value.apiKey=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiKey}]),placeholder:"请输入API Key",required:"",type:"password"},null,2),[[K,s.value.apiKey]]),w.value.apiKey?(n(),i("p",io,m(w.value.apiKey),1)):f("",!0)]),e("div",uo,[e("div",null,[t[212]||(t[212]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[40]||(t[40]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[K,s.value.dailyQuota,void 0,{number:!0}]]),t[213]||(t[213]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[214]||(t[214]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[41]||(t[41]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[K,s.value.quotaResetTime]]),t[215]||(t[215]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 每日自动重置额度的时间 ",-1))])]),e("div",null,[t[223]||(t[223]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",po,[e("button",{class:S(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",d.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[42]||(t[42]=o=>d.value="whitelist")},t[216]||(t[216]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),$(" 模型白名单 ",-1)]),2),e("button",{class:S(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",d.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[43]||(t[43]=o=>d.value="mapping")},t[217]||(t[217]=[e("i",{class:"fas fa-random mr-2"},null,-1),$(" 模型映射 ",-1)]),2)]),d.value==="whitelist"?(n(),i("div",go,[t[218]||(t[218]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",mo,[(n(),i(xe,null,_e(Y,o=>e("label",{key:o.value,class:S(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",j.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[x(e("input",{"onUpdate:modelValue":t[44]||(t[44]=L=>j.value=L),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,yo),[[ye,j.value]]),e("span",co,m(o.label),1)],2)),64))]),e("p",xo,[$(" 已选择 "+m(j.value.length)+" 个模型 ",1),j.value.length===0?(n(),i("span",fo,"(支持所有模型)")):f("",!0)])])):(n(),i("div",bo,[t[222]||(t[222]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",vo,[(n(!0),i(xe,null,_e(oe.value,(o,L)=>(n(),i("div",{key:L,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":F=>o.from=F,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,ko),[[K,o.from]]),t[220]||(t[220]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":F=>o.to=F,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,ho),[[K,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:F=>pt(L)},t[219]||(t[219]=[e("i",{class:"fas fa-trash"},null,-1)]),8,wo)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:ut},t[221]||(t[221]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)])),e("div",$o,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[45]||(t[45]=o=>Ve("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[46]||(t[46]=o=>Ve("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[47]||(t[47]=o=>Ve("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[48]||(t[48]=o=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[224]||(t[224]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[49]||(t[49]=o=>s.value.userAgent=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[K,s.value.userAgent]]),t[225]||(t[225]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[230]||(t[230]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Ao,[e("label",Co,[x(e("input",{"onUpdate:modelValue":t[50]||(t[50]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.enableRateLimit]]),t[226]||(t[226]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制",-1))]),t[227]||(t[227]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",Uo,[t[228]||(t[228]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[51]||(t[51]=o=>s.value.rateLimitDuration=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]]),t[229]||(t[229]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)])])):f("",!0),s.value.platform==="openai-responses"&&!R.value?(n(),i("div",To,[e("div",null,[t[231]||(t[231]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 基础地址 *",-1)),x(e("input",{"onUpdate:modelValue":t[52]||(t[52]=o=>s.value.baseApi=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"https://api.example.com/v1",required:"",type:"url"},null,512),[[K,s.value.baseApi]]),t[232]||(t[232]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方 OpenAI 兼容 API 的基础地址,不要包含具体路径 ",-1))]),e("div",null,[t[233]||(t[233]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 密钥 *",-1)),e("div",Io,[x(e("input",{"onUpdate:modelValue":t[53]||(t[53]=o=>s.value.apiKey=o),class:"form-input w-full border-gray-300 pr-10 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"sk-xxxxxxxxxxxx",required:"",type:Z.value?"text":"password"},null,8,_o),[[Zt,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400",type:"button",onClick:t[54]||(t[54]=o=>Z.value=!Z.value)},[e("i",{class:S(Z.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[234]||(t[234]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 第三方服务提供的 API 密钥 ",-1))]),e("div",null,[t[235]||(t[235]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[55]||(t[55]=o=>s.value.userAgent=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空则透传原始请求的 User-Agent",type:"text"},null,512),[[K,s.value.userAgent]]),t[236]||(t[236]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 可选项。如果设置,所有请求将使用此 User-Agent;否则透传客户端的 User-Agent ",-1))]),x(e("input",{"onUpdate:modelValue":t[56]||(t[56]=o=>s.value.rateLimitDuration=o),type:"hidden",value:"60"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]])])):f("",!0),s.value.platform==="claude"?(n(),i("div",Ko,[t[239]||(t[239]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",So,[e("label",Po,[x(e("input",{"onUpdate:modelValue":t[57]||(t[57]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[ge,s.value.subscriptionType]]),t[237]||(t[237]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",Mo,[x(e("input",{"onUpdate:modelValue":t[58]||(t[58]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[ge,s.value.subscriptionType]]),t[238]||(t[238]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[240]||(t[240]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):f("",!0),s.value.platform==="claude"?(n(),i("div",Do,[e("label",Vo,[x(e("input",{"onUpdate:modelValue":t[59]||(t[59]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.autoStopOnWarning]]),t[241]||(t[241]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):f("",!0),s.value.platform==="claude"?(n(),i("div",Ro,[e("label",zo,[x(e("input",{"onUpdate:modelValue":t[60]||(t[60]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.useUnifiedUserAgent]]),e("div",jo,[t[243]||(t[243]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[244]||(t[244]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),O.value?(n(),i("div",Oo,[e("div",Lo,[e("p",Eo," 💡 当前统一版本:"+m(O.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:U.value,type:"button",onClick:Ge},[U.value?(n(),i("div",Wo)):(n(),i("i",qo)),$(" "+m(U.value?"清除中...":"清除缓存"),1)],8,No)])])):(n(),i("div",Go,t[242]||(t[242]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):f("",!0),s.value.platform==="claude"?(n(),i("div",Fo,[e("label",Qo,[x(e("input",{"onUpdate:modelValue":t[61]||(t[61]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:mt},null,544),[[ye,s.value.useUnifiedClientId]]),e("div",Bo,[t[248]||(t[248]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[249]||(t[249]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),i("div",Ho,[e("div",Jo,[e("div",{class:"mb-2 flex items-center justify-between"},[t[246]||(t[246]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:rt},t[245]||(t[245]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$(" 重新生成 ",-1)]))]),e("div",Yo,[e("code",Zo,[e("span",Xo,m(s.value.unifiedClientId.substring(0,8)),1),e("span",en,m(s.value.unifiedClientId.substring(8,56)),1),e("span",tn,m(s.value.unifiedClientId.substring(56)),1)])]),t[247]||(t[247]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),$(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):f("",!0)])])])):f("",!0),e("div",null,[t[250]||(t[250]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[62]||(t[62]=o=>s.value.priority=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高,默认50",type:"number"},null,512),[[K,s.value.priority,void 0,{number:!0}]]),t[251]||(t[251]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.addType==="manual"&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),i("div",sn,[e("div",an,[t[256]||(t[256]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-info text-sm text-white"})],-1)),e("div",null,[t[255]||(t[255]=e("h5",{class:"mb-2 font-semibold text-blue-900 dark:text-blue-300"}," 手动输入 Token ",-1)),s.value.platform==="claude"?(n(),i("p",rn," 请输入有效的 Claude Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="gemini"?(n(),i("p",ln," 请输入有效的 Gemini Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="openai"?(n(),i("p",on," 请输入有效的 OpenAI Access Token。如果您有 Refresh Token,建议也一并填写以支持自动刷新。 ")):s.value.platform==="droid"?(n(),i("p",nn," 请输入有效的 Droid Access Token,并同时提供 Refresh Token 以支持自动刷新。 ")):f("",!0),e("div",dn,[t[254]||(t[254]=e("p",{class:"mb-1 text-sm font-medium text-blue-900 dark:text-blue-300"},[e("i",{class:"fas fa-folder-open mr-1"}),$(" 获取 Access Token 的方法: ")],-1)),s.value.platform==="claude"?(n(),i("p",un,t[252]||(t[252]=[$(" 请从已登录 Claude Code 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.claude/.credentials.json",-1),$(" 文件中的凭证, 请勿使用 Claude 官网 API Keys 页面的密钥。 ",-1)]))):s.value.platform==="gemini"?(n(),i("p",pn,t[253]||(t[253]=[$(" 请从已登录 Gemini CLI 的机器上获取 ",-1),e("code",{class:"rounded bg-blue-100 px-1 py-0.5 font-mono dark:bg-blue-900/50"},"~/.config/gemini/credentials.json",-1),$(" 文件中的凭证。 ",-1)]))):s.value.platform==="openai"?(n(),i("p",gn," 请从已登录 OpenAI 账户的机器上获取认证凭证, 或通过 OAuth 授权流程获取 Access Token。 ")):s.value.platform==="droid"?(n(),i("p",mn," 请从已完成授权的 Droid CLI 或 Factory.ai 导出的凭证中获取 Access Token 与 Refresh Token。 ")):f("",!0)]),s.value.platform!=="droid"?(n(),i("p",yn," 💡 如果未填写 Refresh Token,Token 过期后需要手动更新。 ")):(n(),i("p",cn," ⚠️ Droid 账户必须填写 Refresh Token,缺失将导致无法自动刷新 Access Token。 "))])]),s.value.platform==="openai"?(n(),i("div",xn,[t[257]||(t[257]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[63]||(t[63]=o=>s.value.accessToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"可选:如果不填写,系统会自动通过 Refresh Token 获取...",rows:"4"},null,512),[[K,s.value.accessToken]]),t[258]||(t[258]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Access Token 可选填。如果不提供,系统会通过 Refresh Token 自动获取。 ")],-1))])):(n(),i("div",fn,[t[259]||(t[259]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Access Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[64]||(t[64]=o=>s.value.accessToken=o),class:S(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.accessToken}]),placeholder:"请输入 Access Token...",required:"",rows:"4"},null,2),[[K,s.value.accessToken]]),w.value.accessToken?(n(),i("p",bn,m(w.value.accessToken),1)):f("",!0)])),s.value.platform==="openai"||s.value.platform==="droid"?(n(),i("div",vn,[t[261]||(t[261]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token *",-1)),x(e("textarea",{"onUpdate:modelValue":t[65]||(t[65]=o=>s.value.refreshToken=o),class:S(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.refreshToken}]),placeholder:"请输入 Refresh Token(必填)...",required:"",rows:"4"},null,2),[[K,s.value.refreshToken]]),w.value.refreshToken?(n(),i("p",kn,m(w.value.refreshToken),1)):f("",!0),e("p",hn,[t[260]||(t[260]=e("i",{class:"fas fa-info-circle mr-1"},null,-1)),s.value.platform==="openai"?(n(),i(xe,{key:0},[$(" 系统将使用 Refresh Token 自动获取 Access Token 和用户信息 ")],64)):(n(),i(xe,{key:1},[$(" 系统将使用 Refresh Token 自动刷新 Factory.ai 访问令牌,确保账户保持可用。 ")],64))])])):(n(),i("div",wn,[t[262]||(t[262]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Refresh Token (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[66]||(t[66]=o=>s.value.refreshToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"请输入 Refresh Token...",rows:"4"},null,512),[[K,s.value.refreshToken]])]))])):f("",!0),s.value.addType==="apikey"&&s.value.platform==="droid"?(n(),i("div",$n,[t[265]||(t[265]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 使用 API Key 调度 Droid "),e("p",{class:"text-sm text-purple-800 dark:text-purple-200"}," 请填写一个或多个 Factory.ai API Key,系统会自动在请求时随机挑选并结合会话哈希维持粘性,确保对话上下文保持稳定。 ")])],-1)),e("div",null,[t[263]||(t[263]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key 列表 *",-1)),x(e("textarea",{"onUpdate:modelValue":t[67]||(t[67]=o=>s.value.apiKeysInput=o),class:S(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiKeys}]),placeholder:"每行一个 API Key,可粘贴多行",required:"",rows:"6"},null,2),[[K,s.value.apiKeysInput]]),w.value.apiKeys?(n(),i("p",An,m(w.value.apiKeys),1)):f("",!0),t[264]||(t[264]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 建议为每条 Key 提供独立额度;系统会自动去重并忽略空白行。 ")],-1))]),t[266]||(t[266]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-random mr-1"}),$("分配策略说明")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"新会话将随机命中一个 Key,并在会话有效期内保持粘性。"),e("li",null,"若某 Key 失效,会自动切换到剩余可用 Key,最大化成功率。")])],-1))])):f("",!0),Je(Xt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[68]||(t[68]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Cn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[69]||(t[69]=o=>u.$emit("close"))}," 取消 "),(s.value.addType==="oauth"||s.value.addType==="setup-token")&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),i("button",{key:0,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:Ne}," 下一步 ",8,Un)):(n(),i("button",{key:1,class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:dt},[ee.value?(n(),i("div",In)):f("",!0),$(" "+m(ee.value?"创建中...":"创建"),1)],8,Tn))])])])):f("",!0),B.value===2&&s.value.addType==="oauth"?(n(),Fe(rr,{key:2,platform:s.value.platform,proxy:s.value.proxy,onBack:t[70]||(t[70]=o=>B.value=1),onSuccess:tt},null,8,["platform","proxy"])):f("",!0),B.value===2&&s.value.addType==="setup-token"?(n(),i("div",_n,[s.value.platform==="claude"?(n(),i("div",Kn,[e("div",Sn,[e("div",Pn,[t[278]||(t[278]=e("div",{class:"flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-500"},[e("i",{class:"fas fa-key text-white"})],-1)),e("div",Mn,[t[276]||(t[276]=e("h4",{class:"mb-3 font-semibold text-blue-900 dark:text-blue-200"}," Claude Setup Token 授权 ",-1)),t[277]||(t[277]=e("p",{class:"mb-4 text-sm text-blue-800 dark:text-blue-300"}," 请按照以下步骤通过 Setup Token 完成 Claude 账户的授权: ",-1)),e("div",Dn,[e("div",Vn,[e("div",Rn,[t[269]||(t[269]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 1 ",-1)),e("div",zn,[t[268]||(t[268]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 点击下方按钮生成授权链接 ",-1)),A.value?(n(),i("div",En,[e("div",Nn,[e("input",{class:"form-input flex-1 bg-gray-50 font-mono text-xs dark:bg-gray-700",readonly:"",type:"text",value:A.value},null,8,qn),e("button",{class:"rounded-lg bg-gray-100 px-3 py-2 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:hover:bg-gray-600",title:"复制链接",onClick:it},[e("i",{class:S(P.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:nt},t[267]||(t[267]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$("重新生成 ",-1)]))])):(n(),i("button",{key:0,class:"btn btn-primary px-4 py-2 text-sm",disabled:J.value,onClick:qe},[J.value?(n(),i("div",Ln)):(n(),i("i",On)),$(" "+m(J.value?"生成中...":"生成 Setup Token 授权链接"),1)],8,jn))])])]),t[275]||(t[275]=e("div",{class:"rounded-lg border border-blue-300 bg-white/80 p-4 dark:border-blue-600 dark:bg-gray-800/80"},[e("div",{class:"flex items-start gap-3"},[e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 2 "),e("div",{class:"flex-1"},[e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 在浏览器中打开链接并完成授权 "),e("p",{class:"mb-2 text-sm text-blue-700 dark:text-blue-300"}," 请在新标签页中打开授权链接,登录您的 Claude 账户并授权 Claude Code。 "),e("div",{class:"rounded border border-yellow-300 bg-yellow-50 p-3 dark:border-yellow-700 dark:bg-yellow-900/30"},[e("p",{class:"text-xs text-yellow-800 dark:text-yellow-300"},[e("i",{class:"fas fa-exclamation-triangle mr-1"}),e("strong",null,"注意:"),$("如果您设置了代理,请确保浏览器也使用相同的代理访问授权页面。 ")])])])])],-1)),e("div",Wn,[e("div",Gn,[t[274]||(t[274]=e("div",{class:"flex h-6 w-6 flex-shrink-0 items-center justify-center rounded-full bg-blue-600 text-xs font-bold text-white"}," 3 ",-1)),e("div",Fn,[t[272]||(t[272]=e("p",{class:"mb-2 font-medium text-blue-900 dark:text-blue-200"}," 输入 Authorization Code ",-1)),t[273]||(t[273]=e("p",{class:"mb-3 text-sm text-blue-700 dark:text-blue-300"}," 授权完成后,从返回页面复制 Authorization Code,并粘贴到下方输入框: ",-1)),e("div",Qn,[e("div",null,[t[270]||(t[270]=e("label",{class:"mb-2 block text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-key mr-2 text-blue-500"}),$("Authorization Code ")],-1)),x(e("textarea",{"onUpdate:modelValue":t[71]||(t[71]=o=>b.value=o),class:"form-input w-full resize-none border-gray-300 font-mono text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"粘贴从Claude Code授权页面获取的Authorization Code...",rows:"3"},null,512),[[K,b.value]])]),t[271]||(t[271]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 请粘贴从Claude Code授权页面复制的Authorization Code ")],-1))])])])])])])])])])):f("",!0),e("div",Bn,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[72]||(t[72]=o=>B.value=1)}," 上一步 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:!at.value||q.value,type:"button",onClick:et},[q.value?(n(),i("div",Jn)):f("",!0),$(" "+m(q.value?"验证中...":"完成授权"),1)],8,Hn)])])):f("",!0),R.value?(n(),i("div",Yn,[e("div",null,[t[279]||(t[279]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称",-1)),x(e("input",{"onUpdate:modelValue":t[73]||(t[73]=o=>s.value.name=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,512),[[K,s.value.name]])]),e("div",null,[t[280]||(t[280]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":t[74]||(t[74]=o=>s.value.description=o),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"账户用途说明...",rows:"3"},null,512),[[K,s.value.description]])]),e("div",null,[t[284]||(t[284]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户类型",-1)),e("div",Zn,[e("label",Xn,[x(e("input",{"onUpdate:modelValue":t[75]||(t[75]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"shared"},null,512),[[ge,s.value.accountType]]),t[281]||(t[281]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"共享账户",-1))]),e("label",ei,[x(e("input",{"onUpdate:modelValue":t[76]||(t[76]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"dedicated"},null,512),[[ge,s.value.accountType]]),t[282]||(t[282]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"专属账户",-1))]),e("label",ti,[x(e("input",{"onUpdate:modelValue":t[77]||(t[77]=o=>s.value.accountType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"group"},null,512),[[ge,s.value.accountType]]),t[283]||(t[283]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"分组调度",-1))])]),t[285]||(t[285]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," 共享账户:供所有API Key使用;专属账户:仅供特定API Key使用;分组调度:加入分组供分组内调度 ",-1))]),s.value.accountType==="group"?(n(),i("div",si,[t[287]||(t[287]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"选择分组 *",-1)),e("div",ai,[e("div",ri,[e("div",li,[g.value.length===0?(n(),i("div",oi," 暂无可用分组 ")):f("",!0),(n(!0),i(xe,null,_e(g.value,o=>(n(),i("label",{key:o.id,class:"flex cursor-pointer items-center gap-2 rounded-md p-2 hover:bg-gray-50 dark:hover:bg-gray-600"},[x(e("input",{"onUpdate:modelValue":t[78]||(t[78]=L=>s.value.groupIds=L),class:"rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o.id},null,8,ni),[[ye,s.value.groupIds]]),e("span",ii,m(o.name)+" ("+m(o.memberCount||0)+" 个成员) ",1)]))),128)),e("div",{class:"border-t pt-2 dark:border-gray-600"},[e("button",{class:"flex items-center gap-2 text-sm text-blue-600 hover:text-blue-800 dark:text-blue-400 dark:hover:text-blue-300",type:"button",onClick:We},t[286]||(t[286]=[e("i",{class:"fas fa-plus"},null,-1),$(" 新建分组 ",-1)]))])])]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:hover:bg-gray-600",type:"button",onClick:Se},[e("i",{class:S(["fas fa-sync-alt",{"animate-spin":De.value}])},null,2)])])])):f("",!0),s.value.platform==="gemini"?(n(),i("div",di,[t[288]||(t[288]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"项目 ID (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[79]||(t[79]=o=>s.value.projectId=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"例如:verdant-wares-464411-k9",type:"text"},null,512),[[K,s.value.projectId]]),t[289]||(t[289]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"}," Google Cloud/Workspace 账号可能需要提供项目 ID ",-1))])):f("",!0),s.value.platform==="claude"?(n(),i("div",ui,[t[292]||(t[292]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"订阅类型",-1)),e("div",pi,[e("label",gi,[x(e("input",{"onUpdate:modelValue":t[80]||(t[80]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_max"},null,512),[[ge,s.value.subscriptionType]]),t[290]||(t[290]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Max",-1))]),e("label",mi,[x(e("input",{"onUpdate:modelValue":t[81]||(t[81]=o=>s.value.subscriptionType=o),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"radio",value:"claude_pro"},null,512),[[ge,s.value.subscriptionType]]),t[291]||(t[291]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"Claude Pro",-1))])]),t[293]||(t[293]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" Pro 账号不支持 Claude Opus 4 模型 ")],-1))])):f("",!0),s.value.platform==="claude"?(n(),i("div",yi,[e("label",ci,[x(e("input",{"onUpdate:modelValue":t[82]||(t[82]=o=>s.value.autoStopOnWarning=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.autoStopOnWarning]]),t[294]||(t[294]=e("div",{class:"ml-3"},[e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 5小时使用量接近限制时自动停止调度 "),e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 当系统检测到账户接近5小时使用限制时,自动暂停调度该账户。进入新的时间窗口后会自动恢复调度。 ")],-1))])])):f("",!0),s.value.platform==="claude"?(n(),i("div",xi,[e("label",fi,[x(e("input",{"onUpdate:modelValue":t[83]||(t[83]=o=>s.value.useUnifiedUserAgent=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,s.value.useUnifiedUserAgent]]),e("div",bi,[t[296]||(t[296]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一 Claude Code 版本 ",-1)),t[297]||(t[297]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用从真实 Claude Code 客户端捕获的统一 User-Agent,提高兼容性 ",-1)),O.value?(n(),i("div",vi,[e("div",ki,[e("p",hi," 💡 当前统一版本:"+m(O.value),1),e("button",{class:"ml-2 text-xs text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300",disabled:U.value,type:"button",onClick:Ge},[U.value?(n(),i("div",Ai)):(n(),i("i",$i)),$(" "+m(U.value?"清除中...":"清除缓存"),1)],8,wi)])])):(n(),i("div",Ci,t[295]||(t[295]=[e("p",{class:"text-xs text-gray-500 dark:text-gray-400"}," ⏳ 等待从 Claude Code 客户端捕获 User-Agent ",-1),e("p",{class:"mt-1 text-xs text-gray-400 dark:text-gray-500"}," 💡 提示:如果长时间未能捕获,请确认有 Claude Code 客户端正在使用此账户, 或联系开发者检查 User-Agent 格式是否发生变化 ",-1)])))])])])):f("",!0),s.value.platform==="claude"?(n(),i("div",Ui,[e("label",Ti,[x(e("input",{"onUpdate:modelValue":t[84]||(t[84]=o=>s.value.useUnifiedClientId=o),class:"mt-1 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",onChange:mt},null,544),[[ye,s.value.useUnifiedClientId]]),e("div",Ii,[t[301]||(t[301]=e("span",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," 使用统一的客户端标识 ",-1)),t[302]||(t[302]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 开启后将使用固定的客户端标识,使所有请求看起来来自同一个客户端,减少特征 ",-1)),s.value.useUnifiedClientId?(n(),i("div",_i,[e("div",Ki,[e("div",{class:"mb-2 flex items-center justify-between"},[t[299]||(t[299]=e("span",{class:"text-xs font-medium text-gray-600 dark:text-gray-400"},"客户端标识 ID",-1)),e("button",{class:"rounded-md bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:rt},t[298]||(t[298]=[e("i",{class:"fas fa-sync-alt mr-1"},null,-1),$(" 重新生成 ",-1)]))]),e("div",Si,[e("code",Pi,[e("span",Mi,m(s.value.unifiedClientId.substring(0,8)),1),e("span",Di,m(s.value.unifiedClientId.substring(8,56)),1),e("span",Vi,m(s.value.unifiedClientId.substring(56)),1)])]),t[300]||(t[300]=e("p",{class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-info-circle mr-1 text-blue-500"}),$(" 此ID将替换请求中的user_id客户端部分,保留session部分用于粘性会话 ")],-1))])])):f("",!0)])])])):f("",!0),e("div",null,[t[303]||(t[303]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"调度优先级 (1-100)",-1)),x(e("input",{"onUpdate:modelValue":t[85]||(t[85]=o=>s.value.priority=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",max:"100",min:"1",placeholder:"数字越小优先级越高",type:"number"},null,512),[[K,s.value.priority,void 0,{number:!0}]]),t[304]||(t[304]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 数字越小优先级越高,建议范围:1-100 ",-1))]),s.value.platform==="claude-console"||s.value.platform==="ccr"?(n(),i("div",Ri,[e("div",null,[t[305]||(t[305]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API URL",-1)),x(e("input",{"onUpdate:modelValue":t[86]||(t[86]=o=>s.value.apiUrl=o),class:"form-input w-full",placeholder:"例如:https://api.example.com",required:"",type:"text"},null,512),[[K,s.value.apiUrl]])]),e("div",null,[t[306]||(t[306]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[87]||(t[87]=o=>s.value.apiKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[K,s.value.apiKey]]),t[307]||(t[307]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",zi,[e("div",null,[t[308]||(t[308]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[88]||(t[88]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[K,s.value.dailyQuota,void 0,{number:!0}]]),t[309]||(t[309]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[t[310]||(t[310]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[89]||(t[89]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[K,s.value.quotaResetTime]]),t[311]||(t[311]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),R.value&&s.value.dailyQuota>0?(n(),i("div",ji,[e("div",Oi,[t[312]||(t[312]=e("span",{class:"text-sm font-semibold text-gray-700 dark:text-gray-300"}," 今日使用情况 ",-1)),e("span",Li," $"+m(Xe().toFixed(4))+" / $"+m(s.value.dailyQuota.toFixed(2)),1)]),e("div",Ei,[e("div",{class:S(["absolute left-0 top-0 h-full rounded-full transition-all",Ze.value>=90?"bg-red-500":Ze.value>=70?"bg-yellow-500":"bg-green-500"]),style:Me({width:`${Math.min(Ze.value,100)}%`})},null,6)]),e("div",Ni,[e("span",qi," 剩余: $"+m(Math.max(0,s.value.dailyQuota-Xe()).toFixed(2)),1),e("span",Wi,m(Ze.value.toFixed(1))+"% 已使用 ",1)])])):f("",!0),e("div",null,[t[320]||(t[320]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型限制 (可选)",-1)),e("div",Gi,[e("button",{class:S(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",d.value==="whitelist"?"bg-blue-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-blue-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-blue-500"]),type:"button",onClick:t[90]||(t[90]=o=>d.value="whitelist")},t[313]||(t[313]=[e("i",{class:"fas fa-check-circle mr-2"},null,-1),$(" 模型白名单 ",-1)]),2),e("button",{class:S(["flex-1 rounded-lg px-4 py-2 text-sm font-medium transition-all",d.value==="mapping"?"bg-purple-500 text-white shadow-md":"border border-gray-300 text-gray-600 hover:border-purple-300 dark:border-gray-600 dark:text-gray-400 dark:hover:border-purple-500"]),type:"button",onClick:t[91]||(t[91]=o=>d.value="mapping")},t[314]||(t[314]=[e("i",{class:"fas fa-random mr-2"},null,-1),$(" 模型映射 ",-1)]),2)]),d.value==="whitelist"?(n(),i("div",Fi,[t[315]||(t[315]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 选择允许使用此账户的模型。留空表示支持所有模型。 ")])],-1)),e("div",Qi,[(n(),i(xe,null,_e(Y,o=>e("label",{key:o.value,class:S(["flex cursor-pointer items-center rounded-lg border p-3 transition-all hover:bg-gray-50 dark:border-gray-600 dark:hover:bg-gray-700",j.value.includes(o.value)?"border-blue-500 bg-blue-50 dark:border-blue-400 dark:bg-blue-900/30":"border-gray-300"])},[x(e("input",{"onUpdate:modelValue":t[92]||(t[92]=L=>j.value=L),class:"mr-2 text-blue-600 focus:ring-blue-500",type:"checkbox",value:o.value},null,8,Bi),[[ye,j.value]]),e("span",Hi,m(o.label),1)],2)),64))]),e("p",Ji,[$(" 已选择 "+m(j.value.length)+" 个模型 ",1),j.value.length===0?(n(),i("span",Yi,"(支持所有模型)")):f("",!0)])])):(n(),i("div",Zi,[t[319]||(t[319]=e("div",{class:"mb-3 rounded-lg bg-purple-50 p-3 dark:bg-purple-900/30"},[e("p",{class:"text-xs text-purple-700 dark:text-purple-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 配置模型映射关系。左侧是客户端请求的模型,右侧是实际发送给API的模型。 ")])],-1)),e("div",Xi,[(n(!0),i(xe,null,_e(oe.value,(o,L)=>(n(),i("div",{key:L,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":F=>o.from=F,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"原始模型名称",type:"text"},null,8,ed),[[K,o.from]]),t[317]||(t[317]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":F=>o.to=F,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"映射后的模型名称",type:"text"},null,8,td),[[K,o.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:F=>pt(L)},t[316]||(t[316]=[e("i",{class:"fas fa-trash"},null,-1)]),8,sd)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500",type:"button",onClick:ut},t[318]||(t[318]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)])),e("div",ad,[e("button",{class:"rounded-lg bg-blue-100 px-3 py-1 text-xs text-blue-700 transition-colors hover:bg-blue-200 dark:bg-blue-900/30 dark:text-blue-400 dark:hover:bg-blue-900/50",type:"button",onClick:t[93]||(t[93]=o=>Ve("claude-sonnet-4-20250514","claude-sonnet-4-20250514"))}," + Sonnet 4 "),e("button",{class:"rounded-lg bg-purple-100 px-3 py-1 text-xs text-purple-700 transition-colors hover:bg-purple-200 dark:bg-purple-900/30 dark:text-purple-400 dark:hover:bg-purple-900/50",type:"button",onClick:t[94]||(t[94]=o=>Ve("claude-opus-4-1-20250805","claude-opus-4-1-20250805"))}," + Opus 4.1 "),e("button",{class:"rounded-lg bg-green-100 px-3 py-1 text-xs text-green-700 transition-colors hover:bg-green-200 dark:bg-green-900/30 dark:text-green-400 dark:hover:bg-green-900/50",type:"button",onClick:t[95]||(t[95]=o=>Ve("claude-3-5-haiku-20241022","claude-3-5-haiku-20241022"))}," + Haiku 3.5 "),e("button",{class:"rounded-lg bg-orange-100 px-3 py-1 text-xs text-orange-700 transition-colors hover:bg-orange-200 dark:bg-orange-900/30 dark:text-orange-400 dark:hover:bg-orange-900/50",type:"button",onClick:t[96]||(t[96]=o=>Ve("claude-opus-4-1-20250805","claude-sonnet-4-20250514"))}," + Opus → Sonnet ")])]))]),e("div",null,[t[321]||(t[321]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[97]||(t[97]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[K,s.value.userAgent]]),t[322]||(t[322]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),e("div",null,[t[327]||(t[327]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",rd,[e("label",ld,[x(e("input",{"onUpdate:modelValue":t[98]||(t[98]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ye,s.value.enableRateLimit]]),t[323]||(t[323]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[324]||(t[324]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",od,[t[325]||(t[325]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[99]||(t[99]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]]),t[326]||(t[326]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):f("",!0)])])):f("",!0),s.value.platform==="openai-responses"?(n(),i("div",nd,[e("div",null,[t[328]||(t[328]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 基础地址",-1)),x(e("input",{"onUpdate:modelValue":t[100]||(t[100]=o=>s.value.baseApi=o),class:"form-input w-full",placeholder:"https://api.example.com/v1",type:"url"},null,512),[[K,s.value.baseApi]])]),e("div",null,[t[329]||(t[329]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"API 密钥",-1)),e("div",id,[x(e("input",{"onUpdate:modelValue":t[101]||(t[101]=o=>s.value.apiKey=o),class:"form-input w-full pr-10",placeholder:"留空表示不更新",type:Z.value?"text":"password"},null,8,dd),[[Zt,s.value.apiKey]]),e("button",{class:"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600",type:"button",onClick:t[102]||(t[102]=o=>Z.value=!Z.value)},[e("i",{class:S(Z.value?"fas fa-eye-slash":"fas fa-eye")},null,2)])]),t[330]||(t[330]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 API Key",-1))]),e("div",null,[t[331]||(t[331]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"自定义 User-Agent",-1)),x(e("input",{"onUpdate:modelValue":t[103]||(t[103]=o=>s.value.userAgent=o),class:"form-input w-full",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[K,s.value.userAgent]]),t[332]||(t[332]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空时将自动使用客户端的 User-Agent,仅在需要固定特定 UA 时填写 ",-1))]),x(e("input",{"onUpdate:modelValue":t[104]||(t[104]=o=>s.value.rateLimitDuration=o),type:"hidden"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]]),e("div",ud,[e("div",null,[t[333]||(t[333]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 每日额度限制 ($) ",-1)),x(e("input",{"onUpdate:modelValue":t[105]||(t[105]=o=>s.value.dailyQuota=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[K,s.value.dailyQuota,void 0,{number:!0}]])]),e("div",null,[t[334]||(t[334]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"}," 额度重置时间 ",-1)),x(e("input",{"onUpdate:modelValue":t[106]||(t[106]=o=>s.value.quotaResetTime=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",type:"time"},null,512),[[K,s.value.quotaResetTime]])])])])):f("",!0),s.value.platform==="bedrock"?(n(),i("div",pd,[e("div",null,[t[335]||(t[335]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 访问密钥 ID",-1)),x(e("input",{"onUpdate:modelValue":t[107]||(t[107]=o=>s.value.accessKeyId=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"text"},null,512),[[K,s.value.accessKeyId]]),t[336]||(t[336]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Access Key ID",-1))]),e("div",null,[t[337]||(t[337]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 秘密访问密钥",-1)),x(e("input",{"onUpdate:modelValue":t[108]||(t[108]=o=>s.value.secretAccessKey=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[K,s.value.secretAccessKey]]),t[338]||(t[338]=e("p",{class:"mt-1 text-xs text-gray-500"},"留空表示不更新 AWS Secret Access Key",-1))]),e("div",null,[t[339]||(t[339]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"AWS 区域",-1)),x(e("input",{"onUpdate:modelValue":t[109]||(t[109]=o=>s.value.region=o),class:"form-input w-full",placeholder:"例如:us-east-1",type:"text"},null,512),[[K,s.value.region]]),t[340]||(t[340]=e("div",{class:"mt-2 rounded-lg border border-blue-200 bg-blue-50 p-3"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-0.5 text-blue-600"}),e("div",{class:"text-xs text-blue-700"},[e("p",{class:"mb-1 font-medium"},"常用 AWS 区域参考:"),e("div",{class:"grid grid-cols-2 gap-1 text-xs"},[e("span",null,"• us-east-1 (美国东部)"),e("span",null,"• us-west-2 (美国西部)"),e("span",null,"• eu-west-1 (欧洲爱尔兰)"),e("span",null,"• ap-southeast-1 (新加坡)"),e("span",null,"• ap-northeast-1 (东京)"),e("span",null,"• eu-central-1 (法兰克福)")])])])],-1))]),e("div",null,[t[341]||(t[341]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"会话令牌 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[110]||(t[110]=o=>s.value.sessionToken=o),class:"form-input w-full",placeholder:"留空表示不更新",type:"password"},null,512),[[K,s.value.sessionToken]])]),e("div",null,[t[342]||(t[342]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"默认主模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[111]||(t[111]=o=>s.value.defaultModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-sonnet-4-20250514-v1:0",type:"text"},null,512),[[K,s.value.defaultModel]]),t[343]||(t[343]=e("p",{class:"mt-1 text-xs text-gray-500"}," 留空将使用系统默认模型。支持 inference profile ID 或 ARN ",-1))]),e("div",null,[t[344]||(t[344]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"小快速模型 (可选)",-1)),x(e("input",{"onUpdate:modelValue":t[112]||(t[112]=o=>s.value.smallFastModel=o),class:"form-input w-full",placeholder:"例如:us.anthropic.claude-3-5-haiku-20241022-v1:0",type:"text"},null,512),[[K,s.value.smallFastModel]]),t[345]||(t[345]=e("p",{class:"mt-1 text-xs text-gray-500"},"用于快速响应的轻量级模型,留空将使用系统默认",-1))]),e("div",null,[t[350]||(t[350]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流机制",-1)),e("div",gd,[e("label",md,[x(e("input",{"onUpdate:modelValue":t[113]||(t[113]=o=>s.value.enableRateLimit=o),class:"mr-2 rounded border-gray-300 text-blue-600 focus:border-blue-500 focus:ring focus:ring-blue-200",type:"checkbox"},null,512),[[ye,s.value.enableRateLimit]]),t[346]||(t[346]=e("span",{class:"text-sm text-gray-700"},"启用限流机制",-1))]),t[347]||(t[347]=e("p",{class:"mt-1 text-xs text-gray-500"}," 启用后,当账号返回429错误时将暂停调度一段时间 ",-1))]),s.value.enableRateLimit?(n(),i("div",yd,[t[348]||(t[348]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":t[114]||(t[114]=o=>s.value.rateLimitDuration=o),class:"form-input w-full",min:"1",type:"number"},null,512),[[K,s.value.rateLimitDuration,void 0,{number:!0}]]),t[349]||(t[349]=e("p",{class:"mt-1 text-xs text-gray-500"},"账号被限流后暂停调度的时间(分钟)",-1))])):f("",!0)])])):f("",!0),s.value.platform==="azure_openai"?(n(),i("div",cd,[e("div",null,[t[351]||(t[351]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"Azure Endpoint",-1)),x(e("input",{"onUpdate:modelValue":t[115]||(t[115]=o=>s.value.azureEndpoint=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.azureEndpoint}]),placeholder:"https://your-resource.openai.azure.com",type:"url"},null,2),[[K,s.value.azureEndpoint]]),w.value.azureEndpoint?(n(),i("p",xd,m(w.value.azureEndpoint),1)):f("",!0)]),e("div",null,[t[352]||(t[352]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API 版本",-1)),x(e("input",{"onUpdate:modelValue":t[116]||(t[116]=o=>s.value.apiVersion=o),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"2024-02-01",type:"text"},null,512),[[K,s.value.apiVersion]]),t[353]||(t[353]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," Azure OpenAI API 版本,默认使用最新稳定版本 2024-02-01 ",-1))]),e("div",null,[t[354]||(t[354]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"部署名称",-1)),x(e("input",{"onUpdate:modelValue":t[117]||(t[117]=o=>s.value.deploymentName=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.deploymentName}]),placeholder:"gpt-4",type:"text"},null,2),[[K,s.value.deploymentName]]),w.value.deploymentName?(n(),i("p",fd,m(w.value.deploymentName),1)):f("",!0)]),e("div",null,[t[355]||(t[355]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API Key",-1)),x(e("input",{"onUpdate:modelValue":t[118]||(t[118]=o=>s.value.apiKey=o),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiKey}]),placeholder:"留空表示不更新",type:"password"},null,2),[[K,s.value.apiKey]]),w.value.apiKey?(n(),i("p",bd,m(w.value.apiKey),1)):f("",!0),t[356]||(t[356]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"留空表示不更新 API Key",-1))]),e("div",null,[t[357]||(t[357]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"支持的模型",-1)),e("div",vd,[(n(),i(xe,null,_e(["gpt-4","gpt-4-turbo","gpt-4o","gpt-4o-mini","gpt-5","gpt-5-mini","gpt-35-turbo","gpt-35-turbo-16k","codex-mini"],o=>e("label",{key:o,class:"flex cursor-pointer items-center"},[x(e("input",{"onUpdate:modelValue":t[119]||(t[119]=L=>s.value.supportedModels=L),class:"mr-2 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox",value:o},null,8,kd),[[ye,s.value.supportedModels]]),e("span",hd,m(o),1)])),64))]),t[358]||(t[358]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"选择此部署支持的模型类型",-1))])])):f("",!0),R.value&&Be.value?(n(),i("div",wd,[e("div",$d,[t[363]||(t[363]=e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-purple-500"},[e("i",{class:"fas fa-retweet text-sm text-white"})],-1)),e("div",null,[t[361]||(t[361]=e("h5",{class:"mb-2 font-semibold text-purple-900 dark:text-purple-200"}," 更新 API Key ",-1)),e("p",Ad,[t[359]||(t[359]=$(" 当前已保存 ",-1)),e("strong",null,m(ot.value),1),t[360]||(t[360]=$(" 条 API Key。您可以追加新的 Key 或使用下方选项清空后重新填写。 ",-1))]),t[362]||(t[362]=e("p",{class:"text-xs text-purple-700 dark:text-purple-300"}," 留空表示保留现有 Key 不变;填写内容后将覆盖或追加(视清空选项而定)。 ",-1))])]),e("div",Cd,[e("div",null,[t[364]||(t[364]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 API Key 列表",-1)),x(e("textarea",{"onUpdate:modelValue":t[120]||(t[120]=o=>s.value.apiKeysInput=o),class:S(["form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",{"border-red-500":w.value.apiKeys}]),placeholder:"留空表示不更新;每行一个 API Key",rows:"6"},null,2),[[K,s.value.apiKeysInput]]),w.value.apiKeys?(n(),i("p",Ud,m(w.value.apiKeys),1)):f("",!0)]),e("label",Td,[x(e("input",{"onUpdate:modelValue":t[121]||(t[121]=o=>s.value.clearExistingApiKeys=o),class:"rounded border-purple-300 text-purple-600 focus:ring-purple-500 dark:border-purple-500 dark:bg-purple-900",type:"checkbox"},null,512),[[ye,s.value.clearExistingApiKeys]]),t[365]||(t[365]=e("span",null,"清空已有 API Key 后再应用上方的 Key 列表",-1))]),t[366]||(t[366]=e("div",{class:"rounded-lg border border-purple-200 bg-white/70 p-3 text-xs text-purple-800 dark:border-purple-700 dark:bg-purple-800/20 dark:text-purple-100"},[e("p",{class:"font-medium"},[e("i",{class:"fas fa-lightbulb mr-1"}),$("小提示")]),e("ul",{class:"mt-1 list-disc space-y-1 pl-4"},[e("li",null,"系统会为新的 Key 自动建立粘性映射,保持同一会话命中同一个 Key。"),e("li",null,"勾选“清空”后保存即彻底移除旧 Key,可用于紧急轮换或封禁处理。")])],-1))])])):f("",!0),!(R.value&&Be.value)&&s.value.platform!=="claude-console"&&s.value.platform!=="ccr"&&s.value.platform!=="bedrock"&&s.value.platform!=="azure_openai"&&s.value.platform!=="openai-responses"?(n(),i("div",Id,[t[369]||(t[369]=e("div",{class:"mb-4 flex items-start gap-3"},[e("div",{class:"mt-1 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-amber-500"},[e("i",{class:"fas fa-key text-sm text-white"})]),e("div",null,[e("h5",{class:"mb-2 font-semibold text-amber-900 dark:text-amber-300"},"更新 Token"),e("p",{class:"mb-2 text-sm text-amber-800 dark:text-amber-300"}," 可以更新 Access Token 和 Refresh Token。为了安全起见,不会显示当前的 Token 值。 "),e("p",{class:"text-xs text-amber-600 dark:text-amber-400"},"💡 留空表示不更新该字段。")])],-1)),e("div",_d,[e("div",null,[t[367]||(t[367]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Access Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[122]||(t[122]=o=>s.value.accessToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[K,s.value.accessToken]])]),e("div",null,[t[368]||(t[368]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"新的 Refresh Token",-1)),x(e("textarea",{"onUpdate:modelValue":t[123]||(t[123]=o=>s.value.refreshToken=o),class:"form-input w-full resize-none border-gray-300 font-mono text-xs dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"留空表示不更新...",rows:"4"},null,512),[[K,s.value.refreshToken]])])])])):f("",!0),Je(Xt,{modelValue:s.value.proxy,"onUpdate:modelValue":t[124]||(t[124]=o=>s.value.proxy=o)},null,8,["modelValue"]),e("div",Kd,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:t[125]||(t[125]=o=>u.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:ee.value,type:"button",onClick:Le},[ee.value?(n(),i("div",Pd)):f("",!0),$(" "+m(ee.value?"更新中...":"更新"),1)],8,Sd)])])):f("",!0)])])):f("",!0),Je(is,{"cancel-text":Oe(se).cancelText,"confirm-text":Oe(se).confirmText,message:Oe(se).message,show:Oe(N),title:Oe(se).title,onCancel:Oe(v),onConfirm:Oe(k)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),y.value?(n(),Fe(Lr,{key:1,onClose:t[126]||(t[126]=o=>y.value=!1),onRefresh:we})):f("",!0)]))}},as=Jt(Md,[["__scopeId","data-v-b9485de5"]]),Dd={key:0,class:"modal fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4"},Vd={class:"modal-content custom-scrollbar mx-auto max-h-[90vh] w-full max-w-2xl overflow-y-auto p-4 sm:p-6 md:p-8"},Rd={class:"mb-4 flex items-center justify-between sm:mb-6"},zd={class:"flex items-center gap-2 sm:gap-3"},jd={class:"text-lg font-bold text-gray-900 dark:text-gray-100 sm:text-xl"},Od={class:"space-y-6"},Ld={key:0,class:"mt-1 text-xs text-red-500"},Ed={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Nd={key:0,class:"mt-1 text-xs text-red-500"},qd={class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},Wd=["placeholder","required"],Gd={key:0,class:"mt-1 text-xs text-red-500"},Fd={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Qd={class:"mb-3"},Bd={class:"inline-flex cursor-pointer items-center"},Hd={key:0},Jd={class:"grid grid-cols-1 gap-4 sm:grid-cols-2"},Yd={class:"mb-3 space-y-2"},Zd=["onUpdate:modelValue"],Xd=["onUpdate:modelValue"],e0=["onClick"],t0={class:"mt-2 flex gap-3"},s0=["disabled"],a0={key:0,class:"loading-spinner mr-2"},r0={__name:"CcrAccountForm",props:{account:{type:Object,default:null}},emits:["close","success"],setup(Q,{emit:he}){const p=Q,me=he,_=T(!0),N=pe(()=>!!p.account),se=T(!1),h=T({name:"",description:"",apiUrl:"",apiKey:"",priority:50,userAgent:"",rateLimitDuration:60,dailyQuota:0,quotaResetTime:"00:00",proxy:null,supportedModels:{}}),k=T(!0),v=T({}),R=T([]),G=()=>{const A={};for(const b of R.value){const P=(b.from||"").trim(),te=(b.to||"").trim();P&&te&&(A[P]=te)}return A},B=()=>{R.value.push({from:"",to:""})},ee=A=>{R.value.splice(A,1)},Z=()=>{const A={};return(!h.value.name||h.value.name.trim().length===0)&&(A.name="名称不能为空"),(!h.value.apiUrl||h.value.apiUrl.trim().length===0)&&(A.apiUrl="API URL 不能为空"),!N.value&&(!h.value.apiKey||h.value.apiKey.trim().length===0)&&(A.apiKey="API Key 不能为空"),v.value=A,Object.keys(A).length===0},J=async()=>{if(Z()){se.value=!0;try{if(N.value){const A={name:h.value.name,description:h.value.description,apiUrl:h.value.apiUrl,priority:h.value.priority,userAgent:h.value.userAgent,rateLimitDuration:k.value?Number(h.value.rateLimitDuration||60):0,dailyQuota:Number(h.value.dailyQuota||0),quotaResetTime:h.value.quotaResetTime||"00:00",proxy:h.value.proxy||null,supportedModels:G()};h.value.apiKey&&h.value.apiKey.trim().length>0&&(A.apiKey=h.value.apiKey);const b=await M.put(`/admin/ccr-accounts/${p.account.id}`,A);b.success?me("success"):V(b.message||"保存失败","error")}else{const A={name:h.value.name,description:h.value.description,apiUrl:h.value.apiUrl,apiKey:h.value.apiKey,priority:Number(h.value.priority||50),supportedModels:G(),userAgent:h.value.userAgent,rateLimitDuration:k.value?Number(h.value.rateLimitDuration||60):0,proxy:h.value.proxy,accountType:"shared",dailyQuota:Number(h.value.dailyQuota||0),quotaResetTime:h.value.quotaResetTime||"00:00"},b=await M.post("/admin/ccr-accounts",A);b.success?me("success"):V(b.message||"创建失败","error")}}catch(A){V(A.message||"请求失败","error")}finally{se.value=!1}}},q=()=>{if(!p.account)return;const A=p.account;h.value.name=A.name||"",h.value.description=A.description||"",h.value.apiUrl=A.apiUrl||"",h.value.priority=Number(A.priority||50),h.value.userAgent=A.userAgent||"",h.value.rateLimitDuration=Number(A.rateLimitDuration||60),h.value.dailyQuota=Number(A.dailyQuota||0),h.value.quotaResetTime=A.quotaResetTime||"00:00",h.value.proxy=A.proxy||null,k.value=h.value.rateLimitDuration>0,R.value=[];const b=A.supportedModels||{};if(b&&typeof b=="object")for(const P of Object.keys(b))R.value.push({from:P,to:b[P]})};return Bt(()=>{N.value&&q()}),re(()=>p.account,()=>{N.value&&q()}),(A,b)=>(n(),Fe(Ht,{to:"body"},[_.value?(n(),i("div",Dd,[e("div",Vd,[e("div",Rd,[e("div",zd,[b[13]||(b[13]=e("div",{class:"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-teal-500 to-emerald-600 sm:h-10 sm:w-10 sm:rounded-xl"},[e("i",{class:"fas fa-code-branch text-sm text-white sm:text-base"})],-1)),e("h3",jd,m(N.value?"编辑 CCR 账户":"添加 CCR 账户"),1)]),e("button",{class:"p-1 text-gray-400 transition-colors hover:text-gray-600",onClick:b[0]||(b[0]=P=>A.$emit("close"))},b[14]||(b[14]=[e("i",{class:"fas fa-times text-lg sm:text-xl"},null,-1)]))]),e("div",Od,[e("div",null,[b[15]||(b[15]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"账户名称 *",-1)),x(e("input",{"onUpdate:modelValue":b[1]||(b[1]=P=>h.value.name=P),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":v.value.name}]),placeholder:"为账户设置一个易识别的名称",required:"",type:"text"},null,2),[[K,h.value.name]]),v.value.name?(n(),i("p",Ld,m(v.value.name),1)):f("",!0)]),e("div",null,[b[16]||(b[16]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"描述 (可选)",-1)),x(e("textarea",{"onUpdate:modelValue":b[2]||(b[2]=P=>h.value.description=P),class:"form-input w-full resize-none border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"账户用途说明...",rows:"3"},null,512),[[K,h.value.description]])]),e("div",Ed,[e("div",null,[b[17]||(b[17]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"API URL *",-1)),x(e("input",{"onUpdate:modelValue":b[3]||(b[3]=P=>h.value.apiUrl=P),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":v.value.apiUrl}]),placeholder:"例如:https://api.example.com/v1/messages",required:"",type:"text"},null,2),[[K,h.value.apiUrl]]),v.value.apiUrl?(n(),i("p",Nd,m(v.value.apiUrl),1)):f("",!0)]),e("div",null,[e("label",qd,"API Key "+m(N.value?"(留空不更新)":"*"),1),x(e("input",{"onUpdate:modelValue":b[4]||(b[4]=P=>h.value.apiKey=P),class:S(["form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",{"border-red-500":v.value.apiKey}]),placeholder:N.value?"留空表示不更新":"必填",required:!N.value,type:"password"},null,10,Wd),[[K,h.value.apiKey]]),v.value.apiKey?(n(),i("p",Gd,m(v.value.apiKey),1)):f("",!0)])]),e("div",Fd,[e("div",null,[b[18]||(b[18]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"优先级",-1)),x(e("input",{"onUpdate:modelValue":b[5]||(b[5]=P=>h.value.priority=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",max:"100",min:"1",placeholder:"默认50,数字越小优先级越高",type:"number"},null,512),[[K,h.value.priority,void 0,{number:!0}]]),b[19]||(b[19]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 建议范围:1-100,数字越小优先级越高 ",-1))]),e("div",null,[b[20]||(b[20]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"自定义 User-Agent (可选)",-1)),x(e("input",{"onUpdate:modelValue":b[6]||(b[6]=P=>h.value.userAgent=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"留空则透传客户端 User-Agent",type:"text"},null,512),[[K,h.value.userAgent]])])]),e("div",null,[b[24]||(b[24]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流机制",-1)),e("div",Qd,[e("label",Bd,[x(e("input",{"onUpdate:modelValue":b[7]||(b[7]=P=>k.value=P),class:"mr-2 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700",type:"checkbox"},null,512),[[ye,k.value]]),b[21]||(b[21]=e("span",{class:"text-sm text-gray-700 dark:text-gray-300"},"启用限流机制(429 时暂停调度)",-1))])]),k.value?(n(),i("div",Hd,[b[22]||(b[22]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"限流时间 (分钟)",-1)),x(e("input",{"onUpdate:modelValue":b[8]||(b[8]=P=>h.value.rateLimitDuration=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"1",placeholder:"默认60分钟",type:"number"},null,512),[[K,h.value.rateLimitDuration,void 0,{number:!0}]]),b[23]||(b[23]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 账号被限流后暂停调度的时间(分钟) ",-1))])):f("",!0)]),e("div",Jd,[e("div",null,[b[25]||(b[25]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"每日额度限制 ($)",-1)),x(e("input",{"onUpdate:modelValue":b[9]||(b[9]=P=>h.value.dailyQuota=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",min:"0",placeholder:"0 表示不限制",step:"0.01",type:"number"},null,512),[[K,h.value.dailyQuota,void 0,{number:!0}]]),b[26]||(b[26]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 设置每日使用额度,0 表示不限制 ",-1))]),e("div",null,[b[27]||(b[27]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"额度重置时间",-1)),x(e("input",{"onUpdate:modelValue":b[10]||(b[10]=P=>h.value.quotaResetTime=P),class:"form-input w-full border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",placeholder:"00:00",type:"time"},null,512),[[K,h.value.quotaResetTime]]),b[28]||(b[28]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},"每日自动重置额度的时间",-1))])]),e("div",null,[b[32]||(b[32]=e("label",{class:"mb-3 block text-sm font-semibold text-gray-700 dark:text-gray-300"},"模型映射表 (可选)",-1)),b[33]||(b[33]=e("div",{class:"mb-3 rounded-lg bg-blue-50 p-3 dark:bg-blue-900/30"},[e("p",{class:"text-xs text-blue-700 dark:text-blue-400"},[e("i",{class:"fas fa-info-circle mr-1"}),$(" 留空表示支持所有模型且不修改请求。配置映射后,左侧模型会被识别为支持的模型,右侧是实际发送的模型。 ")])],-1)),e("div",Yd,[(n(!0),i(xe,null,_e(R.value,(P,te)=>(n(),i("div",{key:te,class:"flex items-center gap-2"},[x(e("input",{"onUpdate:modelValue":O=>P.from=O,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"原始模型名称",type:"text"},null,8,Zd),[[K,P.from]]),b[30]||(b[30]=e("i",{class:"fas fa-arrow-right text-gray-400 dark:text-gray-500"},null,-1)),x(e("input",{"onUpdate:modelValue":O=>P.to=O,class:"form-input flex-1 border-gray-300 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200 dark:placeholder-gray-400",placeholder:"映射后的模型名称",type:"text"},null,8,Xd),[[K,P.to]]),e("button",{class:"rounded-lg p-2 text-red-500 transition-colors hover:bg-red-50 dark:hover:bg-red-900/20",type:"button",onClick:O=>ee(te)},b[29]||(b[29]=[e("i",{class:"fas fa-trash"},null,-1)]),8,e0)]))),128))]),e("button",{class:"w-full rounded-lg border-2 border-dashed border-gray-300 px-4 py-2 text-gray-600 transition-colors hover:border-gray-400 hover:text-gray-700 dark:border-gray-600 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:text-gray-300",type:"button",onClick:B},b[31]||(b[31]=[e("i",{class:"fas fa-plus mr-2"},null,-1),$(" 添加模型映射 ",-1)]))]),e("div",null,[Je(Xt,{modelValue:h.value.proxy,"onUpdate:modelValue":b[11]||(b[11]=P=>h.value.proxy=P)},null,8,["modelValue"])]),e("div",t0,[e("button",{class:"flex-1 rounded-xl bg-gray-100 px-6 py-3 font-semibold text-gray-700 transition-colors hover:bg-gray-200 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",type:"button",onClick:b[12]||(b[12]=P=>A.$emit("close"))}," 取消 "),e("button",{class:"btn btn-primary flex-1 px-6 py-3 font-semibold",disabled:se.value,type:"button",onClick:J},[se.value?(n(),i("div",a0)):f("",!0),$(" "+m(se.value?N.value?"保存中...":"创建中...":N.value?"保存":"创建"),1)],8,s0)])])])])):f("",!0)]))}},rs=Jt(r0,[["__scopeId","data-v-8652672a"]]),l0={key:0,class:"fixed inset-0 z-[1050] flex items-center justify-center bg-gray-900/40 backdrop-blur-sm"},o0={class:"relative z-10 mx-3 flex max-h-[92vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl border border-gray-200/70 bg-white/95 shadow-2xl ring-1 ring-black/5 transition-all dark:border-gray-700/60 dark:bg-gray-900/95 dark:ring-white/10 sm:mx-4 sm:p-1"},n0={class:"flex flex-col gap-3 border-b border-gray-100 bg-white/80 px-5 py-4 backdrop-blur dark:border-gray-800 dark:bg-gray-900/80 sm:flex-row sm:items-center sm:justify-between"},i0={class:"flex flex-1 items-start gap-3"},d0={class:"space-y-1"},u0={class:"flex flex-wrap items-center gap-2"},p0={class:"text-lg font-semibold text-gray-900 dark:text-gray-100 sm:text-xl"},g0={key:0,class:"inline-flex items-center rounded-full bg-blue-100 px-2.5 py-0.5 text-xs font-medium text-blue-700 dark:bg-blue-500/10 dark:text-blue-300"},m0={key:1,class:"inline-flex items-center rounded-full bg-purple-100 px-2.5 py-0.5 text-xs font-medium text-purple-700 dark:bg-purple-500/10 dark:text-purple-300"},y0={class:"text-xs text-gray-500 dark:text-gray-400 sm:text-sm"},c0={key:0},x0={class:"flex-1 overflow-y-auto px-5 py-4 sm:px-6"},f0={key:0,class:"flex h-[50vh] items-center justify-center"},b0={class:"mb-5 grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-4"},v0={class:"flex items-start justify-between"},k0={class:"text-xs font-medium uppercase tracking-wide text-gray-500 dark:text-gray-400"},h0={class:"mt-2 text-xl font-semibold text-gray-900 dark:text-gray-100"},w0={class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},$0={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-gray-50 dark:bg-gray-800"},A0={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},C0={class:"space-y-3 rounded-2xl border border-blue-100 bg-blue-50/60 p-4 dark:border-blue-500/20 dark:bg-blue-900/20"},U0={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-blue-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-blue-500/20"},T0={class:"flex items-center justify-between"},I0={class:"font-semibold text-gray-900 dark:text-gray-100"},_0={class:"mt-2 flex items-center justify-between"},K0={class:"font-semibold text-gray-900 dark:text-gray-100"},S0={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},P0={class:"space-y-3 rounded-2xl border border-amber-100 bg-amber-50/70 p-4 dark:border-amber-500/20 dark:bg-amber-900/20"},M0={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-amber-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-amber-500/20"},D0={class:"flex items-center justify-between"},V0={class:"font-semibold text-gray-900 dark:text-gray-100"},R0={class:"mt-2 flex items-center justify-between"},z0={class:"font-semibold text-gray-900 dark:text-gray-100"},j0={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},O0={class:"space-y-3 rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4 dark:border-emerald-500/20 dark:bg-emerald-900/20"},L0={class:"rounded-xl bg-white/80 p-3 text-sm text-gray-600 shadow-sm ring-1 ring-emerald-100 dark:bg-gray-900/80 dark:text-gray-300 dark:ring-emerald-500/20"},E0={class:"flex items-center justify-between"},N0={class:"font-semibold text-gray-900 dark:text-gray-100"},q0={class:"mt-2 flex items-center justify-between"},W0={class:"font-semibold text-gray-900 dark:text-gray-100"},G0={class:"mt-2 flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},F0={class:"mb-6 grid grid-cols-1 gap-4 lg:grid-cols-3"},Q0={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},B0={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},H0={class:"flex items-center justify-between"},J0={class:"font-semibold text-gray-900 dark:text-gray-100"},Y0={class:"flex items-center justify-between"},Z0={class:"font-semibold text-gray-900 dark:text-gray-100"},X0={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},eu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},tu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},su={class:"flex items-center justify-between"},au={class:"font-semibold text-gray-900 dark:text-gray-100"},ru={class:"flex items-center justify-between"},lu={class:"font-semibold text-gray-900 dark:text-gray-100"},ou={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},nu={class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},iu={class:"space-y-2 text-sm text-gray-600 dark:text-gray-300"},du={class:"flex items-center justify-between"},uu={class:"font-semibold text-gray-900 dark:text-gray-100"},pu={class:"flex items-center justify-between"},gu={class:"font-semibold text-gray-900 dark:text-gray-100"},mu={class:"flex items-center justify-between text-xs text-gray-500 dark:text-gray-400"},yu={class:"mb-6 rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-900/70"},cu={class:"mb-4 flex flex-wrap items-center justify-between gap-2"},xu={class:"text-xs text-gray-400 dark:text-gray-500"},fu={class:"h-[260px] sm:h-[300px]"},bu={__name:"AccountUsageDetailModal",props:{show:{type:Boolean,default:!1},account:{type:Object,default:()=>({})},history:{type:Array,default:()=>[]},summary:{type:Object,default:()=>({})},overview:{type:Object,default:()=>({})},generatedAt:{type:String,default:""},loading:{type:Boolean,default:!1}},emits:["close"],setup(Q,{emit:he}){const p=Q,me=he,_=vs(),{isDarkMode:N}=fs(_),se=T(null);let h=null;const k={claude:"Claude","claude-console":"Claude Console",openai:"OpenAI","openai-responses":"OpenAI Responses",gemini:"Gemini",droid:"Droid"},v=pe(()=>{var s;return k[(s=p.account)==null?void 0:s.platform]||"未知平台"}),R=pe(()=>{var s;return(s=p.account)!=null&&s.accountType?p.account.accountType==="dedicated"?"专属":p.account.accountType==="group"?"分组":"共享":"共享"}),G=pe(()=>({text:N.value?"#e5e7eb":"#374151",grid:N.value?"rgba(75, 85, 99, 0.25)":"rgba(209, 213, 219, 0.4)",cost:"#3b82f6",costFill:"rgba(59, 130, 246, 0.15)",requests:"#f97316"})),B=pe(()=>{var s;return((s=p.summary)==null?void 0:s.totalTokens)||0}),ee=pe(()=>{var s,d;return((d=(s=p.overview)==null?void 0:s.total)==null?void 0:d.inputTokens)||0}),Z=pe(()=>{var s,d;return((d=(s=p.overview)==null?void 0:s.total)==null?void 0:d.outputTokens)||0}),J=s=>{const d=Number(s||0);return d>=1e6?`${(d/1e6).toFixed(2)}M`:d>=1e3?`${(d/1e3).toFixed(2)}K`:d.toLocaleString()},q=s=>{const d=Number(s||0);return Number.isNaN(d)?"$0.000000":d>=1?`$${d.toFixed(2)}`:d>=.01?`$${d.toFixed(3)}`:`$${d.toFixed(6)}`},A=s=>Math.round((Number(s)||0)*100)/100,b=s=>{if(!s)return"-";const d=new Date(s);if(Number.isNaN(d.getTime())){const oe=s.split("-");return oe.length===3?`${oe[1]}-${oe[2]}`:s}const j=String(d.getMonth()+1).padStart(2,"0"),Y=String(d.getDate()).padStart(2,"0");return`${j}-${Y}`},P=s=>{if(!s)return"暂无";const d=new Date(s);return Number.isNaN(d.getTime())?s:`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")} ${String(d.getHours()).padStart(2,"0")}:${String(d.getMinutes()).padStart(2,"0")}`},te=(s,d)=>{if(!s)return 0;const j=p.history.find(Y=>Y.date===s);return j&&j[d]||0},O=pe(()=>{var s,d;return p.generatedAt||((s=p.summary)==null?void 0:s.generatedAt)||((d=p.summary)==null?void 0:d.generated_at)||""}),U=pe(()=>{var s,d,j,Y,oe,Qe,$e,w;return[{key:"totalCost",label:"30天总费用",value:((s=p.summary)==null?void 0:s.totalCostFormatted)||"$0.000000",subtitle:"累计成本",icon:"fa-file-invoice-dollar",iconClass:"text-emerald-500"},{key:"totalRequests",label:"30天总请求",value:J(((d=p.summary)==null?void 0:d.totalRequests)||0),subtitle:"调用次数",icon:"fa-paper-plane",iconClass:"text-blue-500"},{key:"avgCost",label:"日均费用",value:((j=p.summary)==null?void 0:j.avgDailyCostFormatted)||q(((Y=p.summary)==null?void 0:Y.avgDailyCost)||0),subtitle:(oe=p.summary)!=null&&oe.actualDaysUsed&&((Qe=p.summary)==null?void 0:Qe.actualDaysUsed)<(($e=p.summary)==null?void 0:$e.days)?`基于 ${p.summary.actualDaysUsed} 天实际使用`:"平均每日成本",icon:"fa-wave-square",iconClass:"text-purple-500"},{key:"avgRequests",label:"日均请求",value:J(A(((w=p.summary)==null?void 0:w.avgDailyRequests)||0)),subtitle:"平均每日调用",icon:"fa-chart-line",iconClass:"text-orange-500"}]}),D=async()=>{if(await bs(),!p.show||!se.value)return;if(h&&h.destroy(),!p.history||p.history.length===0){h=null;return}const s=p.history.map(Y=>Y.label),d=p.history.map(Y=>Y.cost||0),j=p.history.map(Y=>Y.requests||0);h=new ks(se.value,{type:"line",data:{labels:s,datasets:[{label:"费用 (USD)",data:d,borderColor:G.value.cost,backgroundColor:G.value.costFill,tension:.35,fill:!0,yAxisID:"y"},{label:"请求次数",data:j,borderColor:G.value.requests,backgroundColor:"transparent",tension:.35,yAxisID:"y1"}]},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},plugins:{legend:{labels:{color:G.value.text}},tooltip:{callbacks:{label(Y){return Y.dataset.label==="费用 (USD)"?`${Y.dataset.label}: ${q(Y.parsed.y)}`:`${Y.dataset.label}: ${J(Y.parsed.y)} 次`}}}},scales:{x:{ticks:{color:G.value.text},grid:{color:G.value.grid}},y:{position:"left",ticks:{color:G.value.text,callback:Y=>q(Y)},grid:{color:G.value.grid}},y1:{position:"right",ticks:{color:G.value.text,callback:Y=>J(Y)},grid:{drawOnChartArea:!1}}}}})},be=()=>{h&&(h.destroy(),h=null)},Ie=()=>{be(),me("close")};return re(()=>p.show,s=>{s&&!p.loading?D():s||be()}),re(()=>p.loading,s=>{!s&&p.show&&D()}),re(()=>p.history,()=>{p.show&&!p.loading&&D()},{deep:!0}),re(N,()=>{p.show&&!p.loading&&D()}),os(()=>{be()}),(s,d)=>{var j,Y,oe,Qe,$e,w,Ye,at,Xe,Ze,ot,Be,Ee,Ke,Ne,qe,nt,it,et,tt,dt,Le,ve,De,y,g,I,Se,We,we,ut,pt,Ve,Ae,gt,Ge,Re,rt,mt,lt,yt;return n(),Fe(Ht,{to:"body"},[Q.show?(n(),i("div",l0,[e("div",{class:"absolute inset-0",onClick:Ie}),e("div",o0,[e("div",n0,[e("div",i0,[d[2]||(d[2]=e("div",{class:"flex h-12 w-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-indigo-500 text-white shadow-lg"},[e("i",{class:"fas fa-chart-area text-lg"})],-1)),e("div",d0,[e("div",u0,[e("h3",p0,m(((j=Q.account)==null?void 0:j.name)||((Y=Q.account)==null?void 0:Y.email)||"账号使用详情"),1),(oe=Q.account)!=null&&oe.platform?(n(),i("span",g0,[d[0]||(d[0]=e("i",{class:"fas fa-layer-group mr-1"},null,-1)),$(m(v.value),1)])):f("",!0),(Qe=Q.account)!=null&&Qe.accountType?(n(),i("span",m0,[d[1]||(d[1]=e("i",{class:"fas fa-user-tag mr-1"},null,-1)),$(m(R.value),1)])):f("",!0)]),e("p",y0,[$(" 近 "+m((($e=Q.summary)==null?void 0:$e.days)||30)+" 天内的费用与请求趋势 ",1),(w=Q.summary)!=null&&w.actualDaysUsed&&((Ye=Q.summary)==null?void 0:Ye.actualDaysUsed)<((at=Q.summary)==null?void 0:at.days)?(n(),i("span",c0," (日均基于实际使用 "+m(Q.summary.actualDaysUsed)+" 天) ",1)):f("",!0)])])]),e("button",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gray-100 text-gray-500 transition hover:bg-gray-200 hover:text-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-200",onClick:Ie},d[3]||(d[3]=[e("i",{class:"fas fa-times"},null,-1)]))]),e("div",x0,[Q.loading?(n(),i("div",f0,d[4]||(d[4]=[e("div",{class:"loading-spinner h-12 w-12 border-4 border-blue-500"},null,-1)]))):(n(),i(xe,{key:1},[e("div",b0,[(n(!0),i(xe,null,_e(U.value,He=>(n(),i("div",{key:He.key,class:"rounded-2xl border border-gray-100 bg-white/80 p-4 shadow-sm transition dark:border-gray-700 dark:bg-gray-900/70"},[e("div",v0,[e("div",null,[e("p",k0,m(He.label),1),e("p",h0,m(He.value),1),e("p",w0,m(He.subtitle),1)]),e("div",$0,[e("i",{class:S(["fas",He.icon,He.iconClass])},null,2)])])]))),128))]),e("div",A0,[e("div",C0,[d[8]||(d[8]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-blue-700 dark:text-blue-300"},[e("i",{class:"fas fa-sun"}),$(" 今日概览 ")],-1)),e("div",U0,[e("div",T0,[d[5]||(d[5]=e("span",null,"费用",-1)),e("span",I0,m(((Ze=(Xe=Q.summary)==null?void 0:Xe.today)==null?void 0:Ze.costFormatted)||"$0.000000"),1)]),e("div",_0,[d[6]||(d[6]=e("span",null,"请求",-1)),e("span",K0,m(J(((Be=(ot=Q.summary)==null?void 0:ot.today)==null?void 0:Be.requests)||0)),1)]),e("div",S0,[d[7]||(d[7]=e("span",null,"Tokens",-1)),e("span",null,m(J(((Ke=(Ee=Q.summary)==null?void 0:Ee.today)==null?void 0:Ke.tokens)||0)),1)])])]),e("div",P0,[d[12]||(d[12]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-amber-700 dark:text-amber-300"},[e("i",{class:"fas fa-crown"}),$(" 最高费用日 ")],-1)),e("div",M0,[e("div",D0,[d[9]||(d[9]=e("span",null,"日期",-1)),e("span",V0,m(b((qe=(Ne=Q.summary)==null?void 0:Ne.highestCostDay)==null?void 0:qe.date)),1)]),e("div",R0,[d[10]||(d[10]=e("span",null,"费用",-1)),e("span",z0,m(((it=(nt=Q.summary)==null?void 0:nt.highestCostDay)==null?void 0:it.formattedCost)||"$0.000000"),1)]),e("div",j0,[d[11]||(d[11]=e("span",null,"请求",-1)),e("span",null,m(J(te((tt=(et=Q.summary)==null?void 0:et.highestCostDay)==null?void 0:tt.date,"requests"))),1)])])]),e("div",O0,[d[16]||(d[16]=e("div",{class:"flex items-center gap-2 text-sm font-semibold text-emerald-700 dark:text-emerald-300"},[e("i",{class:"fas fa-chart-bar"}),$(" 最高请求日 ")],-1)),e("div",L0,[e("div",E0,[d[13]||(d[13]=e("span",null,"日期",-1)),e("span",N0,m(b((Le=(dt=Q.summary)==null?void 0:dt.highestRequestDay)==null?void 0:Le.date)),1)]),e("div",q0,[d[14]||(d[14]=e("span",null,"请求",-1)),e("span",W0,m(J(((De=(ve=Q.summary)==null?void 0:ve.highestRequestDay)==null?void 0:De.requests)||0)),1)]),e("div",G0,[d[15]||(d[15]=e("span",null,"费用",-1)),e("span",null,m(q(te((g=(y=Q.summary)==null?void 0:y.highestRequestDay)==null?void 0:g.date,"cost"))),1)])])])]),e("div",F0,[e("div",Q0,[d[20]||(d[20]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-database mr-2 text-indigo-500"}),$(" 累计 Token ")],-1)),e("div",B0,[e("div",H0,[d[17]||(d[17]=e("span",null,"30天总计",-1)),e("span",J0,m(J(B.value)),1)]),e("div",Y0,[d[18]||(d[18]=e("span",null,"日均 Token",-1)),e("span",Z0,m(J(Math.round(((I=Q.summary)==null?void 0:I.avgDailyTokens)||0))),1)]),e("div",X0,[d[19]||(d[19]=e("span",null,"输入 / 输出",-1)),e("span",null,m(J(ee.value))+" / "+m(J(Z.value)),1)])])]),e("div",eu,[d[24]||(d[24]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tachometer-alt mr-2 text-purple-500"}),$(" 平均速率 ")],-1)),e("div",tu,[e("div",su,[d[21]||(d[21]=e("span",null,"RPM",-1)),e("span",au,m(((We=(Se=Q.overview)==null?void 0:Se.averages)==null?void 0:We.rpm)??0),1)]),e("div",ru,[d[22]||(d[22]=e("span",null,"TPM",-1)),e("span",lu,m(((ut=(we=Q.overview)==null?void 0:we.averages)==null?void 0:ut.tpm)??0),1)]),e("div",ou,[d[23]||(d[23]=e("span",null,"日均请求 / Token",-1)),e("span",null,m(J(Math.round((((Ve=(pt=Q.overview)==null?void 0:pt.averages)==null?void 0:Ve.dailyRequests)||0)*100)/100))+" / "+m(J(Math.round((((gt=(Ae=Q.overview)==null?void 0:Ae.averages)==null?void 0:gt.dailyTokens)||0)*100)/100)),1)])])]),e("div",nu,[d[28]||(d[28]=e("h4",{class:"mb-3 flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-teal-500"}),$(" 最近统计 ")],-1)),e("div",iu,[e("div",du,[d[25]||(d[25]=e("span",null,"今日请求",-1)),e("span",uu,m(J(((Re=(Ge=Q.overview)==null?void 0:Ge.daily)==null?void 0:Re.requests)||0)),1)]),e("div",pu,[d[26]||(d[26]=e("span",null,"今日 Token",-1)),e("span",gu,m(J(((mt=(rt=Q.overview)==null?void 0:rt.daily)==null?void 0:mt.allTokens)||0)),1)]),e("div",mu,[d[27]||(d[27]=e("span",null,"今日费用",-1)),e("span",null,m(q(((yt=(lt=Q.overview)==null?void 0:lt.daily)==null?void 0:yt.cost)||0)),1)])])])]),e("div",yu,[e("div",cu,[d[29]||(d[29]=e("h4",{class:"flex items-center text-sm font-semibold text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-chart-line mr-2 text-blue-500"}),$(" 30天费用与请求趋势 ")],-1)),e("span",xu," 最新更新时间:"+m(P(O.value)),1)]),e("div",fu,[e("canvas",{ref_key:"chartCanvas",ref:se,class:"h-full w-full"},null,512)])])],64))])])])):f("",!0)])}}},vu=Jt(bu,[["__scopeId","data-v-cb1d85aa"]]),ku={class:"accounts-container"},hu={class:"card p-4 sm:p-6"},wu={class:"mb-4 flex flex-col gap-4 sm:mb-6"},$u={class:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"},Au={class:"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-3"},Cu={class:"group relative min-w-[160px]"},Uu={class:"group relative min-w-[140px]"},Tu={class:"group relative min-w-[160px]"},Iu={class:"group relative min-w-[200px]"},_u={class:"relative flex items-center"},Ku={class:"flex w-full flex-col gap-3 sm:w-auto sm:flex-row sm:items-center sm:gap-3"},Su={class:"relative"},Pu=["disabled"],Mu={class:"relative"},Du={key:0,class:"py-12 text-center"},Vu={key:1,class:"py-12 text-center"},Ru={key:2,class:"table-container hidden md:block"},zu={class:"w-full table-fixed"},ju={class:"bg-gray-50/80 backdrop-blur-sm dark:bg-gray-700/80"},Ou={key:0,class:"w-[50px] px-3 py-4 text-left"},Lu={class:"flex items-center"},Eu=["indeterminate"],Nu={key:1,class:"fas fa-sort ml-1 text-gray-400"},qu={key:1,class:"fas fa-sort ml-1 text-gray-400"},Wu={key:1,class:"fas fa-sort ml-1 text-gray-400"},Gu={key:1,class:"fas fa-sort ml-1 text-gray-400"},Fu={class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"},Qu={class:"flex items-center gap-2"},Bu={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},Hu={key:0,class:"px-3 py-3"},Ju={class:"flex items-center"},Yu=["value"],Zu={class:"px-3 py-4"},Xu={class:"flex items-center"},ep={class:"min-w-0"},tp={class:"flex items-center gap-2"},sp=["title"],ap={key:0,class:"inline-flex items-center rounded-full bg-purple-100 px-2 py-0.5 text-xs font-medium text-purple-800"},rp={key:1,class:"inline-flex items-center rounded-full bg-blue-100 px-2 py-0.5 text-xs font-medium text-blue-800"},lp={key:2,class:"inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-800"},op={key:0,class:"my-2 flex flex-wrap items-center gap-2"},np=["title"],ip=["title"],dp={class:"px-3 py-4"},up={class:"flex items-center gap-1"},pp={key:0,class:"flex items-center gap-1.5 rounded-lg border border-yellow-200 bg-gradient-to-r from-yellow-100 to-amber-100 px-2.5 py-1"},gp={class:"text-xs font-medium text-yellow-700"},mp={key:1,class:"flex items-center gap-1.5 rounded-lg border border-purple-200 bg-gradient-to-r from-purple-100 to-pink-100 px-2.5 py-1"},yp={key:2,class:"flex items-center gap-1.5 rounded-lg border border-orange-200 bg-gradient-to-r from-orange-100 to-red-100 px-2.5 py-1"},cp={key:3,class:"flex items-center gap-1.5 rounded-lg border border-gray-700 bg-gray-100 bg-gradient-to-r from-gray-100 to-gray-100 px-2.5 py-1"},xp={class:"text-xs font-medium text-gray-950"},fp={key:4,class:"flex items-center gap-1.5 rounded-lg border border-blue-200 bg-gradient-to-r from-blue-100 to-cyan-100 px-2.5 py-1 dark:border-blue-700 dark:from-blue-900/20 dark:to-cyan-900/20"},bp={key:5,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-green-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-green-900/20"},vp={key:6,class:"flex items-center gap-1.5 rounded-lg border border-indigo-200 bg-gradient-to-r from-indigo-100 to-blue-100 px-2.5 py-1"},kp={class:"text-xs font-semibold text-indigo-800"},hp={class:"text-xs font-medium text-indigo-700"},wp={key:7,class:"flex items-center gap-1.5 rounded-lg border border-teal-200 bg-gradient-to-r from-teal-100 to-emerald-100 px-2.5 py-1 dark:border-teal-700 dark:from-teal-900/20 dark:to-emerald-900/20"},$p={key:8,class:"flex items-center gap-1.5 rounded-lg border border-cyan-200 bg-gradient-to-r from-cyan-100 to-sky-100 px-2.5 py-1 dark:border-cyan-700 dark:from-cyan-900/20 dark:to-sky-900/20"},Ap={key:9,class:"flex items-center gap-1.5 rounded-lg border border-gray-200 bg-gradient-to-r from-gray-100 to-gray-200 px-2.5 py-1"},Cp={class:"whitespace-nowrap px-3 py-4"},Up={class:"flex flex-col gap-1"},Tp={key:0,class:"inline-flex items-center rounded-full bg-yellow-100 px-3 py-1 text-xs font-semibold text-yellow-800"},Ip={key:0},_p={key:1,class:"inline-flex items-center rounded-full bg-gray-100 px-3 py-1 text-xs font-semibold text-gray-700"},Kp=["title"],Sp={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Pp={class:"whitespace-nowrap px-3 py-4"},Mp={key:0,class:"flex items-center gap-2"},Dp={class:"h-2 w-16 rounded-full bg-gray-200"},Vp={class:"min-w-[20px] text-xs font-medium text-gray-700 dark:text-gray-200"},Rp={key:1,class:"text-sm text-gray-400"},zp={class:"px-3 py-4 text-sm text-gray-600"},jp=["title"],Op={key:1,class:"text-gray-400"},Lp={class:"whitespace-nowrap px-3 py-4 text-sm"},Ep={key:0,class:"space-y-1"},Np={class:"flex items-center gap-2"},qp={class:"text-sm font-medium text-gray-900 dark:text-gray-100"},Wp={class:"flex items-center gap-2"},Gp={class:"text-xs text-gray-600 dark:text-gray-300"},Fp={class:"flex items-center gap-2"},Qp={class:"text-xs text-gray-600 dark:text-gray-300"},Bp={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},Hp={key:1,class:"text-xs text-gray-400"},Jp={class:"whitespace-nowrap px-3 py-4"},Yp={key:0,class:"space-y-2"},Zp={key:0,class:"space-y-2"},Xp={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},eg={class:"flex items-center gap-2"},tg={class:"flex-1"},sg={class:"flex items-center gap-2"},ag={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},rg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},lg={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},og={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ng={class:"flex items-center gap-2"},ig={class:"flex-1"},dg={class:"flex items-center gap-2"},ug={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},pg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},gg={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},mg={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},yg={class:"flex items-center gap-2"},cg={class:"flex-1"},xg={class:"flex items-center gap-2"},fg={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},bg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},vg={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},kg={key:1,class:"space-y-2"},hg={key:0,class:"flex items-center gap-3 text-xs"},wg={class:"flex items-center gap-1"},$g={class:"font-medium text-gray-900 dark:text-gray-100"},Ag={class:"flex items-center gap-1"},Cg={class:"font-medium text-gray-900 dark:text-gray-100"},Ug={class:"flex items-center gap-2"},Tg={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},Ig={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},_g={class:"text-xs text-gray-600 dark:text-gray-400"},Kg={key:0,class:"font-medium text-indigo-600 dark:text-indigo-400"},Sg={key:2,class:"text-xs text-gray-400"},Pg={key:1,class:"space-y-2"},Mg={key:0},Dg={class:"flex items-center justify-between text-xs"},Vg={class:"font-medium text-gray-700 dark:text-gray-200"},Rg={class:"flex items-center gap-2"},zg={class:"h-2 w-24 rounded-full bg-gray-200 dark:bg-gray-700"},jg={class:"min-w-[32px] text-xs font-medium text-gray-700 dark:text-gray-200"},Og={class:"text-xs text-gray-600 dark:text-gray-400"},Lg={class:"ml-2 text-gray-400"},Eg={key:1,class:"text-sm text-gray-400"},Ng={key:2,class:"space-y-2"},qg={key:0,class:"space-y-2"},Wg={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Gg={class:"flex items-center gap-2"},Fg={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Qg={class:"flex-1"},Bg={class:"flex items-center gap-2"},Hg={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Jg={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Yg={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Zg={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Xg={class:"flex items-center gap-2"},em={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},tm={class:"flex-1"},sm={class:"flex items-center gap-2"},am={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},rm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},lm={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},om={key:1,class:"text-sm text-gray-400"},nm={key:3,class:"text-sm text-gray-400"},im={class:"whitespace-nowrap px-3 py-4 text-sm text-gray-600 dark:text-gray-300"},dm={class:"whitespace-nowrap px-3 py-4 text-sm font-medium"},um={class:"flex flex-wrap items-center gap-1"},pm=["disabled","title","onClick"],gm=["disabled","title","onClick"],mm={class:"ml-1"},ym=["onClick"],cm=["onClick"],xm=["onClick"],fm={key:3,class:"space-y-3 md:hidden"},bm={class:"mb-3 flex items-start justify-between"},vm={class:"flex items-center gap-3"},km=["value"],hm={class:"text-sm font-semibold text-gray-900"},wm={class:"mt-0.5 flex items-center gap-2"},$m={class:"text-xs text-gray-500 dark:text-gray-400"},Am={class:"text-xs text-gray-500 dark:text-gray-400"},Cm={class:"mb-3 grid grid-cols-2 gap-3"},Um={class:"space-y-1"},Tm={class:"flex items-center gap-1.5"},Im={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},_m={class:"flex items-center gap-1.5"},Km={class:"text-xs text-gray-600 dark:text-gray-400"},Sm={class:"flex items-center gap-1.5"},Pm={class:"text-xs text-gray-600 dark:text-gray-400"},Mm={key:0,class:"space-y-1"},Dm={class:"flex items-center gap-1.5"},Vm={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Rm={class:"flex items-center gap-1.5"},zm={class:"text-xs text-gray-600 dark:text-gray-400"},jm={key:1,class:"text-sm font-semibold text-gray-400"},Om={class:"mb-3 space-y-2"},Lm={key:0,class:"space-y-2"},Em={key:0,class:"space-y-2"},Nm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},qm={class:"flex items-center gap-2"},Wm={class:"flex-1"},Gm={class:"flex items-center gap-2"},Fm={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Qm={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Bm={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Hm={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},Jm={class:"flex items-center gap-2"},Ym={class:"flex-1"},Zm={class:"flex items-center gap-2"},Xm={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ey={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},ty={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},sy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700/70"},ay={class:"flex items-center gap-2"},ry={class:"flex-1"},ly={class:"flex items-center gap-2"},oy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},ny={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},iy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},dy={key:1,class:"space-y-1.5 rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},uy={class:"flex items-center justify-between text-xs"},py={class:"flex items-center gap-1"},gy={class:"font-medium text-gray-700 dark:text-gray-200"},my={class:"h-2 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-600"},yy={class:"flex items-center justify-between text-xs"},cy={class:"text-gray-500 dark:text-gray-400"},xy={key:0,class:"font-medium text-indigo-600"},fy={key:1,class:"text-gray-500"},by={key:2,class:"text-xs text-gray-400"},vy={key:1,class:"space-y-2"},ky={key:0,class:"space-y-2"},hy={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},wy={class:"flex items-center gap-2"},$y={class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"},Ay={class:"flex-1"},Cy={class:"flex items-center gap-2"},Uy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Ty={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Iy={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},_y={class:"rounded-lg bg-gray-50 p-2 dark:bg-gray-700"},Ky={class:"flex items-center gap-2"},Sy={class:"inline-flex min-w-[32px] justify-center rounded-full bg-blue-100 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-500/20 dark:text-blue-300"},Py={class:"flex-1"},My={class:"flex items-center gap-2"},Dy={class:"h-2 flex-1 rounded-full bg-gray-200 dark:bg-gray-600"},Vy={class:"w-12 text-right text-xs font-semibold text-gray-800 dark:text-gray-100"},Ry={class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},zy={key:1,class:"text-xs text-gray-400"},jy={class:"flex items-center justify-between text-xs"},Oy={class:"text-gray-700 dark:text-gray-200"},Ly={key:2,class:"flex items-center justify-between text-xs"},Ey={class:"text-gray-700 dark:text-gray-200"},Ny={class:"flex items-center justify-between text-xs"},qy={class:"font-medium text-gray-700 dark:text-gray-200"},Wy={class:"mt-3 flex gap-2 border-t border-gray-100 pt-3"},Gy=["disabled","onClick"],Fy=["onClick"],Qy=["onClick"],By=["onClick"],Hy={key:0,class:"mt-4 flex flex-col items-center justify-between gap-4 sm:mt-6 sm:flex-row"},Jy={class:"flex w-full flex-col items-center gap-3 sm:w-auto sm:flex-row"},Yy={class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},Zy={class:"flex items-center gap-2"},Xy=["value"],ec={class:"flex items-center gap-2"},tc=["disabled"],sc={class:"flex items-center gap-1"},ac={key:1,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},rc=["onClick"],lc={key:2,class:"hidden px-2 text-sm text-gray-500 dark:text-gray-400 sm:block"},oc=["disabled"],ls="accountsPageSize",nc={__name:"AccountsView",setup(Q){const{showConfirmModal:he,confirmOptions:p,showConfirm:me,handleConfirm:_,handleCancel:N}=ds(),se=T([]),h=T(!1),k=T("name"),v=T(""),R=T("asc"),G=T([]),B=T([]),ee=T("all"),Z=T("all"),J=T(""),q=()=>{const r=localStorage.getItem(ls);if(r){const a=parseInt(r,10);if([10,20,50,100].includes(a))return a}return 10},A=[10,20,50,100],b=T(q()),P=T(1),te=T([]),O=T(!1),U=T(!1),D=T(!1),be=T(!1),Ie=T(!1),s=T(null),d=T([]),j=T({}),Y=T({}),oe=T(""),Qe=["claude","claude-console","openai","openai-responses","gemini","droid"],$e=T(!1),w=T(!1),Ye=T(!1),at=T(new Map),Xe=T([{value:"name",label:"按名称排序",icon:"fa-font"},{value:"dailyTokens",label:"按今日Token排序",icon:"fa-coins"},{value:"dailyRequests",label:"按今日请求数排序",icon:"fa-chart-line"},{value:"totalTokens",label:"按总Token排序",icon:"fa-database"},{value:"lastUsed",label:"按最后使用排序",icon:"fa-clock"}]),Ze=T([{value:"all",label:"所有平台",icon:"fa-globe"},{value:"claude",label:"Claude",icon:"fa-brain"},{value:"claude-console",label:"Claude Console",icon:"fa-terminal"},{value:"gemini",label:"Gemini",icon:"fab fa-google"},{value:"openai",label:"OpenAi",icon:"fa-openai"},{value:"azure_openai",label:"Azure OpenAI",icon:"fab fa-microsoft"},{value:"bedrock",label:"Bedrock",icon:"fab fa-aws"},{value:"openai-responses",label:"OpenAI-Responses",icon:"fa-server"},{value:"ccr",label:"CCR",icon:"fa-code-branch"},{value:"droid",label:"Droid",icon:"fa-robot"}]),ot=pe(()=>{const r=[{value:"all",label:"所有账户",icon:"fa-globe"},{value:"ungrouped",label:"未分组账户",icon:"fa-user"}];return B.value.forEach(a=>{r.push({value:a.id,label:`${a.name} (${a.platform==="claude"?"Claude":a.platform==="gemini"?"Gemini":a.platform==="openai"?"OpenAI":"Droid"})`,icon:a.platform==="claude"?"fa-brain":a.platform==="gemini"?"fa-robot":a.platform==="openai"?"fa-openai":"fa-robot"})}),r}),Be=pe(()=>D.value),Ee=T(!1),Ke=T(null),Ne=T(!1),qe=T(null),nt=r=>{const a=new Set;return[r==null?void 0:r.name,r==null?void 0:r.email,r==null?void 0:r.accountName,r==null?void 0:r.owner,r==null?void 0:r.ownerName,r==null?void 0:r.ownerDisplayName,r==null?void 0:r.displayName,r==null?void 0:r.username,r==null?void 0:r.identifier,r==null?void 0:r.alias,r==null?void 0:r.title,r==null?void 0:r.label].forEach(l=>{if(typeof l=="string"){const z=l.trim();z&&a.add(z)}}),Array.isArray(r==null?void 0:r.groupInfos)&&r.groupInfos.forEach(l=>{if(l&&typeof l.name=="string"){const z=l.name.trim();z&&a.add(z)}}),Object.entries(r||{}).forEach(([l,z])=>{if(typeof z=="string"){const ae=l.toLowerCase();if(ae.includes("name")||ae.includes("email")){const ne=z.trim();ne&&a.add(ne)}}}),Array.from(a)},it=(r,a)=>a?nt(r).some(C=>C.toLowerCase().includes(a)):!0,et=r=>!!r&&Qe.includes(r.platform),tt=async r=>{if(!et(r)){V("该账户类型暂不支持查看详情","warning");return}s.value=r,be.value=!0,Ie.value=!0,d.value=[],j.value={},Y.value={},oe.value="";try{const a=await M.get(`/admin/accounts/${r.id}/usage-history?platform=${r.platform}&days=30`);if(a.success){const C=a.data||{};d.value=C.history||[],j.value=C.summary||{},Y.value=C.overview||{},oe.value=C.generatedAt||""}else V(a.error||"加载账号使用详情失败","error")}catch{V("加载账号使用详情失败","error")}finally{Ie.value=!1}},dt=()=>{be.value=!1,Ie.value=!1,s.value=null},Le=pe(()=>{let r=se.value;const a=J.value.trim();if(a){const l=a.toLowerCase();r=r.filter(z=>it(z,l))}return v.value?[...r].sort((l,z)=>{var ue,Ue,st,le,Pe,Te,xt,ie,de,ze,je,ts;let ae=l[v.value],ne=z[v.value];return v.value==="dailyTokens"?(ae=((Ue=(ue=l.usage)==null?void 0:ue.daily)==null?void 0:Ue.allTokens)||0,ne=((le=(st=z.usage)==null?void 0:st.daily)==null?void 0:le.allTokens)||0):v.value==="dailyRequests"?(ae=((Te=(Pe=l.usage)==null?void 0:Pe.daily)==null?void 0:Te.requests)||0,ne=((ie=(xt=z.usage)==null?void 0:xt.daily)==null?void 0:ie.requests)||0):v.value==="totalTokens"&&(ae=((ze=(de=l.usage)==null?void 0:de.total)==null?void 0:ze.allTokens)||0,ne=((ts=(je=z.usage)==null?void 0:je.total)==null?void 0:ts.allTokens)||0),v.value==="lastUsed"&&(ae=l.lastUsedAt?new Date(l.lastUsedAt).getTime():0,ne=z.lastUsedAt?new Date(z.lastUsedAt).getTime():0),v.value==="status"&&(ae=l.isActive?1:0,ne=z.isActive?1:0),aene?R.value==="asc"?1:-1:0}):r}),ve=pe(()=>{const r=Le.value.length;return Math.ceil(r/b.value)||0}),De=pe(()=>{const r=ve.value,a=P.value,C=[];if(r<=7)for(let l=1;l<=r;l++)C.push(l);else{let l=Math.max(1,a-2),z=Math.min(r,a+2);a<=3?z=5:a>=r-2&&(l=r-4);for(let ae=l;ae<=z;ae++)C.push(ae)}return C}),y=pe(()=>{const r=De.value;return r.length===0?!1:r[0]>1}),g=pe(()=>{const r=De.value;return r.length===0?!1:r[r.length-1]{const r=De.value;return r.length===0?!1:y.value&&r[0]>2}),Se=pe(()=>{const r=De.value;return r.length===0?!1:g.value&&r[r.length-1]{const r=(P.value-1)*b.value,a=r+b.value;return Le.value.slice(r,a)}),we=()=>{const r=We.value.map(l=>l.id),a=r.filter(l=>te.value.includes(l)).length,C=r.length;a===0?(O.value=!1,U.value=!1):a===C?(O.value=!0,U.value=!1):(O.value=!1,U.value=!0)},ut=()=>{if(O.value)We.value.forEach(r=>{te.value.includes(r.id)||te.value.push(r.id)});else{const r=new Set(We.value.map(a=>a.id));te.value=te.value.filter(a=>!r.has(a))}we()},pt=()=>{D.value=!D.value,D.value?we():(te.value=[],O.value=!1,U.value=!1)},Ve=()=>{const r=new Set(se.value.map(a=>a.id));te.value=te.value.filter(a=>r.has(a)),we()},Ae=async(r=!1)=>{h.value=!0;try{const a={};Z.value!=="all"&&(a.platform=Z.value),ee.value!=="all"&&(a.groupId=ee.value);const C=[];if(Z.value==="all")C.push(M.get("/admin/claude-accounts",{params:a}),M.get("/admin/claude-console-accounts",{params:a}),M.get("/admin/bedrock-accounts",{params:a}),M.get("/admin/gemini-accounts",{params:a}),M.get("/admin/openai-accounts",{params:a}),M.get("/admin/azure-openai-accounts",{params:a}),M.get("/admin/openai-responses-accounts",{params:a}),M.get("/admin/ccr-accounts",{params:a}),M.get("/admin/droid-accounts",{params:a}));else switch(Z.value){case"claude":C.push(M.get("/admin/claude-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"claude-console":C.push(Promise.resolve({success:!0,data:[]}),M.get("/admin/claude-console-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"bedrock":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/bedrock-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"gemini":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/gemini-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"azure_openai":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/azure-openai-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"openai-responses":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/openai-responses-accounts",{params:a}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break;case"ccr":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/ccr-accounts",{params:a}),Promise.resolve({success:!0,data:[]}));break;case"droid":C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),M.get("/admin/droid-accounts",{params:a}));break;default:C.push(Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}),Promise.resolve({success:!0,data:[]}));break}await Promise.all([lt(r),yt(r)]);const[l,z,ae,ne,ue,Ue,st,le,Pe]=await Promise.all(C),Te=[];if(l.success){const ie=(l.data||[]).map(de=>{const ze=G.value.filter(je=>je.claudeAccountId===de.id).length;return{...de,platform:"claude",boundApiKeysCount:ze}});Te.push(...ie)}if(z.success){const ie=(z.data||[]).map(de=>{const ze=G.value.filter(je=>je.claudeConsoleAccountId===de.id).length;return{...de,platform:"claude-console",boundApiKeysCount:ze}});Te.push(...ie)}if(ae.success){const ie=(ae.data||[]).map(de=>({...de,platform:"bedrock",boundApiKeysCount:0}));Te.push(...ie)}if(ne.success){const ie=(ne.data||[]).map(de=>{const ze=G.value.filter(je=>je.geminiAccountId===de.id).length;return{...de,platform:"gemini",boundApiKeysCount:ze}});Te.push(...ie)}if(ue.success){const ie=(ue.data||[]).map(de=>{const ze=G.value.filter(je=>je.openaiAccountId===de.id).length;return{...de,platform:"openai",boundApiKeysCount:ze}});Te.push(...ie)}if(Ue&&Ue.success){const ie=(Ue.data||[]).map(de=>{const ze=G.value.filter(je=>je.azureOpenaiAccountId===de.id).length;return{...de,platform:"azure_openai",boundApiKeysCount:ze}});Te.push(...ie)}if(st&&st.success){const ie=(st.data||[]).map(de=>{const ze=G.value.filter(je=>je.openaiAccountId===`responses:${de.id}`).length;return{...de,platform:"openai-responses",boundApiKeysCount:ze}});Te.push(...ie)}if(le&&le.success){const ie=(le.data||[]).map(de=>({...de,platform:"ccr",boundApiKeysCount:0}));Te.push(...ie)}if(Pe&&Pe.success){const ie=(Pe.data||[]).map(de=>({...de,platform:"droid",boundApiKeysCount:de.boundApiKeysCount??0}));Te.push(...ie)}let xt=Te;ee.value!=="all"&&(ee.value==="ungrouped"?xt=Te.filter(ie=>!ie.groupInfos||ie.groupInfos.length===0):xt=Te.filter(ie=>!ie.groupInfos||ie.groupInfos.length===0?!1:ie.groupInfos.some(de=>de.id===ee.value))),se.value=xt,Ve(),xt.some(ie=>ie.platform==="claude")&>().catch(ie=>{console.debug("Claude usage loading failed:",ie)})}catch{V("加载账户失败","error")}finally{h.value=!1}},gt=async()=>{try{const r=await M.get("/admin/claude-accounts/usage");if(r.success&&r.data){const a=r.data;se.value=se.value.map(C=>C.platform==="claude"&&a[C.id]?{...C,claudeUsage:a[C.id]}:C)}}catch(r){console.debug("Failed to load Claude usage data:",r)}},Ge=r=>{r&&(v.value===r?R.value=R.value==="asc"?"desc":"asc":(v.value=r,R.value="asc"))},Re=r=>{if(r==null)return"0";const a=Number(r);return a>=1e6?(a/1e6).toFixed(2):a>=1e3?(a/1e6).toFixed(4):(a/1e6).toFixed(6)},rt=r=>{if(!r)return"从未使用";const a=new Date(r),l=new Date-a;return l<6e4?"刚刚":l<36e5?`${Math.floor(l/6e4)} 分钟前`:l<864e5?`${Math.floor(l/36e5)} 小时前`:l<6048e5?`${Math.floor(l/864e5)} 天前`:a.toLocaleDateString("zh-CN")},mt=()=>{J.value="",P.value=1},lt=async(r=!1)=>{if(!(!r&&$e.value))try{const a=await M.get("/admin/api-keys");a.success&&(G.value=a.data||[],$e.value=!0)}catch{}},yt=async(r=!1)=>{if(!(!r&&w.value))try{const a=await M.get("/admin/account-groups");a.success&&(B.value=a.data||[],w.value=!0)}catch{}},He=()=>{$e.value=!1,w.value=!1,Ye.value=!1,at.value.clear()},Pt=()=>{P.value=1,Ae()},Mt=()=>{P.value=1,Ae()},bt=r=>{if(!r||!r.host||!r.port)return null;const a=r.type==="socks5"?"S5":r.type.toUpperCase();let C=r.host;C.length>15&&(C=C.substring(0,12)+"...");let l=`${a}://${C}:${r.port}`;return r.username&&(l=`${a}://***@${C}:${r.port}`),l},kt=(r,a)=>{if(!r||!a)return"--";const C=new Date(r),l=new Date(a),z=C.getHours().toString().padStart(2,"0"),ae=C.getMinutes().toString().padStart(2,"0"),ne=l.getHours().toString().padStart(2,"0"),ue=l.getMinutes().toString().padStart(2,"0");return`${z}:${ae} - ${ne}:${ue}`},ht=r=>{if(!r||r<=0)return"已结束";const a=Math.floor(r/60),C=r%60;return a>0?`${a}小时${C}分钟`:`${C}分钟`},Dt=r=>{if(!r||r<=0)return"";r=Math.floor(r);const a=Math.floor(r/1440),C=r%1440,l=Math.floor(C/60),z=C%60;return a>0?l>0?`${a}天${l}小时`:`${a}天`:l>0?z>0?`${l}小时${z}分钟`:`${l}小时`:`${z}分钟`},Vt=()=>{Ke.value=null,Ee.value=!0},wt=()=>{Ee.value=!1,Ke.value=null},$t=r=>{qe.value=r,Ne.value=!0},At=r=>!r||!r.id?[]:G.value.filter(a=>{const C=r.id;return a.claudeAccountId===C||a.claudeConsoleAccountId===C||a.geminiAccountId===C||a.openaiAccountId===C||a.azureOpenaiAccountId===C||a.openaiAccountId===`responses:${C}`}),Rt=r=>{switch(r.platform){case"claude":return`/admin/claude-accounts/${r.id}`;case"claude-console":return`/admin/claude-console-accounts/${r.id}`;case"bedrock":return`/admin/bedrock-accounts/${r.id}`;case"openai":return`/admin/openai-accounts/${r.id}`;case"azure_openai":return`/admin/azure-openai-accounts/${r.id}`;case"openai-responses":return`/admin/openai-responses-accounts/${r.id}`;case"ccr":return`/admin/ccr-accounts/${r.id}`;case"gemini":return`/admin/gemini-accounts/${r.id}`;case"droid":return`/admin/droid-accounts/${r.id}`;default:return null}},Ct=async r=>{var C,l;const a=Rt(r);if(!a)return{success:!1,message:"不支持的账户类型"};try{const z=await M.delete(a);return z.success?{success:!0,data:z}:{success:!1,message:z.message||"删除失败"}}catch(z){return{success:!1,message:((l=(C=z.response)==null?void 0:C.data)==null?void 0:l.message)||z.message||"删除失败"}}},Ut=async r=>{const C=At(r).length;let l=`确定要删除账户 "${r.name}" 吗?`;if(C>0&&(l+=` ⚠️ 注意:此账号有 ${C} 个 API Key 绑定。`,l+=` 删除后,这些 API Key 将自动切换为共享池模式。`),l+=` 此操作不可恢复。`,!await me("删除账户",l,"删除","取消"))return;const ae=await Ct(r);if(ae.success){const ne=ae.data;let ue="账户已成功删除";(ne==null?void 0:ne.unboundKeys)>0&&(ue+=`,${ne.unboundKeys} 个 API Key 已切换为共享池模式`),V(ue,"success"),te.value=te.value.filter(Ue=>Ue!==r.id),we(),Ye.value=!1,$e.value=!1,Ae(),lt(!0)}else V(ae.message||"删除失败","error")},zt=async()=>{var st;if(te.value.length===0){V("请先选择要删除的账户","warning");return}const r=new Map(se.value.map(le=>[le.id,le])),a=te.value.map(le=>r.get(le)).filter(le=>!!le);if(a.length===0){V("选中的账户已不存在","warning"),te.value=[],we();return}let C=`确定要删除选中的 ${a.length} 个账户吗?此操作不可恢复。`;const l=a.map(le=>({account:le,boundKeys:At(le)})).filter(le=>le.boundKeys.length>0);if(l.length>0&&(C+=` ⚠️ 以下账户存在绑定的 API Key,将自动解绑:`,l.forEach(({account:le,boundKeys:Pe})=>{const Te=le.name||le.email||le.accountName||le.id;C+=` - ${Te}: ${Pe.length} 个`}),C+=` 删除后,这些 API Key 将切换为共享池模式。`),C+=` 请再次确认是否继续。`,!await me("批量删除账户",C,"删除","取消"))return;let ae=0,ne=0,ue=0;const Ue=[];for(const le of a){const Pe=await Ct(le);Pe.success?(ae+=1,ue+=((st=Pe.data)==null?void 0:st.unboundKeys)||0):(ne+=1,Ue.push({name:le.name||le.email||le.accountName||le.id,message:Pe.message||"删除失败"}))}if(ae>0){let le=`成功删除 ${ae} 个账户`;ue>0&&(le+=`,${ue} 个 API Key 已切换为共享池模式`),V(le,ne>0?"warning":"success"),te.value=[],O.value=!1,U.value=!1,Ye.value=!1,$e.value=!1,await Ae(!0)}if(ne>0){const le=Ue.map(Pe=>`${Pe.name}: ${Pe.message}`).join(` `);V(`有 ${ne} 个账户删除失败: ${le}`,ae>0?"warning":"error")}we()},jt=async r=>{if(r.isResetting)return;let a=!1;if(window.showConfirm?a=await window.showConfirm("重置账户状态","确定要重置此账户的所有异常状态吗?这将清除限流状态、401错误计数等所有异常标记。","确定重置","取消"):a=confirm("确定要重置此账户的所有异常状态吗?"),!!a)try{r.isResetting=!0;let C="";if(r.platform==="openai")C=`/admin/openai-accounts/${r.id}/reset-status`;else if(r.platform==="openai-responses")C=`/admin/openai-responses-accounts/${r.id}/reset-status`;else if(r.platform==="claude")C=`/admin/claude-accounts/${r.id}/reset-status`;else if(r.platform==="claude-console")C=`/admin/claude-console-accounts/${r.id}/reset-status`;else if(r.platform==="ccr")C=`/admin/ccr-accounts/${r.id}/reset-status`;else if(r.platform==="droid")C=`/admin/droid-accounts/${r.id}/reset-status`;else{V("不支持的账户类型","error"),r.isResetting=!1;return}const l=await M.post(C);l.success?(V("账户状态已重置","success"),Ae(!0)):V(l.message||"状态重置失败","error")}catch{V("状态重置失败","error")}finally{r.isResetting=!1}},Tt=async r=>{if(!r.isTogglingSchedulable)try{r.isTogglingSchedulable=!0;let a;if(r.platform==="claude")a=`/admin/claude-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="claude-console")a=`/admin/claude-console-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="bedrock")a=`/admin/bedrock-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="gemini")a=`/admin/gemini-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai")a=`/admin/openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="azure_openai")a=`/admin/azure-openai-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="openai-responses")a=`/admin/openai-responses-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="ccr")a=`/admin/ccr-accounts/${r.id}/toggle-schedulable`;else if(r.platform==="droid")a=`/admin/droid-accounts/${r.id}/toggle-schedulable`;else{V("该账户类型暂不支持调度控制","warning");return}const C=await M.put(a);C.success?(r.schedulable=C.schedulable,V(C.schedulable?"已启用调度":"已禁用调度","success")):V(C.message||"操作失败","error")}catch{V("切换调度状态失败","error")}finally{r.isTogglingSchedulable=!1}},It=()=>{Ee.value=!1,V("账户创建成功","success"),He(),Ae()},_t=()=>{Ne.value=!1,V("账户更新成功","success"),Ye.value=!1,Ae()},Ot=r=>!r.lastRefreshAt||r.lastRefreshAt===""?"Setup":"OAuth",Lt=()=>"OAuth",Et=()=>"OAuth",Nt=r=>{if(r.subscriptionInfo)try{const a=typeof r.subscriptionInfo=="string"?JSON.parse(r.subscriptionInfo):r.subscriptionInfo;return a.hasClaudeMax===!0?"Claude Max":a.hasClaudePro===!0?"Claude Pro":"Claude Free"}catch{return"Claude"}return"Claude"},Kt=r=>{if(r.schedulable!==!1)return null;if(r.platform==="claude-console"){if(r.status==="unauthorized")return"API Key无效或已过期(401错误)";if(r.overloadStatus==="overloaded")return"服务过载(529错误)";if(r.rateLimitStatus==="limited")return"触发限流(429错误)";if(r.status==="blocked"&&r.errorMessage)return r.errorMessage}if(r.platform==="claude"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.status==="temp_error"&&r.errorMessage||r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.isRateLimited)return"触发限流(429错误)";if(r.stoppedReason)return r.stoppedReason;if(r.fiveHourAutoStopped==="true"||r.fiveHourAutoStopped===!0)return"5小时使用量接近限制,已自动停止调度"}if(r.platform==="openai"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage}if(r.platform==="openai-responses"){if(r.status==="unauthorized")return"认证失败(401错误)";if(r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.isRateLimited)return"触发限流(429错误)";if(r.status==="error"&&r.errorMessage)return r.errorMessage;if(r.status==="rateLimited")return"触发限流(429错误)"}return r.stoppedReason?r.stoppedReason:r.errorMessage?r.errorMessage:"手动停止调度"},qt=r=>r.status==="blocked"?"已封锁":r.status==="unauthorized"?"异常":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"?"限流中":r.status==="temp_error"?"临时异常":r.status==="error"||!r.isActive?"错误":r.schedulable===!1?"已暂停":"正常",Wt=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-100 text-red-800":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-100 text-orange-800":r.status==="error"||!r.isActive?"bg-red-100 text-red-800":r.schedulable===!1?"bg-gray-100 text-gray-800":"bg-green-100 text-green-800",Gt=r=>r.status==="blocked"||r.status==="unauthorized"?"bg-red-500":r.isRateLimited||r.status==="rate_limited"||r.rateLimitStatus&&r.rateLimitStatus.isRateLimited||r.rateLimitStatus==="limited"||r.status==="temp_error"?"bg-orange-500":r.status==="error"||!r.isActive?"bg-red-500":r.schedulable===!1?"bg-gray-500":"bg-green-500",u=r=>rt(r),t=(r,a=null)=>{if(!r)return"bg-gradient-to-r from-blue-500 to-indigo-600";if(a&&(a.isRateLimited||a.status==="rate_limited"||a.rateLimitStatus&&a.rateLimitStatus.isRateLimited||a.rateLimitStatus==="limited"))return"bg-gradient-to-r from-red-500 to-red-600";const l=String(r).toLowerCase();return l==="rejected"?"bg-gradient-to-r from-red-500 to-red-600":l==="allowed_warning"?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-blue-500 to-indigo-600"},o=r=>r.authType==="oauth",L=r=>!r||r.utilization===null||r.utilization===void 0?"-":`${r.utilization}%`,F=r=>!r||r.utilization===null||r.utilization===void 0?"0%":`${r.utilization}%`,Ce=r=>{const a=(r==null?void 0:r.utilization)||0;return a<60?"bg-gradient-to-r from-blue-500 to-indigo-600":a<90?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-red-500 to-red-600"},ke=r=>{if(!r||!r.remainingSeconds)return"-";const a=r.remainingSeconds,C=Math.floor(a/86400),l=Math.floor(a%86400/3600),z=Math.floor(a%3600/60);return C>0?l>0?`${C}天${l}小时`:`${C}天`:l>0?z>0?`${l}小时${z}分钟`:`${l}小时`:z>0?`${z}分钟`:`${Math.floor(a%60)}秒`},E=r=>{if(!r)return null;const a=typeof r.usedPercent=="number"&&!Number.isNaN(r.usedPercent)?r.usedPercent:null,C=typeof r.resetAfterSeconds=="number"&&!Number.isNaN(r.resetAfterSeconds)?r.resetAfterSeconds:null,l=typeof r.remainingSeconds=="number"?r.remainingSeconds:null,z=r.resetAt?Date.parse(r.resetAt):null;return C!==null&&(l!==null&&l<=0||z!==null&&!Number.isNaN(z)&&Date.now()>=z)?0:a===null?null:Math.max(0,Math.min(100,a))},ce=r=>{const a=E(r);return a===null?"bg-gradient-to-r from-gray-300 to-gray-400":a>=90?"bg-gradient-to-r from-red-500 to-red-600":a>=75?"bg-gradient-to-r from-yellow-500 to-orange-500":"bg-gradient-to-r from-emerald-500 to-teal-500"},c=r=>{const a=E(r);return a===null?"--":`${a.toFixed(1)}%`},W=r=>{const a=E(r);return a===null?"0%":`${a}%`},H=r=>r==="secondary"?"周限":"5h",X=r=>{if(!r)return"--";let a=r.remainingSeconds;if(a==null&&(a=r.resetAfterSeconds),a==null||Number.isNaN(Number(a)))return"--";a=Math.max(0,Math.floor(Number(a)));const C=Math.floor(a/86400),l=Math.floor(a%86400/3600),z=Math.floor(a%3600/60),ae=a%60;return C>0?l>0?`${C}天${l}小时`:`${C}天`:l>0?z>0?`${l}小时${z}分钟`:`${l}小时`:z>0?`${z}分钟`:`${ae}秒`},fe=r=>!r||r===0?"0.0000":r<1e-4?r.toExponential(2):r<.01?r.toFixed(6):r<1?r.toFixed(4):r.toFixed(2),ct=r=>{var l,z;const a=Number(((z=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:z.cost)||0),C=Number((r==null?void 0:r.dailyQuota)||0);return!C||C<=0?0:a/C*100},ps=r=>r>=90?"bg-red-500":r>=70?"bg-yellow-500":"bg-green-500",gs=r=>{var l,z;const a=Number(((z=(l=r==null?void 0:r.usage)==null?void 0:l.daily)==null?void 0:z.cost)||0),C=Number((r==null?void 0:r.dailyQuota)||0);return!C||C<=0?"0.00":Math.max(0,C-a).toFixed(2)},es=r=>!r.usage||!r.usage.daily?"0.0000":r.usage.daily.cost!==void 0?fe(r.usage.daily.cost):"0.0000";return re(J,()=>{P.value=1,we()}),re(b,r=>{localStorage.setItem(ls,r.toString()),we()}),re(()=>Le.value.length,()=>{P.value>ve.value&&(P.value=ve.value||1),we()}),re(k,r=>{const a={name:"name",dailyTokens:"dailyTokens",dailyRequests:"dailyRequests",totalTokens:"totalTokens",lastUsed:"lastUsed"};a[r]&&Ge(a[r])}),re(P,()=>{we()}),re(We,()=>{we()}),re(se,()=>{Ve()}),Bt(()=>{Ae(!0)}),(r,a)=>{const C=ms;return n(),i("div",ku,[e("div",hu,[e("div",wu,[a[35]||(a[35]=e("div",null,[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 账户管理 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"}," 管理 Claude、Gemini、OpenAI 等账户与代理配置 ")],-1)),e("div",$u,[e("div",Au,[e("div",Cu,[a[24]||(a[24]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-indigo-500 to-blue-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Je(Yt,{modelValue:k.value,"onUpdate:modelValue":a[0]||(a[0]=l=>k.value=l),icon:"fa-sort-amount-down","icon-color":"text-indigo-500",options:Xe.value,placeholder:"选择排序",onChange:a[1]||(a[1]=l=>Ge())},null,8,["modelValue","options"])]),e("div",Uu,[a[25]||(a[25]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-blue-500 to-indigo-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Je(Yt,{modelValue:Z.value,"onUpdate:modelValue":a[2]||(a[2]=l=>Z.value=l),icon:"fa-server","icon-color":"text-blue-500",options:Ze.value,placeholder:"选择平台",onChange:Pt},null,8,["modelValue","options"])]),e("div",Tu,[a[26]||(a[26]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-purple-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),Je(Yt,{modelValue:ee.value,"onUpdate:modelValue":a[3]||(a[3]=l=>ee.value=l),icon:"fa-layer-group","icon-color":"text-purple-500",options:ot.value,placeholder:"选择分组",onChange:Mt},null,8,["modelValue","options"])]),e("div",Iu,[a[29]||(a[29]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-cyan-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("div",_u,[x(e("input",{"onUpdate:modelValue":a[4]||(a[4]=l=>J.value=l),class:"h-10 w-full rounded-lg border border-gray-200 bg-white px-3 pl-9 text-sm text-gray-700 placeholder-gray-400 shadow-sm transition-all duration-200 hover:border-gray-300 focus:border-cyan-500 focus:outline-none focus:ring-2 focus:ring-cyan-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500 dark:hover:border-gray-500",placeholder:"搜索账户名称...",type:"text"},null,512),[[K,J.value]]),a[28]||(a[28]=e("i",{class:"fas fa-search absolute left-3 text-sm text-cyan-500"},null,-1)),J.value?(n(),i("button",{key:0,class:"absolute right-2 flex h-5 w-5 items-center justify-center rounded-full text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:mt},a[27]||(a[27]=[e("i",{class:"fas fa-times text-xs"},null,-1)]))):f("",!0)])])]),e("div",Ku,[e("div",Su,[Je(C,{content:"刷新数据 (Ctrl/⌘+点击强制刷新所有缓存)",effect:"dark",placement:"bottom"},{default:St(()=>[e("button",{class:"group relative flex items-center justify-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:shadow-md disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:w-auto",disabled:h.value,onClick:[a[5]||(a[5]=Ft(l=>Ae(!0),["ctrl","exact"])),a[6]||(a[6]=Ft(l=>Ae(!1),["exact"])),a[7]||(a[7]=Ft(l=>Ae(!0),["meta","exact"]))]},[a[30]||(a[30]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-green-500 to-teal-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),e("i",{class:S(["fas relative text-green-500",h.value?"fa-spinner fa-spin":"fa-sync-alt"])},null,2),a[31]||(a[31]=e("span",{class:"relative"},"刷新",-1))],8,Pu)]),_:1})]),e("button",{class:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-4 py-2 text-sm font-medium text-gray-700 shadow-sm transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:pt},[e("i",{class:S(D.value?"fas fa-times":"fas fa-check-square")},null,2),e("span",null,m(D.value?"取消选择":"选择"),1)]),te.value.length>0?(n(),i("button",{key:0,class:"group relative flex items-center justify-center gap-2 rounded-lg border border-red-200 bg-red-50 px-4 py-2 text-sm font-medium text-red-700 shadow-sm transition-all duration-200 hover:border-red-300 hover:bg-red-100 hover:shadow-md dark:border-red-700 dark:bg-red-900/30 dark:text-red-300 dark:hover:bg-red-900/50 sm:w-auto",onClick:zt},[a[32]||(a[32]=e("div",{class:"absolute -inset-0.5 rounded-lg bg-gradient-to-r from-red-500 to-pink-500 opacity-0 blur transition duration-300 group-hover:opacity-20"},null,-1)),a[33]||(a[33]=e("i",{class:"fas fa-trash relative text-red-600 dark:text-red-400"},null,-1)),e("span",Mu,"删除选中 ("+m(te.value.length)+")",1)])):f("",!0),e("button",{class:"flex w-full items-center justify-center gap-2 rounded-lg bg-gradient-to-r from-green-500 to-green-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all duration-200 hover:from-green-600 hover:to-green-700 hover:shadow-lg sm:w-auto",onClick:Ft(Vt,["stop"])},a[34]||(a[34]=[e("i",{class:"fas fa-plus"},null,-1),e("span",null,"添加账户",-1)]))])])]),h.value?(n(),i("div",Du,a[36]||(a[36]=[e("div",{class:"loading-spinner mx-auto mb-4"},null,-1),e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载账户...",-1)]))):Le.value.length===0?(n(),i("div",Vu,a[37]||(a[37]=[e("div",{class:"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-700"},[e("i",{class:"fas fa-user-circle text-xl text-gray-400"})],-1),e("p",{class:"text-lg text-gray-500 dark:text-gray-400"},"暂无账户",-1),e("p",{class:"mt-2 text-sm text-gray-400 dark:text-gray-500"},"点击上方按钮添加您的第一个账户",-1)]))):(n(),i("div",Ru,[e("table",zu,[e("thead",ju,[e("tr",null,[Be.value?(n(),i("th",Ou,[e("div",Lu,[x(e("input",{"onUpdate:modelValue":a[8]||(a[8]=l=>O.value=l),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",indeterminate:U.value,type:"checkbox",onChange:ut},null,40,Eu),[[ye,O.value]])])])):f("",!0),e("th",{class:"w-[22%] min-w-[180px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[9]||(a[9]=l=>Ge("name"))},[a[38]||(a[38]=$(" 名称 ",-1)),v.value==="name"?(n(),i("i",{key:0,class:S(["fas",R.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Nu))]),e("th",{class:"w-[15%] min-w-[120px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[10]||(a[10]=l=>Ge("platform"))},[a[39]||(a[39]=$(" 平台/类型 ",-1)),v.value==="platform"?(n(),i("i",{key:0,class:S(["fas",R.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",qu))]),e("th",{class:"w-[12%] min-w-[100px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[11]||(a[11]=l=>Ge("status"))},[a[40]||(a[40]=$(" 状态 ",-1)),v.value==="status"?(n(),i("i",{key:0,class:S(["fas",R.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Wu))]),e("th",{class:"w-[8%] min-w-[80px] cursor-pointer px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-600",onClick:a[12]||(a[12]=l=>Ge("priority"))},[a[41]||(a[41]=$(" 优先级 ",-1)),v.value==="priority"?(n(),i("i",{key:0,class:S(["fas",R.value==="asc"?"fa-sort-up":"fa-sort-down","ml-1"])},null,2)):(n(),i("i",Gu))]),a[45]||(a[45]=e("th",{class:"w-[10%] min-w-[100px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 代理 ",-1)),a[46]||(a[46]=e("th",{class:"w-[10%] min-w-[90px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 今日使用 ",-1)),e("th",Fu,[e("div",Qu,[a[44]||(a[44]=e("span",null,"会话窗口",-1)),Je(C,{placement:"top"},{content:St(()=>a[42]||(a[42]=[e("div",{class:"w-[260px] space-y-3 text-xs leading-relaxed text-white dark:text-gray-800"},[e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude 系列 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 会话窗口进度表示 5 小时窗口的时间推移,颜色提示当前调度状态。 "),e("div",{class:"space-y-1 pt-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-blue-500 to-indigo-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"正常:请求正常处理")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-yellow-500 to-orange-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"警告:接近限制")]),e("div",{class:"flex items-center gap-2"},[e("div",{class:"h-2 w-16 rounded bg-gradient-to-r from-red-500 to-red-600"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"拒绝:达到速率限制")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," OpenAI "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 进度条分别展示 5h 与周限窗口的额度使用比例,颜色含义与上方保持一致。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时使用量进度,到达重置时间后会自动归零。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-history mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"周限窗口:7天使用量进度,重置时同样回到 0%。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-info-circle mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"当“重置剩余”为 0 时,进度条与百分比会同步清零。")])])]),e("div",{class:"h-px bg-gray-200 dark:bg-gray-600/50"}),e("div",{class:"space-y-2"},[e("div",{class:"text-sm font-semibold text-white dark:text-gray-900"}," Claude OAuth 账户 "),e("div",{class:"text-gray-200 dark:text-gray-600"}," 展示三个窗口的使用率(utilization百分比),颜色含义同上。 "),e("div",{class:"space-y-1 text-gray-200 dark:text-gray-600"},[e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-clock mt-[2px] text-[10px] text-indigo-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"5h 窗口:5小时滑动窗口的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-calendar-alt mt-[2px] text-[10px] text-emerald-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"7d 窗口:7天总限额的使用率。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-gem mt-[2px] text-[10px] text-purple-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"Opus 窗口:7天Opus模型专用限额。")]),e("div",{class:"flex items-start gap-2"},[e("i",{class:"fas fa-sync-alt mt-[2px] text-[10px] text-blue-500"}),e("span",{class:"font-medium text-white dark:text-gray-900"},"到达重置时间后自动归零。")])])])],-1)])),default:St(()=>[a[43]||(a[43]=e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400"},null,-1))]),_:1,__:[43]})])]),a[47]||(a[47]=e("th",{class:"w-[8%] min-w-[80px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 最后使用 ",-1)),a[48]||(a[48]=e("th",{class:"w-[15%] min-w-[180px] px-3 py-4 text-left text-xs font-bold uppercase tracking-wider text-gray-700 dark:text-gray-300"}," 操作 ",-1))])]),e("tbody",Bu,[(n(!0),i(xe,null,_e(We.value,l=>{var z,ae,ne;return n(),i("tr",{key:l.id,class:"table-row"},[Be.value?(n(),i("td",Hu,[e("div",Ju,[x(e("input",{"onUpdate:modelValue":a[13]||(a[13]=ue=>te.value=ue),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:we},null,40,Yu),[[ye,te.value]])])])):f("",!0),e("td",Zu,[e("div",Xu,[a[53]||(a[53]=e("div",{class:"mr-2 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-gradient-to-br from-green-500 to-green-600"},[e("i",{class:"fas fa-user-circle text-xs text-white"})],-1)),e("div",ep,[e("div",tp,[e("div",{class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100",title:l.name},m(l.name),9,sp),l.accountType==="dedicated"?(n(),i("span",ap,a[49]||(a[49]=[e("i",{class:"fas fa-lock mr-1"},null,-1),$("专属 ",-1)]))):l.accountType==="group"?(n(),i("span",rp,a[50]||(a[50]=[e("i",{class:"fas fa-layer-group mr-1"},null,-1),$("分组调度 ",-1)]))):(n(),i("span",lp,a[51]||(a[51]=[e("i",{class:"fas fa-share-alt mr-1"},null,-1),$("共享 ",-1)])))]),l.groupInfos&&l.groupInfos.length>0?(n(),i("div",op,[(n(!0),i(xe,null,_e(l.groupInfos,ue=>(n(),i("span",{key:ue.id,class:"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400",title:`所属分组: ${ue.name}`},[a[52]||(a[52]=e("i",{class:"fas fa-folder mr-1"},null,-1)),$(m(ue.name),1)],8,np))),128))])):f("",!0),e("div",{class:"truncate text-xs text-gray-500 dark:text-gray-400",title:l.id},m(l.id),9,ip)])])]),e("td",dp,[e("div",up,[l.platform==="gemini"?(n(),i("div",pp,[a[54]||(a[54]=e("i",{class:"fas fa-robot text-xs text-yellow-700"},null,-1)),a[55]||(a[55]=e("span",{class:"text-xs font-semibold text-yellow-800"},"Gemini",-1)),a[56]||(a[56]=e("span",{class:"mx-1 h-4 w-px bg-yellow-300"},null,-1)),e("span",gp,m(Lt()),1)])):l.platform==="claude-console"?(n(),i("div",mp,a[57]||(a[57]=[e("i",{class:"fas fa-terminal text-xs text-purple-700"},null,-1),e("span",{class:"text-xs font-semibold text-purple-800"},"Console",-1),e("span",{class:"mx-1 h-4 w-px bg-purple-300"},null,-1),e("span",{class:"text-xs font-medium text-purple-700"},"API Key",-1)]))):l.platform==="bedrock"?(n(),i("div",yp,a[58]||(a[58]=[e("i",{class:"fab fa-aws text-xs text-orange-700"},null,-1),e("span",{class:"text-xs font-semibold text-orange-800"},"Bedrock",-1),e("span",{class:"mx-1 h-4 w-px bg-orange-300"},null,-1),e("span",{class:"text-xs font-medium text-orange-700"},"AWS",-1)]))):l.platform==="openai"?(n(),i("div",cp,[a[59]||(a[59]=e("div",{class:"fa-openai"},null,-1)),a[60]||(a[60]=e("span",{class:"text-xs font-semibold text-gray-950"},"OpenAi",-1)),a[61]||(a[61]=e("span",{class:"mx-1 h-4 w-px bg-gray-400"},null,-1)),e("span",xp,m(Et()),1)])):l.platform==="azure_openai"?(n(),i("div",fp,a[62]||(a[62]=[e("i",{class:"fab fa-microsoft text-xs text-blue-700 dark:text-blue-400"},null,-1),e("span",{class:"text-xs font-semibold text-blue-800 dark:text-blue-300"},"Azure OpenAI",-1),e("span",{class:"mx-1 h-4 w-px bg-blue-300 dark:bg-blue-600"},null,-1),e("span",{class:"text-xs font-medium text-blue-700 dark:text-blue-400"},"API Key",-1)]))):l.platform==="openai-responses"?(n(),i("div",bp,a[63]||(a[63]=[e("i",{class:"fas fa-server text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"OpenAI-Responses",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-400"},"API Key",-1)]))):l.platform==="claude"||l.platform==="claude-oauth"?(n(),i("div",vp,[a[64]||(a[64]=e("i",{class:"fas fa-brain text-xs text-indigo-700"},null,-1)),e("span",kp,m(Nt(l)),1),a[65]||(a[65]=e("span",{class:"mx-1 h-4 w-px bg-indigo-300"},null,-1)),e("span",hp,m(Ot(l)),1)])):l.platform==="ccr"?(n(),i("div",wp,a[66]||(a[66]=[e("i",{class:"fas fa-code-branch text-xs text-teal-700 dark:text-teal-400"},null,-1),e("span",{class:"text-xs font-semibold text-teal-800 dark:text-teal-300"},"CCR",-1),e("span",{class:"mx-1 h-4 w-px bg-teal-300 dark:bg-teal-600"},null,-1),e("span",{class:"text-xs font-medium text-teal-700 dark:text-teal-300"},"Relay",-1)]))):l.platform==="droid"?(n(),i("div",$p,a[67]||(a[67]=[e("i",{class:"fas fa-robot text-xs text-cyan-700 dark:text-cyan-400"},null,-1),e("span",{class:"text-xs font-semibold text-cyan-800 dark:text-cyan-300"},"Droid",-1),e("span",{class:"mx-1 h-4 w-px bg-cyan-300 dark:bg-cyan-600"},null,-1),e("span",{class:"text-xs font-medium text-cyan-700 dark:text-cyan-300"},"OAuth",-1)]))):(n(),i("div",Ap,a[68]||(a[68]=[e("i",{class:"fas fa-question text-xs text-gray-700"},null,-1),e("span",{class:"text-xs font-semibold text-gray-800"},"未知",-1)])))])]),e("td",Cp,[e("div",Up,[e("span",{class:S(["inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold",l.status==="blocked"?"bg-orange-100 text-orange-800":l.status==="unauthorized"?"bg-red-100 text-red-800":l.status==="temp_error"?"bg-orange-100 text-orange-800":l.isActive?"bg-green-100 text-green-800":"bg-red-100 text-red-800"])},[e("div",{class:S(["mr-2 h-2 w-2 rounded-full",l.status==="blocked"?"bg-orange-500":l.status==="unauthorized"?"bg-red-500":l.status==="temp_error"?"bg-orange-500":l.isActive?"bg-green-500":"bg-red-500"])},null,2),$(" "+m(l.status==="blocked"?"已封锁":l.status==="unauthorized"?"异常":l.status==="temp_error"?"临时异常":l.isActive?"正常":"异常"),1)],2),l.rateLimitStatus&&l.rateLimitStatus.isRateLimited||l.rateLimitStatus==="limited"?(n(),i("span",Tp,[a[69]||(a[69]=e("i",{class:"fas fa-exclamation-triangle mr-1"},null,-1)),a[70]||(a[70]=$(" 限流中 ",-1)),l.rateLimitStatus&&typeof l.rateLimitStatus=="object"&&l.rateLimitStatus.minutesRemaining>0?(n(),i("span",Ip,"("+m(Dt(l.rateLimitStatus.minutesRemaining))+")",1)):f("",!0)])):f("",!0),l.schedulable===!1?(n(),i("span",_p,[a[72]||(a[72]=e("i",{class:"fas fa-pause-circle mr-1"},null,-1)),a[73]||(a[73]=$(" 不可调度 ",-1)),Kt(l)?(n(),Fe(C,{key:0,content:Kt(l),effect:"dark",placement:"top"},{default:St(()=>a[71]||(a[71]=[e("i",{class:"fas fa-question-circle ml-1 cursor-help text-gray-500"},null,-1)])),_:2,__:[71]},1032,["content"])):f("",!0)])):f("",!0),l.status==="blocked"&&l.errorMessage?(n(),i("span",{key:2,class:"mt-1 max-w-xs truncate text-xs text-gray-500 dark:text-gray-400",title:l.errorMessage},m(l.errorMessage),9,Kp)):f("",!0),l.accountType==="dedicated"?(n(),i("span",Sp," 绑定: "+m(l.boundApiKeysCount||0)+" 个API Key ",1)):f("",!0)])]),e("td",Pp,[l.platform==="claude"||l.platform==="claude-console"||l.platform==="bedrock"||l.platform==="gemini"||l.platform==="openai"||l.platform==="openai-responses"||l.platform==="azure_openai"||l.platform==="ccr"||l.platform==="droid"?(n(),i("div",Mp,[e("div",Dp,[e("div",{class:"h-2 rounded-full bg-gradient-to-r from-green-500 to-blue-600 transition-all duration-300",style:Me({width:101-(l.priority||50)+"%"})},null,4)]),e("span",Vp,m(l.priority||50),1)])):(n(),i("div",Rp,a[74]||(a[74]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",zp,[bt(l.proxy)?(n(),i("div",{key:0,class:"break-all rounded bg-blue-50 px-2 py-1 font-mono text-xs",title:bt(l.proxy)},m(bt(l.proxy)),9,jp)):(n(),i("div",Op,"无代理"))]),e("td",Lp,[l.usage&&l.usage.daily?(n(),i("div",Ep,[e("div",Np,[a[75]||(a[75]=e("div",{class:"h-2 w-2 rounded-full bg-blue-500"},null,-1)),e("span",qp,m(l.usage.daily.requests||0)+" 次",1)]),e("div",Wp,[a[76]||(a[76]=e("div",{class:"h-2 w-2 rounded-full bg-purple-500"},null,-1)),e("span",Gp,m(Re(l.usage.daily.allTokens||0))+"M",1)]),e("div",Fp,[a[77]||(a[77]=e("div",{class:"h-2 w-2 rounded-full bg-green-500"},null,-1)),e("span",Qp,"$"+m(es(l)),1)]),l.usage.averages&&l.usage.averages.rpm>0?(n(),i("div",Bp," 平均 "+m(l.usage.averages.rpm.toFixed(2))+" RPM ",1)):f("",!0)])):(n(),i("div",Hp,"暂无数据"))]),e("td",Jp,[l.platform==="claude"?(n(),i("div",Yp,[o(l)&&l.claudeUsage?(n(),i("div",Zp,[e("div",Xp,[e("div",eg,[a[78]||(a[78]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",tg,[e("div",sg,[e("div",ag,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.fiveHour)]),style:Me({width:F(l.claudeUsage.fiveHour)})},null,6)]),e("span",rg,m(L(l.claudeUsage.fiveHour)),1)])])]),e("div",lg," 重置剩余 "+m(ke(l.claudeUsage.fiveHour)),1)]),e("div",og,[e("div",ng,[a[79]||(a[79]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",ig,[e("div",dg,[e("div",ug,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.sevenDay)]),style:Me({width:F(l.claudeUsage.sevenDay)})},null,6)]),e("span",pg,m(L(l.claudeUsage.sevenDay)),1)])])]),e("div",gg," 重置剩余 "+m(ke(l.claudeUsage.sevenDay)),1)]),e("div",mg,[e("div",yg,[a[80]||(a[80]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",cg,[e("div",xg,[e("div",fg,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.sevenDayOpus)]),style:Me({width:F(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",bg,m(L(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",vg," 重置剩余 "+m(ke(l.claudeUsage.sevenDayOpus)),1)])])):!o(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),i("div",kg,[l.usage&&l.usage.sessionWindow?(n(),i("div",hg,[e("div",wg,[a[81]||(a[81]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("span",$g,m(Re(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Ag,[a[82]||(a[82]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("span",Cg," $"+m(fe(l.usage.sessionWindow.totalCost)),1)])])):f("",!0),e("div",Ug,[e("div",Tg,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",t(l.sessionWindow.sessionWindowStatus,l)]),style:Me({width:l.sessionWindow.progress+"%"})},null,6)]),e("span",Ig,m(l.sessionWindow.progress)+"% ",1)]),e("div",_g,[e("div",null,m(kt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),i("div",Kg," 剩余 "+m(ht(l.sessionWindow.remainingTime)),1)):f("",!0)])])):(n(),i("div",Sg,"暂无统计"))])):l.platform==="claude-console"?(n(),i("div",Pg,[Number(l.dailyQuota)>0?(n(),i("div",Mg,[e("div",Dg,[a[83]||(a[83]=e("span",{class:"text-gray-600 dark:text-gray-300"},"额度进度",-1)),e("span",Vg,m(ct(l).toFixed(1))+"% ",1)]),e("div",Rg,[e("div",zg,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",ps(ct(l))]),style:Me({width:Math.min(100,ct(l))+"%"})},null,6)]),e("span",jg," $"+m(fe(((ae=(z=l.usage)==null?void 0:z.daily)==null?void 0:ae.cost)||0))+" / $"+m(Number(l.dailyQuota).toFixed(2)),1)]),e("div",Og,[$(" 剩余 $"+m(gs(l))+" ",1),e("span",Lg,"重置 "+m(l.quotaResetTime||"00:00"),1)])])):(n(),i("div",Eg,a[84]||(a[84]=[e("i",{class:"fas fa-minus"},null,-1)])))])):l.platform==="openai"?(n(),i("div",Ng,[l.codexUsage?(n(),i("div",qg,[e("div",Wg,[e("div",Gg,[e("span",Fg,m(H("primary")),1),e("div",Qg,[e("div",Bg,[e("div",Hg,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",ce(l.codexUsage.primary)]),style:Me({width:W(l.codexUsage.primary)})},null,6)]),e("span",Jg,m(c(l.codexUsage.primary)),1)])])]),e("div",Yg," 重置剩余 "+m(X(l.codexUsage.primary)),1)]),e("div",Zg,[e("div",Xg,[e("span",em,m(H("secondary")),1),e("div",tm,[e("div",sm,[e("div",am,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",ce(l.codexUsage.secondary)]),style:Me({width:W(l.codexUsage.secondary)})},null,6)]),e("span",rm,m(c(l.codexUsage.secondary)),1)])])]),e("div",lm," 重置剩余 "+m(X(l.codexUsage.secondary)),1)])])):(n(),i("div",om,a[85]||(a[85]=[e("span",{class:"text-xs"},"N/A",-1)])))])):(n(),i("div",nm,a[86]||(a[86]=[e("span",{class:"text-xs"},"N/A",-1)])))]),e("td",im,m(rt(l.lastUsedAt)),1),e("td",dm,[e("div",um,[(l.platform==="claude"||l.platform==="claude-console"||l.platform==="openai"||l.platform==="openai-responses")&&(l.status==="unauthorized"||l.status!=="active"||(ne=l.rateLimitStatus)!=null&&ne.isRateLimited||l.rateLimitStatus==="limited"||!l.isActive)?(n(),i("button",{key:0,class:S(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isResetting?"cursor-not-allowed bg-gray-100 text-gray-400":"bg-yellow-100 text-yellow-700 hover:bg-yellow-200"]),disabled:l.isResetting,title:l.isResetting?"重置中...":"重置所有异常状态",onClick:ue=>jt(l)},[e("i",{class:S(["fas fa-redo",l.isResetting?"animate-spin":""])},null,2),a[87]||(a[87]=e("span",{class:"ml-1"},"重置状态",-1))],10,pm)):f("",!0),e("button",{class:S(["rounded px-2.5 py-1 text-xs font-medium transition-colors",l.isTogglingSchedulable?"cursor-not-allowed bg-gray-100 text-gray-400":l.schedulable?"bg-green-100 text-green-700 hover:bg-green-200":"bg-gray-100 text-gray-700 hover:bg-gray-200"]),disabled:l.isTogglingSchedulable,title:l.schedulable?"点击禁用调度":"点击启用调度",onClick:ue=>Tt(l)},[e("i",{class:S(["fas",l.schedulable?"fa-toggle-on":"fa-toggle-off"])},null,2),e("span",mm,m(l.schedulable?"调度":"停用"),1)],10,gm),et(l)?(n(),i("button",{key:1,class:"rounded bg-indigo-100 px-2.5 py-1 text-xs font-medium text-indigo-700 transition-colors hover:bg-indigo-200",title:"查看使用详情",onClick:ue=>tt(l)},a[88]||(a[88]=[e("i",{class:"fas fa-chart-line"},null,-1),e("span",{class:"ml-1"},"详情",-1)]),8,ym)):f("",!0),e("button",{class:"rounded bg-blue-100 px-2.5 py-1 text-xs font-medium text-blue-700 transition-colors hover:bg-blue-200",title:"编辑账户",onClick:ue=>$t(l)},a[89]||(a[89]=[e("i",{class:"fas fa-edit"},null,-1),e("span",{class:"ml-1"},"编辑",-1)]),8,cm),e("button",{class:"rounded bg-red-100 px-2.5 py-1 text-xs font-medium text-red-700 transition-colors hover:bg-red-200",title:"删除账户",onClick:ue=>Ut(l)},a[90]||(a[90]=[e("i",{class:"fas fa-trash"},null,-1),e("span",{class:"ml-1"},"删除",-1)]),8,xm)])])])}),128))])])])),!h.value&&Le.value.length>0?(n(),i("div",fm,[(n(!0),i(xe,null,_e(We.value,l=>{var z,ae,ne,ue;return n(),i("div",{key:l.id,class:"card p-4 transition-shadow hover:shadow-lg"},[e("div",bm,[e("div",vm,[Be.value?x((n(),i("input",{key:0,"onUpdate:modelValue":a[14]||(a[14]=Ue=>te.value=Ue),class:"mt-1 h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500",type:"checkbox",value:l.id,onChange:we},null,40,km)),[[ye,te.value]]):f("",!0),e("div",{class:S(["flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg",l.platform==="claude"?"bg-gradient-to-br from-purple-500 to-purple-600":l.platform==="bedrock"?"bg-gradient-to-br from-orange-500 to-red-600":l.platform==="azure_openai"?"bg-gradient-to-br from-blue-500 to-cyan-600":l.platform==="openai"?"bg-gradient-to-br from-gray-600 to-gray-700":l.platform==="ccr"?"bg-gradient-to-br from-teal-500 to-emerald-600":l.platform==="droid"?"bg-gradient-to-br from-cyan-500 to-sky-600":"bg-gradient-to-br from-blue-500 to-blue-600"])},[e("i",{class:S(["text-sm text-white",l.platform==="claude"?"fas fa-brain":l.platform==="bedrock"?"fab fa-aws":l.platform==="azure_openai"?"fab fa-microsoft":l.platform==="openai"?"fas fa-openai":l.platform==="ccr"?"fas fa-code-branch":(l.platform==="droid","fas fa-robot")])},null,2)],2),e("div",null,[e("h4",hm,m(l.name||l.email),1),e("div",wm,[e("span",$m,m(l.platform),1),a[91]||(a[91]=e("span",{class:"text-xs text-gray-400"},"|",-1)),e("span",Am,m(l.type),1)])])]),e("span",{class:S(["inline-flex items-center rounded-full px-2 py-1 text-xs font-semibold",Wt(l)])},[e("div",{class:S(["mr-1.5 h-1.5 w-1.5 rounded-full",Gt(l)])},null,2),$(" "+m(qt(l)),1)],2)]),e("div",Cm,[e("div",null,[a[95]||(a[95]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"今日使用",-1)),e("div",Um,[e("div",Tm,[a[92]||(a[92]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-blue-500"},null,-1)),e("p",Im,m(((ae=(z=l.usage)==null?void 0:z.daily)==null?void 0:ae.requests)||0)+" 次 ",1)]),e("div",_m,[a[93]||(a[93]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Km,m(Re(((ue=(ne=l.usage)==null?void 0:ne.daily)==null?void 0:ue.allTokens)||0))+"M ",1)]),e("div",Sm,[a[94]||(a[94]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",Pm," $"+m(es(l)),1)])])]),e("div",null,[a[98]||(a[98]=e("p",{class:"text-xs text-gray-500 dark:text-gray-400"},"会话窗口",-1)),l.usage&&l.usage.sessionWindow?(n(),i("div",Mm,[e("div",Dm,[a[96]||(a[96]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-purple-500"},null,-1)),e("p",Vm,m(Re(l.usage.sessionWindow.totalTokens))+"M ",1)]),e("div",Rm,[a[97]||(a[97]=e("div",{class:"h-1.5 w-1.5 rounded-full bg-green-500"},null,-1)),e("p",zm," $"+m(fe(l.usage.sessionWindow.totalCost)),1)])])):(n(),i("div",jm,"-"))])]),e("div",Om,[l.platform==="claude"?(n(),i("div",Lm,[o(l)&&l.claudeUsage?(n(),i("div",Em,[e("div",Nm,[e("div",qm,[a[99]||(a[99]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-medium text-indigo-600 dark:bg-indigo-500/20 dark:text-indigo-300"}," 5h ",-1)),e("div",Wm,[e("div",Gm,[e("div",Fm,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.fiveHour)]),style:Me({width:F(l.claudeUsage.fiveHour)})},null,6)]),e("span",Qm,m(L(l.claudeUsage.fiveHour)),1)])])]),e("div",Bm," 重置剩余 "+m(ke(l.claudeUsage.fiveHour)),1)]),e("div",Hm,[e("div",Jm,[a[100]||(a[100]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-300"}," 7d ",-1)),e("div",Ym,[e("div",Zm,[e("div",Xm,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.sevenDay)]),style:Me({width:F(l.claudeUsage.sevenDay)})},null,6)]),e("span",ey,m(L(l.claudeUsage.sevenDay)),1)])])]),e("div",ty," 重置剩余 "+m(ke(l.claudeUsage.sevenDay)),1)]),e("div",sy,[e("div",ay,[a[101]||(a[101]=e("span",{class:"inline-flex min-w-[32px] justify-center rounded-full bg-purple-100 px-2 py-0.5 text-[11px] font-medium text-purple-600 dark:bg-purple-500/20 dark:text-purple-300"}," Opus ",-1)),e("div",ry,[e("div",ly,[e("div",oy,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",Ce(l.claudeUsage.sevenDayOpus)]),style:Me({width:F(l.claudeUsage.sevenDayOpus)})},null,6)]),e("span",ny,m(L(l.claudeUsage.sevenDayOpus)),1)])])]),e("div",iy," 重置剩余 "+m(ke(l.claudeUsage.sevenDayOpus)),1)])])):!o(l)&&l.sessionWindow&&l.sessionWindow.hasActiveWindow?(n(),i("div",dy,[e("div",uy,[e("div",py,[a[103]||(a[103]=e("span",{class:"font-medium text-gray-600 dark:text-gray-300"},"会话窗口",-1)),Je(C,{content:"会话窗口进度不代表使用量,仅表示距离下一个5小时窗口的剩余时间",placement:"top"},{default:St(()=>a[102]||(a[102]=[e("i",{class:"fas fa-question-circle cursor-help text-xs text-gray-400 hover:text-gray-600"},null,-1)])),_:1,__:[102]})]),e("span",gy,m(l.sessionWindow.progress)+"% ",1)]),e("div",my,[e("div",{class:S(["h-full transition-all duration-300",t(l.sessionWindow.sessionWindowStatus,l)]),style:Me({width:l.sessionWindow.progress+"%"})},null,6)]),e("div",yy,[e("span",cy,m(kt(l.sessionWindow.windowStart,l.sessionWindow.windowEnd)),1),l.sessionWindow.remainingTime>0?(n(),i("span",xy," 剩余 "+m(ht(l.sessionWindow.remainingTime)),1)):(n(),i("span",fy," 已结束 "))])])):(n(),i("div",by,"暂无统计"))])):l.platform==="openai"?(n(),i("div",vy,[l.codexUsage?(n(),i("div",ky,[e("div",hy,[e("div",wy,[e("span",$y,m(H("primary")),1),e("div",Ay,[e("div",Cy,[e("div",Uy,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",ce(l.codexUsage.primary)]),style:Me({width:W(l.codexUsage.primary)})},null,6)]),e("span",Ty,m(c(l.codexUsage.primary)),1)])])]),e("div",Iy," 重置剩余 "+m(X(l.codexUsage.primary)),1)]),e("div",_y,[e("div",Ky,[e("span",Sy,m(H("secondary")),1),e("div",Py,[e("div",My,[e("div",Dy,[e("div",{class:S(["h-2 rounded-full transition-all duration-300",ce(l.codexUsage.secondary)]),style:Me({width:W(l.codexUsage.secondary)})},null,6)]),e("span",Vy,m(c(l.codexUsage.secondary)),1)])])]),e("div",Ry," 重置剩余 "+m(X(l.codexUsage.secondary)),1)])])):f("",!0),l.codexUsage?f("",!0):(n(),i("div",zy,"暂无统计"))])):f("",!0),e("div",jy,[a[104]||(a[104]=e("span",{class:"text-gray-500 dark:text-gray-400"},"最后使用",-1)),e("span",Oy,m(l.lastUsedAt?u(l.lastUsedAt):"从未使用"),1)]),l.proxyConfig&&l.proxyConfig.type!=="none"?(n(),i("div",Ly,[a[105]||(a[105]=e("span",{class:"text-gray-500 dark:text-gray-400"},"代理",-1)),e("span",Ey,m(l.proxyConfig.type.toUpperCase()),1)])):f("",!0),e("div",Ny,[a[106]||(a[106]=e("span",{class:"text-gray-500 dark:text-gray-400"},"优先级",-1)),e("span",qy,m(l.priority||50),1)])]),e("div",Wy,[e("button",{class:S(["flex flex-1 items-center justify-center gap-1 rounded-lg px-3 py-2 text-xs transition-colors",l.schedulable?"bg-gray-50 text-gray-600 hover:bg-gray-100":"bg-green-50 text-green-600 hover:bg-green-100"]),disabled:l.isTogglingSchedulable,onClick:Ue=>Tt(l)},[e("i",{class:S(["fas",l.schedulable?"fa-pause":"fa-play"])},null,2),$(" "+m(l.schedulable?"暂停":"启用"),1)],10,Gy),et(l)?(n(),i("button",{key:0,class:"flex flex-1 items-center justify-center gap-1 rounded-lg bg-indigo-50 px-3 py-2 text-xs text-indigo-600 transition-colors hover:bg-indigo-100",onClick:Ue=>tt(l)},a[107]||(a[107]=[e("i",{class:"fas fa-chart-line"},null,-1),$(" 详情 ",-1)]),8,Fy)):f("",!0),e("button",{class:"flex-1 rounded-lg bg-gray-50 px-3 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100",onClick:Ue=>$t(l)},a[108]||(a[108]=[e("i",{class:"fas fa-edit mr-1"},null,-1),$(" 编辑 ",-1)]),8,Qy),e("button",{class:"rounded-lg bg-red-50 px-3 py-2 text-xs text-red-600 transition-colors hover:bg-red-100",onClick:Ue=>Ut(l)},a[109]||(a[109]=[e("i",{class:"fas fa-trash"},null,-1)]),8,By)])])}),128))])):f("",!0)]),!h.value&&Le.value.length>0?(n(),i("div",Hy,[e("div",Jy,[e("span",Yy," 共 "+m(Le.value.length)+" 条记录 ",1),e("div",Zy,[a[110]||(a[110]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"每页显示",-1)),x(e("select",{"onUpdate:modelValue":a[15]||(a[15]=l=>b.value=l),class:"rounded-md border border-gray-200 bg-white px-2 py-1 text-xs text-gray-700 transition-colors hover:border-gray-300 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:border-gray-500 sm:text-sm",onChange:a[16]||(a[16]=l=>P.value=1)},[(n(),i(xe,null,_e(A,l=>e("option",{key:l,value:l},m(l),9,Xy)),64))],544),[[ns,b.value]]),a[111]||(a[111]=e("span",{class:"text-xs text-gray-600 dark:text-gray-400 sm:text-sm"},"条",-1))])]),e("div",ec,[e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:P.value===1,onClick:a[17]||(a[17]=l=>P.value--)},a[112]||(a[112]=[e("i",{class:"fas fa-chevron-left"},null,-1)]),8,tc),e("div",sc,[y.value?(n(),i("button",{key:0,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[18]||(a[18]=l=>P.value=1)}," 1 ")):f("",!0),I.value?(n(),i("span",ac," ... ")):f("",!0),(n(!0),i(xe,null,_e(De.value,l=>(n(),i("button",{key:l,class:S(["rounded-md border px-3 py-1 text-xs font-medium transition-colors sm:text-sm",l===P.value?"border-blue-500 bg-blue-50 text-blue-600 dark:border-blue-400 dark:bg-blue-500/10 dark:text-blue-300":"border-gray-300 bg-white text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700"]),onClick:z=>P.value=l},m(l),11,rc))),128)),Se.value?(n(),i("span",lc," ... ")):f("",!0),g.value?(n(),i("button",{key:3,class:"hidden rounded-md border border-gray-300 bg-white px-3 py-1 text-sm font-medium text-gray-700 hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:block",onClick:a[19]||(a[19]=l=>P.value=ve.value)},m(ve.value),1)):f("",!0)]),e("button",{class:"rounded-md border border-gray-300 bg-white px-3 py-1.5 text-xs font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 sm:py-1 sm:text-sm",disabled:P.value===ve.value||ve.value===0,onClick:a[20]||(a[20]=l=>P.value++)},a[113]||(a[113]=[e("i",{class:"fas fa-chevron-right"},null,-1)]),8,oc)])])):f("",!0),Ee.value&&(!Ke.value||Ke.value!=="ccr")?(n(),Fe(as,{key:1,onClose:wt,onPlatformChanged:a[21]||(a[21]=l=>Ke.value=l),onSuccess:It})):Ee.value&&Ke.value==="ccr"?(n(),Fe(rs,{key:2,onClose:wt,onSuccess:It})):f("",!0),Ne.value&&qe.value&&qe.value.platform==="ccr"?(n(),Fe(rs,{key:3,account:qe.value,onClose:a[22]||(a[22]=l=>Ne.value=!1),onSuccess:_t},null,8,["account"])):Ne.value?(n(),Fe(as,{key:4,account:qe.value,onClose:a[23]||(a[23]=l=>Ne.value=!1),onSuccess:_t},null,8,["account"])):f("",!0),Je(is,{"cancel-text":Oe(p).cancelText,"confirm-text":Oe(p).confirmText,message:Oe(p).message,show:Oe(he),title:Oe(p).title,onCancel:Oe(N),onConfirm:Oe(_)},null,8,["cancel-text","confirm-text","message","show","title","onCancel","onConfirm"]),be.value?(n(),Fe(vu,{key:5,account:s.value||{},"generated-at":oe.value,history:d.value,loading:Ie.value,overview:Y.value,show:be.value,summary:j.value,onClose:dt},null,8,["account","generated-at","history","loading","overview","show","summary"])):f("",!0)])}}},cc=Jt(nc,[["__scopeId","data-v-0e6aad53"]]);export{cc as default};