361 lines
8.1 KiB
TypeScript
Executable File
361 lines
8.1 KiB
TypeScript
Executable File
import { defineFakeRoute } from "vite-plugin-fake-server/client";
|
|
|
|
// 模拟数据
|
|
const mockFolders = [
|
|
{
|
|
id: "1",
|
|
name: "营业执照",
|
|
count: 8,
|
|
createTime: "2024-01-15",
|
|
description: "所有公司的营业执照",
|
|
category: "license"
|
|
},
|
|
{
|
|
id: "2",
|
|
name: "开票信息",
|
|
count: 12,
|
|
createTime: "2024-01-20",
|
|
description: "公司开票相关信息",
|
|
category: "invoice"
|
|
},
|
|
{
|
|
id: "3",
|
|
name: "税务资质",
|
|
count: 6,
|
|
createTime: "2024-02-10",
|
|
description: "税务登记证等相关文件",
|
|
category: "tax"
|
|
},
|
|
{
|
|
id: "4",
|
|
name: "银行资料",
|
|
count: 4,
|
|
createTime: "2024-02-15",
|
|
description: "开户许可证等银行资料",
|
|
category: "bank"
|
|
},
|
|
{
|
|
id: "5",
|
|
name: "其他资质",
|
|
count: 5,
|
|
createTime: "2024-03-01",
|
|
description: "其他相关资质文件",
|
|
category: "other"
|
|
},
|
|
{
|
|
id: "6",
|
|
name: "2023年归档",
|
|
count: 25,
|
|
createTime: "2023-12-31",
|
|
description: "2023年度所有文件"
|
|
}
|
|
];
|
|
|
|
const mockFiles = [
|
|
{
|
|
id: "1",
|
|
fileName: "中尚鹏贸易有限公司-营业执照.pdf",
|
|
fileType: "pdf",
|
|
fileSize: "2.3MB",
|
|
uploadTime: "2024-01-20",
|
|
folderId: "1",
|
|
companyName: "中尚鹏贸易有限公司",
|
|
fileCategory: "license",
|
|
expireDate: "2027-12-31",
|
|
description: "营业执照正本扫描件"
|
|
},
|
|
{
|
|
id: "2",
|
|
fileName: "中尚鹏-开票信息.pdf",
|
|
fileType: "pdf",
|
|
fileSize: "1.1MB",
|
|
uploadTime: "2024-01-25",
|
|
folderId: "2",
|
|
companyName: "中尚鹏贸易有限公司",
|
|
fileCategory: "invoice",
|
|
description: "增值税专用发票开票信息"
|
|
},
|
|
{
|
|
id: "3",
|
|
fileName: "税务登记证-中尚鹏.jpg",
|
|
fileType: "jpg",
|
|
fileSize: "0.8MB",
|
|
uploadTime: "2024-02-12",
|
|
folderId: "3",
|
|
companyName: "中尚鹏贸易有限公司",
|
|
fileCategory: "tax",
|
|
expireDate: "2025-06-30",
|
|
description: "税务登记证扫描件"
|
|
},
|
|
{
|
|
id: "4",
|
|
fileName: "开户许可证-中国银行.pdf",
|
|
fileType: "pdf",
|
|
fileSize: "1.5MB",
|
|
uploadTime: "2024-02-18",
|
|
folderId: "4",
|
|
companyName: "中尚鹏贸易有限公司",
|
|
fileCategory: "bank",
|
|
description: "基本户开户许可证"
|
|
},
|
|
{
|
|
id: "5",
|
|
fileName: "公司章程-2024版.pdf",
|
|
fileType: "pdf",
|
|
fileSize: "2.1MB",
|
|
uploadTime: "2024-03-05",
|
|
folderId: "5",
|
|
companyName: "中尚鹏贸易有限公司",
|
|
fileCategory: "charter",
|
|
description: "最新版公司章程"
|
|
},
|
|
{
|
|
id: "6",
|
|
fileName: "华东制造有限公司-营业执照.png",
|
|
fileType: "png",
|
|
fileSize: "1.2MB",
|
|
uploadTime: "2024-02-05",
|
|
folderId: "1",
|
|
companyName: "华东制造有限公司",
|
|
fileCategory: "license",
|
|
expireDate: "2026-11-30",
|
|
description: "合作公司营业执照"
|
|
},
|
|
{
|
|
id: "7",
|
|
fileName: "南方制造-开票信息.pdf",
|
|
fileType: "pdf",
|
|
fileSize: "0.9MB",
|
|
uploadTime: "2024-02-08",
|
|
folderId: "2",
|
|
companyName: "南方制造有限公司",
|
|
fileCategory: "invoice",
|
|
description: "合作公司开票信息"
|
|
}
|
|
];
|
|
|
|
export default defineFakeRoute([
|
|
// 获取文件夹列表
|
|
{
|
|
url: "/company/folders",
|
|
method: "get",
|
|
response: () => {
|
|
return {
|
|
success: true,
|
|
message: "获取文件夹列表成功",
|
|
data: mockFolders
|
|
};
|
|
}
|
|
},
|
|
|
|
// 获取文件列表
|
|
{
|
|
url: "/company/files",
|
|
method: "get",
|
|
response: ({ query }) => {
|
|
let files = [...mockFiles];
|
|
|
|
// 根据文件夹ID过滤
|
|
if (query.folderId) {
|
|
files = files.filter(file => file.folderId === query.folderId);
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
message: "获取文件列表成功",
|
|
data: files
|
|
};
|
|
}
|
|
},
|
|
|
|
// 创建文件夹
|
|
{
|
|
url: "/company/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,
|
|
category: body.category
|
|
};
|
|
|
|
mockFolders.push(newFolder);
|
|
|
|
return {
|
|
success: true,
|
|
message: "文件夹创建成功",
|
|
data: newFolder
|
|
};
|
|
}
|
|
},
|
|
|
|
// 更新文件夹
|
|
{
|
|
url: "/company/folders/:id",
|
|
method: "put",
|
|
response: ({ body, params }) => {
|
|
const folderIndex = mockFolders.findIndex(f => f.id === params.id);
|
|
|
|
if (folderIndex !== -1) {
|
|
mockFolders[folderIndex] = {
|
|
...mockFolders[folderIndex],
|
|
...body
|
|
};
|
|
|
|
return {
|
|
success: true,
|
|
message: "文件夹更新成功",
|
|
data: mockFolders[folderIndex]
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
message: "文件夹不存在"
|
|
};
|
|
}
|
|
},
|
|
|
|
// 删除文件夹
|
|
{
|
|
url: "/company/folders/:id",
|
|
method: "delete",
|
|
response: ({ params }) => {
|
|
const folderIndex = mockFolders.findIndex(f => f.id === params.id);
|
|
|
|
if (folderIndex !== -1) {
|
|
// 将文件夹内的文件移动到未分类
|
|
mockFiles.forEach(file => {
|
|
if (file.folderId === params.id) {
|
|
file.folderId = "";
|
|
}
|
|
});
|
|
|
|
mockFolders.splice(folderIndex, 1);
|
|
|
|
return {
|
|
success: true,
|
|
message: "文件夹删除成功"
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
message: "文件夹不存在"
|
|
};
|
|
}
|
|
},
|
|
|
|
// 上传文件
|
|
{
|
|
url: "/company/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 || "",
|
|
companyName: data.companyName,
|
|
fileCategory: data.fileCategory,
|
|
expireDate: data.expireDate,
|
|
description: data.description
|
|
};
|
|
|
|
mockFiles.unshift(newFile);
|
|
|
|
// 更新文件夹计数
|
|
if (data.folderId) {
|
|
const folder = mockFolders.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: "/company/files/:id",
|
|
method: "delete",
|
|
response: ({ params }) => {
|
|
const fileIndex = mockFiles.findIndex(f => f.id === params.id);
|
|
|
|
if (fileIndex !== -1) {
|
|
const file = mockFiles[fileIndex];
|
|
|
|
// 更新文件夹计数
|
|
if (file.folderId) {
|
|
const folder = mockFolders.find(f => f.id === file.folderId);
|
|
if (folder && folder.count > 0) {
|
|
folder.count--;
|
|
}
|
|
}
|
|
|
|
mockFiles.splice(fileIndex, 1);
|
|
|
|
return {
|
|
success: true,
|
|
message: "文件删除成功"
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
message: "文件不存在"
|
|
};
|
|
}
|
|
},
|
|
|
|
// 下载文件
|
|
{
|
|
url: "/company/files/:id/download",
|
|
method: "get",
|
|
response: ({ params }) => {
|
|
const file = mockFiles.find(f => f.id === params.id);
|
|
|
|
if (file) {
|
|
return {
|
|
success: true,
|
|
message: "文件下载成功",
|
|
data: {
|
|
fileName: file.fileName,
|
|
url: `/downloads/${file.fileName}` // 模拟下载链接
|
|
}
|
|
};
|
|
}
|
|
|
|
return {
|
|
success: false,
|
|
message: "文件不存在"
|
|
};
|
|
}
|
|
}
|
|
]);
|