Files
Home-Care/hss-home-service/website/.nuxt/dist/server/_nuxt/index-kIYeHZWZ.js.map.json
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

1 line
10 KiB
JSON

{"file":"index-kIYeHZWZ.js","mappings":"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","names":["_withAsyncContext","_ssrRenderAttrs","_mergeProps","_push","_parent","_createVNode","_ssrRenderList","_ssrInterpolate","_toDisplayString","_unref","_ssrIncludeBooleanAttr"],"sources":["../../../../pages/platform/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, onMounted } from 'vue'\nimport { usePlatformAuth } from '~/composables/usePlatformAuth'\nimport { useApi } from '~/composables/useApi'\n\ndefinePageMeta({ layout: false })\n\nconst { isLoggedIn, user, logout, switchRole, getAuthHeaders, ROLES } = usePlatformAuth()\nconst { get, post } = useApi()\n\nconst stats = ref<Record<string,any>>({})\nconst recentOrders = ref<any[]>([])\nconst activeMenu = ref('dashboard')\n\nif (!isLoggedIn.value) { await navigateTo('/platform/login') }\n\nonMounted(async () => {\n try { stats.value = await get<any>('/admin/dashboard').catch(() => ({})) } catch {}\n})\n\nconst menuItems = [\n { key: 'dashboard', label: '工作台', icon: 'chart' },\n { key: 'applications', label: '服务申请', icon: 'clipboard', href: '/platform/applications' },\n { key: 'work-orders', label: '工单管理', icon: 'document', href: '/platform/work-orders' },\n]\n\nconst roleMenus: Record<string, string[]> = {\n RECEPTIONIST: ['applications'],\n ASSESSOR: ['applications'],\n DISPATCHER: ['work-orders'],\n STAFF: ['work-orders'],\n SETTLER: ['dashboard'],\n SUPERVISOR: ['dashboard'],\n ADMIN: ['applications', 'work-orders'],\n}\n</script>\n\n<template>\n <div class=\"min-h-screen bg-surface flex\">\n <!-- Sidebar -->\n <aside class=\"hidden lg:flex flex-col w-56 bg-white border-r shrink-0\">\n <div class=\"p-4 border-b\">\n <NuxtLink to=\"/platform\" class=\"flex items-center gap-2 font-bold text-primary\">\n <div class=\"w-8 h-8 rounded-lg bg-primary flex items-center justify-center text-white text-xs font-mono\">H</div>\n <span class=\"text-sm\">智慧医养平台</span>\n </NuxtLink>\n </div>\n <nav class=\"flex-1 p-3 space-y-1\">\n <NuxtLink v-for=\"m in menuItems\" :key=\"m.key\" :to=\"m.href || '/platform'\"\n class=\"flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm transition-colors\"\n :class=\"activeMenu === m.key ? 'bg-primary-50 text-primary font-medium' : 'text-text-secondary hover:bg-gray-50'\">\n <AppIcon :name=\"m.icon\" class=\"w-4 h-4\" /> {{ m.label }}\n </NuxtLink>\n </nav>\n <div class=\"p-3 border-t\">\n <div class=\"flex items-center gap-2 px-3 py-2 text-sm\">\n <div class=\"w-7 h-7 rounded-full bg-primary-50 text-primary flex items-center justify-center text-xs font-bold\">{{ user?.userName?.charAt(0) }}</div>\n <div class=\"min-w-0\">\n <div class=\"text-xs font-medium truncate\">{{ user?.userName }}</div>\n <select @change=\"switchRole(($event.target as HTMLSelectElement).value)\"\n class=\"text-xs text-text-secondary bg-transparent border-none outline-none cursor-pointer\">\n <option v-for=\"r in ROLES\" :key=\"r.key\" :value=\"r.key\" :selected=\"user?.userRole === r.key\">{{ r.label }}</option>\n </select>\n </div>\n </div>\n <button @click=\"logout(); navigateTo('/platform/login')\"\n class=\"w-full mt-2 px-3 py-2 text-xs text-text-secondary hover:text-red-500 transition-colors text-left rounded-lg hover:bg-red-50\">退出登录</button>\n </div>\n </aside>\n\n <!-- Main Content -->\n <main class=\"flex-1 overflow-auto\">\n <!-- Mobile header -->\n <div class=\"lg:hidden bg-white border-b px-4 py-3 flex items-center justify-between\">\n <NuxtLink to=\"/platform\" class=\"font-bold text-primary text-sm\">智慧医养平台</NuxtLink>\n <div class=\"flex items-center gap-2\">\n <select @change=\"switchRole(($event.target as HTMLSelectElement).value)\"\n class=\"text-xs border rounded-lg px-2 py-1 outline-none\">\n <option v-for=\"r in ROLES\" :key=\"r.key\" :value=\"r.key\" :selected=\"user?.userRole === r.key\">{{ r.label }}</option>\n </select>\n <button @click=\"logout(); navigateTo('/platform/login')\" class=\"text-xs text-red-500\">退出</button>\n </div>\n </div>\n\n <div class=\"p-4 lg:p-8\">\n <h2 class=\"text-xl font-bold mb-6\">工作台 — {{ ROLES.find(r=>r.key===user?.userRole)?.label || user?.userRole }}</h2>\n\n <div class=\"grid grid-cols-2 lg:grid-cols-4 gap-4 mb-8\">\n <div class=\"bg-white rounded-xl p-4 shadow-sm border\"><div class=\"text-2xl font-bold font-mono text-primary\">{{ stats.todayOrders || '--' }}</div><div class=\"text-xs text-text-secondary mt-1\">今日工单</div></div>\n <div class=\"bg-white rounded-xl p-4 shadow-sm border\"><div class=\"text-2xl font-bold font-mono text-accent-700\">{{ stats.inProgress || '--' }}</div><div class=\"text-xs text-text-secondary mt-1\">进行中</div></div>\n <div class=\"bg-white rounded-xl p-4 shadow-sm border\"><div class=\"text-2xl font-bold font-mono text-green-600\">{{ stats.completedToday || '--' }}</div><div class=\"text-xs text-text-secondary mt-1\">已完成</div></div>\n <div class=\"bg-white rounded-xl p-4 shadow-sm border\"><div class=\"text-2xl font-bold font-mono text-red-500\">{{ stats.exceptions || '--' }}</div><div class=\"text-xs text-text-secondary mt-1\">异常</div></div>\n </div>\n\n <!-- Quick actions based on role -->\n <div class=\"grid lg:grid-cols-2 gap-6\">\n <div class=\"bg-white rounded-2xl shadow-sm border p-6\">\n <h3 class=\"font-bold mb-4\">快捷操作</h3>\n <div class=\"grid grid-cols-2 gap-3\">\n <NuxtLink v-if=\"['RECEPTIONIST','ADMIN'].includes(user?.userRole||'')\" to=\"/platform/applications\"\n class=\"p-4 rounded-xl bg-primary-50 text-primary text-sm font-medium hover:bg-primary hover:text-white transition-colors text-center\">受理新申请</NuxtLink>\n <NuxtLink v-if=\"['DISPATCHER','ADMIN'].includes(user?.userRole||'')\" to=\"/platform/work-orders\"\n class=\"p-4 rounded-xl bg-accent-50 text-accent-700 text-sm font-medium hover:bg-accent hover:text-white transition-colors text-center\">查看工单</NuxtLink>\n <NuxtLink to=\"/demo\" class=\"p-4 rounded-xl bg-gray-50 text-text-secondary text-sm font-medium hover:bg-gray-100 transition-colors text-center\">平台演示</NuxtLink>\n <NuxtLink to=\"/\" class=\"p-4 rounded-xl bg-gray-50 text-text-secondary text-sm font-medium hover:bg-gray-100 transition-colors text-center\">返回官网</NuxtLink>\n </div>\n </div>\n <div class=\"bg-white rounded-2xl shadow-sm border p-6\">\n <h3 class=\"font-bold mb-4\">当前角色权限</h3>\n <div class=\"space-y-2 text-sm\">\n <div class=\"flex justify-between py-2 border-b border-gray-50\"><span class=\"text-text-secondary\">角色</span><span class=\"font-medium\">{{ ROLES.find(r=>r.key===user?.userRole)?.label }}</span></div>\n <div class=\"flex justify-between py-2 border-b border-gray-50\"><span class=\"text-text-secondary\">可操作模块</span><span class=\"font-medium\">{{ (roleMenus[user?.userRole||'']||['dashboard']).join(', ') }}</span></div>\n <div class=\"flex justify-between py-2\"><span class=\"text-text-secondary\">数据范围</span><span class=\"font-medium\">本机构</span></div>\n </div>\n </div>\n </div>\n </div>\n </main>\n </div>\n</template>\n"],"version":3}