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
13 KiB
1 lines
13 KiB
import{g as W,j as X,c as i,a as t,k as a,p as U,F as Q,r as N,v as T,t as l,l as Z,D as tt,m as b,q as et,s as d,x as E,o as u}from"./CTAruH_8.js";import{u as st}from"./9B2ftqmN.js";import{u as ot}from"./lLLegusN.js";import"./D9HxoMhB.js";import"./yUUyh6cG.js";const nt={class:"space-y-6"},lt={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-4"},at={class:"flex items-end gap-3 flex-wrap"},rt={class:"form-control"},it=["value"],dt={class:"form-control"},ut=["disabled"],ct={class:"bg-white rounded-xl shadow-sm border border-slate-100"},mt={class:"overflow-x-auto"},bt={class:"table table-zebra"},pt={key:0},vt={key:1},ft={colspan:"9",class:"text-center text-slate-400 py-8"},xt={class:"font-mono text-base font-bold text-indigo-700"},gt={class:"text-sm"},wt={class:"text-sm"},yt={class:"text-sm text-slate-500"},ht={class:"text-sm"},kt={class:"text-sm"},_t={class:"text-sm"},Ct={key:0,class:"badge badge-success badge-sm text-white"},Vt={key:1,class:"badge badge-ghost badge-sm"},Mt={class:"flex gap-1"},Dt=["onClick"],Ft=["onClick"],Ut=["onClick"],Qt=["onClick"],Nt={class:"flex items-center gap-3 mb-5"},Tt={class:"text-lg font-semibold text-slate-800"},qt={class:"bg-white rounded-xl shadow-sm border border-slate-100 p-6 max-w-2xl"},Lt={class:"form-control mb-4"},St=["value"],Et={class:"form-control mb-4"},$t={class:"grid grid-cols-3 gap-3 mb-4"},jt={class:"form-control"},Rt={class:"form-control"},It={class:"form-control"},Bt={class:"grid grid-cols-2 gap-3 mb-4"},Pt={class:"form-control"},zt={class:"form-control"},At={class:"form-control mb-6"},Ht={class:"label cursor-pointer justify-start gap-3"},Yt={class:"modal-box max-w-md"},Gt={class:"flex flex-col items-center gap-4"},Jt={class:"text-center"},Kt={class:"font-mono text-2xl font-bold text-indigo-700 tracking-widest"},Ot="https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs/qrcode.min.js",oe=W({__name:"code",setup(Wt){const{webApi:c}=st(),{success:g,error:p,warn:w}=ot(),y=d("list"),C=d(!1),v=d(!1),m=d(0),V=d(-1),h=d([]),M=d([]),k=d([]),D=E({}),n=E({code:"",productid:0,remark:"",bindrewardvpitime:0,bindrewardtranslate:0,bindrewardmeeting:0,maxuses:0,expire:"",disabled:!1});function $(o){return o?new Date(o*1e3).toLocaleString():"永久"}function j(o){if(!o)return"";const e=new Date(o*1e3),s=r=>r<10?"0"+r:""+r;return e.getFullYear()+"-"+s(e.getMonth()+1)+"-"+s(e.getDate())+"T"+s(e.getHours())+":"+s(e.getMinutes())}function R(o){return o?Math.floor(new Date(o).getTime()/1e3):0}function I(o){return D[o.factoryid]||(o.factoryid?"厂家#"+o.factoryid:"-")}function B(o){const e=k.value.find(s=>s.id===o.productid);return e?e.devicename||"#"+o.productid:o.productid?"#"+o.productid:"-"}function _(){y.value="list",f()}function P(){_()}async function f(){C.value=!0;try{const o=await c("getfactorypubliccodes",{factoryid:m.value,status:V.value});h.value=o?.codes??[]}catch(o){p(o?.message??"获取公码列表失败"),h.value=[]}finally{C.value=!1}}function q(o){if(!m.value){w("请先选择厂家");return}o?(v.value=!0,n.code=o.code,n.productid=o.productid||0,n.remark=o.remark||"",n.bindrewardvpitime=o.bindrewardvpitime||0,n.bindrewardtranslate=o.bindrewardtranslate||0,n.bindrewardmeeting=o.bindrewardmeeting||0,n.maxuses=o.maxuses||0,n.expire=j(o.expiretime),n.disabled=o.status===1):(v.value=!1,n.code="",n.productid=0,n.remark="",n.bindrewardvpitime=0,n.bindrewardtranslate=0,n.bindrewardmeeting=0,n.maxuses=0,n.expire="",n.disabled=!1),y.value="form"}async function z(){const o={productid:Number(n.productid)||0,remark:n.remark,maxuses:Number(n.maxuses)||0,expiretime:R(n.expire),bindrewardvpitime:Number(n.bindrewardvpitime)||0,bindrewardtranslate:Number(n.bindrewardtranslate)||0,bindrewardmeeting:Number(n.bindrewardmeeting)||0};try{if(v.value)o.code=n.code,o.status=n.disabled?1:0,await c("updatefactorypubliccode",o),g("保存成功");else{o.factoryid=m.value;const e=await c("createfactorypubliccode",o);g("新公码已生成:"+(e?.code?.code||""))}_()}catch(e){p(e?.message??"保存失败")}}async function A(o){const e=o.status===0?1:0;try{await c("updatefactorypubliccode",{code:o.code,productid:o.productid||0,remark:o.remark||"",status:e,maxuses:o.maxuses||0,expiretime:o.expiretime||0,bindrewardvpitime:o.bindrewardvpitime||0,bindrewardtranslate:o.bindrewardtranslate||0,bindrewardmeeting:o.bindrewardmeeting||0}),g(e===1?"已停用":"已启用"),f()}catch(s){p(s?.message??"操作失败")}}function H(o){window.confirm(`确定删除公码 "${o}" 吗?删除后该码无法再被领取(已领取记录保留)`)&&c("delfactorypubliccode",{code:o}).then(()=>{g("删除成功"),f()}).catch(e=>p(e?.message??"删除失败"))}const L=d(null),F=d(null),x=d("");function Y(){return new Promise((o,e)=>{const s=window;if(s.QRCode){o(s.QRCode);return}const r=document.createElement("script");r.src=Ot,r.onload=()=>o(s.QRCode),r.onerror=()=>e(new Error("二维码库加载失败")),document.head.appendChild(r)})}async function G(o){x.value=o,L.value?.showModal();let e;try{e=await Y()}catch{p("二维码库加载失败");return}const s=F.value;!s||!e||(s.innerHTML="",new e(s,{text:o,width:240,height:240,colorDark:"#1E293B",colorLight:"#FFFFFF",correctLevel:e.CorrectLevel.H}))}function S(){const o=F.value;if(!o)return"";const e=o.querySelector("canvas");if(e)return e.toDataURL("image/png");const s=o.querySelector("img");return s?s.src:""}function J(){const o=S();if(!o){w("二维码尚未生成");return}const e=document.createElement("a");e.href=o,e.download="publiccode_"+x.value+".png",document.body.appendChild(e),e.click(),document.body.removeChild(e)}function K(){const o=S();if(!o){w("二维码尚未生成");return}const e=window.open("","_blank");if(!e){w("浏览器拦截了打印窗口");return}e.document.write("<html><head><title>"+x.value+'</title><style>body{font-family:sans-serif;text-align:center;padding:48px;}img{width:320px;height:320px;}h2{font-size:36px;letter-spacing:6px;margin:24px 0 8px;}p{color:#666;font-size:14px;}</style></head><body><img src="'+o+'" /><h2>'+x.value+"</h2><p>新用户扫码领取奖励</p><script>window.onload=function(){window.print();}<\/script></body></html>"),e.document.close()}async function O(){try{const e=(await c("getfactorys",{}))?.factorys??[];M.value=e,e.forEach(s=>{D[s.id]=s.factory||"厂家#"+s.id})}catch{M.value=[]}try{const o=await c("getproducts",{});k.value=o?.products??[]}catch{k.value=[]}f()}return X(O),(o,e)=>(u(),i("div",nt,[t("div",lt,[t("div",at,[t("div",rt,[e[12]||(e[12]=t("label",{class:"label py-1"},[t("span",{class:"label-text text-xs"},"厂家")],-1)),a(t("select",{"onUpdate:modelValue":e[0]||(e[0]=s=>m.value=s),class:"select select-bordered select-sm",style:{"min-width":"200px"},onChange:P},[e[11]||(e[11]=t("option",{value:0},"全部厂家",-1)),(u(!0),i(Q,null,N(M.value,s=>(u(),i("option",{key:s.id,value:s.id},l(D[s.id]),9,it))),128))],544),[[U,m.value,void 0,{number:!0}]])]),t("div",dt,[e[14]||(e[14]=t("label",{class:"label py-1"},[t("span",{class:"label-text text-xs"},"状态")],-1)),a(t("select",{"onUpdate:modelValue":e[1]||(e[1]=s=>V.value=s),class:"select select-bordered select-sm",onChange:f},[...e[13]||(e[13]=[t("option",{value:-1},"全部",-1),t("option",{value:0},"启用",-1),t("option",{value:1},"停用",-1)])],544),[[U,V.value,void 0,{number:!0}]])]),t("button",{class:"btn btn-primary btn-sm text-white",title:"新增公码需先选择具体厂家",disabled:m.value===0,onClick:e[2]||(e[2]=s=>q())},"+ 新增公码",8,ut)])]),a(t("div",null,[t("div",ct,[t("div",mt,[t("table",bt,[e[16]||(e[16]=t("thead",null,[t("tr",null,[t("th",null,"公码"),t("th",null,"厂家"),t("th",null,"关联产品"),t("th",null,"备注"),t("th",null,"VIP天/翻译分/会议分"),t("th",null,"核销/上限"),t("th",null,"失效时间"),t("th",null,"状态"),t("th",null,"操作")])],-1)),t("tbody",null,[C.value?(u(),i("tr",pt,[...e[15]||(e[15]=[t("td",{colspan:"9",class:"text-center text-slate-400 py-8"},"加载中…",-1)])])):h.value.length?Z("",!0):(u(),i("tr",vt,[t("td",ft,l(m.value?"暂无公码,点击右上角“新增公码”创建":"暂无公码"),1)])),(u(!0),i(Q,null,N(h.value,s=>(u(),i("tr",{key:s.code},[t("td",xt,l(s.code||""),1),t("td",gt,l(I(s)),1),t("td",wt,l(B(s)),1),t("td",yt,l(s.remark||"-"),1),t("td",ht,l(s.bindrewardvpitime||0)+" / "+l(s.bindrewardtranslate||0)+" / "+l(s.bindrewardmeeting||0),1),t("td",kt,l(s.useduses||0)+" / "+l(s.maxuses?s.maxuses:"∞"),1),t("td",_t,l($(s.expiretime)),1),t("td",null,[s.status===0?(u(),i("span",Ct,"启用")):(u(),i("span",Vt,"停用"))]),t("td",null,[t("div",Mt,[t("button",{class:"btn btn-ghost btn-xs text-indigo-600",onClick:r=>G(s.code)},"二维码",8,Dt),t("button",{class:"btn btn-ghost btn-xs",onClick:r=>q(s)},"编辑",8,Ft),t("button",{class:"btn btn-ghost btn-xs text-amber-600",onClick:r=>A(s)},l(s.status===0?"停用":"启用"),9,Ut),t("button",{class:"btn btn-ghost btn-xs text-red-500",onClick:r=>H(s.code)},"删除",8,Qt)])])]))),128))])])])])],512),[[T,y.value==="list"]]),a(t("div",null,[t("div",Nt,[t("button",{class:"btn btn-ghost btn-sm",onClick:_},"← 返回公码列表"),t("h2",Tt,l(v.value?`编辑公码 ${n.code}`:"新增公码"),1)]),t("div",qt,[t("form",{onSubmit:tt(z,["prevent"])},[t("div",Lt,[e[18]||(e[18]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"关联产品(选填,仅作分类)")],-1)),a(t("select",{"onUpdate:modelValue":e[3]||(e[3]=s=>n.productid=s),class:"select select-bordered w-full"},[e[17]||(e[17]=t("option",{value:0},"不关联",-1)),(u(!0),i(Q,null,N(k.value,s=>(u(),i("option",{key:s.id,value:s.id},l(s.devicename||"#"+s.id),9,St))),128))],512),[[U,n.productid,void 0,{number:!0}]])]),t("div",Et,[e[19]||(e[19]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"备注")],-1)),a(t("input",{"onUpdate:modelValue":e[4]||(e[4]=s=>n.remark=s),type:"text",class:"input input-bordered w-full",placeholder:"例如:包装海报-2026春季"},null,512),[[b,n.remark]])]),t("div",$t,[t("div",jt,[e[20]||(e[20]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"奖励VIP天数")],-1)),a(t("input",{"onUpdate:modelValue":e[5]||(e[5]=s=>n.bindrewardvpitime=s),type:"number",min:"0",class:"input input-bordered"},null,512),[[b,n.bindrewardvpitime,void 0,{number:!0}]])]),t("div",Rt,[e[21]||(e[21]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"奖励翻译分钟")],-1)),a(t("input",{"onUpdate:modelValue":e[6]||(e[6]=s=>n.bindrewardtranslate=s),type:"number",min:"0",class:"input input-bordered"},null,512),[[b,n.bindrewardtranslate,void 0,{number:!0}]])]),t("div",It,[e[22]||(e[22]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"奖励会议分钟")],-1)),a(t("input",{"onUpdate:modelValue":e[7]||(e[7]=s=>n.bindrewardmeeting=s),type:"number",min:"0",class:"input input-bordered"},null,512),[[b,n.bindrewardmeeting,void 0,{number:!0}]])])]),t("div",Bt,[t("div",Pt,[e[23]||(e[23]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"最大核销人数(0=不限)")],-1)),a(t("input",{"onUpdate:modelValue":e[8]||(e[8]=s=>n.maxuses=s),type:"number",min:"0",class:"input input-bordered"},null,512),[[b,n.maxuses,void 0,{number:!0}]])]),t("div",zt,[e[24]||(e[24]=t("label",{class:"label"},[t("span",{class:"label-text font-medium"},"失效时间(留空=永久)")],-1)),a(t("input",{"onUpdate:modelValue":e[9]||(e[9]=s=>n.expire=s),type:"datetime-local",class:"input input-bordered"},null,512),[[b,n.expire]])])]),a(t("div",At,[t("label",Ht,[a(t("input",{"onUpdate:modelValue":e[10]||(e[10]=s=>n.disabled=s),type:"checkbox",class:"checkbox"},null,512),[[et,n.disabled]]),e[25]||(e[25]=t("span",{class:"label-text font-medium"},"停用",-1))])],512),[[T,v.value]]),t("div",{class:"flex gap-3"},[t("button",{type:"button",class:"btn btn-ghost",onClick:_},"取消"),e[26]||(e[26]=t("button",{type:"submit",class:"btn btn-primary text-white"},"保存",-1))])],32)])],512),[[T,y.value==="form"]]),t("dialog",{ref_key:"qrModal",ref:L,class:"modal"},[t("div",Yt,[e[30]||(e[30]=t("h3",{class:"font-bold text-lg mb-4 text-slate-800"},"公码二维码",-1)),t("div",Gt,[t("div",{ref_key:"qrCanvas",ref:F,class:"p-3 bg-white border border-slate-200 rounded-lg"},null,512),t("div",Jt,[e[27]||(e[27]=t("div",{class:"text-xs text-slate-500 mb-1"},"公码",-1)),t("div",Kt,l(x.value),1)]),e[28]||(e[28]=t("div",{class:"text-xs text-slate-400 text-center"}," 新用户使用 App 扫描即可领取奖励,每人仅可领取 1 次 ",-1))]),t("div",{class:"modal-action"},[t("button",{type:"button",class:"btn btn-outline btn-sm",onClick:J},"下载图片"),t("button",{type:"button",class:"btn btn-outline btn-sm",onClick:K},"打印"),e[29]||(e[29]=t("form",{method:"dialog"},[t("button",{class:"btn btn-sm"},"关闭")],-1))])]),e[31]||(e[31]=t("form",{method:"dialog",class:"modal-backdrop"},[t("button",null,"close")],-1))],512)]))}});export{oe as default};
|
|
|