2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
import{o as O,H as a,L as i,P as e,Z as n,X as h,F as I,ab as M,a9 as X,Y as r,V as u,aq as p,aC as P,r as c,c as x,R as U}from"./vendor-CDC8xK0g.js";import{o as f,a as Y,v as Z}from"./api-BJHHntS5.js";import{_ as G}from"./index-P0T8_Fg3.js";import"./element-plus-P2E9Zrny.js";const J={class:"page"},K={class:"list-wrap"},Q={key:0,class:"loading"},W={key:1,class:"stats-bar"},ee={class:"stat-item"},se={class:"stat-num"},te={class:"stat-item"},le={class:"stat-num renting"},oe={class:"stat-item"},ne={class:"stat-num completed"},ae={class:"stat-item"},ie={class:"stat-num cancelled"},de={key:2,class:"empty"},re={class:"card-header"},ue={class:"order-id-row"},ce={class:"order-number"},ve={class:"card-body"},pe={class:"info-row"},fe={class:"info-group"},me={class:"info-value"},he={class:"info-group"},be={class:"info-value"},ge={class:"info-row"},ye={class:"info-group"},_e={class:"info-value"},ke={class:"info-group"},we={class:"info-value"},Ce={class:"info-row"},Te={class:"info-group"},Ne={class:"info-value price"},Ve={class:"info-group"},De={class:"info-value"},Ie={class:"info-row"},Me={class:"info-group full"},xe={class:"info-value"},Fe={key:0,class:"info-row"},Pe={class:"info-group full"},Ue={class:"info-value"},Be={class:"card-footer"},Le={class:"footer-hint"},Se={class:"action-btns"},$e=["onClick"],qe=["onClick"],Ae=["onClick"],Ee=["onClick"],je={class:"dialog"},Re={class:"dialog-title"},ze={class:"dialog-body"},He={class:"form-item"},Oe={class:"form-item"},Xe={class:"form-item"},Ye=["value"],Ze={class:"form-item"},Ge=["disabled"],Je=["value"],Ke={class:"form-item"},Qe={class:"form-item"},We={class:"form-item"},es={class:"form-item"},ss={__name:"Orders",setup(ts){const d=c([]),b=c(!0),g=c("all"),y=c(!1),v=c(null),w=c([]),C=c([]),o=c({customerName:"",customerPhone:"",vehicleType:"",vehicleId:"",rentalFee:"",deposit:"",contractMonths:"",notes:""}),_=localStorage.getItem("storeId")||"demo-store",T=x(()=>{const t={renting:0,completed:0,cancelled:0};return d.value.forEach(s=>{s.status==="进行中"||s.status==="待支付"||s.status==="逾期"?t.renting++:s.status==="已完成"?t.completed++:s.status==="已取消"&&t.cancelled++}),t}),N=x(()=>g.value==="all"?d.value:g.value==="renting"?d.value.filter(t=>["进行中","待支付","逾期"].includes(t.status)):g.value==="completed"?d.value.filter(t=>t.status==="已完成"):g.value==="cancelled"?d.value.filter(t=>t.status==="已取消"):d.value),B=x(()=>o.value.vehicleType?C.value.filter(t=>t.vehicleType===o.value.vehicleType):[]),L=()=>{o.value.vehicleId=""},S=t=>t==="待支付"?"badge-pending":t==="进行中"||t==="逾期"?"badge-renting":t==="已完成"?"badge-completed":t==="已取消"||t==="已退款"?"badge-cancelled":"badge-default",$=t=>t==="待支付"?"dot-pending":t==="进行中"||t==="逾期"?"dot-renting":t==="已完成"?"dot-completed":t==="已取消"||t==="已退款"?"dot-cancelled":"",k=t=>t?new Date(t).toLocaleDateString("zh-CN"):"-",q=(t,s)=>{if(!t)return"-";const l=k(t);return s?`${l} ~ ${k(s)}`:l+" 起"},m=async()=>{b.value=!0;try{const t=await f.list({storeId:_});d.value=t.data.data||t.data||[]}catch(t){console.error("加载订单失败",t),d.value=[]}b.value=!1},F=async()=>{try{const[t,s]=await Promise.all([Y.list({storeId:_}),Z.list({storeId:_})]);w.value=t.data.data||t.data||[],C.value=s.data.data||s.data||[]}catch{w.value=[],C.value=[]}},A=()=>{v.value=null,o.value={customerName:"",customerPhone:"",vehicleType:"",vehicleId:"",rentalFee:"",deposit:"",contractMonths:"",notes:""},F(),y.value=!0},E=t=>{v.value=t._id,o.value={customerName:t.customer?.name||"",customerPhone:t.customer?.phone||"",vehicleType:t.vehicle?.vehicleType||"",vehicleId:t.vehicle?._id||"",rentalFee:t.rentalFee||"",deposit:t.deposit||"",contractMonths:"",notes:t.notes||""},F(),y.value=!0},V=()=>{y.value=!1,v.value=null,o.value={customerName:"",customerPhone:"",vehicleType:"",vehicleId:"",rentalFee:"",deposit:"",contractMonths:"",notes:""}},j=async()=>{if(!o.value.customerName){alert("请填写客户姓名");return}if(!o.value.vehicleType){alert("请选择品牌车型");return}if(!o.value.vehicleId){alert("请选择车辆");return}if(!o.value.rentalFee){alert("请填写租金");return}const t={storeId:_,customerName:o.value.customerName,customerPhone:o.value.customerPhone||void 0,vehicleId:o.value.vehicleId,vehicleType:o.value.vehicleType,rentalFee:Number(o.value.rentalFee),deposit:Number(o.value.deposit)||0,contractMonths:Number(o.value.contractMonths)||0,notes:o.value.notes||void 0,status:v.value?void 0:"草稿"};try{v.value?await f.update(v.value,t):await f.create(t),V(),m()}catch(s){const l=s?.response?.data?.message||s?.message||"操作失败";alert(l)}},R=async t=>{if(confirm("确定完成此订单?"))try{await f.update(t,{status:"已完成"}),m()}catch{alert("操作失败")}},z=async t=>{if(confirm("确定取消此订单?"))try{await f.update(t,{status:"已取消"}),m()}catch{alert("操作失败")}},H=async t=>{if(confirm("确定删除该订单?"))try{await f.delete(t),m()}catch{alert("删除失败:后端暂无此接口")}};return O(m),(t,s)=>(a(),i("div",J,[e("div",{class:"page-header"},[e("div",{class:"header-row"},[s[8]||(s[8]=e("div",{class:"page-title"},"订单管理",-1)),e("button",{class:"btn-add-inline",onClick:A},"+ 创建订单")])]),e("div",K,[b.value?(a(),i("div",Q,[...s[9]||(s[9]=[e("div",{class:"loading-ring"},null,-1),e("div",null,"加载中...",-1)])])):N.value.length>0?(a(),i("div",W,[e("div",ee,[e("span",se,n(d.value.length),1),s[10]||(s[10]=e("span",{class:"stat-label"},"全部",-1))]),s[14]||(s[14]=e("div",{class:"stat-divider"},null,-1)),e("div",te,[e("span",le,n(T.value.renting),1),s[11]||(s[11]=e("span",{class:"stat-label"},"进行中",-1))]),s[15]||(s[15]=e("div",{class:"stat-divider"},null,-1)),e("div",oe,[e("span",ne,n(T.value.completed),1),s[12]||(s[12]=e("span",{class:"stat-label"},"已完成",-1))]),s[16]||(s[16]=e("div",{class:"stat-divider"},null,-1)),e("div",ae,[e("span",ie,n(T.value.cancelled),1),s[13]||(s[13]=e("span",{class:"stat-label"},"已取消",-1))])])):N.value.length===0&&!b.value?(a(),i("div",de,[...s[17]||(s[17]=[e("div",{class:"empty-icon"},"📋",-1),e("div",{class:"empty-text"},"暂无订单",-1)])])):h("",!0),(a(!0),i(I,null,M(N.value,l=>(a(),i("div",{key:l._id,class:"order-card"},[e("div",re,[e("div",ue,[s[18]||(s[18]=e("span",{class:"order-icon"},"📋",-1)),e("span",ce,n(l.orderNumber||l._id.slice(-8).toUpperCase()),1)]),e("div",{class:U(["status-badge",S(l.status)])},[e("span",{class:U(["badge-dot",$(l.status)])},null,2),r(" "+n(l.status),1)],2)]),e("div",ve,[e("div",pe,[e("div",fe,[s[19]||(s[19]=e("span",{class:"info-label"},"客户姓名",-1)),e("span",me,n(l.customer?.name||"-"),1)]),e("div",he,[s[20]||(s[20]=e("span",{class:"info-label"},"联系电话",-1)),e("span",be,n(l.customer?.phone||"-"),1)])]),e("div",ge,[e("div",ye,[s[21]||(s[21]=e("span",{class:"info-label"},"车牌号",-1)),e("span",_e,n(l.vehicle?.plateNumber||"-"),1)]),e("div",ke,[s[22]||(s[22]=e("span",{class:"info-label"},"车型",-1)),e("span",we,n(l.vehicle?.vehicleType||"-"),1)])]),e("div",Ce,[e("div",Te,[s[23]||(s[23]=e("span",{class:"info-label"},"租金",-1)),e("span",Ne,"¥"+n(l.rentalFee||0),1)]),e("div",Ve,[s[24]||(s[24]=e("span",{class:"info-label"},"押金",-1)),e("span",De,"¥"+n(l.deposit||0),1)])]),e("div",Ie,[e("div",Me,[s[25]||(s[25]=e("span",{class:"info-label"},"租赁日期",-1)),e("span",xe,n(q(l.startDate,l.endDate)),1)])]),l.actualEndDate?(a(),i("div",Fe,[e("div",Pe,[s[26]||(s[26]=e("span",{class:"info-label"},"实际归还",-1)),e("span",Ue,n(k(l.actualEndDate)),1)])])):h("",!0)]),e("div",Be,[e("div",Le,n(k(l.createdAt)),1),e("div",Se,[l.status==="进行中"||l.status==="待支付"?(a(),i("button",{key:0,class:"btn-action btn-complete",onClick:D=>R(l._id)},[...s[27]||(s[27]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"20 6 9 17 4 12"})],-1),r(" 完成 ",-1)])],8,$e)):h("",!0),l.status==="待支付"||l.status==="进行中"?(a(),i("button",{key:1,class:"btn-action btn-cancel-order",onClick:D=>z(l._id)},[...s[28]||(s[28]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1),r(" 取消 ",-1)])],8,qe)):h("",!0),e("button",{class:"btn-action btn-edit",onClick:D=>E(l)},[...s[29]||(s[29]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1),r(" 编辑 ",-1)])],8,Ae),e("button",{class:"btn-action btn-del",onClick:D=>H(l._id)},[...s[30]||(s[30]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"3 6 5 6 21 6"}),e("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"})],-1),r(" 删除 ",-1)])],8,Ee)])])]))),128))]),y.value?(a(),i("div",{key:0,class:"dialog-overlay",onClick:X(V,["self"])},[e("div",je,[s[41]||(s[41]=e("div",{class:"dialog-handle"},null,-1)),e("div",Re,n(v.value?"编辑订单":"创建订单"),1),e("div",ze,[e("div",He,[s[31]||(s[31]=e("label",null,[r("客户姓名 "),e("span",{class:"required"},"*")],-1)),u(e("input",{"onUpdate:modelValue":s[0]||(s[0]=l=>o.value.customerName=l),placeholder:"请输入客户姓名"},null,512),[[p,o.value.customerName]])]),e("div",Oe,[s[32]||(s[32]=e("label",null,"客户电话",-1)),u(e("input",{"onUpdate:modelValue":s[1]||(s[1]=l=>o.value.customerPhone=l),placeholder:"请输入手机号",type:"tel"},null,512),[[p,o.value.customerPhone]])]),e("div",Xe,[s[34]||(s[34]=e("label",null,[r("品牌车型 "),e("span",{class:"required"},"*")],-1)),u(e("select",{"onUpdate:modelValue":s[2]||(s[2]=l=>o.value.vehicleType=l),onChange:L},[s[33]||(s[33]=e("option",{value:"",disabled:""},"请选择品牌车型",-1)),(a(!0),i(I,null,M(w.value,l=>(a(),i("option",{key:l._id,value:l.name},n(l.brand)+" - "+n(l.name),9,Ye))),128))],544),[[P,o.value.vehicleType]])]),e("div",Ze,[s[36]||(s[36]=e("label",null,[r("车辆选择 "),e("span",{class:"required"},"*")],-1)),u(e("select",{"onUpdate:modelValue":s[3]||(s[3]=l=>o.value.vehicleId=l),disabled:!o.value.vehicleType},[s[35]||(s[35]=e("option",{value:"",disabled:""},"请选择车辆",-1)),(a(!0),i(I,null,M(B.value,l=>(a(),i("option",{key:l._id,value:l._id},n(l.plateNumber||"未上牌")+" ("+n(l.frameNumber||l._id.slice(-6))+") ",9,Je))),128))],8,Ge),[[P,o.value.vehicleId]])]),e("div",Ke,[s[37]||(s[37]=e("label",null,[r("租金(元) "),e("span",{class:"required"},"*")],-1)),u(e("input",{"onUpdate:modelValue":s[4]||(s[4]=l=>o.value.rentalFee=l),type:"number",placeholder:"如:1500",min:"0"},null,512),[[p,o.value.rentalFee]])]),e("div",Qe,[s[38]||(s[38]=e("label",null,"押金(元)",-1)),u(e("input",{"onUpdate:modelValue":s[5]||(s[5]=l=>o.value.deposit=l),type:"number",placeholder:"如:500",min:"0"},null,512),[[p,o.value.deposit]])]),e("div",We,[s[39]||(s[39]=e("label",null,"租赁时长(月)",-1)),u(e("input",{"onUpdate:modelValue":s[6]||(s[6]=l=>o.value.contractMonths=l),type:"number",placeholder:"如:12",min:"1"},null,512),[[p,o.value.contractMonths]])]),e("div",es,[s[40]||(s[40]=e("label",null,"备注",-1)),u(e("input",{"onUpdate:modelValue":s[7]||(s[7]=l=>o.value.notes=l),placeholder:"可选备注"},null,512),[[p,o.value.notes]])])]),e("div",{class:"dialog-footer"},[e("button",{class:"btn-cancel",onClick:V},"取消"),e("button",{class:"btn-confirm",onClick:j},"确定")])])])):h("",!0)]))}},is=G(ss,[["__scopeId","data-v-e32909b0"]]);export{is as default};
|