204 lines
6.5 KiB
JavaScript
204 lines
6.5 KiB
JavaScript
|
|
import fs from 'fs';
|
|||
|
|
|
|||
|
|
// 读取财经商贸项目案例数据
|
|||
|
|
const caseData = JSON.parse(fs.readFileSync('网页未导入数据/财经商贸产业/财经商贸项目案例.json', 'utf8'));
|
|||
|
|
|
|||
|
|
// 读取岗位等级数据
|
|||
|
|
const jobLevelData = JSON.parse(fs.readFileSync('网页未导入数据/财经商贸产业/财经商贸岗位简历.json', 'utf8'));
|
|||
|
|
|
|||
|
|
// 创建岗位等级映射
|
|||
|
|
const levelMapping = {};
|
|||
|
|
jobLevelData.forEach(job => {
|
|||
|
|
levelMapping[job['岗位名称']] = job['岗位等级标签'];
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 构建项目列表
|
|||
|
|
const projects = caseData.slice(0, 20).map((item, index) => {
|
|||
|
|
// 根据所属垂直方向确定category
|
|||
|
|
let category = '国际贸易'; // 默认
|
|||
|
|
if (item['所属垂直方向'] === '国际贸易') {
|
|||
|
|
category = '国际贸易';
|
|||
|
|
} else if (item['所属垂直方向'] === '供应链管理') {
|
|||
|
|
category = '供应链管理';
|
|||
|
|
} else if (item['所属垂直方向'] === '电子商务') {
|
|||
|
|
category = '电子商务';
|
|||
|
|
} else if (item['所属垂直方向'] === '金融服务') {
|
|||
|
|
category = '金融服务';
|
|||
|
|
} else if (item['所属垂直方向'] === '企业管理基础') {
|
|||
|
|
category = '供应链管理';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取岗位列表
|
|||
|
|
const positions = item['对应个人简历名称'] ? item['对应个人简历名称'].split(',').map(p => p.trim()) : [];
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
id: index + 1,
|
|||
|
|
name: item['案例名称'],
|
|||
|
|
description: item['所属垂直方向'] || category,
|
|||
|
|
positions: positions,
|
|||
|
|
unit: item['对应单元名称(垂直能力课)'] || item['对应单元名称(复合能力课)'] || '',
|
|||
|
|
direction: item['所属垂直方向'] || category,
|
|||
|
|
category: category
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 构建项目详情
|
|||
|
|
const projectDetails = {};
|
|||
|
|
caseData.slice(0, 20).forEach((item, index) => {
|
|||
|
|
const id = index + 1;
|
|||
|
|
|
|||
|
|
// 获取岗位列表并分配等级
|
|||
|
|
const positions = item['对应个人简历名称'] ? item['对应个人简历名称'].split(',').map(pos => {
|
|||
|
|
const position = pos.trim();
|
|||
|
|
// 从映射表获取等级,如果没有则根据规则分配
|
|||
|
|
let level = levelMapping[position] || '普通岗';
|
|||
|
|
// 将"基础岗"改为"普通岗"
|
|||
|
|
if (level === '基础岗') {
|
|||
|
|
level = '普通岗';
|
|||
|
|
}
|
|||
|
|
return { level, position };
|
|||
|
|
}) : [];
|
|||
|
|
|
|||
|
|
// 提取项目概述
|
|||
|
|
let overview = '';
|
|||
|
|
if (item['项目案例内容']) {
|
|||
|
|
const overviewMatch = item['项目案例内容'].match(/项目概述[\s\S]*?(?=\n#|$)/);
|
|||
|
|
if (overviewMatch) {
|
|||
|
|
overview = overviewMatch[0]
|
|||
|
|
.replace(/^#\s*/, '')
|
|||
|
|
.replace(/项目概述\s*/, '')
|
|||
|
|
.replace(/\n/g, ' ')
|
|||
|
|
.trim();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 提取项目流程
|
|||
|
|
let process = '';
|
|||
|
|
if (item['项目案例内容']) {
|
|||
|
|
const processMatch = item['项目案例内容'].match(/项目整体流程介绍([\s\S]*?)(?=#\s*三、|$)/);
|
|||
|
|
if (processMatch) {
|
|||
|
|
process = processMatch[1].trim();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 提取关键技术点
|
|||
|
|
let keyPoints = '';
|
|||
|
|
if (item['项目案例内容']) {
|
|||
|
|
const keyPointsMatch = item['项目案例内容'].match(/项目案例关键技术点([\s\S]*?)$/);
|
|||
|
|
if (keyPointsMatch) {
|
|||
|
|
keyPoints = keyPointsMatch[1].trim();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 对岗位按等级排序:普通岗 -> 技术骨干岗 -> 储备干部岗
|
|||
|
|
const sortedPositions = [...positions].sort((a, b) => {
|
|||
|
|
const levelOrder = {
|
|||
|
|
'普通岗': 0,
|
|||
|
|
'技术骨干岗': 1,
|
|||
|
|
'储备干部岗': 2
|
|||
|
|
};
|
|||
|
|
const aOrder = levelOrder[a.level] !== undefined ? levelOrder[a.level] : 999;
|
|||
|
|
const bOrder = levelOrder[b.level] !== undefined ? levelOrder[b.level] : 999;
|
|||
|
|
return aOrder - bOrder;
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
projectDetails[id] = {
|
|||
|
|
id: id,
|
|||
|
|
title: item['案例名称'],
|
|||
|
|
overview: overview || '项目概述内容',
|
|||
|
|
applicablePositions: sortedPositions,
|
|||
|
|
units: [item['对应单元名称(垂直能力课)'] || item['对应单元名称(复合能力课)'] || ''].filter(u => u),
|
|||
|
|
process: process,
|
|||
|
|
keyPoints: keyPoints,
|
|||
|
|
attachments: [
|
|||
|
|
{ name: `${item['案例名称']}.docx`, size: '1.2MB', type: 'doc' },
|
|||
|
|
{ name: '项目执行手册.pdf', size: '1.8MB', type: 'pdf' }
|
|||
|
|
]
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 生成完整的Mock文件内容
|
|||
|
|
const mockContent = `// 项目库Mock数据
|
|||
|
|
export const getMockProjectsList = (params = {}) => {
|
|||
|
|
const { search = "", page = 1, pageSize = 10 } = params;
|
|||
|
|
|
|||
|
|
// 完整项目列表数据 - 财经商贸
|
|||
|
|
const projects = ${JSON.stringify(projects, null, 2)};
|
|||
|
|
|
|||
|
|
// 搜索过滤
|
|||
|
|
let filteredProjects = projects;
|
|||
|
|
if (search) {
|
|||
|
|
filteredProjects = projects.filter(project =>
|
|||
|
|
project.name.includes(search) ||
|
|||
|
|
project.description.includes(search) ||
|
|||
|
|
project.positions.some(pos => pos.includes(search)) ||
|
|||
|
|
project.category.includes(search)
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 分页
|
|||
|
|
const start = (page - 1) * pageSize;
|
|||
|
|
const end = start + pageSize;
|
|||
|
|
const paginatedProjects = filteredProjects.slice(start, end);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
data: paginatedProjects,
|
|||
|
|
total: filteredProjects.length,
|
|||
|
|
page,
|
|||
|
|
pageSize
|
|||
|
|
};
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 项目详情Mock数据 - 财经商贸
|
|||
|
|
export const getMockProjectDetail = (id) => {
|
|||
|
|
const projectDetails = ${JSON.stringify(projectDetails, null, 2)};
|
|||
|
|
|
|||
|
|
const detail = projectDetails[id];
|
|||
|
|
|
|||
|
|
if (!detail) {
|
|||
|
|
return {
|
|||
|
|
success: false,
|
|||
|
|
message: '项目不存在'
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
success: true,
|
|||
|
|
data: detail
|
|||
|
|
};
|
|||
|
|
};`;
|
|||
|
|
|
|||
|
|
// 写入文件
|
|||
|
|
fs.writeFileSync('src/mocks/projectLibraryMock.js', mockContent, 'utf8');
|
|||
|
|
|
|||
|
|
console.log('项目库数据已完全重新生成!');
|
|||
|
|
console.log(`共生成了 ${projects.length} 个项目`);
|
|||
|
|
|
|||
|
|
// 显示分类统计
|
|||
|
|
const categoryStats = {};
|
|||
|
|
projects.forEach(p => {
|
|||
|
|
categoryStats[p.category] = (categoryStats[p.category] || 0) + 1;
|
|||
|
|
});
|
|||
|
|
console.log('\n分类统计:');
|
|||
|
|
Object.entries(categoryStats).forEach(([cat, count]) => {
|
|||
|
|
console.log(` ${cat}: ${count} 个项目`);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 显示岗位等级统计
|
|||
|
|
let levelStats = {
|
|||
|
|
'普通岗': 0,
|
|||
|
|
'技术骨干岗': 0,
|
|||
|
|
'储备干部岗': 0
|
|||
|
|
};
|
|||
|
|
Object.values(projectDetails).forEach(detail => {
|
|||
|
|
detail.applicablePositions.forEach(pos => {
|
|||
|
|
if (levelStats[pos.level] !== undefined) {
|
|||
|
|
levelStats[pos.level]++;
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
console.log('\n岗位等级统计:');
|
|||
|
|
Object.entries(levelStats).forEach(([level, count]) => {
|
|||
|
|
console.log(` ${level}: ${count} 个岗位`);
|
|||
|
|
});
|