- Spring Boot 后端服务 (hss-home-service) - delivery-miniapp 配送小程序 - website 官网 (Nuxt) - docs 架构设计文档 - Docker 容器化部署配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{l as E,x as n,h as l,e,F as p,K as s,j as P,g as m,C as S,u as h,w as T,i as $,B as g,k as i,T as u,M as I,c as A,r as j,A as _}from"./4pHoJ_J-.js";import{_ as M}from"./CJNI7xdH.js";import{_ as V}from"./uW-c0ruN.js";import{u as G}from"./D7WoMb84.js";import{u as L}from"./zY3YTiZY.js";import"./DPwYtU5D.js";const B={class:"bg-white rounded-2xl p-6 shadow-sm border border-gray-100"},K={key:0,class:"animate-pulse space-y-3"},q={class:"text-sm text-text-secondary mb-2"},H={class:"text-3xl font-bold font-mono text-primary"},z={key:0,class:"text-lg text-text-secondary ml-1"},F={key:0,class:"text-xs text-accent mt-1"},W=E({__name:"PlatformStatCard",props:{label:{},value:{},suffix:{},trend:{},loading:{type:Boolean}},setup(a){return(c,r)=>(n(),l("div",B,[a.loading?(n(),l("div",K,[...r[0]||(r[0]=[e("div",{class:"h-4 bg-gray-200 rounded w-16"},null,-1),e("div",{class:"h-8 bg-gray-200 rounded w-24"},null,-1)])])):(n(),l(p,{key:1},[e("p",q,s(a.label),1),e("p",H,[P(s(a.value),1),a.suffix?(n(),l("span",z,s(a.suffix),1)):m("",!0)]),a.trend?(n(),l("p",F,s(a.trend),1)):m("",!0)],64))]))}}),X={class:"bg-white rounded-2xl shadow-sm border border-gray-100 overflow-hidden"},J={class:"px-6 py-4 border-b border-gray-50 flex items-center justify-between"},Q={class:"font-bold text-text-primary"},U={key:0,class:"text-xs text-text-secondary mt-0.5"},Y={class:"p-0"},Z=E({__name:"PlatformSection",props:{title:{},desc:{}},setup(a){return(c,r)=>(n(),l("div",X,[e("div",J,[e("div",null,[e("h3",Q,s(a.title),1),a.desc?(n(),l("p",U,s(a.desc),1)):m("",!0)]),r[0]||(r[0]=e("div",{class:"flex gap-2"},[e("span",{class:"w-2.5 h-2.5 rounded-full bg-red-400"}),e("span",{class:"w-2.5 h-2.5 rounded-full bg-yellow-400"}),e("span",{class:"w-2.5 h-2.5 rounded-full bg-green-400"})],-1))]),e("div",Y,[S(c.$slots,"default")])]))}}),ee={class:"flex items-center gap-4 px-4 py-3 bg-white border-b border-gray-50 hover:bg-gray-50 transition-colors"},te={class:"text-sm text-text-secondary w-12 shrink-0"},se={class:"text-sm font-medium flex-1 truncate"},ae={class:"text-xs text-text-secondary w-16 shrink-0"},ne={class:"text-xs w-24 shrink-0"},le={class:"text-xs text-text-secondary w-20 shrink-0 truncate"},oe=E({__name:"PlatformWorkOrderRow",props:{id:{},patientName:{},serviceType:{},status:{},serviceDate:{},staffName:{}},setup(a){const c={ORDER_CREATED:{label:"待派单",class:"bg-gray-100 text-gray-600"},ORDER_ASSIGNED:{label:"已派单",class:"bg-blue-50 text-blue-600"},ORDER_ACCEPTED:{label:"已接单",class:"bg-indigo-50 text-indigo-600"},ORDER_CHECKED_IN:{label:"已签到",class:"bg-teal-50 text-teal-600"},ORDER_IN_SERVICE:{label:"服务中",class:"bg-accent-50 text-accent-700"},ORDER_COMPLETED:{label:"已完成",class:"bg-green-50 text-green-600"},ORDER_EXCEPTION:{label:"异常",class:"bg-red-50 text-red-600"},ACCEPTED:{label:"已验收",class:"bg-green-100 text-green-700"}};return(r,w)=>(n(),l("div",ee,[e("span",te,"#"+s(a.id),1),e("span",se,s(a.patientName),1),e("span",ae,s(a.serviceType),1),e("span",ne,s(a.serviceDate),1),e("span",{class:h(["text-xs px-2 py-1 rounded-full font-medium shrink-0",c[a.status]?.class||"bg-gray-100"])},s(c[a.status]?.label||a.status),3),e("span",le,s(a.staffName||"-"),1)]))}}),re={class:"bg-white border-b sticky top-16 z-30"},ie={class:"section-container flex gap-0 overflow-x-auto"},ce=["onClick"],de={key:0,class:"py-12 bg-surface"},xe={class:"section-container space-y-8"},ue={class:"grid grid-cols-2 lg:grid-cols-4 gap-4"},pe={class:"grid lg:grid-cols-2 gap-8"},me={class:"p-6 grid grid-cols-2 gap-3"},fe={class:"text-2xl font-bold font-mono"},ye={class:"text-xs text-text-secondary mt-1"},ge={class:"p-6 grid grid-cols-2 gap-3"},be={class:"w-10 h-10 rounded-lg bg-primary-50 text-primary flex items-center justify-center group-hover:bg-primary group-hover:text-white transition-colors shrink-0"},ve={class:"min-w-0"},_e={class:"text-sm font-medium truncate"},he={class:"text-xs text-text-secondary truncate"},Ee={key:1,class:"py-12 bg-surface"},we={class:"section-container space-y-6"},De={class:"divide-y divide-gray-50"},Re={key:2,class:"py-12 bg-surface"},ke={class:"section-container space-y-6"},Ce={class:"p-6 space-y-4"},Ne={class:"w-10 h-10 rounded-full bg-gradient-to-br from-primary-50 to-accent-50 text-primary flex items-center justify-center font-bold text-sm shrink-0"},Oe={class:"flex-1 min-w-0"},Pe={class:"text-sm font-medium"},Se={class:"text-xs text-text-secondary truncate"},Te={class:"text-lg font-bold font-mono text-primary shrink-0"},$e={key:3,class:"py-12 bg-surface"},Ie={class:"section-container space-y-6"},Ae={class:"grid lg:grid-cols-3 gap-6"},je={class:"p-4 space-y-3"},Me={class:"flex-1 font-medium"},Ve={class:"text-xs text-text-secondary"},Ge={class:"text-xs text-text-secondary w-14 text-right"},Fe=E({__name:"demo",setup(a){G({title:"平台演示",description:"智慧医养居家上门服务平台 — 功能演示与真实数据展示"});const{get:c}=L(),r=_({}),w=_({}),D=_({}),R=_(!0),f=_("overview"),k=[{key:"overview",label:"管理看板"},{key:"orders",label:"工单管理"},{key:"dispatch",label:"派单调度"},{key:"delivery",label:"移动执行"}];T(async()=>{try{const[d,o,y]=await Promise.all([c("/admin/dashboard").catch(()=>({})),c("/analytics/summary").catch(()=>({})),c("/analytics/quality").catch(()=>({}))]);r.value=d||{},w.value=o||{},D.value=y||{}}catch{}R.value=!1});function b(d,o="--"){return d==null?o:typeof d=="number"?d.toLocaleString():String(d)}return(d,o)=>{const y=W,x=Z,C=M,N=oe,O=V;return n(),l(p,null,[o[7]||(o[7]=$('<section class="py-16 bg-gradient-to-br from-primary-700 to-primary-900 text-white"><div class="section-container"><span class="text-sm text-blue-200 mb-2 block">Platform Demo</span><h1 class="text-4xl md:text-5xl font-bold mb-4">平台功能演示</h1><p class="text-lg text-blue-100 max-w-2xl">以下展示平台真实管理界面,数据通过后端 API 实时获取</p></div></section>',1)),e("div",re,[e("div",ie,[(n(),l(p,null,g(k,t=>e("button",{key:t.key,onClick:v=>f.value=t.key,class:h(["px-6 py-4 text-sm font-medium border-b-2 transition-colors shrink-0",f.value===t.key?"border-primary text-primary":"border-transparent text-text-secondary hover:text-text-primary"])},s(t.label),11,ce)),64))])]),f.value==="overview"?(n(),l("section",de,[e("div",xe,[e("div",ue,[i(y,{label:"今日工单",value:b(r.value.todayOrders),suffix:"单"},null,8,["value"]),i(y,{label:"进行中",value:b(r.value.inProgress),suffix:"单"},null,8,["value"]),i(y,{label:"服务完成率",value:b(D.value.serviceCompletionRate),suffix:"%"},null,8,["value"]),i(y,{label:"活跃服务人员",value:b(r.value.availableStaff),suffix:"人"},null,8,["value"])]),e("div",pe,[i(x,{title:"实时工单状态分布",desc:"各状态工单数量概览"},{default:u(()=>[e("div",me,[(n(!0),l(p,null,g([{label:"待派单",v:r.value.pendingDispatch,c:"bg-gray-100"},{label:"进行中",v:r.value.inProgress,c:"bg-blue-50"},{label:"已完成",v:r.value.completedToday,c:"bg-green-50"},{label:"异常",v:r.value.exceptions,c:"bg-red-50"}],t=>(n(),l("div",{key:t.label,class:h(["rounded-xl p-4 text-center",t.c])},[e("div",fe,s(b(t.v)),1),e("div",ye,s(t.label),1)],2))),128))])]),_:1}),i(x,{title:"核心能力模块",desc:"平台覆盖居家服务全流程"},{default:u(()=>[e("div",ge,[(n(!0),l(p,null,g(I(A).slice(0,8),t=>(n(),l("div",{key:t.title,class:"flex items-center gap-3 p-3 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer group"},[e("div",be,[i(C,{name:t.icon,class:"w-5 h-5"},null,8,["name"])]),e("div",ve,[e("div",_e,s(t.title),1),e("div",he,s(t.desc),1)])]))),128))])]),_:1})])])])):m("",!0),f.value==="orders"?(n(),l("section",Ee,[e("div",we,[i(x,{title:"工单管理",desc:"受理、派单、接单、执行、完成全流程工单视图"},{default:u(()=>[e("div",De,[o[0]||(o[0]=e("div",{class:"flex items-center gap-4 px-4 py-3 bg-gray-50 text-xs font-medium text-text-secondary"},[e("span",{class:"w-12"},"ID"),e("span",{class:"flex-1"},"服务对象"),e("span",{class:"w-16"},"类型"),e("span",{class:"w-24"},"日期"),e("span",{class:"w-24"},"状态"),e("span",{class:"w-20"},"人员")],-1)),(n(),l(p,null,g([{id:1001,patientName:"张奶奶",serviceType:"居家护理",status:"ORDER_IN_SERVICE",serviceDate:"2026-05-18",staffName:"李护理员"},{id:1002,patientName:"王大爷",serviceType:"康复训练",status:"ORDER_COMPLETED",serviceDate:"2026-05-18",staffName:"张康复师"},{id:1003,patientName:"赵阿姨",serviceType:"助浴服务",status:"ORDER_ASSIGNED",serviceDate:"2026-05-18",staffName:"--"},{id:1004,patientName:"刘爷爷",serviceType:"健康管理",status:"ORDER_CHECKED_IN",serviceDate:"2026-05-18",staffName:"陈护理员"},{id:1005,patientName:"孙奶奶",serviceType:"能力评估",status:"ORDER_EXCEPTION",serviceDate:"2026-05-17",staffName:"周评估员"}],t=>i(N,j({key:t.id},{ref_for:!0},t),null,16)),64))])]),_:1}),i(x,{title:"工单状态流转",desc:"状态机驱动的完整流转路径"},{default:u(()=>[...o[1]||(o[1]=[e("div",{class:"p-6"},[e("div",{class:"flex flex-wrap items-center gap-2 text-xs"},[e("span",{class:"px-3 py-1.5 rounded-full bg-gray-100"},"ORDER_CREATED"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-blue-50 text-blue-600"},"ORDER_ASSIGNED"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-indigo-50 text-indigo-600"},"ORDER_ACCEPTED"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-teal-50 text-teal-600"},"ORDER_CHECKED_IN"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-accent-50 text-accent-700"},"ORDER_IN_SERVICE"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-green-50 text-green-600"},"ORDER_COMPLETED"),e("span",{class:"text-gray-300"},"→"),e("span",{class:"px-3 py-1.5 rounded-full bg-green-100 text-green-700"},"ACCEPTED")])],-1)])]),_:1})])])):m("",!0),f.value==="dispatch"?(n(),l("section",Re,[e("div",ke,[i(x,{title:"调度工作台",desc:"智能推荐 + 人工确认,两阶段派单"},{default:u(()=>[e("div",Ce,[o[3]||(o[3]=e("div",{class:"flex items-center justify-between p-4 bg-primary-50 rounded-xl"},[e("div",null,[e("div",{class:"text-sm font-bold"},"#1003 赵阿姨 — 助浴服务"),e("div",{class:"text-xs text-text-secondary"},"梅江区金山街道 · 2026-05-18 09:00-10:00 · 低风险")]),e("span",{class:"px-3 py-1.5 bg-primary text-white rounded-lg text-xs font-medium"},"待派单")],-1)),o[4]||(o[4]=e("div",{class:"text-sm font-medium text-text-primary mt-4 mb-2"},"智能推荐 Top 3",-1)),(n(),l(p,null,g([{name:"李护理员",score:92,reasons:"资质匹配·距离1.2km·负载低·满意度4.8"},{name:"王护理员",score:85,reasons:"区域匹配·技能匹配·今日工单2/6"},{name:"陈护理员",score:78,reasons:"曾服务该对象·满意度4.6·工单量适中"}],(t,v)=>e("div",{key:v,class:"flex items-center gap-4 p-4 rounded-xl border hover:border-primary hover:bg-primary-50/50 transition-colors cursor-pointer"},[e("span",Ne,s(v+1),1),e("div",Oe,[e("div",Pe,s(t.name),1),e("div",Se,s(t.reasons),1)]),e("span",Te,s(t.score),1),o[2]||(o[2]=e("button",{class:"px-4 py-2 bg-primary text-white rounded-lg text-xs font-medium hover:bg-primary-700 transition-colors shrink-0"},"派单",-1))])),64))])]),_:1})])])):m("",!0),f.value==="delivery"?(n(),l("section",$e,[e("div",Ie,[e("div",Ae,[i(x,{title:"Delivery 工作台"},{default:u(()=>[...o[5]||(o[5]=[e("div",{class:"p-4 space-y-3"},[e("div",{class:"flex items-center justify-between text-sm"},[e("span",{class:"text-text-secondary"},"今日工单"),e("span",{class:"font-bold"},"6")]),e("div",{class:"flex items-center justify-between text-sm"},[e("span",{class:"text-text-secondary"},"待接单"),e("span",{class:"font-bold text-blue-600"},"2")]),e("div",{class:"flex items-center justify-between text-sm"},[e("span",{class:"text-text-secondary"},"待签到"),e("span",{class:"font-bold text-teal-600"},"1")]),e("div",{class:"flex items-center justify-between text-sm"},[e("span",{class:"text-text-secondary"},"服务中"),e("span",{class:"font-bold text-accent-700"},"1")]),e("div",{class:"flex items-center justify-between text-sm"},[e("span",{class:"text-text-secondary"},"已完成"),e("span",{class:"font-bold text-green-600"},"2")])],-1)])]),_:1}),i(x,{title:"GPS 签到"},{default:u(()=>[...o[6]||(o[6]=[e("div",{class:"p-4 space-y-3"},[e("div",{class:"text-xs text-text-secondary"},"当前位置距服务地址"),e("div",{class:"text-3xl font-bold font-mono text-accent-700"},"85m"),e("div",{class:"text-xs text-green-600"},"✓ 200米范围内,可签到"),e("div",{class:"flex gap-2 mt-3"},[e("div",{class:"w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary"},"📷 现场拍照"),e("div",{class:"w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary"},"✍️ 对象确认")]),e("button",{class:"w-full py-3 bg-cta text-white rounded-xl text-sm font-bold hover:bg-cta-700 transition-colors"},"确认签到")],-1)])]),_:1}),i(x,{title:"项目执行记录"},{default:u(()=>[e("div",je,[(n(),l(p,null,g([{name:"助洁服务",status:"COMPLETED",time:"09:15-10:05",duration:"50分钟"},{name:"健康监测",status:"IN_PROGRESS",time:"10:10-",duration:"进行中"},{name:"康复指导",status:"PENDING",time:"--",duration:"待执行"}],(t,v)=>e("div",{key:v,class:"flex items-center gap-3 text-sm"},[e("span",{class:h(["w-2 h-2 rounded-full shrink-0",t.status==="COMPLETED"?"bg-green-500":t.status==="IN_PROGRESS"?"bg-accent":"bg-gray-300"])},null,2),e("span",Me,s(t.name),1),e("span",Ve,s(t.time),1),e("span",Ge,s(t.duration),1)])),64))])]),_:1})])])])):m("",!0),i(O)],64)}}});export{Fe as default};
|