spring
6 天以前 4d9eac00f0c1613d6279fbc75affd9ce31df5c6d
src/api/timeSensitiveTask.ts
@@ -24,9 +24,15 @@
  inspectorName: string;
}
export interface TimeSensitiveTaskStartForm extends TimeSensitiveTaskForm {
export interface TimeSensitiveTaskStartForm {
  id: number | string;
  initiatorName: string;
  initiateTime: string;
  setTemperature: number | string;
  agingDuration: number | string;
  machineName: string;
  furnaceInTime: string;
  inspectorName: string;
}
export interface TimeSensitiveCandidateQuery {
@@ -34,8 +40,15 @@
  size?: number;
  taskId: number | string;
  materialType: TimelinessMaterialType;
  categoryName?: string;
  model?: string;
  materialCode?: string;
}
export interface TimeSensitiveTaskItemInput {
  itemId: number | string;
  /** 单丝传“铁架号-铁牌序号”,绞线传数字序号。 */
  ironPlateNo: number | string;
}
export interface TimelinessInspectionDetailForm {
@@ -50,8 +63,8 @@
  timelinessInspectionId?: number | string;
}
/** 联调完成后改为 false 即可恢复下方真实接口。 */
export const USE_TIME_SENSITIVE_MOCK = true;
/** 本地演示开关;正常运行时始终请求与 PC 端一致的真实接口。 */
export const USE_TIME_SENSITIVE_MOCK = false;
const mockTasks: any[] = [
  {
@@ -197,6 +210,161 @@
  ],
};
const mockMaterialDetails: Record<string, Record<string, any>> = {
  "9101": {
    qualitySetTemperature: 180,
    qualitySetDuration: "2+4+1",
    confirmTime: "2026-09-04 08:35:00",
    confirmUserName: "张工",
    status: 0,
    ledgerNo: "SO2609010188",
    schedulingDetailNo: "LS-PC-260904-001",
    deviceCode: "LS006",
    clientName: "山东元旺电工科技有限公司",
    productionDate: "2026-09-04",
    groupTeam: "白班",
    groupTeamLeader: "王班长",
    productionNumber: 1,
    unit: "盘",
  },
  "9102": {
    qualitySetTemperature: 175,
    qualitySetDuration: "2+3+1",
    confirmTime: "2026-09-04 08:42:00",
    confirmUserName: "张工",
    status: 0,
    ledgerNo: "SO2609010192",
    schedulingDetailNo: "LS-PC-260904-002",
    deviceCode: "LS008",
    clientName: "华东电缆有限公司",
    productionDate: "2026-09-04",
    groupTeam: "白班",
    groupTeamLeader: "王班长",
    productionNumber: 1,
    unit: "盘",
  },
  "9301": {
    qualitySetTemperature: 180,
    qualitySetDuration: "2+4+1",
    confirmTime: "2026-09-05 09:15:00",
    confirmUserName: "李工",
    status: 0,
    ledgerNo: "SO2609050106",
    schedulingDetailNo: "LS-PC-260905-006",
    deviceCode: "LS003",
    clientName: "山东元旺电工科技有限公司",
    productionDate: "2026-09-05",
    groupTeam: "白班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    unit: "盘",
  },
  "9302": {
    qualitySetTemperature: 180,
    qualitySetDuration: "2+4+1",
    confirmTime: "2026-09-05 09:32:00",
    confirmUserName: "李工",
    status: 0,
    ledgerNo: "SO2609050112",
    schedulingDetailNo: "LS-PC-260905-007",
    deviceCode: "LS005",
    clientName: "华北线缆有限公司",
    productionDate: "2026-09-05",
    groupTeam: "白班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    unit: "盘",
  },
  "9501": {
    qualitySetTemperature: 180,
    qualitySetDuration: "2+4+1",
    confirmTime: "2026-09-03 10:20:00",
    confirmUserName: "刘工",
    status: 2,
    ledgerNo: "SO2609030088",
    schedulingDetailNo: "LS-PC-260903-003",
    deviceCode: "LS002",
    clientName: "鲁中电缆有限公司",
    productionDate: "2026-09-03",
    groupTeam: "中班",
    groupTeamLeader: "孙班长",
    productionNumber: 1,
    unit: "盘",
  },
  "9201": {
    qualitySetTemperature: 175,
    qualitySetDuration: "2+3+1",
    confirmTime: "2026-09-04 09:05:00",
    confirmUserName: "王工",
    status: 1,
    ledgerNo: "SO2609020116",
    schedulingDetailNo: "JX-PC-260904-001",
    deviceCode: "JX003",
    clientName: "华北电缆有限公司",
    productionDate: "2026-09-04",
    groupTeam: "中班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    productionWeight: 1180,
    unit: "盘",
  },
  "9202": {
    qualitySetTemperature: 175,
    qualitySetDuration: "2+3+1",
    confirmTime: "2026-09-04 09:12:00",
    confirmUserName: "王工",
    status: 1,
    ledgerNo: "SO2609020118",
    schedulingDetailNo: "JX-PC-260904-002",
    deviceCode: "JX004",
    clientName: "华北电缆有限公司",
    productionDate: "2026-09-04",
    groupTeam: "中班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    productionWeight: 1260,
    unit: "盘",
  },
  "9401": {
    qualitySetTemperature: 175,
    qualitySetDuration: "2+3+1",
    confirmTime: "2026-09-05 10:10:00",
    confirmUserName: "李工",
    status: 0,
    ledgerNo: "SO2609050216",
    schedulingDetailNo: "JX-PC-260905-002",
    deviceCode: "JX006",
    clientName: "华北电缆有限公司",
    productionDate: "2026-09-05",
    groupTeam: "中班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    productionWeight: 1380,
    unit: "盘",
  },
  "9402": {
    qualitySetTemperature: 175,
    qualitySetDuration: "2+3+1",
    confirmTime: "2026-09-05 10:22:00",
    confirmUserName: "李工",
    status: 0,
    ledgerNo: "SO2609050220",
    schedulingDetailNo: "JX-PC-260905-003",
    deviceCode: "JX007",
    clientName: "华南电缆有限公司",
    productionDate: "2026-09-05",
    groupTeam: "中班",
    groupTeamLeader: "赵班长",
    productionNumber: 1,
    productionWeight: 1460,
    unit: "盘",
  },
};
[...mockMaterialPool.单丝, ...mockMaterialPool.绞线].forEach((item) => {
  Object.assign(item, mockMaterialDetails[String(item.id)] || {});
});
const findMockMaterial = (id: number | string) =>
  [...mockMaterialPool.单丝, ...mockMaterialPool.绞线].find(
    (item) => String(item.id) === String(id)
@@ -207,10 +375,19 @@
  return item ? { ...item } : undefined;
};
const cloneMockMaterialWithIronPlate = (id: number | string, ironPlateNo: number | string) => {
  const item = cloneMockMaterial(id);
  return item ? { ...item, ironPlateNo } : undefined;
};
const mockItems: Record<string, any[]> = {
  "9001": [cloneMockMaterial(9101), cloneMockMaterial(9102)].filter(Boolean),
  "9002": [cloneMockMaterial(9201), cloneMockMaterial(9202)].filter(Boolean),
  "9003": [cloneMockMaterial(9501)].filter(Boolean),
  "9001": [cloneMockMaterialWithIronPlate(9101, 1), cloneMockMaterialWithIronPlate(9102, 2)].filter(
    Boolean
  ),
  "9002": [cloneMockMaterialWithIronPlate(9201, 1), cloneMockMaterialWithIronPlate(9202, 2)].filter(
    Boolean
  ),
  "9003": [cloneMockMaterialWithIronPlate(9501, 1)].filter(Boolean),
};
const mockInspections: Record<string, any[]> = {
@@ -376,7 +553,7 @@
    }
    return request<BaseResult<PageResult>>({
      url: "/timeSensitiveTask/queryPage",
      method: "GET",
      method: "POST",
      data: params,
    });
  },
