You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
14 KiB
1 lines
14 KiB
import{_ as Y}from"./DiAHNWP8.js";import{g as Z,j as G,C as J,c as a,q as d,H as L,a as t,m as y,l as r,F as g,r as T,s as B,O as W,v as x,d as M,t as c,p as tt,x as et,b as st,A as lt,y as v,z as P,o,n as nt}from"./DMxDLVSv.js";import{u as at}from"./CCZrj3X-.js";import{u as ot}from"./B-sqZCu-.js";const rt={class:"flex items-center justify-between mb-5"},it={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-4 mb-4"},dt={class:"flex flex-wrap items-end gap-3"},ut={key:0,class:"form-control"},ct=["value"],mt={class:"form-control"},bt={class:"form-control"},pt={class:"bg-white rounded-xl shadow-sm border border-slate-100"},xt={class:"overflow-x-auto"},ft={class:"table table-zebra"},vt={key:0},kt={key:1},yt={class:"font-mono text-sm font-semibold"},gt={class:"font-medium"},wt={key:0,class:"badge badge-sm badge-primary badge-outline ml-1"},_t={class:"badge badge-ghost badge-sm"},Ct={class:"text-sm"},At={class:"text-sm text-slate-500"},Ut={key:0},$t={key:1,class:"text-xs text-slate-400"},Vt={key:2,class:"text-slate-300"},ht={key:0,class:"text-xs text-slate-400 mt-1"},St={class:"text-sm text-slate-500"},Nt={class:"flex flex-wrap gap-1"},Dt=["onClick"],Tt=["onClick"],Bt=["onClick"],Mt=["onClick"],Ft=["onClick"],Lt={class:"text-xs text-slate-400 mt-3"},Pt={class:"flex items-center gap-3 mb-5"},Rt={class:"text-lg font-semibold text-slate-800"},Et={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl"},qt={key:0,class:"form-control mb-4"},zt=["value"],It={class:"form-control mb-4"},Kt={key:1,class:"form-control mb-4"},jt=["disabled"],Ht=["value"],Ot={key:0,class:"label-text-alt text-slate-400 mt-1"},Qt={class:"form-control mb-4"},Xt=["disabled"],Yt={class:"form-control mb-4"},Zt={class:"form-control mb-4"},Gt={class:"form-control mb-6"},Jt={key:2,class:"form-control mb-6 border-t border-slate-100 pt-4"},Wt={class:"flex items-center gap-2 cursor-pointer"},te={key:0,class:"grid grid-cols-2 gap-3 mt-3"},ee={class:"col-span-2"},se={key:0,class:"col-span-2 text-xs text-amber-600"},le={class:"flex gap-3"},ne=["disabled"],ae={key:3,class:"text-xs text-amber-600 mt-3"},ce=Z({__name:"dealers",setup(oe){const{webApi:w}=at(),{success:A,error:_}=ot(),f=G(),C=lt(()=>f.isAdmin),V=v(null),U=v("list"),$=v([]),k=v([]),h=v(!1),S=v(!1),m=v(!1),u=P({brandid:0,status:-1,keyword:""}),l=P({id:"",name:"",brandid:0,sharepct:0,contact:"",contactmails:"",remark:"",createAccount:!1,accountUsername:"",accountPassword:"",accountRemark:""}),R={0:"待审核",1:"启用",2:"停用",3:"驳回"},E={0:"badge-warning",1:"badge-success",2:"badge-ghost",3:"badge-error"};function q(n){return R[n]??String(n)}function z(n){return E[n]??"badge-ghost"}function I(n){return((Number(n)||0)/100).toFixed(2)+"%"}function K(n){const e=k.value.find(i=>i.id===n);return e?e.brand:n?"品牌商#"+Number(n).toString(16).toUpperCase():"-"}function j(n){if(!n)return"-";const e=new Date(n*1e3),i=s=>("0"+s).slice(-2);return`${e.getFullYear()}-${i(e.getMonth()+1)}-${i(e.getDate())} ${i(e.getHours())}:${i(e.getMinutes())}`}async function H(){try{const n=await w("getbrands",{});k.value=n?.brands??[]}catch{k.value=[]}}async function b(){h.value=!0;try{k.value.length||await H();const n=await w("getchannels",{brandid:Number(u.brandid)||0,status:Number(u.status),keyword:u.keyword.trim()});$.value=n?.channels??[]}catch(n){_(n?.message??"获取渠道商列表失败"),$.value=[]}finally{h.value=!1}}function O(){u.brandid=0,u.status=-1,u.keyword="",b()}function N(){U.value="list",b()}function F(n){n?(m.value=!0,l.id=n.id,l.name=n.name||"",l.brandid=n.brandid||0,l.sharepct=(Number(n.sharerate)||0)/100,l.contact=n.contact||"",l.contactmails=n.contactmails||"",l.remark=n.remark||""):(m.value=!1,l.id="",l.name="",l.brandid=Number(u.brandid)||0,l.sharepct=0,l.contact="",l.contactmails="",l.remark=""),l.createAccount=!1,l.accountUsername="",l.accountPassword="",l.accountRemark="",U.value="form"}async function Q(){if(!l.brandid&&!f.isBrandAccount){_("请选择所属品牌商");return}S.value=!0;try{const n={name:l.name.trim(),brandid:Number(l.brandid)||0,sharerate:Math.round((Number(l.sharepct)||0)*100),contact:l.contact,contactmails:l.contactmails,remark:l.remark};m.value&&(n.id=l.id);const e={channel:n};!m.value&&l.createAccount&&(e.create_account=!0,e.account_username=l.accountUsername.trim(),e.account_password=l.accountPassword,e.account_remark=l.accountRemark.trim());const i=await w(m.value?"updatechannel":"addchannel",e);m.value?A("保存成功"):(A(C.value?"新增成功":"已提交,等待审核"),i?.account&&(V.value={title:`渠道账号「${i.account}」已创建`,username:i.account,password:i.account_password??"",mailTo:i.mail_to??"",mailError:i.mail_error??""})),N()}catch(n){_(n?.message??"保存失败")}finally{S.value=!1}}async function D(n,e){const i={1:n.status===0?"通过":"启用",2:"停用",3:"驳回"};let s="";if(e===3){const p=window.prompt(`驳回渠道商 "${n.name}" 的原因:`,"");if(p===null)return;s=p}else if(!window.confirm(`确定${i[e]}渠道商 "${n.name}" 吗?`))return;try{await w("auditchannel",{id:n.id,status:e,auditremark:s}),A(i[e]+"成功"),b()}catch(p){_(p?.message??"操作失败")}}function X(n){window.confirm(`确定删除渠道商 "${n.name}" 吗?已有生产批次的渠道商不能删除。`)&&w("delchannel",{id:n.id}).then(()=>{A("删除成功"),b()}).catch(e=>_(e?.message??"删除失败"))}return J(b),(n,e)=>{const i=Y;return o(),a("div",null,[d(t("div",null,[t("div",rt,[e[17]||(e[17]=t("h2",{class:"text-lg font-semibold text-slate-800"},"渠道商列表",-1)),y(f).isDealer?r("",!0):(o(),a("button",{key:0,class:"btn btn-primary btn-sm text-white",onClick:e[0]||(e[0]=s=>F())},"+ 新增渠道商"))]),t("div",it,[t("div",dt,[!y(f).isBrandAccount&&!y(f).isDealer?(o(),a("div",ut,[e[19]||(e[19]=t("label",{class:"label py-1"},[t("span",{class:"label-text text-xs text-slate-500"},"品牌商")],-1)),d(t("select",{"onUpdate:modelValue":e[1]||(e[1]=s=>u.brandid=s),class:"select select-bordered select-sm w-48",onChange:b},[e[18]||(e[18]=t("option",{value:0},"全部品牌商",-1)),(o(!0),a(g,null,T(k.value,s=>(o(),a("option",{key:s.id,value:s.id},c(s.brand),9,ct))),128))],544),[[B,u.brandid,void 0,{number:!0}]])])):r("",!0),t("div",mt,[e[21]||(e[21]=t("label",{class:"label py-1"},[t("span",{class:"label-text text-xs text-slate-500"},"状态")],-1)),d(t("select",{"onUpdate:modelValue":e[2]||(e[2]=s=>u.status=s),class:"select select-bordered select-sm w-36",onChange:b},[...e[20]||(e[20]=[t("option",{value:-1},"全部状态",-1),t("option",{value:0},"待审核",-1),t("option",{value:1},"启用",-1),t("option",{value:2},"停用",-1),t("option",{value:3},"驳回",-1)])],544),[[B,u.status,void 0,{number:!0}]])]),t("div",bt,[e[22]||(e[22]=t("label",{class:"label py-1"},[t("span",{class:"label-text text-xs text-slate-500"},"搜索")],-1)),d(t("input",{"onUpdate:modelValue":e[3]||(e[3]=s=>u.keyword=s),type:"text",class:"input input-bordered input-sm w-52",placeholder:"名称 / 渠道商ID",onKeydown:W(b,["enter"])},null,544),[[x,u.keyword]])]),t("button",{class:"btn btn-sm btn-primary text-white",onClick:b},"查询"),t("button",{class:"btn btn-sm btn-ghost",onClick:O},"重置")])]),t("div",pt,[t("div",xt,[t("table",ft,[e[25]||(e[25]=t("thead",null,[t("tr",null,[t("th",null,"渠道商ID"),t("th",null,"名称"),t("th",null,"所属品牌商"),t("th",null,"分成比例"),t("th",null,"联系方式"),t("th",null,"状态"),t("th",null,"创建时间"),t("th",null,"操作")])],-1)),t("tbody",null,[h.value?(o(),a("tr",vt,[...e[23]||(e[23]=[t("td",{colspan:"8",class:"text-center py-8"},[t("span",{class:"loading loading-spinner loading-sm"})],-1)])])):$.value.length?r("",!0):(o(),a("tr",kt,[...e[24]||(e[24]=[t("td",{colspan:"8",class:"text-center text-slate-400 py-8"},"暂无数据",-1)])])),(o(!0),a(g,null,T($.value,s=>(o(),a("tr",{key:s.id},[t("td",yt,c(s.id),1),t("td",gt,[M(c(s.name)+" ",1),s.official?(o(),a("span",wt,"官方")):r("",!0)]),t("td",null,[t("span",_t,c(K(s.brandid)),1)]),t("td",Ct,c(I(s.sharerate)),1),t("td",At,[s.contact?(o(),a("div",Ut,c(s.contact),1)):r("",!0),s.contactmails?(o(),a("div",$t,c(s.contactmails),1)):r("",!0),!s.contact&&!s.contactmails?(o(),a("span",Vt,"-")):r("",!0)]),t("td",null,[t("span",{class:nt(["badge badge-sm",z(s.status)])},c(q(s.status)),3),s.status===3&&s.auditremark?(o(),a("div",ht,c(s.auditremark),1)):r("",!0)]),t("td",St,c(j(s.createtime)),1),t("td",null,[t("div",Nt,[t("button",{class:"btn btn-ghost btn-xs",onClick:p=>F(s)},"编辑",8,Dt),C.value?(o(),a(g,{key:0},[s.status!==1?(o(),a("button",{key:0,class:"btn btn-ghost btn-xs text-emerald-600",onClick:p=>D(s,1)},c(s.status===0?"通过":"启用"),9,Tt)):r("",!0),s.status===1?(o(),a("button",{key:1,class:"btn btn-ghost btn-xs text-amber-600",onClick:p=>D(s,2)},"停用",8,Bt)):r("",!0),s.status===0?(o(),a("button",{key:2,class:"btn btn-ghost btn-xs text-red-500",onClick:p=>D(s,3)},"驳回",8,Mt)):r("",!0)],64)):r("",!0),!y(f).isDealer&&!s.official?(o(),a("button",{key:1,class:"btn btn-ghost btn-xs text-red-500",onClick:p=>X(s)},"删除",8,Ft)):r("",!0)])])]))),128))])])])]),t("p",Lt,[y(f).isBrandAccount?(o(),a(g,{key:0},[M(" 这里只显示贵品牌商名下的渠道商。新增后为「待审核」,需平台审核通过(状态=启用)才能用于生产授权码;分成比例由平台设置。 ")],64)):(o(),a(g,{key:1},[M(" 渠道商新增后需超管/管理员审核通过(状态=启用)才能用于生产授权码;已有生产批次的渠道商不能删除,只能停用。 标「官方」的是品牌自营渠道,随品牌商自动创建、直接启用、不可删除。 ")],64))])],512),[[L,U.value==="list"]]),d(t("div",null,[t("div",Pt,[t("button",{class:"btn btn-ghost btn-sm",onClick:e[4]||(e[4]=s=>N())},"← 返回列表"),t("h2",Rt,c(m.value?"编辑渠道商":"新增渠道商"),1)]),t("div",Et,[t("form",{onSubmit:tt(Q,["prevent"])},[m.value?(o(),a("div",qt,[e[26]||(e[26]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"渠道商ID")],-1)),t("input",{value:l.id,type:"text",class:"input input-bordered w-full font-mono",disabled:""},null,8,zt),e[27]||(e[27]=t("span",{class:"label-text-alt text-slate-400 mt-1"},"短码由系统生成,创建后不可修改",-1))])):r("",!0),t("div",It,[e[28]||(e[28]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"渠道商名称 *")],-1)),d(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>l.name=s),type:"text",class:"input input-bordered w-full",required:""},null,512),[[x,l.name]])]),y(f).isBrandAccount?r("",!0):(o(),a("div",Kt,[e[30]||(e[30]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"所属品牌商 *")],-1)),d(t("select",{"onUpdate:modelValue":e[6]||(e[6]=s=>l.brandid=s),class:"select select-bordered w-full",disabled:m.value,required:""},[e[29]||(e[29]=t("option",{value:0},"请选择品牌商",-1)),(o(!0),a(g,null,T(k.value,s=>(o(),a("option",{key:s.id,value:s.id},c(s.brand),9,Ht))),128))],8,jt),[[B,l.brandid,void 0,{number:!0}]]),m.value?(o(),a("span",Ot,"归属品牌商创建后不可修改")):r("",!0)])),t("div",Qt,[e[31]||(e[31]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"分成比例(%)")],-1)),d(t("input",{"onUpdate:modelValue":e[7]||(e[7]=s=>l.sharepct=s),type:"number",step:"0.01",min:"0",max:"100",class:"input input-bordered w-full",disabled:!C.value},null,8,Xt),[[x,l.sharepct,void 0,{number:!0}]]),e[32]||(e[32]=t("span",{class:"label-text-alt text-slate-400 mt-1"}," 从所属品牌商的分成里再切;仅超管/管理员可设置。 ",-1))]),t("div",Yt,[e[33]||(e[33]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"联系人 / 电话")],-1)),d(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>l.contact=s),type:"text",class:"input input-bordered w-full"},null,512),[[x,l.contact]])]),t("div",Zt,[e[34]||(e[34]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"联系邮箱")],-1)),d(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>l.contactmails=s),type:"text",class:"input input-bordered w-full",placeholder:"多个邮箱用逗号分隔"},null,512),[[x,l.contactmails]])]),t("div",Gt,[e[35]||(e[35]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"备注")],-1)),d(t("textarea",{"onUpdate:modelValue":e[10]||(e[10]=s=>l.remark=s),class:"textarea textarea-bordered w-full",rows:"3"},null,512),[[x,l.remark]])]),!m.value&&C.value?(o(),a("div",Jt,[t("label",Wt,[d(t("input",{"onUpdate:modelValue":e[11]||(e[11]=s=>l.createAccount=s),type:"checkbox",class:"checkbox checkbox-sm checkbox-primary"},null,512),[[et,l.createAccount]]),e[36]||(e[36]=t("span",{class:"label-text font-medium"},"同时创建渠道账号",-1))]),e[40]||(e[40]=t("span",{class:"label-text-alt text-slate-400 mt-1"}," 建一个绑定本渠道商的「渠道商」角色登录账号,只能看到自己渠道的数据与结算单。 用户名/密码留空则自动生成,创建后凭据会邮件发给上面填的联系邮箱。 ",-1)),l.createAccount?(o(),a("div",te,[t("div",null,[e[37]||(e[37]=t("label",{class:"text-xs text-slate-500"},"登录用户名",-1)),d(t("input",{"onUpdate:modelValue":e[12]||(e[12]=s=>l.accountUsername=s),type:"text",class:"input input-bordered input-sm w-full",placeholder:"留空自动生成,如 Channel-K7QM3ZTX",autocomplete:"off"},null,512),[[x,l.accountUsername]])]),t("div",null,[e[38]||(e[38]=t("label",{class:"text-xs text-slate-500"},"登录密码",-1)),d(t("input",{"onUpdate:modelValue":e[13]||(e[13]=s=>l.accountPassword=s),type:"text",class:"input input-bordered input-sm w-full font-mono",placeholder:"留空自动生成 12 位随机密码",autocomplete:"off"},null,512),[[x,l.accountPassword]])]),t("div",ee,[e[39]||(e[39]=t("label",{class:"text-xs text-slate-500"},"备注",-1)),d(t("input",{"onUpdate:modelValue":e[14]||(e[14]=s=>l.accountRemark=s),type:"text",class:"input input-bordered input-sm w-full",placeholder:"可选"},null,512),[[x,l.accountRemark]])]),l.contactmails.trim()?r("",!0):(o(),a("p",se," 没填联系邮箱,凭据将无法邮件送达,只会在创建后弹窗显示一次。 "))])):r("",!0)])):r("",!0),t("div",le,[t("button",{type:"button",class:"btn btn-ghost",onClick:e[15]||(e[15]=s=>N())},"取消"),t("button",{type:"submit",class:"btn btn-primary text-white",disabled:S.value},"保存",8,ne)]),!m.value&&!C.value?(o(),a("p",ae," 提交后为「待审核」状态,须超管/管理员通过后才能用于生产。 ")):r("",!0)],32)])],512),[[L,U.value==="form"]]),st(i,{info:V.value,onClose:e[16]||(e[16]=s=>V.value=null)},null,8,["info"])])}}});export{ce as default};
|
|
|