2 lines
18 KiB
JavaScript
2 lines
18 KiB
JavaScript
import{_ as se}from"./BasicShowContext.vue_vue_type_script_setup_true_lang-d8f75f51.js";import{_ as G,u as Q}from"./useBaseTable-55ad5e52.js";import{_ as ae}from"./button.vue_vue_type_style_index_0_lang-bd596a6a.js";import{g as oe,a as le,s as re,b as ne,c as ie,d as de,e as ue}from"./pushNotification-dea1f429.js";import{t as O}from"./useDataTime-7241b1ee.js";import{M as ce}from"./index-9b411a61.js";import{I as V}from"./index-2ed626d8.js";import{P as _e}from"./index-8480e7e5.js";import{d as z,g as b,h as $,v as ve,J as pe,o as v,c as f,a as e,b as n,j as T,w as u,e as p,t as l,p as me,k as y,H as W,D as w,F as fe,i as ge}from"./index-885a0812.js";import{_ as be}from"./BasicModal.vue_vue_type_style_index_0_lang-83760d3e.js";import{I as he}from"./Icon-d887a0f8.js";import{B as ye}from"./index-675e28c4.js";import{D as xe,_ as ke}from"./index-dfaa2e01.js";import{S as we}from"./index-d4e74b97.js";import{T as $e}from"./isSymbol-7a58081d.js";import{_ as Se,T as Pe}from"./index-667a03eb.js";import"./updateLocale-d7121807.js";import"./_plugin-vue_export-helper-b63d6b5b.js";import"./vnode-70560f26.js";import"./useState-90bb98a8.js";import"./useMemo-565770c1.js";import"./FormItemContext-9dda29cf.js";import"./lodash-3b12211b.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-a6c897ab.js";import"./index-32515dee.js";import"./Badge-1926c75c.js";import"./isNumeric-3f69e2aa.js";import"./index-572a9242.js";import"./index-7b5ec00b.js";import"./index-22f9b99f.js";import"./styleChecker-d1351987.js";import"./index-2c072252.js";import"./index-49e4db02.js";import"./DialogWrap-bea4ac16.js";import"./pickAttrs-bb97af78.js";import"./css-aae66f86.js";import"./index-89e03fc4.js";import"./toArray-64a01f73.js";import"./SearchOutlined-c7e22afc.js";import"./isMobile-e2e89480.js";import"./index-6c7f8dff.js";import"./isPlainObject-6f4a3c75.js";import"./useRefs-d4aed6f9.js";import"./_flatRest-0a2f05bf.js";const Ie=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:t=>{var P;const i=((P=t==null?void 0:t.record)==null?void 0:P.record)??(t==null?void 0:t.record)??t;return(typeof(i==null?void 0:i.index)=="number"?i.index:0)+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:"has_push",key:"has_push",filterField:"has_push",type:"Select",filterable:!0,filterComponentProps:{options:[{label:"فعال",value:"1"},{label:"غیرفعال",value:"0"}]},customRender:t=>{var g;const i=((g=t==null?void 0:t.record)==null?void 0:g.record)??(t==null?void 0:t.record)??t;return i!=null&&i.has_push?"✓ فعال":"—"}},{title:"زمان ثبتنام",dataIndex:"created_at",key:"created_at",type:"Date",filterable:!0,customRender:t=>{var g;const i=((g=t==null?void 0:t.record)==null?void 0:g.record)??(t==null?void 0:t.record)??t;return i!=null&&i.created_at?O(i.created_at):"-"}}],Re={class:"space-y-4"},Te={class:"grid grid-cols-1 xl:grid-cols-3 gap-4"},Be={class:"xl:col-span-2 space-y-4"},Ce=e("div",{class:"mb-1 text-sm text-gray-600"},"عنوان نوتیفیکیشن *",-1),De=e("div",{class:"mb-1 text-sm text-gray-600"},"متن نوتیفیکیشن *",-1),qe=e("div",{class:"mb-1 text-sm text-gray-600"},"لینک (اختیاری)",-1),Le={class:"flex flex-wrap gap-2"},je={key:0,class:"rounded-lg border border-blue-200 bg-blue-50/60 p-4 space-y-3"},Ne={class:"flex items-center justify-between gap-2"},Ue=e("div",{class:"font-semibold text-gray-800"},"روند ارسال نوتیفیکیشن",-1),Me={class:"grid grid-cols-2 sm:grid-cols-4 gap-2 text-sm"},Ae={class:"bg-white rounded-md border border-gray-100 px-3 py-2"},Ke=e("div",{class:"text-gray-500 text-xs"},"پیشرفت",-1),Fe={class:"font-semibold"},Je={class:"bg-white rounded-md border border-gray-100 px-3 py-2"},Ve=e("div",{class:"text-gray-500 text-xs"},"موفق",-1),Oe={class:"font-semibold text-green-700"},ze={class:"bg-white rounded-md border border-gray-100 px-3 py-2"},Ee=e("div",{class:"text-gray-500 text-xs"},"ناموفق",-1),He={class:"font-semibold text-red-600"},Ge={class:"bg-white rounded-md border border-gray-100 px-3 py-2"},Qe=e("div",{class:"text-gray-500 text-xs"},"درصد",-1),We={class:"font-semibold"},Xe={key:0,class:"text-sm text-gray-600 m-0"},Ye={key:1,class:"text-sm text-red-600 m-0"},Ze={class:"bg-gray-50 rounded-lg p-4 border border-gray-200 space-y-2 text-sm"},et=e("div",{class:"font-semibold text-gray-700 mb-2"},"آمار اعلانها",-1),tt={class:"grid grid-cols-1 gap-2"},st={class:"flex justify-between items-center bg-white rounded-md px-3 py-2 border border-gray-100"},at=e("span",{class:"text-gray-600"},"کاربران با اعلان فعال",-1),ot={class:"text-green-700"},lt={class:"flex justify-between items-center bg-white rounded-md px-3 py-2 border border-gray-100"},rt=e("span",{class:"text-gray-600"},"کل اشتراک push",-1),nt=e("div",{class:"font-semibold text-gray-700 mb-2 pt-2"},"راهنما",-1),it=e("p",{class:"text-gray-600 leading-6 m-0"}," فقط کاربرانی که اعلان را در اپ فعال کردهاند، نوتیف دریافت میکنند. ",-1),dt=e("p",{class:"text-gray-600 leading-6 m-0"}," از فیلتر «اعلان فعال» میتوانید فقط کاربران با اعلان روشن یا خاموش را ببینید. ",-1),ut=e("p",{class:"text-gray-600 leading-6 m-0"}," برای ارسال محدود، کاربران را از جدول پایین انتخاب کنید. ",-1),ct={key:0,class:"pt-2 border-t border-gray-200"},_t=e("div",{class:"font-medium mb-1"},"آخرین ارسال:",-1),vt={key:0,class:"text-amber-700 mb-1"},pt={key:1,class:"text-amber-700 mb-1"},mt={key:2},ft={key:3},gt={key:4},bt={key:5},ht={key:6},yt={key:7},xt={class:"border-t border-gray-200 pt-4"},kt=e("div",{class:"mb-2 text-sm text-gray-600"}," کاربران را جستجو کنید و برای ارسال محدود، آنها را انتخاب کنید. ",-1),wt=z({__name:"PushSendPanel",emits:["sent"],setup(t,{emit:i}){const{TextArea:g}=V,[P]=Q(),d=b({title:"ماچارتا",body:"",url:"/"}),m=b(!1),o=b([]),_=b(null),s=b(null),B=b({uniqueUsers:0,totalSubscriptions:0}),D=b(!1);let q=null;const U=$(()=>({selectedRowKeys:o.value,onChange:a=>{o.value=a.map(String)},preserveSelectedRowKeys:!0})),L=$(()=>{var r;const a=(r=s.value)==null?void 0:r.status;return a==="queued"||a==="running"}),C=$(()=>s.value?Math.max(s.value.total,s.value.processed):0),M=$(()=>{var a;switch((a=s.value)==null?void 0:a.status){case"queued":return"در صف";case"running":return"در حال ارسال";case"completed":return"تمام شد";case"failed":return"ناموفق";default:return""}}),F=$(()=>{var a;switch((a=s.value)==null?void 0:a.status){case"queued":return"bg-amber-100 text-amber-800";case"running":return"bg-blue-100 text-blue-800";case"completed":return"bg-green-100 text-green-800";case"failed":return"bg-red-100 text-red-700";default:return"bg-gray-100 text-gray-600"}}),J=$(()=>{var a,r;return((a=s.value)==null?void 0:a.status)==="failed"?"exception":((r=s.value)==null?void 0:r.status)==="completed"?"success":"active"}),S=$(()=>{var a,r;return((a=s.value)==null?void 0:a.status)==="failed"?"#ef4444":((r=s.value)==null?void 0:r.status)==="completed"?"#16a34a":"#2563eb"});function x(a){return Number(a||0).toLocaleString("fa-IR")}function j(){q&&(clearInterval(q),q=null)}async function A(a){var r,I;try{const c=await ie(a);s.value=c,(c.status==="completed"||c.status==="failed")&&(j(),m.value=!1,_.value&&(_.value={..._.value,queued:!1,sent:c.sent,failed:c.failed,subscribed:c.total}),c.status==="completed"?(w.success(`ارسال تمام شد (${x(c.sent)} موفق، ${x(c.failed)} ناموفق)`),i("sent"),K()):w.error(c.error||"ارسال نوتیفیکیشن ناموفق بود"))}catch(c){j(),m.value=!1,w.error(((I=(r=c==null?void 0:c.response)==null?void 0:r.data)==null?void 0:I.error)||c.message||"خطا در دریافت وضعیت ارسال")}}function N(a){j(),A(a),q=setInterval(()=>{A(a)},1e3)}async function K(){D.value=!0;try{B.value=await le()}finally{D.value=!1}}ve(()=>{K()}),pe(()=>{j()});const Y=b({columns:Ie,api:oe,defaultPageLimit:20,height:"45vh"}),E=$(()=>{var a,r;return!!((a=d.value.title)!=null&&a.trim()&&((r=d.value.body)!=null&&r.trim()))});function Z(){var a,r;return(a=d.value.title)!=null&&a.trim()?(r=d.value.body)!=null&&r.trim()?!0:(w.error("لطفاً متن نوتیفیکیشن را وارد کنید"),!1):(w.error("لطفاً عنوان نوتیفیکیشن را وارد کنید"),!1)}async function H(a){if(!Z())return;if(a==="selected"&&!o.value.length){w.warning("حداقل یک کاربر انتخاب کنید");return}if(L.value){w.warning("یک ارسال در حال انجام است. لطفاً صبر کنید.");return}const r=a==="selected"?`آیا از ارسال نوتیفیکیشن به ${o.value.length} کاربر انتخابشده مطمئن هستید؟`:"آیا از ارسال نوتیفیکیشن به همه کاربران مطمئن هستید؟";ce.confirm({title:"تأیید ارسال نوتیفیکیشن",content:r,okText:"بله، ارسال کن",cancelText:"انصراف",centered:!0,onOk:async()=>{var I,c,R;m.value=!0;try{const h={title:d.value.title.trim(),body:d.value.body.trim(),url:((I=d.value.url)==null?void 0:I.trim())||"/"},k=a==="selected"?await re(h.title,h.body,o.value,h.url):await ne(h.title,h.body,h.url);if(_.value=k,k.queued&&k.jobId){s.value={jobId:k.jobId,status:"queued",kind:a==="selected"?"selected":"broadcast",title:h.title,total:k.subscribed??0,sent:0,failed:0,processed:0,percent:0,message:k.message||"در صف ارسال",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()},w.success(k.message||"نوتیفیکیشن در صف ارسال قرار گرفت"),N(k.jobId),a==="all"&&(d.value.body="");return}w.success(`نوتیفیکیشن ارسال شد (${k.sent} موفق، ${k.failed} ناموفق)`),i("sent"),K(),m.value=!1}catch(h){m.value=!1,w.error(((R=(c=h==null?void 0:h.response)==null?void 0:c.data)==null?void 0:R.error)||h.message||"خطا در ارسال نوتیفیکیشن")}}})}function ee(){return H("all")}function te(){return H("selected")}return(a,r)=>{const I=ae,c=G;return v(),f("div",Re,[e("div",Te,[e("div",Be,[e("div",null,[Ce,n(T(V),{value:d.value.title,"onUpdate:value":r[0]||(r[0]=R=>d.value.title=R),placeholder:"مثلاً: اطلاعیه مهم"},null,8,["value"])]),e("div",null,[De,n(T(g),{value:d.value.body,"onUpdate:value":r[1]||(r[1]=R=>d.value.body=R),placeholder:"متن دلخواه برای کاربران",rows:4,maxlength:500,"show-count":""},null,8,["value"])]),e("div",null,[qe,n(T(V),{value:d.value.url,"onUpdate:value":r[2]||(r[2]=R=>d.value.url=R),placeholder:"/shop یا /matches"},null,8,["value"])]),e("div",Le,[n(I,{type:"primary",loading:m.value,disabled:!E.value||L.value,onClick:ee},{default:u(()=>[p(" ارسال به همه کاربران ")]),_:1},8,["loading","disabled"]),n(I,{type:"primary",ghost:"",loading:m.value,disabled:!E.value||!o.value.length||L.value,onClick:te},{default:u(()=>[p(" ارسال به انتخابشدهها ("+l(o.value.length)+") ",1)]),_:1},8,["loading","disabled"])]),s.value?(v(),f("div",je,[e("div",Ne,[Ue,e("span",{class:me(["text-xs px-2 py-1 rounded-full",F.value])},l(M.value),3)]),n(T(_e),{percent:s.value.percent,status:J.value,"stroke-color":S.value},null,8,["percent","status","stroke-color"]),e("div",Me,[e("div",Ae,[Ke,e("div",Fe,l(x(s.value.processed))+" / "+l(x(C.value)),1)]),e("div",Je,[Ve,e("div",Oe,l(x(s.value.sent)),1)]),e("div",ze,[Ee,e("div",He,l(x(s.value.failed)),1)]),e("div",Ge,[Qe,e("div",We,l(s.value.percent)+"٪",1)])]),s.value.message?(v(),f("p",Xe,l(s.value.message),1)):y("",!0),s.value.error?(v(),f("p",Ye,l(s.value.error),1)):y("",!0)])):y("",!0)]),e("div",Ze,[et,e("div",tt,[e("div",st,[at,e("strong",ot,l(B.value.uniqueUsers)+" نفر",1)]),e("div",lt,[rt,e("strong",null,l(B.value.totalSubscriptions),1)])]),nt,it,dt,ut,_.value?(v(),f("div",ct,[_t,s.value&&L.value?(v(),f("div",vt,"در حال ارسال…")):_.value.queued&&!s.value?(v(),f("div",pt," در صف ارسال (دستهای) ")):y("",!0),s.value?(v(),f("div",mt,[p(" موفق: "),e("strong",null,l(x(s.value.sent)),1)])):y("",!0),s.value?(v(),f("div",ft,[p(" ناموفق: "),e("strong",null,l(x(s.value.failed)),1)])):_.value.queued?y("",!0):(v(),f("div",gt,[p(" موفق: "),e("strong",null,l(_.value.sent),1)])),!s.value&&!_.value.queued?(v(),f("div",bt,[p(" ناموفق: "),e("strong",null,l(_.value.failed),1)])):y("",!0),_.value.targeted!=null?(v(),f("div",ht,[p(" انتخابشده: "),e("strong",null,l(_.value.targeted),1)])):y("",!0),_.value.subscribed!=null?(v(),f("div",yt,[p(" دارای اشتراک push: "),e("strong",null,l(_.value.subscribed),1)])):y("",!0)])):y("",!0)])]),e("div",xt,[kt,n(c,W(Y.value,{"row-selection":U.value,onRegister:T(P)}),null,16,["row-selection","onRegister"])])])}}}),X={custom:"همه کاربران",custom_selected:"کاربران انتخابشده",story:"قصه جدید",book:"کتاب صوتی",product:"محصول جدید",match:"مسابقه جدید"},$t=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,customRender:t=>t.index+1},{title:"شناسه",dataIndex:"id",key:"id",filterable:!1},{title:"عنوان",dataIndex:"title",key:"title",filterable:!1,customRender:t=>{const i=t.record.title||"";return i.length>40?`${i.slice(0,40)}...`:i}},{title:"نوع ارسال",dataIndex:"type",key:"type",filterable:!1,customRender:t=>X[t.record.type]||t.record.type},{title:"موفق",dataIndex:"sent_count",key:"sent_count",filterable:!1,customRender:t=>t.record.sent_count??0},{title:"ناموفق",dataIndex:"failed_count",key:"failed_count",filterable:!1,customRender:t=>t.record.failed_count??0},{title:"تاریخ",dataIndex:"created_at",key:"created_at",filterable:!1,customRender:t=>t.record.created_at?O(t.record.created_at):"-"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function St(t){return X[t]||t}const Pt={class:"gap-2 flex justify-center"},It=e("span",null,"جزئیات ارسال",-1),Rt={class:"whitespace-pre-wrap text-sm"},Tt={class:"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-4"},Bt={class:"rounded-lg border border-green-200 bg-green-50 p-4 text-center"},Ct={class:"text-2xl font-bold text-green-600"},Dt=e("div",{class:"text-sm text-gray-600 mt-1"},"ارسال موفق",-1),qt={class:"rounded-lg border border-red-200 bg-red-50 p-4 text-center"},Lt={class:"text-2xl font-bold text-red-600"},jt=e("div",{class:"text-sm text-gray-600 mt-1"},"ارسال ناموفق",-1),Nt={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 text-center"},Ut={class:"text-2xl font-bold text-gray-700"},Mt=e("div",{class:"text-sm text-gray-600 mt-1"},"مجموع تلاشها",-1),At={key:0,class:"text-sm text-gray-600"},Kt={class:"text-green-600"},Ft={class:"text-green-600"},Jt={class:"text-red-600"},Vt={key:1,class:"text-sm text-gray-500"},Ot=z({__name:"PushHistoryPanel",setup(t,{expose:i}){const[g,P]=Q(),d=b(!1),m=b(!1),o=b(null),_=b({columns:$t,api:de,defaultPageLimit:20,height:"55vh"}),s=$(()=>o.value?(o.value.sent_count||0)+(o.value.failed_count||0):0),B=$(()=>!s.value||!o.value?0:Math.round(o.value.sent_count/s.value*100));function D(C){return C?O(C):"-"}async function q(C){d.value=!0,m.value=!0,o.value=null;try{o.value=await ue(C.id)}finally{m.value=!1}}function U(){d.value=!1,o.value=null}function L(){P()}return i({reload:L}),(C,M)=>{const F=G,J=ye,S=xe,x=ke,j=we,A=be;return v(),f("div",null,[n(F,W(_.value,{onRegister:T(g)}),{action:u(({record:N})=>[e("div",Pt,[n(T($e),{class:"cursor-pointer"},{title:u(()=>[It]),default:u(()=>[n(he,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:K=>q(N)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),n(A,{visible:d.value,"onUpdate:visible":M[0]||(M[0]=N=>d.value=N),title:"جزئیات نوتیفیکیشن ارسالی","custom-footer":"",width:"720px",onClose:U},{footer:u(()=>[n(J,{onClick:U},{default:u(()=>[p("بستن")]),_:1})]),default:u(()=>[n(j,{spinning:m.value},{default:u(()=>[o.value?(v(),f(fe,{key:0},[n(x,{bordered:"",column:2,size:"small",class:"mb-4"},{default:u(()=>[n(S,{label:"شناسه"},{default:u(()=>[p("#"+l(o.value.id),1)]),_:1}),n(S,{label:"نوع ارسال"},{default:u(()=>[p(l(T(St)(o.value.type)),1)]),_:1}),n(S,{label:"تاریخ ارسال"},{default:u(()=>[p(l(D(o.value.created_at)),1)]),_:1}),n(S,{label:"ارسالکننده"},{default:u(()=>[p(l(o.value.admin_name||"-"),1)]),_:1}),n(S,{label:"عنوان",span:2},{default:u(()=>[p(l(o.value.title),1)]),_:1}),n(S,{label:"متن",span:2},{default:u(()=>[e("div",Rt,l(o.value.body),1)]),_:1}),n(S,{label:"لینک",span:2},{default:u(()=>[p(l(o.value.url||"/"),1)]),_:1})]),_:1}),e("div",Tt,[e("div",Bt,[e("div",Ct,l(o.value.sent_count),1),Dt]),e("div",qt,[e("div",Lt,l(o.value.failed_count),1),jt]),e("div",Nt,[e("div",Ut,l(s.value),1),Mt])]),s.value>0?(v(),f("div",At,[p(" نرخ موفقیت: "),e("strong",Kt,l(B.value)+"%",1),p(" — "),e("span",Ft,l(o.value.sent_count)+" موفق",1),p(" / "),e("span",Jt,l(o.value.failed_count)+" ناموفق",1)])):(v(),f("div",Vt," هیچ اشتراک push فعالی برای ارسال یافت نشد. "))],64)):y("",!0)]),_:1},8,["spinning"])]),_:1},8,["visible"])])}}}),zt=e("div",{class:"flex justify-between items-center mb-4"},[e("h2",null,"نوتیفیکیشن Push")],-1),Ns=z({__name:"index",setup(t){const i=b("send"),g=b(null);function P(){var m;(m=g.value)==null||m.reload()}function d(m){var o;m==="history"&&((o=g.value)==null||o.reload())}return(m,o)=>{const _=Se,s=Pe,B=se;return v(),ge(B,null,{default:u(()=>[zt,n(s,{activeKey:i.value,"onUpdate:activeKey":o[0]||(o[0]=D=>i.value=D),onChange:d},{default:u(()=>[n(_,{key:"send",tab:"ارسال نوتیفیکیشن"},{default:u(()=>[n(wt,{onSent:P})]),_:1}),n(_,{key:"history",tab:"سوابق ارسالی"},{default:u(()=>[n(Ot,{ref_key:"historyPanelRef",ref:g},null,512)]),_:1})]),_:1},8,["activeKey"])]),_:1})}}});export{Ns as default};
|