@@ -387,8 +564,8 @@
    }
    return request<BaseResult<any>>({
      url: "/timeSensitiveTask/getDetailById",
      method: "GET",
      data: { id },
      method: "POST",
      data: id as any,
    });
  },
@@ -398,8 +575,8 @@
    }
    return request<BaseResult<any[]>>({
      url: "/timeSensitiveTask/getItems",
      method: "GET",
      data: { taskId },
      method: "POST",
      data: taskId as any,
    });
  },
@@ -468,8 +645,8 @@
    }
    return request<BaseResult<any>>({
      url: "/timeSensitiveTask/delete",
      method: "DELETE",
      data: { id },
      method: "POST",
      data: id as any,
    });
  },
@@ -507,8 +684,8 @@
    }
    return request<BaseResult<any>>({
      url: "/timeSensitiveTask/checkEnd",
      method: "GET",
      data: { id },
      method: "POST",
      data: id as any,
    });
  },
@@ -537,7 +714,9 @@
  queryCandidates(params: TimeSensitiveCandidateQuery) {
    if (USE_TIME_SENSITIVE_MOCK) {
      const existingIds = new Set(
        (mockItems[String(params.taskId)] || []).map((item) => String(item.id))
        Object.values(mockItems)
          .flat()
          .map((item) => String(item.id))
      );
      let rows = mockMaterialPool[params.materialType]
        .filter((item) => !existingIds.has(String(item.id)))
@@ -571,19 +750,25 @@
    }
    return request<BaseResult<PageResult>>({
      url: "/timeSensitiveTask/queryCandidates",
      method: "GET",
      method: "POST",
      data: params,
    });
  },
  addItems(data: { taskId: number | string; itemIds: Array<number | string> }) {
  addItems(data: {
    taskId: number | string;
    itemIds: Array<number | string>;
    items: TimeSensitiveTaskItemInput[];
  }) {
    if (USE_TIME_SENSITIVE_MOCK) {
      const key = String(data.taskId);
      mockItems[key] ||= [];
      const existingIds = new Set(mockItems[key].map((item) => String(item.id)));
      data.itemIds.forEach((id) => {
        const material = cloneMockMaterial(id);
        if (material && !existingIds.has(String(id))) mockItems[key].push(material);
      data.items.forEach(({ itemId, ironPlateNo }) => {
        const material = cloneMockMaterial(itemId);
        if (material && !existingIds.has(String(itemId))) {
          mockItems[key].push({ ...material, ironPlateNo });
        }
      });
      updateMockItemCount(data.taskId);
      const task = mockTasks.find((item) => String(item.id) === key);
@@ -593,10 +778,10 @@
        "新增明细",
        "待开始",
        "待开始",
        `新增 ${data.itemIds.length} 条时效明细`,
        `领用 ${data.itemIds.length} 条物料`,
        task?.initiatorName || "操作人"
      );
      return mockResult(true, "时效明细新增成功");
      return mockResult(true, "物料领用成功");
    }
    return request<BaseResult<any>>({
      url: "/timeSensitiveTask/addItems",
@@ -618,10 +803,10 @@
        "删除明细",
        "待开始",
        "待开始",
        `删除 ${data.itemIds.length} 条时效明细`,
        `删除 ${data.itemIds.length} 条领用物料`,
        task?.initiatorName || "操作人"
      );
      return mockResult(true, "时效明细删除成功");
      return mockResult(true, "领用物料删除成功");
    }
    return request<BaseResult<any>>({
      url: "/timeSensitiveTask/deleteItems",
@@ -646,6 +831,14 @@
    });
  },
  /** 与 PC 端 aging_rack_number 字典一致,用作单丝领用铁架号。 */
  getAgingRackNumbers() {
    return request<BaseResult<any[]>>({
      url: "/system/dict/data/type/aging_rack_number",
      method: "GET",
    });
  },
  getOperationRecords(recordId: number | string) {
    if (USE_TIME_SENSITIVE_MOCK) {
      return mockResult<any[]>(