Files
machartaa_admin_dist/dist/assets/index-d1a25dde.js
T
2026-07-16 18:05:28 +03:30

2 lines
13 KiB
JavaScript

import{_ as z}from"./BasicShowContext.vue_vue_type_script_setup_true_lang-362ae620.js";import{_ as V,u as A}from"./useBaseTable-a06f0b5f.js";import{_ as J,B as O}from"./button.vue_vue_type_style_index_0_lang-1a640d2e.js";import{g as G,a as Q,s as W,b as X,c as Y,d as Z}from"./pushNotification-d063ae47.js";import{t as j}from"./useDataTime-9ed06ff7.js";import{M as ee}from"./index-2ebbed2a.js";import{I as K}from"./index-06f6280e.js";import{d as F,g as m,h as N,v as te,o as g,c as h,a as e,b as a,j as k,w as n,e as c,t as i,k as L,H as q,D as T,F as se,i as ae}from"./index-413b1e47.js";import{_ as le}from"./BasicModal.vue_vue_type_style_index_0_lang-62717bd0.js";import{I as oe}from"./Icon-d2ec8cda.js";import{D as ne,_ as re}from"./index-110c3a1c.js";import{S as ie}from"./index-2a1cc68a.js";import{T as de}from"./isSymbol-86ce36f2.js";import{T as ue,a as ce}from"./index-59759ca5.js";import"./updateLocale-7edd5cff.js";import"./_plugin-vue_export-helper-45f37eb1.js";import"./vnode-66c98e4d.js";import"./useState-90ae9741.js";import"./index-7af4b7ee.js";import"./toArray-4793eb05.js";import"./FormItemContext-faddafe7.js";import"./pickAttrs-40baade3.js";import"./lodash-a9e7f026.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-5ce452ba.js";import"./index-ed8959d3.js";import"./isNumeric-3f69e2aa.js";import"./index-dd520fef.js";import"./index-dfbe7e5c.js";import"./styleChecker-51e38a61.js";import"./index-85f33ea5.js";import"./LeftOutlined-7f9e3805.js";import"./css-aae66f86.js";import"./DialogWrap-7069c158.js";import"./index-d42da2d6.js";import"./isPlainObject-e0f2efff.js";import"./useRefs-32d594a2.js";import"./_flatRest-c0f9ecce.js";const _e=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,customRender:t=>{var d;return((t==null?void 0:t.index)??((d=t==null?void 0:t.record)==null?void 0:d.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 d;const r=((d=t==null?void 0:t.record)==null?void 0:d.record)??(t==null?void 0:t.record)??t;return r!=null&&r.has_push?"✓ فعال":"—"}},{title:"زمان ثبت‌نام",dataIndex:"created_at",key:"created_at",type:"Date",filterable:!0,customRender:t=>{var d;const r=((d=t==null?void 0:t.record)==null?void 0:d.record)??(t==null?void 0:t.record)??t;return r!=null&&r.created_at?j(r.created_at):"-"}}],pe={class:"space-y-4"},me={class:"grid grid-cols-1 xl:grid-cols-3 gap-4"},fe={class:"xl:col-span-2 space-y-4"},ve=e("div",{class:"mb-1 text-sm text-gray-600"},"عنوان نوتیفیکیشن *",-1),be=e("div",{class:"mb-1 text-sm text-gray-600"},"متن نوتیفیکیشن *",-1),ge=e("div",{class:"mb-1 text-sm text-gray-600"},"لینک (اختیاری)",-1),he={class:"flex flex-wrap gap-2"},ye={class:"bg-gray-50 rounded-lg p-4 border border-gray-200 space-y-2 text-sm"},xe=e("div",{class:"font-semibold text-gray-700 mb-2"},"آمار اعلان‌ها",-1),ke={class:"grid grid-cols-1 gap-2"},$e={class:"flex justify-between items-center bg-white rounded-md px-3 py-2 border border-gray-100"},we=e("span",{class:"text-gray-600"},"کاربران با اعلان فعال",-1),Se={class:"text-green-700"},Pe={class:"flex justify-between items-center bg-white rounded-md px-3 py-2 border border-gray-100"},Ie=e("span",{class:"text-gray-600"},"کل اشتراک push",-1),Re=e("div",{class:"font-semibold text-gray-700 mb-2 pt-2"},"راهنما",-1),Te=e("p",{class:"text-gray-600 leading-6 m-0"}," فقط کاربرانی که اعلان را در اپ فعال کرده‌اند، نوتیف دریافت می‌کنند. ",-1),Be=e("p",{class:"text-gray-600 leading-6 m-0"}," از فیلتر «اعلان فعال» می‌توانید فقط کاربران با اعلان روشن یا خاموش را ببینید. ",-1),Ce=e("p",{class:"text-gray-600 leading-6 m-0"}," برای ارسال محدود، کاربران را از جدول پایین انتخاب کنید. ",-1),De={key:0,class:"pt-2 border-t border-gray-200"},Le=e("div",{class:"font-medium mb-1"},"آخرین ارسال:",-1),Ne={key:0},Ue={key:1},Me={class:"border-t border-gray-200 pt-4"},Ke=e("div",{class:"mb-2 text-sm text-gray-600"}," کاربران را جستجو کنید و برای ارسال محدود، آن‌ها را انتخاب کنید. ",-1),je=F({__name:"PushSendPanel",emits:["sent"],setup(t,{emit:r}){const{TextArea:d}=K,[S]=A(),l=m({title:"ماچارتا",body:"",url:"/"}),_=m(!1),s=m([]),p=m(null),b=m({uniqueUsers:0,totalSubscriptions:0}),$=m(!1),P=N(()=>({selectedRowKeys:s.value,onChange:o=>{s.value=o.map(String)},preserveSelectedRowKeys:!0}));async function B(){$.value=!0;try{b.value=await Q()}finally{$.value=!1}}te(()=>{B()});const C=m({columns:_e,api:G,defaultPageLimit:20,height:"45vh"}),D=N(()=>{var o,u;return!!((o=l.value.title)!=null&&o.trim()&&((u=l.value.body)!=null&&u.trim()))});function y(){var o,u;return(o=l.value.title)!=null&&o.trim()?(u=l.value.body)!=null&&u.trim()?!0:(T.error("لطفاً متن نوتیفیکیشن را وارد کنید"),!1):(T.error("لطفاً عنوان نوتیفیکیشن را وارد کنید"),!1)}async function I(o){if(!y())return;if(o==="selected"&&!s.value.length){T.warning("حداقل یک کاربر انتخاب کنید");return}const u=o==="selected"?`آیا از ارسال نوتیفیکیشن به ${s.value.length} کاربر انتخاب‌شده مطمئن هستید؟`:"آیا از ارسال نوتیفیکیشن به همه کاربران مطمئن هستید؟";ee.confirm({title:"تأیید ارسال نوتیفیکیشن",content:u,okText:"بله، ارسال کن",cancelText:"انصراف",centered:!0,onOk:async()=>{var x,w,f;_.value=!0;try{const v={title:l.value.title.trim(),body:l.value.body.trim(),url:((x=l.value.url)==null?void 0:x.trim())||"/"},R=o==="selected"?await W(v.title,v.body,s.value,v.url):await X(v.title,v.body,v.url);p.value=R;const H=R.subscribed!=null?` — ${R.subscribed} نفر اشتراک push دارند`:"";T.success(`نوتیفیکیشن ارسال شد (${R.sent} موفق، ${R.failed} ناموفق${H})`),r("sent"),B(),o==="all"&&(l.value.body="")}catch(v){T.error(((f=(w=v==null?void 0:v.response)==null?void 0:w.data)==null?void 0:f.error)||v.message||"خطا در ارسال نوتیفیکیشن")}finally{_.value=!1}}})}function U(){return I("all")}function M(){return I("selected")}return(o,u)=>{const x=J,w=V;return g(),h("div",pe,[e("div",me,[e("div",fe,[e("div",null,[ve,a(k(K),{value:l.value.title,"onUpdate:value":u[0]||(u[0]=f=>l.value.title=f),placeholder:"مثلاً: اطلاعیه مهم"},null,8,["value"])]),e("div",null,[be,a(k(d),{value:l.value.body,"onUpdate:value":u[1]||(u[1]=f=>l.value.body=f),placeholder:"متن دلخواه برای کاربران",rows:4,maxlength:500,"show-count":""},null,8,["value"])]),e("div",null,[ge,a(k(K),{value:l.value.url,"onUpdate:value":u[2]||(u[2]=f=>l.value.url=f),placeholder:"/shop یا /matches"},null,8,["value"])]),e("div",he,[a(x,{type:"primary",loading:_.value,disabled:!D.value,onClick:U},{default:n(()=>[c(" ارسال به همه کاربران ")]),_:1},8,["loading","disabled"]),a(x,{type:"primary",ghost:"",loading:_.value,disabled:!D.value||!s.value.length,onClick:M},{default:n(()=>[c(" ارسال به انتخاب‌شده‌ها ("+i(s.value.length)+") ",1)]),_:1},8,["loading","disabled"])])]),e("div",ye,[xe,e("div",ke,[e("div",$e,[we,e("strong",Se,i(b.value.uniqueUsers)+" نفر",1)]),e("div",Pe,[Ie,e("strong",null,i(b.value.totalSubscriptions),1)])]),Re,Te,Be,Ce,p.value?(g(),h("div",De,[Le,e("div",null,[c("موفق: "),e("strong",null,i(p.value.sent),1)]),e("div",null,[c("ناموفق: "),e("strong",null,i(p.value.failed),1)]),p.value.targeted!=null?(g(),h("div",Ne,[c(" انتخاب‌شده: "),e("strong",null,i(p.value.targeted),1)])):L("",!0),p.value.subscribed!=null?(g(),h("div",Ue,[c(" دارای اشتراک push: "),e("strong",null,i(p.value.subscribed),1)])):L("",!0)])):L("",!0)])]),e("div",Me,[Ke,a(w,q(C.value,{"row-selection":P.value,onRegister:k(S)}),null,16,["row-selection","onRegister"])])])}}}),E={custom:"همه کاربران",custom_selected:"کاربران انتخاب‌شده",story:"قصه جدید",book:"کتاب صوتی",product:"محصول جدید",match:"مسابقه جدید"},Fe=[{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 r=t.record.title||"";return r.length>40?`${r.slice(0,40)}...`:r}},{title:"نوع ارسال",dataIndex:"type",key:"type",filterable:!1,customRender:t=>E[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?j(t.record.created_at):"-"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function Ve(t){return E[t]||t}const Ae={class:"gap-2 flex justify-center"},qe=e("span",null,"جزئیات ارسال",-1),Ee={class:"whitespace-pre-wrap text-sm"},He={class:"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-4"},ze={class:"rounded-lg border border-green-200 bg-green-50 p-4 text-center"},Je={class:"text-2xl font-bold text-green-600"},Oe=e("div",{class:"text-sm text-gray-600 mt-1"},"ارسال موفق",-1),Ge={class:"rounded-lg border border-red-200 bg-red-50 p-4 text-center"},Qe={class:"text-2xl font-bold text-red-600"},We=e("div",{class:"text-sm text-gray-600 mt-1"},"ارسال ناموفق",-1),Xe={class:"rounded-lg border border-gray-200 bg-gray-50 p-4 text-center"},Ye={class:"text-2xl font-bold text-gray-700"},Ze=e("div",{class:"text-sm text-gray-600 mt-1"},"مجموع تلاش‌ها",-1),et={key:0,class:"text-sm text-gray-600"},tt={class:"text-green-600"},st={class:"text-green-600"},at={class:"text-red-600"},lt={key:1,class:"text-sm text-gray-500"},ot=F({__name:"PushHistoryPanel",setup(t,{expose:r}){const[d,S]=A(),l=m(!1),_=m(!1),s=m(null),p=m({columns:Fe,api:Y,defaultPageLimit:20,height:"55vh"}),b=N(()=>s.value?(s.value.sent_count||0)+(s.value.failed_count||0):0),$=N(()=>!b.value||!s.value?0:Math.round(s.value.sent_count/b.value*100));function P(y){return y?j(y):"-"}async function B(y){l.value=!0,_.value=!0,s.value=null;try{s.value=await Z(y.id)}finally{_.value=!1}}function C(){l.value=!1,s.value=null}function D(){S()}return r({reload:D}),(y,I)=>{const U=V,M=O,o=ne,u=re,x=ie,w=le;return g(),h("div",null,[a(U,q(p.value,{onRegister:k(d)}),{action:n(({record:f})=>[e("div",Ae,[a(k(de),{class:"cursor-pointer"},{title:n(()=>[qe]),default:n(()=>[a(oe,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:v=>B(f)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),a(w,{visible:l.value,"onUpdate:visible":I[0]||(I[0]=f=>l.value=f),title:"جزئیات نوتیفیکیشن ارسالی","custom-footer":"",width:"720px",onClose:C},{footer:n(()=>[a(M,{onClick:C},{default:n(()=>[c("بستن")]),_:1})]),default:n(()=>[a(x,{spinning:_.value},{default:n(()=>[s.value?(g(),h(se,{key:0},[a(u,{bordered:"",column:2,size:"small",class:"mb-4"},{default:n(()=>[a(o,{label:"شناسه"},{default:n(()=>[c("#"+i(s.value.id),1)]),_:1}),a(o,{label:"نوع ارسال"},{default:n(()=>[c(i(k(Ve)(s.value.type)),1)]),_:1}),a(o,{label:"تاریخ ارسال"},{default:n(()=>[c(i(P(s.value.created_at)),1)]),_:1}),a(o,{label:"ارسال‌کننده"},{default:n(()=>[c(i(s.value.admin_name||"-"),1)]),_:1}),a(o,{label:"عنوان",span:2},{default:n(()=>[c(i(s.value.title),1)]),_:1}),a(o,{label:"متن",span:2},{default:n(()=>[e("div",Ee,i(s.value.body),1)]),_:1}),a(o,{label:"لینک",span:2},{default:n(()=>[c(i(s.value.url||"/"),1)]),_:1})]),_:1}),e("div",He,[e("div",ze,[e("div",Je,i(s.value.sent_count),1),Oe]),e("div",Ge,[e("div",Qe,i(s.value.failed_count),1),We]),e("div",Xe,[e("div",Ye,i(b.value),1),Ze])]),b.value>0?(g(),h("div",et,[c(" نرخ موفقیت: "),e("strong",tt,i($.value)+"%",1),c(" — "),e("span",st,i(s.value.sent_count)+" موفق",1),c(" / "),e("span",at,i(s.value.failed_count)+" ناموفق",1)])):(g(),h("div",lt," هیچ اشتراک push فعالی برای ارسال یافت نشد. "))],64)):L("",!0)]),_:1},8,["spinning"])]),_:1},8,["visible"])])}}}),nt=e("div",{class:"flex justify-between items-center mb-4"},[e("h2",null,"نوتیفیکیشن Push")],-1),Ht=F({__name:"index",setup(t){const r=m("send"),d=m(null);function S(){var _;(_=d.value)==null||_.reload()}function l(_){var s;_==="history"&&((s=d.value)==null||s.reload())}return(_,s)=>{const p=ue,b=ce,$=z;return g(),ae($,null,{default:n(()=>[nt,a(b,{activeKey:r.value,"onUpdate:activeKey":s[0]||(s[0]=P=>r.value=P),onChange:l},{default:n(()=>[a(p,{key:"send",tab:"ارسال نوتیفیکیشن"},{default:n(()=>[a(je,{onSent:S})]),_:1}),a(p,{key:"history",tab:"سوابق ارسالی"},{default:n(()=>[a(ot,{ref_key:"historyPanelRef",ref:d},null,512)]),_:1})]),_:1},8,["activeKey"])]),_:1})}}});export{Ht as default};