完成consumer端同步
This commit is contained in:
866
services/homeServiceService.uts
Normal file
866
services/homeServiceService.uts
Normal file
@@ -0,0 +1,866 @@
|
||||
import {
|
||||
HomeServiceAcceptanceType,
|
||||
HomeServiceAdminApplicationType,
|
||||
HomeServiceAssessmentType,
|
||||
HomeServiceApplicationDraftType,
|
||||
HomeServiceCatalogType,
|
||||
HomeServiceCaseType,
|
||||
HomeServiceOverviewCardType,
|
||||
HomeServicePlanType,
|
||||
HomeServiceRectificationType,
|
||||
HomeServiceSettlementType,
|
||||
HomeServiceTaskType,
|
||||
HomeServiceTimelineItemType
|
||||
} from '@/types/home-service.uts'
|
||||
|
||||
const SERVICE_CATALOG: Array<HomeServiceCatalogType> = [
|
||||
{
|
||||
id: 'svc-001',
|
||||
name: '基础上门护理',
|
||||
category: '日常照护',
|
||||
price: 168,
|
||||
durationText: '约 2 小时',
|
||||
summary: '覆盖生命体征监测、基础照护、风险提醒。',
|
||||
tags: ['适老化', '护理员上门', '支持家属陪同'],
|
||||
suitableFor: '行动不便、术后恢复、慢病随访老人'
|
||||
},
|
||||
{
|
||||
id: 'svc-002',
|
||||
name: '康复训练指导',
|
||||
category: '康复支持',
|
||||
price: 260,
|
||||
durationText: '约 3 小时',
|
||||
summary: '提供肢体训练、步态练习和居家康复建议。',
|
||||
tags: ['康复师', '步骤清晰', '可连续预约'],
|
||||
suitableFor: '卒中恢复、术后康复、失能半失能老人'
|
||||
},
|
||||
{
|
||||
id: 'svc-003',
|
||||
name: '慢病健康随访',
|
||||
category: '健康管理',
|
||||
price: 128,
|
||||
durationText: '约 90 分钟',
|
||||
summary: '完成血压血糖监测、用药核对与健康宣教。',
|
||||
tags: ['随访', '慢病', '可生成记录'],
|
||||
suitableFor: '高血压、糖尿病等长期管理老人'
|
||||
}
|
||||
]
|
||||
|
||||
function createTimeline(title1: string, title2: string, title3: string): Array<HomeServiceTimelineItemType> {
|
||||
return [
|
||||
{
|
||||
id: 'tl-1',
|
||||
title: title1,
|
||||
time: '2026-05-12 09:00',
|
||||
description: '系统已建立服务申请档案。'
|
||||
},
|
||||
{
|
||||
id: 'tl-2',
|
||||
title: title2,
|
||||
time: '2026-05-12 11:30',
|
||||
description: '评估员已完成初步核对与上门安排。'
|
||||
},
|
||||
{
|
||||
id: 'tl-3',
|
||||
title: title3,
|
||||
time: '2026-05-13 08:20',
|
||||
description: '当前环节已进入待执行状态。'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
const CASE_STORE: Array<HomeServiceCaseType> = [
|
||||
{
|
||||
id: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
status: 'pending_dispatch',
|
||||
statusText: '待派单',
|
||||
statusTone: 'warning',
|
||||
serviceName: '基础上门护理',
|
||||
serviceTime: '2026-05-14 09:00-11:00',
|
||||
applicantName: '李晓兰',
|
||||
elderName: '李奶奶',
|
||||
age: 78,
|
||||
phone: '13800138000',
|
||||
address: '梅州市梅江区学海路 18 号 2 栋 602',
|
||||
summary: '老人近期行动困难,需要基础照护与生命体征监测。',
|
||||
currentStep: 3,
|
||||
totalSteps: 8,
|
||||
staffName: '待分配',
|
||||
staffPhone: '待分配',
|
||||
amount: 168,
|
||||
timeline: createTimeline('已提交申请', '待上门评估', '待派单')
|
||||
},
|
||||
{
|
||||
id: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
status: 'in_service',
|
||||
statusText: '服务中',
|
||||
statusTone: 'primary',
|
||||
serviceName: '慢病健康随访',
|
||||
serviceTime: '2026-05-13 15:00-16:30',
|
||||
applicantName: '张春梅',
|
||||
elderName: '张爷爷',
|
||||
age: 82,
|
||||
phone: '13900139000',
|
||||
address: '梅州市梅县区华侨城康宁路 66 号',
|
||||
summary: '随访血压血糖,核对用药并记录健康建议。',
|
||||
currentStep: 6,
|
||||
totalSteps: 8,
|
||||
staffName: '陈护理',
|
||||
staffPhone: '13688886666',
|
||||
amount: 128,
|
||||
timeline: createTimeline('已提交申请', '已生成服务方案', '服务执行中')
|
||||
}
|
||||
]
|
||||
|
||||
const TASK_STORE: Array<HomeServiceTaskType> = [
|
||||
{
|
||||
id: 'task-001',
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
status: 'pending_visit',
|
||||
statusText: '待上门',
|
||||
statusTone: 'warning',
|
||||
serviceName: '基础上门护理',
|
||||
elderName: '李奶奶',
|
||||
address: '梅州市梅江区学海路 18 号 2 栋 602',
|
||||
appointmentTime: '2026-05-14 09:00',
|
||||
checkInStatus: '未签到',
|
||||
recordSummary: '待填写服务记录',
|
||||
staffName: '黄护理',
|
||||
staffPhone: '13777770001',
|
||||
actionText: '签到开始',
|
||||
timeline: createTimeline('调度已派单', '护理员已接单', '等待上门签到')
|
||||
},
|
||||
{
|
||||
id: 'task-002',
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
status: 'serving',
|
||||
statusText: '服务中',
|
||||
statusTone: 'primary',
|
||||
serviceName: '慢病健康随访',
|
||||
elderName: '张爷爷',
|
||||
address: '梅州市梅县区华侨城康宁路 66 号',
|
||||
appointmentTime: '2026-05-13 15:00',
|
||||
checkInStatus: '已签到',
|
||||
recordSummary: '已完成血压血糖记录,待补充宣教备注。',
|
||||
staffName: '陈护理',
|
||||
staffPhone: '13688886666',
|
||||
actionText: '完成提交',
|
||||
timeline: createTimeline('调度已派单', '已到岗签到', '服务执行中')
|
||||
}
|
||||
]
|
||||
|
||||
const ADMIN_APPLICATIONS: Array<HomeServiceAdminApplicationType> = [
|
||||
{
|
||||
id: 'admin-app-001',
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
status: 'pending_assessment',
|
||||
statusText: '待评估',
|
||||
statusTone: 'warning',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
preferredTime: '2026-05-14 上午',
|
||||
assessmentResult: '待评估员上门',
|
||||
dispatcherName: '刘调度',
|
||||
staffName: '待分配'
|
||||
},
|
||||
{
|
||||
id: 'admin-app-002',
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
status: 'pending_acceptance',
|
||||
statusText: '待验收',
|
||||
statusTone: 'success',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
preferredTime: '2026-05-13 下午',
|
||||
assessmentResult: '评估通过,按标准随访执行',
|
||||
dispatcherName: '刘调度',
|
||||
staffName: '陈护理'
|
||||
}
|
||||
]
|
||||
|
||||
const ADMIN_OVERVIEW: Array<HomeServiceOverviewCardType> = [
|
||||
{ id: 'overview-1', label: '待评估申请', value: '06', tone: 'warning' },
|
||||
{ id: 'overview-2', label: '待派单工单', value: '03', tone: 'primary' },
|
||||
{ id: 'overview-3', label: '服务中任务', value: '08', tone: 'success' },
|
||||
{ id: 'overview-4', label: '待验收任务', value: '04', tone: 'neutral' }
|
||||
]
|
||||
|
||||
const ADMIN_ASSESSMENTS: Array<HomeServiceAssessmentType> = [
|
||||
{
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
riskLevel: '中风险',
|
||||
careLevel: '护理二级',
|
||||
visitTime: '2026-05-14 09:00',
|
||||
assessmentSummary: '行动缓慢,需重点关注跌倒风险和晨间血压波动。',
|
||||
requirementTags: ['血压监测', '基础照护', '跌倒风险提醒']
|
||||
},
|
||||
{
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
riskLevel: '低风险',
|
||||
careLevel: '随访管理',
|
||||
visitTime: '2026-05-13 15:00',
|
||||
assessmentSummary: '生命体征稳定,重点跟踪慢病用药执行情况。',
|
||||
requirementTags: ['血糖记录', '用药核对', '家属宣教']
|
||||
}
|
||||
]
|
||||
|
||||
const ADMIN_PLANS: Array<HomeServicePlanType> = [
|
||||
{
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
planTitle: '基础护理 7 日方案',
|
||||
serviceFrequency: '每周 3 次',
|
||||
serviceCycle: '2026-05-14 至 2026-05-21',
|
||||
executorAdvice: '优先安排熟悉慢病照护的护理员,首次上门同步评估跌倒风险。',
|
||||
billingSummary: '基础护理 ¥168/次,计划总额 ¥504',
|
||||
planSummary: '围绕晨间照护、生命体征监测和风险提醒开展服务。'
|
||||
},
|
||||
{
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
planTitle: '慢病随访连续方案',
|
||||
serviceFrequency: '每周 2 次',
|
||||
serviceCycle: '2026-05-13 至 2026-05-27',
|
||||
executorAdvice: '执行人员需同步上传血压血糖记录并完成家属宣教。',
|
||||
billingSummary: '随访服务 ¥128/次,计划总额 ¥512',
|
||||
planSummary: '持续随访血压血糖、用药和饮食管理情况。'
|
||||
}
|
||||
]
|
||||
|
||||
const CONSUMER_ACCEPTANCE: Array<HomeServiceAcceptanceType> = [
|
||||
{
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
acceptanceStatus: 'waiting',
|
||||
acceptanceStatusText: '待验收',
|
||||
rating: 5,
|
||||
feedback: '护理员按时到达,服务过程清晰,老人状态稳定。',
|
||||
tags: ['准时上门', '沟通清楚', '动作规范']
|
||||
},
|
||||
{
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
acceptanceStatus: 'waiting',
|
||||
acceptanceStatusText: '待验收',
|
||||
rating: 5,
|
||||
feedback: '已查看记录,等待家属最终确认。',
|
||||
tags: ['记录完整', '态度耐心']
|
||||
}
|
||||
]
|
||||
|
||||
const ADMIN_RECTIFICATIONS: Array<HomeServiceRectificationType> = [
|
||||
{
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
issueSummary: '家属要求补充护理动作说明和现场照片留痕。',
|
||||
deadline: '2026-05-14 18:00',
|
||||
ownerName: '黄护理',
|
||||
status: 'pending',
|
||||
statusText: '待整改'
|
||||
},
|
||||
{
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
issueSummary: '记录完整,无需整改。',
|
||||
deadline: '2026-05-15 12:00',
|
||||
ownerName: '陈护理',
|
||||
status: 'closed',
|
||||
statusText: '已关闭'
|
||||
}
|
||||
]
|
||||
|
||||
const ADMIN_SETTLEMENTS: Array<HomeServiceSettlementType> = [
|
||||
{
|
||||
caseId: 'case-001',
|
||||
caseNo: 'HS202605130001',
|
||||
elderName: '李奶奶',
|
||||
serviceName: '基础上门护理',
|
||||
billingPeriod: '2026-05-14 至 2026-05-21',
|
||||
totalAmount: '¥504',
|
||||
insuranceAmount: '¥300',
|
||||
selfPayAmount: '¥204',
|
||||
archiveStatus: 'pending',
|
||||
archiveStatusText: '待归档'
|
||||
},
|
||||
{
|
||||
caseId: 'case-002',
|
||||
caseNo: 'HS202605130002',
|
||||
elderName: '张爷爷',
|
||||
serviceName: '慢病健康随访',
|
||||
billingPeriod: '2026-05-13 至 2026-05-27',
|
||||
totalAmount: '¥512',
|
||||
insuranceAmount: '¥256',
|
||||
selfPayAmount: '¥256',
|
||||
archiveStatus: 'pending',
|
||||
archiveStatusText: '待归档'
|
||||
}
|
||||
]
|
||||
|
||||
function delay(): Promise<boolean> {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve(true)
|
||||
}, 120)
|
||||
})
|
||||
}
|
||||
|
||||
function cloneCase(item: HomeServiceCaseType): HomeServiceCaseType {
|
||||
return {
|
||||
...item,
|
||||
timeline: item.timeline.map((log) => ({ ...log }))
|
||||
}
|
||||
}
|
||||
|
||||
function cloneTask(item: HomeServiceTaskType): HomeServiceTaskType {
|
||||
return {
|
||||
...item,
|
||||
timeline: item.timeline.map((log) => ({ ...log }))
|
||||
}
|
||||
}
|
||||
|
||||
function cloneAssessment(item: HomeServiceAssessmentType): HomeServiceAssessmentType {
|
||||
return {
|
||||
...item,
|
||||
requirementTags: item.requirementTags.slice(0)
|
||||
}
|
||||
}
|
||||
|
||||
function clonePlan(item: HomeServicePlanType): HomeServicePlanType {
|
||||
return {
|
||||
...item
|
||||
}
|
||||
}
|
||||
|
||||
function cloneAcceptance(item: HomeServiceAcceptanceType): HomeServiceAcceptanceType {
|
||||
return {
|
||||
...item,
|
||||
tags: item.tags.slice(0)
|
||||
}
|
||||
}
|
||||
|
||||
function cloneRectification(item: HomeServiceRectificationType): HomeServiceRectificationType {
|
||||
return {
|
||||
...item
|
||||
}
|
||||
}
|
||||
|
||||
function cloneSettlement(item: HomeServiceSettlementType): HomeServiceSettlementType {
|
||||
return {
|
||||
...item
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchHomeServiceCatalog(): Promise<Array<HomeServiceCatalogType>> {
|
||||
await delay()
|
||||
return SERVICE_CATALOG.map((item) => ({ ...item, tags: item.tags.slice(0) }))
|
||||
}
|
||||
|
||||
export async function fetchConsumerHomeServiceCases(): Promise<Array<HomeServiceCaseType>> {
|
||||
await delay()
|
||||
return CASE_STORE.map((item) => cloneCase(item))
|
||||
}
|
||||
|
||||
export async function fetchConsumerHomeServiceCaseDetail(caseId: string): Promise<HomeServiceCaseType | null> {
|
||||
await delay()
|
||||
const target = CASE_STORE.find((item) => item.id == caseId)
|
||||
return target == null ? null : cloneCase(target)
|
||||
}
|
||||
|
||||
export async function createHomeServiceApplication(draft: HomeServiceApplicationDraftType): Promise<HomeServiceCaseType> {
|
||||
await delay()
|
||||
const matchedService = SERVICE_CATALOG.find((item) => item.id == draft.serviceId)
|
||||
const created: HomeServiceCaseType = {
|
||||
id: 'case-' + String(CASE_STORE.length + 1).padStart(3, '0'),
|
||||
caseNo: 'HS20260513' + String(CASE_STORE.length + 1).padStart(4, '0'),
|
||||
status: 'submitted',
|
||||
statusText: '已提交',
|
||||
statusTone: 'primary',
|
||||
serviceName: draft.serviceName,
|
||||
serviceTime: draft.preferredTime,
|
||||
applicantName: draft.applicantName,
|
||||
elderName: draft.elderName,
|
||||
age: draft.age,
|
||||
phone: draft.phone,
|
||||
address: draft.address,
|
||||
summary: draft.demandSummary,
|
||||
currentStep: 1,
|
||||
totalSteps: 8,
|
||||
staffName: '待分配',
|
||||
staffPhone: '待分配',
|
||||
amount: matchedService != null ? matchedService.price : 0,
|
||||
timeline: [
|
||||
{
|
||||
id: 'new-1',
|
||||
title: '已提交申请',
|
||||
time: '2026-05-13 10:00',
|
||||
description: '系统已接收申请,等待受理。'
|
||||
}
|
||||
]
|
||||
}
|
||||
CASE_STORE.unshift(created)
|
||||
ADMIN_APPLICATIONS.unshift({
|
||||
id: 'admin-app-' + String(ADMIN_APPLICATIONS.length + 1).padStart(3, '0'),
|
||||
caseId: created.id,
|
||||
caseNo: created.caseNo,
|
||||
status: 'submitted',
|
||||
statusText: '已提交',
|
||||
statusTone: 'primary',
|
||||
elderName: created.elderName,
|
||||
serviceName: created.serviceName,
|
||||
preferredTime: created.serviceTime,
|
||||
assessmentResult: '待受理',
|
||||
dispatcherName: '待分配',
|
||||
staffName: '待分配'
|
||||
})
|
||||
return cloneCase(created)
|
||||
}
|
||||
|
||||
export async function fetchWorkerTasks(): Promise<Array<HomeServiceTaskType>> {
|
||||
await delay()
|
||||
return TASK_STORE.map((item) => cloneTask(item))
|
||||
}
|
||||
|
||||
export async function fetchWorkerTaskDetail(taskId: string): Promise<HomeServiceTaskType | null> {
|
||||
await delay()
|
||||
const target = TASK_STORE.find((item) => item.id == taskId)
|
||||
return target == null ? null : cloneTask(target)
|
||||
}
|
||||
|
||||
export async function advanceWorkerTask(taskId: string): Promise<HomeServiceTaskType | null> {
|
||||
await delay()
|
||||
const target = TASK_STORE.find((item) => item.id == taskId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (target.status == 'pending_visit') {
|
||||
target.status = 'serving'
|
||||
target.statusText = '服务中'
|
||||
target.statusTone = 'primary'
|
||||
target.checkInStatus = '已签到'
|
||||
target.recordSummary = '已完成签到,请按步骤填写服务记录。'
|
||||
target.actionText = '完成提交'
|
||||
target.timeline.unshift({
|
||||
id: 'tl-' + String(target.timeline.length + 1),
|
||||
title: '已到岗签到',
|
||||
time: '2026-05-13 14:55',
|
||||
description: '护理员已在服务地址完成签到。'
|
||||
})
|
||||
} else if (target.status == 'serving') {
|
||||
target.status = 'completed'
|
||||
target.statusText = '待验收'
|
||||
target.statusTone = 'success'
|
||||
target.recordSummary = '已提交执行记录与服务凭证,等待家属验收。'
|
||||
target.actionText = '已提交'
|
||||
target.timeline.unshift({
|
||||
id: 'tl-' + String(target.timeline.length + 1),
|
||||
title: '服务完成待验收',
|
||||
time: '2026-05-13 16:20',
|
||||
description: '服务记录和凭证已经提交。'
|
||||
})
|
||||
}
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == target.caseId)
|
||||
if (relatedCase != null) {
|
||||
if (target.status == 'serving') {
|
||||
relatedCase.status = 'in_service'
|
||||
relatedCase.statusText = '服务中'
|
||||
relatedCase.statusTone = 'primary'
|
||||
relatedCase.currentStep = 6
|
||||
relatedCase.staffName = target.staffName
|
||||
relatedCase.staffPhone = target.staffPhone
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-log-' + String(relatedCase.timeline.length + 1),
|
||||
title: '护理员已签到',
|
||||
time: '2026-05-13 14:55',
|
||||
description: '执行端已开始上门服务。'
|
||||
})
|
||||
} else if (target.status == 'completed') {
|
||||
relatedCase.status = 'pending_acceptance'
|
||||
relatedCase.statusText = '待验收'
|
||||
relatedCase.statusTone = 'success'
|
||||
relatedCase.currentStep = 7
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-log-' + String(relatedCase.timeline.length + 1),
|
||||
title: '执行完成待验收',
|
||||
time: '2026-05-13 16:20',
|
||||
description: '家属可查看记录并进行验收反馈。'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == target.caseId)
|
||||
if (relatedAdmin != null) {
|
||||
if (target.status == 'serving') {
|
||||
relatedAdmin.status = 'in_service'
|
||||
relatedAdmin.statusText = '服务中'
|
||||
relatedAdmin.statusTone = 'primary'
|
||||
relatedAdmin.staffName = target.staffName
|
||||
} else if (target.status == 'completed') {
|
||||
relatedAdmin.status = 'pending_acceptance'
|
||||
relatedAdmin.statusText = '待验收'
|
||||
relatedAdmin.statusTone = 'success'
|
||||
}
|
||||
}
|
||||
|
||||
return cloneTask(target)
|
||||
}
|
||||
|
||||
export async function submitWorkerCheckIn(taskId: string, note: string): Promise<HomeServiceTaskType | null> {
|
||||
await delay()
|
||||
const target = TASK_STORE.find((item) => item.id == taskId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (target.status == 'pending_visit') {
|
||||
target.status = 'serving'
|
||||
target.statusText = '服务中'
|
||||
target.statusTone = 'primary'
|
||||
target.checkInStatus = '已签到'
|
||||
target.recordSummary = note == '' ? '已完成签到,请继续填写服务记录。' : note
|
||||
target.actionText = '完成提交'
|
||||
target.timeline.unshift({
|
||||
id: 'checkin-' + String(target.timeline.length + 1),
|
||||
title: '到岗签到完成',
|
||||
time: '2026-05-13 14:40',
|
||||
description: note == '' ? '护理员已完成签到。' : note
|
||||
})
|
||||
}
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == target.caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.status = 'in_service'
|
||||
relatedCase.statusText = '服务中'
|
||||
relatedCase.statusTone = 'primary'
|
||||
relatedCase.currentStep = 6
|
||||
relatedCase.staffName = target.staffName
|
||||
relatedCase.staffPhone = target.staffPhone
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-checkin-' + String(relatedCase.timeline.length + 1),
|
||||
title: '执行人员已到岗',
|
||||
time: '2026-05-13 14:40',
|
||||
description: note == '' ? '已完成签到,开始执行服务。' : note
|
||||
})
|
||||
}
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == target.caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = 'in_service'
|
||||
relatedAdmin.statusText = '服务中'
|
||||
relatedAdmin.statusTone = 'primary'
|
||||
relatedAdmin.staffName = target.staffName
|
||||
}
|
||||
|
||||
return cloneTask(target)
|
||||
}
|
||||
|
||||
export async function submitWorkerServiceRecord(taskId: string, summary: string): Promise<HomeServiceTaskType | null> {
|
||||
await delay()
|
||||
const target = TASK_STORE.find((item) => item.id == taskId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.recordSummary = summary == '' ? target.recordSummary : summary
|
||||
target.timeline.unshift({
|
||||
id: 'record-' + String(target.timeline.length + 1),
|
||||
title: '服务记录已更新',
|
||||
time: '2026-05-13 15:30',
|
||||
description: summary == '' ? '已保存服务记录。' : summary
|
||||
})
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == target.caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.summary = summary == '' ? relatedCase.summary : summary
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-record-' + String(relatedCase.timeline.length + 1),
|
||||
title: '执行记录已回传',
|
||||
time: '2026-05-13 15:30',
|
||||
description: summary == '' ? '执行端已保存记录。' : summary
|
||||
})
|
||||
}
|
||||
|
||||
return cloneTask(target)
|
||||
}
|
||||
|
||||
export async function submitWorkerException(taskId: string, exceptionType: string, description: string): Promise<HomeServiceTaskType | null> {
|
||||
await delay()
|
||||
const target = TASK_STORE.find((item) => item.id == taskId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.status = 'exception'
|
||||
target.statusText = '异常上报'
|
||||
target.statusTone = 'warning'
|
||||
target.actionText = '已上报'
|
||||
target.timeline.unshift({
|
||||
id: 'exception-' + String(target.timeline.length + 1),
|
||||
title: '异常已上报',
|
||||
time: '2026-05-13 15:45',
|
||||
description: exceptionType + ':' + description
|
||||
})
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == target.caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.status = 'exception'
|
||||
relatedCase.statusText = '异常处理中'
|
||||
relatedCase.statusTone = 'warning'
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-exception-' + String(relatedCase.timeline.length + 1),
|
||||
title: '服务异常待处理',
|
||||
time: '2026-05-13 15:45',
|
||||
description: exceptionType + ':' + description
|
||||
})
|
||||
}
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == target.caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = 'exception'
|
||||
relatedAdmin.statusText = '异常处理中'
|
||||
relatedAdmin.statusTone = 'warning'
|
||||
}
|
||||
|
||||
return cloneTask(target)
|
||||
}
|
||||
|
||||
export async function fetchAdminAssessmentDetail(caseId: string): Promise<HomeServiceAssessmentType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_ASSESSMENTS.find((item) => item.caseId == caseId)
|
||||
return target == null ? null : cloneAssessment(target)
|
||||
}
|
||||
|
||||
export async function submitAdminAssessment(caseId: string, riskLevel: string, careLevel: string, assessmentSummary: string): Promise<HomeServiceAssessmentType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_ASSESSMENTS.find((item) => item.caseId == caseId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.riskLevel = riskLevel
|
||||
target.careLevel = careLevel
|
||||
target.assessmentSummary = assessmentSummary
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = 'pending_plan'
|
||||
relatedAdmin.statusText = '待方案'
|
||||
relatedAdmin.statusTone = 'primary'
|
||||
relatedAdmin.assessmentResult = careLevel + ' · ' + riskLevel
|
||||
}
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.currentStep = 2
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-assessment-' + String(relatedCase.timeline.length + 1),
|
||||
title: '上门评估完成',
|
||||
time: '2026-05-13 13:20',
|
||||
description: assessmentSummary
|
||||
})
|
||||
}
|
||||
|
||||
return cloneAssessment(target)
|
||||
}
|
||||
|
||||
export async function fetchAdminServicePlanDetail(caseId: string): Promise<HomeServicePlanType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_PLANS.find((item) => item.caseId == caseId)
|
||||
return target == null ? null : clonePlan(target)
|
||||
}
|
||||
|
||||
export async function submitAdminServicePlan(
|
||||
caseId: string,
|
||||
planTitle: string,
|
||||
serviceFrequency: string,
|
||||
serviceCycle: string,
|
||||
planSummary: string
|
||||
): Promise<HomeServicePlanType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_PLANS.find((item) => item.caseId == caseId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.planTitle = planTitle
|
||||
target.serviceFrequency = serviceFrequency
|
||||
target.serviceCycle = serviceCycle
|
||||
target.planSummary = planSummary
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = 'pending_dispatch'
|
||||
relatedAdmin.statusText = '待派单'
|
||||
relatedAdmin.statusTone = 'warning'
|
||||
relatedAdmin.assessmentResult = target.planTitle + ' · ' + target.serviceFrequency
|
||||
}
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.currentStep = 3
|
||||
relatedCase.status = 'pending_dispatch'
|
||||
relatedCase.statusText = '待派单'
|
||||
relatedCase.statusTone = 'warning'
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-plan-' + String(relatedCase.timeline.length + 1),
|
||||
title: '服务方案已生成',
|
||||
time: '2026-05-13 14:10',
|
||||
description: planSummary
|
||||
})
|
||||
}
|
||||
|
||||
return clonePlan(target)
|
||||
}
|
||||
|
||||
export async function fetchConsumerAcceptanceDetail(caseId: string): Promise<HomeServiceAcceptanceType | null> {
|
||||
await delay()
|
||||
const target = CONSUMER_ACCEPTANCE.find((item) => item.caseId == caseId)
|
||||
return target == null ? null : cloneAcceptance(target)
|
||||
}
|
||||
|
||||
export async function submitConsumerAcceptance(
|
||||
caseId: string,
|
||||
approved: boolean,
|
||||
rating: number,
|
||||
feedback: string,
|
||||
tags: Array<string>
|
||||
): Promise<HomeServiceAcceptanceType | null> {
|
||||
await delay()
|
||||
const target = CONSUMER_ACCEPTANCE.find((item) => item.caseId == caseId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.acceptanceStatus = approved ? 'approved' : 'rejected'
|
||||
target.acceptanceStatusText = approved ? '已验收' : '已退回'
|
||||
target.rating = rating
|
||||
target.feedback = feedback
|
||||
target.tags = tags.slice(0)
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.status = approved ? 'completed' : 'revision_required'
|
||||
relatedCase.statusText = approved ? '已完成' : '待整改'
|
||||
relatedCase.statusTone = approved ? 'success' : 'warning'
|
||||
relatedCase.currentStep = approved ? 8 : 7
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-accept-' + String(relatedCase.timeline.length + 1),
|
||||
title: approved ? '家属已验收' : '家属退回整改',
|
||||
time: '2026-05-13 17:10',
|
||||
description: feedback
|
||||
})
|
||||
}
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = approved ? 'completed' : 'revision_required'
|
||||
relatedAdmin.statusText = approved ? '已完成' : '待整改'
|
||||
relatedAdmin.statusTone = approved ? 'success' : 'warning'
|
||||
}
|
||||
|
||||
return cloneAcceptance(target)
|
||||
}
|
||||
|
||||
export async function fetchAdminRectificationDetail(caseId: string): Promise<HomeServiceRectificationType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_RECTIFICATIONS.find((item) => item.caseId == caseId)
|
||||
return target == null ? null : cloneRectification(target)
|
||||
}
|
||||
|
||||
export async function submitAdminRectification(caseId: string, issueSummary: string): Promise<HomeServiceRectificationType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_RECTIFICATIONS.find((item) => item.caseId == caseId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.issueSummary = issueSummary
|
||||
target.status = 'closed'
|
||||
target.statusText = '已关闭'
|
||||
|
||||
const relatedAdmin = ADMIN_APPLICATIONS.find((item) => item.caseId == caseId)
|
||||
if (relatedAdmin != null) {
|
||||
relatedAdmin.status = 'pending_acceptance'
|
||||
relatedAdmin.statusText = '待复验收'
|
||||
relatedAdmin.statusTone = 'primary'
|
||||
}
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.status = 'pending_acceptance'
|
||||
relatedCase.statusText = '待复验收'
|
||||
relatedCase.statusTone = 'primary'
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-rectification-' + String(relatedCase.timeline.length + 1),
|
||||
title: '整改处理完成',
|
||||
time: '2026-05-13 18:10',
|
||||
description: issueSummary
|
||||
})
|
||||
}
|
||||
|
||||
return cloneRectification(target)
|
||||
}
|
||||
|
||||
export async function fetchAdminSettlementDetail(caseId: string): Promise<HomeServiceSettlementType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_SETTLEMENTS.find((item) => item.caseId == caseId)
|
||||
return target == null ? null : cloneSettlement(target)
|
||||
}
|
||||
|
||||
export async function submitAdminSettlementArchive(caseId: string): Promise<HomeServiceSettlementType | null> {
|
||||
await delay()
|
||||
const target = ADMIN_SETTLEMENTS.find((item) => item.caseId == caseId)
|
||||
if (target == null) {
|
||||
return null
|
||||
}
|
||||
|
||||
target.archiveStatus = 'archived'
|
||||
target.archiveStatusText = '已归档'
|
||||
|
||||
const relatedCase = CASE_STORE.find((item) => item.id == caseId)
|
||||
if (relatedCase != null) {
|
||||
relatedCase.timeline.unshift({
|
||||
id: 'case-settlement-' + String(relatedCase.timeline.length + 1),
|
||||
title: '结算归档完成',
|
||||
time: '2026-05-13 18:30',
|
||||
description: '结算单和执行材料已完成归档。'
|
||||
})
|
||||
}
|
||||
|
||||
return cloneSettlement(target)
|
||||
}
|
||||
|
||||
export async function fetchAdminHomeServiceApplications(): Promise<Array<HomeServiceAdminApplicationType>> {
|
||||
await delay()
|
||||
return ADMIN_APPLICATIONS.map((item) => ({ ...item }))
|
||||
}
|
||||
|
||||
export async function fetchAdminHomeServiceOverview(): Promise<Array<HomeServiceOverviewCardType>> {
|
||||
await delay()
|
||||
return ADMIN_OVERVIEW.map((item) => ({ ...item }))
|
||||
}
|
||||
Reference in New Issue
Block a user