Files
machartaa_admin_dist/dist/assets/index-8bb390cb.js
T
2026-09-01 10:46:46 +03:30

2 lines
18 KiB
JavaScript

import{_ as $e}from"./BasicMainCard-289887ef.js";import{_ as Re}from"./BasicModal.vue_vue_type_style_index_0_lang-8e72024f.js";import{_ as Ue,u as qe}from"./useBaseTable-97132b25.js";import{_ as Pe}from"./button.vue_vue_type_style_index_0_lang-2aadace4.js";import{I as H}from"./Icon-3bccc0d8.js";import{t as ie}from"./useDataTime-581d686b.js";import{g as se}from"./convert-2ad76038.js";import{t as Be}from"./textUtils-c37780ad.js";import{i as ue,j as Le,k as De,l as Ee,r as Me,n as je,o as Fe}from"./support-c37b2cef.js";import{d as Ne,i as x,h as re,j as W,y as Ke,x as Oe,p as Qe,o as i,c as d,e as p,w as c,b as a,f as $,F as M,q as O,l as _,k as w,n as R,K as Ge,t as k,s as ne,U as ce,bK as Q,G as y,bJ as Je,L as Ve,R as ze,S as He,bL as We,bM as Xe}from"./index-9cc7ea05.js";import{n as Ye}from"./subscription-9bfeec83.js";import{M as Ze}from"./index-1c0096a5.js";import{_ as et,T as tt}from"./index-d780a420.js";import{I as at}from"./index-2fad7c88.js";import{T as X}from"./isSymbol-d00ad36c.js";import{A as de,a as pe}from"./index-fe469f94.js";import{U as st}from"./index-0eeaee66.js";import{_ as nt}from"./_plugin-vue_export-helper-0df7e82e.js";import"./Grid-36f4030b.js";import"./index-57fd432f.js";import"./Col-c9a7abf2.js";import"./styleChecker-035391ef.js";import"./isPlainObject-2a229bdb.js";import"./vnode-1811a8a6.js";import"./index-064eab1c.js";import"./updateLocale-845f5b58.js";import"./index-26f9cac8.js";import"./shallowequal-8e48ba05.js";import"./useState-b2543aac.js";import"./useMemo-fb2bb0e4.js";import"./FormItemContext-32857be9.js";import"./omit-3563fca2.js";import"./lodash-e6a6a79e.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-49bf9297.js";import"./index-0b2caecc.js";import"./Badge-abdbd545.js";import"./isNumeric-3f69e2aa.js";import"./index-fb06c021.js";import"./index-ea36e535.js";import"./index-461c54dd.js";import"./index-4d488545.js";import"./index-c158727f.js";import"./DialogWrap-cba6088f.js";import"./pickAttrs-f69e7d2f.js";import"./css-aae66f86.js";import"./index-02aeab7c.js";import"./toArray-43df885b.js";import"./SearchOutlined-829b0931.js";import"./isMobile-e2e89480.js";import"./index-6a4605ec.js";import"./adminDb-21377283.js";import"./pushNotification-0f6dd5b1.js";import"./supabaseTableQuery-09e0fd1f.js";import"./useRefs-563b43fc.js";import"./_flatRest-2790c772.js";import"./index-df2deb09.js";import"./index-6c5d1c5e.js";function lt(n){const v=n==null?void 0:n.users;return v?v.name||[v.first_name,v.last_name].filter(Boolean).join(" ")||v.phone||(n==null?void 0:n.account_name)||"—":(n==null?void 0:n.account_name)||"—"}function ot(n){var v;return((v=n==null?void 0:n.users)==null?void 0:v.phone)||(n==null?void 0:n.account_phone)||"—"}function it(n){const v=Array.isArray(n==null?void 0:n.messages)?[...n.messages]:[];if(v.length){v.sort((o,C)=>new Date(o.created_at).getTime()-new Date(C.created_at).getTime());const T=v[v.length-1],S=String((T==null?void 0:T.content)||"").trim();return S||((Array.isArray(T==null?void 0:T.attachments)?T.attachments:[]).length?"تصویر":"پیام")}return String((n==null?void 0:n.problem)||"").trim()}const ut=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,width:70,align:"center",customRender:n=>n.record.index+1},{title:"شماره تیکت",dataIndex:"id",key:"id",type:"Number",width:110,align:"center",customRender:n=>`#${n.record.id}`},{title:"نام کاربر",dataIndex:"account_name",key:"account_name",type:"Text",width:160,customRender:n=>lt(n.record)},{title:"شماره موبایل",dataIndex:"account_phone",key:"account_phone",type:"Text",width:130,customRender:n=>ot(n.record)},{title:"آخرین پیام",dataIndex:"problem",key:"problem",type:"Text",width:280,customRender:n=>{const{truncated:v}=Be(it(n.record),70);return v}},{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:"انتقاد و پیشنهاد"}],rt=[{value:"new",label:"درخواست‌های جدید"},{value:"answered",label:"پاسخ داده‌شده"},{value:"follow_up",label:"ادامه گفتگو"},{value:"closed",label:"بسته‌شده"},{value:"spam",label:"اسپم"}],f=n=>(ze("data-v-f4cc8a35"),n=n(),He(),n),ct={class:"tickets-page"},dt={class:"tickets-page__inner"},pt={class:"tickets-page__header flex justify-between items-center gap-3 flex-wrap"},mt=f(()=>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)),_t={class:"tickets-layout"},vt={class:"tickets-queues"},ft=f(()=>a("div",{class:"tickets-queues__title"},"وضعیت درخواست‌ها",-1)),ht=["onClick"],yt={class:"tickets-queues__item-label"},gt={class:"tickets-queues__item-count"},xt={class:"tickets-main"},kt={class:"tickets-table-wrap"},bt={class:"gap-2 flex justify-center items-center"},wt=f(()=>a("span",null,"مشاهده",-1)),Tt=f(()=>a("span",null,"بستن تیکت",-1)),Ct=f(()=>a("span",null,"اسپم",-1)),St=f(()=>a("span",null,"بازگردانی از اسپم",-1)),At={key:0,class:"py-8 text-center text-gray-500"},It={key:1,class:"space-y-4"},$t={class:"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm"},Rt=f(()=>a("div",{class:"text-gray-500 mb-1"},"شماره تیکت",-1)),Ut={class:"font-600 dir-ltr text-right"},qt=f(()=>a("div",{class:"text-gray-500 mb-1"},"موضوع",-1)),Pt={class:"font-600"},Bt=f(()=>a("div",{class:"text-gray-500 mb-1"},"نام و نام خانوادگی",-1)),Lt={class:"font-600"},Dt=f(()=>a("div",{class:"text-gray-500 mb-1"},"شماره همراه",-1)),Et={class:"font-600 dir-ltr text-right"},Mt=f(()=>a("div",{class:"text-gray-500 mb-1"},"وضعیت اشتراک",-1)),jt=f(()=>a("div",{class:"text-gray-500 mb-1"},"پلن / انقضا",-1)),Ft={class:"font-600"},Nt=f(()=>a("div",{class:"text-gray-500 mb-1 text-sm"},"متن پیام کاربر",-1)),Kt={class:"rounded-xl border border-gray-200 bg-gray-50 p-3 text-sm leading-7 whitespace-pre-wrap"},Ot={key:0,class:"flex flex-wrap gap-2 mt-2"},Qt={key:0,class:"space-y-2"},Gt=f(()=>a("div",{class:"text-gray-500 text-sm"},"تاریخچه گفتگو",-1)),Jt={class:"text-xs text-gray-500 mb-1"},Vt={class:"leading-7 whitespace-pre-wrap"},zt={key:0,class:"flex flex-wrap gap-2 mt-2"},Ht=f(()=>a("div",{class:"mb-1 text-sm text-gray-600"},"متن پاسخ کارشناس",-1)),Wt=f(()=>a("div",{class:"mb-1 text-sm text-gray-600"},"تصاویر مربوطه برای کاربر",-1)),Xt={key:0},Yt=f(()=>a("div",{class:"text-xs"},"آپلود تصویر",-1)),Zt=[Yt],ea={key:2,class:"rounded-xl bg-gray-100 p-3 text-center text-sm text-gray-600"},ta={key:3,class:"rounded-xl bg-orange-50 border border-orange-200 p-3 text-center text-sm text-orange-700"},aa={key:0,class:"flex justify-end gap-2 flex-wrap"},sa={key:1,class:"flex justify-end gap-2 flex-wrap"},na=Ne({__name:"index",setup(n){const{TextArea:v}=at,T=x(),S=x(!1),G=x(!1),o=x(null),C=x(null),Y=x(!1),b=x(!1),P=x("new"),B=x("all"),L=re({new:0,answered:0,follow_up:0,closed:0,spam:0}),D=re({content:""}),U=x([]),g=x([]),_e=rt,ve=W(()=>`${P.value}:${B.value}`),[fe,J]=qe(),Z=x({columns:ut,api:ue(P.value,B.value),defaultPageLimit:20}),he=W(()=>{var t,l,r;const e=(t=o.value)==null?void 0:t.users;return e?e.name||[e.first_name,e.last_name].filter(Boolean).join(" ")||((l=o.value)==null?void 0:l.account_name)||"—":((r=o.value)==null?void 0:r.account_name)||"—"}),ye=W(()=>{var e,t,l;return((t=(e=o.value)==null?void 0:e.users)==null?void 0:t.phone)||((l=o.value)==null?void 0:l.account_phone)||"—"}),ge=W(()=>{const e=C.value;if(!e)return"—";const t=e.planTitle||"",l=e.expiresAt?ie(e.expiresAt):"";return t&&l?`${t} — ${l}`:t||l||"—"});function xe(e){var t;return((t=me.find(l=>l.value===e))==null?void 0:t.label)||e||"—"}function ke(){Z.value={...Z.value,api:ue(P.value,B.value)}}async function j(){try{const e=await Le();L.new=e.new,L.answered=e.answered,L.follow_up=e.follow_up,L.closed=e.closed,L.spam=e.spam}catch{}}function be(e){P.value=e}Ke([P,B],()=>{ke()});async function we(e){var t;S.value=!0,G.value=!0,o.value=null,C.value=null,D.content="",U.value=[],g.value=[],await ce(),Q(),window.setTimeout(()=>Q(),50),window.setTimeout(()=>Q(),300);try{o.value=await De(e.id);const l=o.value.user_id||((t=o.value.users)==null?void 0:t.id);try{C.value=await Ye(l)}catch{C.value={isActive:!1,label:"نامشخص",planTitle:null,expiresAt:null,remainingDays:0}}}catch{y.error("خطا در دریافت جزئیات تیکت"),S.value=!1}finally{G.value=!1,await ce(),Q(),window.setTimeout(()=>Q(),80)}}function A(){S.value=!1,o.value=null,C.value=null,D.content="",U.value=[],g.value=[]}function Te(e){return e.type.startsWith("image/")?g.value.length>=6?(y.warning("حداکثر ۶ تصویر مجاز است"),!1):!0:(y.error("فقط تصویر مجاز است"),!1)}async function Ce(e){const{file:t,onSuccess:l,onError:r,onProgress:h}=e,V=Je()||localStorage.getItem("tamin_token")||localStorage.getItem("token")||"";if(!V){y.error("توکن احراز هویت یافت نشد"),r==null||r(new Error("no token"));return}const z=new FormData;z.append("file",t);try{await new Promise((F,I)=>{const s=new XMLHttpRequest;s.open("POST",`${Ve.replace(/\/$/,"")}/upload/machartaa-img`),s.setRequestHeader("Authorization",`Bearer ${V}`),s.upload.onprogress=m=>{m.lengthComputable&&(h==null||h({percent:Math.round(m.loaded/m.total*100)}))},s.onload=()=>{var m,N,K;if(s.status<200||s.status>=300){I(new Error(`upload failed: ${s.status}`));return}try{const u=JSON.parse(s.responseText||"{}"),q=u.path||u.full_src||u.url||u.src||((m=u.data)==null?void 0:m.path)||((N=u.data)==null?void 0:N.full_src)||((K=u.data)==null?void 0:K.url)||"";if(!q){I(new Error("مسیر فایل از سرور دریافت نشد"));return}const E=String(q).replace(/^https?:\/\/[^/]+/,"");U.value.push({url:E,name:t.name});const te=t.uid;g.value=g.value.map(ae=>ae.uid===te?{...ae,status:"done",url:se(E),response:{path:E}}:ae),l==null||l(u,s),F()}catch(u){I(u)}},s.onerror=()=>I(new Error("خطا در آپلود تصویر")),s.send(z)})}catch(F){r==null||r(F),y.error("خطا در آپلود تصویر");const I=t.uid;g.value=g.value.filter(s=>s.uid!==I)}}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);U.value=U.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=o.value)==null?void 0:l.id);if(t)try{b.value=!0,await Ee(t),y.success("تیکت به اسپم منتقل شد"),((r=o.value)==null?void 0:r.id)===t&&A(),await j(),await J()}catch(h){y.error((h==null?void 0:h.message)||"خطا در انتقال به اسپم")}finally{b.value=!1}}async function ee(e){var l;const t=e!=null&&e.id?e:o.value;if(t!=null&&t.id)try{b.value=!0,await Me({id:t.id,status:t.status||"pending"}),y.success("تیکت از اسپم بازگردانده شد"),((l=o.value)==null?void 0:l.id)===t.id&&A(),await j(),await J()}catch(r){y.error((r==null?void 0:r.message)||"خطا در بازگردانی تیکت")}finally{b.value=!1}}function oe(e){var l;const t=(e==null?void 0:e.id)||((l=o.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=o.value)==null?void 0:r.id)===t&&A(),await j(),await J()}catch(h){y.error((h==null?void 0:h.message)||"خطا در بستن تیکت")}finally{b.value=!1}}})}async function Ie(){if(o.value){if(!D.content.trim()&&!U.value.length){y.warning("متن پاسخ یا تصویر را وارد کنید");return}try{Y.value=!0,await Fe({ticketId:o.value.id,content:D.content,attachments:U.value}),y.success("پاسخ ارسال شد"),A(),await j(),await J()}catch(e){y.error((e==null?void 0:e.message)||"خطا در ارسال پاسخ")}finally{Y.value=!1}}}return Oe(j),(e,t)=>{const l=Pe,r=Qe("RouterLink"),h=et,V=tt,z=Ue,F=Re,I=$e;return i(),d("div",ct,[p(I,null,{default:c(()=>[a("div",dt,[a("div",pt,[mt,p(r,{to:{name:"supportMain"}},{default:c(()=>[p(l,null,{default:c(()=>[$("بازگشت به چت")]),_:1})]),_:1})]),a("div",_t,[a("aside",vt,[ft,(i(!0),d(M,null,O(_(_e),s=>(i(),d("button",{key:s.value,type:"button",class:ne(["tickets-queues__item",{"tickets-queues__item--active":P.value===s.value,"tickets-queues__item--spam":s.value==="spam"}]),onClick:m=>be(s.value)},[a("span",yt,k(s.label),1),a("span",gt,k(L[s.value]||0),1)],10,ht))),128))]),a("section",xt,[p(V,{activeKey:B.value,"onUpdate:activeKey":t[0]||(t[0]=s=>B.value=s),class:"tickets-tabs"},{default:c(()=>[p(h,{key:"all",tab:"همه موضوعات"}),(i(!0),d(M,null,O(_(me),s=>(i(),w(h,{key:s.value,tab:s.label},null,8,["tab"]))),128))]),_:1},8,["activeKey"]),a("div",kt,[(i(),w(z,Ge({key:ve.value},Z.value,{ref_key:"table",ref:T,onRegister:_(fe)}),{action:c(({record:s})=>[a("div",bt,[p(_(X),{class:"cursor-pointer"},{title:c(()=>[wt]),default:c(()=>[p(H,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:m=>we(s)},null,8,["onClick"])]),_:2},1024),s.status!=="closed"?(i(),w(_(X),{key:0,class:"cursor-pointer"},{title:c(()=>[Tt]),default:c(()=>[p(H,{icon:"vuesax-linear:close-circle",color:"#DC2626",onClick:m=>oe(s)},null,8,["onClick"])]),_:2},1024)):R("",!0),s.admin_queue!=="spam"?(i(),w(_(X),{key:1,class:"cursor-pointer"},{title:c(()=>[Ct]),default:c(()=>[p(H,{icon:"vuesax-linear:danger",color:"#EA580C",onClick:m=>le(s)},null,8,["onClick"])]),_:2},1024)):(i(),w(_(X),{key:2,class:"cursor-pointer"},{title:c(()=>[St]),default:c(()=>[p(H,{icon:"vuesax-linear:refresh-circle",color:"#16A34A",onClick:m=>ee(s)},null,8,["onClick"])]),_:2},1024))])]),_:1},16,["onRegister"]))])])])]),p(F,{visible:S.value,"onUpdate:visible":t[7]||(t[7]=s=>S.value=s),title:"جزئیات تیکت پشتیبانی","custom-footer":!0,width:"720px",onCancel:A,onClose:A},{footer:c(()=>{var s;return[o.value&&o.value.status!=="closed"?(i(),d("div",aa,[p(l,{onClick:A},{default:c(()=>[$("انصراف")]),_:1}),o.value.admin_queue!=="spam"?(i(),w(l,{key:0,loading:b.value,onClick:t[3]||(t[3]=m=>le())},{default:c(()=>[$(" انتقال به اسپم ")]),_:1},8,["loading"])):(i(),w(l,{key:1,loading:b.value,onClick:t[4]||(t[4]=m=>ee())},{default:c(()=>[$(" بازگردانی از اسپم ")]),_:1},8,["loading"])),p(l,{type:"danger",loading:b.value,onClick:t[5]||(t[5]=m=>oe())},{default:c(()=>[$(" بستن تیکت ")]),_:1},8,["loading"]),p(l,{type:"primary",loading:Y.value,onClick:Ie},{default:c(()=>[$(" ارسال پاسخ ")]),_:1},8,["loading"])])):(i(),d("div",sa,[((s=o.value)==null?void 0:s.admin_queue)==="spam"?(i(),w(l,{key:0,loading:b.value,onClick:t[6]||(t[6]=m=>ee())},{default:c(()=>[$(" بازگردانی از اسپم ")]),_:1},8,["loading"])):R("",!0),p(l,{onClick:A},{default:c(()=>[$("بستن")]),_:1})]))]}),default:c(()=>{var s,m,N,K;return[G.value?(i(),d("div",At,"در حال بارگذاری...")):o.value?(i(),d("div",It,[a("div",$t,[a("div",null,[Rt,a("div",Ut,"#"+k(o.value.id),1)]),a("div",null,[qt,a("div",Pt,k(xe(o.value.subject)),1)]),a("div",null,[Bt,a("div",Lt,k(he.value),1)]),a("div",null,[Dt,a("div",Et,k(ye.value),1)]),a("div",null,[Mt,a("div",{class:ne(["font-600",(s=C.value)!=null&&s.isActive?"text-green-700":"text-gray-800"])},k(((m=C.value)==null?void 0:m.label)||"—"),3)]),a("div",null,[jt,a("div",Ft,k(ge.value),1)])]),a("div",null,[Nt,a("div",Kt,k(o.value.problem),1),(N=o.value.attachments)!=null&&N.length?(i(),d("div",Ot,[p(_(de),null,{default:c(()=>[(i(!0),d(M,null,O(o.value.attachments,(u,q)=>(i(),w(_(pe),{key:`att-${q}`,src:_(se)(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})])):R("",!0)]),(K=o.value.messages)!=null&&K.length?(i(),d("div",Qt,[Gt,(i(!0),d(M,null,O(o.value.messages,u=>{var q;return i(),d("div",{key:u.id,class:ne(["rounded-xl border border-gray-200 p-3 text-sm",u.sender_type==="admin"?"bg-amber-50":"bg-white"])},[a("div",Jt,k(u.sender_type==="admin"?"کارشناس":"کاربر")+" · "+k(u.created_at?_(ie)(u.created_at):""),1),a("div",Vt,k(u.content),1),(q=u.attachments)!=null&&q.length?(i(),d("div",zt,[p(_(de),null,{default:c(()=>[(i(!0),d(M,null,O(u.attachments,(E,te)=>(i(),w(_(pe),{key:`msg-att-${u.id}-${te}`,src:_(se)(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)])):R("",!0)],2)}),128))])):R("",!0),o.value.status!=="closed"?(i(),d(M,{key:1},[a("div",null,[Ht,p(_(v),{value:D.content,"onUpdate:value":t[1]||(t[1]=u=>D.content=u),rows:4,placeholder:"پاسخ خود را بنویسید..."},null,8,["value"])]),a("div",null,[Wt,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":Ce,"before-upload":Te,onRemove:Se,onChange:_(Xe)},{default:c(()=>[g.value.length<6?(i(),d("div",Xt,Zt)):R("",!0)]),_:1},8,["file-list","accept","onChange"])])],64)):(i(),d("div",ea," این تیکت بسته‌شده است. ")),o.value.admin_queue==="spam"?(i(),d("div",ta," این تیکت در وضعیت اسپم است و برای کاربر تغییری نمایش داده نمی‌شود. ")):R("",!0)])):R("",!0)]}),_:1},8,["visible"])]),_:1})])}}});const us=nt(na,[["__scopeId","data-v-f4cc8a35"]]);export{us as default};