chore: sync release updates

This commit is contained in:
wushumin
2026-05-22 15:47:23 +08:00
parent be64b8e5b7
commit baef2fb64c
23 changed files with 879 additions and 131 deletions

View File

@@ -1,3 +1,4 @@
import axios from "axios";
import request from "./request";
import type { AdminSessionInfo } from "../utils/auth";
@@ -21,6 +22,59 @@ export interface AdminFileAsset {
mime_type?: string;
}
export type AdminUploadScene = "appraisal_evidence" | "zhongjian_report" | "warehouse_inbound_evidence" | "warehouse_return_packing";
export interface AdminDirectUploadPolicy {
enabled: boolean;
upload_url?: string;
form_data?: Record<string, string | number>;
asset?: AdminFileAsset;
max_size?: number;
max_size_text?: string;
expires_at?: string;
}
async function uploadFileToOss(uploadUrl: string, formData: Record<string, string | number>, file: File) {
const ossFormData = new FormData();
Object.entries(formData).forEach(([key, value]) => {
ossFormData.append(key, String(value));
});
ossFormData.append("file", file);
await axios.post(uploadUrl, ossFormData, { timeout: 300000 });
}
async function uploadManagedAdminFile(file: File, scene: AdminUploadScene, fallbackUrl: string, fallbackFields: Record<string, string | number> = {}) {
const policyResponse = await request.post("/api/admin/file-upload/direct-policy", {
upload_scene: scene,
original_name: file.name,
file_size: file.size,
mime_type: file.type,
}) as { code: number; message: string; data: AdminDirectUploadPolicy };
const policy = policyResponse.data;
if (!policy.enabled) {
const formData = new FormData();
formData.append("file", file);
formData.append("upload_scene", scene);
Object.entries(fallbackFields).forEach(([key, value]) => {
formData.append(key, String(value));
});
return request.post(fallbackUrl, formData, {
headers: {
"Content-Type": "multipart/form-data",
},
}) as Promise<{ code: number; message: string; data: AdminFileAsset }>;
}
if (!policy.upload_url || !policy.form_data || !policy.asset) {
throw new Error("OSS 上传签名无效,请稍后重试");
}
await uploadFileToOss(policy.upload_url, policy.form_data, file);
return { code: 0, message: "ok", data: policy.asset };
}
export interface AdminTransferFlowSummary {
id: number;
internal_tag_no: string;
@@ -1800,24 +1854,12 @@ export const adminApi = {
};
}>;
},
uploadAppraisalEvidenceFile(file: File) {
const formData = new FormData();
formData.append("file", file);
return request.post("/api/admin/appraisal-task/evidence/upload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
}) as Promise<{
uploadAppraisalEvidenceFile(file: File, scene: AdminUploadScene = "appraisal_evidence", taskId?: number) {
const fallbackFields: Record<string, string | number> = taskId ? { task_id: taskId } : {};
return uploadManagedAdminFile(file, scene, "/api/admin/appraisal-task/evidence/upload", fallbackFields) as Promise<{
code: number;
message: string;
data: {
file_id: string;
file_url: string;
thumbnail_url: string;
name?: string;
file_type?: string;
mime_type?: string;
};
data: AdminFileAsset;
}>;
},
deleteAppraisalEvidenceFile(fileUrl: string) {
@@ -1888,14 +1930,15 @@ export const adminApi = {
internal_tag_no: internalTagNo,
}) as Promise<{ code: number; message: string; data: AdminWarehouseWorkbenchContext }>;
},
uploadWarehouseInboundEvidenceFile(file: File) {
return uploadManagedAdminFile(file, "warehouse_inbound_evidence", "/api/admin/warehouse-workbench/inbound/evidence/upload") as Promise<{
code: number;
message: string;
data: AdminFileAsset;
}>;
},
uploadWarehouseReturnPackingFile(file: File) {
const formData = new FormData();
formData.append("file", file);
return request.post("/api/admin/warehouse-workbench/return/packing/upload", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
}) as Promise<{
return uploadManagedAdminFile(file, "warehouse_return_packing", "/api/admin/warehouse-workbench/return/packing/upload") as Promise<{
code: number;
message: string;
data: AdminFileAsset;