Files
Home-Care/hss-home-service/website/.nuxt/dist/server/_nuxt/demo-BC4si0ca.js
comclib c02029a5f3 feat: 初始化居家上门服务系统完整项目代码
- Spring Boot 后端服务 (hss-home-service)
- delivery-miniapp 配送小程序
- website 官网 (Nuxt)
- docs 架构设计文档
- Docker 容器化部署配置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 09:04:49 +08:00

518 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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(`<div${ssrRenderAttrs(mergeProps({ class: "bg-white rounded-2xl p-6 shadow-sm border border-gray-100" }, _attrs))}>`);
if (__props.loading) {
_push(`<div class="animate-pulse space-y-3"><div class="h-4 bg-gray-200 rounded w-16"></div><div class="h-8 bg-gray-200 rounded w-24"></div></div>`);
} else {
_push(`<!--[--><p class="text-sm text-text-secondary mb-2">${ssrInterpolate(__props.label)}</p><p class="text-3xl font-bold font-mono text-primary">${ssrInterpolate(__props.value)}`);
if (__props.suffix) {
_push(`<span class="text-lg text-text-secondary ml-1">${ssrInterpolate(__props.suffix)}</span>`);
} else {
_push(`<!---->`);
}
_push(`</p>`);
if (__props.trend) {
_push(`<p class="text-xs text-accent mt-1">${ssrInterpolate(__props.trend)}</p>`);
} else {
_push(`<!---->`);
}
_push(`<!--]-->`);
}
_push(`</div>`);
};
}
});
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(`<div${ssrRenderAttrs(mergeProps({ class: "bg-white rounded-2xl shadow-sm border border-gray-100 overflow-hidden" }, _attrs))}><div class="px-6 py-4 border-b border-gray-50 flex items-center justify-between"><div><h3 class="font-bold text-text-primary">${ssrInterpolate(__props.title)}</h3>`);
if (__props.desc) {
_push(`<p class="text-xs text-text-secondary mt-0.5">${ssrInterpolate(__props.desc)}</p>`);
} else {
_push(`<!---->`);
}
_push(`</div><div class="flex gap-2"><span class="w-2.5 h-2.5 rounded-full bg-red-400"></span><span class="w-2.5 h-2.5 rounded-full bg-yellow-400"></span><span class="w-2.5 h-2.5 rounded-full bg-green-400"></span></div></div><div class="p-0">`);
ssrRenderSlot(_ctx.$slots, "default", {}, null, _push, _parent);
_push(`</div></div>`);
};
}
});
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(`<div${ssrRenderAttrs(mergeProps({ class: "flex items-center gap-4 px-4 py-3 bg-white border-b border-gray-50 hover:bg-gray-50 transition-colors" }, _attrs))}><span class="text-sm text-text-secondary w-12 shrink-0">#${ssrInterpolate(__props.id)}</span><span class="text-sm font-medium flex-1 truncate">${ssrInterpolate(__props.patientName)}</span><span class="text-xs text-text-secondary w-16 shrink-0">${ssrInterpolate(__props.serviceType)}</span><span class="text-xs w-24 shrink-0">${ssrInterpolate(__props.serviceDate)}</span><span class="${ssrRenderClass([statusMap[__props.status]?.class || "bg-gray-100", "text-xs px-2 py-1 rounded-full font-medium shrink-0"])}">${ssrInterpolate(statusMap[__props.status]?.label || __props.status)}</span><span class="text-xs text-text-secondary w-20 shrink-0 truncate">${ssrInterpolate(__props.staffName || "-")}</span></div>`);
};
}
});
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(`<!--[--><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><div class="bg-white border-b sticky top-16 z-30"><div class="section-container flex gap-0 overflow-x-auto"><!--[-->`);
ssrRenderList(tabs, (t) => {
_push(`<button class="${ssrRenderClass([activeTab.value === t.key ? "border-primary text-primary" : "border-transparent text-text-secondary hover:text-text-primary", "px-6 py-4 text-sm font-medium border-b-2 transition-colors shrink-0"])}">${ssrInterpolate(t.label)}</button>`);
});
_push(`<!--]--></div></div>`);
if (activeTab.value === "overview") {
_push(`<section class="py-12 bg-surface"><div class="section-container space-y-8"><div class="grid grid-cols-2 lg:grid-cols-4 gap-4">`);
_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(`</div><div class="grid lg:grid-cols-2 gap-8">`);
_push(ssrRenderComponent(_component_PlatformSection, {
title: "实时工单状态分布",
desc: "各状态工单数量概览"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="p-6 grid grid-cols-2 gap-3"${_scopeId}><!--[-->`);
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(`<div class="${ssrRenderClass(["rounded-xl p-4 text-center", item.c])}"${_scopeId}><div class="text-2xl font-bold font-mono"${_scopeId}>${ssrInterpolate(fmt(item.v))}</div><div class="text-xs text-text-secondary mt-1"${_scopeId}>${ssrInterpolate(item.label)}</div></div>`);
});
_push2(`<!--]--></div>`);
} 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(`<div class="p-6 grid grid-cols-2 gap-3"${_scopeId}><!--[-->`);
ssrRenderList(unref(capabilities).slice(0, 8), (c) => {
_push2(`<div class="flex items-center gap-3 p-3 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer group"${_scopeId}><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"${_scopeId}>`);
_push2(ssrRenderComponent(_component_AppIcon, {
name: c.icon,
class: "w-5 h-5"
}, null, _parent2, _scopeId));
_push2(`</div><div class="min-w-0"${_scopeId}><div class="text-sm font-medium truncate"${_scopeId}>${ssrInterpolate(c.title)}</div><div class="text-xs text-text-secondary truncate"${_scopeId}>${ssrInterpolate(c.desc)}</div></div></div>`);
});
_push2(`<!--]--></div>`);
} 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(`</div></div></section>`);
} else {
_push(`<!---->`);
}
if (activeTab.value === "orders") {
_push(`<section class="py-12 bg-surface"><div class="section-container space-y-6">`);
_push(ssrRenderComponent(_component_PlatformSection, {
title: "工单管理",
desc: "受理、派单、接单、执行、完成全流程工单视图"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="divide-y divide-gray-50"${_scopeId}><div class="flex items-center gap-4 px-4 py-3 bg-gray-50 text-xs font-medium text-text-secondary"${_scopeId}><span class="w-12"${_scopeId}>ID</span><span class="flex-1"${_scopeId}>服务对象</span><span class="w-16"${_scopeId}>类型</span><span class="w-24"${_scopeId}>日期</span><span class="w-24"${_scopeId}>状态</span><span class="w-20"${_scopeId}>人员</span></div><!--[-->`);
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(`<!--]--></div>`);
} 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(`<div class="p-6"${_scopeId}><div class="flex flex-wrap items-center gap-2 text-xs"${_scopeId}><span class="px-3 py-1.5 rounded-full bg-gray-100"${_scopeId}>ORDER_CREATED</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-blue-50 text-blue-600"${_scopeId}>ORDER_ASSIGNED</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-indigo-50 text-indigo-600"${_scopeId}>ORDER_ACCEPTED</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-teal-50 text-teal-600"${_scopeId}>ORDER_CHECKED_IN</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-accent-50 text-accent-700"${_scopeId}>ORDER_IN_SERVICE</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-green-50 text-green-600"${_scopeId}>ORDER_COMPLETED</span><span class="text-gray-300"${_scopeId}>→</span><span class="px-3 py-1.5 rounded-full bg-green-100 text-green-700"${_scopeId}>ACCEPTED</span></div></div>`);
} 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(`</div></section>`);
} else {
_push(`<!---->`);
}
if (activeTab.value === "dispatch") {
_push(`<section class="py-12 bg-surface"><div class="section-container space-y-6">`);
_push(ssrRenderComponent(_component_PlatformSection, {
title: "调度工作台",
desc: "智能推荐 + 人工确认,两阶段派单"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="p-6 space-y-4"${_scopeId}><div class="flex items-center justify-between p-4 bg-primary-50 rounded-xl"${_scopeId}><div${_scopeId}><div class="text-sm font-bold"${_scopeId}>#1003 赵阿姨 — 助浴服务</div><div class="text-xs text-text-secondary"${_scopeId}>梅江区金山街道 · 2026-05-18 09:00-10:00 · 低风险</div></div><span class="px-3 py-1.5 bg-primary text-white rounded-lg text-xs font-medium"${_scopeId}>待派单</span></div><div class="text-sm font-medium text-text-primary mt-4 mb-2"${_scopeId}>智能推荐 Top 3</div><!--[-->`);
ssrRenderList([
{ name: "李护理员", score: 92, reasons: "资质匹配·距离1.2km·负载低·满意度4.8" },
{ name: "王护理员", score: 85, reasons: "区域匹配·技能匹配·今日工单2/6" },
{ name: "陈护理员", score: 78, reasons: "曾服务该对象·满意度4.6·工单量适中" }
], (r, i) => {
_push2(`<div class="flex items-center gap-4 p-4 rounded-xl border hover:border-primary hover:bg-primary-50/50 transition-colors cursor-pointer"${_scopeId}><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"${_scopeId}>${ssrInterpolate(i + 1)}</span><div class="flex-1 min-w-0"${_scopeId}><div class="text-sm font-medium"${_scopeId}>${ssrInterpolate(r.name)}</div><div class="text-xs text-text-secondary truncate"${_scopeId}>${ssrInterpolate(r.reasons)}</div></div><span class="text-lg font-bold font-mono text-primary shrink-0"${_scopeId}>${ssrInterpolate(r.score)}</span><button class="px-4 py-2 bg-primary text-white rounded-lg text-xs font-medium hover:bg-primary-700 transition-colors shrink-0"${_scopeId}>派单</button></div>`);
});
_push2(`<!--]--></div>`);
} 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(`</div></section>`);
} else {
_push(`<!---->`);
}
if (activeTab.value === "delivery") {
_push(`<section class="py-12 bg-surface"><div class="section-container space-y-6"><div class="grid lg:grid-cols-3 gap-6">`);
_push(ssrRenderComponent(_component_PlatformSection, { title: "Delivery 工作台" }, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`<div class="p-4 space-y-3"${_scopeId}><div class="flex items-center justify-between text-sm"${_scopeId}><span class="text-text-secondary"${_scopeId}>今日工单</span><span class="font-bold"${_scopeId}>6</span></div><div class="flex items-center justify-between text-sm"${_scopeId}><span class="text-text-secondary"${_scopeId}>待接单</span><span class="font-bold text-blue-600"${_scopeId}>2</span></div><div class="flex items-center justify-between text-sm"${_scopeId}><span class="text-text-secondary"${_scopeId}>待签到</span><span class="font-bold text-teal-600"${_scopeId}>1</span></div><div class="flex items-center justify-between text-sm"${_scopeId}><span class="text-text-secondary"${_scopeId}>服务中</span><span class="font-bold text-accent-700"${_scopeId}>1</span></div><div class="flex items-center justify-between text-sm"${_scopeId}><span class="text-text-secondary"${_scopeId}>已完成</span><span class="font-bold text-green-600"${_scopeId}>2</span></div></div>`);
} 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(`<div class="p-4 space-y-3"${_scopeId}><div class="text-xs text-text-secondary"${_scopeId}>当前位置距服务地址</div><div class="text-3xl font-bold font-mono text-accent-700"${_scopeId}>85m</div><div class="text-xs text-green-600"${_scopeId}>✓ 200米范围内可签到</div><div class="flex gap-2 mt-3"${_scopeId}><div class="w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary"${_scopeId}>📷 现场拍照</div><div class="w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary"${_scopeId}>✍️ 对象确认</div></div><button class="w-full py-3 bg-cta text-white rounded-xl text-sm font-bold hover:bg-cta-700 transition-colors"${_scopeId}>确认签到</button></div>`);
} 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(`<div class="p-4 space-y-3"${_scopeId}><!--[-->`);
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(`<div class="flex items-center gap-3 text-sm"${_scopeId}><span class="${ssrRenderClass([
"w-2 h-2 rounded-full shrink-0",
item.status === "COMPLETED" ? "bg-green-500" : item.status === "IN_PROGRESS" ? "bg-accent" : "bg-gray-300"
])}"${_scopeId}></span><span class="flex-1 font-medium"${_scopeId}>${ssrInterpolate(item.name)}</span><span class="text-xs text-text-secondary"${_scopeId}>${ssrInterpolate(item.time)}</span><span class="text-xs text-text-secondary w-14 text-right"${_scopeId}>${ssrInterpolate(item.duration)}</span></div>`);
});
_push2(`<!--]--></div>`);
} 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(`</div></div></section>`);
} 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