safety-eval-service-frontend/src/api/qualFiling/index.js

307 lines
12 KiB
JavaScript
Raw Normal View History

2026-07-01 10:10:11 +08:00
/** 资质备案:接口定义与前后端字段适配 */
2026-06-30 17:32:29 +08:00
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
2026-07-01 10:10:11 +08:00
import { fromPageResponse, fromSingleResponse, toPageQuery } from "../enterpriseInfo/adapter";
2026-06-30 17:32:29 +08:00
import { apiGet, apiPost, apiPostDelete, safeAction, safePageResult } from "../enterpriseInfo/http";
2026-07-01 10:10:11 +08:00
import { asId, normalizeQueryIds } from "../enterpriseInfo/idUtil";
import { formatDate, toApiDate, toDayjs } from "../../utils/dateFormat";
import { parseUploadFileList, resolveUploadFileId } from "../../utils/mockUpload";
// ─── 工具 ───
2026-06-30 17:32:29 +08:00
const APPLY_TYPE_APPLICATION = 1;
2026-07-01 10:10:11 +08:00
// ─── 字段映射:列表行 ───
export function toFilingListRow(data = {}) {
return {
id: asId(data.id),
filingTerritoryCode: data.filingTerritoryCode,
filingTerritoryName: data.filingTerritoryName,
filingUnitName: data.filingUnitName,
filingNo: data.filingNo || (data.id ? String(data.id) : ""),
businessScope: data.businessScope,
filingStatusCode: data.filingStatusCode,
filingStatusName: data.filingStatusName,
applyTypeCode: data.applyTypeCode,
applyTypeName: data.applyTypeName,
changeCount: Number(data.changeCount ?? 0),
originFilingId: asId(data.originFilingId),
rejectReason: data.rejectReason,
submitTime: formatDate(data.submitTime),
approveTime: formatDate(data.approveTime),
};
}
export function fromFilingBasicForm(values = {}) {
const territoryName = values.filingTerritoryName || values.filingTerritoryCode;
const unitTypeName = values.filingUnitTypeName || values.filingUnitTypeCode;
return normalizeQueryIds({
id: asId(values.id),
businessScope: values.businessScope,
filingTerritoryCode: territoryName,
filingTerritoryName: territoryName,
filingUnitName: values.filingUnitName,
filingUnitTypeCode: unitTypeName,
filingUnitTypeName: unitTypeName,
filingNo: values.filingNo,
registerAddress: values.registerAddress,
officeAddress: values.officeAddress,
creditCode: values.creditCode,
qualCertNo: values.qualCertNo,
legalPersonPhone: values.legalPersonPhone,
contactPhone: values.contactPhone,
infoDisclosureUrl: values.infoDisclosureUrl,
fixedAssetAmount: values.fixedAssetAmount,
workplaceArea: values.workplaceArea,
archiveRoomArea: values.archiveRoomArea,
fulltimeEvaluatorCount: values.fulltimeEvaluatorCount,
registeredEngineerCount: values.registeredEngineerCount,
unitIntro: values.unitIntro,
attachmentUrl: values.attachmentUrl,
});
}
// ─── 字段映射:详情 ───
export function toFilingDetail(data = {}) {
return {
2026-07-03 14:47:36 +08:00
...data,
2026-07-02 16:58:07 +08:00
materials: (data.materials || []),
2026-07-01 10:10:11 +08:00
commitment: data.commitment ? toFilingCommitmentForm(data.commitment, data.filingUnitName) : null,
personnelList: (data.personnelList || []).map(toFilingPersonnelRow),
equipmentList: (data.equipmentList || []).map(toFilingEquipmentRow),
};
}
// ─── 字段映射:承诺书 ───
export function parseCommitmentNames(content = "", filingUnitName = "") {
const withComma = String(content).match(/本人是(.+?),是(.+?)法定代表人/);
if (withComma) {
return {
legalRepName: withComma[1]?.trim() || "",
filingUnitName: withComma[2]?.trim() || filingUnitName || "",
};
}
const legacy = String(content).match(/本人是(.+?)是(.+?)法定代表人/);
return {
legalRepName: legacy?.[1]?.trim() || "",
filingUnitName: legacy?.[2]?.trim() || filingUnitName || "",
};
}
export function toFilingCommitmentForm(data = {}, filingUnitName = "") {
const parsed = parseCommitmentNames(data.commitmentContent, filingUnitName);
const legalRepPersonnelId = data.legalRepPersonnelId ? String(asId(data.legalRepPersonnelId)) : "";
return {
id: asId(data.id),
filingId: asId(data.filingId),
commitmentContent: data.commitmentContent,
legalRepPersonnelId,
legalRepName: data.legalRepName || parsed.legalRepName,
filingUnitName: parsed.filingUnitName || filingUnitName,
legalRepSignatureUrl: data.legalRepSignatureUrl,
signDate: toDayjs(data.signDate),
signatureFiles: parseUploadFileList(data.legalRepSignatureUrl, "电子签名.jpg"),
};
}
export function fromFilingCommitmentForm(values = {}, filingId) {
const personnelId = asId(values.legalRepPersonnelId);
return {
id: asId(values.id),
filingId: asId(filingId),
commitmentContent: values.commitmentContent,
legalRepSignatureUrl: values.legalRepSignatureUrl,
signDate: toApiDate(values.signDate),
legalRepPersonnelId: personnelId || null,
legalRepName: values.legalRepName || "",
};
}
// ─── 字段映射:人员 / 装备 ───
export function toFilingPersonnelRow(data = {}) {
return {
id: asId(data.id),
filingId: asId(data.filingId),
sourcePersonnelId: asId(data.sourcePersonnelId),
personName: data.personName,
personTypeName: data.personTypeName,
positionName: data.positionName,
titleName: data.titleName,
};
}
export function toFilingEquipmentRow(data = {}) {
return {
id: asId(data.id),
filingId: asId(data.filingId),
sourceEquipmentId: asId(data.sourceEquipmentId),
deviceName: data.deviceName,
deviceModel: data.deviceModel,
manufacturer: data.manufacturer,
calibrationReportUrl: data.calibrationReportUrl,
};
}
// ─── 字段映射:变更历史 ───
export function toChangeHistory(data = {}) {
return {
changeCount: Number(data.changeCount ?? 0),
records: (data.records || []).map((item, index) => ({
id: asId(item.id),
index: index + 1,
changeItemName: item.changeItemName,
changeTime: formatDate(item.changeTime),
operatorName: item.operatorName,
})),
};
}
2026-07-03 15:24:20 +08:00
2026-07-01 10:10:11 +08:00
// ═══════════════════════════════════════════════════
// 接口 Action
// ═══════════════════════════════════════════════════
2026-06-30 17:32:29 +08:00
export async function fetchQualFilingDetail(id) {
2026-07-02 14:51:26 +08:00
const res = await apiGet("/safetyEval/qual-filing/detail", { id: asId(id) });
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingDetail);
}
2026-07-03 14:47:36 +08:00
export async function fetchQualChangeDetail(id) {
const res = await apiGet("/safetyEval/qual-filing-change/detail", { id: asId(id) });
return fromSingleResponse(res, toFilingDetail);
}
2026-06-30 17:32:29 +08:00
export async function fetchQualFilingChangeHistory(originFilingId) {
2026-07-02 14:51:26 +08:00
const res = await apiGet("/safetyEval/qual-filing-change/history", {
2026-06-30 17:32:29 +08:00
originFilingId: asId(originFilingId),
});
return fromSingleResponse(res, toChangeHistory);
}
export const qualFilingPage = declareRequest("qualFilingLoading", safePageResult(async (params) => {
2026-07-03 15:24:20 +08:00
const res = await apiGet("/safetyEval/qual-filing/page", params);
2026-06-30 17:32:29 +08:00
return fromPageResponse(res, toFilingListRow);
}));
export const qualFilingFiledPage = declareRequest("qualFilingLoading", safePageResult(async (params) => {
2026-07-03 15:24:20 +08:00
const res = await apiGet("/safetyEval/qual-filing/filed/page", params);
2026-06-30 17:32:29 +08:00
return fromPageResponse(res, toFilingListRow);
}));
export const qualFilingChangePage = declareRequest("qualFilingLoading", safePageResult(async (params) => {
2026-07-03 15:24:20 +08:00
const res = await apiGet("/safetyEval/qual-filing-change/org/page", params);
2026-06-30 17:32:29 +08:00
return fromPageResponse(res, toFilingListRow);
}));
export const qualFilingDraft = declareRequest("qualFilingLoading", safeAction(async () => {
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing/draft?applyTypeCode=1", {});
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingListRow);
}));
export const qualFilingFiledDraft = declareRequest("qualFilingLoading", safeAction(async () => {
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing/filed/draft", {});
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingListRow);
}));
export const qualFilingSaveDraft = declareRequest("qualFilingLoading", safeAction(async (values) => {
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing/save-draft", fromFilingBasicForm(values));
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingListRow);
}));
export const qualFilingSubmit = declareRequest("qualFilingLoading", safeAction(async ({ id }) => {
2026-07-02 14:51:26 +08:00
const res = await apiPost(`/safetyEval/qual-filing/submit?id=${encodeURIComponent(asId(id))}`, {});
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingListRow);
}));
export const qualFilingDelete = declareRequest("qualFilingLoading", safeAction(async ({ id }) => {
2026-07-02 14:51:26 +08:00
return apiPostDelete("/safetyEval/qual-filing/delete", id);
2026-06-30 17:32:29 +08:00
}));
export const qualFilingMaterialInitTemplate = declareRequest("qualFilingLoading", safeAction(async ({ filingId }) => {
2026-07-02 14:51:26 +08:00
return apiPost(`/safetyEval/qual-filing-material/init-template?filingId=${encodeURIComponent(asId(filingId))}`, {});
2026-06-30 17:32:29 +08:00
}));
export const qualFilingMaterialUpload = declareRequest("qualFilingLoading", safeAction(async ({ id, attachmentUrl, files }) => {
const url = attachmentUrl || resolveUploadFileId(files);
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-material/upload", { id: asId(id), attachmentUrl: url });
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res);
}));
export const qualFilingUploadAttachment = declareRequest("qualFilingLoading", safeAction(async ({ id, attachmentUrl, files }) => {
const url = attachmentUrl || resolveUploadFileId(files);
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing/upload-attachment", { id: asId(id), attachmentUrl: url });
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res, toFilingListRow);
}));
export const qualFilingCommitmentSaveOrUpdate = declareRequest("qualFilingLoading", safeAction(async (values) => {
const payload = fromFilingCommitmentForm(values, values.filingId);
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-commitment/save-or-update", payload);
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res);
}));
export const qualFilingCommitmentUploadSignature = declareRequest("qualFilingLoading", safeAction(async ({ id, attachmentUrl, files }) => {
const url = attachmentUrl || resolveUploadFileId(files);
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-commitment/upload-signature", { id: asId(id), attachmentUrl: url });
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res);
}));
export const qualFilingPersonnelBatchAdd = declareRequest("qualFilingLoading", safeAction(async ({ filingId, sourcePersonnelIds }) => {
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-personnel/batch-add-from-org", {
2026-06-30 17:32:29 +08:00
filingId: asId(filingId),
sourcePersonnelIds: (sourcePersonnelIds || []).map(asId),
});
return res;
}));
export const qualFilingPersonnelDelete = declareRequest("qualFilingLoading", safeAction(async ({ id }) => {
2026-07-02 14:51:26 +08:00
return apiPostDelete("/safetyEval/qual-filing-personnel/delete", id);
2026-06-30 17:32:29 +08:00
}));
export const qualFilingEquipmentBatchAdd = declareRequest("qualFilingLoading", safeAction(async ({ filingId, sourceEquipmentIds }) => {
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-equipment/batch-add-from-org", {
2026-06-30 17:32:29 +08:00
filingId: asId(filingId),
sourceEquipmentIds: (sourceEquipmentIds || []).map(asId),
});
return res;
}));
export const qualFilingEquipmentUploadCalibration = declareRequest("qualFilingLoading", safeAction(async ({ id, attachmentUrl, files }) => {
const url = attachmentUrl || resolveUploadFileId(files);
2026-07-02 14:51:26 +08:00
const res = await apiPost("/safetyEval/qual-filing-equipment/upload-calibration", { id: asId(id), attachmentUrl: url });
2026-06-30 17:32:29 +08:00
return fromSingleResponse(res);
}));
export const qualFilingEquipmentDelete = declareRequest("qualFilingLoading", safeAction(async ({ id }) => {
2026-07-02 14:51:26 +08:00
return apiPostDelete("/safetyEval/qual-filing-equipment/delete", id);
2026-06-30 17:32:29 +08:00
}));
2026-07-03 11:31:51 +08:00
2026-06-30 17:32:29 +08:00
export const qualFilingChangeSubmit = declareRequest("qualFilingLoading", safeAction(async ({ draftFilingId }) => {
2026-07-02 14:51:26 +08:00
return apiPost("/safetyEval/qual-filing-change/submit", { draftFilingId: asId(draftFilingId) });
2026-06-30 17:32:29 +08:00
}));
2026-07-02 11:00:31 +08:00
export const submitQualFiling = declareRequest(
"qualFilingSubmitLoading",
2026-07-02 14:51:26 +08:00
"Post > @/safetyEval/qual-filing/aggregationSaveOrEdit",
2026-07-02 11:00:31 +08:00
);
2026-07-02 17:50:43 +08:00
2026-07-03 14:47:36 +08:00
export const submitQualFilingChange = declareRequest(
"qualFilingSubmitLoading",
"Post > @/safetyEval/qual-filing-change/aggregationSaveOrEdit",
);
2026-07-02 17:50:43 +08:00