1"use strict";(self.rspackChunknewapi_web=self.rspackChunknewapi_web||[]).push([[7699],{7138(e,t,r){r.d(t,{b:()=>i,n:()=>l});var s=r(53540),n=r(33351);function i(){return(0,s.I)({queryKey:["system-options"],queryFn:n.y,staleTime:3e5})}function l(e,t){if(!e)return t;let r={...t},s=[];return e.forEach(e=>{if(e.key in t){let n=function(e,t){if("boolean"==typeof t)return{success:!0,value:"true"===e||"1"===e};if("number"==typeof t){let r=e.trim();if(""===r)return{success:!1,error:"Empty string for number field",fallback:t};let s=Number(r);return Number.isNaN(s)?{success:!1,error:`Invalid number: "${e}"`,fallback:t}:{success:!0,value:s}}if(Array.isArray(t))try{let r=JSON.parse(e);if(!Array.isArray(r))return{success:!1,error:"Expected array but got non-array JSON",fallback:t};if(t.length>0){let e=typeof t[0],s=r.find(t=>typeof t!==e);if(void 0!==s)return{success:!1,error:`Array element type mismatch: expected ${e}, got ${typeof s}`,fallback:t}}return{success:!0,value:r}}catch(e){return{success:!1,error:`JSON parse failed: ${e instanceof Error?e.message:String(e)}`,fallback:t}}return{success:!0,value:e}}(e.value,t[e.key]);n.success?r[e.key]=n.value:(r[e.key]=n.fallback,s.push({key:e.key,error:n.error}))}}),s.length,r}},1998(e,t,r){r.r(t),r.d(t,{component:()=>j});var s=r(72361),n=r(68413),i=r(96962),l=r(6702),a=r(20598),o=r(35770),c=r(81204),u=r(46775),d=r(54023),y=r(18434),m=r(32999),f=r(67267),k=r(7138),b=r(21203);let p=[{key:"off_peak",zhLabel:"空é²"},{key:"peak",zhLabel:"é«å³°"}];function h(e,t){if(!e)return t;try{return JSON.parse(e)}catch{return t}}function x(e){let t=Number(e);return""!==e.trim()&&!Number.isNaN(t)&&t>0&&t<=1}function g(e){let t=Number(e);return""!==e.trim()&&!Number.isNaN(t)&&t>=0&&t<=1}let j=function(){let{t:e}=(0,l.Bd)(),t=(0,i.jE)(),{data:r,isLoading:j}=(0,k.b)(),N=(0,b.M)(),v=r?.data,$=v?.find(e=>"PricingGroups"===e.key)?.value,w=v?.find(e=>"UserTierDiscounts"===e.key)?.value,S=(0,n.useMemo)(()=>h($,[]),[$]),[A,O]=(0,n.useState)({}
1),[D,_]=(0,n.useState)({}),[C,P]=(0,n.useState)({}),[Q,T]=(0,n.useState)({}),[E,J]=(0,n.useState)(!1),[L,R]=(0,n.useState)("");(0,n.useEffect)(()=>{if(E||!$)return;let e={},t={},r={};for(let s of h($,[])){if(e[s.key]=null!=s.discount?String(s.discount):"",s.time_discounts&&Object.keys(s.time_discounts).length>0)for(let e of(t[s.key]={},p)){let r=s.time_discounts[e.key];t[s.key][e.key]=null!=r?String(r):""}if(s.model_discounts&&Object.keys(s.model_discounts).length>0)for(let[e,t]of(r[s.key]={},Object.entries(s.model_discounts)))r[s.key][e]=String(t)}let s={};for(let[e,t]of Object.entries(h(w,{})))for(let[r,n]of(s[e]={},Object.entries(t)))s[e][r]=String(n);O(e),P(t),T(r),_(s)},[$,w,E]);let z=(0,n.useMemo)(()=>{let e=[];for(let t of S){let r=t.category||"";r&&!e.includes(r)&&e.push(r)}return e},[S]);(0,n.useEffect)(()=>{!L&&z.length>0&&R(z[0])},[z,L]);let H=S.filter(e=>(e.category||"")===L),M=(e,t,r)=>{_(s=>({...s,[e]:{...s[e]||{},[t]:r}})),J(!0)},q=async()=>{for(let t of S){if(!g(A[t.key]??""))return void a.oR.error(`${t.label||t.key}: ${e("Discount must be between 0 and 1")}`);for(let r of o.DQ){let s=D[t.key]?.[r]??"";if(""!==s.trim()&&!x(s))return void a.oR.error(`${t.label||t.key} / ${(0,o.PN)(r,e)}: ${e("Discount must be between 0 and 1")}`);for(let s of p){let n=D[t.key]?.[`${r}_${s.key}`]??"";if(""!==n.trim()&&!x(n))return void a.oR.error(`${t.label||t.key} / ${(0,o.PN)(r,e)} ${s.zhLabel}: ${e("Discount must be between 0 and 1")}`)}}if(C[t.key]){for(let r of p)if(!g(C[t.key]?.[r.key]??""))return void a.oR.error(`${t.label||t.key} / ${r.zhLabel}: ${e("Discount must be between 0 and 1")}`)}for(let[r,s]of Object.entries(Q[t.key]||{})){if(""!==s.trim()&&!x(s))return void a.oR.error(`${t.label||t.key} / ${r}: ${e("Discount must be between 0 and 1")}`);for(let s of o.DQ){let n=D[t.key]?.[`${s}@${r}`]??"";if(""!==n.trim()&&!x(n))return void a.oR.error(`${t.label||t.key} / ${(0,o.PN)(s,e)} ${r}: ${e("Discount must be between 0 and 1")}`)}}}let r={};for(let[e,t]of Object.entries(D)){let s={};for(let[e,r]of Object.entries(t))""!==r.trim()&&(s[e]=Number(r));Object.keys(s).length>0&&(r[e]=s)}let s=S.map(e=>{let t={...e,discount:Number(A[e.key])};if(C[e.key]){let r={};for(let t of p)r[t.key]=Number(C[e.key][t.key]);t.time_discounts=r}if(Q[e.key]){let r={};for(let[t,s]of Object.entries(Q[e.key]))""!==s.trim()&&(r[t]=Number(s));Object.keys(r).length>0?t.model_discounts=r:delete t.model_discounts}return t});try{if(!(await N.mutateAsync({key:"UserTierDiscounts",value:JSON.stringify(r)})).success||!(await N.mutateAsync({key:"PricingGroups",value:JSON.stringify(s)})).success)return;J(!1),t.invalidateQueries({queryKey:["user-self-groups"]}),t.invalidateQueries({queryKey:["pricing"]})}catch{}};return(0,s.jsxs)(f.Ni,{children:[(0,s.jsx)(f.Ni.Title,{children:e("Tier Management")}),(0,s.jsx)(f.Ni.Description,{children:e("Configure per-tier discounts for each pricing group. T0 is the base discount.")}),(0,s.jsx)(f.Ni.Content,{children:(0,s.jsx)("div",{className:"flex flex-col gap-4",children:j?(0,s.jsx)(y.E,{className:"h-48 w-full"}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"flex gap-2 overflow-x-auto",children:z.map(e=>(0,s.jsx)("button",{type:"button",onClick:()=>R(e),className:(0,c.cn)("shrink-0 rounded-lg border px-3.5 py-2 text-sm font-medium transition-colors",e===L?"border-primary/40 bg-primary/5 text-primary":"border-border/70 text-foreground hover:bg-background-secondary"),children:e},e))}),(0,s.jsxs)(m.XI,{children:[(0,s.jsx)(m.A0,{children:(0,s.jsxs)(m.Hj,{children:[(0,s.jsx)(m.nd,{className:"min-w-[160px]",children:e("Pricing Group")}),(0,s.jsx)(m.nd,{children:(0,o.PN)("t0",e)}),o.DQ.map(t=>(0,s.jsx)(m.nd,{children:(0,o.PN)(t,e)},t))]})}),(0,s.jsx)(m.BF,{children:0===H.length?(0,s.jsx)(m.Hj,{children:(0,s.jsx)(m.nA,{colSpan:2+o.DQ.length,className:"text-muted-foreground py-8 text-center",children:e("No pricing groups")})}):H.map(t=>(0,s.jsxs)(n.Fragment,{children:[(0,s.jsxs)(m.Hj,{children:[(0,s.jsxs)(m.nA,{children:[(0,s.jsx)("div",{className:"text-sm font-medium",children:t.label||t.key}),(0,s.jsx)("div",{className:"text-muted-foreground text-xs",children:t.key})]}),(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",value:A[t.key]??"",onChange:e=>{var r,s;return r=t.key,s=e.target.value,void(O(e=>({...e,[r]:s})),J(!0))},disabled:!!C[t.key],title:C[t.key]?e("Time-tiered group: edit off-peak/peak rows below"):void 0})}),o.DQ.map(e=>(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",placeholder:A[t.key]??"",value:D[t.key]?.[e]??"",onChange:r=>M(t.key,e,r.target.value),disabled:!!C[t.key]})},e))]}),C[t.key]&&p.map(e=>(0,s.jsxs)(m.Hj,{className:"bg-muted/30",children:[(0,s.jsx)(m.nA,{className:"pl-8",children:(0,s.jsxs)("span",{className:"text-muted-foreground text-xs",children:[t.label||t.key," · ",e.zhLabel]})}),(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",value:C[t.key]?.[e.key]??"",onChange:r=>{var s,n,i;return s=t.key,n=e.key,i=r.target.value,void(P(e=>({...e,[s]:{...e[s]||{},[n]:i}})),J(!0))}})}),o.DQ.map(r=>(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",placeholder:C[t.key]?.[e.key]??"",value:D[t.key]?.[`${r}_${e.key}`]??"",onChange:s=>M(t.key,`${r}_${e.key}`,s.target.value)})},r))]},`${t.key}-${e.key}`)),Q[t.key]&&Object.keys(Q[t.key]).map(r=>(0,s.jsxs)(m.Hj,{className:"bg-muted/30",children:[(0,s.jsxs)(m.nA,{className:"pl-8",children:[(0,s.jsx)("span",{className:"text-muted-foreground font-mono text-xs",children:r}
1),(0,s.jsx)("div",{className:"text-muted-foreground/70 text-[11px]",children:e("Model-level discount")})]}),(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",value:Q[t.key]?.[r]??"",onChange:e=>{var s,n;return s=t.key,n=e.target.value,void(T(e=>({...e,[s]:{...e[s]||{},[r]:n}})),J(!0))}})}),o.DQ.map(e=>(0,s.jsx)(m.nA,{children:(0,s.jsx)(d.p,{type:"number",step:.01,min:0,max:1,className:"w-24",placeholder:Q[t.key]?.[r]??"",value:D[t.key]?.[`${e}@${r}`]??"",onChange:s=>M(t.key,`${e}@${r}`,s.target.value)})},e))]},`${t.key}-model-${r}`))]},t.key))})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsxs)("p",{className:"text-muted-foreground text-xs",children:[e("T0 is the group base discount; changing it changes the site-wide base price")," · ",e("Leave blank to fall back to the T0 base price")]}),(0,s.jsx)(u.$,{onClick:q,disabled:!E||N.isPending,children:e("Save")})]})]})})})]})}}}]);
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.