51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
export interface BurstLocationErrorNotice {
|
|
message: string;
|
|
description: string;
|
|
}
|
|
|
|
const DATA_GAP_PATTERN =
|
|
/^(爆管压力数据|正常压力数据|爆管流量数据|正常流量数据) 在时间窗内无有效模拟数据: (.+)$/;
|
|
|
|
const extractErrorDetail = (error: unknown): string => {
|
|
const candidate = error as {
|
|
message?: string;
|
|
response?: { data?: { detail?: unknown } };
|
|
};
|
|
const detail = candidate?.response?.data?.detail;
|
|
|
|
if (typeof detail === "string" && detail.trim()) {
|
|
return detail.trim();
|
|
}
|
|
if (typeof candidate?.message === "string" && candidate.message.trim()) {
|
|
return candidate.message.trim();
|
|
}
|
|
return "请求失败";
|
|
};
|
|
|
|
export const getBurstLocationErrorNotice = (
|
|
error: unknown,
|
|
): BurstLocationErrorNotice => {
|
|
const detail = extractErrorDetail(error);
|
|
const match = detail.match(DATA_GAP_PATTERN);
|
|
|
|
if (!match) {
|
|
return {
|
|
message: "提交分析失败",
|
|
description: detail,
|
|
};
|
|
}
|
|
|
|
const [, dataLabel, missingIds] = match;
|
|
if (dataLabel.startsWith("正常")) {
|
|
return {
|
|
message: "缺少正常模拟基线",
|
|
description: `所选方案时间窗内没有可用的实时模拟${dataLabel},缺失点位:${missingIds}。请选择已有正常基线覆盖的方案或时间窗,系统不会自动补数据。`,
|
|
};
|
|
}
|
|
|
|
return {
|
|
message: "所选方案数据不完整",
|
|
description: `所选方案时间窗内没有可用的${dataLabel},缺失点位:${missingIds}。请选择数据完整的模拟方案。`,
|
|
};
|
|
};
|