import{d as D,o as f,c as V,a,e as l,w as o,F as E,i as p,y as P,p as B,t as k,k as x,v as te,r as m,u as ae,q as oe,x as ie,l as se,j,z as ue,E as T}from"./index-CcdGGfCj.js";import{_ as A,h as U,a as re}from"./http-CGjljVXL.js";import{A as q}from"./AdminNumberInput-BCSDw1QF.js";import{_ as de}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as me}from"./PageHeader.vue_vue_type_script_setup_true_lang-ClDoYPHj.js";const ce={class:"channel-editor"},pe={class:"channel-section"},_e={class:"channel-section__header"},fe={class:"channel-section__icon"},ye={class:"channel-grid"},ge={class:"masked-key-row"},ve={class:"api-key-helper-row"},be={class:"channel-section"},ke={class:"channel-section__header"},he={class:"channel-section__icon"},xe={class:"exchange-rate-row"},Ve={class:"exchange-rate-summary"},Ce={class:"channel-section"},Ne={class:"channel-section__header"},$e={class:"channel-section__icon"},Fe={class:"channel-grid channel-grid--three"},Ue=D({__name:"ChannelFormFields",props:{form:{},editing:{type:Boolean}},setup(u){const v=u,C=x(!1),N=te(()=>{const c=Number(v.form.exchange_cny_amount),t=Number(v.form.exchange_point_amount);return!Number.isFinite(c)||c<=0||!Number.isFinite(t)||t<=0?"--":(t/c).toFixed(2)});function h(){v.form.api_key="",C.value=!1}return(c,t)=>{const y=m("el-input"),_=m("el-form-item"),d=m("el-button");return f(),V("div",ce,[a("section",pe,[a("header",_e,[a("span",fe,[l(A,{name:"Connection"})]),t[9]||(t[9]=a("div",null,[a("h3",null,"基础连接"),a("p",null,"配置渠道标识、接口地址和访问凭证。")],-1))]),a("div",ye,[l(_,{label:"渠道名",prop:"name",required:""},{default:o(()=>[l(y,{modelValue:u.form.name,"onUpdate:modelValue":t[0]||(t[0]=s=>u.form.name=s),modelModifiers:{trim:!0},placeholder:"输入渠道名称"},null,8,["modelValue"])]),_:1}),l(_,{label:"渠道 URL",prop:"base_url",required:""},{default:o(()=>[l(y,{modelValue:u.form.base_url,"onUpdate:modelValue":t[1]||(t[1]=s=>u.form.base_url=s),modelModifiers:{trim:!0},placeholder:"https://api.example.com"},null,8,["modelValue"])]),_:1}),l(_,{class:"channel-field--full",label:"API Key",prop:"api_key",required:!u.editing},{default:o(()=>[u.editing&&!C.value?(f(),V(E,{key:0},[a("div",ge,[l(y,{"model-value":u.form.api_key_masked||"未配置",readonly:""},null,8,["model-value"]),l(d,{onClick:t[2]||(t[2]=s=>C.value=!0)},{default:o(()=>[...t[10]||(t[10]=[p("更换 API Key",-1)])]),_:1})]),t[11]||(t[11]=a("div",{class:"field-helper"},"仅显示前后各 5 位,完整密钥不会返回管理端",-1))],64)):(f(),V(E,{key:1},[l(y,{modelValue:u.form.api_key,"onUpdate:modelValue":t[3]||(t[3]=s=>u.form.api_key=s),type:"password","show-password":"",placeholder:"输入新 API Key"},null,8,["modelValue"]),a("div",ve,[t[13]||(t[13]=a("div",{class:"field-helper"},"凭证将加密保存",-1)),u.editing?(f(),P(d,{key:0,link:"",onClick:h},{default:o(()=>[...t[12]||(t[12]=[p("取消更换",-1)])]),_:1})):B("",!0)])],64))]),_:1},8,["required"])])]),a("section",be,[a("header",ke,[a("span",he,[l(A,{name:"Coin"})]),t[14]||(t[14]=a("div",null,[a("h3",null,"渠道汇率"),a("p",null,"设置人民币与渠道积分的兑换关系,用于模型价格换算。")],-1))]),a("div",xe,[l(_,{label:"人民币金额",required:""},{default:o(()=>[l(q,{modelValue:u.form.exchange_cny_amount,"onUpdate:modelValue":t[4]||(t[4]=s=>u.form.exchange_cny_amount=s),min:.01,precision:2,placeholder:"1.00"},null,8,["modelValue"])]),_:1}),t[15]||(t[15]=a("span",{class:"exchange-rate-row__equals"},"=",-1)),l(_,{label:"渠道积分",required:""},{default:o(()=>[l(q,{modelValue:u.form.exchange_point_amount,"onUpdate:modelValue":t[5]||(t[5]=s=>u.form.exchange_point_amount=s),min:.01,precision:2,placeholder:"1.00"},null,8,["modelValue"])]),_:1})]),a("div",Ve,[t[16]||(t[16]=a("span",null,"归一化汇率",-1)),a("strong",null,"1.00 元 = "+k(N.value)+" 渠道积分",1)])]),a("section",Ce,[a("header",Ne,[a("span",$e,[l(A,{name:"Setting"})]),t[17]||(t[17]=a("div",null,[a("h3",null,"运行限制"),a("p",null,"配置余额预警和任务并发上限。")],-1))]),a("div",Fe,[l(_,{label:"余额预警阈值",prop:"warning_threshold",required:""},{default:o(()=>[l(q,{modelValue:u.form.warning_threshold,"onUpdate:modelValue":t[6]||(t[6]=s=>u.form.warning_threshold=s),min:0,precision:2},null,8,["modelValue"])]),_:1}),l(_,{label:"最大并发数",prop:"max_concurrency",required:""},{default:o(()=>[l(q,{modelValue:u.form.max_concurrency,"onUpdate:modelValue":t[7]||(t[7]=s=>u.form.max_concurrency=s),min:1,max:5e3,precision:0},null,8,["modelValue"]),t[18]||(t[18]=a("div",{class:"field-helper"},"已提交且未进入终态的总任务数",-1))]),_:1}),l(_,{label:"单用户最高并发数",prop:"max_user_concurrency",required:""},{default:o(()=>[l(q,{modelValue:u.form.max_user_concurrency,"onUpdate:modelValue":t[8]||(t[8]=s=>u.form.max_user_concurrency=s),min:1,max:500,precision:0},null,8,["modelValue"]),t[19]||(t[19]=a("div",{class:"field-helper"},"超出后继续排队,不计入轮询请求",-1))]),_:1})])])])}}}),qe=de(Ue,[["__scopeId","data-v-ace04131"]]),Be={class:"page-stack management-page"},Ae={class:"panel filter-bar"},Ie={class:"panel table-panel"},Pe={key:1,class:"mobile-card-list"},Te={class:"card-actions"},Le=D({__name:"ChannelsView",setup(u){const v=ae(),C=x(!1),N=x(!1),h=x(!1),c=x(""),t=x(),y=x([]),_=x(0),d=j({keyword:"",enabled:"",page:1,page_size:15}),s=j({}),O={name:[{required:!0,message:"请填写渠道名",trigger:"blur"}],base_url:[{required:!0,message:"请填写渠道 URL",trigger:"blur"}],api_key:[{validator:(n,e,r)=>{!c.value&&!String(e||"").trim()?r(new Error("请填写 API Key")):r()},trigger:"blur"}]};async function $(){C.value=!0;try{const{data:n}=await U.get("/resources/channels",{params:d});y.value=n.data.items||[],_.value=Number(n.data.total||0)}catch(n){I(n)}finally{C.value=!1}}function K(n){Object.keys(s).forEach(e=>delete s[e]),Object.assign(s,{name:(n==null?void 0:n.name)||"",channel_type:(n==null?void 0:n.channel_type)||"relay",base_url:(n==null?void 0:n.base_url)||"",api_key:"",api_key_masked:(n==null?void 0:n.api_key_masked)||"",warning_threshold:Number((n==null?void 0:n.warning_threshold)??500),exchange_cny_amount:1,exchange_point_amount:Number((n==null?void 0:n.channel_points_per_cny)??1),max_concurrency:Number((n==null?void 0:n.max_concurrency)??500),max_user_concurrency:Number((n==null?void 0:n.max_user_concurrency)??10),enabled:(n==null?void 0:n.enabled)??!0}),c.value=(n==null?void 0:n.id)||""}function Q(){K(),h.value=!0}function z(n){K(n),h.value=!0}async function G(){var r;if(!await((r=t.value)==null?void 0:r.validate().catch(()=>!1)))return;const n=Number(s.exchange_cny_amount),e=Number(s.exchange_point_amount);if(!Number.isFinite(n)||n<=0||!Number.isFinite(e)||e<=0){v.warning("请填写大于 0 的人民币金额和渠道积分");return}if(c.value&&String(s.api_key||"").trim())try{await T.confirm("此次修改将覆盖已加密保存的 API Key,是否继续?","确认覆盖敏感配置",{type:"warning",confirmButtonText:"继续覆盖",cancelButtonText:"取消"})}catch{return}N.value=!0;try{const g={...s,channel_points_per_cny:Number((e/n).toFixed(6))};delete g.exchange_cny_amount,delete g.exchange_point_amount,delete g.api_key_masked,g.api_key||delete g.api_key,c.value?await U.put(`/resources/channels/${c.value}`,g):await U.post("/resources/channels",g),h.value=!1,v.success(c.value?"渠道已更新":"渠道已创建"),await $()}catch(g){I(g)}finally{N.value=!1}}async function H(n,e){try{await T.confirm(`${e?"启用":"停用"}后将立即生效,是否继续?`,"确认状态变更",{type:"warning",confirmButtonText:"确认",cancelButtonText:"取消"}),await U.patch(`/resources/channels/${n.id}/enabled`,{enabled:e}),n.enabled=e,v.success("渠道状态已更新")}catch(r){n.enabled=!e,r!=="cancel"&&r!=="close"&&I(r)}}async function R(n){try{await T.confirm(`确定删除渠道“${n.name}”吗?`,"删除渠道",{type:"warning",confirmButtonText:"删除",cancelButtonText:"取消"}),await U.delete(`/resources/channels/${n.id}`),v.success("渠道已删除"),await $()}catch(e){e!=="cancel"&&e!=="close"&&I(e)}}function S(){d.page=1,$()}function J(){d.keyword="",d.enabled="",S()}function L(n){return Number(n.balance)<0?"无限":`${Number(n.balance||0).toFixed(2)} ${n.currency||""}`}function I(n){const e=re(n);v.error(e.message,e.copyText)}return oe($),(n,e)=>{const r=m("el-button"),g=m("el-input"),M=m("el-option"),W=m("el-select"),b=m("el-table-column"),X=m("el-switch"),Y=m("el-table"),Z=m("el-empty"),w=m("el-pagination"),ee=m("el-form"),ne=m("el-dialog"),le=ue("loading");return f(),V("div",Be,[l(me,{title:"渠道管理",description:"维护 API 地址、密钥、汇率、余额和并发配置"},{default:o(()=>[l(r,{type:"primary",onClick:Q},{default:o(()=>[l(A,{name:"Plus"}),e[5]||(e[5]=p("新建渠道",-1))]),_:1})]),_:1}),a("section",Ae,[l(g,{modelValue:d.keyword,"onUpdate:modelValue":e[0]||(e[0]=i=>d.keyword=i),clearable:"",placeholder:"输入渠道名或地址"},{prefix:o(()=>[l(A,{name:"Search"})]),_:1},8,["modelValue"]),l(W,{modelValue:d.enabled,"onUpdate:modelValue":e[1]||(e[1]=i=>d.enabled=i),clearable:"",placeholder:"启用状态"},{default:o(()=>[l(M,{label:"已启用",value:"true"}),l(M,{label:"已停用",value:"false"})]),_:1},8,["modelValue"]),l(r,{type:"primary",onClick:S},{default:o(()=>[...e[6]||(e[6]=[p("查询",-1)])]),_:1}),l(r,{onClick:J},{default:o(()=>[...e[7]||(e[7]=[p("重置",-1)])]),_:1})]),ie((f(),V("section",Ie,[y.value.length?(f(),P(Y,{key:0,data:y.value,class:"desktop-table"},{default:o(()=>[l(b,{prop:"name",label:"渠道名","min-width":"130"}),l(b,{prop:"base_url",label:"渠道 URL","min-width":"240","show-overflow-tooltip":""}),l(b,{prop:"api_key_masked",label:"API Key","min-width":"190"}),l(b,{label:"渠道汇率","min-width":"180"},{default:o(({row:i})=>[p("1.00 元 = "+k(Number(i.channel_points_per_cny||0).toFixed(2))+" 积分",1)]),_:1}),l(b,{prop:"max_concurrency",label:"最大并发","min-width":"100"}),l(b,{prop:"max_user_concurrency",label:"单用户并发","min-width":"120"}),l(b,{label:"当前余额","min-width":"130"},{default:o(({row:i})=>[p(k(L(i)),1)]),_:1}),l(b,{label:"启用","min-width":"90"},{default:o(({row:i})=>[l(X,{"model-value":i.enabled,onChange:F=>H(i,!!F)},null,8,["model-value","onChange"])]),_:1}),l(b,{label:"操作",width:"140",fixed:"right"},{default:o(({row:i})=>[l(r,{link:"",type:"primary",onClick:F=>z(i)},{default:o(()=>[...e[8]||(e[8]=[p("编辑",-1)])]),_:1},8,["onClick"]),l(r,{link:"",type:"danger",onClick:F=>R(i)},{default:o(()=>[...e[9]||(e[9]=[p("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])):B("",!0),y.value.length?(f(),V("div",Pe,[(f(!0),V(E,null,se(y.value,i=>(f(),V("article",{key:i.id,class:"data-card"},[a("dl",null,[e[10]||(e[10]=a("dt",null,"渠道名",-1)),a("dd",null,k(i.name),1),e[11]||(e[11]=a("dt",null,"地址",-1)),a("dd",null,k(i.base_url),1),e[12]||(e[12]=a("dt",null,"渠道汇率",-1)),a("dd",null,k(Number(i.channel_points_per_cny||0).toFixed(2)),1),e[13]||(e[13]=a("dt",null,"当前余额",-1)),a("dd",null,k(L(i)),1),e[14]||(e[14]=a("dt",null,"最大并发",-1)),a("dd",null,k(i.max_concurrency)+" / 用户 "+k(i.max_user_concurrency),1)]),a("div",Te,[l(r,{onClick:F=>z(i)},{default:o(()=>[...e[15]||(e[15]=[p("编辑",-1)])]),_:1},8,["onClick"]),l(r,{type:"danger",plain:"",onClick:F=>R(i)},{default:o(()=>[...e[16]||(e[16]=[p("删除",-1)])]),_:1},8,["onClick"])])]))),128))])):B("",!0),y.value.length?B("",!0):(f(),P(Z,{key:2,description:"暂无渠道"})),_.value>d.page_size?(f(),P(w,{key:3,"current-page":d.page,"onUpdate:currentPage":e[2]||(e[2]=i=>d.page=i),"page-size":d.page_size,total:_.value,layout:"total, prev, pager, next",onCurrentChange:$},null,8,["current-page","page-size","total"])):B("",!0)])),[[le,C.value]]),l(ne,{modelValue:h.value,"onUpdate:modelValue":e[4]||(e[4]=i=>h.value=i),title:c.value?"编辑渠道":"新建渠道",width:"min(820px, calc(100vw - 32px))",class:"managed-scroll-dialog","align-center":"","destroy-on-close":""},{footer:o(()=>[l(r,{onClick:e[3]||(e[3]=i=>h.value=!1)},{default:o(()=>[...e[17]||(e[17]=[p("取消",-1)])]),_:1}),l(r,{type:"primary",loading:N.value,onClick:G},{default:o(()=>[...e[18]||(e[18]=[p("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(ee,{ref_key:"formRef",ref:t,model:s,rules:O,"label-position":"top"},{default:o(()=>[l(qe,{form:s,editing:!!c.value},null,8,["form","editing"])]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}});export{Le as default};