148 lines
4.8 KiB
JavaScript
148 lines
4.8 KiB
JavaScript
|
|
import fs from 'fs';
|
|||
|
|
|
|||
|
|
// 读取环保项目案例数据
|
|||
|
|
const envProjects = JSON.parse(fs.readFileSync('网页未导入数据/环保产业/环保项目案例.json', 'utf8'));
|
|||
|
|
|
|||
|
|
// 转换为班级项目库格式
|
|||
|
|
const projectsList = envProjects.map((project, index) => {
|
|||
|
|
// 解析岗位名称
|
|||
|
|
const positions = project["对应个人简历名称"] ?
|
|||
|
|
project["对应个人简历名称"].split(',').map(p => p.trim()) : [];
|
|||
|
|
|
|||
|
|
// 解析垂直方向和单元
|
|||
|
|
const direction = project["所属垂直方向"] || "环保工程技术与服务";
|
|||
|
|
const unit = project["对应单元名称(垂直能力课)"] || project["对应单元名称(复合能力课)"] || "";
|
|||
|
|
|
|||
|
|
// 确定分类
|
|||
|
|
let category = "环保技术";
|
|||
|
|
if (project["案例名称"].includes("碳")) {
|
|||
|
|
category = "碳管理";
|
|||
|
|
} else if (project["案例名称"].includes("节能")) {
|
|||
|
|
category = "节能技术";
|
|||
|
|
} else if (project["案例名称"].includes("生态修复") || project["案例名称"].includes("湿地")) {
|
|||
|
|
category = "生态修复";
|
|||
|
|
} else if (project["案例名称"].includes("污水") || project["案例名称"].includes("水")) {
|
|||
|
|
category = "水处理";
|
|||
|
|
} else if (project["案例名称"].includes("土壤")) {
|
|||
|
|
category = "土壤修复";
|
|||
|
|
} else if (project["案例名称"].includes("环境影响评价")) {
|
|||
|
|
category = "环境评价";
|
|||
|
|
} else if (project["案例名称"].includes("设备")) {
|
|||
|
|
category = "设备运维";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
id: index + 1,
|
|||
|
|
name: project["案例名称"],
|
|||
|
|
description: direction,
|
|||
|
|
positions: positions,
|
|||
|
|
unit: unit.split(',')[0].trim(), // 取第一个单元
|
|||
|
|
direction: direction,
|
|||
|
|
category: category
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 转换项目详情格式
|
|||
|
|
const projectDetails = envProjects.map((project, index) => {
|
|||
|
|
// 解析岗位并添加等级
|
|||
|
|
const positions = project["对应个人简历名称"] ?
|
|||
|
|
project["对应个人简历名称"].split(',').map(p => {
|
|||
|
|
const posName = p.trim();
|
|||
|
|
// 根据岗位名称判断等级
|
|||
|
|
let level = "技术骨干岗";
|
|||
|
|
if (posName.includes("助理") || posName.includes("专员") || posName.includes("技术员")) {
|
|||
|
|
level = "普通岗";
|
|||
|
|
} else if (posName.includes("主管") || posName.includes("经理")) {
|
|||
|
|
level = "储备干部岗";
|
|||
|
|
}
|
|||
|
|
return {
|
|||
|
|
level: level,
|
|||
|
|
position: posName
|
|||
|
|
};
|
|||
|
|
}) : [];
|
|||
|
|
|
|||
|
|
// 解析项目内容
|
|||
|
|
const content = project["项目案例内容"] || "";
|
|||
|
|
|
|||
|
|
// 提取项目概述
|
|||
|
|
const overviewMatch = content.match(/# 一、项目概述\s*([\s\S]*?)(?=# 二、|$)/);
|
|||
|
|
const overview = overviewMatch ? overviewMatch[1].trim() : "";
|
|||
|
|
|
|||
|
|
// 提取流程部分
|
|||
|
|
const processMatch = content.match(/# 二、项目整体流程介绍\s*([\s\S]*?)(?=# 三、|$)/);
|
|||
|
|
const process = processMatch ? processMatch[1].trim() : "";
|
|||
|
|
|
|||
|
|
// 提取关键技术点
|
|||
|
|
const keyPointsMatch = content.match(/# 三、项目案例关键技术点\s*([\s\S]*?)$/);
|
|||
|
|
const keyPoints = keyPointsMatch ? keyPointsMatch[1].trim() : "";
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
id: index + 1,
|
|||
|
|
name: project["案例名称"],
|
|||
|
|
positions: positions,
|
|||
|
|
unit: project["对应单元名称(垂直能力课)"] || project["对应单元名称(复合能力课)"] || "",
|
|||
|
|
overview: overview,
|
|||
|
|
process: process,
|
|||
|
|
keyPoints: keyPoints
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 生成Mock数据代码
|
|||
|
|
const mockCode = `// 项目库Mock数据
|
|||
|
|
export const getMockProjectsList = (params = {}) => {
|
|||
|
|
const { search = "", page = 1, pageSize = 10 } = params;
|
|||
|
|
|
|||
|
|
// 完整项目列表数据
|
|||
|
|
const projects = ${JSON.stringify(projectsList, null, 4)};
|
|||
|
|
|
|||
|
|
// 搜索过滤
|
|||
|
|
const filteredProjects = projects.filter(project => {
|
|||
|
|
if (!search) return true;
|
|||
|
|
return project.name.includes(search) ||
|
|||
|
|
project.description.includes(search) ||
|
|||
|
|
project.positions.some(pos => pos.includes(search)) ||
|
|||
|
|
project.category.includes(search);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 分页
|
|||
|
|
const startIndex = (page - 1) * pageSize;
|
|||
|
|
const endIndex = startIndex + pageSize;
|
|||
|
|
const paginatedProjects = filteredProjects.slice(startIndex, endIndex);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
data: paginatedProjects,
|
|||
|
|
total: filteredProjects.length,
|
|||
|
|
page,
|
|||
|
|
pageSize,
|
|||
|
|
};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 获取项目详情
|
|||
|
|
export const getMockProjectDetail = (id) => {
|
|||
|
|
// 直接根据ID返回对应项目的详情
|
|||
|
|
const projects = ${JSON.stringify(projectDetails, null, 2)};
|
|||
|
|
|
|||
|
|
const project = projects.find(p => p.id === parseInt(id));
|
|||
|
|
|
|||
|
|
if (!project) {
|
|||
|
|
return {
|
|||
|
|
error: "项目未找到"
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
data: project
|
|||
|
|
};
|
|||
|
|
};`;
|
|||
|
|
|
|||
|
|
// 写入文件
|
|||
|
|
fs.writeFileSync('projectLibraryMock_env.js', mockCode, 'utf8');
|
|||
|
|
|
|||
|
|
console.log('环保项目数据转换完成!');
|
|||
|
|
console.log(`共转换了 ${projectsList.length} 个项目`);
|
|||
|
|
console.log('\n项目分类统计:');
|
|||
|
|
const categoryStats = {};
|
|||
|
|
projectsList.forEach(p => {
|
|||
|
|
categoryStats[p.category] = (categoryStats[p.category] || 0) + 1;
|
|||
|
|
});
|
|||
|
|
console.log(categoryStats);
|