feat(P19AI1-3): 前端AI智能建议卡片挂件注入报销/采购/资产详情

这个提交包含在:
2026-03-10 14:20:59 +08:00
父节点 6f534e9a3c
当前提交 67237badf1
共修改 6 个文件,包含 355 行新增和 0 行删除
+79
查看文件
@@ -0,0 +1,79 @@
import { apiRequestData } from "./http";
export type AiStatusResponse = {
enabled: boolean;
envEnabled: boolean;
featureFlag: {
key: string;
effectiveEnabled: boolean;
effectiveReason: string;
};
provider: {
type: string;
model: string | null;
};
permissions: {
canAccess: boolean;
};
};
export type AiRiskHint = {
level: "low" | "medium" | "high";
code: string;
title: string;
detail: string;
};
export type AiNextAction = {
code: string;
label: string;
reason: string;
};
export type AiSuggestionResponse = {
targetType: "reimbursement" | "purchase_request" | "asset_card";
targetId: string;
summary: string;
riskHints: AiRiskHint[];
nextActions: AiNextAction[];
sourceSnapshot: Record<string, unknown>;
providerMeta: {
provider: "mock" | "http" | string;
model: string | null;
promptHash: string;
tokenUsage: {
promptTokens: number | null;
completionTokens: number | null;
totalTokens: number | null;
};
};
generatedAt: string;
};
export async function fetchAiStatus() {
return apiRequestData<AiStatusResponse>("/api/ai/status");
}
export async function fetchReimbursementSuggestion(reimbursementId: string) {
return apiRequestData<AiSuggestionResponse>(`/api/ai/suggestions/reimbursements/${reimbursementId}`, {
method: "POST",
body: JSON.stringify({}),
});
}
export async function fetchPurchaseSuggestion(purchaseRequestId: string) {
return apiRequestData<AiSuggestionResponse>(
`/api/ai/suggestions/purchase-requests/${purchaseRequestId}`,
{
method: "POST",
body: JSON.stringify({}),
},
);
}
export async function fetchAssetSuggestion(assetId: string) {
return apiRequestData<AiSuggestionResponse>(`/api/ai/suggestions/assets/${assetId}`, {
method: "POST",
body: JSON.stringify({}),
});
}