- Spring Boot 后端服务 (hss-home-service) - delivery-miniapp 配送小程序 - website 官网 (Nuxt) - docs 架构设计文档 - Docker 容器化部署配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
518 lines
34 KiB
JavaScript
518 lines
34 KiB
JavaScript
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
|