PageSourceSearch

https://hub.avibox.ru/assets/AiPricing-Bf9vN_Cg.js

js avibox.ru collected 2026-09-24 15:12:42 UTC 6,399 bytes, 1 lines download raw bytes

1import{dI as z,ed as _,dw as B,e3 as N,ei as $,e7 as u,dB as m,dy as t,eH as l,ey as w,dz as A,dA as D,eC as n,dF as s,er as U,c3 as E,dE as g,eG as o,cf as K,em as y}from"./vendor-DUoYKxKf.js";import{e as P,a as T,g as C,d as F}from"./index-BcPf-nBI.js";import{m as S}from"./apiErrors-5QjOq92y.js";import{E as O}from"./ErrorState-D7_jXPui.js";import{N as G}from"./NoDataMessage-DJLo0zyQ.js";import{T as H}from"./Table-BWHKNJiS.js";import{S as R}from"./Switch-BnZPS_Tw.js";import{S as j}from"./StatusPill-BD38qi8e.js";import"./vue-core-BW8FD41h.js";import"./CopyButton.vue_vue_type_script_setup_true_lang-DUqHItUu.js";import"./clipboard-Dw6gfW3R.js";import"./ProfileAvatar-B9TVcWCe.js";import"./avatar-placeholder-MmQ9fg6u.js";import"./usePersistentSetting-CkvRMRs-.js";const q={class:"ai-pricing"},J={class:"ai-pricing__header"},L={class:"ai-pricing__toggle"},Q={class:"ai-pricing__card ai-pricing__create"},X={class:"ai-pricing__create-grid"},Y=["disabled"],Z={key:1,class:"ai-pricing__card ai-pricing__loading"},ee={key:2,class:"ai-pricing__card"},ie={class:"ai-table__mono"},te={class:"ai-table__mono"},ae=["onUpdate:modelValue"],re=["onUpdate:modelValue"],le=["onUpdate:modelValue"],oe={class:"ai-table__muted"},ne=z({__name:"AiPricing",setup(pe){const v=_([]),b=_(!1),c=_(!1),d=_(null),k=_(!1),r=_({id:"",provider:"",model:"",input_price_per_1k_rub:"0",output_price_per_1k_rub:"0",image_price_rub:"0",is_active:!0}),x=B(()=>k.value?v.value.filter(a=>a.is_active):v.value),I=[{key:"provider",header:"Provider"},{key:"model",header:"Model"},{key:"input_price",header:"Input ₽/1K",textAlign:"right",minWidth:"110px"},{key:"output_price",header:"Output ₽/1K",textAlign:"right",minWidth:"110px"},{key:"image_price",header:"Image ₽",textAlign:"right",minWidth:"100px"},{key:"markup",header:"Markup",textAlign:"right",minWidth:"70px"},{key:"source",header:"Источник",minWidth:"90px"},{key:"is_active",header:"Активен",textAlign:"center",width:"90px",minWidth:"90px"},{key:"actions",header:"",textAlign:"center",width:"96px",minWidth:"96px"}];function ue(a){return a}async function f(){b.value=!0,d.value=null;try{const{data:a}=await C.get("/admin/ai-pricing");v.value=(a.items??[]).map(i=>({...i,id:`${i.provider}:${i.model}`}))}catch(a){d.value=S(a,"Не удалось загрузить тарифы")[0]}finally{b.value=!1}}async function h(a){c.value=!0,d.value=null;try{await C.post("/admin/ai-pricing",{provider:a.provider,model:a.model,input_price_per_1k_rub:a.input_price_per_1k_rub,output_price_per_1k_rub:a.output_price_per_1k_rub,image_price_rub:a.image_price_rub||"0",is_active:a.is_active}),await f(),W()}catch(i){d.value=S(i,"Не удалось сохранить")[0]}finally{c.value=!1}}async function M(a){await h({...a,is_active:!a.is_active})}function W(){r.value={id:"",provider:"",model:"",input_price_per_1k_rub:"0",output_price_per_1k_rub:"0",image_price_rub:"0",is_active:!0}}return N(f),(a,i)=>{const V=$("tooltip");return u(),m("div",q,[t("div",J,[i[8]||(i[8]=t("div",{class:"ai-pricing__titles"},[t("h1",{class:"ai-pricing__title"},"Тарификация AI-моделей"),t("p",{class:"ai-pricing__subtitle"}," Стоимость ввода/вывода за 1K токенов и за изображение (₽). Markup и источник — read-only. ")],-1)),t("label",L,[l(t("input",{"onUpdate:modelValue":i[0]||(i[0]=e=>k.value=e),type:"checkbox"},null,512),[[w,k.value]]),i[7]||(i[7]=t("span",null,"Только активные",-1))])]),d.value?(u(),A(O,{key:0,description:d.value,"show-retry":"",onRetry:f},null,8,["description"])):D("",!0),t("div",Q,[i[10]||(i[10]=t("h2",{class:"ai-pricing__card-title"},"Добавить / обновить тариф",-1)),t("div",X,[l(t("input",{"onUpdate:modelValue":i[1]||(i[1]=e=>r.value.provider=e),class:"ai-input",placeholder:"provider (openai)"},null,512),[[n,r.value.provider]]),l(t("input",{"onUpdate:modelValue":i[2]||(i[2]=e=>r.value.model=e),class:"ai-input",placeholder:"model (gpt-4o-mini)"},null,512),[[n,r.value.model]]),l(t("input",{"onUpdate:modelValue":i[3]||(i[3]=e=>r.value.input_price_per_1k_rub=e),class:"ai-input ai-input--num",placeholder:"input ₽/1K"},null,512),[[n,r.value.input_price_per_1k_rub]]),l(t("input",{"onUpdate:modelValue":i[4]||(i[4]=e=>r.value.output_price_per_1k_rub=e),class:"ai-input ai-input--num",placeholder:"output ₽/1K"},null,512),[[n,r.value.output_price_per_1k_rub]]),l(t("input",{"onUpdate:modelValue":i[5]||(i[5]=e=>r.value.image_price_rub=e),class:"ai-input ai-input--num",placeholder:"img ₽/шт"},null,512),[[n,r.value.image_price_rub]]),t("button",{type:"button",class:"ai-btn ai-btn--primary",disabled:c.value||!r.value.provider.trim()||!r.value.model.trim(),onClick:i[6]||(i[6]=e=>h(r.value))},[s(U(E),{size:16}),i[9]||(i[9]=g(" Сохранить "))],8,Y)])]),b.value&&!v.value.length?(u(),m("div",Z,[s(P,{size:20,inline:""})])):x.value.length?(u(),A(H,{key:3,"aria-label":"Тарифы AI-моделей",columns:I,data:x.value},{provider:o(({row:e})=>[l((u(),m("span",ie,[g(y(e.provider),1)])),[[V,e.provider]])]),model:o(({row:e})=>[l((u(),m("span",te,[g(y(e.model),1)])),[[V,e.model]])]),input_price:o(({row:e})=>[l(t("input",{"onUpdate:modelValue":p=>e.input_price_per_1k_rub=p,class:"ai-input ai-input--cell"},null,8,ae),[[n,e.input_price_per_1k_rub]])]),output_price:o(({row:e})=>[l(t("input",{"onUpdate:modelValue":p=>e.output_price_per_1k_rub=p,class:"ai-input ai-input--cell"},null,8,re),[[n,e.output_price_per_1k_rub]])]),image_price:o(({row:e})=>[l(t("input",{"onUpdate:modelValue":p=>e.image_price_rub=p,class:"ai-input ai-input--cell"},null,8,le),[[n,e.image_price_rub]])]),markup:o(({row:e})=>[t("span",oe,y(e.markup??"—"),1)]),source:o(({row:e})=>[s(j,{tone:e.source==="auto"?"neutral":"primary",label:e.source??"manual"},null,8,["tone","label"])]),is_active:o(({row:e})=>[s(R,{"model-value":e.is_active,size:"sm",disabled:c.value,"aria-label":"Активен","onUpdate:modelValue":p=>M(e)},null,8,["model-value","disabled","onUpdate:modelValue"])]),actions:o(({row:e})=>[s(T,{color:"primary",size:"sm","is-disabled":c.value,onClick:p=>h(e)},{icon:o(()=>[s(U(K),{size:14})]),text:o(()=>i[11]||(i[11]=[g("Save")])),_:2},1032,["is-disabled","onClick"])]),_:1},8,["data"])):(u(),m("div",ee,[s(G,{inline:"",title:"Нет тарифов"})]))])}}}),Ae=F(ne,[["__scopeId","data-v-f0c4ca82"]]);export{Ae as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.