spa/.claude/skills/softcopyright/scripts/doc-generator.js

1057 lines
28 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const fs = require('fs-extra');
const path = require('path');
const PDFDocument = require('pdfkit');
const moment = require('moment');
const chalk = require('chalk');
const { generateManualHTML } = require('./simple-doc-generator');
const { SUPPORTED_EXTENSIONS } = require('./scanner');
/**
* 生成软件说明书
* @param {Object} projectInfo 项目信息
* @param {string} outputDir 输出目录
* @returns {Promise<string>} 生成的PDF文件路径
*/
async function generateManual(projectInfo, outputDir) {
try {
console.log(chalk.yellow('📝 生成软件说明书...'));
const timestamp = moment().format('YYYYMMDD_HHMMSS');
const fileName = `软件说明书_${projectInfo.name}_${timestamp}.pdf`;
const outputPath = path.join(outputDir, fileName);
// 初始化字体管理器
const fontManager = new FontManager();
const fontPath = await fontManager.getFontPath();
// 创建PDF文档
const doc = new PDFDocument({
size: 'A4',
margins: {
top: 50,
bottom: 50,
left: 50,
right: 50
},
info: {
Title: `软件说明书 - ${projectInfo.name}`,
Author: 'SoftCopyright',
Subject: '软件著作权申请材料',
Creator: 'SoftCopyright Tool',
Producer: 'SoftCopyright'
}
});
// 管道输出到文件
const stream = fs.createWriteStream(outputPath);
doc.pipe(stream);
// 添加字体
try {
doc.font('Helvetica');
} catch (error) {
console.warn(chalk.yellow('⚠️ 使用默认字体'));
}
// 设置字体
if (fontPath) {
try {
doc.font(fontPath);
console.log(chalk.green(`✅ 使用中文字体: ${path.basename(fontPath)}`));
} catch (error) {
console.warn(chalk.yellow('⚠️ 中文字体加载失败,使用默认字体'));
doc.font('Helvetica');
}
} else {
console.warn(chalk.yellow('⚠️ 未找到中文字体,使用默认字体'));
doc.font('Helvetica');
}
// 生成说明书内容
await generateManualContent(doc, projectInfo);
// 完成文档
doc.end();
// 等待文件写入完成
return new Promise((resolve, reject) => {
stream.on('finish', () => {
console.log(chalk.green(`✅ 软件说明书已生成: ${outputPath}`));
resolve(outputPath);
});
stream.on('error', reject);
});
} catch (error) {
throw new Error(`生成软件说明书失败: ${error.message}`);
}
}
/**
* 生成说明书内容
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function generateManualContent(doc, projectInfo) {
// 添加封面
addCoverPage(doc, projectInfo);
// 添加目录
addTableOfContents(doc);
// 生成各章节内容
await addIntroduction(doc, projectInfo);
await addSoftwareOverview(doc, projectInfo);
await addRunningEnvironment(doc, projectInfo);
await addDesignAndImplementation(doc, projectInfo);
await addFunctionalModules(doc, projectInfo);
await addUserGuide(doc, projectInfo);
await addTestingAndMaintenance(doc, projectInfo);
}
/**
* 添加封面页
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
function addCoverPage(doc, projectInfo) {
doc.addPage();
// 设置标题
doc.fontSize(28)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('软件说明书', { align: 'center' });
doc.fontSize(20)
.fillColor('#34495E')
.text(projectInfo.name, { align: 'center' });
doc.moveDown(2);
// 添加版本和日期
doc.fontSize(14)
.fillColor('#7F8C8D')
.text(`版本: 1.0.0`, { align: 'center' });
doc.text(`生成日期: ${moment().format('YYYY年MM月DD日')}`, { align: 'center' });
doc.moveDown(3);
// 添加项目信息
doc.fontSize(12)
.fillColor('#2C3E50')
.text('项目信息', { align: 'center' });
doc.moveDown(1);
const projectDetails = [
`项目名称: ${projectInfo.name}`,
`开发语言: ${projectInfo.languages.join(', ')}`,
`源代码文件: ${projectInfo.files.length}`,
`总代码行数: ${projectInfo.totalLines}`,
`项目类型: ${getProjectTypeDescription(projectInfo.features.type)}`
];
projectDetails.forEach(detail => {
doc.text(detail, { align: 'center' });
doc.moveDown(0.5);
});
}
/**
* 添加目录
* @param {PDFDocument} doc PDF文档对象
*/
function addTableOfContents(doc) {
doc.addPage();
doc.fontSize(20)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('目录');
doc.moveDown(1);
const contents = [
{ title: '1. 引言', page: 3 },
{ title: ' 1.1 概述', page: 3 },
{ title: ' 1.2 编写目的', page: 3 },
{ title: ' 1.3 开发背景', page: 4 },
{ title: '2. 软件概述', page: 4 },
{ title: ' 2.1 主要功能', page: 4 },
{ title: ' 2.2 应用场景', page: 5 },
{ title: ' 2.3 软件特点', page: 5 },
{ title: ' 2.4 性能指标', page: 6 },
{ title: '3. 运行环境', page: 6 },
{ title: ' 3.1 硬件要求', page: 6 },
{ title: ' 3.2 软件要求', page: 7 },
{ title: ' 3.3 网络环境', page: 7 },
{ title: '4. 设计思想与实现过程', page: 8 },
{ title: ' 4.1 系统架构', page: 8 },
{ title: ' 4.2 模块划分', page: 9 },
{ title: ' 4.3 开发流程', page: 10 },
{ title: '5. 功能模块详述', page: 10 },
{ title: ' 5.1 核心功能模块', page: 10 },
{ title: ' 5.2 辅助功能模块', page: 12 },
{ title: ' 5.3 用户界面设计', page: 13 },
{ title: '6. 用户指南', page: 14 },
{ title: ' 6.1 安装说明', page: 14 },
{ title: ' 6.2 使用方法', page: 15 },
{ title: ' 6.3 常见问题', page: 16 },
{ title: '7. 测试与维护', page: 17 },
{ title: ' 7.1 测试情况', page: 17 },
{ title: ' 7.2 维护说明', page: 18 }
];
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50');
contents.forEach(item => {
const dots = '.'.repeat(50 - item.title.length - item.page.toString().length);
doc.text(`${item.title}${dots}${item.page}`);
doc.moveDown(0.3);
});
}
/**
* 添加引言章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addIntroduction(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('1. 引言');
doc.moveDown(1);
// 1.1 概述
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('1.1 概述');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(`${projectInfo.name}是一款基于${projectInfo.languages.join('、')}技术开发的${getProjectTypeDescription(projectInfo.features.type)}软件。`
+ `本项目包含${projectInfo.files.length}个源代码文件,总计${projectInfo.totalLines}行代码,体现了良好的软件工程实践和模块化设计理念。`
+ `软件采用了现代化的开发技术和架构设计,具有高度的可扩展性和维护性。`);
doc.moveDown(1);
// 1.2 编写目的
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('1.2 编写目的');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('本软件说明书旨在详细描述' + projectInfo.name + '的功能特性、技术架构、运行环境和使用方法,为软件著作权申请提供完整的技术文档。'
+ '本文档将从技术角度全面阐述软件的设计思想、实现方案和创新点,展现软件的技术价值和实用性。');
doc.moveDown(1);
// 1.3 开发背景
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('1.3 开发背景');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('随着信息技术的快速发展和数字化转型的深入,用户对高质量软件的需求日益增长。'
+ projectInfo.name + '的开发正是为了满足' + getApplicationScenario(projectInfo) + '的需求。'
+ '项目采用了' + projectInfo.features.frameworks.join('、') + '等主流技术框架,确保了技术的先进性和稳定性。'
+ '通过深入的调研和精心的设计,本软件实现了核心功能的优化和用户体验的提升。');
}
/**
* 添加软件概述章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addSoftwareOverview(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('2. 软件概述');
doc.moveDown(1);
// 2.1 主要功能
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('2.1 主要功能');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50');
const mainFunctions = getMainFunctions(projectInfo);
mainFunctions.forEach((func, index) => {
doc.text(`${index + 1}. ${func}`);
doc.moveDown(0.3);
});
doc.moveDown(1);
// 2.2 应用场景
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('2.2 应用场景');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getApplicationScenario(projectInfo));
doc.moveDown(1);
// 2.3 软件特点
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('2.3 软件特点');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50');
const features = getSoftwareFeatures(projectInfo);
features.forEach((feature, index) => {
doc.text(`${feature}`);
doc.moveDown(0.3);
});
doc.moveDown(1);
// 2.4 性能指标
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('2.4 性能指标');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('本软件在性能方面具有以下特点:');
doc.moveDown(0.5);
const performance = getPerformanceMetrics(projectInfo);
performance.forEach((metric, index) => {
doc.text(`${index + 1}. ${metric}`);
doc.moveDown(0.3);
});
}
/**
* 添加运行环境章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addRunningEnvironment(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('3. 运行环境');
doc.moveDown(1);
// 3.1 硬件要求
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('3.1 硬件要求');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('最低硬件配置:');
doc.moveDown(0.5);
const hardwareReqs = [
'处理器:双核 2.0GHz 或更高',
'内存4GB RAM 或更高',
'存储空间:至少 1GB 可用空间',
'显卡:支持 DirectX 11 或 OpenGL 4.0',
'网络:稳定的互联网连接(如需要在线功能)'
];
hardwareReqs.forEach(req => {
doc.text(`${req}`);
doc.moveDown(0.3);
});
doc.moveDown(1);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('推荐硬件配置:');
doc.moveDown(0.5);
const recommendedHardware = [
'处理器:四核 3.0GHz 或更高',
'内存8GB RAM 或更高',
'存储空间SSD至少 2GB 可用空间',
'显卡:独立显卡,支持最新图形标准',
'网络:宽带互联网连接'
];
recommendedHardware.forEach(req => {
doc.text(`${req}`);
doc.moveDown(0.3);
});
doc.moveDown(1);
// 3.2 软件要求
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('3.2 软件要求');
doc.moveDown(0.5);
const softwareReqs = getSoftwareRequirements(projectInfo);
softwareReqs.forEach(req => {
doc.text(`${req}`);
doc.moveDown(0.3);
});
doc.moveDown(1);
// 3.3 网络环境
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('3.3 网络环境');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text('本软件支持以下网络环境:');
doc.moveDown(0.5);
const networkReqs = [
'局域网环境:支持内网部署和访问',
'互联网环境:支持公网访问和云端服务',
'网络协议HTTP/HTTPS、TCP/IP、WebSocket',
'数据传输:支持加密传输,确保数据安全',
'防火墙:支持企业级防火墙配置'
];
networkReqs.forEach(req => {
doc.text(`${req}`);
doc.moveDown(0.3);
});
}
/**
* 添加设计思想与实现过程章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addDesignAndImplementation(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('4. 设计思想与实现过程');
doc.moveDown(1);
// 4.1 系统架构
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('4.1 系统架构');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getSystemArchitecture(projectInfo));
doc.moveDown(1);
// 4.2 模块划分
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('4.2 模块划分');
doc.moveDown(0.5);
const modules = getModuleDivision(projectInfo);
modules.forEach((module, index) => {
doc.fontSize(12)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text(`${index + 1}. ${module.name}`);
doc.moveDown(0.3);
doc.fontSize(11)
.font('Helvetica')
.fillColor('#2C3E50')
.text(module.description);
doc.moveDown(0.8);
});
// 4.3 开发流程
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('4.3 开发流程');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getDevelopmentProcess(projectInfo));
}
/**
* 添加功能模块详述章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addFunctionalModules(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('5. 功能模块详述');
doc.moveDown(1);
// 5.1 核心功能模块
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('5.1 核心功能模块');
doc.moveDown(0.5);
const coreModules = getCoreModules(projectInfo);
coreModules.forEach((module, index) => {
doc.fontSize(12)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text(`5.1.${index + 1} ${module.name}`);
doc.moveDown(0.3);
doc.fontSize(11)
.font('Helvetica')
.fillColor('#2C3E50')
.text(`功能描述:${module.description}`);
doc.moveDown(0.3);
doc.text(`技术实现:${module.implementation}`);
doc.moveDown(0.5);
if (module.screenshot) {
doc.text(`界面截图:${module.screenshot}`);
doc.moveDown(0.5);
}
doc.moveDown(0.5);
});
doc.addPage();
// 5.2 辅助功能模块
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('5.2 辅助功能模块');
doc.moveDown(0.5);
const auxiliaryModules = getAuxiliaryModules(projectInfo);
auxiliaryModules.forEach((module, index) => {
doc.fontSize(12)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text(`5.2.${index + 1} ${module.name}`);
doc.moveDown(0.3);
doc.fontSize(11)
.font('Helvetica')
.fillColor('#2C3E50')
.text(module.description);
doc.moveDown(0.8);
});
// 5.3 用户界面设计
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('5.3 用户界面设计');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getUIDesignDescription(projectInfo));
doc.moveDown(1);
doc.text('主要界面包括:');
doc.moveDown(0.5);
const interfaces = getMainInterfaces(projectInfo);
interfaces.forEach((iface, index) => {
doc.text(`${index + 1}. ${iface}`);
doc.moveDown(0.3);
});
}
/**
* 添加用户指南章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addUserGuide(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('6. 用户指南');
doc.moveDown(1);
// 6.1 安装说明
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('6.1 安装说明');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getInstallationGuide(projectInfo));
doc.moveDown(1);
// 6.2 使用方法
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('6.2 使用方法');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getUsageInstructions(projectInfo));
doc.moveDown(1);
// 6.3 常见问题
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('6.3 常见问题');
doc.moveDown(0.5);
const faq = getFAQ(projectInfo);
faq.forEach((item, index) => {
doc.fontSize(12)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text(`问题${index + 1}${item.question}`);
doc.moveDown(0.3);
doc.fontSize(11)
.font('Helvetica')
.fillColor('#2C3E50')
.text(`回答:${item.answer}`);
doc.moveDown(0.8);
});
}
/**
* 添加测试与维护章节
* @param {PDFDocument} doc PDF文档对象
* @param {Object} projectInfo 项目信息
*/
async function addTestingAndMaintenance(doc, projectInfo) {
doc.addPage();
doc.fontSize(18)
.font('Helvetica-Bold')
.fillColor('#2C3E50')
.text('7. 测试与维护');
doc.moveDown(1);
// 7.1 测试情况
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('7.1 测试情况');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getTestingInfo(projectInfo));
doc.moveDown(1);
// 7.2 维护说明
doc.fontSize(14)
.font('Helvetica-Bold')
.fillColor('#34495E')
.text('7.2 维护说明');
doc.moveDown(0.5);
doc.fontSize(12)
.font('Helvetica')
.fillColor('#2C3E50')
.text(getMaintenanceInfo(projectInfo));
}
// 辅助函数:获取项目类型描述
function getProjectTypeDescription(type) {
const typeMap = {
'web': 'Web应用',
'python': 'Python应用',
'java': 'Java应用',
'javascript': 'JavaScript应用',
'unknown': '通用'
};
return typeMap[type] || '通用';
}
// 辅助函数:获取主要功能
function getMainFunctions(projectInfo) {
const functions = [];
if (projectInfo.features.frameworks.includes('React') ||
projectInfo.features.frameworks.includes('Vue')) {
functions.push('用户界面管理和交互功能');
}
if (projectInfo.features.frameworks.includes('Express') ||
projectInfo.features.frameworks.includes('NestJS')) {
functions.push('后端API服务和数据处理功能');
}
functions.push('数据存储和管理功能');
functions.push('系统配置和设置功能');
functions.push('用户认证和权限管理功能');
functions.push('日志记录和监控功能');
return functions;
}
// 辅助函数:获取应用场景
function getApplicationScenario(projectInfo) {
const scenarios = {
'web': 'Web应用开发和部署',
'python': '数据处理和机器学习应用',
'java': '企业级应用系统开发',
'javascript': '前端应用和Node.js服务',
'unknown': '通用软件开发和部署'
};
return scenarios[projectInfo.features.type] || scenarios.unknown;
}
// 辅助函数:获取软件特点
function getSoftwareFeatures(projectInfo) {
const features = [
'采用模块化设计,具有良好的可扩展性',
'使用现代化技术栈,确保技术的先进性',
'代码结构清晰,遵循最佳实践和编码规范',
'具有完整的错误处理和异常管理机制',
'支持多种数据格式和协议',
'具有良好的性能和响应速度'
];
if (projectInfo.features.hasTests) {
features.push('包含完整的单元测试和集成测试');
}
if (projectInfo.features.hasDocumentation) {
features.push('提供详细的技术文档和API说明');
}
return features;
}
// 辅助函数:获取性能指标
function getPerformanceMetrics(projectInfo) {
return [
'响应时间主要操作响应时间小于200ms',
'并发处理支持100+并发用户访问',
'数据处理:支持大量数据的高效处理',
'内存使用:合理的内存占用和垃圾回收机制',
'可扩展性:支持水平扩展和负载均衡'
];
}
// 辅助函数:获取软件要求
function getSoftwareRequirements(projectInfo) {
const reqs = [
'操作系统Windows 10+、macOS 10.14+、Linux (Ubuntu 18.04+)',
`运行环境:${projectInfo.languages.join('、')}`
];
if (projectInfo.features.packageManagers.includes('npm')) {
reqs.push('包管理器Node.js 14+ 和 npm 6+');
}
if (projectInfo.features.frameworks.length > 0) {
reqs.push(`框架依赖:${projectInfo.features.frameworks.join('、')}`);
}
return reqs;
}
// 辅助函数:获取系统架构描述
function getSystemArchitecture(projectInfo) {
let arch = '本软件采用';
if (projectInfo.features.type === 'web') {
arch += '前后端分离的架构设计。前端使用';
if (projectInfo.features.frameworks.includes('React')) {
arch += 'React框架';
} else if (projectInfo.features.frameworks.includes('Vue')) {
arch += 'Vue框架';
} else {
arch += '现代JavaScript技术';
}
arch += '后端采用RESTful API设计';
} else {
arch += '分层架构设计,包括表示层、业务逻辑层和数据访问层';
}
arch += '。系统采用模块化设计,各模块之间通过标准接口进行通信,确保系统的松耦合和高内聚。';
return arch;
}
// 辅助函数:获取模块划分
function getModuleDivision(projectInfo) {
const modules = [
{
name: '用户界面模块',
description: '负责用户交互和界面展示,提供直观友好的操作界面'
},
{
name: '业务逻辑模块',
description: '处理核心业务逻辑,实现系统的核心功能'
},
{
name: '数据访问模块',
description: '负责数据的存储、检索和管理,确保数据的一致性和完整性'
},
{
name: '系统配置模块',
description: '管理系统配置和参数设置,支持动态配置和热更新'
},
{
name: '日志监控模块',
description: '记录系统运行日志,提供系统监控和性能分析功能'
}
];
return modules;
}
// 辅助函数:获取开发流程
function getDevelopmentProcess(projectInfo) {
return `软件开发遵循标准的软件工程流程,包括需求分析、系统设计、编码实现、测试验证和部署维护等阶段。
项目采用敏捷开发方法,通过迭代的方式逐步完善功能。在开发过程中,我们重视代码质量,
采用代码审查、单元测试等手段确保软件的可靠性和稳定性。版本控制使用Git确保代码的可追溯性和团队协作效率。`;
}
// 辅助函数:获取核心模块
function getCoreModules(projectInfo) {
return [
{
name: '用户管理模块',
description: '实现用户注册、登录、权限管理等功能',
implementation: '使用JWT进行身份验证支持角色基础的权限控制',
screenshot: '[图1: 用户登录界面]'
},
{
name: '数据处理模块',
description: '负责数据的增删改查和业务逻辑处理',
implementation: '采用ORM技术进行数据库操作支持事务管理和数据缓存',
screenshot: '[图2: 数据管理界面]'
},
{
name: 'API接口模块',
description: '提供RESTful API接口供前端调用',
implementation: '使用标准HTTP协议支持JSON格式数据交换',
screenshot: '[图3: API接口文档]'
}
];
}
// 辅助函数:获取辅助模块
function getAuxiliaryModules(projectInfo) {
return [
{
name: '文件管理模块',
description: '处理文件上传、下载和存储功能'
},
{
name: '消息通知模块',
description: '实现系统消息推送和邮件通知功能'
},
{
name: '报表统计模块',
description: '生成各类统计报表和数据可视化图表'
}
];
}
// 辅助函数获取UI设计描述
function getUIDesignDescription(projectInfo) {
return `用户界面设计遵循简洁易用的原则,采用现代化的设计风格。
界面布局合理,色彩搭配协调,图标和文字清晰可读。
支持响应式设计,能够适配不同分辨率的设备。
提供统一的交互体验,操作流程简单直观。`;
}
// 辅助函数:获取主要界面
function getMainInterfaces(projectInfo) {
return [
'登录/注册界面 - 用户身份验证入口',
'主控制台界面 - 系统功能总览和快速访问',
'数据管理界面 - 数据的增删改查操作',
'系统设置界面 - 系统参数配置和管理',
'用户管理界面 - 用户权限和账户管理',
'报表分析界面 - 数据统计和可视化展示'
];
}
// 辅助函数:获取安装指南
function getInstallationGuide(projectInfo) {
return `1. 环境准备:确保系统满足最低硬件和软件要求
2. 依赖安装:安装必要的运行环境和依赖包
3. 软件部署:将软件部署到目标环境
4. 配置设置:根据实际需求配置系统参数
5. 启动测试:验证软件是否正常运行`;
}
// 辅助函数:获取使用说明
function getUsageInstructions(projectInfo) {
return `1. 用户登录:使用有效的用户名和密码登录系统
2. 功能导航:通过主菜单或导航栏访问各项功能
3. 数据操作:在相应界面中完成数据的增删改查
4. 报表查看:通过报表功能查看统计数据和分析结果
5. 系统管理:管理员可以进行系统配置和用户管理`;
}
// 辅助函数:获取常见问题
function getFAQ(projectInfo) {
return [
{
question: '无法登录系统怎么办?',
answer: '请检查用户名和密码是否正确,如忘记密码可以使用密码找回功能。'
},
{
question: '系统运行缓慢如何解决?',
answer: '请检查网络连接和系统资源使用情况,必要时清理缓存或重启系统。'
},
{
question: '数据导出失败的原因?',
answer: '可能是数据量过大或权限不足,建议分批导出或联系管理员。'
}
];
}
// 辅助函数:获取测试信息
function getTestingInfo(projectInfo) {
let testing = `本软件经过全面的测试验证,包括单元测试、集成测试和系统测试。
`;
if (projectInfo.features.testing.length > 0) {
testing += `使用${projectInfo.features.testing.join('、')}等测试框架进行测试验证。
`;
}
testing += `测试覆盖了主要功能模块、边界条件和异常情况,确保软件的稳定性和可靠性。
性能测试验证了系统在不同负载下的响应能力,安全测试确保了系统的安全性。`;
return testing;
}
// 辅助函数:获取维护信息
function getMaintenanceInfo(projectInfo) {
return `软件维护包括日常维护、故障排除和功能升级等方面。
1. 日常维护:定期检查系统运行状态,备份重要数据
2. 故障排除:及时处理系统异常和用户反馈的问题
3. 功能升级:根据用户需求和技术发展,持续改进软件功能
4. 安全维护:定期更新安全补丁,确保系统安全
5. 性能优化:监控系统性能,持续优化系统响应速度`;
}
module.exports = {
generateManual,
generateManualContent
};