- Rial wage and gram-debt arithmetic matched to the reference; order corrections keep debt in sync - Document confirm/un-confirm is a compare-and-swap (no double-applied cache under concurrency) - Settlement document and expert inputs validated (400 instead of 500) - Expert: edit / activate-deactivate own customers, adjust raw weights only - Made-to-order flow in the app, PreOrder.quantity migration - Order grids: customer column, sort keys; panel select search; pre-order quantity save - Rebuilt release artifacts Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{Z as wt,y as z,d as kt,v as Ct,u as Nt,x as qt,a as C,w as s,i as M,m as $,r as m,o as d,c as i,h as N,f as b,$ as Ut,b as x,e as F,F as q,p as R,a0 as St,t as w,E as Ot,W as Pt,H as Rt,z as Q,s as j,J as B,l as zt,_ as $t}from"./index-CpVArufm.js";import{o as Ft}from"./select--BgT6D7O.js";import{X as Bt}from"./model-mwiDYd1J.js";import{b as Tt}from"./productListModel-Ht1NntTk.js";import{u as Vt}from"./auth-taL2eAff.js";import"./filters-CoNJlguG.js";import"./index-DjZc5EYL.js";import"./SettingOutlined-E4OknxY2.js";const H="admin_cart_items",Et=wt("cart",{state:()=>({items:[]}),actions:{addToCart(n){const c=this.items.findIndex(v=>v.pid==n.pid&&v.vid==n.vid),p=n.product.variants_all.filter(v=>v.id===n.vid)[0];p&&!(!p.is_pre_order&&p.qty===0)&&(c==-1?this.items.push(n):(this.items[c].product=n.product,this.items[c].qty=n.qty))},setItems(n){this.items=n,localStorage.setItem(H,JSON.stringify(n))},add(n){this.addToCart(n),this.setItems(this.items)},remove(n){const c=this.items.findIndex(p=>p.pid==n.pid&&p.vid==n.vid);c>-1&&this.items.splice(c,1),this.setItems(this.items)},updateItemQuantity(n){this.items[n.index].qty=n.quantity,this.setItems(this.items)},updateItemRial(n){const c=this.items[n.index];if(!c)return;const p=n.rial==null?0:Number(n.rial);c.rial_input=Number.isFinite(p)?p:0,this.setItems(this.items)},clear(){this.items=[],this.setItems(this.items)},async init(){try{const n=JSON.parse(localStorage.getItem(H)??"[]")||[],c=n.map(v=>v.product.id);if(c.length===0){this.setItems([]);return}const{data:p}=await z.post("product/variant",{products_id:c});if(p){const v=[];for(const U of n){const u=p.find(T=>T.id==U.product.id);u&&(!u.variants_all[0].is_pre_order&&u.variants_all[0].qty===0||v.push({vid:U.vid,pid:u.id,product:u,qty:U.qty,promotion_id:u.promotion&&u.promotion.id?u.promotion.id:null,...U.rial_input!=null?{rial_input:Number(U.rial_input)}:{}}))}this.setItems(v)}}catch(n){console.log("error in cart",n)}}}}),Lt=["src"],Mt={key:1,class:"flex items-center"},Qt=["src"],jt={key:5,class:"flex"},Jt={style:{width:"max-content"}},Wt={class:"grid-5"},At={class:"totals"},K="/img/no-items.png",Dt=kt({__name:"create",setup(n){const c=zt(),p=Ct(),v=Nt(),U=Vt(),u=Et(),T=e=>!!v.hasPermission(e),Z=Tt(v.isSuperAdmin),Y=$(null),O=$(!1),J=$([]),W=$({}),tt={1:"ثبت سفارش",2:"تایید مدیر سیستم",3:"در حال تامین",4:"در حال آماده سازی",5:"ارسال",6:"تحویل مشتری"},o=Q({customer_id:void 0,sts:void 0,type:void 0,note:"",shipping_address:{reciver_fname:"",reciver_lname:"",province:"",city:"",zipcode:"",reciver_phone:"",reciver_fixed_phone:"",address:""}}),f=Q({}),et=j(()=>{var e;return(e=U.user)==null?void 0:e.id}),h=j(()=>u.items),at=[{title:"حذف",dataIndex:"delete",width:60,align:"center"},{title:"کد محصول",dataIndex:"pid",align:"center",width:90},{title:"محصول",dataIndex:"product"},{title:"اجرت",dataIndex:"wage",align:"center"},{title:"اجرت ریالی",dataIndex:"rial",align:"center",width:160},{title:"تعداد",dataIndex:"qty",align:"center",width:140},{title:"وزن",dataIndex:"weight",align:"center",width:90},{title:"مجموع",dataIndex:"total",align:"center"}],it=e=>e?`${e}`.replace(/\B(?=(\d{3})+(?!\d))/g,","):"",st=e=>e?e.replace(/,/g,""):"",_=Q({});function k(e){return e.product.variants_all.find(t=>t.id===e.vid)??{}}function nt(e){var t,l,y;return((t=e==null?void 0:e.thumb)==null?void 0:t.full)??((y=(l=e==null?void 0:e.ProductImage)==null?void 0:l[0])==null?void 0:y.image)??K}const ot=j(()=>{let e=0;for(const t of h.value)e+=Number(k(t).grams??0);return e});function lt(e){return Number(k(e).grams??0)*e.qty}function rt(e){const t=h.value[e];if(!t)return 1/0;const l=Number(k(t).qty??0);return l>0?l:1/0}function dt(e,t){u.updateItemQuantity({index:e,quantity:Number(t)})}function A(e){if(e.rial_input!=null){const l=Number(e.rial_input);return Number.isFinite(l)?l:0}const t=Number(k(e).rial_pay??0);return Number.isFinite(t)?t:0}function ut(e,t){u.updateItemRial({index:e,rial:t==null||t===""?0:Number(t)})}function pt(e,t){mt(e,String(t.key))}function mt(e,t){u.add({vid:t,pid:e.id,product:e,qty:1,promotion_id:e.promotion&&e.promotion.id?e.promotion.id:null}),B.info("اضافه شد")}function ct(e){const t=k(e);_.id=t.id,_.grams=Number(t.grams??0)}async function _t(){var e,t;if(!(!_.id||!_.grams))try{O.value=!0;const l=h.value.find(y=>y.vid===_.id);await z.post("add/variant",{product_id:l==null?void 0:l.pid,title:`${_.grams} گرم`,grams:_.grams}),await u.init(),_.id=void 0,_.grams=void 0}catch(l){B.error(((t=(e=l==null?void 0:l.response)==null?void 0:e.data)==null?void 0:t.message)??"خطا در ثبت وزن")}finally{O.value=!1}}function vt(e,t){return Ft(t).toLowerCase().includes(e.toLowerCase())}function ft(){return Object.keys(f).forEach(e=>delete f[e]),o.customer_id||(f.customer_id="مقدار را وارد نمایید"),o.sts===void 0&&(f.sts="مقدار را وارد نمایید"),o.type===void 0&&(f.type="مقدار را وارد نمایید"),Object.keys(f).length===0}async function D(){var e,t;if(ft())try{O.value=!0;const l=h.value.map(y=>({vid:y.vid,qty:y.qty,promotion_id:y.promotion_id,rial_input:A(y)}));await z.post("order",{...o,reagent_id:et.value,app:"app",order_items:l}),B.info("عملیات با موفقیت انجام شد"),u.clear(),c.push("/order/list")}catch(l){console.log(l),B.error(((t=(e=l==null?void 0:l.response)==null?void 0:e.data)==null?void 0:t.message)??"خطا در ثبت اطلاعات.")}finally{O.value=!1}}return qt(async()=>{try{const[e,t]=await Promise.all([z.get("order/type"),z.post("single-customer",{page:1,limit:500})]);W.value=e.data,J.value=t.data.rows??[]}catch(e){console.log(e)}await u.init()}),(e,t)=>{const l=m("a-button"),y=m("a-menu-item"),gt=m("a-menu"),yt=m("a-dropdown"),V=m("a-input-number"),ht=m("a-table"),E=m("a-select-option"),L=m("a-select"),g=m("a-form-item"),S=m("a-input"),X=m("a-textarea"),bt=m("a-tag"),xt=m("a-form"),G=m("a-card"),It=m("a-spin");return T("order.create")?(d(),C(It,{key:0,spinning:O.value},{default:s(()=>[i(G,{title:"لیست محصولات",class:"page-card"},{default:s(()=>[i(Bt,{ref_key:"tblProducts",ref:Y,model:N(Z),"mobile-cards":""},{image:s(({record:a})=>[R("img",{width:"90px",height:"90px",style:{"object-fit":"scale-down"},src:a.thumb&&a.thumb.full?a.thumb.full:K},null,8,Lt)]),op:s(({record:a})=>[i(yt,null,{overlay:s(()=>[i(gt,{onClick:r=>pt(a,r)},{default:s(()=>[(d(!0),x(q,null,F(a.variants_all,r=>(d(),C(y,{key:r.id},{default:s(()=>[b(" افزودن تنوع "+w(r.title),1)]),_:2},1024))),128))]),_:2},1032,["onClick"])]),default:s(()=>[i(l,{style:{"margin-left":"8px"}},{default:s(()=>[t[13]||(t[13]=b(" افزودن ",-1)),i(N(Ut))]),_:1})]),_:2},1024)]),_:1},8,["model"]),h.value.length>0?(d(),C(G,{key:0,title:"ثبت سفارش",class:"mt-5"},{default:s(()=>[i(ht,{columns:at,"data-source":h.value,bordered:"",pagination:!1,"row-key":"vid",size:N(p).isMobile?"small":"middle",scroll:N(p).isSmallScreen?{x:"max-content"}:void 0},{bodyCell:s(({column:a,record:r,index:P})=>[a.dataIndex==="delete"?(d(),C(N(St),{key:0,class:"cursor-pointer",onClick:I=>N(u).remove(r)},null,8,["onClick"])):a.dataIndex==="product"?(d(),x("div",Mt,[R("img",{src:nt(r.product),width:"50px"},null,8,Qt),b(" "+w(r.product.title),1)])):a.dataIndex==="wage"?(d(),x(q,{key:2},[b(w(k(r).percentage_pay)+"٪ ",1)],64)):a.dataIndex==="rial"?(d(),C(V,{key:3,value:A(r),min:0,step:5e4,style:{width:"140px"},formatter:it,parser:st,onChange:I=>ut(P,I)},null,8,["value","onChange"])):a.dataIndex==="qty"?(d(),C(V,{key:4,value:h.value[P].qty,"onUpdate:value":I=>h.value[P].qty=I,min:1,max:rt(P),onChange:I=>dt(P,I)},null,8,["value","onUpdate:value","max","onChange"])):a.dataIndex==="weight"?(d(),x("div",jt,[!_.grams||_.id!==k(r).id?(d(),x(q,{key:0},[R("span",Jt,w(k(r).title),1),i(N(Ot),{class:"cursor-pointer ml-2 text-primary",onClick:I=>ct(r)},null,8,["onClick"])],64)):(d(),x(q,{key:1},[i(V,{value:_.grams,"onUpdate:value":t[0]||(t[0]=I=>_.grams=I)},null,8,["value"]),i(N(Pt),{class:"cursor-pointer ml-2 text-success",onClick:_t})],64))])):a.dataIndex==="total"?(d(),x(q,{key:6},[b(w(lt(r))+" گرم ",1)],64)):M("",!0)]),_:1},8,["data-source","size","scroll"]),i(xt,{layout:"vertical",class:"mt-4",onSubmit:Rt(D,["prevent"])},{default:s(()=>[R("div",Wt,[i(g,{label:"مشتری","validate-status":f.customer_id?"error":"",help:f.customer_id},{default:s(()=>[i(L,{value:o.customer_id,"onUpdate:value":t[1]||(t[1]=a=>o.customer_id=a),"show-search":"","option-filter-prop":"children","filter-option":vt},{default:s(()=>[(d(!0),x(q,null,F(J.value,a=>(d(),C(E,{key:a.id,value:a.id},{default:s(()=>[b(w(`${a.id}-${a.fname} ${a.lname}`),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["validate-status","help"]),i(g,{label:"وضعیت تحویل","validate-status":f.sts?"error":"",help:f.sts},{default:s(()=>[i(L,{value:o.sts,"onUpdate:value":t[2]||(t[2]=a=>o.sts=a)},{default:s(()=>[(d(),x(q,null,F(tt,(a,r)=>i(E,{key:r,value:Number(r)},{default:s(()=>[b(w(a),1)]),_:2},1032,["value"])),64))]),_:1},8,["value"])]),_:1},8,["validate-status","help"]),i(g,{label:"نوع فروش","validate-status":f.type?"error":"",help:f.type},{default:s(()=>[i(L,{value:o.type,"onUpdate:value":t[3]||(t[3]=a=>o.type=a)},{default:s(()=>[(d(!0),x(q,null,F(W.value,(a,r)=>(d(),C(E,{key:r,value:Number(r)},{default:s(()=>[b(w(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["validate-status","help"]),i(g,{label:"نام دریافت کننده"},{default:s(()=>[i(S,{value:o.shipping_address.reciver_fname,"onUpdate:value":t[4]||(t[4]=a=>o.shipping_address.reciver_fname=a)},null,8,["value"])]),_:1}),i(g,{label:"نام خانوادگی دریافت کننده"},{default:s(()=>[i(S,{value:o.shipping_address.reciver_lname,"onUpdate:value":t[5]||(t[5]=a=>o.shipping_address.reciver_lname=a)},null,8,["value"])]),_:1}),i(g,{label:"استان"},{default:s(()=>[i(S,{value:o.shipping_address.province,"onUpdate:value":t[6]||(t[6]=a=>o.shipping_address.province=a)},null,8,["value"])]),_:1}),i(g,{label:"شهر"},{default:s(()=>[i(S,{value:o.shipping_address.city,"onUpdate:value":t[7]||(t[7]=a=>o.shipping_address.city=a)},null,8,["value"])]),_:1}),i(g,{label:"کد پستی"},{default:s(()=>[i(S,{value:o.shipping_address.zipcode,"onUpdate:value":t[8]||(t[8]=a=>o.shipping_address.zipcode=a)},null,8,["value"])]),_:1}),i(g,{label:"تلفن همراه"},{default:s(()=>[i(S,{value:o.shipping_address.reciver_phone,"onUpdate:value":t[9]||(t[9]=a=>o.shipping_address.reciver_phone=a)},null,8,["value"])]),_:1}),i(g,{label:"تلفن ثابت"},{default:s(()=>[i(S,{value:o.shipping_address.reciver_fixed_phone,"onUpdate:value":t[10]||(t[10]=a=>o.shipping_address.reciver_fixed_phone=a)},null,8,["value"])]),_:1})]),i(g,{label:"توضیحات"},{default:s(()=>[i(X,{value:o.note,"onUpdate:value":t[11]||(t[11]=a=>o.note=a),"auto-size":{minRows:3,maxRows:5}},null,8,["value"])]),_:1}),i(g,{label:"آدرس"},{default:s(()=>[i(X,{value:o.shipping_address.address,"onUpdate:value":t[12]||(t[12]=a=>o.shipping_address.address=a),"auto-size":{minRows:3,maxRows:5}},null,8,["value"])]),_:1}),R("div",At,[i(bt,{color:"blue"},{default:s(()=>[b("مجموع وزن: "+w(ot.value)+" گرم",1)]),_:1})]),i(l,{type:"primary",class:"mt-4 form-submit",disabled:!h.value||h.value.length<1,onClick:D},{default:s(()=>[...t[14]||(t[14]=[b(" ثبت تغییرات ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1})):M("",!0)]),_:1})]),_:1},8,["spinning"])):M("",!0)}}}),ae=$t(Dt,[["__scopeId","data-v-82f5ad23"]]);export{ae as default};
|