Files
zsp-project/frontend/mock/zhongshangpeng.ts
2026-06-03 20:59:39 +08:00

266 lines
6.7 KiB
TypeScript
Executable File

import { defineFakeRoute } from "vite-plugin-fake-server/client";
// 模拟数据
const mockContractFiles = [
{
id: "1",
fileName: "上游合同-铜矿采购-2024-001.pdf",
fileType: "pdf",
fileSize: "2.3MB",
uploadTime: "2024-01-20",
folderId: "1",
contractNumber: "SC2024001",
companyName: "中尚鹏贸易有限公司",
commodity: "铜矿",
signDate: "2024-01-15",
contractType: "upstream"
},
{
id: "2",
fileName: "下游合同-铜材销售-DX2024005.pdf",
fileType: "pdf",
fileSize: "1.8MB",
uploadTime: "2024-01-25",
folderId: "2",
contractNumber: "DX2024005",
companyName: "华东制造有限公司",
commodity: "铜材",
signDate: "2024-01-20",
contractType: "downstream"
},
{
id: "3",
fileName: "外商合同-铁矿进口-FW2024003.pdf",
fileType: "pdf",
fileSize: "3.1MB",
uploadTime: "2024-02-12",
folderId: "3",
contractNumber: "FW2024003",
companyName: "澳大利亚矿业公司",
commodity: "铁矿",
signDate: "2024-02-10",
contractType: "foreign"
},
{
id: "4",
fileName: "物流协议-海运合同-WL2024008.pdf",
fileType: "pdf",
fileSize: "1.5MB",
uploadTime: "2024-02-18",
folderId: "4",
contractNumber: "WL2024008",
companyName: "中海物流有限公司",
commodity: "物流服务",
signDate: "2024-02-15",
contractType: "logistics"
},
{
id: "5",
fileName: "其他合同-设备租赁-QT2024002.pdf",
fileType: "pdf",
fileSize: "1.2MB",
uploadTime: "2024-03-05",
folderId: "5",
contractNumber: "QT2024002",
companyName: "设备租赁有限公司",
commodity: "设备租赁",
signDate: "2024-03-01",
contractType: "other"
}
];
const mockContractFolders = [
{
id: "1",
name: "2024年上游合同",
count: 15,
createTime: "2024-01-15",
description: "2024年度所有上游合同"
},
{
id: "2",
name: "2024年下游合同",
count: 23,
createTime: "2024-01-20",
description: "2024年度所有下游合同"
},
{
id: "3",
name: "外商采购合同",
count: 8,
createTime: "2024-02-10",
description: "所有外商采购合同"
},
{
id: "4",
name: "物流协议",
count: 12,
createTime: "2024-02-15",
description: "货代物流相关协议"
},
{
id: "5",
name: "其他合同",
count: 5,
createTime: "2024-03-01",
description: "其他类型的合同"
}
];
export default defineFakeRoute([
// 获取合同文件夹
{
url: "/zhongshangpeng/folders",
method: "get",
response: () => {
return {
success: true,
message: "获取文件夹成功",
data: mockContractFolders
};
}
},
// 获取合同文件
{
url: "/zhongshangpeng/files",
method: "get",
response: ({ query }) => {
let files = [...mockContractFiles];
if (query.folderId) {
files = files.filter(file => file.folderId === query.folderId);
}
if (query.searchType && query.keyword) {
const keyword = (
Array.isArray(query.keyword) ? query.keyword[0] : query.keyword
).toLowerCase();
files = files.filter(file => {
if (query.searchType === "contractNumber") {
return (
file.contractNumber?.toLowerCase().includes(keyword) ||
file.fileName.toLowerCase().includes(keyword)
);
} else if (query.searchType === "companyName") {
return (
file.companyName?.toLowerCase().includes(keyword) ||
file.fileName.toLowerCase().includes(keyword)
);
} else if (query.searchType === "commodity") {
return (
file.commodity?.toLowerCase().includes(keyword) ||
file.fileName.toLowerCase().includes(keyword)
);
}
return true;
});
}
if (query.contractType) {
files = files.filter(file => file.contractType === query.contractType);
}
if (query.signDateStart && query.signDateEnd) {
files = files.filter(file => {
if (!file.signDate) return false;
const fileDate = new Date(file.signDate).getTime();
const startDate = new Date(
Array.isArray(query.signDateStart)
? query.signDateStart[0]
: query.signDateStart
).getTime();
const endDate = new Date(
Array.isArray(query.signDateEnd)
? query.signDateEnd[0]
: query.signDateEnd
).getTime();
return fileDate >= startDate && fileDate <= endDate;
});
}
return {
success: true,
message: "获取文件成功",
data: files
};
}
},
// 上传合同文件
{
url: "/zhongshangpeng/files/upload",
method: "post",
response: ({ body }) => {
try {
const data = JSON.parse(body.get("data"));
const files = body.getAll("files");
files.forEach((file: any, index: number) => {
const newFile = {
id: (Date.now() + index).toString(),
fileName: file.name,
fileType: file.name.split(".").pop() || "unknown",
fileSize: `${(file.size / 1024 / 1024).toFixed(1)}MB`,
uploadTime: new Date().toISOString().split("T")[0],
folderId: data.folderId || "",
contractNumber: data.contractNumber,
companyName: data.companyName,
commodity: data.commodity,
signDate: data.signDate,
contractType: data.contractType
};
mockContractFiles.unshift(newFile);
// 更新文件夹计数
if (data.folderId) {
const folder = mockContractFolders.find(
f => f.id === data.folderId
);
if (folder) {
folder.count++;
}
}
});
return {
success: true,
message: `成功上传 ${files.length} 个文件`,
data: {
uploadedCount: files.length
}
};
} catch {
return {
success: false,
message: "文件上传失败"
};
}
}
},
// 创建文件夹
{
url: "/zhongshangpeng/folders",
method: "post",
response: ({ body }) => {
const newFolder = {
id: Date.now().toString(),
name: body.name,
count: 0,
createTime: new Date().toISOString().split("T")[0],
description: body.description
};
mockContractFolders.push(newFolder);
return {
success: true,
message: "文件夹创建成功",
data: newFolder
};
}
}
]);