import { defineComponent, mergeProps, useSSRContext, ref, withCtx, createVNode, openBlock, createBlock, Fragment, renderList, toDisplayString, unref } from "vue"; import { ssrRenderAttrs, ssrInterpolate, ssrRenderSlot, ssrRenderClass, ssrRenderList, ssrRenderComponent } from "vue/server-renderer"; import { _ as _sfc_main$4 } from "./AppIcon--JRwwp2l.js"; import { _ as __nuxt_component_2 } from "./CtaSection-ClDHCKqS.js"; import { u as useSeo } from "./useSeo-BkcZp48C.js"; import { c as capabilities } from "../server.mjs"; import "./v3-eWcT6REp.js"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/@unhead/vue/dist/index.mjs"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/ofetch/dist/node.mjs"; import "#internal/nuxt/paths"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/hookable/dist/index.mjs"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/unctx/dist/index.mjs"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/h3/dist/index.mjs"; import "vue-router"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/defu/dist/defu.mjs"; import "/home/akoo/居家服务/hss-home-service/website/node_modules/ufo/dist/index.mjs"; const _sfc_main$3 = /* @__PURE__ */ defineComponent({ __name: "PlatformStatCard", __ssrInlineRender: true, props: { label: {}, value: {}, suffix: {}, trend: {}, loading: { type: Boolean } }, setup(__props) { return (_ctx, _push, _parent, _attrs) => { _push(``); if (__props.loading) { _push(`
`); } else { _push(`

${ssrInterpolate(__props.label)}

${ssrInterpolate(__props.value)}`); if (__props.suffix) { _push(`${ssrInterpolate(__props.suffix)}`); } else { _push(``); } _push(`

`); if (__props.trend) { _push(`

${ssrInterpolate(__props.trend)}

`); } else { _push(``); } _push(``); } _push(``); }; } }); const _sfc_setup$3 = _sfc_main$3.setup; _sfc_main$3.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/PlatformStatCard.vue"); return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0; }; const _sfc_main$2 = /* @__PURE__ */ defineComponent({ __name: "PlatformSection", __ssrInlineRender: true, props: { title: {}, desc: {} }, setup(__props) { return (_ctx, _push, _parent, _attrs) => { _push(`

${ssrInterpolate(__props.title)}

`); if (__props.desc) { _push(`

${ssrInterpolate(__props.desc)}

`); } else { _push(``); } _push(`
`); ssrRenderSlot(_ctx.$slots, "default", {}, null, _push, _parent); _push(`
`); }; } }); const _sfc_setup$2 = _sfc_main$2.setup; _sfc_main$2.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/PlatformSection.vue"); return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0; }; const _sfc_main$1 = /* @__PURE__ */ defineComponent({ __name: "PlatformWorkOrderRow", __ssrInlineRender: true, props: { id: {}, patientName: {}, serviceType: {}, status: {}, serviceDate: {}, staffName: {} }, setup(__props) { const statusMap = { 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 (_ctx, _push, _parent, _attrs) => { _push(`#${ssrInterpolate(__props.id)}${ssrInterpolate(__props.patientName)}${ssrInterpolate(__props.serviceType)}${ssrInterpolate(__props.serviceDate)}${ssrInterpolate(statusMap[__props.status]?.label || __props.status)}${ssrInterpolate(__props.staffName || "-")}`); }; } }); const _sfc_setup$1 = _sfc_main$1.setup; _sfc_main$1.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/PlatformWorkOrderRow.vue"); return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0; }; const _sfc_main = /* @__PURE__ */ defineComponent({ __name: "demo", __ssrInlineRender: true, setup(__props) { useSeo({ title: "平台演示", description: "智慧医养居家上门服务平台 — 功能演示与真实数据展示" }); const dashboard = ref({}); ref({}); const quality = ref({}); ref([]); ref([]); ref(true); const activeTab = ref("overview"); const tabs = [ { key: "overview", label: "管理看板" }, { key: "orders", label: "工单管理" }, { key: "dispatch", label: "派单调度" }, { key: "delivery", label: "移动执行" } ]; function fmt(n, def = "--") { if (n === null || n === void 0) return def; if (typeof n === "number") return n.toLocaleString(); return String(n); } return (_ctx, _push, _parent, _attrs) => { const _component_PlatformStatCard = _sfc_main$3; const _component_PlatformSection = _sfc_main$2; const _component_AppIcon = _sfc_main$4; const _component_PlatformWorkOrderRow = _sfc_main$1; const _component_CtaSection = __nuxt_component_2; _push(`
Platform Demo

平台功能演示

以下展示平台真实管理界面,数据通过后端 API 实时获取

