Files
zyt/server/public/admin/assets/PromotionAutomationForm-BXs5CP3m.js
T
2026-09-01 17:49:29 +08:00

2 lines
17 KiB
JavaScript

import{o as ke,R as ue,bx as ye,q as t,r as i,v as s,bh as we,s as m,b6 as Ve,D as u,bc as _e,bf as he,L as r,F as y,G as V,T as f,K as Ue,cz as Ce,u as T,O as _,bd as Ee,c5 as Te,P as c,bm as xe,bn as He,cv as J,I as Ie,cB as Be,by as Me,b7 as Se,b8 as $e,aw as Ne,p as U,M as w,n as Ae}from"./.pnpm-BSw4l71J.js";import{y as ze,z as Pe}from"./first_visit-D3BuRLUy.js";import{w as ne,t as Re,W as ie,p as De,v as Fe}from"./WelcomeMessageEditor-DU7sC9wU.js";import{_ as Ge}from"./index-B533BOtK.js";const Ke={class:"automation-form"},Le={key:0,class:"reception-schedules"},Oe={class:"schedule-heading"},We={class:"time-row"},Ye={key:0},je={key:0,class:"inline-error"},qe={key:0,class:"legacy-tags-warning full-width",role:"alert"},Je={key:1,class:"full-width tags-content"},Qe={class:"tag-select-row"},Xe={key:0,role:"alert",class:"inline-error"},Ze={key:1,class:"field-help"},el={key:2,class:"custom-tag-editor"},ll={class:"custom-tag-row"},al={key:0,role:"alert",class:"inline-error"},dl={key:3,role:"status",class:"tag-success"},tl={key:0,class:"full-width remark-content"},sl={class:"token-buttons"},ol={class:"remark-preview"},ul={class:"field-help"},nl={key:0,class:"field-help"},il={key:1,class:"field-help warning-help"},ml={key:2,class:"field-help warning-help"},rl={class:"welcome-block"},vl={key:0},bl={class:"schedule-heading"},cl={class:"time-row"},pl={key:0},fl=ke({__name:"PromotionAutomationForm",props:{modelValue:{},mainMemberIds:{},members:{},disabled:{type:Boolean}},emits:["update:modelValue","busy"],setup(o,{emit:me}){const x=o,O=me,a=U({get:()=>x.modelValue,set:d=>O("update:modelValue",d)}),Q=U(()=>x.members.filter(d=>x.mainMemberIds.includes(Number(d.id)))),re=U(()=>a.value.backup_member_admin_ids.filter(d=>!x.members.some(e=>Number(e.id)===d))),z=U(()=>{var d;return((d=Q.value[0])==null?void 0:d.name)||"小陈"}),X=U(()=>De(a.value.remark_template,z.value,20)),P=w(),W=w({start:0,end:0}),H=w([]),E=w(!1),B=w(""),Z=w(!1),g=w(!1),R=w(!1),M=w(""),I=w(""),S=w(""),ve=U(()=>a.value.tag_ids.length>1),D=U({get:()=>a.value.tag_ids.length===1?a.value.tag_ids[0]:"",set:d=>{a.value.tag_ids=d?[d]:[],S.value=""}}),be=U(()=>{const d=H.value.flatMap(e=>e.tag);return a.value.tag_ids.map(e=>{var v;return((v=d.find(b=>b.id===e))==null?void 0:v.name)||e}).join("、")}),F=w(new Set),$=U(()=>F.value.size>0);ue([g,$],([d,e])=>O("busy",d||e),{flush:"sync"});const ee=U(()=>{const d=new Set(H.value.flatMap(e=>e.tag.map(v=>v.id)));return a.value.tag_ids.filter(e=>!d.has(e))});ue(()=>a.value.tags_enabled,d=>{d&&!Z.value&&!E.value&&de()},{immediate:!0});function le(d){var e;return`${d.name} · ${((e=d.dept_names)==null?void 0:e.join(" / "))||d.userid||"未分部门"}`}function ce(){a.value.reception_schedule.push({weekdays:[1,2,3,4,5],start:"09:00",end:"18:00",member_admin_ids:[...x.mainMemberIds]})}function pe(){a.value.welcome_schedule.push({weekdays:[1,2,3,4,5],start:"09:00",end:"18:00",text:"",attachments:[]})}function fe(d){a.value.welcome_schedule.splice(d,1),F.value.clear()}function ae(d,e){e?F.value.add(d):F.value.delete(d)}async function de(){if(!(g.value||E.value)){E.value=!0,B.value="";try{const d=await ze();if(!Array.isArray(d==null?void 0:d.tag_groups))throw new Error("标签接口未返回有效的标签列表。");H.value=d.tag_groups.map(e=>({...e,tag:Array.isArray(e.tag)?e.tag:[]})),Z.value=!0}catch(d){B.value=d instanceof Error?d.message:typeof d=="string"?d:"企业微信标签加载失败。"}finally{E.value=!1}}}async function te(){var d;if(!(x.disabled||g.value||E.value)&&(I.value=Fe(M.value),S.value="",!I.value)){g.value=!0;try{const e=await Pe({name:M.value.trim()});if(!((d=e==null?void 0:e.tag)!=null&&d.id)||!e.tag.name||!e.group_id)throw new Error("企业微信未返回有效的标签 ID,请刷新标签后确认。");let v=H.value.find(C=>C.group_id===e.group_id);v||(v={group_id:e.group_id,group_name:e.group_name,tag:[]},H.value.push(v));const b=v.tag.findIndex(C=>C.id===e.tag.id);b>=0?v.tag[b]=e.tag:v.tag.push(e.tag),D.value=e.tag.id,S.value=`${e.reused?"已选用已有":"已创建并选用"}标签“${e.tag.name}”,保存方案后生效。`,M.value="",R.value=!1}catch(e){I.value=e instanceof Error?e.message:typeof e=="string"?e:"自定义标签创建失败,请刷新确认或重试。"}finally{g.value=!1}}}function G(){var e;const d=(e=P.value)==null?void 0:e.input;d&&(W.value={start:d.selectionStart||0,end:d.selectionEnd||0})}async function ge(d){var C,h,k,N;const{start:e,end:v}=W.value;a.value.remark_template=a.value.remark_template.slice(0,e)+d+a.value.remark_template.slice(v),await Ae();const b=e+d.length;(h=(C=P.value)==null?void 0:C.input)==null||h.focus(),(N=(k=P.value)==null?void 0:k.input)==null||N.setSelectionRange(b,b),W.value={start:b,end:b}}return ye(()=>O("busy",!1)),(d,e)=>{const v=we,b=he,C=_e,h=Ve,k=Ue,N=Ee,se=Ce,K=Te,A=He,Y=xe,L=Ie,oe=Be,j=Se;return t(),i("div",Ke,[s(v,{class:"automation-note",type:"info","show-icon":"",closable:!1,title:"自动化设置只作用于之后新添加的客户,不会写入企微获客链接详情中的“欢迎语/客户标签”配置。",description:"系统会在客户添加回调中立即发送渠道欢迎语并添加标签,后台任务负责失败重试及其他补偿。测试时请使用系统复制的、带渠道参数的链接。"}),e[40]||(e[40]=m("h3",{class:"form-section-title"},"接待设置",-1)),s(h,{label:"接待模式"},{default:u(()=>[s(C,{modelValue:a.value.reception_mode,"onUpdate:modelValue":e[0]||(e[0]=l=>a.value.reception_mode=l),disabled:o.disabled},{default:u(()=>[s(b,{value:"always"},{default:u(()=>[...e[16]||(e[16]=[r("全天接待",-1)])]),_:1}),s(b,{value:"scheduled"},{default:u(()=>[...e[17]||(e[17]=[r("按星期时段自动上下线",-1)])]),_:1})]),_:1},8,["modelValue","disabled"]),e[18]||(e[18]=m("p",{class:"field-help"},"成员仍受每日上限、有效期及启用状态限制;时间统一使用北京时间。",-1))]),_:1}),a.value.reception_mode==="scheduled"?(t(),i("div",Le,[(t(!0),i(y,null,V(a.value.reception_schedule,(l,p)=>(t(),i("div",{key:p,class:"schedule-card"},[m("div",Oe,[m("strong",null,"接待时段 "+f(p+1),1),s(k,{type:"danger",text:"",size:"small",disabled:o.disabled,onClick:n=>a.value.reception_schedule.splice(p,1)},{default:u(()=>[...e[19]||(e[19]=[r("删除时段",-1)])]),_:1},8,["disabled","onClick"])]),s(se,{modelValue:l.weekdays,"onUpdate:modelValue":n=>l.weekdays=n,class:"weekday-select",disabled:o.disabled},{default:u(()=>[(t(!0),i(y,null,V(T(ne),(n,q)=>(t(),_(N,{key:n,value:q+1},{default:u(()=>[r(f(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled"]),m("div",We,[s(K,{modelValue:l.start,"onUpdate:modelValue":n=>l.start=n,disabled:o.disabled,format:"HH:mm","value-format":"HH:mm",placeholder:"开始时间",clearable:!1},null,8,["modelValue","onUpdate:modelValue","disabled"]),e[20]||(e[20]=m("span",null,"至",-1)),s(K,{modelValue:l.end,"onUpdate:modelValue":n=>l.end=n,disabled:o.disabled,format:"HH:mm","value-format":"HH:mm",placeholder:"结束时间",clearable:!1},null,8,["modelValue","onUpdate:modelValue","disabled"]),l.end<l.start?(t(),i("small",Ye,"次日结束")):c("",!0)]),s(Y,{modelValue:l.member_admin_ids,"onUpdate:modelValue":n=>l.member_admin_ids=n,disabled:o.disabled,multiple:"",filterable:"",clearable:"",placeholder:"从上方主接待成员中选择",style:{width:"100%"}},{default:u(()=>[(t(!0),i(y,null,V(Q.value,n=>(t(),_(A,{key:n.id,value:Number(n.id),label:le(n)},null,8,["value","label"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled"]),l.member_admin_ids.some(n=>!o.mainMemberIds.includes(n))?(t(),i("p",je,"该时段含已从主接待移除的成员,请重新选择。")):c("",!0)]))),128)),s(k,{icon:T(J),disabled:o.disabled||a.value.reception_schedule.length>=30,onClick:ce},{default:u(()=>[...e[21]||(e[21]=[r("添加接待时段",-1)])]),_:1},8,["icon","disabled"]),e[22]||(e[22]=m("p",{class:"field-help"},"最多 30 个时段。跨午夜时段归属开始日,例如星期一 22:00 至 02:00 包含星期二凌晨;接待时段重叠时取成员并集。",-1))])):c("",!0),s(h,{label:"备用成员",required:a.value.reception_mode==="scheduled"},{default:u(()=>[s(Y,{modelValue:a.value.backup_member_admin_ids,"onUpdate:modelValue":e[1]||(e[1]=l=>a.value.backup_member_admin_ids=l),disabled:o.disabled,multiple:"",filterable:"",clearable:"","collapse-tags":"","collapse-tags-tooltip":"","max-collapse-tags":3,"multiple-limit":500,placeholder:"主接待成员均不可用时由备用成员接待",style:{width:"100%"}},{default:u(()=>[(t(!0),i(y,null,V(o.members,l=>(t(),_(A,{key:l.id,value:Number(l.id),label:le(l),disabled:o.mainMemberIds.includes(Number(l.id))},null,8,["value","label","disabled"]))),128)),(t(!0),i(y,null,V(re.value,l=>(t(),_(A,{key:`missing-${l}`,value:l,label:`成员 ${l}(当前不可选,请移除后重新选择)`,disabled:""},null,8,["value","label"]))),128))]),_:1},8,["modelValue","disabled"]),e[23]||(e[23]=m("p",{class:"field-help"},"备用成员不能与主接待重复。按时段模式至少配置一名备用成员;仅当无可用主接待时进入官方成员范围。",-1))]),_:1},8,["required"]),e[41]||(e[41]=m("h3",{class:"form-section-title"},"客户设置",-1)),s(h,{label:"自动添加客户标签"},{default:u(()=>[s(L,{modelValue:a.value.tags_enabled,"onUpdate:modelValue":e[2]||(e[2]=l=>a.value.tags_enabled=l),disabled:o.disabled||g.value},null,8,["modelValue","disabled"]),ve.value?(t(),i("div",qe,[m("p",null,"原方案设置了多个标签:"+f(be.value)+"。现在仅支持单选,请重新选择一个标签,或清空原标签。",1),s(k,{size:"small",disabled:o.disabled||g.value,onClick:e[3]||(e[3]=l=>D.value="")},{default:u(()=>[...e[24]||(e[24]=[r("清空原标签",-1)])]),_:1},8,["disabled"])])):c("",!0),a.value.tags_enabled?(t(),i("div",Je,[m("div",Qe,[s(Y,{modelValue:D.value,"onUpdate:modelValue":e[4]||(e[4]=l=>D.value=l),disabled:o.disabled||g.value,loading:E.value,filterable:"",clearable:"",placeholder:"选择一个企业微信客户标签","aria-label":"企业微信客户标签",class:"tag-select"},{default:u(()=>[(t(!0),i(y,null,V(H.value,l=>(t(),_(oe,{key:l.group_id,label:l.group_name},{default:u(()=>[(t(!0),i(y,null,V(l.tag,p=>(t(),_(A,{key:p.id,value:p.id,label:p.name},null,8,["value","label"]))),128))]),_:2},1032,["label"]))),128)),ee.value.length?(t(),_(oe,{key:0,label:"已选标签(名称暂不可用)"},{default:u(()=>[(t(!0),i(y,null,V(ee.value,l=>(t(),_(A,{key:l,value:l,label:`已选标签 · ${l}`},null,8,["value","label"]))),128))]),_:1})):c("",!0)]),_:1},8,["modelValue","disabled","loading"]),s(k,{icon:T(J),disabled:o.disabled||g.value,onClick:e[5]||(e[5]=l=>R.value=!R.value)},{default:u(()=>[...e[25]||(e[25]=[r("自定义标签",-1)])]),_:1},8,["icon","disabled"]),s(k,{icon:T(Me),disabled:o.disabled||g.value,loading:E.value,onClick:de},{default:u(()=>[r(f(B.value?"重试":"刷新标签"),1)]),_:1},8,["icon","disabled","loading"])]),B.value?(t(),i("p",Xe,f(B.value)+" 已保留原有标签,点击“重试”重新加载。",1)):(t(),i("p",Ze,"每个方案只选一个标签,可选择已有企业微信标签,也可自定义创建。客户添加成功后由系统调用企微接口打标,不会显示在企微获客链接详情的“客户标签”配置中。")),R.value?(t(),i("div",el,[e[27]||(e[27]=m("label",{for:"promotion-custom-tag-name"},"自定义标签名称",-1)),m("div",ll,[s(j,{id:"promotion-custom-tag-name",modelValue:M.value,"onUpdate:modelValue":e[6]||(e[6]=l=>M.value=l),disabled:o.disabled||g.value,maxlength:"30","show-word-limit":"",placeholder:"例如:官网咨询",onInput:e[7]||(e[7]=l=>I.value=""),onKeydown:$e(Ne(te,["prevent"]),["enter"])},null,8,["modelValue","disabled","onKeydown"]),s(k,{type:"primary",disabled:o.disabled||E.value,loading:g.value,onClick:te},{default:u(()=>[...e[26]||(e[26]=[r("创建并选用",-1)])]),_:1},8,["disabled","loading"])]),e[28]||(e[28]=m("p",{class:"field-help"},"创建到企业微信“推广渠道”分组,同组同名标签会复用。创建后即保存到企微标签库,取消方案编辑不会删除标签。",-1)),I.value?(t(),i("p",al,f(I.value)+" 原有选择未改变。",1)):c("",!0)])):c("",!0),S.value?(t(),i("p",dl,f(S.value),1)):c("",!0)])):c("",!0)]),_:1}),s(h,{label:"自动设置客户备注"},{default:u(()=>[s(L,{modelValue:a.value.remark_enabled,"onUpdate:modelValue":e[8]||(e[8]=l=>a.value.remark_enabled=l),disabled:o.disabled},null,8,["modelValue","disabled"]),a.value.remark_enabled?(t(),i("div",tl,[m("div",sl,[(t(!0),i(y,null,V(T(Re),l=>(t(),_(k,{key:l.value,size:"small",disabled:o.disabled,onClick:p=>ge(l.value)},{default:u(()=>[r("插入"+f(l.label),1)]),_:2},1032,["disabled","onClick"]))),128))]),s(j,{ref_key:"remarkInput",ref:P,modelValue:a.value.remark_template,"onUpdate:modelValue":e[9]||(e[9]=l=>a.value.remark_template=l),disabled:o.disabled,maxlength:"200","show-word-limit":"",placeholder:"例如:官网-{customer_name}",onSelect:G,onKeyup:G,onClick:G,onBlur:G},null,8,["modelValue","disabled"]),m("div",ol,[e[29]||(e[29]=m("span",null,"备注预览",-1)),m("strong",null,f(X.value||"—"),1),m("small",null,f(Array.from(X.value).length)+"/20 字",1)]),m("p",ul,"示例客户:张女士;员工:"+f(z.value)+"。添加时间格式为 YYYY-MM-DD,生成后的备注最多保留前 20 字。",1)])):c("",!0)]),_:1}),s(h,{label:"自动设置客户描述"},{default:u(()=>[s(L,{modelValue:a.value.description_enabled,"onUpdate:modelValue":e[10]||(e[10]=l=>a.value.description_enabled=l),disabled:o.disabled},null,8,["modelValue","disabled"]),a.value.description_enabled?(t(),_(j,{key:0,modelValue:a.value.description,"onUpdate:modelValue":e[11]||(e[11]=l=>a.value.description=l),class:"description-input",disabled:o.disabled,type:"textarea",rows:3,maxlength:"150","show-word-limit":"",placeholder:"请输入客户描述,最多 150 字"},null,8,["modelValue","disabled"])):c("",!0)]),_:1}),e[42]||(e[42]=m("h3",{class:"form-section-title"},"欢迎语设置",-1)),s(h,{label:"欢迎语模式"},{default:u(()=>[s(C,{modelValue:a.value.welcome_mode,"onUpdate:modelValue":e[12]||(e[12]=l=>a.value.welcome_mode=l),disabled:o.disabled||$.value},{default:u(()=>[s(b,{value:"channel"},{default:u(()=>[...e[30]||(e[30]=[r("渠道欢迎语",-1)])]),_:1}),s(b,{value:"default"},{default:u(()=>[...e[31]||(e[31]=[r("默认欢迎语",-1)])]),_:1}),s(b,{value:"none"},{default:u(()=>[...e[32]||(e[32]=[r("不发送欢迎语",-1)])]),_:1})]),_:1},8,["modelValue","disabled"]),a.value.welcome_mode==="default"?(t(),i("p",nl,"沿用企业微信后台配置,本系统不发送欢迎语。")):a.value.welcome_mode==="none"?(t(),i("p",il,"仅关闭本系统欢迎语,无法覆盖或关闭企业微信后台已配置的欢迎语。")):(t(),i("p",ml,"渠道欢迎语由客户添加回调即时发送,不会显示在企微获客链接详情中。同一接待成员若已配置企微原生欢迎语,企微可能不再下发欢迎码,请先关闭冲突配置。"))]),_:1}),a.value.welcome_mode==="channel"?(t(),i(y,{key:1},[m("div",rl,[e[33]||(e[33]=m("h4",null,"基础渠道欢迎语",-1)),e[34]||(e[34]=m("p",{class:"field-help"},"未开启分时欢迎语,或新客户添加时间未匹配任何时段时,使用以下内容。",-1)),s(ie,{modelValue:a.value.welcome,"onUpdate:modelValue":e[13]||(e[13]=l=>a.value.welcome=l),disabled:o.disabled,"employee-name":z.value,onBusy:e[14]||(e[14]=l=>ae("basic",l))},null,8,["modelValue","disabled","employee-name"])]),s(h,{class:"schedule-switch",label:"分时欢迎语"},{default:u(()=>[s(L,{modelValue:a.value.welcome_schedule_enabled,"onUpdate:modelValue":e[15]||(e[15]=l=>a.value.welcome_schedule_enabled=l),disabled:o.disabled||$.value},null,8,["modelValue","disabled"]),e[35]||(e[35]=m("span",{class:"switch-help"},"按客户添加时的北京时间匹配,时段不能重叠",-1))]),_:1}),a.value.welcome_schedule_enabled?(t(),i("div",vl,[(t(!0),i(y,null,V(a.value.welcome_schedule,(l,p)=>(t(),i("div",{key:p,class:"schedule-card welcome-schedule"},[m("div",bl,[m("strong",null,"欢迎语时段 "+f(p+1),1),s(k,{type:"danger",text:"",size:"small",disabled:o.disabled||$.value,onClick:n=>fe(p)},{default:u(()=>[...e[36]||(e[36]=[r("删除时段",-1)])]),_:1},8,["disabled","onClick"])]),s(se,{modelValue:l.weekdays,"onUpdate:modelValue":n=>l.weekdays=n,class:"weekday-select",disabled:o.disabled},{default:u(()=>[(t(!0),i(y,null,V(T(ne),(n,q)=>(t(),_(N,{key:n,value:q+1},{default:u(()=>[r(f(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","onUpdate:modelValue","disabled"]),m("div",cl,[s(K,{modelValue:l.start,"onUpdate:modelValue":n=>l.start=n,disabled:o.disabled,format:"HH:mm","value-format":"HH:mm",placeholder:"开始时间",clearable:!1},null,8,["modelValue","onUpdate:modelValue","disabled"]),e[37]||(e[37]=m("span",null,"至",-1)),s(K,{modelValue:l.end,"onUpdate:modelValue":n=>l.end=n,disabled:o.disabled,format:"HH:mm","value-format":"HH:mm",placeholder:"结束时间",clearable:!1},null,8,["modelValue","onUpdate:modelValue","disabled"]),l.end<l.start?(t(),i("small",pl,"次日结束")):c("",!0)]),s(ie,{"model-value":l,disabled:o.disabled,"employee-name":z.value,"onUpdate:modelValue":n=>Object.assign(l,n),onBusy:n=>ae(`slot-${p}`,n)},null,8,["model-value","disabled","employee-name","onUpdate:modelValue","onBusy"])]))),128)),s(k,{icon:T(J),disabled:o.disabled||$.value||a.value.welcome_schedule.length>=30,onClick:pe},{default:u(()=>[...e[38]||(e[38]=[r("添加欢迎语时段",-1)])]),_:1},8,["icon","disabled"]),e[39]||(e[39]=m("p",{class:"field-help"},"最多 30 个时段,支持跨午夜。时段外自动使用基础渠道欢迎语,不会随机选择内容。",-1))])):c("",!0)],64)):c("",!0)])}}}),Vl=Ge(fl,[["__scopeId","data-v-2eaa9464"]]);export{Vl as default};