feat(#2): 章程模板填充 - 生成项目章程和干系人登记册Markdown
This commit is contained in:
10
PROGRESS.md
10
PROGRESS.md
@@ -4,17 +4,17 @@
|
||||
|
||||
## 当前状态
|
||||
|
||||
- **当前Issue:** P0-1 项目创建向导页(准备开始)
|
||||
- **状态:** 📋 规划完成,待启动开发
|
||||
- **上次更新:** 2026-04-11 17:50
|
||||
- **当前Issue:** P0-2 章程模板填充(准备开始)
|
||||
- **状态:** 🔨 进行中
|
||||
- **上次更新:** 2026-04-11 18:35
|
||||
- **PRD版本:** v0.2
|
||||
- **Gitea仓库:** http://192.168.120.110:4000/xiaohei/pmp-tool (已创建Issues 1-3)
|
||||
- **Gitea仓库:** http://192.168.120.110:4000/xiaohei/pmp-tool (Issues 1已关闭, 2-3进行中)
|
||||
|
||||
## Issue流水线
|
||||
|
||||
| # | Issue | 描述 | 状态 | 断点备注 |
|
||||
|---|-------|------|------|------|
|
||||
| 1 | P0-1: 项目创建向导页 | 用React+Arco Design实现向导页框架,包含步骤条和基本表单(项目名称、目标) | 🔨 进行中 - Claude Code 工作中
|
||||
| 1 | P0-1: 项目创建向导页 | 用React+Arco Design实现向导页框架,包含步骤条和基本表单(项目名称、目标) | ✅ 已完成 | WizardPage.tsx
|
||||
| 2 | P0-2: 章程模板填充 | 基于用户输入生成项目章节Markdown(目标、范围、里程碑、干系人) | ⬜ 待开发 | |
|
||||
| 3 | P0-3: 飞书消息发送 | Node.js+Hono调用飞书Open API发送文本消息 | ⬜ 待开发 | |
|
||||
| 4 | P0-4: 看板基础组件 | 三列看板+拖拽(dnd-kit) | ⬜ 待开发 | |
|
||||
|
||||
143
src/lib/charter.ts
Normal file
143
src/lib/charter.ts
Normal file
@@ -0,0 +1,143 @@
|
||||
/**
|
||||
* 章程模板填充模块
|
||||
* 根据向导页收集的项目数据,生成符合PMBOK标准的项目章程Markdown
|
||||
*/
|
||||
|
||||
export interface ProjectData {
|
||||
name: string;
|
||||
goal: string;
|
||||
scopeIn: string;
|
||||
scopeOut: string;
|
||||
constraints: string;
|
||||
assumptions: string;
|
||||
stakeholders: Array<{
|
||||
name: string;
|
||||
role: string;
|
||||
power: string;
|
||||
interest: string;
|
||||
strategy: string;
|
||||
}>;
|
||||
milestones: Array<{
|
||||
name: string;
|
||||
targetDate: string;
|
||||
deliverable: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成项目章程 Markdown
|
||||
*/
|
||||
export function generateCharter(data: ProjectData): string {
|
||||
const now = new Date().toISOString().split('T')[0];
|
||||
|
||||
return `# 项目章程
|
||||
|
||||
### 基本信息
|
||||
- **项目名称:** ${data.name || '(待填写)'}
|
||||
- **项目经理:** (待指定)
|
||||
- **发起人/产品负责人:** (待指定)
|
||||
- **开始日期:** ${now}
|
||||
- **目标结束日期:** (待确定)
|
||||
|
||||
### 项目目标
|
||||
|
||||
${data.goal || '(待填写)'}
|
||||
|
||||
### 范围边界
|
||||
|
||||
**包含:**
|
||||
${data.scopeIn ? data.scopeIn.split('\n').map((l) => `- ${l}`).join('\n') : '- (待填写)'}
|
||||
|
||||
**不包含:**
|
||||
${data.scopeOut ? data.scopeOut.split('\n').map((l) => `- ${l}`).join('\n') : '- (待填写)'}
|
||||
|
||||
### 关键里程碑
|
||||
|
||||
| 里程碑 | 目标日期 | 交付物 |
|
||||
|--------|---------|--------|
|
||||
${data.milestones.length > 0
|
||||
? data.milestones.map((m) => `| ${m.name} | ${m.targetDate} | ${m.deliverable} |`).join('\n')
|
||||
: '| (待添加) | | |'}
|
||||
|
||||
### 主要干系人
|
||||
|
||||
| 角色 | 姓名 | 权力 | 利益/关注度 | 参与策略 |
|
||||
|------|------|------|-----------|---------|
|
||||
${data.stakeholders.length > 0
|
||||
? data.stakeholders.map((s) => `| ${s.role} | ${s.name} | ${s.power} | ${s.interest} | ${s.strategy} |`).join('\n')
|
||||
: '| (待添加) | | | | |'}
|
||||
|
||||
### 初步资源
|
||||
- 开发:(待确认)人
|
||||
- 设计:(待确认)人
|
||||
- 测试:(待确认)人
|
||||
- 基础设施预算:(待确认)
|
||||
|
||||
### 约束和假设
|
||||
|
||||
**约束:**
|
||||
${data.constraints ? `- ${data.constraints}` : '- (待填写)'}
|
||||
|
||||
**假设:**
|
||||
${data.assumptions ? `- ${data.assumptions}` : '- (待填写)'}
|
||||
|
||||
---
|
||||
*本文档由 FlowPilot 自动生成于 ${now}*
|
||||
`;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成干系人登记册 Markdown
|
||||
*/
|
||||
export function generateStakeholderRegister(data: ProjectData): string {
|
||||
const now = new Date().toISOString().split('T')[0];
|
||||
|
||||
return `# 干系人登记册
|
||||
|
||||
> 项目:${data.name || '(待填写)'}
|
||||
> 日期:${now}
|
||||
|
||||
## 干系人列表
|
||||
|
||||
| 干系人 | 角色 | 权力 | 利益/关注度 | 态度 | 参与策略 |
|
||||
|--------|------|------|-----------|------|---------|
|
||||
${data.stakeholders.length > 0
|
||||
? data.stakeholders.map((s) => `| ${s.name} | ${s.role} | ${s.power} | ${s.interest} | 待评估 | ${s.strategy} |`).join('\n')
|
||||
: '| (待添加) | | | | | |'}
|
||||
|
||||
## 权力-利益矩阵
|
||||
|
||||
\`\`\`
|
||||
高利益
|
||||
|
|
||||
重点管理 | 保持满意
|
||||
(高权力高利益) | (低权力高利益)
|
||||
————————————+————————————
|
||||
随时告知 | 监督
|
||||
(高权力低利益) | (低权力低利益)
|
||||
|
|
||||
低利益
|
||||
低权力 高权力
|
||||
\`\`\`
|
||||
|
||||
${data.stakeholders
|
||||
.filter((s) => s.power === '高' && s.interest === '高')
|
||||
.map((s) => `- **重点管理**:${s.name}(${s.role})→ ${s.strategy}`)
|
||||
.join('\n')}
|
||||
${data.stakeholders
|
||||
.filter((s) => s.power === '低' && s.interest === '高')
|
||||
.map((s) => `- **保持满意**:${s.name}(${s.role})→ ${s.strategy}`)
|
||||
.join('\n')}
|
||||
${data.stakeholders
|
||||
.filter((s) => s.power === '高' && s.interest === '低')
|
||||
.map((s) => `- **随时告知**:${s.name}(${s.role})→ ${s.strategy}`)
|
||||
.join('\n')}
|
||||
${data.stakeholders
|
||||
.filter((s) => s.power === '低' && s.interest === '低')
|
||||
.map((s) => `- **监督**:${s.name}(${s.role})→ ${s.strategy}`)
|
||||
.join('\n')}
|
||||
|
||||
---
|
||||
*本文档由 FlowPilot 自动生成于 ${now}*
|
||||
`;
|
||||
}
|
||||
Reference in New Issue
Block a user