`); ssrRenderList(tabs, (t) => { _push(``); }); _push(`
`); if (activeTab.value === "overview") { _push(`
`); _push(ssrRenderComponent(_component_PlatformStatCard, { label: "今日工单", value: fmt(dashboard.value.todayOrders), suffix: "单" }, null, _parent)); _push(ssrRenderComponent(_component_PlatformStatCard, { label: "进行中", value: fmt(dashboard.value.inProgress), suffix: "单" }, null, _parent)); _push(ssrRenderComponent(_component_PlatformStatCard, { label: "服务完成率", value: fmt(quality.value.serviceCompletionRate), suffix: "%" }, null, _parent)); _push(ssrRenderComponent(_component_PlatformStatCard, { label: "活跃服务人员", value: fmt(dashboard.value.availableStaff), suffix: "人" }, null, _parent)); _push(`
`); _push(ssrRenderComponent(_component_PlatformSection, { title: "实时工单状态分布", desc: "各状态工单数量概览" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
`); ssrRenderList([ { label: "待派单", v: dashboard.value.pendingDispatch, c: "bg-gray-100" }, { label: "进行中", v: dashboard.value.inProgress, c: "bg-blue-50" }, { label: "已完成", v: dashboard.value.completedToday, c: "bg-green-50" }, { label: "异常", v: dashboard.value.exceptions, c: "bg-red-50" } ], (item) => { _push2(`
${ssrInterpolate(fmt(item.v))}
${ssrInterpolate(item.label)}
`); }); _push2(`
`); } else { return [ createVNode("div", { class: "p-6 grid grid-cols-2 gap-3" }, [ (openBlock(true), createBlock(Fragment, null, renderList([ { label: "待派单", v: dashboard.value.pendingDispatch, c: "bg-gray-100" }, { label: "进行中", v: dashboard.value.inProgress, c: "bg-blue-50" }, { label: "已完成", v: dashboard.value.completedToday, c: "bg-green-50" }, { label: "异常", v: dashboard.value.exceptions, c: "bg-red-50" } ], (item) => { return openBlock(), createBlock("div", { key: item.label, class: ["rounded-xl p-4 text-center", item.c] }, [ createVNode("div", { class: "text-2xl font-bold font-mono" }, toDisplayString(fmt(item.v)), 1), createVNode("div", { class: "text-xs text-text-secondary mt-1" }, toDisplayString(item.label), 1) ], 2); }), 128)) ]) ]; } }), _: 1 }, _parent)); _push(ssrRenderComponent(_component_PlatformSection, { title: "核心能力模块", desc: "平台覆盖居家服务全流程" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
`); ssrRenderList(unref(capabilities).slice(0, 8), (c) => { _push2(`
`); _push2(ssrRenderComponent(_component_AppIcon, { name: c.icon, class: "w-5 h-5" }, null, _parent2, _scopeId)); _push2(`
${ssrInterpolate(c.title)}
${ssrInterpolate(c.desc)}
`); }); _push2(`
`); } else { return [ createVNode("div", { class: "p-6 grid grid-cols-2 gap-3" }, [ (openBlock(true), createBlock(Fragment, null, renderList(unref(capabilities).slice(0, 8), (c) => { return openBlock(), createBlock("div", { key: c.title, class: "flex items-center gap-3 p-3 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer group" }, [ createVNode("div", { 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" }, [ createVNode(_component_AppIcon, { name: c.icon, class: "w-5 h-5" }, null, 8, ["name"]) ]), createVNode("div", { class: "min-w-0" }, [ createVNode("div", { class: "text-sm font-medium truncate" }, toDisplayString(c.title), 1), createVNode("div", { class: "text-xs text-text-secondary truncate" }, toDisplayString(c.desc), 1) ]) ]); }), 128)) ]) ]; } }), _: 1 }, _parent)); _push(`
`); } else { _push(``); } if (activeTab.value === "orders") { _push(`
`); _push(ssrRenderComponent(_component_PlatformSection, { title: "工单管理", desc: "受理、派单、接单、执行、完成全流程工单视图" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
ID服务对象类型日期状态人员
`); ssrRenderList([ { 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: "周评估员" } ], (wo) => { _push2(ssrRenderComponent(_component_PlatformWorkOrderRow, mergeProps({ key: wo.id }, { ref_for: true }, wo), null, _parent2, _scopeId)); }); _push2(`
`); } else { return [ createVNode("div", { class: "divide-y divide-gray-50" }, [ createVNode("div", { class: "flex items-center gap-4 px-4 py-3 bg-gray-50 text-xs font-medium text-text-secondary" }, [ createVNode("span", { class: "w-12" }, "ID"), createVNode("span", { class: "flex-1" }, "服务对象"), createVNode("span", { class: "w-16" }, "类型"), createVNode("span", { class: "w-24" }, "日期"), createVNode("span", { class: "w-24" }, "状态"), createVNode("span", { class: "w-20" }, "人员") ]), (openBlock(), createBlock(Fragment, null, renderList([ { 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: "周评估员" } ], (wo) => { return createVNode(_component_PlatformWorkOrderRow, mergeProps({ key: wo.id }, { ref_for: true }, wo), null, 16); }), 64)) ]) ]; } }), _: 1 }, _parent)); _push(ssrRenderComponent(_component_PlatformSection, { title: "工单状态流转", desc: "状态机驱动的完整流转路径" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
ORDER_CREATEDORDER_ASSIGNEDORDER_ACCEPTEDORDER_CHECKED_INORDER_IN_SERVICEORDER_COMPLETEDACCEPTED
`); } else { return [ createVNode("div", { class: "p-6" }, [ createVNode("div", { class: "flex flex-wrap items-center gap-2 text-xs" }, [ createVNode("span", { class: "px-3 py-1.5 rounded-full bg-gray-100" }, "ORDER_CREATED"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-blue-50 text-blue-600" }, "ORDER_ASSIGNED"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-indigo-50 text-indigo-600" }, "ORDER_ACCEPTED"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-teal-50 text-teal-600" }, "ORDER_CHECKED_IN"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-accent-50 text-accent-700" }, "ORDER_IN_SERVICE"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-green-50 text-green-600" }, "ORDER_COMPLETED"), createVNode("span", { class: "text-gray-300" }, "→"), createVNode("span", { class: "px-3 py-1.5 rounded-full bg-green-100 text-green-700" }, "ACCEPTED") ]) ]) ]; } }), _: 1 }, _parent)); _push(`
`); } else { _push(``); } if (activeTab.value === "dispatch") { _push(`
`); _push(ssrRenderComponent(_component_PlatformSection, { title: "调度工作台", desc: "智能推荐 + 人工确认,两阶段派单" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
#1003 赵阿姨 — 助浴服务
梅江区金山街道 · 2026-05-18 09:00-10:00 · 低风险
待派单
智能推荐 Top 3
`); ssrRenderList([ { name: "李护理员", score: 92, reasons: "资质匹配·距离1.2km·负载低·满意度4.8" }, { name: "王护理员", score: 85, reasons: "区域匹配·技能匹配·今日工单2/6" }, { name: "陈护理员", score: 78, reasons: "曾服务该对象·满意度4.6·工单量适中" } ], (r, i) => { _push2(`
${ssrInterpolate(i + 1)}
${ssrInterpolate(r.name)}
${ssrInterpolate(r.reasons)}
${ssrInterpolate(r.score)}
`); }); _push2(`
`); } else { return [ createVNode("div", { class: "p-6 space-y-4" }, [ createVNode("div", { class: "flex items-center justify-between p-4 bg-primary-50 rounded-xl" }, [ createVNode("div", null, [ createVNode("div", { class: "text-sm font-bold" }, "#1003 赵阿姨 — 助浴服务"), createVNode("div", { class: "text-xs text-text-secondary" }, "梅江区金山街道 · 2026-05-18 09:00-10:00 · 低风险") ]), createVNode("span", { class: "px-3 py-1.5 bg-primary text-white rounded-lg text-xs font-medium" }, "待派单") ]), createVNode("div", { class: "text-sm font-medium text-text-primary mt-4 mb-2" }, "智能推荐 Top 3"), (openBlock(), createBlock(Fragment, null, renderList([ { name: "李护理员", score: 92, reasons: "资质匹配·距离1.2km·负载低·满意度4.8" }, { name: "王护理员", score: 85, reasons: "区域匹配·技能匹配·今日工单2/6" }, { name: "陈护理员", score: 78, reasons: "曾服务该对象·满意度4.6·工单量适中" } ], (r, i) => { return createVNode("div", { key: i, class: "flex items-center gap-4 p-4 rounded-xl border hover:border-primary hover:bg-primary-50/50 transition-colors cursor-pointer" }, [ createVNode("span", { 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" }, toDisplayString(i + 1), 1), createVNode("div", { class: "flex-1 min-w-0" }, [ createVNode("div", { class: "text-sm font-medium" }, toDisplayString(r.name), 1), createVNode("div", { class: "text-xs text-text-secondary truncate" }, toDisplayString(r.reasons), 1) ]), createVNode("span", { class: "text-lg font-bold font-mono text-primary shrink-0" }, toDisplayString(r.score), 1), createVNode("button", { class: "px-4 py-2 bg-primary text-white rounded-lg text-xs font-medium hover:bg-primary-700 transition-colors shrink-0" }, "派单") ]); }), 64)) ]) ]; } }), _: 1 }, _parent)); _push(`
`); } else { _push(``); } if (activeTab.value === "delivery") { _push(`
`); _push(ssrRenderComponent(_component_PlatformSection, { title: "Delivery 工作台" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
今日工单6
待接单2
待签到1
服务中1
已完成2
`); } else { return [ createVNode("div", { class: "p-4 space-y-3" }, [ createVNode("div", { class: "flex items-center justify-between text-sm" }, [ createVNode("span", { class: "text-text-secondary" }, "今日工单"), createVNode("span", { class: "font-bold" }, "6") ]), createVNode("div", { class: "flex items-center justify-between text-sm" }, [ createVNode("span", { class: "text-text-secondary" }, "待接单"), createVNode("span", { class: "font-bold text-blue-600" }, "2") ]), createVNode("div", { class: "flex items-center justify-between text-sm" }, [ createVNode("span", { class: "text-text-secondary" }, "待签到"), createVNode("span", { class: "font-bold text-teal-600" }, "1") ]), createVNode("div", { class: "flex items-center justify-between text-sm" }, [ createVNode("span", { class: "text-text-secondary" }, "服务中"), createVNode("span", { class: "font-bold text-accent-700" }, "1") ]), createVNode("div", { class: "flex items-center justify-between text-sm" }, [ createVNode("span", { class: "text-text-secondary" }, "已完成"), createVNode("span", { class: "font-bold text-green-600" }, "2") ]) ]) ]; } }), _: 1 }, _parent)); _push(ssrRenderComponent(_component_PlatformSection, { title: "GPS 签到" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
当前位置距服务地址
85m
✓ 200米范围内,可签到
📷 现场拍照
✍️ 对象确认
`); } else { return [ createVNode("div", { class: "p-4 space-y-3" }, [ createVNode("div", { class: "text-xs text-text-secondary" }, "当前位置距服务地址"), createVNode("div", { class: "text-3xl font-bold font-mono text-accent-700" }, "85m"), createVNode("div", { class: "text-xs text-green-600" }, "✓ 200米范围内,可签到"), createVNode("div", { class: "flex gap-2 mt-3" }, [ createVNode("div", { class: "w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary" }, "📷 现场拍照"), createVNode("div", { class: "w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary" }, "✍️ 对象确认") ]), createVNode("button", { class: "w-full py-3 bg-cta text-white rounded-xl text-sm font-bold hover:bg-cta-700 transition-colors" }, "确认签到") ]) ]; } }), _: 1 }, _parent)); _push(ssrRenderComponent(_component_PlatformSection, { title: "项目执行记录" }, { default: withCtx((_, _push2, _parent2, _scopeId) => { if (_push2) { _push2(`
`); ssrRenderList([ { name: "助洁服务", status: "COMPLETED", time: "09:15-10:05", duration: "50分钟" }, { name: "健康监测", status: "IN_PROGRESS", time: "10:10-", duration: "进行中" }, { name: "康复指导", status: "PENDING", time: "--", duration: "待执行" } ], (item, i) => { _push2(`
${ssrInterpolate(item.name)}${ssrInterpolate(item.time)}${ssrInterpolate(item.duration)}
`); }); _push2(`
`); } else { return [ createVNode("div", { class: "p-4 space-y-3" }, [ (openBlock(), createBlock(Fragment, null, renderList([ { name: "助洁服务", status: "COMPLETED", time: "09:15-10:05", duration: "50分钟" }, { name: "健康监测", status: "IN_PROGRESS", time: "10:10-", duration: "进行中" }, { name: "康复指导", status: "PENDING", time: "--", duration: "待执行" } ], (item, i) => { return createVNode("div", { key: i, class: "flex items-center gap-3 text-sm" }, [ createVNode("span", { class: [ "w-2 h-2 rounded-full shrink-0", item.status === "COMPLETED" ? "bg-green-500" : item.status === "IN_PROGRESS" ? "bg-accent" : "bg-gray-300" ] }, null, 2), createVNode("span", { class: "flex-1 font-medium" }, toDisplayString(item.name), 1), createVNode("span", { class: "text-xs text-text-secondary" }, toDisplayString(item.time), 1), createVNode("span", { class: "text-xs text-text-secondary w-14 text-right" }, toDisplayString(item.duration), 1) ]); }), 64)) ]) ]; } }), _: 1 }, _parent)); _push(`
`); } else { _push(``); } _push(ssrRenderComponent(_component_CtaSection, null, null, _parent)); _push(``); }; } }); const _sfc_setup = _sfc_main.setup; _sfc_main.setup = (props, ctx) => { const ssrContext = useSSRContext(); (ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/demo.vue"); return _sfc_setup ? _sfc_setup(props, ctx) : void 0; }; export { _sfc_main as default }; //# sourceMappingURL=demo-BC4si0ca.js.map