70 行
1.9 KiB
TypeScript
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),
|
|
});
|
|
}
|