2 lines
17 KiB
JavaScript
2 lines
17 KiB
JavaScript
import{_ as $e}from"./BasicMainCard-9a9b0e82.js";import{_ as Re}from"./BasicModal.vue_vue_type_style_index_0_lang-0db8aa6c.js";import{_ as Ue,u as qe}from"./useBaseTable-0fdb84ad.js";import{_ as Be}from"./button.vue_vue_type_style_index_0_lang-0b499337.js";import{I as V}from"./Icon-d1d29ca3.js";import{t as oe}from"./useDataTime-234977eb.js";import{g as ae}from"./convert-2ad76038.js";import{t as Pe}from"./textUtils-c37780ad.js";import{i as ie,j as Le,k as Ee,l as Me,r as De,n as je,o as Fe}from"./support-377ab98e.js";import{d as Ne,i as x,h as ue,j as z,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 S,F as E,q as K,l as _,k as w,n as I,K as Ge,t as k,s as se,U as re,bK as O,G as y,bJ as Je,L as Ve,R as ze,S as He,bL as We,bM as Xe}from"./index-0ae7844c.js";import{n as Ye}from"./subscription-332ac1b1.js";import{M as Ze}from"./index-6d32dcba.js";import{_ as et,T as tt}from"./index-33c0557e.js";import{I as at}from"./index-81a07cb9.js";import{T as H}from"./isSymbol-d0ec885c.js";import{A as ce,a as de}from"./index-8bf25367.js";import{U as st}from"./index-5936ec05.js";import{_ as lt}from"./_plugin-vue_export-helper-277b1c3f.js";import"./Grid-1b086c47.js";import"./index-3189b1a9.js";import"./Col-84747301.js";import"./styleChecker-918e9a0f.js";import"./isPlainObject-4659a577.js";import"./vnode-454b4aa7.js";import"./index-0309284c.js";import"./updateLocale-15cba891.js";import"./index-c2bca1e0.js";import"./shallowequal-a089597b.js";import"./useState-80fd23c9.js";import"./useMemo-19000d17.js";import"./FormItemContext-e7b6ca96.js";import"./omit-e036f60c.js";import"./lodash-6746fa7b.js";import"./BaseSwitch.vue_vue_type_script_setup_true_lang-630a739a.js";import"./index-ff77e42c.js";import"./Badge-3dfd39bb.js";import"./isNumeric-3f69e2aa.js";import"./index-6585bad2.js";import"./index-c2776ddf.js";import"./index-7d2db2fd.js";import"./index-0c08cf04.js";import"./index-02b92135.js";import"./DialogWrap-930ec585.js";import"./pickAttrs-2e870478.js";import"./css-aae66f86.js";import"./index-a2cfdf13.js";import"./toArray-592e82ea.js";import"./SearchOutlined-8b990494.js";import"./isMobile-e2e89480.js";import"./index-7090fbb0.js";import"./adminDb-3e7064ba.js";import"./pushNotification-8265e648.js";import"./supabaseTableQuery-98b38f56.js";import"./useRefs-0b121885.js";import"./_flatRest-5e9bcb10.js";import"./index-936e9d5d.js";import"./index-9d9cf8fd.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}=Pe(o.record.problem||"",70);return h}},{title:"عملیات",dataIndex:"action",key:"action",width:150,align:"center",slot:"action",filterable:!1}],pe=[{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-f4cc8a35"),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)),Ct=v(()=>a("span",null,"اسپم",-1)),Tt=v(()=>a("span",null,"بازگردانی از اسپم",-1)),St={key:0,class:"py-8 text-center text-gray-500"},It={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"},Lt=v(()=>a("div",{class:"text-gray-500 mb-1"},"شماره همراه",-1)),Et={class:"font-600 dir-ltr text-right"},Mt=v(()=>a("div",{class:"text-gray-500 mb-1"},"وضعیت اشتراک",-1)),Dt=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"},Ot={key:0,class:"space-y-2"},Qt=v(()=>a("div",{class:"text-gray-500 text-sm"},"تاریخچه گفتگو",-1)),Gt={class:"text-xs text-gray-500 mb-1"},Jt={class:"leading-7 whitespace-pre-wrap"},Vt={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,me=x(),M=x(!1),W=x(!1),n=x(null),A=x(null),X=x(!1),b=x(!1),U=x("new"),q=x("all"),B=ue({new:0,answered:0,follow_up:0,closed:0,spam:0}),P=ue({content:""}),$=x([]),g=x([]),_e=ut,ve=z(()=>`${U.value}:${q.value}`),[fe,Q]=qe(),Y=x({columns:it,api:ie(U.value,q.value),defaultPageLimit:20}),ye=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)||"—"}),he=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)||"—"}),ge=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 xe(e){var t;return((t=pe.find(l=>l.value===e))==null?void 0:t.label)||e||"—"}function ke(){Y.value={...Y.value,api:ie(U.value,q.value)}}async function D(){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 be(e){U.value=e}Ke([U,q],()=>{ke()});async function we(e){var t;M.value=!0,W.value=!0,n.value=null,A.value=null,P.content="",$.value=[],g.value=[],await re(),O(),window.setTimeout(()=>O(),50),window.setTimeout(()=>O(),300);try{n.value=await Ee(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("خطا در دریافت جزئیات تیکت"),M.value=!1}finally{W.value=!1,await re(),O(),window.setTimeout(()=>O(),80)}}function C(){M.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 Te(e){const{file:t,onSuccess:l,onError:r,onProgress:f}=e,G=Je()||localStorage.getItem("tamin_token")||localStorage.getItem("token")||"";if(!G){y.error("توکن احراز هویت یافت نشد"),r==null||r(new Error("no token"));return}const J=new FormData;J.append("file",t);try{await new Promise((j,T)=>{const s=new XMLHttpRequest;s.open("POST",`${Ve.replace(/\/$/,"")}/upload/machartaa-img`),s.setRequestHeader("Authorization",`Bearer ${G}`),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){T(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){T(new Error("مسیر فایل از سرور دریافت نشد"));return}const L=String(R).replace(/^https?:\/\/[^/]+/,"");$.value.push({url:L,name:t.name});const ee=t.uid;g.value=g.value.map(te=>te.uid===ee?{...te,status:"done",url:ae(L),response:{path:L}}:te),l==null||l(u,s),j()}catch(u){T(u)}},s.onerror=()=>T(new Error("خطا در آپلود تصویر")),s.send(J)})}catch(j){r==null||r(j),y.error("خطا در آپلود تصویر");const T=t.uid;g.value=g.value.filter(s=>s.uid!==T)}}function Se(e){var l;const t=((l=e==null?void 0:e.response)==null?void 0:l.path)||Ie(e==null?void 0:e.url);$.value=$.value.filter(r=>r.url!==t),g.value=g.value.filter(r=>r.uid!==e.uid)}function Ie(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 Me(t),y.success("تیکت به اسپم منتقل شد"),((r=n.value)==null?void 0:r.id)===t&&C(),await D(),await Q()}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 De({id:t.id,status:t.status||"pending"}),y.success("تیکت از اسپم بازگردانده شد"),((l=n.value)==null?void 0:l.id)===t.id&&C(),await D(),await Q()}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&&C(),await D(),await Q()}catch(f){y.error((f==null?void 0:f.message)||"خطا در بستن تیکت")}finally{b.value=!1}}})}async function Ae(){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("پاسخ ارسال شد"),C(),await D(),await Q()}catch(e){y.error((e==null?void 0:e.message)||"خطا در ارسال پاسخ")}finally{X.value=!1}}}return Oe(D),(e,t)=>{const l=Be,r=Qe("RouterLink"),f=et,G=tt,J=Ue,j=Re,T=$e;return i(),d("div",rt,[p(T,null,{default:c(()=>[a("div",ct,[a("div",dt,[pt,p(r,{to:{name:"supportMain"}},{default:c(()=>[p(l,null,{default:c(()=>[S("بازگشت به چت")]),_:1})]),_:1})]),a("div",mt,[a("aside",_t,[vt,(i(!0),d(E,null,K(_(_e),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=>be(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(G,{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(E,null,K(_(pe),s=>(i(),w(f,{key:s.value,tab:s.label},null,8,["tab"]))),128))]),_:1},8,["activeKey"]),a("div",xt,[(i(),w(J,Ge({key:ve.value},Y.value,{ref_key:"table",ref:me,onRegister:_(fe)}),{action:c(({record:s})=>[a("div",kt,[p(_(H),{class:"cursor-pointer"},{title:c(()=>[bt]),default:c(()=>[p(V,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:m=>we(s)},null,8,["onClick"])]),_:2},1024),s.status!=="closed"?(i(),w(_(H),{key:0,class:"cursor-pointer"},{title:c(()=>[wt]),default:c(()=>[p(V,{icon:"vuesax-linear:close-circle",color:"#DC2626",onClick:m=>ne(s)},null,8,["onClick"])]),_:2},1024)):I("",!0),s.admin_queue!=="spam"?(i(),w(_(H),{key:1,class:"cursor-pointer"},{title:c(()=>[Ct]),default:c(()=>[p(V,{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(()=>[Tt]),default:c(()=>[p(V,{icon:"vuesax-linear:refresh-circle",color:"#16A34A",onClick:m=>Z(s)},null,8,["onClick"])]),_:2},1024))])]),_:1},16,["onRegister"]))])])])]),p(j,{visible:M.value,"onUpdate:visible":t[7]||(t[7]=s=>M.value=s),title:"جزئیات تیکت پشتیبانی","custom-footer":!0,width:"720px",onCancel:C,onClose:C},{footer:c(()=>{var s;return[n.value&&n.value.status!=="closed"?(i(),d("div",ta,[p(l,{onClick:C},{default:c(()=>[S("انصراف")]),_:1}),n.value.admin_queue!=="spam"?(i(),w(l,{key:0,loading:b.value,onClick:t[3]||(t[3]=m=>le())},{default:c(()=>[S(" انتقال به اسپم ")]),_:1},8,["loading"])):(i(),w(l,{key:1,loading:b.value,onClick:t[4]||(t[4]=m=>Z())},{default:c(()=>[S(" بازگردانی از اسپم ")]),_:1},8,["loading"])),p(l,{type:"danger",loading:b.value,onClick:t[5]||(t[5]=m=>ne())},{default:c(()=>[S(" بستن تیکت ")]),_:1},8,["loading"]),p(l,{type:"primary",loading:X.value,onClick:Ae},{default:c(()=>[S(" ارسال پاسخ ")]),_: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(()=>[S(" بازگردانی از اسپم ")]),_:1},8,["loading"])):I("",!0),p(l,{onClick:C},{default:c(()=>[S("بستن")]),_:1})]))]}),default:c(()=>{var s,m,F,N;return[W.value?(i(),d("div",St,"در حال بارگذاری...")):n.value?(i(),d("div",It,[a("div",At,[a("div",null,[$t,a("div",Rt,"#"+k(n.value.id),1)]),a("div",null,[Ut,a("div",qt,k(xe(n.value.subject)),1)]),a("div",null,[Bt,a("div",Pt,k(ye.value),1)]),a("div",null,[Lt,a("div",Et,k(he.value),1)]),a("div",null,[Mt,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,[Dt,a("div",jt,k(ge.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(_(ce),null,{default:c(()=>[(i(!0),d(E,null,K(n.value.attachments,(u,R)=>(i(),w(_(de),{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})])):I("",!0)]),(N=n.value.messages)!=null&&N.length?(i(),d("div",Ot,[Qt,(i(!0),d(E,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",Gt,k(u.sender_type==="admin"?"کارشناس":"کاربر")+" · "+k(u.created_at?_(oe)(u.created_at):""),1),a("div",Jt,k(u.content),1),(R=u.attachments)!=null&&R.length?(i(),d("div",Vt,[p(_(ce),null,{default:c(()=>[(i(!0),d(E,null,K(u.attachments,(L,ee)=>(i(),w(_(de),{key:`msg-att-${u.id}-${ee}`,src:_(ae)(L.url),alt:L.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)])):I("",!0)],2)}),128))])):I("",!0),n.value.status!=="closed"?(i(),d(E,{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":Te,"before-upload":Ce,onRemove:Se,onChange:_(Xe)},{default:c(()=>[g.value.length<6?(i(),d("div",Wt,Yt)):I("",!0)]),_:1},8,["file-list","accept","onChange"])])],64)):(i(),d("div",Zt," این تیکت بستهشده است. ")),n.value.admin_queue==="spam"?(i(),d("div",ea," این تیکت در وضعیت اسپم است و برای کاربر تغییری نمایش داده نمیشود. ")):I("",!0)])):I("",!0)]}),_:1},8,["visible"])]),_:1})])}}});const is=lt(sa,[["__scopeId","data-v-f4cc8a35"]]);export{is as default};
|