Files
yuezi-saas/frontend/dist/assets/board-B7rzI1tC.js
T

1 line
6.0 KiB
JavaScript

import{$ as e,H as t,L as n,P as r,V as i,Vt as a,Wt as o,_ as s,_t as c,d as l,et as u,f as d,i as f,l as p,lt as m,p as h,u as g,v as _,z as v}from"./runtime-core.esm-bundler-DbRZbT7v.js";import{s as y}from"./index-DK5nh4op.js";import"./request-BcX6wdRT.js";import{i as b,r as x}from"./room-CR75Q7cU.js";var S={class:`p-6 space-y-4`},C={class:`grid grid-cols-4 gap-4`},w=[`onClick`],T={class:`text-xs text-gray-500`},E={class:`bg-white rounded-2xl border border-gray-100 shadow-sm`},D={class:`flex items-center justify-between px-5 py-4 border-b border-gray-50`},O={class:`flex items-center gap-2`},k={class:`p-5`},A={key:0,class:`py-16 text-center text-gray-400`},j={key:1,class:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-4`},M=[`onClick`],N={class:`flex items-center justify-between mb-2`},P={class:`font-bold text-gray-800 text-sm`},F={class:`text-xs text-gray-500 mb-1 truncate`},I={key:0,class:`text-xs text-blue-600 mt-1 truncate font-medium`},L={class:`mt-4`},R={class:`flex flex-wrap gap-2`},z={__name:`index`,setup(z){let B=m([]),V=m(!1),H=m(!1),U=m(null),W=m(``),G={available:{label:`空置`,color:`bg-emerald-50 border-emerald-200`,badge:`bg-emerald-500`,text:`text-emerald-700`,dot:`bg-emerald-400`},occupied:{label:`在住`,color:`bg-blue-50 border-blue-200`,badge:`bg-blue-500`,text:`text-blue-700`,dot:`bg-blue-400`},cleaning:{label:`保洁`,color:`bg-amber-50 border-amber-200`,badge:`bg-amber-500`,text:`text-amber-700`,dot:`bg-amber-400`},maintenance:{label:`维护`,color:`bg-gray-50 border-gray-200`,badge:`bg-gray-400`,text:`text-gray-600`,dot:`bg-gray-400`}},K=Object.entries(G).map(([e,t])=>({value:e,label:t.label})),q=p(()=>W.value?B.value.filter(e=>e.status===W.value):B.value),J=p(()=>{let e={};for(let t of Object.keys(G))e[t]=0;for(let t of B.value)e[t.status]!==void 0&&e[t.status]++;return e});async function Y(){V.value=!0;try{let e=await b.getList({per_page:200});B.value=e.data?.list||e.data?.data||[]}catch(e){console.error(e)}finally{V.value=!1}}async function X(e){if(U.value=e,e.status===`occupied`)try{let t=await x.getList({room_id:e.id,status:1,per_page:1}),n=t.data?.list||t.data?.data||[];U.value={...e,currentReservation:n[0]||null}}catch(e){console.error(e)}H.value=!0}async function Z(e,t){try{await b.updateStatus(e.id,{status:t}),y.success(`房态已更新`),Y()}catch(e){console.error(e)}}return r(()=>Y()),(r,p)=>{let m=i(`el-option`),y=i(`el-select`),b=i(`el-button`),x=i(`el-descriptions-item`),z=i(`el-tag`),B=i(`el-descriptions`),Q=i(`el-drawer`),$=t(`loading`);return n(),h(`div`,S,[g(`div`,C,[(n(),h(f,null,v(G,(e,t)=>g(`div`,{key:t,class:a([`bg-white rounded-2xl border border-gray-100 shadow-sm p-4 flex items-center gap-3 cursor-pointer transition-all hover:shadow-md`,W.value===t?`ring-2 ring-rose-400`:``]),onClick:e=>W.value=W.value===t?``:t},[g(`div`,{class:a([`w-10 h-10 rounded-xl flex items-center justify-center`,e.badge+`/20`])},[g(`span`,{class:a([`w-4 h-4 rounded-full inline-block`,e.dot])},null,2)],2),g(`div`,null,[g(`div`,{class:a([`text-2xl font-bold`,e.text])},o(J.value[t]),3),g(`div`,T,o(e.label),1)])],10,w)),64))]),g(`div`,E,[g(`div`,D,[p[3]||=g(`div`,{class:`flex items-center gap-2`},[g(`span`,{class:`w-1 h-5 bg-rose-500 rounded-full inline-block`}),g(`span`,{class:`font-medium text-gray-700`},`房态看板`),g(`span`,{class:`text-xs text-gray-400 ml-2`},`点击统计卡片可按状态筛选,点击房间卡片查看详情`)],-1),g(`div`,O,[_(y,{modelValue:W.value,"onUpdate:modelValue":p[0]||=e=>W.value=e,placeholder:`全部状态`,clearable:``,style:{width:`130px`}},{default:e(()=>[(n(!0),h(f,null,v(c(K),e=>(n(),l(m,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),_(b,{onClick:Y,loading:V.value},{default:e(()=>[...p[2]||=[s(`刷新`,-1)]]),_:1},8,[`loading`])])]),u((n(),h(`div`,k,[q.value.length===0?(n(),h(`div`,A,`暂无房间数据`)):(n(),h(`div`,j,[(n(!0),h(f,null,v(q.value,e=>(n(),h(`div`,{key:e.id,class:a([`rounded-xl border-2 p-3 cursor-pointer transition-all hover:-translate-y-0.5 hover:shadow-md select-none`,G[e.status]?.color||`bg-gray-50 border-gray-200`]),onClick:t=>X(e)},[g(`div`,N,[g(`span`,P,o(e.number),1),g(`span`,{class:a([`w-2.5 h-2.5 rounded-full`,G[e.status]?.dot||`bg-gray-400`])},null,2)]),g(`div`,F,o(e.room_type?.name||e.type_name||`-`),1),g(`div`,{class:a([`text-xs font-medium`,G[e.status]?.text||`text-gray-500`])},o(G[e.status]?.label||e.status),3),e.status===`occupied`&&(e.customer_name||e.current_customer)?(n(),h(`div`,I,o(e.customer_name||e.current_customer),1)):d(``,!0)],10,M))),128))]))])),[[$,V.value]])]),_(Q,{modelValue:H.value,"onUpdate:modelValue":p[1]||=e=>H.value=e,title:`房间详情`,size:`400px`},{default:e(()=>[U.value?(n(),h(f,{key:0},[_(B,{column:1,border:``},{default:e(()=>[_(x,{label:`房间号`},{default:e(()=>[s(o(U.value.number),1)]),_:1}),_(x,{label:`房型`},{default:e(()=>[s(o(U.value.room_type?.name||U.value.type_name||`-`),1)]),_:1}),_(x,{label:`楼层`},{default:e(()=>[s(o(U.value.floor||`-`),1)]),_:1}),_(x,{label:`状态`},{default:e(()=>[_(z,{type:{available:`success`,occupied:`primary`,cleaning:`warning`,maintenance:`info`}[U.value.status],size:`small`},{default:e(()=>[s(o(G[U.value.status]?.label||U.value.status),1)]),_:1},8,[`type`])]),_:1}),U.value.status===`occupied`&&U.value.currentReservation?(n(),h(f,{key:0},[_(x,{label:`在住客户`},{default:e(()=>[s(o(U.value.currentReservation.customer?.name||`-`),1)]),_:1}),_(x,{label:`入住日期`},{default:e(()=>[s(o(U.value.currentReservation.check_in_date||`-`),1)]),_:1}),_(x,{label:`预计离店`},{default:e(()=>[s(o(U.value.currentReservation.check_out_date||`-`),1)]),_:1})],64)):d(``,!0)]),_:1}),g(`div`,L,[p[4]||=g(`div`,{class:`text-sm font-medium text-gray-600 mb-2`},`快速变更房态`,-1),g(`div`,R,[(n(!0),h(f,null,v(c(K),t=>(n(),l(b,{key:t.value,size:`small`,disabled:U.value.status===t.value,onClick:e=>Z(U.value,t.value)},{default:e(()=>[s(o(t.label),1)]),_:2},1032,[`disabled`,`onClick`]))),128))])])],64)):d(``,!0)]),_:1},8,[`modelValue`])])}}};export{z as default};