Files
machartaa_admin_dist/dist/assets/index-82e8dd67.js
T
2026-08-17 13:34:14 +03:30

2 lines
12 KiB
JavaScript

import{_ as Z}from"./BasicMainCard-a49bf313.js";import{_ as ee}from"./BasicModal.vue_vue_type_style_index_0_lang-050248e0.js";import{_ as te,u as ae}from"./useBaseTable-a962a6e3.js";import{_ as ne}from"./button.vue_vue_type_style_index_0_lang-cf170adf.js";import{I as B}from"./Icon-21c28098.js";import{t as oe}from"./useDataTime-64353302.js";import{G as A,d as ie,g as k,A as se,o as T,i as le,w as d,a as f,b as u,e as L,c as D,j as C,H as re,k as N,y as ue,t as F,D as m}from"./index-e0c2af95.js";import{fetchMatchingUserIds as H,applyEmbeddedUserSearch as ce,applySupabaseFilter as de,applySupabaseSort as me,applySupabasePagination as fe,formatTableResult as O}from"./supabaseTableQuery-8ab5665d.js";import{c as pe}from"./pushNotification-8ba0eed7.js";import{_ as _e}from"./TextPreview.vue_vue_type_script_setup_true_lang-c64dd012.js";import{e as ve,g as he}from"./convert-2ad76038.js";import{M as z}from"./index-ba1a268c.js";import{C as xe}from"./index-777eb3d4.js";import{I as ge}from"./index-ff6425ec.js";import{T as q}from"./isSymbol-16519357.js";import{U as ye}from"./index-75e285c0.js";import"./Grid-6f435e3e.js";import"./index-2170cfa5.js";import"./_plugin-vue_export-helper-ede5981c.js";import"./shallowequal-94cf06f1.js";import"./index-329abdc2.js";import"./vnode-1d9a5f19.js";import"./index-77288b74.js";import"./useState-9f37179f.js";import"./useRefs-f2d2b66f.js";import"./_flatRest-7f56bd12.js";import"./isMobile-e2e89480.js";import"./omit-ef5483a7.js";import"./index-d7731afc.js";import"./Col-f312538f.js";import"./styleChecker-fa192349.js";import"./isPlainObject-475d5f63.js";import"./index-55df0a19.js";import"./updateLocale-ddc4d420.js";import"./index-ccf41683.js";import"./index-bc659f42.js";import"./useMemo-8582dbbb.js";import"./FormItemContext-31ef74d8.js";import"./lodash-7e5e5813.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-751e37cd.js";import"./index-3be03c15.js";import"./Badge-0df70937.js";import"./isNumeric-3f69e2aa.js";import"./index-beff19b5.js";import"./index-71bd3b00.js";import"./toArray-590d8ecb.js";import"./SearchOutlined-9dbd40a5.js";import"./pickAttrs-e6a1c834.js";import"./index-f062f0ac.js";import"./index-4a6bfbb1.js";import"./textUtils-c37780ad.js";import"./DialogWrap-3bd23522.js";import"./index-89e8edb2.js";import"./css-aae66f86.js";import"./index-3f95615f.js";import"./index-fdf98d11.js";const we=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:e=>e.record.index+1},{title:"نام ارسال کننده",dataIndex:"owner_name",key:"owner_name",filterField:"owner_name",customRender:e=>e.record.owner_name||"-"},{title:"متن پیام",dataIndex:"text",key:"text",slot:"text"},{title:"فایل",dataIndex:"file",key:"file",align:"center",width:120,slot:"file"},{title:"وضعیت پین",dataIndex:"pined",key:"pined",align:"center",width:100,customRender:e=>e.record.pined?"پین شده":"-"},{title:"زمان ایجاد",dataIndex:"created_at",key:"created_at",customRender:e=>oe(e.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],ke=new Set(["text","file","pined","pined_at","created_at","updated_at","owner_id"]),be=["text"];async function Ie(e){const{data:o,error:v}=await A.from("channel_message").insert([e]).select();if(v)throw v;return o}async function G(e,o){const{data:v,error:b}=await A.from("channel_message").update(o).eq("id",e).select();if(b)throw b;return v}async function Se(e){const{error:o}=await A.from("channel_message").delete().eq("id",e);if(o)throw o}function Ce(e){let o=null;if(e.owner_id){const v=Array.isArray(e.users)?e.users[0]:e.users;v?o=`${v.first_name||""} ${v.last_name||""}`.trim()||v.phone||`کاربر ${e.owner_id}`:o=`کاربر ${e.owner_id}`}return{...e,owner_name:o,text:e.text??"",file:e.file??null,pined:e.pined??!1,pined_at:e.pined_at??null,created_at:e.created_at??"",updated_at:e.updated_at??""}}async function Me(e){const o={...e};!o.sort&&!o.order&&(o.order="-id");const{limit:v=20,page:b=1,search:S,filters:g}=o;let i=A.from("channel_message").select("*, users!owner_id(first_name, last_name, phone)",{count:"exact"});if(S!=null&&S.trim()){const p=await H(A,S);i=ce(i,S,be,p,"owner_id")}if(g!=null&&g.length){for(const p of g)if(!(p.hidden||!p.field)){if(p.field==="owner_name"){if(["eq","has","like"].includes(p.op)){const h=await H(A,String(p.value));h.length?i=i.in("owner_id",h):i=i.eq("owner_id","00000000-0000-0000-0000-000000000000")}continue}ke.has(p.field)&&(i=de(i,p))}}i=me(i,o,"-id",["id","created_at","updated_at","pined","text"]),i=fe(i,b,v);const{data:M,error:y,count:w}=await i;return y?(console.error("[getChannelMessagesTable] Supabase query error:",y),O([],0,o)):O(M,w,o,Ce)}const Te={class:"flex justify-between items-center mb-4"},Ae=f("h2",null,"پیام‌های کانال",-1),Be=["href"],De={key:1},Pe={class:"gap-2 flex justify-center"},$e=f("span",null,"پین کردن",-1),Ue=f("span",null,"حذف",-1),Le=f("span",null,"ویرایش",-1),Re={class:"space-y-4"},Ee=f("div",{class:"mb-1 text-sm text-gray-600"},"متن پیام *",-1),Ne={key:0},qe=f("div",{class:"mb-1 text-sm text-gray-600"},"آپلود فایل (اختیاری)",-1),Ve={key:0,class:"mt-2"},Fe={class:"h-2 rounded bg-gray-200 overflow-hidden"},He={class:"text-xs text-gray-700 font-semibold text-center mt-1"},Oe={key:1,class:"mt-2"},ze=["href"],Wt=ie({__name:"index",setup(e){const{TextArea:o}=ge,[v,b]=ae(),S=k({columns:we,api:Me,defaultPageLimit:20}),g=k(!1),i=k(!1),M=k(null),y=se(),w=k([]),p=k(!1),h=k(0),R=k(!0),_=k({owner_id:null,text:"",file:null});function J(n){return n.size/1024/1024<50?!0:(m.error("حجم فایل باید کمتر از 50MB باشد"),!1)}async function W(n){const{file:a,onSuccess:c,onError:s,onProgress:x}=n,I=new FormData;I.append("file",a);const l="https://node.macharta.ir/upload/message-file";h.value=0,p.value=!0,await new Promise((P,$)=>{const r=new XMLHttpRequest;r.open("POST",l),r.setRequestHeader("Authorization",`Bearer ${localStorage.getItem("tamin_token")||localStorage.getItem("token")||""}`),r.timeout=15*60*1e3,r.upload.onprogress=t=>{if(t.lengthComputable){const U=Math.round(t.loaded/t.total*100);h.value=U,x==null||x({percent:U})}},r.onload=()=>{if(h.value=100,r.status>=200&&r.status<300)try{const t=JSON.parse(r.responseText||"{}"),U=t.url||t.path||t.file||t.data&&(t.data.url||t.data.path||t.data.file)||"",E=ve(U);_.value.file=E,w.value=E?[{uid:`${Date.now()}`,name:a.name,status:"done",url:he(E)}]:[],c==null||c(t,r),m.success("فایل با موفقیت آپلود شد!"),P()}catch(t){s==null||s(t,r),$(t)}else{const t=new Error("خطا در آپلود فایل");m.error("خطا در آپلود فایل"),s==null||s(t,r),$(t)}},r.onerror=()=>{const t=new Error("خطا در آپلود فایل");m.error("خطا در آپلود فایل"),s==null||s(t,r),$(t)},r.ontimeout=()=>{const t=new Error("آپلود timeout شد");m.error("آپلود timeout شد"),s==null||s(t,r),$(t)},r.onloadend=()=>{p.value=!1,h.value=0},r.send(I)})}async function X(){var a;i.value=!1,M.value=null,w.value=[],y.userInfo||await y.getMyInfo();const n=((a=y.userInfo)==null?void 0:a.id)||null;_.value={owner_id:n,text:"",file:null},g.value=!0}function V(){g.value=!1,w.value=[],h.value=0}async function j(n){M.value=n.id,i.value=!0,_.value={owner_id:null,text:n.text||"",file:n.file||null},n.file?w.value=[{uid:"-1",name:n.file.split("/").pop()||"فایل",status:"done",url:n.file}]:w.value=[],g.value=!0}async function K(n){const a=n.pined===!0;z.confirm({title:"آیا مطمئن هستید؟",content:a?"این پیام در حال حاضر پین شده است. آیا می‌خواهید آن را از حالت پین خارج کنید؟":"آیا می‌خواهید این پیام را پین کنید؟",okText:"بله",cancelText:"خیر",onOk:async()=>{try{const c=!a,s={pined:c,pined_at:c?new Date().toISOString():null};await G(n.id,s),m.success(c?"پیام با موفقیت پین شد!":"پیام با موفقیت از حالت پین خارج شد!"),b()}catch(c){m.error(c.message||"خطا در تغییر وضعیت پین پیام")}}})}async function Q(n){z.confirm({title:"آیا مطمئن هستید؟",content:"آیا می‌خواهید این پیام را حذف کنید؟",okText:"بله",cancelText:"خیر",onOk:async()=>{try{await Se(n.id),m.success("پیام با موفقیت حذف شد!"),b()}catch(a){m.error(a.message||"خطا در حذف پیام")}}})}async function Y(){var n,a,c,s;if(!((n=_.value.text)!=null&&n.trim())){m.error("لطفاً متن پیام را وارد کنید");return}if(p.value){m.warning("لطفاً تا پایان آپلود صبر کنید");return}try{if(i.value&&M.value){const x={text:_.value.text,file:_.value.file};await G(M.value,x),m.success("پیام با موفقیت به‌روزرسانی شد!")}else{y.userInfo||await y.getMyInfo();const x={owner_id:((a=y.userInfo)==null?void 0:a.id)||null,text:_.value.text,file:_.value.file||null};if(await Ie(x),R.value)try{await pe("اطلاع‌رسانی ماچارتا",_.value.text.trim(),"/channel")}catch(I){m.warning(((s=(c=I==null?void 0:I.response)==null?void 0:c.data)==null?void 0:s.error)||"پیام ذخیره شد اما ارسال نوتیفیکیشن ناموفق بود")}m.success("پیام با موفقیت افزوده شد!")}V(),b()}catch(x){m.error(x.message||"خطا در ذخیره پیام")}}return(n,a)=>{const c=ne,s=te,x=ee,I=Z;return T(),le(I,null,{default:d(()=>[f("div",Te,[Ae,u(c,{type:"primary",onClick:X},{default:d(()=>[L("افزودن اطلاع رسانی")]),_:1})]),u(s,re(S.value,{ref:"table",onRegister:C(v)}),{text:d(({record:l})=>[u(_e,{text:l.text},null,8,["text"])]),file:d(({record:l})=>[l.file?(T(),D("a",{key:0,href:l.file,target:"_blank",class:"text-blue-500 hover:underline"}," دانلود فایل ",8,Be)):(T(),D("span",De,"-"))]),action:d(({record:l})=>[f("div",Pe,[u(C(q),{class:"cursor-pointer"},{title:d(()=>[$e]),default:d(()=>[u(B,{icon:"vuesax-linear:bookmark",color:"#16A34A",onClick:P=>K(l)},null,8,["onClick"])]),_:2},1024),u(C(q),{class:"cursor-pointer"},{title:d(()=>[Ue]),default:d(()=>[u(B,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:P=>Q(l)},null,8,["onClick"])]),_:2},1024),u(C(q),{class:"cursor-pointer"},{title:d(()=>[Le]),default:d(()=>[u(B,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:P=>j(l)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),u(x,{visible:g.value,"onUpdate:visible":a[3]||(a[3]=l=>g.value=l),title:i.value?"ویرایش اطلاع رسانی":"افزودن اطلاع رسانی",onOk:Y,onCancel:V,width:"80%",confirmLoading:p.value},{default:d(()=>[f("div",Re,[f("div",null,[Ee,u(C(o),{value:_.value.text,"onUpdate:value":a[0]||(a[0]=l=>_.value.text=l),placeholder:"متن پیام",rows:6},null,8,["value"])]),i.value?N("",!0):(T(),D("div",Ne,[u(C(xe),{checked:R.value,"onUpdate:checked":a[1]||(a[1]=l=>R.value=l)},{default:d(()=>[L(" همزمان نوتیفیکیشن Push به کاربران ارسال شود ")]),_:1},8,["checked"])])),f("div",null,[qe,u(C(ye),{"file-list":w.value,"onUpdate:fileList":a[2]||(a[2]=l=>w.value=l),"before-upload":J,"custom-request":W,"max-count":1},{default:d(()=>[u(c,null,{default:d(()=>[u(B,{icon:"vuesax-linear:document-upload",class:"mr-1"}),L(" انتخاب فایل ")]),_:1})]),_:1},8,["file-list"]),h.value>0&&h.value<100?(T(),D("div",Ve,[f("div",Fe,[f("div",{class:"h-2 bg-blue-500 transition-all",style:ue({width:`${h.value}%`})},null,4)]),f("div",He,F(h.value)+"%",1)])):N("",!0),_.value.file?(T(),D("div",Oe,[f("a",{href:_.value.file,target:"_blank",class:"text-blue-500 hover:underline text-sm"},[u(B,{icon:"vuesax-linear:document-download",class:"inline-block mr-1"}),L(" فایل فعلی: "+F(_.value.file.split("/").pop()),1)],8,ze)])):N("",!0)])])]),_:1},8,["visible","title","confirmLoading"])]),_:1})}}});export{Wt as default};