diff --git a/generate-team-ppt.js b/generate-team-ppt.js index 48248e8..328e8eb 100644 --- a/generate-team-ppt.js +++ b/generate-team-ppt.js @@ -704,6 +704,211 @@ prs.defineLayout({ name: "LAYOUT_WIDE", width: 13.33, height: 7.5 }); }); } +// ════════════════════════════════════════════════════════ +// Slide 8 — 四阶段路线图 +// ════════════════════════════════════════════════════════ +{ + const sl = prs.addSlide(); + sl.addShape("rect", { + x: 0, y: 0, w: "100%", h: "100%", + fill: { color: C.bg }, line: { color: C.bg, width: 0 }, + }); + topBar(sl); + sectionLabel(sl, "发展路线", 0.5, 0.55); + sectionTitle(sl, "四阶段推进计划", 0.5, 0.85); + sectionSub(sl, "当前处于第二阶段“Demo 打磨”,核心 Agent 链路已通,正在补全剩余模块", 0.5, 1.4); + slideNum(sl, 8, 10); + + // 时间线底线 + sl.addShape("rect", { x: 1.5, y: 2.35, w: 2.5, h: 0.05, fill: { color: C.green }, line: { color: C.green, width: 0 } }); + sl.addShape("rect", { x: 4.0, y: 2.35, w: 2.5, h: 0.05, fill: { color: C.accent }, line: { color: C.accent, width: 0 } }); + sl.addShape("rect", { x: 6.5, y: 2.35, w: 5.3, h: 0.05, fill: { color: C.border }, line: { color: C.border, width: 0 } }); + + const phases = [ + { + icon: "✓", iconBg: C.green, borderC: C.green, borderW: 1, + label: "阶段 01 · 已完成", title: "技术验证 POC", + items: ["清洁架构 + Ports & Adapters", "Agent 协同框架搭建", "Milvus 向量检索链路打通", "前后端项目结构建立"], + cardBg: "F0FAF6", cardBorder: "A0D8C0", + }, + { + icon: "⟳", iconBg: C.accent, borderC: C.accent, borderW: 2, + label: "阶段 02 · 进行中 ◀ 当前", title: "Demo 打磨", + items: ["5 页面前端已上线", "法规 Agent 对话全通", "Pipeline 已通,OCR 联调中", "EHS 合规 & 监控开发中"], + cardBg: "FEF0F6", cardBorder: "E20074", + }, + { + icon: "3", iconBg: C.text3, borderC: C.border, borderW: 1, + label: "阶段 03 · 待启动", title: "生产部署", + items: ["PLM/ERP/MES 集成", "Agent 能力扩展", "Milvus 集群化部署", "合规 & 监控完善"], + cardBg: C.bgCard, cardBorder: C.border, + }, + { + icon: "4", iconBg: C.text3, borderC: C.border, borderW: 1, + label: "阶段 04 · 待启动", title: "规模推广", + items: ["多租户 & 权限体系", "主动预警 & 订阅", "1-2 行业试点推广", "数据治理 & 安全合规"], + cardBg: C.bgCard, cardBorder: C.border, + }, + ]; + + phases.forEach((p, i) => { + const cx = 0.6 + i * 3.1; + sl.addShape("ellipse", { + x: cx + 0.85, y: 2.1, w: 0.55, h: 0.55, + fill: { color: p.iconBg }, line: { color: p.iconBg, width: 0 }, + }); + sl.addText(p.icon, { + x: cx + 0.85, y: 2.12, w: 0.55, h: 0.5, + fontSize: 11, bold: true, color: "FFFFFF", align: "center", fontFace: "Calibri", + }); + sl.addShape("rect", { + x: cx, y: 2.75, w: 2.85, h: 4.35, + fill: { color: p.cardBg }, line: { color: p.cardBorder, width: p.borderW }, + shadow: makeShadow(), + }); + sl.addText(p.label, { + x: cx + 0.12, y: 2.9, w: 2.6, h: 0.24, + fontSize: 8, bold: true, color: i === 1 ? C.accent : C.text3, fontFace: "Calibri", + }); + sl.addText(p.title, { + x: cx + 0.12, y: 3.18, w: 2.6, h: 0.38, + fontSize: 14, bold: true, color: C.text, fontFace: "Calibri", + }); + p.items.forEach((item, j) => { + sl.addText("▸ " + item, { + x: cx + 0.12, y: 3.65 + j * 0.6, w: 2.62, h: 0.38, + fontSize: 10, color: C.text2, fontFace: "Calibri Light", + }); + }); + }); +} + +// ════════════════════════════════════════════════════════ +// Slide 9 — 下阶段重点 & 分工 +// ════════════════════════════════════════════════════════ +{ + const sl = prs.addSlide(); + sl.addShape("rect", { + x: 0, y: 0, w: "100%", h: "100%", + fill: { color: C.bg }, line: { color: C.bg, width: 0 }, + }); + topBar(sl); + sectionLabel(sl, "下一步", 0.5, 0.55); + sectionTitle(sl, "下阶段重点 & 角色分工", 0.5, 0.85); + sectionSub(sl, "Demo 收尾为核心目标,同步推进业务对齐与技术准备", 0.5, 1.4); + slideNum(sl, 9, 10); + + const actions = [ + { icon: "🎯", title: "Demo 收尾", items: ["补全 parse/embed Pipeline", "接入 1-2 个真实文档场景", "Mock 替换为真实 LLM 调用"] }, + { icon: "🤝", title: "业务对齐", items: ["确认演示场景与业务方", "收集业务方反馈", "需求优先级排序"] }, + { icon: "🔧", title: "技术债清理", items: ["RBAC 权限设计实现", "接入 DocMind 正式账号", "前端性能优化 & KeepAlive"] }, + { icon: "📋", title: "资源 & 决策", items: ["GPU / 算力需求评估", "确认生产 LLM 方案", "确定生产环境部署规划"] }, + ]; + + actions.forEach((a, i) => { + const col = i % 2; + const row = Math.floor(i / 2); + const cx = 0.5 + col * 4.25; + const cy = 1.85 + row * 2.65; + sl.addShape("rect", { + x: cx, y: cy, w: 4.0, h: 2.45, + fill: { color: C.bgCard }, line: { color: C.border, width: 0.5 }, shadow: makeShadow(), + }); + sl.addShape("rect", { + x: cx, y: cy, w: 4.0, h: 0.05, + fill: { color: C.accent }, line: { color: C.accent, width: 0 }, + }); + sl.addText(a.icon, { + x: cx + 0.18, y: cy + 0.15, w: 0.55, h: 0.5, + fontSize: 18, fontFace: "Segoe UI Emoji", + }); + sl.addText(a.title, { + x: cx + 0.75, y: cy + 0.2, w: 3.1, h: 0.38, + fontSize: 13, bold: true, color: C.text, fontFace: "Calibri", + }); + a.items.forEach((item, j) => { + sl.addText("▸ " + item, { + x: cx + 0.18, y: cy + 0.7 + j * 0.52, w: 3.6, h: 0.35, + fontSize: 10, color: C.text2, fontFace: "Calibri Light", + }); + }); + }); + + // 右侧角色分工栏 + sl.addShape("rect", { + x: 9.1, y: 1.85, w: 3.8, h: 5.25, + fill: { color: C.bgCard }, line: { color: C.border, width: 0.5 }, shadow: makeShadow(), + }); + sl.addShape("rect", { + x: 9.1, y: 1.85, w: 3.8, h: 0.05, + fill: { color: C.blue }, line: { color: C.blue, width: 0 }, + }); + sl.addText("角色分工", { + x: 9.3, y: 2.0, w: 3.4, h: 0.35, + fontSize: 13, bold: true, color: C.text, fontFace: "Calibri", + }); + [ + { role: "前端工程师", tasks: "法规感知 UI / 文档管理 / 性能优化" }, + { role: "后端工程师", tasks: "Pipeline 补全 / API 稳定性 / RBAC" }, + { role: "AI 工程师", tasks: "Agent 调优 / LLM 接入 / Embedding" }, + { role: "全栈 / 架构", tasks: "合规分析模块 / 系统集成 / 文档" }, + ].forEach((r, i) => { + const ry = 2.55 + i * 1.12; + sl.addShape("rect", { + x: 9.25, y: ry, w: 3.5, h: 0.9, + fill: { color: C.bgHover }, line: { color: C.border, width: 0.4 }, + }); + sl.addText(r.role, { + x: 9.4, y: ry + 0.1, w: 3.2, h: 0.28, + fontSize: 10, bold: true, color: C.blue, fontFace: "Calibri", + }); + sl.addText(r.tasks, { + x: 9.4, y: ry + 0.42, w: 3.2, h: 0.36, + fontSize: 9, color: C.text2, fontFace: "Calibri Light", + }); + }); +} + +// ════════════════════════════════════════════════════════ +// Slide 10 — 结语 & Q&A +// ════════════════════════════════════════════════════════ +{ + const sl = prs.addSlide(); + sl.addShape("rect", { + x: 0, y: 0, w: "100%", h: "100%", + fill: { color: C.darkBg }, line: { color: C.darkBg, width: 0 }, + }); + sl.addShape("rect", { + x: 0, y: 0, w: "100%", h: 0.06, + fill: { type: "grad", stops: [{ position: 0, color: C.accent }, { position: 100, color: C.accentDk }] }, + line: { color: C.accent, width: 0 }, + }); + sl.addText("感谢聆听", { + x: 1.5, y: 1.8, w: 10.3, h: 1.0, + fontSize: 48, bold: true, color: "FFFFFF", align: "center", fontFace: "Calibri", + }); + sl.addText("AI + 合规智能中枢 · 团队阶段性汇报", { + x: 1.5, y: 2.9, w: 10.3, h: 0.4, + fontSize: 14, color: C.text3, align: "center", fontFace: "Calibri Light", + }); + sl.addShape("rect", { + x: 4.5, y: 3.5, w: 4.33, h: 0.02, + fill: { color: C.accent, transparency: 40 }, line: { color: C.accent, width: 0 }, + }); + sl.addText("Q & A", { + x: 1.5, y: 3.7, w: 10.3, h: 0.85, + fontSize: 44, bold: true, color: C.accent, align: "center", fontFace: "Calibri", + }); + sl.addText("欢迎提问与交流", { + x: 1.5, y: 4.6, w: 10.3, h: 0.4, + fontSize: 15, color: "FFFFFF", align: "center", fontFace: "Calibri Light", + }); + sl.addText("T-Systems · AI 合规项目组 · 2026.05 · INTERNAL CONFIDENTIAL", { + x: 1.0, y: 6.9, w: 11.33, h: 0.28, + fontSize: 9, color: C.text3, align: "center", fontFace: "Calibri Light", + }); +} + // ── 保存 ──────────────────────────────────────────────── const OUT = "C:/Projects/AIProjects/AIRegulations/AIRegulation-DocAnalysis-Demo/team-report.pptx"; prs.writeFile({ fileName: OUT })