Files
machartaa_admin_dist/dist/assets/index-4be32c94.js
T
2026-10-20 16:52:05 +03:30

2 lines
25 KiB
JavaScript

import{_ as ke}from"./BasicShowContext.vue_vue_type_script_setup_true_lang-2980cfed.js";import{_ as ge}from"./BasicModal.vue_vue_type_style_index_0_lang-aed8f5e4.js";import{u as ne,_ as be}from"./useBaseTable-e7a67916.js";import{_ as Re}from"./button.vue_vue_type_style_index_0_lang-f90e25b2.js";import{g as $e}from"./member-0bd612b3.js";import{I as O,d as se,i as m,j as Q,z as Se,o as b,c as y,b as a,e as l,l as V,w as r,f as p,t as f,n as L,F as he,q as Ce,R as le,H as S,x as Le,V as Te,k as re}from"./index-1ba0f9ec.js";import{t as W}from"./useDataTime-6e234adb.js";import{_ as Pe,v as ce,t as ue}from"./AudienceSegmentPicker.vue_vue_type_script_setup_true_lang-65f61d77.js";import{M as ie}from"./index-ec322234.js";import{I as de,_ as Be}from"./index-aafc0fe2.js";import{C as Ae}from"./index-e22339b6.js";import{I as Me}from"./index-f847a367.js";import{I as pe}from"./Icon-29e38d16.js";import{S as De}from"./index-4bff02a6.js";import{B as Ve}from"./index-8f2b7e91.js";import{D as Ue,_ as Ne}from"./index-5258a30e.js";import{S as ze,_ as Fe}from"./index-e0664925.js";import{T as me}from"./isSymbol-355a1404.js";import{_ as Oe,T as qe}from"./index-f22a4554.js";import"./updateLocale-a8654270.js";import"./shallowequal-e0d9eafb.js";import"./_plugin-vue_export-helper-31e07528.js";import"./vnode-c4e67237.js";import"./useState-dcd360f8.js";import"./useMemo-ee45fb46.js";import"./FormItemContext-33ef1221.js";import"./omit-f5d28cd3.js";import"./lodash-27f814e6.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-36a1ea6e.js";import"./index-c8127d4e.js";import"./Badge-8a8eeb58.js";import"./isNumeric-3f69e2aa.js";import"./index-a8579634.js";import"./index-73cafb1e.js";import"./index-175b83cf.js";import"./userSegments-081d8da2.js";import"./dayjs-1cfa00b1.js";import"./index-0d716d4e.js";import"./DialogWrap-394d7eb0.js";import"./pickAttrs-0ddf9a54.js";import"./styleChecker-19ce40ea.js";import"./SearchOutlined-95278fe5.js";import"./isPlainObject-e945bc1f.js";import"./index-876da578.js";import"./index-3f6d5caa.js";import"./LeftOutlined-93011b30.js";import"./css-aae66f86.js";import"./toArray-41940180.js";import"./isMobile-e2e89480.js";import"./useRefs-5e33302c.js";import"./_flatRest-7877cdf8.js";const fe=async t=>(await O.post("/admin/voice/preview",t)).data,Ke=async t=>(await O.post("/admin/voice/test",t)).data,_e=async t=>(await O.post("/admin/voice/campaigns/start",t)).data,je=async t=>(await O.post(`/admin/voice/campaigns/${t}/continue-batch`)).data,Ee=async t=>{var $;const c=await O.get("/admin/voice/campaigns",{params:{page:t.page,limit:t.limit,search:t.search}}),x=t.page||1,R=t.limit||20,w=(x-1)*R;return{rows:(c.data||[]).map((h,g)=>({...h,index:w+g})),total:c.total??(($=c.data)==null?void 0:$.length)??0,query:{...t,total:c.total??0,page:x,limit:R}}},ve=async(t,c)=>(await O.get(`/admin/voice/campaigns/${t}`,{params:c})).data,He=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:t=>t.index+1},{title:"نام",dataIndex:"first_name",key:"first_name",filterable:!0},{title:"نام خانوادگی",dataIndex:"last_name",key:"last_name",filterable:!0},{title:"شماره همراه",dataIndex:"phone",key:"phone",filterable:!0},{title:"زمان ثبت‌نام",dataIndex:"created_at",key:"created_at",type:"Date",filterable:!0,customRender:t=>t.record.created_at?W(t.record.created_at):"-"}],Je={class:"grid grid-cols-1 xl:grid-cols-3 gap-4 mb-4"},Ge={class:"xl:col-span-2 space-y-4"},Qe=a("div",{class:"mb-1 text-sm text-gray-600"},"شناسه فایل صوتی (fileId) *",-1),We=a("p",{class:"text-xs text-gray-500 mt-1 mb-0"},[p(" فایل صوتی باید قبلاً در "),a("a",{href:"https://ghasedak.me",target:"_blank",rel:"noopener noreferrer"},"پنل قاصدک"),p(" بارگذاری و تأیید شده باشد. شناسه همان فایل را اینجا وارد کنید. ")],-1),Xe=a("div",{class:"mb-1 text-sm text-gray-600"},"عنوان کمپین (اختیاری)",-1),Ye={class:"flex flex-wrap gap-4 items-center"},Ze={class:"flex flex-wrap gap-2"},et={class:"bg-gray-50 rounded-lg p-4 border border-gray-200 space-y-2 text-sm"},tt=a("div",{class:"font-semibold text-gray-700 mb-2"},"خلاصه ارسال",-1),at={key:0},nt={key:0},lt={key:1,class:"text-amber-600 mt-1"},it={key:0},st={key:1,class:"text-gray-500"},ot={key:2,class:"pt-2 border-t border-gray-200"},rt=a("div",{class:"font-medium mb-1"},"نمونه گیرندگان:",-1),ct={class:"space-y-1 text-xs text-gray-600"},ut={key:3,class:"pt-2 border-t border-gray-200"},dt=a("div",{class:"font-medium mb-1"},"آخرین کمپین:",-1),pt={class:"text-blue-600 mt-1"},mt={class:"border-t border-gray-200 pt-4"},ft=a("div",{class:"mb-2 text-sm text-gray-600"}," کاربران را فیلتر کنید و گیرندگان مورد نظر را انتخاب کنید. فقط کاربرانی که شماره موبایل دارند نمایش داده می‌شوند. ",-1),_t={class:"space-y-3"},vt=a("div",{class:"mb-1 text-sm text-gray-600"},"شماره موبایل",-1),gt=a("div",{class:"text-xs text-gray-500"}," فایل صوتی با همان fileId واردشده در فرم اصلی برای این شماره پخش می‌شود. ",-1),bt=se({__name:"SendPanel",emits:["campaign-started"],setup(t,{emit:c}){const[x,R]=ne(),w=m(null),$=m(""),h=m(!0),g=m(null),M=m(!1),i=m(!1),C=m(null),T=m(!1),A=m(""),F=m(!1),I=m([]),U=m({}),N=m({segments:[],inactiveDays:7,subscriberInactiveDays:3}),q=m(!1),K=m(""),D=Q(()=>{const u=Number(w.value);return Number.isFinite(u)&&u>0}),X=Q(()=>({selectedRowKeys:I.value,onChange:u=>{I.value=u.map(String)},preserveSelectedRowKeys:!0})),Y=m({columns:He,api:async u=>{const n={...u,filters:[...u.filters||[],{field:"phone",op:"nn",value:!0,cr:"and",type:"switch",hidden:!0}]};return h.value&&n.filters.push({field:"first_name",op:"nn",value:!0,cr:"and",type:"switch",hidden:!0},{field:"last_name",op:"nn",value:!0,cr:"and",type:"switch",hidden:!0}),!n.sort&&!n.order&&(n.order="-created_at"),U.value=n,$e(n)},defaultPageLimit:20,height:"45vh"});Se(h,()=>{g.value=null,R()});function z(){return D.value?Math.floor(Number(w.value)):(S.warning("شناسه فایل صوتی (fileId) را وارد کنید"),null)}function j(u){var n;return{fileId:Math.floor(Number(w.value)),title:$.value.trim()||void 0,registrationComplete:h.value,search:U.value.search||void 0,filters:(n=U.value.filters)==null?void 0:n.filter(_=>!_.hidden),sort:U.value.sort||void 0,order:U.value.order||void 0,mode:u,userIds:u==="selected"?I.value:void 0}}async function Z(){var u,n;if(z()){M.value=!0;try{g.value=await fe(j("filtered"))}catch(_){S.error(((n=(u=_==null?void 0:_.response)==null?void 0:u.data)==null?void 0:n.error)||"خطا در پیش‌نمایش")}finally{M.value=!1}}}async function E(){var u,n;if(z()){if(!A.value.trim()){S.warning("شماره موبایل الزامی است");return}F.value=!0;try{await Ke({...j("filtered"),phone:A.value.trim()}),S.success("پیام صوتی تستی ارسال شد"),T.value=!1}catch(_){S.error(((n=(u=_==null?void 0:_.response)==null?void 0:u.data)==null?void 0:n.error)||"ارسال تستی ناموفق بود")}finally{F.value=!1}}}async function H(u){if(!z())return;if(u==="selected"&&!I.value.length){S.warning("حداقل یک کاربر انتخاب کنید");return}const n=u==="selected"?`آیا از ارسال پیام صوتی به ${I.value.length} کاربر انتخاب‌شده مطمئن هستید؟`:"آیا از ارسال پیام صوتی به همه کاربران فیلترشده مطمئن هستید؟";return new Promise(_=>{ie.confirm({title:"تأیید ارسال پیام صوتی",content:n,okText:"بله، ارسال کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var e,s;i.value=!0,C.value=null;try{const o=await _e(j(u));C.value=o,c("campaign-started",o.campaignId),S.success(o.hasMoreBatches?`کمپین #${o.campaignId}: دسته اول ${o.totalRecipients.toLocaleString("fa-IR")} نفر — پس از اتمام، ${(o.remainingRecipients||0).toLocaleString("fa-IR")} نفر باقی‌مانده با تأیید ارسال می‌شود`:`کمپین #${o.campaignId} با ${o.totalRecipients.toLocaleString("fa-IR")} گیرنده در پس‌زمینه ارسال می‌شود`)}catch(o){S.error(((s=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:s.error)||"شروع کمپین ناموفق بود")}finally{i.value=!1,_()}},onCancel:()=>_()})})}function ee(){return H("selected")}function J(){return H("filtered")}async function G(){var _,e;if(!z())return;const u={...N.value,includeUserIds:I.value},n=ce(u);if(n){S.warning(n);return}q.value=!0,K.value="";try{const s=ue(u),o=await fe({fileId:Math.floor(Number(w.value)),title:$.value.trim()||void 0,registrationComplete:h.value,mode:"segment",...s});g.value=o;const k=I.value.length>0?` (+ ${I.value.length.toLocaleString("fa-IR")} کاربر از جدول)`:"";K.value=o.cappedAt?`گیرندگان این دسته‌ها: ${o.totalRecipients.toLocaleString("fa-IR")} شماره${k} — دسته اول ${(o.firstBatchSize||o.cappedAt).toLocaleString("fa-IR")} نفر؛ باقی‌مانده پس از تأیید`:`گیرندگان این دسته‌ها: ${o.totalRecipients.toLocaleString("fa-IR")} شماره${k}`}catch(s){console.log(s),S.error(((e=(_=s==null?void 0:s.response)==null?void 0:_.data)==null?void 0:e.error)||"خطا در پیش‌نمایش")}finally{q.value=!1}}async function te(){if(!z())return;const u={...N.value,includeUserIds:I.value},n=ce(u);if(n){S.warning(n);return}const _=N.value.segments.length,e=I.value.length,s=e>0?`ارسال صوتی به ${_} دسته (OR) به‌علاوه ${e} کاربر انتخاب‌شده؟`:`ارسال صوتی به ${_} دسته مخاطب (اتحاد / OR)؟`;return new Promise(o=>{ie.confirm({title:"تأیید ارسال پیام صوتی",content:s,okText:"بله، ارسال کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var k,d;i.value=!0,C.value=null;try{const v=ue(u),P=await _e({fileId:Math.floor(Number(w.value)),title:$.value.trim()||void 0,registrationComplete:h.value,mode:"segment",...v});C.value=P,c("campaign-started",P.campaignId),S.success(P.hasMoreBatches?`کمپین #${P.campaignId}: دسته اول ${P.totalRecipients.toLocaleString("fa-IR")} نفر — پس از اتمام، ${(P.remainingRecipients||0).toLocaleString("fa-IR")} نفر باقی‌مانده با تأیید ارسال می‌شود`:`کمپین #${P.campaignId} با ${P.totalRecipients.toLocaleString("fa-IR")} گیرنده در پس‌زمینه ارسال می‌شود`)}catch(v){S.error(((d=(k=v==null?void 0:v.response)==null?void 0:k.data)==null?void 0:d.error)||"شروع کمپین ناموفق بود")}finally{i.value=!1,o()}},onCancel:()=>o()})})}return(u,n)=>{var o,k;const _=Re,e=be,s=ge;return b(),y("div",null,[a("div",Je,[a("div",Ge,[a("div",null,[Qe,l(V(Me),{value:w.value,"onUpdate:value":n[0]||(n[0]=d=>w.value=d),class:"w-full",min:1,precision:0,placeholder:"مثال: 12345"},null,8,["value"]),We]),a("div",null,[Xe,l(V(de),{value:$.value,"onUpdate:value":n[1]||(n[1]=d=>$.value=d),placeholder:"مثلاً اطلاع‌رسانی صوتی جشنواره"},null,8,["value"])]),a("div",Ye,[l(V(Ae),{checked:h.value,"onUpdate:checked":n[2]||(n[2]=d=>h.value=d)},{default:r(()=>[p(" فقط کاربران با ثبت‌نام کامل (نام و نام خانوادگی) ")]),_:1},8,["checked"])]),a("div",Ze,[l(_,{loading:M.value,onClick:Z},{default:r(()=>[p(" پیش‌نمایش گیرندگان ")]),_:1},8,["loading"]),l(_,{onClick:n[3]||(n[3]=d=>T.value=!0)},{default:r(()=>[p(" ارسال تست ")]),_:1}),l(_,{type:"primary",loading:i.value,disabled:!D.value,onClick:ee},{default:r(()=>[p(" ارسال به انتخاب‌شده‌ها ("+f(I.value.length)+") ",1)]),_:1},8,["loading","disabled"]),l(_,{type:"primary",ghost:"",loading:i.value,disabled:!D.value,onClick:J},{default:r(()=>[p(" ارسال به همه فیلترشده‌ها ")]),_:1},8,["loading","disabled"])]),l(Pe,{modelValue:N.value,"onUpdate:modelValue":n[4]||(n[4]=d=>N.value=d),"include-user-count":I.value.length,"preview-loading":q.value,sending:i.value,disabled:!D.value,"preview-text":K.value,"title-text":"ارسال صوتی به دسته مخاطب","send-label":"ارسال صوتی به دسته‌ها",onPreview:G,onSend:te},null,8,["modelValue","include-user-count","preview-loading","sending","disabled","preview-text"])]),a("div",et,[tt,g.value?(b(),y("div",at,[a("div",null,[p("تعداد گیرنده: "),a("strong",null,f(g.value.totalRecipients),1)]),a("div",null,[p("شماره یکتا: "),a("strong",null,f(g.value.uniquePhones),1)]),w.value?(b(),y("div",nt,[p("fileId: "),a("strong",null,f(w.value),1)])):L("",!0),g.value.cappedAt?(b(),y("div",lt,[p(" مخاطبان بیشتر از "+f(g.value.cappedAt.toLocaleString("fa-IR"))+" نفر هستند. ابتدا "+f((g.value.firstBatchSize||g.value.cappedAt).toLocaleString("fa-IR"))+" نفر ارسال می‌شود؛ سپس با تأیید شما دسته بعدی ",1),g.value.remainingAfterFirstBatch?(b(),y("span",it," ("+f(g.value.remainingAfterFirstBatch.toLocaleString("fa-IR"))+" باقی‌مانده) ",1)):L("",!0),p(" ارسال می‌شود. ")])):L("",!0)])):(b(),y("div",st," برای مشاهده تعداد گیرندگان، پیش‌نمایش بگیرید. ")),(k=(o=g.value)==null?void 0:o.samples)!=null&&k.length?(b(),y("div",ot,[rt,a("ul",ct,[(b(!0),y(he,null,Ce(g.value.samples,d=>(b(),y("li",{key:d.id},f(d.first_name)+" "+f(d.last_name)+" — "+f(d.phone),1))),128))])])):L("",!0),C.value?(b(),y("div",ut,[dt,a("div",null,[p("کمپین: "),a("strong",null,"#"+f(C.value.campaignId),1)]),a("div",null,[p("گیرندگان: "),a("strong",null,f(C.value.totalRecipients),1)]),a("div",pt,f(C.value.message),1)])):L("",!0)])]),a("div",mt,[ft,l(e,le(Y.value,{"row-selection":X.value,onRegister:V(x)}),null,16,["row-selection","onRegister"])]),l(s,{visible:T.value,"onUpdate:visible":n[6]||(n[6]=d=>T.value=d),title:"ارسال پیام صوتی تست",onOk:E,onCancel:n[7]||(n[7]=d=>T.value=!1),"confirm-loading":F.value},{default:r(()=>[a("div",_t,[a("div",null,[vt,l(V(de),{value:A.value,"onUpdate:value":n[5]||(n[5]=d=>A.value=d),placeholder:"مثال: 09123456789"},null,8,["value"])]),gt])]),_:1},8,["visible","confirm-loading"])])}}}),ht={pending:"در انتظار",sending:"در حال ارسال",completed:"تکمیل شده",failed:"ناموفق",awaiting_next_batch:"منتظر تأیید دسته بعدی"},yt={selected:"انتخاب‌شده",filtered:"فیلترشده",segment:"دسته مخاطب"},xt=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,customRender:t=>t.index+1},{title:"شناسه",dataIndex:"id",key:"id",filterable:!1},{title:"شناسه فایل صوتی (fileId)",dataIndex:"file_id",key:"file_id",filterable:!1,customRender:t=>t.record.file_id},{title:"عنوان / توضیحات",dataIndex:"title",key:"title",filterable:!1,customRender:t=>{const c=t.record.title||t.record.description||"-";return c.length>50?`${c.slice(0,50)}...`:c}},{title:"گیرندگان",dataIndex:"total_recipients",key:"total_recipients",filterable:!1,customRender:t=>{const c=t.record,x=c.total_recipients||0,R=c.audience_total||x;return R>x?`${x.toLocaleString("fa-IR")} / ${R.toLocaleString("fa-IR")}`:x}},{title:"پیشرفت",dataIndex:"sent_count",key:"progress",filterable:!1,customRender:t=>{const c=t.record;if(!c.total_recipients)return"-";const x=(c.sent_count||0)+(c.failed_count||0),R=Math.round(x/c.total_recipients*100);return`${x}/${c.total_recipients} (${R}%)`}},{title:"ناموفق",dataIndex:"failed_count",key:"failed_count",filterable:!1},{title:"نوع ارسال",dataIndex:"send_mode",key:"send_mode",filterable:!1,customRender:t=>yt[t.record.send_mode]||t.record.send_mode},{title:"وضعیت",dataIndex:"status",key:"status",filterable:!1,customRender:t=>ht[t.record.status]||t.record.status},{title:"تاریخ",dataIndex:"created_at",key:"created_at",filterable:!1,customRender:t=>t.record.created_at?W(t.record.created_at):"-"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],It={pending:"در انتظار",sent:"ارسال شده",failed:"ناموفق"},wt=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,customRender:t=>t.index+1},{title:"نام",dataIndex:"first_name",key:"first_name",filterable:!1},{title:"نام خانوادگی",dataIndex:"last_name",key:"last_name",filterable:!1},{title:"شماره",dataIndex:"phone",key:"phone",filterable:!1},{title:"وضعیت",dataIndex:"status",key:"status",filterable:!1,customRender:t=>It[t.record.status]||t.record.status},{title:"زمان ارسال",dataIndex:"sent_at",key:"sent_at",filterable:!1,customRender:t=>t.record.sent_at?W(t.record.sent_at):"-"},{title:"شناسه پیگیری",dataIndex:"client_reference_id",key:"client_reference_id",filterable:!1,customRender:t=>t.record.client_reference_id||"-"},{title:"خطا",dataIndex:"error_message",key:"error_message",filterable:!1,customRender:t=>t.record.error_message||"-"}],kt={key:0,class:"mb-3 text-sm text-blue-600 flex items-center gap-2"},Rt=a("span",null,"یک یا چند کمپین در حال ارسال است — جدول هر ۵ ثانیه به‌روز می‌شود.",-1),$t={class:"gap-2 flex justify-center"},St=a("span",null,"جزئیات کمپین",-1),Ct=a("span",null,"ارسال دسته بعدی",-1),Lt={class:"flex justify-end gap-2 w-full flex-wrap"},Tt={key:0},Pt={key:0,class:"text-gray-500 mr-1"},Bt={class:"text-green-600"},At={class:"text-red-600"},Mt={key:0,class:"text-gray-500 mr-2"},Dt={key:0,class:"mb-3 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-800"},Vt={key:1,class:"mb-3 rounded-md border border-blue-200 bg-blue-50 px-3 py-2 text-sm text-blue-800"},Ut={class:"flex flex-wrap gap-2 items-center mb-3"},Nt=a("span",{class:"text-sm text-gray-600"},"فیلتر وضعیت گیرندگان:",-1),zt=se({__name:"CampaignsPanel",setup(t,{expose:c}){const[x,R]=ne(),[w,$]=ne(),h=m(!1),g=m(!1),M=m(!1),i=m(null),C=m(null),T=m(),A=m(""),F=m(!1);let I=null;const U={pending:"در انتظار",sending:"در حال ارسال",completed:"تکمیل شده",failed:"ناموفق",awaiting_next_batch:"منتظر تأیید دسته بعدی"},N={selected:"انتخاب‌شده",filtered:"فیلترشده",segment:"دسته مخاطب"},q=m({columns:xt,api:X,defaultPageLimit:20,height:"55vh"}),K=Q(()=>{var s;if(!((s=i.value)!=null&&s.campaign))return 0;const e=i.value.campaign;return Math.max(e.total_recipients-e.sent_count-e.failed_count,0)}),D=Q(()=>{var s;const e=(s=i.value)==null?void 0:s.campaign;return e?!!e.can_continue_batch&&(e.remaining_recipients||0)>0:!1});async function X(e){const s=await Ee(e);return F.value=s.rows.some(o=>o.status==="sending"||o.status==="awaiting_next_batch"),s}const oe=m({columns:wt,api:Z,defaultPageLimit:20,height:"40vh",showOptionHeader:!1});function Y(e){return U[e]||e}function z(e){return N[e]||e}function j(e){return e?W(e):"-"}async function Z(e){if(!C.value)return{rows:[],total:0,query:{...e,total:0}};const s=await ve(C.value,{page:e.page,limit:e.limit,status:T.value,search:A.value||e.search||void 0});i.value=s;const o=e.page||1,k=e.limit||20,d=(o-1)*k;return{rows:s.recipients.rows.map((v,P)=>({...v,index:d+P})),total:s.recipients.total,query:{...e,total:s.recipients.total,page:o,limit:k}}}async function E(e){g.value=!0;try{C.value=e,i.value=await ve(e,{page:1,limit:20,status:T.value,search:A.value||void 0}),await $()}finally{g.value=!1}}function H(e){T.value=void 0,A.value="",h.value=!0,E(e.id)}async function ee(e){T.value=void 0,A.value="",h.value=!0,await E(e.id),D.value&&u()}function J(){h.value=!1,i.value=null,C.value=null}function G(){$()}function te(){R()}function u(){var o;const e=(o=i.value)==null?void 0:o.campaign;if(!(e!=null&&e.id)||!D.value)return;const s=e.next_batch_size||Math.min(1e4,e.remaining_recipients||0);ie.confirm({title:"تأیید ارسال دسته بعدی",content:`آیا از ارسال دسته بعدی (${s.toLocaleString("fa-IR")} نفر از ${(e.remaining_recipients||0).toLocaleString("fa-IR")} باقی‌مانده) مطمئن هستید؟`,okText:"بله، ارسال کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var k,d;M.value=!0;try{const v=await je(e.id);S.success(v.message),await E(e.id),R()}catch(v){throw S.error(((d=(k=v==null?void 0:v.response)==null?void 0:k.data)==null?void 0:d.error)||"ارسال دسته بعدی ناموفق بود"),v}finally{M.value=!1}}})}function n(){I||(I=setInterval(()=>{var e,s;R(),h.value&&C.value&&(((e=i.value)==null?void 0:e.campaign.status)==="sending"||((s=i.value)==null?void 0:s.campaign.status)==="awaiting_next_batch")&&$()},5e3))}function _(){I&&(clearInterval(I),I=null)}return Le(()=>{n()}),Te(()=>{_()}),c({reload:te}),(e,s)=>{const o=De,k=be,d=Ve,v=Ue,P=Ne,ae=ze,ye=Fe,xe=Be,Ie=ge;return b(),y("div",null,[F.value?(b(),y("div",kt,[l(o,{size:"small"}),Rt])):L("",!0),l(k,le(q.value,{onRegister:V(x)}),{action:r(({record:B})=>[a("div",$t,[l(V(me),{class:"cursor-pointer"},{title:r(()=>[St]),default:r(()=>[l(pe,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:we=>H(B)},null,8,["onClick"])]),_:2},1024),B.can_continue_batch?(b(),re(V(me),{key:0,class:"cursor-pointer"},{title:r(()=>[Ct]),default:r(()=>[l(pe,{icon:"vuesax-linear:send-2",color:"#D97706",onClick:we=>ee(B)},null,8,["onClick"])]),_:2},1024)):L("",!0)])]),_:1},16,["onRegister"]),l(Ie,{visible:h.value,"onUpdate:visible":s[2]||(s[2]=B=>h.value=B),title:"جزئیات کمپین پیام صوتی","custom-footer":"",width:"90%",onClose:J},{footer:r(()=>[a("div",Lt,[D.value?(b(),re(d,{key:0,type:"primary",loading:M.value,onClick:u},{default:r(()=>{var B;return[p(" ارسال دسته بعدی "),(B=i.value)!=null&&B.campaign.next_batch_size?(b(),y("span",Tt," ("+f(i.value.campaign.next_batch_size.toLocaleString("fa-IR"))+" نفر) ",1)):L("",!0)]}),_:1},8,["loading"])):L("",!0),l(d,{onClick:J},{default:r(()=>[p("بستن")]),_:1})])]),default:r(()=>[l(o,{spinning:g.value},{default:r(()=>[i.value?(b(),y(he,{key:0},[l(P,{bordered:"",column:2,size:"small",class:"mb-4"},{default:r(()=>[l(v,{label:"شناسه کمپین"},{default:r(()=>[p("#"+f(i.value.campaign.id),1)]),_:1}),l(v,{label:"وضعیت"},{default:r(()=>[p(f(Y(i.value.campaign.status)),1)]),_:1}),l(v,{label:"تعداد گیرندگان"},{default:r(()=>[a("span",null,f(i.value.campaign.total_recipients.toLocaleString("fa-IR")),1),(i.value.campaign.audience_total||0)>i.value.campaign.total_recipients?(b(),y("span",Pt," از "+f(i.value.campaign.audience_total.toLocaleString("fa-IR"))+" مخاطب ",1)):L("",!0)]),_:1}),l(v,{label:"موفق / ناموفق"},{default:r(()=>[a("span",Bt,f(i.value.campaign.sent_count),1),p(" / "),a("span",At,f(i.value.campaign.failed_count),1),i.value.campaign.status==="sending"?(b(),y("span",Mt," ("+f(K.value)+" در انتظار) ",1)):L("",!0)]),_:1}),l(v,{label:"نوع ارسال"},{default:r(()=>[p(f(z(i.value.campaign.send_mode)),1)]),_:1}),l(v,{label:"تاریخ ایجاد"},{default:r(()=>[p(f(j(i.value.campaign.created_at)),1)]),_:1}),l(v,{label:"ایجادکننده"},{default:r(()=>[p(f(i.value.campaign.created_by_admin_name||"-"),1)]),_:1}),l(v,{label:"شناسه فایل صوتی"},{default:r(()=>[p(f(i.value.campaign.file_id),1)]),_:1}),l(v,{label:"عنوان",span:2},{default:r(()=>[p(f(i.value.campaign.title||i.value.campaign.description||"-"),1)]),_:1})]),_:1}),D.value?(b(),y("div",Dt,[p(" مخاطب این کمپین دوباره محاسبه شد و شماره‌های ارسال‌شده کم شدند. "),a("strong",null,f((i.value.campaign.remaining_recipients||0).toLocaleString("fa-IR")),1),p(" گیرنده باقی مانده‌اند. با تأیید شما حداکثر "+f((i.value.campaign.batch_limit||1e4).toLocaleString("fa-IR"))+" نفر بعدی ارسال می‌شود. ",1)])):i.value.campaign.needs_remaining_probe?(b(),y("div",Vt," این کمپین احتمالاً به سقف ۱۰٬۰۰۰ رسیده بود. در حال بررسی باقی‌مانده مخاطب… ")):L("",!0),a("div",Ut,[Nt,l(ye,{value:T.value,"onUpdate:value":s[0]||(s[0]=B=>T.value=B),"allow-clear":"",placeholder:"همه",style:{width:"160px"},onChange:G},{default:r(()=>[l(ae,{value:"sent"},{default:r(()=>[p("ارسال شده")]),_:1}),l(ae,{value:"failed"},{default:r(()=>[p("ناموفق")]),_:1}),l(ae,{value:"pending"},{default:r(()=>[p("در انتظار")]),_:1})]),_:1},8,["value"]),l(xe,{value:A.value,"onUpdate:value":s[1]||(s[1]=B=>A.value=B),placeholder:"جستجو نام یا شماره",style:{width:"220px"},onSearch:G},null,8,["value"])]),l(k,le(oe.value,{onRegister:V(w)}),null,16,["onRegister"])],64)):L("",!0)]),_:1},8,["spinning"])]),_:1},8,["visible"])])}}}),Ft=a("div",{class:"flex justify-between items-center mb-4"},[a("h2",null,"پیام صوتی قاصدک")],-1),Na=se({__name:"index",setup(t){const c=m("send"),x=m(null);function R(){var w;c.value="campaigns",(w=x.value)==null||w.reload()}return(w,$)=>{const h=Oe,g=qe,M=ke;return b(),y("div",null,[l(M,null,{default:r(()=>[Ft,l(g,{activeKey:c.value,"onUpdate:activeKey":$[0]||($[0]=i=>c.value=i)},{default:r(()=>[l(h,{key:"send",tab:"ارسال پیام صوتی"},{default:r(()=>[l(bt,{onCampaignStarted:R})]),_:1}),l(h,{key:"campaigns",tab:"کمپین‌های ارسالی"},{default:r(()=>[l(zt,{ref_key:"campaignsPanelRef",ref:x},null,512)]),_:1})]),_:1},8,["activeKey"])]),_:1})])}}});export{Na as default};