文件
hyb-oa/client/src/api/approvalRules.ts
T
wangsli 35948729cf
ci-e2e / e2e (push) Canceled after 0s
ci-minimal / check-minimal (push) Canceled after 0s
修正CEO报销财务兜底与部署护栏(07-28-ceo-finance-fallback)
2026-07-28 13:42:48 +08:00

70 行
1.9 KiB
TypeScript

import { apiRequestData } from "./http";
export type ApprovalRoleCode =
| "employee"
| "manager"
| "ceo"
| "finance"
| "finance_mgr"
| "administration"
| "hr";
export type ApprovalOwnerSelfFallbackRoleCode = "finance" | "finance_mgr";
export type ApprovalRule = {
id: string;
name: string;
minAmount: string;
maxAmount: string | null;
level1Role: ApprovalRoleCode;
level2Role: ApprovalRoleCode | null;
level3Role: ApprovalRoleCode | null;
ownerSelfFallbackRole: ApprovalOwnerSelfFallbackRoleCode | null;
enabled: boolean;
priority: number;
createdAt: string | null;
updatedAt: string | null;
};
export type ApprovalRulesListResponse = {
enabled: boolean | null;
items: ApprovalRule[];
};
export async function fetchApprovalRules(params?: { enabled?: boolean }) {
const qs = new URLSearchParams();
if (params?.enabled != null) {
qs.set("enabled", params.enabled ? "true" : "false");
}
const query = qs.toString();
return apiRequestData<ApprovalRulesListResponse>(`/api/approval-rules${query ? `?${query}` : ""}`);
}
export type ApprovalRuleCreatePayload = {
name: string;
minAmount: string;
maxAmount: string | null;
level1Role: ApprovalRoleCode;
level2Role: ApprovalRoleCode | null;
level3Role: ApprovalRoleCode | null;
ownerSelfFallbackRole: ApprovalOwnerSelfFallbackRoleCode | null;
enabled?: boolean;
priority?: number;
};
export async function createApprovalRule(payload: ApprovalRuleCreatePayload) {
return apiRequestData<ApprovalRule>("/api/approval-rules", {
method: "POST",
body: JSON.stringify(payload),
});
}
export type ApprovalRulePatchPayload = Partial<ApprovalRuleCreatePayload>;
export async function patchApprovalRule(approvalRuleId: string, payload: ApprovalRulePatchPayload) {
return apiRequestData<ApprovalRule>(`/api/approval-rules/${approvalRuleId}`, {
method: "PATCH",
body: JSON.stringify(payload),
});
}