Files
machartaa_admin_dist/dist/assets/index-39fd3c9c.js
T
2026-08-22 13:27:44 +03:30

2 lines
17 KiB
JavaScript

import{_ as Re}from"./BasicMainCard-f06c4dad.js";import{_ as Ue}from"./BasicModal.vue_vue_type_style_index_0_lang-7cc4ab5d.js";import{_ as qe,u as Be}from"./useBaseTable-01dc558f.js";import{_ as Pe}from"./button.vue_vue_type_style_index_0_lang-86273660.js";import{I as G}from"./Icon-cc126d0d.js";import{t as oe}from"./useDataTime-5a09f654.js";import{g as ae}from"./convert-2ad76038.js";import{t as Ee}from"./textUtils-c37780ad.js";import{i as ie,j as Le,k as ue,l as De,r as Me,n as je,o as Fe}from"./support-a4c4188e.js";import{d as Ne,g as x,r as re,h as z,E as Ke,v as Qe,l as Je,o as i,c as d,b as p,w as c,a,e as I,F as L,n as K,j as _,i as w,k as S,J as Oe,t as k,p as se,T as ce,bK as Q,D as y,bJ as Ve,K as Ge,Q as ze,R as He,bL as We,bM as Xe}from"./index-d718011e.js";import{l as Ye}from"./subscription-a523ba94.js";import{M as Ze}from"./index-eb860757.js";import{_ as et,T as tt}from"./index-68cba126.js";import{a as de,A as pe}from"./index-be4ed47c.js";import{I as at}from"./index-ba4d9879.js";import{T as H}from"./isSymbol-e219d64b.js";import{U as st}from"./index-c895ada9.js";import{_ as lt}from"./_plugin-vue_export-helper-0ed48b96.js";import"./Grid-162208a5.js";import"./index-44f8c87e.js";import"./Col-7aad654b.js";import"./styleChecker-351d08aa.js";import"./isPlainObject-63126d02.js";import"./vnode-0b482026.js";import"./index-5ade1644.js";import"./updateLocale-dac04afb.js";import"./index-12b8b726.js";import"./shallowequal-c9e151d3.js";import"./useState-d226846a.js";import"./useMemo-9e09b0c8.js";import"./FormItemContext-6bb05345.js";import"./omit-86fc1094.js";import"./lodash-02d12c59.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-e23cf95b.js";import"./index-cbb71dc1.js";import"./Badge-bf61afe1.js";import"./isNumeric-3f69e2aa.js";import"./index-9747fd4d.js";import"./index-7eae579c.js";import"./index-6fc61bbd.js";import"./index-59898946.js";import"./index-5b828516.js";import"./DialogWrap-944b6cdf.js";import"./pickAttrs-49bc9c67.js";import"./css-aae66f86.js";import"./index-4e5c2990.js";import"./toArray-02b8a08a.js";import"./SearchOutlined-31f9ef0b.js";import"./isMobile-e2e89480.js";import"./index-7a44352f.js";import"./adminDb-ba7b3479.js";import"./pushNotification-c3a96d48.js";import"./supabaseTableQuery-bada93b0.js";import"./useRefs-373e2aeb.js";import"./_flatRest-e8ea393e.js";import"./index-7a1bd658.js";import"./index-a2e0d559.js";function nt(o){const h=o==null?void 0:o.users;return h?h.name||[h.first_name,h.last_name].filter(Boolean).join(" ")||h.phone||(o==null?void 0:o.account_name)||"—":(o==null?void 0:o.account_name)||"—"}function ot(o){var h;return((h=o==null?void 0:o.users)==null?void 0:h.phone)||(o==null?void 0:o.account_phone)||"—"}const it=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,width:70,align:"center",customRender:o=>o.record.index+1},{title:"شماره تیکت",dataIndex:"id",key:"id",type:"Number",width:110,align:"center",customRender:o=>`#${o.record.id}`},{title:"نام کاربر",dataIndex:"account_name",key:"account_name",type:"Text",width:160,customRender:o=>nt(o.record)},{title:"شماره موبایل",dataIndex:"account_phone",key:"account_phone",type:"Text",width:130,customRender:o=>ot(o.record)},{title:"متن تیکت",dataIndex:"problem",key:"problem",type:"Text",width:280,customRender:o=>{const{truncated:h}=Ee(o.record.problem||"",70);return h}},{title:"عملیات",dataIndex:"action",key:"action",width:150,align:"center",slot:"action",filterable:!1}],me=[{value:"codoblo",label:"اشتراک کدوبلو"},{value:"shop",label:"بخش فروشگاه"},{value:"other",label:"بخش‌های دیگر اپلیکیشن"},{value:"feedback",label:"انتقاد و پیشنهاد"}],ut=[{value:"new",label:"درخواست‌های جدید"},{value:"answered",label:"پاسخ داده‌شده"},{value:"follow_up",label:"ادامه گفتگو"},{value:"closed",label:"بسته‌شده"},{value:"spam",label:"اسپم"}],v=o=>(ze("data-v-1a538510"),o=o(),He(),o),rt={class:"tickets-page"},ct={class:"tickets-page__inner"},dt={class:"tickets-page__header flex justify-between items-center gap-3 flex-wrap"},pt=v(()=>a("div",null,[a("h2",{class:"text-lg font-bold m-0"},"تیکت‌های پشتیبانی"),a("p",{class:"text-sm text-gray-500 mt-1 mb-0"},"مدیریت درخواست‌های پشتیبانی کاربران")],-1)),mt={class:"tickets-layout"},_t={class:"tickets-queues"},vt=v(()=>a("div",{class:"tickets-queues__title"},"وضعیت درخواست‌ها",-1)),ft=["onClick"],yt={class:"tickets-queues__item-label"},ht={class:"tickets-queues__item-count"},gt={class:"tickets-main"},xt={class:"tickets-table-wrap"},kt={class:"gap-2 flex justify-center items-center"},bt=v(()=>a("span",null,"مشاهده",-1)),wt=v(()=>a("span",null,"بستن تیکت",-1)),Tt=v(()=>a("span",null,"اسپم",-1)),Ct=v(()=>a("span",null,"بازگردانی از اسپم",-1)),It={key:0,class:"py-8 text-center text-gray-500"},St={key:1,class:"space-y-4"},At={class:"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm"},$t=v(()=>a("div",{class:"text-gray-500 mb-1"},"شماره تیکت",-1)),Rt={class:"font-600 dir-ltr text-right"},Ut=v(()=>a("div",{class:"text-gray-500 mb-1"},"موضوع",-1)),qt={class:"font-600"},Bt=v(()=>a("div",{class:"text-gray-500 mb-1"},"نام و نام خانوادگی",-1)),Pt={class:"font-600"},Et=v(()=>a("div",{class:"text-gray-500 mb-1"},"شماره همراه",-1)),Lt={class:"font-600 dir-ltr text-right"},Dt=v(()=>a("div",{class:"text-gray-500 mb-1"},"وضعیت اشتراک",-1)),Mt=v(()=>a("div",{class:"text-gray-500 mb-1"},"پلن / انقضا",-1)),jt={class:"font-600"},Ft=v(()=>a("div",{class:"text-gray-500 mb-1 text-sm"},"متن پیام کاربر",-1)),Nt={class:"rounded-xl border border-gray-200 bg-gray-50 p-3 text-sm leading-7 whitespace-pre-wrap"},Kt={key:0,class:"flex flex-wrap gap-2 mt-2"},Qt={key:0,class:"space-y-2"},Jt=v(()=>a("div",{class:"text-gray-500 text-sm"},"تاریخچه گفتگو",-1)),Ot={class:"text-xs text-gray-500 mb-1"},Vt={class:"leading-7 whitespace-pre-wrap"},Gt={key:0,class:"flex flex-wrap gap-2 mt-2"},zt=v(()=>a("div",{class:"mb-1 text-sm text-gray-600"},"متن پاسخ کارشناس",-1)),Ht=v(()=>a("div",{class:"mb-1 text-sm text-gray-600"},"تصاویر مربوطه برای کاربر",-1)),Wt={key:0},Xt=v(()=>a("div",{class:"text-xs"},"آپلود تصویر",-1)),Yt=[Xt],Zt={key:2,class:"rounded-xl bg-gray-100 p-3 text-center text-sm text-gray-600"},ea={key:3,class:"rounded-xl bg-orange-50 border border-orange-200 p-3 text-center text-sm text-orange-700"},ta={key:0,class:"flex justify-end gap-2 flex-wrap"},aa={key:1,class:"flex justify-end gap-2 flex-wrap"},sa=Ne({__name:"index",setup(o){const{TextArea:h}=at,_e=x(),D=x(!1),W=x(!1),n=x(null),A=x(null),X=x(!1),b=x(!1),U=x("new"),q=x("all"),B=re({new:0,answered:0,follow_up:0,closed:0,spam:0}),P=re({content:""}),$=x([]),g=x([]),ve=ut,fe=z(()=>`${U.value}:${q.value}`),[ye,J]=Be(),Y=x({columns:it,api:ie(U.value,q.value),defaultPageLimit:20}),he=z(()=>{var t,l,r;const e=(t=n.value)==null?void 0:t.users;return e?e.name||[e.first_name,e.last_name].filter(Boolean).join(" ")||((l=n.value)==null?void 0:l.account_name)||"—":((r=n.value)==null?void 0:r.account_name)||"—"}),ge=z(()=>{var e,t,l;return((t=(e=n.value)==null?void 0:e.users)==null?void 0:t.phone)||((l=n.value)==null?void 0:l.account_phone)||"—"}),xe=z(()=>{const e=A.value;if(!e)return"—";const t=e.planTitle||"",l=e.expiresAt?oe(e.expiresAt):"";return t&&l?`${t} — ${l}`:t||l||"—"});function ke(e){var t;return((t=me.find(l=>l.value===e))==null?void 0:t.label)||e||"—"}function be(){Y.value={...Y.value,api:ie(U.value,q.value)}}async function M(){try{const e=await Le();B.new=e.new,B.answered=e.answered,B.follow_up=e.follow_up,B.closed=e.closed,B.spam=e.spam}catch{}}function we(e){U.value=e}Ke([U,q],()=>{be()});async function Te(e){var t;D.value=!0,W.value=!0,n.value=null,A.value=null,P.content="",$.value=[],g.value=[],await ce(),Q(),window.setTimeout(()=>Q(),50),window.setTimeout(()=>Q(),300);try{n.value=await ue(e.id);const l=n.value.user_id||((t=n.value.users)==null?void 0:t.id);try{A.value=await Ye(l)}catch{A.value={isActive:!1,label:"نامشخص",planTitle:null,expiresAt:null,remainingDays:0}}}catch{y.error("خطا در دریافت جزئیات تیکت"),D.value=!1}finally{W.value=!1,await ce(),Q(),window.setTimeout(()=>Q(),80)}}function T(){D.value=!1,n.value=null,A.value=null,P.content="",$.value=[],g.value=[]}function Ce(e){return e.type.startsWith("image/")?g.value.length>=6?(y.warning("حداکثر ۶ تصویر مجاز است"),!1):!0:(y.error("فقط تصویر مجاز است"),!1)}async function Ie(e){const{file:t,onSuccess:l,onError:r,onProgress:f}=e,O=Ve()||localStorage.getItem("tamin_token")||localStorage.getItem("token")||"";if(!O){y.error("توکن احراز هویت یافت نشد"),r==null||r(new Error("no token"));return}const V=new FormData;V.append("file",t);try{await new Promise((j,C)=>{const s=new XMLHttpRequest;s.open("POST",`${Ge.replace(/\/$/,"")}/upload/machartaa-img`),s.setRequestHeader("Authorization",`Bearer ${O}`),s.upload.onprogress=m=>{m.lengthComputable&&(f==null||f({percent:Math.round(m.loaded/m.total*100)}))},s.onload=()=>{var m,F,N;if(s.status<200||s.status>=300){C(new Error(`upload failed: ${s.status}`));return}try{const u=JSON.parse(s.responseText||"{}"),R=u.path||u.full_src||u.url||u.src||((m=u.data)==null?void 0:m.path)||((F=u.data)==null?void 0:F.full_src)||((N=u.data)==null?void 0:N.url)||"";if(!R){C(new Error("مسیر فایل از سرور دریافت نشد"));return}const E=String(R).replace(/^https?:\/\/[^/]+/,"");$.value.push({url:E,name:t.name});const ee=t.uid;g.value=g.value.map(te=>te.uid===ee?{...te,status:"done",url:ae(E),response:{path:E}}:te),l==null||l(u,s),j()}catch(u){C(u)}},s.onerror=()=>C(new Error("خطا در آپلود تصویر")),s.send(V)})}catch(j){r==null||r(j),y.error("خطا در آپلود تصویر");const C=t.uid;g.value=g.value.filter(s=>s.uid!==C)}}function Se(e){var l;const t=((l=e==null?void 0:e.response)==null?void 0:l.path)||Ae(e==null?void 0:e.url);$.value=$.value.filter(r=>r.url!==t),g.value=g.value.filter(r=>r.uid!==e.uid)}function Ae(e){return e?e.replace(/^https?:\/\/[^/]+/,""):""}async function le(e){var l,r;const t=(e==null?void 0:e.id)||((l=n.value)==null?void 0:l.id);if(t)try{b.value=!0,await De(t),y.success("تیکت به اسپم منتقل شد"),((r=n.value)==null?void 0:r.id)===t&&T(),await M(),await J()}catch(f){y.error((f==null?void 0:f.message)||"خطا در انتقال به اسپم")}finally{b.value=!1}}async function Z(e){var l;const t=e!=null&&e.id?e:n.value;if(t!=null&&t.id)try{b.value=!0,await Me({id:t.id,status:t.status||"pending"}),y.success("تیکت از اسپم بازگردانده شد"),((l=n.value)==null?void 0:l.id)===t.id&&T(),await M(),await J()}catch(r){y.error((r==null?void 0:r.message)||"خطا در بازگردانی تیکت")}finally{b.value=!1}}function ne(e){var l;const t=(e==null?void 0:e.id)||((l=n.value)==null?void 0:l.id);t&&Ze.confirm({title:"بستن تیکت",content:`آیا از بستن تیکت #${t} مطمئن هستید؟`,okText:"بستن تیکت",cancelText:"انصراف",okType:"danger",async onOk(){var r;try{b.value=!0,await je(t),y.success("تیکت بسته شد"),((r=n.value)==null?void 0:r.id)===t&&T(),await M(),await J()}catch(f){y.error((f==null?void 0:f.message)||"خطا در بستن تیکت")}finally{b.value=!1}}})}async function $e(){if(n.value){if(!P.content.trim()&&!$.value.length){y.warning("متن پاسخ یا تصویر را وارد کنید");return}try{X.value=!0,await Fe({ticketId:n.value.id,content:P.content,attachments:$.value}),y.success("پاسخ ارسال شد");try{n.value=await ue(n.value.id)}catch{T()}await M(),await J()}catch(e){y.error((e==null?void 0:e.message)||"خطا در ارسال پاسخ")}finally{X.value=!1}}}return Qe(M),(e,t)=>{const l=Pe,r=Je("RouterLink"),f=et,O=tt,V=qe,j=Ue,C=Re;return i(),d("div",rt,[p(C,null,{default:c(()=>[a("div",ct,[a("div",dt,[pt,p(r,{to:{name:"supportMain"}},{default:c(()=>[p(l,null,{default:c(()=>[I("بازگشت به چت")]),_:1})]),_:1})]),a("div",mt,[a("aside",_t,[vt,(i(!0),d(L,null,K(_(ve),s=>(i(),d("button",{key:s.value,type:"button",class:se(["tickets-queues__item",{"tickets-queues__item--active":U.value===s.value,"tickets-queues__item--spam":s.value==="spam"}]),onClick:m=>we(s.value)},[a("span",yt,k(s.label),1),a("span",ht,k(B[s.value]||0),1)],10,ft))),128))]),a("section",gt,[p(O,{activeKey:q.value,"onUpdate:activeKey":t[0]||(t[0]=s=>q.value=s),class:"tickets-tabs"},{default:c(()=>[p(f,{key:"all",tab:"همه موضوعات"}),(i(!0),d(L,null,K(_(me),s=>(i(),w(f,{key:s.value,tab:s.label},null,8,["tab"]))),128))]),_:1},8,["activeKey"]),a("div",xt,[(i(),w(V,Oe({key:fe.value},Y.value,{ref_key:"table",ref:_e,onRegister:_(ye)}),{action:c(({record:s})=>[a("div",kt,[p(_(H),{class:"cursor-pointer"},{title:c(()=>[bt]),default:c(()=>[p(G,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:m=>Te(s)},null,8,["onClick"])]),_:2},1024),s.status!=="closed"?(i(),w(_(H),{key:0,class:"cursor-pointer"},{title:c(()=>[wt]),default:c(()=>[p(G,{icon:"vuesax-linear:close-circle",color:"#DC2626",onClick:m=>ne(s)},null,8,["onClick"])]),_:2},1024)):S("",!0),s.admin_queue!=="spam"?(i(),w(_(H),{key:1,class:"cursor-pointer"},{title:c(()=>[Tt]),default:c(()=>[p(G,{icon:"vuesax-linear:danger",color:"#EA580C",onClick:m=>le(s)},null,8,["onClick"])]),_:2},1024)):(i(),w(_(H),{key:2,class:"cursor-pointer"},{title:c(()=>[Ct]),default:c(()=>[p(G,{icon:"vuesax-linear:refresh-circle",color:"#16A34A",onClick:m=>Z(s)},null,8,["onClick"])]),_:2},1024))])]),_:1},16,["onRegister"]))])])])]),p(j,{visible:D.value,"onUpdate:visible":t[7]||(t[7]=s=>D.value=s),title:"جزئیات تیکت پشتیبانی","custom-footer":!0,width:"720px",onCancel:T,onClose:T},{footer:c(()=>{var s;return[n.value&&n.value.status!=="closed"?(i(),d("div",ta,[p(l,{onClick:T},{default:c(()=>[I("انصراف")]),_:1}),n.value.admin_queue!=="spam"?(i(),w(l,{key:0,loading:b.value,onClick:t[3]||(t[3]=m=>le())},{default:c(()=>[I(" انتقال به اسپم ")]),_:1},8,["loading"])):(i(),w(l,{key:1,loading:b.value,onClick:t[4]||(t[4]=m=>Z())},{default:c(()=>[I(" بازگردانی از اسپم ")]),_:1},8,["loading"])),p(l,{type:"danger",loading:b.value,onClick:t[5]||(t[5]=m=>ne())},{default:c(()=>[I(" بستن تیکت ")]),_:1},8,["loading"]),p(l,{type:"primary",loading:X.value,onClick:$e},{default:c(()=>[I(" ارسال پاسخ ")]),_:1},8,["loading"])])):(i(),d("div",aa,[((s=n.value)==null?void 0:s.admin_queue)==="spam"?(i(),w(l,{key:0,loading:b.value,onClick:t[6]||(t[6]=m=>Z())},{default:c(()=>[I(" بازگردانی از اسپم ")]),_:1},8,["loading"])):S("",!0),p(l,{onClick:T},{default:c(()=>[I("بستن")]),_:1})]))]}),default:c(()=>{var s,m,F,N;return[W.value?(i(),d("div",It,"در حال بارگذاری...")):n.value?(i(),d("div",St,[a("div",At,[a("div",null,[$t,a("div",Rt,"#"+k(n.value.id),1)]),a("div",null,[Ut,a("div",qt,k(ke(n.value.subject)),1)]),a("div",null,[Bt,a("div",Pt,k(he.value),1)]),a("div",null,[Et,a("div",Lt,k(ge.value),1)]),a("div",null,[Dt,a("div",{class:se(["font-600",(s=A.value)!=null&&s.isActive?"text-green-700":"text-gray-800"])},k(((m=A.value)==null?void 0:m.label)||"—"),3)]),a("div",null,[Mt,a("div",jt,k(xe.value),1)])]),a("div",null,[Ft,a("div",Nt,k(n.value.problem),1),(F=n.value.attachments)!=null&&F.length?(i(),d("div",Kt,[p(_(de),null,{default:c(()=>[(i(!0),d(L,null,K(n.value.attachments,(u,R)=>(i(),w(_(pe),{key:`att-${R}`,src:_(ae)(u.url),alt:u.name||"تصویر",width:80,height:80,preview:{mask:"پیش‌نمایش"},style:{"object-fit":"cover","border-radius":"8px",overflow:"hidden",border:"1px solid #e5e7eb"}},null,8,["src","alt"]))),128))]),_:1})])):S("",!0)]),(N=n.value.messages)!=null&&N.length?(i(),d("div",Qt,[Jt,(i(!0),d(L,null,K(n.value.messages,u=>{var R;return i(),d("div",{key:u.id,class:se(["rounded-xl border border-gray-200 p-3 text-sm",u.sender_type==="admin"?"bg-amber-50":"bg-white"])},[a("div",Ot,k(u.sender_type==="admin"?"کارشناس":"کاربر")+" · "+k(u.created_at?_(oe)(u.created_at):""),1),a("div",Vt,k(u.content),1),(R=u.attachments)!=null&&R.length?(i(),d("div",Gt,[p(_(de),null,{default:c(()=>[(i(!0),d(L,null,K(u.attachments,(E,ee)=>(i(),w(_(pe),{key:`msg-att-${u.id}-${ee}`,src:_(ae)(E.url),alt:E.name||"تصویر",width:64,height:64,preview:{mask:"پیش‌نمایش"},style:{"object-fit":"cover","border-radius":"8px",overflow:"hidden",border:"1px solid #e5e7eb"}},null,8,["src","alt"]))),128))]),_:2},1024)])):S("",!0)],2)}),128))])):S("",!0),n.value.status!=="closed"?(i(),d(L,{key:1},[a("div",null,[zt,p(_(h),{value:P.content,"onUpdate:value":t[1]||(t[1]=u=>P.content=u),rows:4,placeholder:"پاسخ خود را بنویسید..."},null,8,["value"])]),a("div",null,[Ht,p(_(st),{"file-list":g.value,"onUpdate:fileList":t[2]||(t[2]=u=>g.value=u),class:"fix-capture","list-type":"picture-card",accept:_(We),"custom-request":Ie,"before-upload":Ce,onRemove:Se,onChange:_(Xe)},{default:c(()=>[g.value.length<6?(i(),d("div",Wt,Yt)):S("",!0)]),_:1},8,["file-list","accept","onChange"])])],64)):(i(),d("div",Zt," این تیکت بسته‌شده است. ")),n.value.admin_queue==="spam"?(i(),d("div",ea," این تیکت در وضعیت اسپم است و برای کاربر تغییری نمایش داده نمی‌شود. ")):S("",!0)])):S("",!0)]}),_:1},8,["visible"])]),_:1})])}}});const is=lt(sa,[["__scopeId","data-v-1a538510"]]);export{is as default};