4 lines
19 KiB
JavaScript
4 lines
19 KiB
JavaScript
import{_ as ze}from"./BasicModal.vue_vue_type_style_index_0_lang-c8095186.js";import{_ as Ye,u as Ve}from"./useBaseTable-b212fb56.js";import{_ as Ge,B as He}from"./button.vue_vue_type_style_index_0_lang-195b8d9a.js";import{I as ie}from"./Icon-2a8c3e41.js";import{t as K}from"./useDataTime-6a09e5c0.js";import{u as q}from"./usePrice-bc935b83.js";import{_ as re}from"./CustomTag.vue_vue_type_script_setup_true_lang-71452435.js";import{N as B,b as a,X as Je,I as $,d as Ke,g as p,r as ue,h as E,v as Xe,ad as Qe,o as h,c as U,a as m,w as o,e as c,j as O,G as We,F as J,t as d,i as D,k as M,n as ce,D as g}from"./index-a50096a0.js";import{c as Ze}from"./products-992de819.js";import{D as et,_ as tt,T as at,a as lt}from"./index-1b5556a6.js";import{S as ot}from"./index-7828d717.js";import{I as nt,_ as st}from"./index-53e1df7d.js";import{b as it,C as rt}from"./index-e70e3e7c.js";import{_ as ut,F as ct}from"./index-146a13fa.js";import{S as dt}from"./fa_IR-6cf6636d.js";import{T as de}from"./shallowequal-fd828cab.js";import{_ as _t}from"./index-ca04db0a.js";import"./index-7a74fc9f.js";import"./Col-ebc8e0ff.js";import"./vnode-83d05633.js";import"./_plugin-vue_export-helper-ad575245.js";import"./pickAttrs-e8ddf09f.js";import"./FormItemContext-9eb80cb7.js";import"./useState-615e93e3.js";import"./lodash-ce2aea52.js";import"./isPlainObject-2043fc31.js";import"./toArray-1fa725d3.js";const X=[{title:"ثبت سفارش"},{title:"در حال آمادهسازی"},{title:"ارسال شده"},{title:"تحویل داده شده"},{title:"لغو شده"}],ft=[{value:"home",label:"پرداخت در محل"},{value:"zarinpall",label:"زرینپال"}];function _e(l){if(l.payment_sts===4||l.sts===2)return{label:"پرداخت موفق",color:"#16a34a",bg:"#dcfce7"};if(l.payment_type==="home")return{label:"پرداخت در محل",color:"#2563eb",bg:"#dbeafe"};switch(l.sts){case 1:return{label:"پرداخت نشده",color:"#ca8a04",bg:"#fef9c3"};case 3:return{label:"در انتظار پرداخت",color:"#dc2626",bg:"#fee2e2"};default:return{label:"نامشخص",color:"#6b7280",bg:"#f3f4f6"}}}const pt=async l=>{const s=await B.post("/order/all",l);return s!=null&&s.rows&&Array.isArray(s.rows)?s:Array.isArray(s)?{rows:s,query:{...l,total:s.length}}:{rows:[],query:{...l,total:0}}},mt=async l=>await B.post(`/order/${l}`),vt=async l=>await B.post("/order/admin/create",l),yt=async(l,s)=>await B.put(`/order/${l}/status`,s),bt=async()=>{try{return await B.get("/order/status-options")}catch{return X}};function gt(l){return typeof l=="function"||Object.prototype.toString.call(l)==="[object Object]"&&!Je(l)}const fe={home:"پرداخت در محل",zarinpall:"زرینپال"};function ht(l){const s=l==null?void 0:l.user;if(!s)return"—";const _=[s.first_name,s.last_name].filter(Boolean).join(" ");return _||(s.name?s.name:s.phone??"—")}function wt(l){return{"ثبت سفارش":{color:"#2563eb",bg:"#dbeafe"},"در حال آمادهسازی":{color:"#7c3aed",bg:"#ede9fe"},"ارسال شده":{color:"#2563eb",bg:"#dbeafe"},"تحویل داده شده":{color:"#059669",bg:"#d1fae5"},"لغو شده":{color:"#6b7280",bg:"#f3f4f6"}}[l]??{color:"#374151",bg:"#f3f4f6"}}const xt=[{title:"ردیف",dataIndex:"id",key:"row_index",filterable:!1,width:60,align:"center",customRender:l=>l.index+1},{title:"کد سفارش",dataIndex:"id",key:"id",width:90,align:"center"},{title:"مشتری",dataIndex:"user_id",key:"user_id",width:140,customRender:l=>ht(l.record)},{title:"تعداد اقلام",dataIndex:"total_qty",key:"total_qty",width:90,align:"center",customRender:l=>{var s;return l.record.total_qty??((s=l.record.order_items)==null?void 0:s.length)??0}},{title:"مبلغ کل",dataIndex:"total_price",key:"total_price",width:120,align:"center",customRender:l=>q(l.record.discount_total_price??l.record.total_price??0,!0,"")},{title:"تخفیف",dataIndex:"total_discounts",key:"total_discounts",width:100,align:"center",customRender:l=>q(l.record.total_discounts??0,!0,"")},{title:"نوع پرداخت",dataIndex:"payment_type",key:"payment_type",width:110,align:"center",customRender:l=>fe[l.record.payment_type]??l.record.payment_type??"—"},{title:"وضعیت پرداخت",dataIndex:"sts",key:"payment_status",width:120,align:"center",customRender:l=>{const s=_e(l.record);return a("div",{class:"flex justify-center"},[a(re,{class:"px-2 py-1 text-xs font-bold",textColor:s.color,bgColor:s.bg},{default:()=>[s.label]})])}},{title:"آخرین وضعیت",dataIndex:"latest_status",key:"latest_status",width:130,align:"center",customRender:l=>{const s=l.record.latest_status??"—",_=wt(s);return a("div",{class:"flex justify-center"},[a(re,{class:"px-2 py-1 text-xs font-bold",textColor:_.color,bgColor:_.bg},gt(s)?s:{default:()=>[s]})])}},{title:"زمان ثبت",dataIndex:"created_at",key:"created_at",width:130,customRender:l=>l.record.created_at?K(l.record.created_at):"—"},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center",width:120,fixed:"right"}],pe="order_notify_phones";async function kt(l,s){const{data:_,error:L}=await $.from("configs").select("id").eq("key",l).maybeSingle();if(L)throw L;if(_!=null&&_.id){const{data:x,error:C}=await $.from("configs").update({value:s}).eq("key",l).select("id");if(C)throw C;if(!(x!=null&&x.length))throw new Error("ذخیره انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.");return}const{data:w,error:k}=await $.from("configs").insert({key:l,value:s}).select("id");if(k)throw k;if(!(w!=null&&w.length))throw new Error("ایجاد تنظیم انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.")}async function me(){const{data:l,error:s}=await $.from("configs").select("value").eq("key",pe).maybeSingle();if(s)throw s;return l!=null&&l.value?l.value.split(/[\n,;]+/).map(_=>_.trim()).filter(Boolean):[]}async function Ct(l){const s=l.map(_=>_.trim()).filter(Boolean).join(`
|
|
`);return await kt(pe,s),me()}const St={class:"flex justify-between items-center mb-4"},It=m("h2",null,"سفارشات",-1),Ot={class:"flex gap-2"},qt={class:"gap-2 flex justify-center"},Tt=m("span",null,"جزئیات",-1),Ut=m("span",null,"تغییر وضعیت",-1),Bt=m("h3",{class:"font-bold mb-2"},"اقلام سفارش",-1),Lt=m("h3",{class:"font-bold mt-4 mb-2"},"تاریخچه وضعیت سفارش",-1),Nt={class:"font-bold"},Pt={class:"text-gray-500 text-sm"},Rt=m("div",{class:"text-gray-400 text-xs mt-1"}," وضعیت پرداخت فقط از طریق درگاه زرینپال قابل تغییر است. ",-1),jt={class:"col-span-2"},Et={class:"flex justify-between items-center mb-2"},Dt=m("span",{class:"font-bold"},"محصولات",-1),Mt={class:"col-span-2 flex justify-end"},$t=m("div",{class:"text-gray-400 text-xs mt-1"}," با ثبت هر سفارش جدید، به این شمارهها پیامک «سفارش جدید» ارسال میشود. پیامک تأیید سفارش هم برای خود مشتری ارسال میشود. ",-1),pa=Ke({__name:"index",setup(l){const[s,_]=Ve(),L=p({columns:xt,api:pt,defaultPageLimit:20}),w=p(!1),k=p(!1),x=p(!1),C=p(!1),A=p(!1),F=p(!1),z=p(!1),Y=p(!1),N=p(""),u=p(null),P=p(null),V=p(null),Q=p([]),W=p([]),Z=p(X),y=ue({title:"",cancel_reason:"",notify_user:!0}),r=ue({user_id:void 0,payment_type:"home",status_title:void 0,address:"",note:"",items:[{product_id:void 0,qty:1}]}),ve=[{title:"محصول",dataIndex:"title",key:"title",customRender:({record:e})=>{var t,i;return e.title??((t=e.product)==null?void 0:t.title_fa)??((i=e.product)==null?void 0:i.title)??"—"}},{title:"تعداد",dataIndex:"qty",key:"qty",width:80,align:"center"},{title:"قیمت واحد",dataIndex:"total_price",key:"unit_price",width:120,customRender:({record:e})=>{const t=e.qty||1,i=e.total_price??0;return q(Math.round(i/t),!0,"")}},{title:"جمع",dataIndex:"total_price",key:"total_price",width:120,customRender:({record:e})=>q(e.total_price??0,!0,"")}],ee=E(()=>Z.value.map(e=>({value:e.title,label:e.title}))),ye=ft,be=E(()=>Q.value.map(e=>({value:e.id,label:[e.first_name,e.last_name].filter(Boolean).join(" ")||e.name||e.phone||e.id}))),ge=E(()=>W.value.map(e=>({value:e.id,label:`${e.title_fa??e.title??e.id} — ${q(e.price??0,!0,"")}`}))),he=E(()=>{var t;return[...((t=u.value)==null?void 0:t.orders_status)??[]].sort((i,f)=>new Date(f.created_at??0).getTime()-new Date(i.created_at??0).getTime())});function we(e){const t=e==null?void 0:e.user;return t&&([t.first_name,t.last_name].filter(Boolean).join(" ")||t.name||t.phone)||"—"}function xe(e){return e?fe[e]??e:"—"}function te(e){return e?_e(e).label:"—"}function ae(e){return q(e??0,!0,"تومان")}function ke(e){if(!e)return"—";if(e.formatted_address)return e.formatted_address;const t=e.address;if(!t)return"—";if(typeof t=="string")return t||"—";if(t!=null&&t.payload){const i=t.payload;return[i.name,i.province,i.city,i.address,i.zip,i.phone].filter(Boolean).join(" - ")}return t.province||t.city||t.address?[t.name,t.province,t.city,t.address,t.zip,t.phone].filter(Boolean).join(" - "):"—"}function Ce(e,t){var i;return(i=t.label)==null?void 0:i.toLowerCase().includes(e.toLowerCase())}function Se(e,t){var i;return(i=t.label)==null?void 0:i.toLowerCase().includes(e.toLowerCase())}async function Ie(e){w.value=!0,A.value=!0;try{u.value=await mt(e.id)}catch{g.error("خطا در دریافت جزئیات سفارش"),u.value=e}finally{A.value=!1}}function le(){w.value=!1,u.value=null}function Oe(e){P.value=e.id,V.value=e;const t=X.map(i=>i.title);y.title=t.includes(e.latest_status)?e.latest_status:"",y.cancel_reason="",y.notify_user=!0,k.value=!0}function oe(){k.value=!1,P.value=null,V.value=null}async function qe(){if(!P.value||!y.title){g.error("لطفاً وضعیت را انتخاب کنید");return}F.value=!0;try{await yt(P.value,{title:y.title,cancel_reason:y.cancel_reason||void 0,notify_user:y.notify_user}),g.success("وضعیت سفارش با موفقیت بهروزرسانی شد"),oe(),await _()}catch(e){g.error("خطا در بهروزرسانی وضعیت: "+((e==null?void 0:e.message)??""))}finally{F.value=!1}}function Te(){r.user_id=void 0,r.payment_type="home",r.status_title=void 0,r.address="",r.note="",r.items=[{product_id:void 0,qty:1}],x.value=!0}function ne(){x.value=!1}function Ue(){r.items.push({product_id:void 0,qty:1})}function Be(e){r.items.length>1&&r.items.splice(e,1)}async function Le(){var t,i;if(!r.user_id){g.error("لطفاً مشتری را انتخاب کنید");return}const e=r.items.filter(f=>f.product_id&&f.qty>0);if(!e.length){g.error("حداقل یک محصول معتبر وارد کنید");return}z.value=!0;try{await vt({user_id:r.user_id,payment_type:r.payment_type,status_title:r.status_title,address:r.address,note:r.note,items:e.map(f=>({product_id:f.product_id,qty:f.qty}))}),g.success("سفارش با موفقیت ثبت شد"),ne(),await _()}catch(f){g.error("خطا در ثبت سفارش: "+(((i=(t=f==null?void 0:f.response)==null?void 0:t.data)==null?void 0:i.error)??(f==null?void 0:f.message)??""))}finally{z.value=!1}}async function Ne(){C.value=!0;try{const e=await me();N.value=e.join(`
|
|
`)}catch(e){g.error("خطا در دریافت تنظیمات: "+((e==null?void 0:e.message)??""))}}function se(){C.value=!1}async function Pe(){Y.value=!0;try{const e=N.value.split(/[\n,;]+/).map(t=>t.trim()).filter(Boolean);await Ct(e),g.success("تنظیمات پیامک ذخیره شد"),se()}catch(e){g.error("خطا در ذخیره تنظیمات: "+((e==null?void 0:e.message)??""))}finally{Y.value=!1}}return Xe(async()=>{try{const[e,t,i]=await Promise.all([Qe(),Ze(),bt()]);Q.value=e??[],W.value=t??[],i!=null&&i.length&&(Z.value=i)}catch(e){console.error("orders page init error:",e)}}),(e,t)=>{const i=Ge,f=Ye,G=He,v=et,Re=tt,je=it,Ee=lt,De=at,Me=ot,R=ze,$e=nt,b=ut,T=dt,j=st,Ae=rt,H=ct,Fe=_t;return h(),U("div",null,[m("div",St,[It,m("div",Ot,[a(i,{onClick:Ne},{default:o(()=>[c("تنظیمات پیامک سفارش")]),_:1}),a(i,{type:"primary",onClick:Te},{default:o(()=>[c("ثبت سفارش جدید")]),_:1})])]),a(f,We(L.value,{onRegister:O(s)}),{action:o(({record:n})=>[m("div",qt,[a(O(de),{class:"cursor-pointer"},{title:o(()=>[Tt]),default:o(()=>[a(ie,{icon:"vuesax-linear:eye",color:"#1D4ED8",onClick:S=>Ie(n)},null,8,["onClick"])]),_:2},1024),a(O(de),{class:"cursor-pointer"},{title:o(()=>[Ut]),default:o(()=>[a(ie,{icon:"vuesax-linear:refresh-circle",color:"#059669",onClick:S=>Oe(n)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),a(R,{visible:w.value,"onUpdate:visible":t[0]||(t[0]=n=>w.value=n),title:"جزئیات سفارش","custom-footer":"",width:"85%",onClose:le},{footer:o(()=>[a(G,{onClick:le},{default:o(()=>[c("بستن")]),_:1})]),default:o(()=>[a(Me,{spinning:A.value},{default:o(()=>[u.value?(h(),U(J,{key:0},[a(Re,{bordered:"",column:2,size:"small",class:"mb-4"},{default:o(()=>{var n,S;return[a(v,{label:"کد سفارش"},{default:o(()=>[c(d(u.value.id),1)]),_:1}),a(v,{label:"مشتری"},{default:o(()=>[c(d(we(u.value)),1)]),_:1}),a(v,{label:"تلفن"},{default:o(()=>{var I;return[c(d(((I=u.value.user)==null?void 0:I.phone)??"—"),1)]}),_:1}),a(v,{label:"تاریخ ثبت"},{default:o(()=>[c(d(u.value.created_at?O(K)(u.value.created_at):"—"),1)]),_:1}),a(v,{label:"نوع پرداخت"},{default:o(()=>[c(d(xe(u.value.payment_type)),1)]),_:1}),a(v,{label:"وضعیت پرداخت"},{default:o(()=>[c(d(te(u.value)),1)]),_:1}),a(v,{label:"آخرین وضعیت سفارش"},{default:o(()=>[c(d(u.value.latest_status??"—"),1)]),_:1}),a(v,{label:"تعداد اقلام"},{default:o(()=>[c(d(u.value.total_qty??0),1)]),_:1}),a(v,{label:"مبلغ نهایی"},{default:o(()=>[c(d(ae(u.value.discount_total_price??u.value.total_price)),1)]),_:1}),a(v,{label:"تخفیف"},{default:o(()=>[c(d(ae(u.value.total_discounts)),1)]),_:1}),a(v,{label:"کد تخفیف"},{default:o(()=>[c(d(u.value.code||"—"),1)]),_:1}),a(v,{label:"آدرس تحویل",span:2},{default:o(()=>[c(d(ke(u.value)),1)]),_:1}),(S=(n=u.value.address_doc)==null?void 0:n.payload)!=null&&S.phone?(h(),D(v,{key:0,label:"تلفن گیرنده"},{default:o(()=>[c(d(u.value.address_doc.payload.phone),1)]),_:1})):M("",!0),a(v,{label:"یادداشت",span:2},{default:o(()=>[c(d(u.value.note||"—"),1)]),_:1}),u.value.cancel_reason?(h(),D(v,{key:1,label:"دلیل لغو",span:2},{default:o(()=>[c(d(u.value.cancel_reason),1)]),_:1})):M("",!0)]}),_:1}),Bt,a(je,{"data-source":u.value.order_items??[],columns:ve,pagination:!1,size:"small","row-key":"id",bordered:""},null,8,["data-source"]),Lt,a(De,null,{default:o(()=>[(h(!0),U(J,null,ce(he.value,n=>(h(),D(Ee,{key:n.id??n.created_at},{default:o(()=>[m("div",Nt,d(n.title),1),m("div",Pt,d(n.created_at?O(K)(n.created_at):"—"),1)]),_:2},1024))),128))]),_:1})],64)):M("",!0)]),_:1},8,["spinning"])]),_:1},8,["visible"]),a(R,{visible:k.value,"onUpdate:visible":t[4]||(t[4]=n=>k.value=n),title:"تغییر وضعیت سفارش","ok-text":"ذخیره","cancel-text":"انصراف","confirm-loading":F.value,onOk:qe,onClose:oe,width:"500px"},{default:o(()=>[a(H,{layout:"vertical"},{default:o(()=>[a(b,{label:"وضعیت پرداخت"},{default:o(()=>[a($e,{value:te(V.value),disabled:""},null,8,["value"]),Rt]),_:1}),a(b,{label:"وضعیت جدید سفارش",required:""},{default:o(()=>[a(T,{value:y.title,"onUpdate:value":t[1]||(t[1]=n=>y.title=n),placeholder:"انتخاب وضعیت",options:ee.value},null,8,["value","options"])]),_:1}),y.title==="لغو شده"?(h(),D(b,{key:0,label:"دلیل لغو"},{default:o(()=>[a(j,{value:y.cancel_reason,"onUpdate:value":t[2]||(t[2]=n=>y.cancel_reason=n),rows:"3",placeholder:"دلیل لغو سفارش"},null,8,["value"])]),_:1})):M("",!0),a(b,null,{default:o(()=>[a(Ae,{checked:y.notify_user,"onUpdate:checked":t[3]||(t[3]=n=>y.notify_user=n)},{default:o(()=>[c(" اطلاعرسانی به کاربر (پیامک و نوتیفیکیشن) ")]),_:1},8,["checked"])]),_:1})]),_:1})]),_:1},8,["visible","confirm-loading"]),a(R,{visible:x.value,"onUpdate:visible":t[10]||(t[10]=n=>x.value=n),title:"ثبت سفارش جدید","ok-text":"ثبت سفارش","cancel-text":"انصراف","confirm-loading":z.value,onOk:Le,onClose:ne,width:"80%"},{default:o(()=>[a(H,{layout:"vertical",class:"grid grid-cols-2 gap-3"},{default:o(()=>[a(b,{label:"مشتری",required:"",class:"col-span-2"},{default:o(()=>[a(T,{value:r.user_id,"onUpdate:value":t[5]||(t[5]=n=>r.user_id=n),"show-search":"",placeholder:"انتخاب مشتری",options:be.value,"filter-option":Ce},null,8,["value","options"])]),_:1}),a(b,{label:"نوع پرداخت"},{default:o(()=>[a(T,{value:r.payment_type,"onUpdate:value":t[6]||(t[6]=n=>r.payment_type=n),options:O(ye)},null,8,["value","options"])]),_:1}),a(b,{label:"وضعیت اولیه سفارش"},{default:o(()=>[a(T,{value:r.status_title,"onUpdate:value":t[7]||(t[7]=n=>r.status_title=n),options:ee.value,"allow-clear":"",placeholder:"پیشفرض: ثبت سفارش"},null,8,["value","options"])]),_:1}),a(b,{label:"آدرس",class:"col-span-2"},{default:o(()=>[a(j,{value:r.address,"onUpdate:value":t[8]||(t[8]=n=>r.address=n),rows:"2",placeholder:"آدرس تحویل"},null,8,["value"])]),_:1}),a(b,{label:"یادداشت",class:"col-span-2"},{default:o(()=>[a(j,{value:r.note,"onUpdate:value":t[9]||(t[9]=n=>r.note=n),rows:"2",placeholder:"یادداشت سفارش"},null,8,["value"])]),_:1}),m("div",jt,[m("div",Et,[Dt,a(G,{type:"dashed",size:"small",onClick:Ue},{default:o(()=>[c("+ افزودن محصول")]),_:1})]),(h(!0),U(J,null,ce(r.items,(n,S)=>(h(),U("div",{key:S,class:"grid grid-cols-12 gap-2 mb-2 items-end"},[a(b,{label:"محصول",class:"col-span-7 mb-0",required:!0},{default:o(()=>[a(T,{value:n.product_id,"onUpdate:value":I=>n.product_id=I,"show-search":"",placeholder:"انتخاب محصول",options:ge.value,"filter-option":Se},null,8,["value","onUpdate:value","options"])]),_:2},1024),a(b,{label:"تعداد",class:"col-span-3 mb-0",required:!0},{default:o(()=>[a(Fe,{value:n.qty,"onUpdate:value":I=>n.qty=I,min:1,class:"w-full"},null,8,["value","onUpdate:value"])]),_:2},1024),m("div",Mt,[a(G,{danger:"",type:"text",onClick:I=>Be(S),disabled:r.items.length<=1},{default:o(()=>[c(" حذف ")]),_:2},1032,["onClick","disabled"])])]))),128))])]),_:1})]),_:1},8,["visible","confirm-loading"]),a(R,{visible:C.value,"onUpdate:visible":t[12]||(t[12]=n=>C.value=n),title:"تنظیمات پیامک سفارش جدید","ok-text":"ذخیره","cancel-text":"انصراف","confirm-loading":Y.value,onOk:Pe,onClose:se,width:"520px"},{default:o(()=>[a(H,{layout:"vertical"},{default:o(()=>[a(b,{label:"شمارههای اطلاعرسانی ادمین"},{default:o(()=>[a(j,{value:N.value,"onUpdate:value":t[11]||(t[11]=n=>N.value=n),rows:"5",placeholder:"هر شماره در یک خط (مثال: 09121234567)"},null,8,["value"]),$t]),_:1})]),_:1})]),_:1},8,["visible","confirm-loading"])])}}});export{pa as default};
|