2 lines
68 KiB
JavaScript
2 lines
68 KiB
JavaScript
import{o as Ot,R as at,E as C,ap as Sa,ac as At,bi as Va,q as m,r as y,s,v as i,D as o,u as N,cY as xa,w as Aa,cP as Pa,L as v,T as r,P as x,by as je,K as Ia,cO as Ma,d3 as Da,bI as Ea,d4 as Ta,ae as B,d5 as Pt,d6 as It,d7 as Ua,d2 as lt,bu as Mt,cm as st,cw as Dt,F as se,G as ne,O as I,bd as Ba,aw as ja,cE as Oa,at as Et,d8 as La,bh as za,bk as Fa,br as Ra,I as qa,bB as Ka,bj as Ja,as as Ha,b6 as Ya,bm as Wa,bn as Ga,bA as Za,b9 as Qa,bs as Xa,a4 as el,d9 as tl,bq as al,b7 as ll,bK as sl,bt as nl,bc as il,bb as ol,J as dl,bp as ul,ba as Z,M as A,p as M,e as rl}from"./.pnpm-BHOjf1ZS.js";import{C as ml,D as cl,E as _l,F as fl,G as pl,H as bl,I as vl,J as gl,K as yl,L as kl,M as hl}from"./first_visit-ClR5pGNH.js";import wl from"./WecomFloatingWidgetBuilder-Bax2iNSs.js";import Tt from"./PromotionAutomationForm-ByBNVLrX.js";import{d as Oe,c as Le,i as Ut,a as Bt,s as jt}from"./WelcomeMessageEditor-BfxFV3dB.js";import{_ as Nl}from"./index-B31vLELt.js";const $l={class:"promotion-page","element-loading-text":"正在加载推广配置"},Cl={class:"page-header"},Sl={class:"heading-copy"},Vl={class:"heading-icon"},xl={class:"heading-actions"},Al={class:"scope-chip"},Pl={key:0,class:"update-time"},Il={class:"metric-grid"},Ml={class:"metric-card"},Dl={class:"metric-icon is-teal"},El={class:"metric-card"},Tl={class:"metric-icon is-blue"},Ul={class:"metric-card"},Bl={class:"metric-icon is-green"},jl={class:"metric-card"},Ol={class:"metric-icon is-orange"},Ll={class:"workspace-card"},zl={class:"tab-nav","aria-label":"企业微信获客助手功能"},Fl={key:0,class:"tab-content links-tab"},Rl={class:"section-heading"},ql={class:"section-heading-actions"},Kl={key:0,class:"selection-count"},Jl={key:0,class:"member-sync-results","aria-live":"polite"},Hl={key:0,role:"status"},Yl={key:1,class:"pool-layout"},Wl={class:"pool-sidebar"},Gl={class:"pool-select-all"},Zl=["onClick"],Ql={class:"pool-main"},Xl={key:0,class:"pool-toolbar"},es={class:"pool-title-row"},ts={class:"owner-tag"},as={class:"toolbar-actions"},ls={class:"member-table-area"},ss={class:"member-cell"},ns={key:0,class:"sync-retry-tip"},is={key:1,class:"tab-content customer-stats-tab"},os={class:"section-heading customer-stats-heading"},ds={class:"customer-heading-actions"},us={key:0,class:"update-time"},rs={class:"customer-metric-grid","aria-label":"获客客户消息汇总"},ms={class:"customer-metric-card"},cs={class:"metric-icon is-teal"},_s={class:"customer-metric-card"},fs={class:"metric-icon is-blue"},ps={class:"customer-metric-card"},bs={class:"metric-icon is-green"},vs={class:"customer-metric-card"},gs={class:"metric-icon is-orange"},ys={class:"customer-filter-bar"},ks=["title"],hs={class:"member-cell"},ws={class:"member-cell"},Ns={class:"customer-pagination"},$s={key:2,class:"tab-content authorization-tab"},Cs={class:"configuration-state"},Ss={key:0},Vs={key:1},xs={key:0,class:"missing-fields"},As={class:"callback-list"},Ps={class:"configuration-actions"},Is={key:3,class:"tab-content install-tab"},Ms={class:"section-heading"},Ds={class:"member-tree-option__label"},Es={key:0,class:"member-tree-option__count"},Ts={key:1,class:"member-tree-option__detail"},Us={class:"form-tip"},Bs={key:0,class:"uploading-save-tip"},js={key:1,class:"batch-pool-summary"},Os={key:0},Ls={class:"batch-config-section"},zs={class:"batch-field-grid"},Fs={class:"batch-config-section"},Rs={class:"batch-member-status-grid"},qs={class:"member-tree-option__label"},Ks={key:0,class:"member-tree-option__count"},Js={key:1,class:"member-tree-option__detail"},Hs={class:"form-tip"},Ys={key:0,class:"batch-config-section automation-batch-section"},Ws={class:"batch-section-selectors"},Gs={key:0,class:"uploading-save-tip",role:"status"},Zs={key:1,class:"uploading-save-tip"},Qs={key:0,class:"access-pool-preview"},Xs={key:0},en=Ot({name:"firstVisitWecomPromotionPage"}),tn=Ot({...en,setup(an){const nt=()=>({meta:{admin_id:0,scope_label:"",generated_at:""},config:{mode:"internal",configured:!1,ready:!1,missing:[],corp_id_masked:"",agent_id:"",secret_configured:!1,callback_ready:!1,callback_url:"",official_doc:""},summary:{configured_apps:0,pool_count:0,online_links:0,today_clicks:0},pools:[],links:[],member_options:[],operator_options:[],department_options:[],automation_installed:!1,customer_acquisition_link_example:"https://work.weixin.qq.com/ca/xxxxxxxx"}),c=Z(nt()),Ae=A(!1),K=A("links"),re=A(),ve=A(),L=A([]),he=A(!1),q=A(!1),Pe=A(!1),we=A(!1),G=A(!1),Q=A(0),ge=A(0),Ne=A(!1),ie=A(!1),$e=A(!1),T=A(!1),Ce=A(0),Se=A(!1),P=M(()=>Se.value||Ce.value>0||T.value),X=Z({completed:0,total:0}),W=A([]),oe=A(!1),it=A(),Ve=A(""),S=Z({id:0,name:"",fallback_url:"",status:1,member_admin_ids:[],skip_verify:0,main_url:"",automation_config:Oe()}),ze=A(),me=A(""),de=A(!1),j=Z({pool_ids:[],operator_admin_ids:[],action:"grant"}),_=Z({skip_verify:!1,fallback_url:!1,status:!1,member_status:!1,reception:!1,customer:!1,welcome:!1}),h=Z({pool_ids:[],skip_verify:0,fallback_url:"",status:1,member_admin_ids:[],member_status:1,automation_config:Oe()}),z=Z({id:0,name:"",userid:"",daily_limit:0,status:1,active_range:[],remark:""}),xe=A(!1),ot=A(!1),Fe=A(!1),F=Z({link_id:"",userid:"",chat_status:""}),J=Z({page_no:1,page_size:20,total:0}),U=Z({summary:{customer_count:0,messaged_customer_count:0,message_customer_rate:0,received_message_count:0,message_count_known_count:0},rows:[],link_options:[],member_options:[],meta:{last_synced_at:""}}),w=M(()=>c.pools.find(t=>Number(t.id)===re.value)),Re=M(()=>{var t;return Array.isArray((t=w.value)==null?void 0:t.member_rules)?w.value.member_rules:[]}),qe=M(()=>{var O,k,b,V;const t=w.value,e=(t==null?void 0:t.dispatch_sync)||{},a=Array.isArray((O=t==null?void 0:t.official_link)==null?void 0:O.range_userids)?t.official_link.range_userids.map(String):[],n=Re.value.filter($=>De($).className==="is-ok").map($=>String($.userid)),u=new Map(Re.value.map($=>[String($.userid),String($.name||$.userid)])),d=a.map($=>u.get($)||$).join("、")||"暂无确认记录",f=n.map($=>u.get($)||$).join("、")||"暂无可用成员",p=(k=t==null?void 0:t.official_link)==null?void 0:k.last_sync_time,g=`当前计划:${f};上次企微确认:${d}${p?`(${Ee(p)})`:""}。`,E=String(e.last_error||((b=t==null?void 0:t.official_link)==null?void 0:b.sync_error)||"");if(Number(e.status)===3||E)return{type:"warning",title:"企微成员范围尚未同步成功",description:`${g}${E||"同步失败,请点击“同步成员范围”重试。"}`};if(Number(e.status)===4)return{type:"warning",title:"企微成员范围同步受阻",description:`${g}请检查可用成员后重试同步。`};if([1,2].includes(Number(e.status)))return{type:"warning",title:"本地规则已保存,企微成员范围同步待完成",description:`${g}可点击“同步成员范围”立即重试。`};const Y=(((V=t==null?void 0:t.official_link)==null?void 0:V.range_department_ids)||[]).length>0;return a.length>0&&new Set(a).size===new Set(n).size&&n.every($=>a.includes($))&&!Y?{type:"info",title:"上次确认的企微成员范围与当前计划一致",description:g}:{type:"warning",title:"当前计划与上次企微范围不一致",description:`${g}${Y?"企微范围仍包含部门。":""}请点击“同步成员范围”更新并确认。`}}),Ke=M(()=>c.pools.find(t=>Number(t.id)===ve.value)),Ie=M(()=>c.pools.filter(t=>j.pool_ids.includes(Number(t.id)))),Lt=M(()=>c.pools.filter(t=>t.can_manage_access).map(t=>Number(t.id))),ue=M(()=>c.pools.filter(t=>t.can_manage_access||t.can_operate).map(t=>Number(t.id))),dt=M(()=>{const t=new Set(L.value);return Lt.value.filter(e=>t.has(e)).length}),Je=M(()=>ue.value.filter(t=>L.value.includes(t)).length),zt=M(()=>ue.value.length>0&&Je.value===ue.value.length),Ft=M(()=>Je.value>0&&Je.value<ue.value.length),ce=M(()=>c.pools.filter(t=>h.pool_ids.includes(Number(t.id)))),ut=M(()=>{const t=new Map(c.member_options.map(a=>[Number(a.id),a])),e=new Map;return ce.value.forEach(a=>{const n=Number(a.id);(Array.isArray(a.member_rules)?a.member_rules:[]).forEach(d=>{const f=Number(d.admin_id);if(f<=0)return;const p=t.get(f),g=e.get(f)||{id:f,name:String(d.name||(p==null?void 0:p.name)||d.userid||`员工 ${f}`),userid:String((p==null?void 0:p.userid)||d.userid||""),display_dept_id:Number((p==null?void 0:p.display_dept_id)||0),dept_ids:Array.isArray(p==null?void 0:p.dept_ids)?p.dept_ids.map(Number).filter(E=>E>0):[],dept_names:Array.isArray(p==null?void 0:p.dept_names)?p.dept_names.map(String).filter(Boolean):Array.isArray(d.dept_names)?d.dept_names.map(String).filter(Boolean):[],pool_count:0,online_count:0,offline_count:0,pool_ids:new Set};g.pool_ids.has(n)||(g.pool_ids.add(n),g.pool_count++,Number(d.enabled)===1?g.online_count++:g.offline_count++),e.set(f,g)})}),[...e.values()].map(({pool_ids:a,...n})=>n).sort((a,n)=>a.name.localeCompare(n.name,"zh-CN"))}),Rt=M(()=>new Map(ut.value.map(t=>[t.id,t]))),rt=M(()=>wt(c.department_options,ut.value,{selectableDepartments:!0,memberDetail:t=>{const e=Rt.value.get(t.id);return e?`${e.pool_count} 个方案 · 已上线 ${e.online_count} / 已下线 ${e.offline_count}`:""}})),qt=M(()=>rt.value.map(t=>t.value)),ye=M(()=>{if(!_.member_status||h.member_status!==0)return[];const t=new Set(h.member_admin_ids.map(Number));return ce.value.filter(e=>{const a=Array.isArray(e.member_rules)?e.member_rules:[],n=a.some(d=>Number(d.enabled)===1&&t.has(Number(d.admin_id))),u=a.some(d=>Number(d.enabled)===1&&(_.reception||d.reception_available)&&!t.has(Number(d.admin_id)));return n&&!u})}),mt=M(()=>ce.value.map(t=>new Set((Array.isArray(t.member_admin_ids)?t.member_admin_ids:[]).map(Number)))),ct=M(()=>[...new Set(mt.value.flatMap(t=>[...t]))]),He=M(()=>{const t=mt.value;return t.length?[...t[0]].filter(e=>t.slice(1).every(a=>a.has(e))):[]}),Kt=M(()=>["reception","customer","welcome"].filter(t=>!_[t])),_t={value:"value",label:"label",children:"children",disabled:"disabled"},ft=M(()=>wt(c.department_options,c.member_options)),Jt=M(()=>ft.value.map(t=>t.value)),Ht=M(()=>U.link_options.length?U.link_options:c.links.filter(t=>t.id).map(t=>({id:Number(t.id),name:t.name||t.remote_link_id||`链接 ${t.id}`}))),Yt=M(()=>U.member_options.length?U.member_options:c.member_options.map(t=>({id:Number(t.id),userid:String(t.userid||""),name:t.name,department_name:Array.isArray(t.dept_names)?t.dept_names.join(" / "):t.department_name||t.dept_name||""})));at(()=>c.pools.map(t=>`${Number(t.id)}:${t.can_manage_access?1:0}:${t.can_operate?1:0}`).join(","),()=>{const t=c.pools.map(a=>Number(a.id)),e=new Set(ue.value);(!re.value||!t.includes(re.value))&&(re.value=t[0]),(!ve.value||!t.includes(ve.value))&&(ve.value=t[0]),L.value=L.value.filter(a=>e.has(a))},{immediate:!0}),at(K,t=>{t==="customer-stats"&&!ot.value&&_e()}),at(()=>j.action,t=>{if(t!=="grant")return;const e=new Set(c.operator_options.filter(a=>a.can_grant).map(a=>Number(a.id)));j.operator_admin_ids=j.operator_admin_ids.filter(a=>e.has(Number(a)))});async function H(){Ae.value=!0;try{const t=await cl();Object.assign(c,nt(),t||{})}catch(t){C.error((t==null?void 0:t.message)||"企业微信推广配置加载失败")}finally{Ae.value=!1}}function Wt(t,e){if(P.value||!(t!=null&&t.can_manage_access)&&!(t!=null&&t.can_operate))return;const a=Number(t.id),n=new Set(L.value);e?n.add(a):n.delete(a),L.value=[...n]}function Gt(t){P.value||(L.value=t?[...ue.value]:[])}function Zt(t=L.value){if(P.value)return;const e=new Set(c.pools.filter(u=>u.can_manage_access).map(u=>Number(u.id))),a=[...new Set(t.map(Number).filter(u=>e.has(u)))];if(!a.length)return C.warning("请先选择可管理的分流方案");if(a.length>100)return C.warning("单次最多设置 100 个分流方案");const n=c.pools.find(u=>Number(u.id)===a[0]);Object.assign(_,{skip_verify:!1,fallback_url:!1,status:!1,member_status:!1,reception:!1,customer:!1,welcome:!1}),Object.assign(h,{pool_ids:a,skip_verify:Number(n==null?void 0:n.skip_verify)===1?1:0,fallback_url:String((n==null?void 0:n.fallback_url)||""),status:Number(n==null?void 0:n.status)===1?1:0,member_admin_ids:[],member_status:1,automation_config:Le(n==null?void 0:n.automation_config)}),Ve.value="",oe.value=!1,$e.value=!0}function Ye(t,e,a){const n=t,u=e;a.forEach(d=>{n[d]=JSON.parse(JSON.stringify(u[d]))})}function ee(t){var e;Ve.value=t,(e=it.value)==null||e.scrollTo({top:0,behavior:"smooth"}),C.warning(t)}function Qt(t,e){return typeof t=="string"&&t?t:t&&typeof t=="object"&&"message"in t&&typeof t.message=="string"?t.message:e}function Xt(t){if(!t.success)return`本地保存失败:${t.error||"请检查配置后重试"}`;const e=t.sync_only?"":"本地已保存,";return t.sync_status==="synced"?`${e}企微成员范围已确认同步`:t.sync_status==="blocked"||t.sync_status==="failed"||t.sync_error?`${e}企微同步${t.sync_status==="blocked"?"受阻":"失败"}:${t.sync_error||"请重试同步"}`:`${e}企微成员范围尚未确认同步,请重试同步`}function We(t){const e=W.value.findIndex(a=>a.id===t.id);e<0?W.value.push(t):W.value[e]=t}function Me(t,e){if(e.sync_status==="synced")C.success(`${t},企微成员范围已确认同步`);else{const a=e.sync_error||"企微成员范围尚未确认同步,请点击“同步成员范围”重试";C.warning({message:`${t}。${a}`,duration:8e3})}}function Ge(t,e,a){We({id:t,name:e,success:!0,sync_status:a.sync_status,sync_error:a.sync_error,sync_queued:a.sync_queued})}function Ze(t){const e=c.pools.find(a=>Number(a.id)===t);return!!(e!=null&&e.can_operate&&(e!=null&&e.official_link))}async function pt(t){try{return await hl({pool_id:t})}catch(e){return{pool_id:t,sync_status:"failed",sync_error:Qt(e,"同步请求失败,请重试确认企微范围"),sync_queued:!1}}}async function bt(t){if(P.value||Q.value||!Ze(t))return;const e=c.pools.find(a=>Number(a.id)===t);Ce.value=t;try{const a=await pt(t);We({id:t,name:e.name,success:!0,sync_only:!0,...a}),await H(),Me("成员范围同步结果",a)}finally{Ce.value=0}}async function vt(t){W.value=t.map(n=>({...n}));const e=t.filter(n=>n.success&&n.sync_queued);Object.assign(X,{total:e.length,completed:0});let a=0;await Promise.all(Array.from({length:Math.min(2,e.length)},async()=>{for(;a<e.length;){const n=e[a++],u=await pt(n.id);We({...n,...u}),X.completed++}}))}async function ea(){if(P.value||Q.value||ge.value||q.value||G.value||ie.value)return;const t=[...new Set(L.value.map(Number))];if(!t.length)return C.warning("请先勾选需要同步的分流方案");if(t.length>100)return C.warning("单次最多同步 100 个分流方案,请分批选择");const e=t.map(a=>{const n=c.pools.find(d=>Number(d.id)===a),u=Ze(a);return{id:a,name:(n==null?void 0:n.name)||`方案 ${a}`,success:!0,sync_only:!0,sync_status:u?"pending":"blocked",sync_queued:u,sync_error:u?"":n!=null&&n.can_operate?"方案尚未生成官方链接,请先保存方案":"没有该方案的操作权限"}});Se.value=!0;try{await vt(e),L.value=W.value.filter(u=>u.sync_status!=="synced").map(u=>u.id),await H();const a=W.value.filter(u=>u.sync_status==="synced").length,n=t.length-a;C({type:n?"warning":"success",message:`企微已确认同步 ${a} 个方案${n?`,${n} 个尚未确认同步,已保留勾选`:""}。详情见方案列表上方。`,duration:8e3})}finally{Se.value=!1,Object.assign(X,{completed:0,total:0})}}async function ta(){if(P.value||oe.value)return;Ve.value="";const t=c.automation_installed&&(_.reception||_.customer||_.welcome),e=_.member_status,a=_.skip_verify||_.fallback_url||_.status||t;if(!_.skip_verify&&!_.fallback_url&&!_.status&&!e&&!t)return ee("请至少勾选一项需要批量修改的配置");if(e&&a)return ee("员工上下线需要单独批量保存,请取消其他方案配置修改");if(e&&!h.member_admin_ids.length)return ee("请至少选择一名需要批量上线或下线的员工");if(e&&h.member_admin_ids.length>100)return ee("单次最多设置 100 名员工,请减少选择范围");if(e&&h.member_status===0&&ye.value.length)return ee(`${ye.value[0].name} 至少需要保留一名当前可用的上线员工`);if(_.fallback_url&&h.fallback_url.trim()&&!Ut(h.fallback_url.trim()))return ee("兜底获客助手链接必须为有效的 HTTP/HTTPS 地址");const n=Le(h.automation_config);if(_.reception&&n.reception_mode!=="scheduled"&&(n.reception_schedule=[]),_.welcome&&n.welcome_mode!=="channel"&&(n.welcome={text:"",attachments:[]}),_.welcome&&(n.welcome_mode!=="channel"||!n.welcome_schedule_enabled)&&(n.welcome_schedule=[]),t){const d=Oe();_.reception&&Ye(d,n,["reception_mode","reception_schedule","backup_member_admin_ids"]),_.customer&&Ye(d,n,["tags_enabled","tag_ids","remark_enabled","remark_template","description_enabled","description"]),_.welcome&&Ye(d,n,["welcome_mode","welcome","welcome_schedule_enabled","welcome_schedule"]);const p=_.reception&&n.backup_member_admin_ids.some(g=>ct.value.includes(Number(g)))?"备用成员不能是任一所选方案的主接待成员":Bt(d,He.value);if(p)return ee(p)}const u={};if(_.skip_verify&&(u.skip_verify=h.skip_verify===1?1:0),_.fallback_url&&(u.fallback_url=h.fallback_url.trim()),_.status&&(u.status=h.status===1?1:0),e&&(u.member_status={member_admin_ids:[...h.member_admin_ids],status:h.member_status}),t){const d=jt(n),f={},p=g=>g.forEach(E=>{f[E]=d[E]});_.reception&&p(["reception_mode","reception_schedule","backup_member_admin_ids"]),_.customer&&p(["tags_enabled","tag_ids","remark_enabled","remark_template","description_enabled","description"]),_.welcome&&p(["welcome_mode","welcome","welcome_schedule_enabled","welcome_schedule"]),u.automation_config=f}T.value=!0,W.value=[];try{const d=await _l({pool_ids:[...h.pool_ids],changes:u});if(W.value=d.results.map(D=>({...D})),d.updated===0){const D=d.results.slice(0,2).map(O=>`${O.name||`方案 ${O.id}`}:${O.error||"保存失败"}`).join(";");return ee(D||"所选方案均未能保存,请检查配置后重试")}await vt(d.results),$e.value=!1,L.value=W.value.filter(D=>!D.success||D.sync_status!=="synced").map(D=>D.id),await H();const f=h.member_status===1?"上线":"下线",p=e?d.member_updated>0?`,${d.member_updated} 条本地员工规则已${f}`:`,所选员工本地均已处于${f}状态`:"",g=W.value.filter(D=>D.success&&D.sync_status==="synced").length,E=d.updated-g,Y=`本地已保存 ${d.updated} 个方案${p};企微已确认同步 ${g} 个${E?`,${E} 个尚未确认同步`:""}${d.failed?`;${d.failed} 个本地保存失败`:""}`;C({type:E||d.failed?"warning":"success",message:`${Y}。详情见方案列表上方。`,duration:8e3})}catch(d){ee((d==null?void 0:d.message)||"批量修改分流方案失败")}finally{T.value=!1,Object.assign(X,{completed:0,total:0})}}function gt(t=L.value){if(P.value)return;const e=new Set(c.pools.filter(n=>n.can_manage_access).map(n=>Number(n.id))),a=[...new Set(t.map(Number).filter(n=>e.has(n)))];if(!a.length)return C.warning("请先选择可管理的分流方案");if(a.length>100)return C.warning("单次最多设置 100 个分流方案");Object.assign(j,{pool_ids:a,operator_admin_ids:[],action:"grant"}),Ne.value=!0}async function aa(){if(!j.pool_ids.length)return C.warning("请至少选择一个分流方案");if(!j.operator_admin_ids.length)return C.warning("请至少选择一名操作人");ie.value=!0;try{const t=await fl({pool_ids:[...j.pool_ids],operator_admin_ids:[...j.operator_admin_ids],action:j.action});Ne.value=!1,L.value=[],await H();const e=j.action==="grant"?"添加":"移除";C.success(t!=null&&t.affected?`已批量${e} ${t.affected} 条方案操作权限`:"权限设置已检查,没有需要变更的记录")}catch(t){C.error((t==null?void 0:t.message)||"批量设置访问操作失败")}finally{ie.value=!1}}function la(t){const e=Array.isArray(t.dept_names)&&t.dept_names.length?t.dept_names.join(" / "):"未分部门",a=Number(t.disable)===1?" · 已禁用":"";return`${t.name} · ${e}${a}`}function sa(t){const e=Array.isArray(t==null?void 0:t.operators)?t.operators:[];return e.length?e.map(a=>`${a.name||`账号 ${a.id}`}${Number(a.disable)===1?"(已禁用)":""}`).join("、"):"仅原管理范围可操作"}function na(t){const e=t!=null&&t.main_url?"官方链接已生成":"待生成链接",a=Array.isArray(t==null?void 0:t.operator_admin_ids)?t.operator_admin_ids.length:0;return a>0?`${e} · ${a} 人可操作`:e}function Qe(t){if(P.value)return;const e=new Set(c.member_options.map(a=>Number(a.id)));me.value="",de.value=!1,Object.assign(S,t?{id:Number(t.id),name:t.name,fallback_url:t.fallback_url||"",status:Number(t.status),member_admin_ids:Array.isArray(t.member_admin_ids)?t.member_admin_ids.map(Number).filter(a=>e.has(a)):[],skip_verify:Number(t.skip_verify)===1?1:0,main_url:t.main_url||"",automation_config:Le(t.automation_config)}:{id:0,name:"",fallback_url:"",status:1,member_admin_ids:[],skip_verify:0,main_url:"",automation_config:Oe()}),he.value=!0}async function ia(){var a,n;if(q.value||de.value||P.value)return;me.value="";const t=Le(S.automation_config);t.reception_mode!=="scheduled"&&(t.reception_schedule=[]),t.welcome_mode!=="channel"&&(t.welcome={text:"",attachments:[]}),(t.welcome_mode!=="channel"||!t.welcome_schedule_enabled)&&(t.welcome_schedule=[]);const e=S.name.trim()?S.member_admin_ids.length?S.fallback_url.trim()&&!Ut(S.fallback_url.trim())?"兜底获客助手链接必须为有效的 HTTP/HTTPS 地址":c.automation_installed?Bt(t,S.member_admin_ids):"":"请至少选择一名主接待成员":"请输入分流方案名称";if(e)return me.value=e,(a=ze.value)==null||a.scrollTo({top:0,behavior:"smooth"}),C.warning(e);q.value=!0;try{const{automation_config:u,...d}=S,f=await pl({...d,name:S.name.trim(),fallback_url:S.fallback_url.trim(),...c.automation_installed?{automation_config:jt(t)}:{}});if(c.automation_installed&&(f==null?void 0:f.automation_saved)!==!0)throw new Error("方案已提交,但服务端未确认标签和欢迎语配置保存成功,请刷新后重试");he.value=!1,Ge(Number((f==null?void 0:f.id)||S.id),S.name,f||{}),await H(),f!=null&&f.id&&(re.value=Number(f.id)),Me(S.id?"本地方案已保存":"分流方案已创建",f||{})}catch(u){me.value=(u==null?void 0:u.message)||(typeof u=="string"?u:"分流方案保存失败,请检查配置或稍后重试"),(n=ze.value)==null||n.scrollTo({top:0,behavior:"smooth"}),C.error(me.value)}finally{q.value=!1}}async function oa(t){if(!P.value){try{await rl.confirm(`删除“${t.name}”将同时永久删除企业微信后台中的官方获客链接,已投放的链接会失效且无法恢复。确认继续?`,"永久删除分流方案",{type:"warning",confirmButtonText:"永久删除",cancelButtonText:"取消"})}catch{return}ge.value=Number(t.id);try{await bl({id:Number(t.id)}),C.success("分流方案及企业微信官方获客链接已永久删除"),await H()}catch(e){C.error((e==null?void 0:e.message)||"删除失败")}finally{ge.value=0}}}function da(t){if(P.value)return;const e=Number(t.active_start)>0&&Number(t.active_end)>0?[Vt(t.active_start),Vt(t.active_end)]:[];Object.assign(z,{id:Number(t.id),name:t.name||"",userid:t.userid||"",daily_limit:Number(t.daily_limit)||0,status:Number(t.enabled)===1?1:0,active_range:e,remark:t.remark||""}),we.value=!0}async function ua(){var a,n,u,d;if(G.value||P.value)return;G.value=!0;const t=Number((a=w.value)==null?void 0:a.id),e=String(((n=w.value)==null?void 0:n.name)||"");try{const f=await vl({...z,active_start:((u=z.active_range)==null?void 0:u[0])||"",active_end:((d=z.active_range)==null?void 0:d[1])||""});we.value=!1,Ge(t,e,f||{}),await H(),Me("本地医助规则已保存",f||{})}catch(f){C.error((f==null?void 0:f.message)||"医助分流规则保存失败")}finally{G.value=!1}}async function ra(t,e){var u,d;if(Q.value||P.value)return;Q.value=Number(t.id);const a=Number((u=w.value)==null?void 0:u.id),n=String(((d=w.value)==null?void 0:d.name)||"");try{const f=await gl({id:Number(t.id),status:e?1:0});Ge(a,n,f||{}),await H(),Me("本地成员状态已保存",f||{})}catch(f){C.error((f==null?void 0:f.message)||"成员状态更新失败"),await H()}finally{Q.value=0}}async function yt(){Pe.value=!0;try{const t=await yl();t!=null&&t.has_link?C.success((t==null?void 0:t.message)||"API 验证通过:应用凭证、可信 IP 与获客助手权限均可用"):C.warning((t==null?void 0:t.message)||"API 权限可用,但当前应用还没有创建官方获客链接")}catch(t){C.error((t==null?void 0:t.message)||"获客助手 API 验证失败")}finally{Pe.value=!1}}async function ma(){await H(),K.value==="customer-stats"&&await _e()}function ke(t,e){for(const a of e)if((t==null?void 0:t[a])!==void 0&&(t==null?void 0:t[a])!==null&&(t==null?void 0:t[a])!==""){const n=Number(t[a]);return Number.isFinite(n)?n:0}return 0}async function _e(){var t,e;xe.value=!0;try{const a=await ml({page_no:J.page_no,page_size:J.page_size,promotion_link_id:F.link_id?Number(F.link_id):void 0,userid:F.userid||void 0,chat_status:F.chat_status===""?void 0:F.chat_status==="messaged"?1:F.chat_status==="unknown"?2:0}),n=(a==null?void 0:a.summary)||(a==null?void 0:a.stats)||{},u=ke(n,["customer_count","total_customers","customer_total","total"]),d=ke(n,["messaged_customer_count","started_chat_count","chat_customer_count","message_customer_count","chatting_customers"]),f=["message_customer_rate","chat_customer_rate","messaged_rate","chat_rate"],p=f.some(k=>(n==null?void 0:n[k])!==void 0&&(n==null?void 0:n[k])!==null&&(n==null?void 0:n[k])!=="");Object.assign(U.summary,{customer_count:u,messaged_customer_count:d,message_customer_rate:p?ke(n,f):u?d/u*100:0,received_message_count:ke(n,["received_message_count","recv_msg_cnt","recv_msg_count","total_recv_msg_cnt","message_count"]),message_count_known_count:ke(n,["message_count_known_count","exact_message_customer_count"])}),U.rows=Array.isArray(a==null?void 0:a.lists)?a.lists:Array.isArray(a==null?void 0:a.list)?a.list:Array.isArray(a==null?void 0:a.rows)?a.rows:[],J.total=Number((a==null?void 0:a.total)??(a==null?void 0:a.count)??((t=a==null?void 0:a.page)==null?void 0:t.total)??U.rows.length)||0;const g=(a==null?void 0:a.filters)||{},E=(a==null?void 0:a.link_options)||(g==null?void 0:g.link_options)||(g==null?void 0:g.links),Y=(a==null?void 0:a.member_options)||(g==null?void 0:g.member_options)||(g==null?void 0:g.members);Array.isArray(E)&&(U.link_options=E),Array.isArray(Y)&&(U.member_options=Y);const D=U.rows.reduce((k,b)=>{const V=b.last_synced_at||b.last_sync_time||b.synced_at||b.sync_time||"";return Number(V||0)>Number(k||0)?V:k},""),O=((e=a==null?void 0:a.meta)==null?void 0:e.last_synced_at)||(a==null?void 0:a.last_synced_at)||D||U.meta.last_synced_at||"";Object.assign(U.meta,(a==null?void 0:a.meta)||{},{last_synced_at:O?Ee(O):""}),ot.value=!0}catch(a){C.error((a==null?void 0:a.message)||"获客客户统计加载失败")}finally{xe.value=!1}}function ca(){J.page_no=1,_e()}function _a(){Object.assign(F,{link_id:"",userid:"",chat_status:""}),J.page_no=1,_e()}function fa(){J.page_no=1,_e()}async function pa(){var t,e,a;Fe.value=!0;try{const n=await kl({promotion_link_id:F.link_id?Number(F.link_id):void 0}),u=Number((n==null?void 0:n.scanned)??(n==null?void 0:n.customer_scanned)??((t=n==null?void 0:n.customers)==null?void 0:t.scanned)??0),d=Number((n==null?void 0:n.created)??(n==null?void 0:n.customer_created)??((e=n==null?void 0:n.customers)==null?void 0:e.created)??0),f=Number((n==null?void 0:n.updated)??(n==null?void 0:n.customer_updated)??((a=n==null?void 0:n.customers)==null?void 0:a.updated)??0);C.success((n==null?void 0:n.message)||`客户同步完成:扫描 ${te(u)} 位,新增 ${te(d)} 位,更新 ${te(f)} 位`),J.page_no=1,await Promise.all([H(),_e()])}catch(n){C.error((n==null?void 0:n.message)||"获客客户同步失败")}finally{Fe.value=!1}}function De(t){var a;const e=Math.floor(Date.now()/1e3);return Number(t.enabled)!==1?{label:"已禁用",className:"is-muted"}:Number(t.active_start)>0&&Number(t.active_start)>e?{label:"尚未生效",className:"is-waiting"}:Number(t.active_end)>0&&Number(t.active_end)<e?{label:"已过期",className:"is-error"}:Number(t.daily_limit)>0&&ht(t)>=Number(t.daily_limit)?{label:"今日已达上限",className:"is-waiting"}:Number((a=w.value)==null?void 0:a.status)===0?{label:"方案已停用",className:"is-muted"}:t.reception_available===!1||t.reception_available===0?{label:t.is_backup?"备用待命":"非接待时段",className:"is-waiting"}:t.is_backup?{label:"备用接待中",className:"is-ok"}:{label:"可参与分流",className:"is-ok"}}function kt(t){const e=De(t).className==="is-ok";return t.is_in_remote_range===!0||Number(t.is_in_remote_range)===1?{label:e?"企微范围内":"待移出(仍在企微)",className:e?"is-online":"is-pending"}:{label:e?"待加入企微":"未在企微范围",className:"is-offline"}}function ht(t){const e=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(new Date);return t.today_date===e?Number(t.today_count||0):0}function wt(t,e,a={}){const n=new Set,u=b=>{b.forEach(V=>{const $=Number(V.id);$>0&&n.add($),Array.isArray(V.children)&&u(V.children)})};u(Array.isArray(t)?t:[]);const d=[],f=new Set;for(const b of Array.isArray(e)?e:[]){const V=Number(b.id);V<=0||f.has(V)||(f.add(V),d.push({id:V,name:String(b.name||b.userid||`成员 ${V}`),userid:String(b.userid||""),display_dept_id:Number(b.display_dept_id||0),dept_ids:Array.isArray(b.dept_ids)?Array.from(new Set(b.dept_ids.map(Number).filter($=>$>0))):[],dept_names:Array.isArray(b.dept_names)?b.dept_names.map(String).filter(Boolean):[]}))}const p=new Map;d.forEach(b=>{var R;const V=Number(b.display_dept_id||0),$=n.has(V)?V:b.dept_ids.find(ae=>n.has(ae))||0;p.has($)||p.set($,[]),(R=p.get($))==null||R.push(b)});const g=new Set,E=b=>{var R;const V=b.dept_names.length?b.dept_names.join(" / "):"未分部门",$=((R=a.memberDetail)==null?void 0:R.call(a,b))||(b.userid?`${V} · ${b.userid}`:V);return{value:b.id,label:b.name,kind:"member",detail:$,search_text:`${b.name} ${b.userid} ${b.dept_names.join(" ")}`.toLocaleLowerCase()}},Y=(b,V)=>b.name.localeCompare(V.name,"zh-CN"),D=(b,V)=>{const $=[];for(const R of Array.isArray(b)?b:[]){const ae=Number(R.id);if(ae<=0)continue;const fe=String(R.name||`部门 ${ae}`),pe=[...V,fe],Te=D(Array.isArray(R.children)?R.children:[],pe),Ue=[...p.get(ae)||[]].sort(Y);Ue.forEach(l=>g.add(l.id));const tt=Ue.map(E),be=[...Te,...tt];if(!be.length)continue;const Be=be.reduce((l,le)=>l+(le.kind==="member"?1:Number(le.member_count||0)),0);$.push({value:`dept:${ae}`,label:fe,kind:"department",disabled:!a.selectableDepartments,member_count:Be,search_text:`${pe.join(" ")} ${be.map(l=>l.search_text).join(" ")}`.toLocaleLowerCase(),children:be})}return $},O=D(Array.isArray(t)?t:[],[]),k=d.filter(b=>!g.has(b.id)).sort(Y);if(k.length){const b=k.map(E);O.push({value:"dept:unassigned",label:"未分部门",kind:"department",disabled:!a.selectableDepartments,member_count:b.length,search_text:`未分部门 ${b.map(V=>V.search_text).join(" ")}`.toLocaleLowerCase(),children:b})}return O}function Nt(t,e){const a=String(t||"").trim().toLocaleLowerCase();return a===""||e.search_text.includes(a)}function ba(t){var n,u;const e=Array.isArray(t==null?void 0:t.member_admin_ids)?t.member_admin_ids:[],a=((u=(n=t==null?void 0:t.automation_config)==null?void 0:n.backup_member_admin_ids)==null?void 0:u.length)||0;return e.length?`${e.length} 名主接待${a?` · ${a} 名备用`:""}`:"未选择医助"}function va(t){return`${Array.isArray(t.dept_names)&&t.dept_names.length?t.dept_names.join(" / "):"未分部门"} · ${t.userid||"未绑定 userid"}`}function ga(t){const e=t.department_name||t.dept_name||"",a=t.userid?` · ${t.userid}`:"";return e?`${t.name} · ${e}${a}`:`${t.name}${a}`}function $t(t){const e=t.external_userid_masked||t.customer_id_masked||t.customer_masked||t.customer_name_masked;return e?String(e):ya(t.external_userid||t.customer_id||t.id)}function ya(t){const e=String(t||"").trim();return e?e.includes("*")?e:e.length<=4?`${e.slice(0,1)}***`:e.length<=8?`${e.slice(0,2)}***${e.slice(-1)}`:`${e.slice(0,4)}****${e.slice(-4)}`:"-"}function ka(t){return t.link_name||t.source_link_name||t.promotion_link_name||"未匹配来源链接"}function ha(t){const e=t.link_id||t.remote_link_id||t.source_link_id;return e?`链接 ID:${e}`:"暂无链接 ID"}function Xe(t){return ke(t,["received_message_count","recv_msg_cnt","message_count","received_count"])}function Ct(t){const e=t.message_count_known??t.message_count_exact??t.count_known;return e!=null?e===!0||e===1||e==="1"||e==="true":Xe(t)>0}function et(t){const e=Number(t.chat_status);if(e===2)return"unknown";const a=t.has_messaged??t.has_message??t.messaged;return a!=null?a===!0||a===1||a==="1"||a==="true"||a==="messaged"?"messaged":"silent":e===1||Xe(t)>0?"messaged":"silent"}function wa(t){const e=et(t);return e==="messaged"?"已发消息":e==="unknown"?"状态未知":"未发消息"}function Na(t){if(Ct(t))return te(Xe(t));const e=et(t);return e==="silent"?"0":e==="unknown"?"未知":"待回调"}function St(t){return t.last_message_at||t.last_chat_time||t.last_message_time||t.last_msg_time||t.event_time||""}function Ee(t){if(t==null||t===""||t===0||t==="0")return"-";if(typeof t=="number"||/^\d+$/.test(String(t))){const e=Number(t),a=new Date(e>1e11?e:e*1e3);return Number.isNaN(a.getTime())?"-":a.toLocaleString("zh-CN",{hour12:!1}).replaceAll("/","-")}return String(t).replace("T"," ").replace(/Z$/,"").slice(0,19)}function $a(t){return`${Number(t||0).toFixed(1)}%`}function te(t){return Number(t||0).toLocaleString("zh-CN")}function Vt(t){const e=new Date(Number(t||0)*1e3),a=n=>String(n).padStart(2,"0");return`${e.getFullYear()}-${a(e.getMonth()+1)}-${a(e.getDate())} ${a(e.getHours())}:${a(e.getMinutes())}:${a(e.getSeconds())}`}async function xt(t,e){if(!t)return C.warning(`${e}暂无内容`);try{await navigator.clipboard.writeText(t)}catch{const a=document.createElement("textarea");a.value=t,a.style.position="fixed",a.style.opacity="0",document.body.appendChild(a),a.select();const n=document.execCommand("copy");if(a.remove(),!n)throw new Error("copy command failed")}C.success(`${e}已复制`)}async function Ca(){await H()}return Sa(async()=>{await H()}),(t,e)=>{var Be;const a=Aa,n=Ia,u=Ba,d=za,f=Ra,p=Fa,g=qa,E=Ka,Y=Ja,D=Ga,O=Wa,k=Ya,b=Qa,V=Xa,$=al,R=ll,ae=sl,fe=nl,pe=ol,Te=il,Ue=dl,tt=ul,be=Va;return At((m(),y("div",$l,[s("header",Cl,[s("div",Sl,[s("span",Vl,[i(a,null,{default:o(()=>[i(N(xa))]),_:1})]),e[56]||(e[56]=s("div",null,[s("h1",null,"企业微信获客助手"),s("p",null,"一个方案保留一条企业微信官方直链,由企业微信在多个可用医助之间原生路由")],-1))]),s("div",xl,[s("span",Al,[i(a,null,{default:o(()=>[i(N(Pa))]),_:1}),v(r(c.meta.scope_label||"当前数据范围"),1)]),c.meta.generated_at?(m(),y("span",Pl,"更新于 "+r(c.meta.generated_at),1)):x("",!0),i(n,{icon:N(je),loading:Ae.value||xe.value,onClick:ma},{default:o(()=>[...e[57]||(e[57]=[v("刷新",-1)])]),_:1},8,["icon","loading"])])]),s("section",Il,[s("article",Ml,[s("span",Dl,[i(a,null,{default:o(()=>[i(N(Ma))]),_:1})]),s("div",null,[e[58]||(e[58]=s("small",null,"内部应用",-1)),s("strong",null,r(c.summary.configured_apps),1),e[59]||(e[59]=s("p",null,"直接读取服务器环境配置",-1))])]),s("article",El,[s("span",Tl,[i(a,null,{default:o(()=>[i(N(Da))]),_:1})]),s("div",null,[e[60]||(e[60]=s("small",null,"分流方案",-1)),s("strong",null,r(c.summary.pool_count),1),e[61]||(e[61]=s("p",null,"每个方案对应一个官方链接",-1))])]),s("article",Ul,[s("span",Bl,[i(a,null,{default:o(()=>[i(N(Ea))]),_:1})]),s("div",null,[e[62]||(e[62]=s("small",null,"官方链接",-1)),s("strong",null,r(c.summary.online_links),1),e[63]||(e[63]=s("p",null,"链接不变,成员范围自动更新",-1))])]),s("article",jl,[s("span",Ol,[i(a,null,{default:o(()=>[i(N(Ta))]),_:1})]),s("div",null,[e[64]||(e[64]=s("small",null,"今日实际获客",-1)),s("strong",null,r(c.summary.today_clicks),1),e[65]||(e[65]=s("p",null,"按企业微信回调确认承接成员",-1))])])]),s("section",Ll,[s("nav",zl,[s("button",{class:B({active:K.value==="links"}),onClick:e[0]||(e[0]=l=>K.value="links")},[i(a,null,{default:o(()=>[i(N(Pt))]),_:1}),e[66]||(e[66]=v("获客助手链接 ",-1))],2),s("button",{class:B({active:K.value==="customer-stats"}),onClick:e[1]||(e[1]=l=>K.value="customer-stats")},[i(a,null,{default:o(()=>[i(N(It))]),_:1}),e[67]||(e[67]=v("获客客户统计 ",-1))],2),s("button",{class:B({active:K.value==="configuration"}),onClick:e[2]||(e[2]=l=>K.value="configuration")},[i(a,null,{default:o(()=>[i(N(Ua))]),_:1}),e[68]||(e[68]=v("应用配置 ",-1))],2),s("button",{class:B({active:K.value==="install"}),onClick:e[3]||(e[3]=l=>K.value="install")},[i(a,null,{default:o(()=>[i(N(lt))]),_:1}),e[69]||(e[69]=v("JS 安装 ",-1))],2)]),K.value==="links"?(m(),y("div",Fl,[s("div",Rl,[e[74]||(e[74]=s("div",null,[s("h2",null,"获客助手分流方案"),s("p",null,"选择几名医助就生成几条成员规则;官方链接只在方案顶部复制,成员行不重复展示链接。")],-1)),s("div",ql,[L.value.length?(m(),y("span",Kl,"已选 "+r(L.value.length)+" 个方案",1)):x("",!0),i(n,{icon:N(je),loading:Se.value,disabled:!L.value.length||P.value||Q.value>0||ge.value>0,onClick:ea},{default:o(()=>[...e[70]||(e[70]=[v("批量同步成员范围",-1)])]),_:1},8,["icon","loading","disabled"]),i(n,{icon:N(Mt),disabled:!dt.value||P.value,onClick:e[4]||(e[4]=l=>Zt())},{default:o(()=>[...e[71]||(e[71]=[v("批量修改方案",-1)])]),_:1},8,["icon","disabled"]),i(n,{icon:N(st),disabled:!dt.value||P.value,onClick:e[5]||(e[5]=l=>gt())},{default:o(()=>[...e[72]||(e[72]=[v("批量设置访问操作",-1)])]),_:1},8,["icon","disabled"]),i(n,{type:"primary",icon:N(Dt),disabled:P.value,onClick:e[6]||(e[6]=l=>Qe())},{default:o(()=>[...e[73]||(e[73]=[v("新建分流方案",-1)])]),_:1},8,["icon","disabled"])])]),W.value.length?(m(),y("section",Jl,[e[76]||(e[76]=s("strong",null,"本次保存与企微同步结果",-1)),Se.value?(m(),y("p",Hl,"正在同步企微 "+r(X.completed)+" / "+r(X.total)+" 个方案,请等待完成。",1)):x("",!0),s("ul",null,[(m(!0),y(se,null,ne(W.value,l=>(m(),y("li",{key:l.id},[s("span",null,r(l.name||`方案 ${l.id}`)+":"+r(Xt(l)),1),l.success&&l.sync_status!=="synced"&&Ze(l.id)?(m(),I(n,{key:0,type:"primary",link:"",loading:Ce.value===l.id,disabled:P.value,onClick:le=>bt(l.id)},{default:o(()=>[...e[75]||(e[75]=[v("重试同步",-1)])]),_:1},8,["loading","disabled","onClick"])):x("",!0)]))),128))])])):x("",!0),c.pools.length?(m(),y("div",Yl,[s("aside",Wl,[s("div",Gl,[i(u,{"model-value":zt.value,indeterminate:Ft.value,disabled:!ue.value.length||P.value,"aria-label":"全选可操作的分流方案",onChange:Gt},{default:o(()=>[...e[77]||(e[77]=[v("全选",-1)])]),_:1},8,["model-value","indeterminate","disabled"]),s("span",null,"可选 "+r(ue.value.length)+" 个",1)]),(m(!0),y(se,null,ne(c.pools,l=>(m(),y("div",{key:l.id,class:B(["pool-select-row",{active:Number(l.id)===re.value}])},[i(u,{"model-value":L.value.includes(Number(l.id)),disabled:!l.can_manage_access&&!l.can_operate||P.value,"aria-label":`选择方案 ${l.name}`,onChange:le=>Wt(l,le),onClick:e[7]||(e[7]=ja(()=>{},["stop"]))},null,8,["model-value","disabled","aria-label","onChange"]),s("button",{type:"button",class:"pool-item",onClick:le=>re.value=Number(l.id)},[s("span",{class:B(["pool-status",Number(l.status)===1?"online":"offline"])},null,2),s("span",null,[s("strong",null,r(l.name),1),s("small",null,r(ba(l))+" · "+r(na(l)),1)]),i(a,null,{default:o(()=>[i(N(Oa))]),_:1})],8,Zl)],2))),128))]),s("div",Ql,[w.value?(m(),y("div",Xl,[s("div",null,[s("div",es,[s("h3",null,r(w.value.name),1),s("span",{class:B(["status-tag",Number(w.value.status)===1?"is-online":"is-offline"])},r(Number(w.value.status)===1?"运行中":"已停用"),3),s("span",ts,r(w.value.dept_name||"未分部门")+" · "+r(w.value.owner_name||"系统"),1)]),s("p",null,"公开键:"+r(w.value.public_key),1)]),s("div",as,[i(n,{icon:N(Et),loading:Pe.value,onClick:yt},{default:o(()=>[...e[78]||(e[78]=[v("验证 API",-1)])]),_:1},8,["icon","loading"]),w.value.can_operate?(m(),I(n,{key:0,icon:N(je),loading:Ce.value===Number(w.value.id),disabled:!w.value.official_link||P.value||Q.value>0,onClick:e[8]||(e[8]=l=>bt(Number(w.value.id)))},{default:o(()=>[...e[79]||(e[79]=[v("同步成员范围",-1)])]),_:1},8,["icon","loading","disabled"])):x("",!0),i(n,{icon:N(lt),disabled:!w.value.main_url,onClick:e[9]||(e[9]=l=>xt(w.value.main_url,"官方获客链接"))},{default:o(()=>[...e[80]||(e[80]=[v("复制链接",-1)])]),_:1},8,["icon","disabled"]),i(n,{icon:N(lt),onClick:e[10]||(e[10]=l=>xt(w.value.install_code,"JS 安装代码"))},{default:o(()=>[...e[81]||(e[81]=[v("复制 JS",-1)])]),_:1},8,["icon"]),w.value.can_manage_access?(m(),I(n,{key:1,icon:N(st),disabled:P.value,onClick:e[11]||(e[11]=l=>gt([Number(w.value.id)]))},{default:o(()=>[...e[82]||(e[82]=[v("设置访问操作",-1)])]),_:1},8,["icon","disabled"])):x("",!0),w.value.can_operate?(m(),I(n,{key:2,icon:N(Mt),disabled:P.value,onClick:e[12]||(e[12]=l=>Qe(w.value))},{default:o(()=>[...e[83]||(e[83]=[v("编辑方案",-1)])]),_:1},8,["icon","disabled"])):x("",!0),w.value.can_delete?(m(),I(n,{key:3,type:"danger",plain:"",icon:N(La),loading:ge.value===Number(w.value.id),disabled:ge.value>0||P.value,onClick:e[13]||(e[13]=l=>oa(w.value))},{default:o(()=>[...e[84]||(e[84]=[v("删除",-1)])]),_:1},8,["icon","loading","disabled"])):x("",!0)])])):x("",!0),w.value.migration_state==="needs_resolution"?(m(),I(d,{key:1,class:"legacy-sync-alert",type:"warning","show-icon":"",closable:!1,title:"检测到旧版方案存在多个官方链接",description:"当前显示最新链接;保存方案后,其余旧链接只会在本地下线,企业微信端与历史客户归因仍会保留。"})):x("",!0),i(d,{class:"legacy-sync-alert",type:"info","show-icon":"",closable:!1,title:"企业微信原生多人路由",description:"上线开关和可用性表示本地规则;企微范围显示上次远端确认结果。“待移出”的成员仍可能获客,只有同步完成才会从官方链接移除。"}),i(d,{class:"legacy-sync-alert member-sync-state",type:qe.value.type,"show-icon":"",closable:!1,title:qe.value.title,description:qe.value.description},null,8,["type","title","description"]),s("div",ls,[i(Y,{data:Re.value,class:"link-table",height:"100%",stripe:""},{empty:o(()=>[i(E,{"image-size":72,description:"编辑方案并选择获客医助"})]),default:o(()=>[i(p,{label:"推广成员","min-width":"210",fixed:"left"},{default:o(({row:l})=>[s("div",ss,[s("strong",null,[v(r(l.name||l.userid)+" ",1),l.is_backup?(m(),I(f,{key:0,size:"small",type:"warning",effect:"plain"},{default:o(()=>[...e[85]||(e[85]=[v("备用",-1)])]),_:1})):x("",!0)]),s("small",null,r(va(l)),1)])]),_:1}),i(p,{label:"企微范围(上次确认)",width:"165",align:"center"},{default:o(({row:l})=>[s("span",{class:B(["status-tag",kt(l).className])},r(kt(l).label),3),Number(l.sync_status)===3?(m(),y("div",ns,"同步失败,请查看上方原因")):x("",!0)]),_:1}),i(p,{label:"今日 / 上限",width:"125",align:"center"},{default:o(({row:l})=>[v(r(ht(l))+" / "+r(Number(l.daily_limit)?l.daily_limit:"不限"),1)]),_:1}),i(p,{label:"累计获客",prop:"total_count",width:"105",align:"center"}),i(p,{label:"当前可用性","min-width":"130"},{default:o(({row:l})=>[s("span",{class:B(["availability",De(l).className])},r(De(l).label),3)]),_:1}),i(p,{label:"上线",width:"90",align:"center"},{default:o(({row:l})=>[i(g,{"model-value":Number(l.enabled)===1,disabled:!w.value.can_operate||Q.value>0||P.value,loading:Q.value===Number(l.id),onChange:le=>ra(l,le)},null,8,["model-value","disabled","loading","onChange"])]),_:1}),i(p,{label:"操作","min-width":"100",fixed:"right"},{default:o(({row:l})=>[w.value.can_operate?(m(),I(n,{key:0,type:"primary",link:"",disabled:P.value,onClick:le=>da(l)},{default:o(()=>[...e[86]||(e[86]=[v("编辑规则",-1)])]),_:1},8,["disabled","onClick"])):x("",!0)]),_:1})]),_:1},8,["data"])])])])):(m(),I(E,{key:2,description:"创建方案并选择多个医助,保存后自动生成一个企业微信官方获客链接"},{default:o(()=>[i(n,{type:"primary",icon:N(Dt),onClick:e[14]||(e[14]=l=>Qe())},{default:o(()=>[...e[87]||(e[87]=[v("创建第一个方案",-1)])]),_:1},8,["icon"])]),_:1}))])):K.value==="customer-stats"?(m(),y("div",is,[s("div",os,[e[89]||(e[89]=s("div",null,[s("h2",null,"获客客户消息统计"),s("p",null,"统计当前权限范围内由获客助手链接添加的客户,以及客户向承接成员发送消息的情况。")],-1)),s("div",ds,[U.meta.last_synced_at?(m(),y("span",us,"最近同步 "+r(U.meta.last_synced_at),1)):x("",!0),i(n,{type:"primary",icon:N(je),loading:Fe.value,onClick:pa},{default:o(()=>[...e[88]||(e[88]=[v("同步客户",-1)])]),_:1},8,["icon","loading"])])]),s("section",rs,[s("article",ms,[s("span",cs,[i(a,null,{default:o(()=>[i(N(st))]),_:1})]),s("div",null,[e[90]||(e[90]=s("small",null,"获客客户数",-1)),s("strong",null,r(te(U.summary.customer_count)),1),e[91]||(e[91]=s("p",null,"当前筛选范围内的去重客户",-1))])]),s("article",_s,[s("span",fs,[i(a,null,{default:o(()=>[i(N(Ha))]),_:1})]),s("div",null,[e[92]||(e[92]=s("small",null,"已发消息客户数",-1)),s("strong",null,r(te(U.summary.messaged_customer_count)),1),e[93]||(e[93]=s("p",null,"至少发送过一条消息",-1))])]),s("article",ps,[s("span",bs,[i(a,null,{default:o(()=>[i(N(It))]),_:1})]),s("div",null,[e[94]||(e[94]=s("small",null,"消息客户率",-1)),s("strong",null,r($a(U.summary.message_customer_rate)),1),e[95]||(e[95]=s("p",null,"已发消息客户占获客客户比例",-1))])]),s("article",vs,[s("span",gs,[i(a,null,{default:o(()=>[i(N(Pt))]),_:1})]),s("div",null,[e[96]||(e[96]=s("small",null,"累计接收消息数",-1)),s("strong",null,r(te(U.summary.received_message_count)),1),s("p",null,"已精确统计 "+r(te(U.summary.message_count_known_count))+" 位客户",1)])])]),c.config.callback_ready?x("",!0):(m(),I(d,{key:0,class:"chatkey-alert",type:"warning","show-icon":"",closable:!1,title:"消息次数回调尚未配置完成",description:"复用企业微信自建应用现有的“API 接收消息”地址即可,无需新增第二个回调;请确保该地址为 /api/qywx/external-contact/notify,且服务器 Token、AESKey 与企微后台一致。未完成前无法自动累计成员获客数量,也无法在成员达到上限后自动更新官方范围。"})),i(d,{class:"chatkey-alert",type:"info","show-icon":"",closable:!1,title:"获客助手通过事件与 ChatKey 返回收消息次数",description:"本功能复用现有回调并按事件类型处理 customer_acquisition,不会占用第二个回调。客户首次发消息会推送 customer_start_chat;累计第 3、5、10 次时推送 message_from_customer,服务端需在 30 分钟内用 ChatKey 查询成员、客户、获客链接和累计收消息次数。"}),s("div",ys,[i(b,{model:F,inline:"","label-position":"top"},{default:o(()=>[i(k,{label:"来源链接"},{default:o(()=>[i(O,{modelValue:F.link_id,"onUpdate:modelValue":e[15]||(e[15]=l=>F.link_id=l),clearable:"",filterable:"",placeholder:"全部链接"},{default:o(()=>[(m(!0),y(se,null,ne(Ht.value,l=>(m(),I(D,{key:String(l.id),label:l.name,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),i(k,{label:"承接成员"},{default:o(()=>[i(O,{modelValue:F.userid,"onUpdate:modelValue":e[16]||(e[16]=l=>F.userid=l),clearable:"",filterable:"",placeholder:"全部成员"},{default:o(()=>[(m(!0),y(se,null,ne(Yt.value,l=>(m(),I(D,{key:l.userid||String(l.id),label:ga(l),value:l.userid||String(l.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),i(k,{label:"聊天状态"},{default:o(()=>[i(O,{modelValue:F.chat_status,"onUpdate:modelValue":e[17]||(e[17]=l=>F.chat_status=l),clearable:"",placeholder:"全部状态"},{default:o(()=>[i(D,{label:"已发过消息",value:"messaged"}),i(D,{label:"未发过消息",value:"silent"}),i(D,{label:"状态未知",value:"unknown"})]),_:1},8,["modelValue"])]),_:1}),i(k,{class:"filter-actions"},{default:o(()=>[i(n,{type:"primary",icon:N(Za),loading:xe.value,onClick:ca},{default:o(()=>[...e[97]||(e[97]=[v("查询",-1)])]),_:1},8,["icon","loading"]),i(n,{onClick:_a},{default:o(()=>[...e[98]||(e[98]=[v("重置",-1)])]),_:1})]),_:1})]),_:1},8,["model"])]),At((m(),I(Y,{data:U.rows,class:"customer-table",stripe:""},{empty:o(()=>[i(E,{"image-size":72,description:"当前筛选范围暂无获客客户数据"})]),default:o(()=>[i(p,{label:"客户标识(已脱敏)","min-width":"190",fixed:"left"},{default:o(({row:l})=>[s("span",{class:"customer-identifier",title:$t(l)},r($t(l)),9,ks)]),_:1}),i(p,{label:"来源链接","min-width":"190"},{default:o(({row:l})=>[s("div",hs,[s("strong",null,r(ka(l)),1),s("small",null,r(ha(l)),1)])]),_:1}),i(p,{label:"承接成员 / 部门","min-width":"175"},{default:o(({row:l})=>[s("div",ws,[s("strong",null,r(l.member_name||l.owner_name||"未匹配成员"),1),s("small",null,r(l.department_name||l.dept_name||"未分部门")+" · "+r(l.userid||"未绑定企微账号"),1)])]),_:1}),i(p,{label:"客户开口",width:"110",align:"center"},{default:o(({row:l})=>[s("span",{class:B(["message-state",`is-${et(l)}`])},r(wa(l)),3)]),_:1}),i(p,{label:"累计消息",width:"100",align:"right"},{default:o(({row:l})=>[s("strong",{class:B(["message-count",{muted:!Ct(l)}])},r(Na(l)),3)]),_:1}),i(p,{label:"最近同步时间","min-width":"165"},{default:o(({row:l})=>[v(r(Ee(l.last_synced_at||l.last_sync_time||l.synced_at||l.sync_time)),1)]),_:1}),i(p,{label:"最近收消息事件","min-width":"165"},{default:o(({row:l})=>[s("span",{class:B({muted:!St(l)})},r(Ee(St(l))),3)]),_:1})]),_:1},8,["data"])),[[be,xe.value]]),s("div",Ns,[s("span",null,"共 "+r(te(J.total))+" 位客户",1),i(V,{"current-page":J.page_no,"onUpdate:currentPage":e[18]||(e[18]=l=>J.page_no=l),"page-size":J.page_size,"onUpdate:pageSize":e[19]||(e[19]=l=>J.page_size=l),background:"",layout:"sizes, prev, pager, next","page-sizes":[10,20,50,100],total:J.total,onCurrentChange:_e,onSizeChange:fa},null,8,["current-page","page-size","total"])])])):K.value==="configuration"?(m(),y("div",$s,[e[107]||(e[107]=s("div",{class:"section-heading"},[s("div",null,[s("h2",null,"企业微信内部应用配置"),s("p",null,"直接读取服务器现有的 work_wechat 配置,密钥不会返回浏览器,也不需要第三方应用授权。")])],-1)),s("div",{class:B(["configuration-panel",c.config.ready?"is-ready":"is-pending"])},[s("div",Cs,[s("span",null,[i(a,null,{default:o(()=>[(m(),I(el(c.config.ready?N(Et):N(tl))))]),_:1})]),s("div",null,[s("strong",null,r(c.config.ready?"内部应用已就绪":"内部应用配置不完整"),1),c.config.ready?(m(),y("p",Ss,"已识别 CorpID 与应用 Secret;点击“验证 API”可同时检查可信 IP、获客助手开通状态和应用权限。")):(m(),y("p",Vs,"请补齐服务器 .env 的 [work_wechat] 配置;页面不会展示 Secret 内容。"))])]),(Be=c.config.missing)!=null&&Be.length?(m(),y("div",xs,[e[99]||(e[99]=v(" 缺少:",-1)),(m(!0),y(se,null,ne(c.config.missing,l=>(m(),y("code",{key:l},r(l),1))),128))])):x("",!0),s("dl",As,[s("div",null,[e[100]||(e[100]=s("dt",null,"企业 CorpID",-1)),s("dd",null,r(c.config.corp_id_masked||"未配置"),1),s("span",null,r(c.config.corp_id_masked?"已识别":"缺失"),1)]),s("div",null,[e[101]||(e[101]=s("dt",null,"应用 AgentID",-1)),s("dd",null,r(c.config.agent_id||"未配置"),1),s("span",null,r(c.config.agent_id?"已识别":"缺失"),1)]),s("div",null,[e[102]||(e[102]=s("dt",null,"应用 Secret",-1)),e[103]||(e[103]=s("dd",null,"仅保存在服务器环境变量中",-1)),s("span",null,r(c.config.secret_configured?"已配置":"缺失"),1)]),s("div",null,[e[104]||(e[104]=s("dt",null,"消息回调地址",-1)),s("dd",null,r(c.config.callback_url||"未生成"),1),s("span",null,r(c.config.callback_ready?"已配置密钥":"待配置 Token/AESKey"),1)])]),s("div",Ps,[i(n,{type:"primary",loading:Pe.value,onClick:yt},{default:o(()=>[...e[105]||(e[105]=[v("验证获客助手 API",-1)])]),_:1},8,["loading"]),c.config.official_doc?(m(),I($,{key:0,href:c.config.official_doc,target:"_blank",type:"primary"},{default:o(()=>[...e[106]||(e[106]=[v("查看企业微信官方文档",-1)])]),_:1},8,["href"])):x("",!0)])],2)])):(m(),y("div",Is,[s("div",Ms,[e[108]||(e[108]=s("div",null,[s("h2",null,"安装 JS 与浮窗客服"),s("p",null,"为每个分流方案配置独立浮窗;基础脚本仍只负责展示入口、捕获点击并请求服务端分流。")],-1)),i(O,{modelValue:ve.value,"onUpdate:modelValue":e[20]||(e[20]=l=>ve.value=l),placeholder:"选择分流方案",class:"install-pool-select"},{default:o(()=>[(m(!0),y(se,null,ne(c.pools,l=>(m(),I(D,{key:l.id,label:l.name,value:Number(l.id)},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),Ke.value?(m(),I(wl,{key:Number(Ke.value.id),pool:Ke.value,onSaved:Ca},null,8,["pool"])):(m(),I(E,{key:1,description:"请先创建分流方案,系统会自动生成 JS 安装代码"}))]))]),i(fe,{modelValue:he.value,"onUpdate:modelValue":e[29]||(e[29]=l=>he.value=l),title:S.id?"编辑分流方案":"新建分流方案",width:"1000px",class:"promotion-pool-dialog","destroy-on-close":"","close-on-click-modal":!1,"close-on-press-escape":!q.value&&!de.value,"show-close":!q.value&&!de.value},{footer:o(()=>[de.value?(m(),y("span",Bs,"正在处理标签或素材,请稍候")):x("",!0),i(n,{disabled:q.value||de.value,onClick:e[28]||(e[28]=l=>he.value=!1)},{default:o(()=>[...e[110]||(e[110]=[v("取消",-1)])]),_:1},8,["disabled"]),i(n,{type:"primary",loading:q.value,disabled:de.value,onClick:ia},{default:o(()=>[v(r(S.id?"保存方案":"保存并生成链接"),1)]),_:1},8,["loading","disabled"])]),default:o(()=>[s("div",{ref_key:"poolFormScroll",ref:ze,class:"pool-form-scroll"},[me.value?(m(),I(d,{key:0,class:"pool-form-error",title:me.value,type:"error","show-icon":"",closable:!1,role:"alert"},null,8,["title"])):x("",!0),i(b,{"label-position":"top",disabled:q.value},{default:o(()=>[i(k,{label:"方案名称",required:""},{default:o(()=>[i(R,{modelValue:S.name,"onUpdate:modelValue":e[21]||(e[21]=l=>S.name=l),disabled:q.value,maxlength:"60","show-word-limit":"",placeholder:"例如:官网咨询分流"},null,8,["modelValue","disabled"])]),_:1}),i(k,{label:"主接待成员(获客医助)",required:""},{default:o(()=>[i(ae,{modelValue:S.member_admin_ids,"onUpdate:modelValue":e[22]||(e[22]=l=>S.member_admin_ids=l),data:ft.value,props:_t,"default-expanded-keys":Jt.value,"filter-node-method":Nt,disabled:q.value,"node-key":"value",multiple:"",filterable:"",clearable:"","show-checkbox":"","collapse-tags":"","collapse-tags-tooltip":"","max-collapse-tags":2,"multiple-limit":500,"render-after-expand":!1,placeholder:"按部门展开,或搜索姓名 / 部门 / 企微 userid",style:{width:"100%"}},{default:o(({data:l})=>[s("span",{class:B(["member-tree-option",`is-${l.kind}`])},[s("span",Ds,r(l.label),1),l.kind==="department"?(m(),y("span",Es,r(l.member_count)+" 人",1)):(m(),y("span",Ts,r(l.detail),1))],2)]),_:1},8,["modelValue","data","default-expanded-keys","disabled"]),s("span",Us,"已选 "+r(S.member_admin_ids.length)+" 名;保存后会为每名医助生成一条成员规则,官方链接地址始终只有一个。",1)]),_:1}),i(k,{label:"添加客户时跳过验证"},{default:o(()=>[i(g,{modelValue:S.skip_verify,"onUpdate:modelValue":e[23]||(e[23]=l=>S.skip_verify=l),disabled:q.value,"active-value":1,"inactive-value":0,"active-text":"跳过验证","inactive-text":"需要验证"},null,8,["modelValue","disabled"])]),_:1}),i(k,{label:"兜底获客助手链接"},{default:o(()=>[i(R,{modelValue:S.fallback_url,"onUpdate:modelValue":e[24]||(e[24]=l=>S.fallback_url=l),disabled:q.value,placeholder:"可选;仅供旧版兼容跳转使用"},null,8,["modelValue","disabled"]),e[109]||(e[109]=s("span",{class:"form-tip"},"新生成的官方直链不经过本站跳转;此项仅兼容旧安装代码。",-1))]),_:1}),i(k,{label:"运行状态"},{default:o(()=>[i(g,{modelValue:S.status,"onUpdate:modelValue":e[25]||(e[25]=l=>S.status=l),disabled:q.value,"active-value":1,"inactive-value":0,"active-text":"运行","inactive-text":"停用"},null,8,["modelValue","disabled"])]),_:1}),c.automation_installed?(m(),I(Tt,{key:0,modelValue:S.automation_config,"onUpdate:modelValue":e[26]||(e[26]=l=>S.automation_config=l),"main-member-ids":S.member_admin_ids,members:c.member_options,disabled:q.value,onBusy:e[27]||(e[27]=l=>de.value=l)},null,8,["modelValue","main-member-ids","members","disabled"])):(m(),I(d,{key:1,type:"warning","show-icon":"",closable:!1,title:"自动化配置尚未安装",description:"请先在服务端执行 add_wecom_promotion_automation.sql 并部署消费进程及定时调度,即可设置接待时段、标签、备注和欢迎语。当前仍可保存原有分流方案。"}))]),_:1},8,["disabled"])],512)]),_:1},8,["modelValue","title","close-on-press-escape","show-close"]),i(fe,{modelValue:$e.value,"onUpdate:modelValue":e[45]||(e[45]=l=>$e.value=l),title:"批量修改分流方案",width:"1000px",class:"promotion-pool-dialog","destroy-on-close":"","close-on-click-modal":!1,"close-on-press-escape":!T.value&&!oe.value,"show-close":!T.value&&!oe.value},{footer:o(()=>[X.total?(m(),y("span",Gs,"本地配置已保存,正在同步企微 "+r(X.completed)+" / "+r(X.total)+" 个方案",1)):x("",!0),oe.value?(m(),y("span",Zs,"正在处理标签或素材,请稍候")):x("",!0),i(n,{disabled:T.value||oe.value,onClick:e[44]||(e[44]=l=>$e.value=!1)},{default:o(()=>[...e[127]||(e[127]=[v("取消",-1)])]),_:1},8,["disabled"]),i(n,{type:"primary",loading:T.value,disabled:oe.value,onClick:ta},{default:o(()=>[...e[128]||(e[128]=[v("批量保存",-1)])]),_:1},8,["loading","disabled"])]),default:o(()=>[s("div",{ref_key:"batchConfigScroll",ref:it,class:"pool-form-scroll batch-config-scroll"},[i(d,{type:"warning","show-icon":"",closable:!1,title:`将统一修改 ${h.pool_ids.length} 个分流方案`,description:"仅勾选的项目会覆盖到所选方案;未勾选项目保留各方案原值。表单初始值取第一个所选方案。"},null,8,["title"]),Ve.value?(m(),I(d,{key:0,class:"pool-form-error batch-config-error",title:Ve.value,type:"error","show-icon":"",closable:!1,role:"alert"},null,8,["title"])):x("",!0),ce.value.length?(m(),y("div",js,[e[111]||(e[111]=s("strong",null,"已选方案",-1)),(m(!0),y(se,null,ne(ce.value.slice(0,8),l=>(m(),y("span",{key:l.id},r(l.name),1))),128)),ce.value.length>8?(m(),y("small",Os,"另有 "+r(ce.value.length-8)+" 个",1)):x("",!0)])):x("",!0),i(b,{class:"batch-config-form","label-position":"top",disabled:T.value},{default:o(()=>[s("section",Ls,[e[116]||(e[116]=s("h3",null,"基础设置",-1)),s("div",zs,[s("div",{class:B(["batch-field",{"is-disabled":!_.skip_verify}])},[i(u,{modelValue:_.skip_verify,"onUpdate:modelValue":e[30]||(e[30]=l=>_.skip_verify=l),disabled:T.value},{default:o(()=>[...e[112]||(e[112]=[v("批量修改验证方式",-1)])]),_:1},8,["modelValue","disabled"]),i(k,{label:"添加客户时跳过验证"},{default:o(()=>[i(g,{modelValue:h.skip_verify,"onUpdate:modelValue":e[31]||(e[31]=l=>h.skip_verify=l),disabled:!_.skip_verify||T.value,"active-value":1,"inactive-value":0,"active-text":"跳过验证","inactive-text":"需要验证"},null,8,["modelValue","disabled"])]),_:1})],2),s("div",{class:B(["batch-field",{"is-disabled":!_.status}])},[i(u,{modelValue:_.status,"onUpdate:modelValue":e[32]||(e[32]=l=>_.status=l),disabled:T.value},{default:o(()=>[...e[113]||(e[113]=[v("批量修改运行状态",-1)])]),_:1},8,["modelValue","disabled"]),i(k,{label:"运行状态"},{default:o(()=>[i(g,{modelValue:h.status,"onUpdate:modelValue":e[33]||(e[33]=l=>h.status=l),disabled:!_.status||T.value,"active-value":1,"inactive-value":0,"active-text":"运行","inactive-text":"停用"},null,8,["modelValue","disabled"])]),_:1})],2)]),s("div",{class:B(["batch-field",{"is-disabled":!_.fallback_url}])},[i(u,{modelValue:_.fallback_url,"onUpdate:modelValue":e[34]||(e[34]=l=>_.fallback_url=l),disabled:T.value},{default:o(()=>[...e[114]||(e[114]=[v("批量修改兜底获客助手链接",-1)])]),_:1},8,["modelValue","disabled"]),i(k,{label:"兜底获客助手链接"},{default:o(()=>[i(R,{modelValue:h.fallback_url,"onUpdate:modelValue":e[35]||(e[35]=l=>h.fallback_url=l),disabled:!_.fallback_url||T.value,placeholder:"留空表示清除;仅供旧版兼容跳转使用"},null,8,["modelValue","disabled"]),e[115]||(e[115]=s("span",{class:"form-tip"},"新生成的官方直链不经过本站跳转;此项仅兼容旧安装代码。",-1))]),_:1})],2)]),s("section",Fs,[e[120]||(e[120]=s("h3",null,"员工上下线",-1)),e[121]||(e[121]=s("p",{class:"batch-section-tip"},"所选员工会在其已加入的所选方案中统一上线或下线;不属于某个方案的员工不会被加入该方案。为保证方案级原子提交,员工上下线需单独批量保存。",-1)),s("div",{class:B(["batch-field batch-member-status-field",{"is-disabled":!_.member_status}])},[i(u,{modelValue:_.member_status,"onUpdate:modelValue":e[36]||(e[36]=l=>_.member_status=l),disabled:T.value},{default:o(()=>[...e[117]||(e[117]=[v("批量修改员工上线状态",-1)])]),_:1},8,["modelValue","disabled"]),s("div",Rs,[i(k,{label:"目标状态"},{default:o(()=>[i(Te,{modelValue:h.member_status,"onUpdate:modelValue":e[37]||(e[37]=l=>h.member_status=l),disabled:!_.member_status||T.value},{default:o(()=>[i(pe,{value:1},{default:o(()=>[...e[118]||(e[118]=[v("批量上线",-1)])]),_:1}),i(pe,{value:0},{default:o(()=>[...e[119]||(e[119]=[v("批量下线",-1)])]),_:1})]),_:1},8,["modelValue","disabled"])]),_:1}),i(k,{label:"选择员工"},{default:o(()=>[i(ae,{modelValue:h.member_admin_ids,"onUpdate:modelValue":e[38]||(e[38]=l=>h.member_admin_ids=l),data:rt.value,props:_t,"default-expanded-keys":qt.value,"filter-node-method":Nt,"node-key":"value",multiple:"",filterable:"",clearable:"","show-checkbox":"","check-on-click-node":"","collapse-tags":"","collapse-tags-tooltip":"","max-collapse-tags":3,"multiple-limit":100,"render-after-expand":!1,disabled:!_.member_status||T.value,placeholder:"按部门勾选,或搜索姓名 / 部门 / 企微 userid",style:{width:"100%"}},{default:o(({data:l})=>[s("span",{class:B(["member-tree-option",`is-${l.kind}`])},[s("span",qs,r(l.label),1),l.kind==="department"?(m(),y("span",Ks,r(l.member_count)+" 人",1)):(m(),y("span",Js,r(l.detail),1))],2)]),_:1},8,["modelValue","data","default-expanded-keys","disabled"]),s("span",Hs,"勾选部门可全选其下员工;已选 "+r(h.member_admin_ids.length)+" 名。",1)]),_:1})]),_.member_status&&h.member_status===0&&ye.value.length?(m(),I(d,{key:0,type:"warning","show-icon":"",closable:!1,title:`${ye.value[0].name} 至少需要保留一名当前可用的上线员工`,description:ye.value.length>1?`另有 ${ye.value.length-1} 个方案也会没有可用上线员工,请调整选择。`:"请减少下线员工,或先为该方案上线一名当前可用的员工。"},null,8,["title","description"])):x("",!0)],2)]),c.automation_installed?(m(),y("section",Ys,[e[125]||(e[125]=s("h3",null,"自动化设置",-1)),e[126]||(e[126]=s("p",{class:"batch-section-tip"},"先选择要覆盖的分组。未选择的接待、客户或欢迎语设置不会随本次批量操作改变。",-1)),s("div",Ws,[i(u,{modelValue:_.reception,"onUpdate:modelValue":e[39]||(e[39]=l=>_.reception=l),disabled:T.value,border:""},{default:o(()=>[...e[122]||(e[122]=[v("批量修改接待设置",-1)])]),_:1},8,["modelValue","disabled"]),i(u,{modelValue:_.customer,"onUpdate:modelValue":e[40]||(e[40]=l=>_.customer=l),disabled:T.value,border:""},{default:o(()=>[...e[123]||(e[123]=[v("批量修改客户设置",-1)])]),_:1},8,["modelValue","disabled"]),i(u,{modelValue:_.welcome,"onUpdate:modelValue":e[41]||(e[41]=l=>_.welcome=l),disabled:T.value,border:""},{default:o(()=>[...e[124]||(e[124]=[v("批量修改欢迎语设置",-1)])]),_:1},8,["modelValue","disabled"])]),_.reception&&!He.value.length?(m(),I(d,{key:0,type:"warning","show-icon":"",closable:!1,title:"所选方案没有共同主接待成员",description:"仍可统一改为全天接待;若使用按时段接待,时段成员必须同时属于全部所选方案。"})):x("",!0),i(Tt,{modelValue:h.automation_config,"onUpdate:modelValue":e[42]||(e[42]=l=>h.automation_config=l),"main-member-ids":He.value,"backup-excluded-member-ids":ct.value,members:c.member_options,disabled:T.value,"disabled-sections":Kt.value,onBusy:e[43]||(e[43]=l=>oe.value=l)},null,8,["modelValue","main-member-ids","backup-excluded-member-ids","members","disabled","disabled-sections"])])):(m(),I(d,{key:1,type:"warning","show-icon":"",closable:!1,title:"自动化配置尚未安装",description:"本次仍可批量修改验证方式、兜底链接、运行状态和员工上下线;安装自动化数据表后即可批量修改接待、客户和欢迎语设置。"}))]),_:1},8,["disabled"])],512)]),_:1},8,["modelValue","close-on-press-escape","show-close"]),i(fe,{modelValue:Ne.value,"onUpdate:modelValue":e[49]||(e[49]=l=>Ne.value=l),title:"批量设置他人访问操作",width:"620px","destroy-on-close":"","close-on-click-modal":!1,"close-on-press-escape":!ie.value},{footer:o(()=>[i(n,{disabled:ie.value,onClick:e[48]||(e[48]=l=>Ne.value=!1)},{default:o(()=>[...e[134]||(e[134]=[v("取消",-1)])]),_:1},8,["disabled"]),i(n,{type:"primary",loading:ie.value,onClick:aa},{default:o(()=>[v(r(j.action==="grant"?"批量添加":"批量移除"),1)]),_:1},8,["loading"])]),default:o(()=>[i(d,{type:"info","show-icon":"",closable:!1,title:`将设置 ${j.pool_ids.length} 个分流方案`,description:"被添加的账号可以查看并编辑方案、成员规则和浮窗配置;不能删除方案,也不能继续分配操作权限。"},null,8,["title"]),i(b,{class:"access-form","label-position":"top"},{default:o(()=>[i(k,{label:"设置方式",required:""},{default:o(()=>[i(Te,{modelValue:j.action,"onUpdate:modelValue":e[46]||(e[46]=l=>j.action=l),disabled:ie.value},{default:o(()=>[i(pe,{value:"grant"},{default:o(()=>[...e[129]||(e[129]=[v("添加操作人",-1)])]),_:1}),i(pe,{value:"revoke"},{default:o(()=>[...e[130]||(e[130]=[v("移除操作人",-1)])]),_:1})]),_:1},8,["modelValue","disabled"]),e[131]||(e[131]=s("span",{class:"form-tip"},"批量添加不会覆盖各方案已有操作人;批量移除只撤销本次选中的账号。",-1))]),_:1}),i(k,{label:"选择账号",required:""},{default:o(()=>[i(O,{modelValue:j.operator_admin_ids,"onUpdate:modelValue":e[47]||(e[47]=l=>j.operator_admin_ids=l),multiple:"",filterable:"",clearable:"","collapse-tags":"","collapse-tags-tooltip":"","max-collapse-tags":3,"multiple-limit":100,disabled:ie.value,placeholder:"搜索姓名或部门",style:{width:"100%"}},{default:o(()=>[(m(!0),y(se,null,ne(c.operator_options,l=>(m(),I(D,{key:l.id,label:la(l),value:Number(l.id),disabled:j.action==="grant"&&!l.can_grant},null,8,["label","value","disabled"]))),128))]),_:1},8,["modelValue","disabled"]),e[132]||(e[132]=s("span",{class:"form-tip"},"添加时可选择当前管理范围内的启用账号;授权后账号会自动获得本页面入口,且只能访问已授权方案。",-1))]),_:1}),Ie.value.length?(m(),y("div",Qs,[e[133]||(e[133]=s("strong",null,"当前授权",-1)),(m(!0),y(se,null,ne(Ie.value.slice(0,5),l=>(m(),y("div",{key:l.id},[s("span",null,r(l.name),1),s("small",null,r(sa(l)),1)]))),128)),Ie.value.length>5?(m(),y("p",Xs,"另有 "+r(Ie.value.length-5)+" 个方案",1)):x("",!0)])):x("",!0)]),_:1})]),_:1},8,["modelValue","close-on-press-escape"]),i(fe,{modelValue:we.value,"onUpdate:modelValue":e[55]||(e[55]=l=>we.value=l),title:"编辑医助分流规则",width:"560px","destroy-on-close":"","close-on-click-modal":!1},{footer:o(()=>[i(n,{disabled:G.value,onClick:e[54]||(e[54]=l=>we.value=!1)},{default:o(()=>[...e[136]||(e[136]=[v("取消",-1)])]),_:1},8,["disabled"]),i(n,{type:"primary",loading:G.value,onClick:ua},{default:o(()=>[...e[137]||(e[137]=[v("保存规则",-1)])]),_:1},8,["loading"])]),default:o(()=>[i(b,{"label-position":"top"},{default:o(()=>[i(k,{label:"获客医助"},{default:o(()=>[i(R,{"model-value":z.name?`${z.name} · ${z.userid}`:z.userid,readonly:""},null,8,["model-value"])]),_:1}),i(k,{label:"每日获客上限"},{default:o(()=>[i(Ue,{modelValue:z.daily_limit,"onUpdate:modelValue":e[50]||(e[50]=l=>z.daily_limit=l),min:0,max:1e6,disabled:G.value,style:{width:"100%"}},null,8,["modelValue","disabled"]),e[135]||(e[135]=s("span",{class:"form-tip"},"0 表示不限;数量按实际获客回调累计,达到上限后会从企微官方成员范围移除。",-1))]),_:1}),i(k,{label:"有效时间"},{default:o(()=>[i(tt,{modelValue:z.active_range,"onUpdate:modelValue":e[51]||(e[51]=l=>z.active_range=l),type:"datetimerange","range-separator":"至","start-placeholder":"开始时间","end-placeholder":"结束时间","value-format":"YYYY-MM-DD HH:mm:ss",disabled:G.value,style:{width:"100%"}},null,8,["modelValue","disabled"])]),_:1}),i(k,{label:"上线状态"},{default:o(()=>[i(g,{modelValue:z.status,"onUpdate:modelValue":e[52]||(e[52]=l=>z.status=l),"active-value":1,"inactive-value":0,"active-text":"启用","inactive-text":"禁用",disabled:G.value},null,8,["modelValue","disabled"])]),_:1}),i(k,{label:"备注"},{default:o(()=>[i(R,{modelValue:z.remark,"onUpdate:modelValue":e[53]||(e[53]=l=>z.remark=l),type:"textarea",rows:2,maxlength:"255","show-word-limit":"",disabled:G.value},null,8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1},8,["modelValue"])])),[[be,Ae.value]])}}}),rn=Nl(tn,[["__scopeId","data-v-97dc53d7"]]);export{rn as default};
|