266 lines
6.7 KiB
TypeScript
Executable File
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
|
|
};
|
|
}
|
|
}
|
|
]);
|