feat(client): 完成 P3 业务页联动闭环(D6/D8/D10/D11)

- 待办:列表/详情 + approve/reject/return/transfer(D6)
- 报销:列表/详情 + create/submit/withdraw/pay(D8)
- 票据:列表/上传/OCR轮询/绑定/预览(D10)
- 统一:Api types + 错误映射 + react-query缓存失效(D11)
这个提交包含在:
2026-02-08 23:08:41 +08:00
父节点 65e7b37ebd
当前提交 7a6f5573a6
共修改 16 个文件,包含 1762 行新增和 31 行删除
+62
查看文件
@@ -0,0 +1,62 @@
export function mapApiErrorMessage(
code: string,
details?: Record<string, unknown>,
fallbackMessage?: string,
) {
if (code === "AUTH_001") {
return "账号或密码错误,请检查后重试。";
}
if (code === "AUTH_004") {
return "登录状态失效,请重新登录。";
}
if (code === "PERM_001") {
return "当前账号无权限执行该操作。";
}
if (code === "PERM_002") {
return "你不是当前任务处理人,无法执行该操作。";
}
if (code === "SYS_404") {
return "目标数据不存在或已被删除。";
}
if (code === "VALID_002") {
return "输入内容长度不足,请补充后再提交。";
}
if (code === "VALID_001") {
if (details?.payment === "already_paid_conflict") {
return "该报销单已支付且付款信息冲突,请刷新后确认。";
}
if (details?.status === "invalid_pay_status") {
return "当前状态不允许执行付款。";
}
if (details?.transfer === "chain_limit_exceeded") {
return "当前任务转审次数已达上限。";
}
if (details?.transfer === "same_assignee_not_allowed") {
return "不能将任务转审给自己。";
}
if (details?.toApproverId === "target_not_approver") {
return "目标人员不具备审批权限。";
}
if (details?.toApproverId === "invalid_target") {
return "目标审批人不存在或已停用。";
}
if (details?.task === "already_processed") {
return "该任务已被处理,请刷新列表。";
}
}
return fallbackMessage || "请求失败,请稍后重试。";
}