feat(M08-B): 补任务详情导出
This commit is contained in:
@@ -394,6 +394,9 @@
|
||||
<el-empty v-else description="暂无保洁照片" :image-size="80" />
|
||||
</div>
|
||||
<template #footer>
|
||||
<el-button :icon="Download" :disabled="!detailDialog.task" @click="exportTaskDetail">
|
||||
导出详情
|
||||
</el-button>
|
||||
<el-button @click="detailDialog.open = false">关闭</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
@@ -697,6 +700,43 @@ function exportTasks() {
|
||||
]);
|
||||
}
|
||||
|
||||
function exportTaskDetail() {
|
||||
const task = detailDialog.task;
|
||||
if (!task) return;
|
||||
downloadCsv(`cleaning-task-detail-${task.taskNo}-${Date.now()}.csv`, [
|
||||
['类别', '字段', '值'],
|
||||
['task', '任务号', task.taskNo],
|
||||
['task', '状态', task.status],
|
||||
['task', '门店', task.storeName],
|
||||
['task', '房间', task.roomName || task.roomNo],
|
||||
['task', '订单号', task.orderNo || ''],
|
||||
['task', '保洁员ID', task.cleanerUserId || ''],
|
||||
['task', '奖励金额', money(task.rewardCents)],
|
||||
['task', '照片数', String(task.photoUrls?.length || 0)],
|
||||
['task', '领取时间', shortDate(task.claimedAt)],
|
||||
['task', '开始时间', shortDate(task.startedAt)],
|
||||
['task', '提交时间', shortDate(task.submittedAt)],
|
||||
['task', '完成时间', shortDate(task.completedAt)],
|
||||
['task', '保洁要求', task.requirement || ''],
|
||||
['task', '驳回原因', task.rejectReason || ''],
|
||||
...detailDialog.members.map((member) => [
|
||||
'member',
|
||||
`${member.memberRole}:${member.userId}`,
|
||||
`${member.nickname || ''} ${money(member.rewardCents)} ${member.settledAt ? shortDate(member.settledAt) : '未结算'}`
|
||||
]),
|
||||
...detailDialog.events.map((event) => [
|
||||
'event',
|
||||
`${event.action}:${shortDate(event.createdAt)}`,
|
||||
`${compactText(event.fromStatus)} -> ${event.toStatus} ${compactText(event.actorId)} ${compactText(event.note)}`
|
||||
]),
|
||||
...task.photoUrls.map((url, index) => [
|
||||
'photo',
|
||||
`photo_${index + 1}`,
|
||||
url
|
||||
])
|
||||
]);
|
||||
}
|
||||
|
||||
function downloadCsv(filename: string, rows: string[][]) {
|
||||
const content = rows.map((row) => row.map(csvCell).join(',')).join('\r\n');
|
||||
const blob = new Blob([`\uFEFF${content}`], { type: 'text/csv;charset=utf-8' });
|
||||
|
||||
Reference in New Issue
Block a user