feat(P25-2/P25-3/P26-2/P28-1/P24-2/P29-3): 落地内部OA够用版前端入口与运营页面

关联 Issue: P25-2, P25-3, P25-4, P26-2, P26-4, P28-1, P28-2, P28-3, P28-4, P24-2, P29-3
这个提交包含在:
2026-03-21 18:03:48 +08:00
父节点 e39e41287e
当前提交 9905c1c79d
共修改 44 个文件,包含 2029 行新增和 169 行删除
+12 -1
查看文件
@@ -1,4 +1,5 @@
import { apiRequestData } from "./http";
import type { PrecheckResponse, RiskFlag } from "./feeControl";
export type ReimbursementStatus =
| "draft"
@@ -113,6 +114,7 @@ export type ReimbursementDetail = {
assignee_role: string | null;
} | null;
} | null;
riskFlags: RiskFlag[];
items: ReimbursementItem[];
};
@@ -161,11 +163,13 @@ export type ReimbursementSubmitResponse = {
budget: {
budgetId: string;
budgetCode: string;
controlMode: "warn" | "block";
controlMode: "warn" | "block" | "manual_review";
usagePercent: number;
exceededThreshold: boolean;
exceededBudget: boolean;
} | null;
precheckDecision: "pass" | "warn" | "manual_review";
openedRiskFlagCount: number;
};
function toQueryString(query: Record<string, string | number | undefined>) {
@@ -203,6 +207,13 @@ export async function createReimbursement(payload: {
});
}
export async function precheckReimbursement(reimbursementId: string) {
return apiRequestData<PrecheckResponse>(`/api/reimbursements/${reimbursementId}/precheck`, {
method: "POST",
body: JSON.stringify({}),
});
}
export async function submitReimbursement(reimbursementId: string) {
return apiRequestData<ReimbursementSubmitResponse>(`/api/reimbursements/${reimbursementId}/submit`, {
method: "POST",