feat(P19AI1-3): 前端AI智能建议卡片挂件注入报销/采购/资产详情
这个提交包含在:
@@ -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({}),
|
||||
});
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户