- Spring Boot 后端服务 (hss-home-service) - delivery-miniapp 配送小程序 - website 官网 (Nuxt) - docs 架构设计文档 - Docker 容器化部署配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 line
25 KiB
JSON
1 line
25 KiB
JSON
{"file":"demo-BC4si0ca.js","mappings":"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","names":["_ssrRenderAttrs","_mergeProps","_ssrInterpolate","_ssrRenderList","_push","_parent","_ssrRenderClass","_createVNode","_createBlock","_Fragment","_renderList","_toDisplayString","_unref","_openBlock","_ssrRenderComponent"],"sources":["../../../../components/PlatformStatCard.vue","../../../../components/PlatformSection.vue","../../../../components/PlatformWorkOrderRow.vue","../../../../pages/demo.vue"],"sourcesContent":["<script setup lang=\"ts\">\ndefineProps<{ label: string; value: string | number; suffix?: string; trend?: string; loading?: boolean }>()\n</script>\n\n<template>\n <div class=\"bg-white rounded-2xl p-6 shadow-sm border border-gray-100\">\n <div v-if=\"loading\" class=\"animate-pulse space-y-3\">\n <div class=\"h-4 bg-gray-200 rounded w-16\" />\n <div class=\"h-8 bg-gray-200 rounded w-24\" />\n </div>\n <template v-else>\n <p class=\"text-sm text-text-secondary mb-2\">{{ label }}</p>\n <p class=\"text-3xl font-bold font-mono text-primary\">\n {{ value }}<span v-if=\"suffix\" class=\"text-lg text-text-secondary ml-1\">{{ suffix }}</span>\n </p>\n <p v-if=\"trend\" class=\"text-xs text-accent mt-1\">{{ trend }}</p>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineProps<{ title: string; desc?: string }>()\n</script>\n\n<template>\n <div class=\"bg-white rounded-2xl shadow-sm border border-gray-100 overflow-hidden\">\n <div class=\"px-6 py-4 border-b border-gray-50 flex items-center justify-between\">\n <div>\n <h3 class=\"font-bold text-text-primary\">{{ title }}</h3>\n <p v-if=\"desc\" class=\"text-xs text-text-secondary mt-0.5\">{{ desc }}</p>\n </div>\n <div class=\"flex gap-2\">\n <span class=\"w-2.5 h-2.5 rounded-full bg-red-400\" />\n <span class=\"w-2.5 h-2.5 rounded-full bg-yellow-400\" />\n <span class=\"w-2.5 h-2.5 rounded-full bg-green-400\" />\n </div>\n </div>\n <div class=\"p-0\">\n <slot />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\ndefineProps<{\n id: number\n patientName: string\n serviceType: string\n status: string\n serviceDate: string\n staffName?: string\n}>()\n\nconst statusMap: Record<string, { label: string; class: string }> = {\n ORDER_CREATED: { label: '待派单', class: 'bg-gray-100 text-gray-600' },\n ORDER_ASSIGNED: { label: '已派单', class: 'bg-blue-50 text-blue-600' },\n ORDER_ACCEPTED: { label: '已接单', class: 'bg-indigo-50 text-indigo-600' },\n ORDER_CHECKED_IN: { label: '已签到', class: 'bg-teal-50 text-teal-600' },\n ORDER_IN_SERVICE: { label: '服务中', class: 'bg-accent-50 text-accent-700' },\n ORDER_COMPLETED: { label: '已完成', class: 'bg-green-50 text-green-600' },\n ORDER_EXCEPTION: { label: '异常', class: 'bg-red-50 text-red-600' },\n ACCEPTED: { label: '已验收', class: 'bg-green-100 text-green-700' },\n}\n</script>\n\n<template>\n <div class=\"flex items-center gap-4 px-4 py-3 bg-white border-b border-gray-50 hover:bg-gray-50 transition-colors\">\n <span class=\"text-sm text-text-secondary w-12 shrink-0\">#{{ id }}</span>\n <span class=\"text-sm font-medium flex-1 truncate\">{{ patientName }}</span>\n <span class=\"text-xs text-text-secondary w-16 shrink-0\">{{ serviceType }}</span>\n <span class=\"text-xs w-24 shrink-0\">{{ serviceDate }}</span>\n <span class=\"text-xs px-2 py-1 rounded-full font-medium shrink-0\" :class=\"statusMap[status]?.class || 'bg-gray-100'\">\n {{ statusMap[status]?.label || status }}\n </span>\n <span class=\"text-xs text-text-secondary w-20 shrink-0 truncate\">{{ staffName || '-' }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { useSeo } from '~/composables/useSeo'\nimport { useApi } from '~/composables/useApi'\nimport { capabilities } from '~/data/siteContent'\n\nuseSeo({ title: '平台演示', description: '智慧医养居家上门服务平台 — 功能演示与真实数据展示' })\n\nconst { get } = useApi()\n\nconst dashboard = ref<Record<string, any>>({})\nconst summary = ref<Record<string, any>>({})\nconst quality = ref<Record<string, any>>({})\nconst workOrders = ref<any[]>([])\nconst apps = ref<any[]>([])\nconst loading = ref(true)\nconst activeTab = ref('overview')\n\nconst tabs = [\n { key: 'overview', label: '管理看板' },\n { key: 'orders', label: '工单管理' },\n { key: 'dispatch', label: '派单调度' },\n { key: 'delivery', label: '移动执行' },\n]\n\nonMounted(async () => {\n try {\n const [d, s, q] = await Promise.all([\n get<any>('/admin/dashboard').catch(() => ({})),\n get<any>('/analytics/summary').catch(() => ({})),\n get<any>('/analytics/quality').catch(() => ({})),\n ])\n dashboard.value = d || {}\n summary.value = s || {}\n quality.value = q || {}\n } catch (_) {}\n loading.value = false\n})\n\nfunction fmt(n: any, def = '--') {\n if (n === null || n === undefined) return def\n if (typeof n === 'number') return n.toLocaleString()\n return String(n)\n}\n</script>\n\n<template>\n <section class=\"py-16 bg-gradient-to-br from-primary-700 to-primary-900 text-white\">\n <div class=\"section-container\">\n <span class=\"text-sm text-blue-200 mb-2 block\">Platform Demo</span>\n <h1 class=\"text-4xl md:text-5xl font-bold mb-4\">平台功能演示</h1>\n <p class=\"text-lg text-blue-100 max-w-2xl\">以下展示平台真实管理界面,数据通过后端 API 实时获取</p>\n </div>\n </section>\n\n <!-- Tab Nav -->\n <div class=\"bg-white border-b sticky top-16 z-30\">\n <div class=\"section-container flex gap-0 overflow-x-auto\">\n <button v-for=\"t in tabs\" :key=\"t.key\" @click=\"activeTab = t.key\"\n class=\"px-6 py-4 text-sm font-medium border-b-2 transition-colors shrink-0\"\n :class=\"activeTab === t.key ? 'border-primary text-primary' : 'border-transparent text-text-secondary hover:text-text-primary'\">\n {{ t.label }}\n </button>\n </div>\n </div>\n\n <!-- Overview Tab -->\n <section v-if=\"activeTab === 'overview'\" class=\"py-12 bg-surface\">\n <div class=\"section-container space-y-8\">\n <div class=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n <PlatformStatCard label=\"今日工单\" :value=\"fmt(dashboard.todayOrders)\" suffix=\"单\" />\n <PlatformStatCard label=\"进行中\" :value=\"fmt(dashboard.inProgress)\" suffix=\"单\" />\n <PlatformStatCard label=\"服务完成率\" :value=\"fmt(quality.serviceCompletionRate)\" suffix=\"%\" />\n <PlatformStatCard label=\"活跃服务人员\" :value=\"fmt(dashboard.availableStaff)\" suffix=\"人\" />\n </div>\n <div class=\"grid lg:grid-cols-2 gap-8\">\n <PlatformSection title=\"实时工单状态分布\" desc=\"各状态工单数量概览\">\n <div class=\"p-6 grid grid-cols-2 gap-3\">\n <div v-for=\"item in [\n { label: '待派单', v: dashboard.pendingDispatch, c: 'bg-gray-100' },\n { label: '进行中', v: dashboard.inProgress, c: 'bg-blue-50' },\n { label: '已完成', v: dashboard.completedToday, c: 'bg-green-50' },\n { label: '异常', v: dashboard.exceptions, c: 'bg-red-50' },\n ]\" :key=\"item.label\" :class=\"['rounded-xl p-4 text-center', item.c]\">\n <div class=\"text-2xl font-bold font-mono\">{{ fmt(item.v) }}</div>\n <div class=\"text-xs text-text-secondary mt-1\">{{ item.label }}</div>\n </div>\n </div>\n </PlatformSection>\n <PlatformSection title=\"核心能力模块\" desc=\"平台覆盖居家服务全流程\">\n <div class=\"p-6 grid grid-cols-2 gap-3\">\n <div v-for=\"c in capabilities.slice(0,8)\" :key=\"c.title\"\n class=\"flex items-center gap-3 p-3 rounded-xl hover:bg-primary-50 transition-colors cursor-pointer group\">\n <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\">\n <AppIcon :name=\"c.icon\" class=\"w-5 h-5\" />\n </div>\n <div class=\"min-w-0\">\n <div class=\"text-sm font-medium truncate\">{{ c.title }}</div>\n <div class=\"text-xs text-text-secondary truncate\">{{ c.desc }}</div>\n </div>\n </div>\n </div>\n </PlatformSection>\n </div>\n </div>\n </section>\n\n <!-- Orders Tab -->\n <section v-if=\"activeTab === 'orders'\" class=\"py-12 bg-surface\">\n <div class=\"section-container space-y-6\">\n <PlatformSection title=\"工单管理\" desc=\"受理、派单、接单、执行、完成全流程工单视图\">\n <div class=\"divide-y divide-gray-50\">\n <div class=\"flex items-center gap-4 px-4 py-3 bg-gray-50 text-xs font-medium text-text-secondary\">\n <span class=\"w-12\">ID</span><span class=\"flex-1\">服务对象</span><span class=\"w-16\">类型</span><span class=\"w-24\">日期</span><span class=\"w-24\">状态</span><span class=\"w-20\">人员</span>\n </div>\n <PlatformWorkOrderRow v-for=\"wo in [\n { id: 1001, patientName:'张奶奶', serviceType:'居家护理', status:'ORDER_IN_SERVICE', serviceDate:'2026-05-18', staffName:'李护理员' },\n { id: 1002, patientName:'王大爷', serviceType:'康复训练', status:'ORDER_COMPLETED', serviceDate:'2026-05-18', staffName:'张康复师' },\n { id: 1003, patientName:'赵阿姨', serviceType:'助浴服务', status:'ORDER_ASSIGNED', serviceDate:'2026-05-18', staffName:'--' },\n { id: 1004, patientName:'刘爷爷', serviceType:'健康管理', status:'ORDER_CHECKED_IN', serviceDate:'2026-05-18', staffName:'陈护理员' },\n { id: 1005, patientName:'孙奶奶', serviceType:'能力评估', status:'ORDER_EXCEPTION', serviceDate:'2026-05-17', staffName:'周评估员' },\n ]\" :key=\"wo.id\" v-bind=\"wo\" />\n </div>\n </PlatformSection>\n\n <PlatformSection title=\"工单状态流转\" desc=\"状态机驱动的完整流转路径\">\n <div class=\"p-6\">\n <div class=\"flex flex-wrap items-center gap-2 text-xs\">\n <span class=\"px-3 py-1.5 rounded-full bg-gray-100\">ORDER_CREATED</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-blue-50 text-blue-600\">ORDER_ASSIGNED</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-indigo-50 text-indigo-600\">ORDER_ACCEPTED</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-teal-50 text-teal-600\">ORDER_CHECKED_IN</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-accent-50 text-accent-700\">ORDER_IN_SERVICE</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-green-50 text-green-600\">ORDER_COMPLETED</span><span class=\"text-gray-300\">→</span>\n <span class=\"px-3 py-1.5 rounded-full bg-green-100 text-green-700\">ACCEPTED</span>\n </div>\n </div>\n </PlatformSection>\n </div>\n </section>\n\n <!-- Dispatch Tab -->\n <section v-if=\"activeTab === 'dispatch'\" class=\"py-12 bg-surface\">\n <div class=\"section-container space-y-6\">\n <PlatformSection title=\"调度工作台\" desc=\"智能推荐 + 人工确认,两阶段派单\">\n <div class=\"p-6 space-y-4\">\n <div class=\"flex items-center justify-between p-4 bg-primary-50 rounded-xl\">\n <div>\n <div class=\"text-sm font-bold\">#1003 赵阿姨 — 助浴服务</div>\n <div class=\"text-xs text-text-secondary\">梅江区金山街道 · 2026-05-18 09:00-10:00 · 低风险</div>\n </div>\n <span class=\"px-3 py-1.5 bg-primary text-white rounded-lg text-xs font-medium\">待派单</span>\n </div>\n <div class=\"text-sm font-medium text-text-primary mt-4 mb-2\">智能推荐 Top 3</div>\n <div v-for=\"(r, i) in [\n { name:'李护理员', score:92, reasons:'资质匹配·距离1.2km·负载低·满意度4.8' },\n { name:'王护理员', score:85, reasons:'区域匹配·技能匹配·今日工单2/6' },\n { name:'陈护理员', score:78, reasons:'曾服务该对象·满意度4.6·工单量适中' },\n ]\" :key=\"i\"\n class=\"flex items-center gap-4 p-4 rounded-xl border hover:border-primary hover:bg-primary-50/50 transition-colors cursor-pointer\">\n <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\">\n {{ i + 1 }}\n </span>\n <div class=\"flex-1 min-w-0\">\n <div class=\"text-sm font-medium\">{{ r.name }}</div>\n <div class=\"text-xs text-text-secondary truncate\">{{ r.reasons }}</div>\n </div>\n <span class=\"text-lg font-bold font-mono text-primary shrink-0\">{{ r.score }}</span>\n <button class=\"px-4 py-2 bg-primary text-white rounded-lg text-xs font-medium hover:bg-primary-700 transition-colors shrink-0\">派单</button>\n </div>\n </div>\n </PlatformSection>\n </div>\n </section>\n\n <!-- Delivery Tab -->\n <section v-if=\"activeTab === 'delivery'\" class=\"py-12 bg-surface\">\n <div class=\"section-container space-y-6\">\n <div class=\"grid lg:grid-cols-3 gap-6\">\n <PlatformSection title=\"Delivery 工作台\">\n <div class=\"p-4 space-y-3\">\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"text-text-secondary\">今日工单</span><span class=\"font-bold\">6</span>\n </div>\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"text-text-secondary\">待接单</span><span class=\"font-bold text-blue-600\">2</span>\n </div>\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"text-text-secondary\">待签到</span><span class=\"font-bold text-teal-600\">1</span>\n </div>\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"text-text-secondary\">服务中</span><span class=\"font-bold text-accent-700\">1</span>\n </div>\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"text-text-secondary\">已完成</span><span class=\"font-bold text-green-600\">2</span>\n </div>\n </div>\n </PlatformSection>\n <PlatformSection title=\"GPS 签到\">\n <div class=\"p-4 space-y-3\">\n <div class=\"text-xs text-text-secondary\">当前位置距服务地址</div>\n <div class=\"text-3xl font-bold font-mono text-accent-700\">85m</div>\n <div class=\"text-xs text-green-600\">✓ 200米范围内,可签到</div>\n <div class=\"flex gap-2 mt-3\">\n <div class=\"w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary\">📷 现场拍照</div>\n <div class=\"w-full h-20 rounded-xl bg-gray-100 flex items-center justify-center text-xs text-text-secondary\">✍️ 对象确认</div>\n </div>\n <button class=\"w-full py-3 bg-cta text-white rounded-xl text-sm font-bold hover:bg-cta-700 transition-colors\">确认签到</button>\n </div>\n </PlatformSection>\n <PlatformSection title=\"项目执行记录\">\n <div class=\"p-4 space-y-3\">\n <div v-for=\"(item, i) in [\n { name:'助洁服务', status:'COMPLETED', time:'09:15-10:05', duration:'50分钟' },\n { name:'健康监测', status:'IN_PROGRESS', time:'10:10-', duration:'进行中' },\n { name:'康复指导', status:'PENDING', time:'--', duration:'待执行' },\n ]\" :key=\"i\" class=\"flex items-center gap-3 text-sm\">\n <span :class=\"['w-2 h-2 rounded-full shrink-0',\n item.status === 'COMPLETED' ? 'bg-green-500' : item.status === 'IN_PROGRESS' ? 'bg-accent' : 'bg-gray-300']\" />\n <span class=\"flex-1 font-medium\">{{ item.name }}</span>\n <span class=\"text-xs text-text-secondary\">{{ item.time }}</span>\n <span class=\"text-xs text-text-secondary w-14 text-right\">{{ item.duration }}</span>\n </div>\n </div>\n </PlatformSection>\n </div>\n </div>\n </section>\n\n <CtaSection />\n</template>\n"],"version":3} |