|
|
@@ -4,7 +4,7 @@
|
|
|
* - 后端 TableDataInfo(列表)和 R<T>(详情/提交) 由 request 解析后已剥离外层
|
|
|
* 所以这里直接拿到 data(即列表项数组 / 详情对象)
|
|
|
*/
|
|
|
-import type { InspectionListQuery, PunchSubmitPayload } from '@/types/inspection'
|
|
|
+import type { InspectionListQuery, InspectionTask, PunchSubmitPayload } from '@/types/inspection'
|
|
|
import { request, uploadFile } from '@/utils/request'
|
|
|
|
|
|
// ===== 列表分页响应(对应后端 TableDataInfo) =====
|
|
|
@@ -15,18 +15,68 @@ export interface PageResult<T> {
|
|
|
pageSize: number
|
|
|
}
|
|
|
|
|
|
+// ===== 后端 punchStatus(PENDING/PUNCHED/OVERDUE/FINISHED) → 前端 PENDING/DONE/EXPIRED =====
|
|
|
+function normalizePunchStatus(s: string): 'PENDING' | 'DONE' | 'EXPIRED' {
|
|
|
+ if (s === 'PUNCHED' || s === 'FINISHED' || s === 'DONE') return 'DONE'
|
|
|
+ if (s === 'OVERDUE' || s === 'EXPIRED') return 'EXPIRED'
|
|
|
+ return 'PENDING'
|
|
|
+}
|
|
|
+
|
|
|
+// ===== 后端 punchResult('0'/'1') → 前端 NORMAL/ABNORMAL =====
|
|
|
+function normalizePunchResult(r?: string | null): 'NORMAL' | 'ABNORMAL' | null {
|
|
|
+ if (r === '0') return 'NORMAL'
|
|
|
+ if (r === '1') return 'ABNORMAL'
|
|
|
+ return null
|
|
|
+}
|
|
|
+
|
|
|
+// ===== 后端 punchType → 前端 punchTypeName =====
|
|
|
+function punchTypeName(t?: string | null): string {
|
|
|
+ if (t === 'SCAN') return '扫码打卡'
|
|
|
+ return '常规打卡'
|
|
|
+}
|
|
|
+
|
|
|
+// ===== 后端 VO → 前端 InspectionTask 字段映射 =====
|
|
|
+function mapRow(raw: any): InspectionTask {
|
|
|
+ return {
|
|
|
+ // 后端 Java Long 可能超过 JS Number 安全整数(2^53),保留原始字符串
|
|
|
+ id: raw.id,
|
|
|
+ taskCode: raw.taskCode || '',
|
|
|
+ taskName: raw.taskName || '',
|
|
|
+ inspectionType: raw.taskTypeName || raw.taskType || '',
|
|
|
+ inspectionTypeCode: raw.taskType || '',
|
|
|
+ punchType: (raw.punchType === 'SCAN' ? 'SCAN' : 'NORMAL') as InspectionTask['punchType'],
|
|
|
+ punchTypeName: punchTypeName(raw.punchType),
|
|
|
+ storeName: raw.storeName || '',
|
|
|
+ punchLocation: raw.location || '',
|
|
|
+ longitude: raw.lng != null ? Number(raw.lng) : undefined,
|
|
|
+ latitude: raw.lat != null ? Number(raw.lat) : undefined,
|
|
|
+ completeTime: raw.planEndTime || '',
|
|
|
+ actualPunchTime: raw.punchTime,
|
|
|
+ punchStatus: normalizePunchStatus(raw.punchStatus || 'PENDING'),
|
|
|
+ punchResult: normalizePunchResult(raw.punchResult),
|
|
|
+ needPhoto: false,
|
|
|
+ items: Array.isArray(raw.items) ? raw.items : []
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// ===== 巡检任务列表 =====
|
|
|
// 后端从 Sa-Token 取当前登录用户作为 inspectorId(已移除前端传参)
|
|
|
-export function listInspectionTasks(query: InspectionListQuery): Promise<PageResult<any>> {
|
|
|
+export function listInspectionTasks(query: InspectionListQuery): Promise<PageResult<InspectionTask>> {
|
|
|
return request<PageResult<any>>({
|
|
|
url: '/risk/inspectionTask/mobileList',
|
|
|
method: 'GET',
|
|
|
data: query
|
|
|
+ }).then((res: any) => {
|
|
|
+ const rows = (res?.rows ?? []) as any[]
|
|
|
+ return {
|
|
|
+ ...res,
|
|
|
+ rows: rows.map(mapRow)
|
|
|
+ } as PageResult<InspectionTask>
|
|
|
})
|
|
|
}
|
|
|
|
|
|
// ===== 任务详情(含巡检项目) =====
|
|
|
-export function getInspectionTaskDetail(id: number): Promise<any> {
|
|
|
+export function getInspectionTaskDetail(id: string | number): Promise<any> {
|
|
|
return request<any>({
|
|
|
url: `/risk/inspectionTask/mobileDetail/${id}`,
|
|
|
method: 'GET'
|