From c02c5cec0cdf22525c1c8288969b294bb0999b44 Mon Sep 17 00:00:00 2001 From: wangwei Date: Wed, 27 May 2026 18:22:09 +0800 Subject: [PATCH] feat: team-report PPT slides 2-3 background and progress overview --- generate-team-ppt.js | 149 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/generate-team-ppt.js b/generate-team-ppt.js index 73f305b..c06e31c 100644 --- a/generate-team-ppt.js +++ b/generate-team-ppt.js @@ -170,6 +170,155 @@ prs.defineLayout({ name: "LAYOUT_WIDE", width: 13.33, height: 7.5 }); }); } +// ════════════════════════════════════════════════════════ +// Slide 2 — 项目背景 +// ════════════════════════════════════════════════════════ +{ + 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, "汽车行业合规管理三大核心痛点,传统人工方式已无法满足需求", 0.5, 1.4); + slideNum(sl, 2, 10); + + const painPoints = [ + { + topColor: ["B0005A", "E20074"], + icon: "📋", + title: "法规碎片化", + body: "GB、MIIT、UN-ECE、IATF 16949、ISO 45001、EUR-Lex 等多源法规并存,更新频繁,人工跟踪极易遗漏,合规窗口期短。", + }, + { + topColor: ["C05000", "FF8800"], + icon: "⏱", + title: "响应周期长", + body: "从法规发布到内部解读、影响评估、整改计划,人工流程往往需要数周,无法满足快速迭代的合规要求。", + }, + { + topColor: ["00A080", "00D4AA"], + icon: "💼", + title: "人工成本高", + body: "合规专家大量时间消耗在文档检索、条款比对、报告撰写等重复性工作上,高价值判断时间被严重压缩。", + }, + ]; + + painPoints.forEach((p, i) => { + const cx = 0.5 + i * 4.22; + sl.addShape("rect", { + x: cx, y: 1.9, w: 4.0, h: 4.8, + fill: { color: C.bgCard }, line: { color: C.border, width: 0.5 }, + shadow: makeShadow(), + }); + sl.addShape("rect", { + x: cx, y: 1.9, w: 4.0, h: 0.07, + fill: { type: "grad", stops: [{ position: 0, color: p.topColor[0] }, { position: 100, color: p.topColor[1] }] }, + line: { color: p.topColor[0], width: 0 }, + }); + sl.addText(p.icon, { + x: cx + 0.25, y: 2.1, w: 0.7, h: 0.6, + fontSize: 28, fontFace: "Segoe UI Emoji", + }); + sl.addText(p.title, { + x: cx + 0.25, y: 2.75, w: 3.5, h: 0.4, + fontSize: 16, bold: true, color: C.text, fontFace: "Calibri", + }); + sl.addText(p.body, { + x: cx + 0.25, y: 3.25, w: 3.5, h: 2.8, + fontSize: 12, color: C.text2, fontFace: "Calibri Light", + paraSpaceAfter: 4, lineSpacingMultiple: 1.4, + }); + }); +} + +// ════════════════════════════════════════════════════════ +// Slide 3 — 本阶段工作总览 +// ════════════════════════════════════════════════════════ +{ + 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, "5 个功能模块 · 核心 Agent 问答链路全通 · 角色分工一览", 0.5, 1.4); + slideNum(sl, 3, 10); + + const modules = [ + { + icon: "📡", num: "01", name: "法规智能感知", + desc: "六大法规源事件流,影响分级过滤,SSE 流式 AI 影响解读", + status: "⟳ 进行中", statusColor: C.orange, + role: "前端工程师 / 后端工程师", + }, + { + icon: "📚", num: "02", name: "文档知识库管理", + desc: "PDF/Word 入库,5 步 Pipeline 可视化,双引擎 OCR 解析", + status: "⟳ 进行中", statusColor: C.orange, + role: "后端工程师 / AI 工程师", + }, + { + icon: "🔍", num: "03", name: "合规分析审查", + desc: "逐段风险评分,内嵌 Agent 对话,风险聚合仪表盘", + status: "⟳ 进行中", statusColor: C.orange, + role: "全栈工程师", + }, + { + icon: "💬", num: "04", name: "法规 Agent 对话", + desc: "Milvus 向量检索 + LLM 全链路贯通,多轮追问,来源归因", + status: "✓ 核心链路已通", statusColor: C.green, + role: "AI 工程师 / 后端工程师", + }, + { + icon: "🖥️", num: "05", name: "系统状态监控", + desc: "五项基础设施健康检查,17+ API,系统配置总览", + status: "✓ 已完成", statusColor: C.green, + role: "后端工程师 / 运维", + }, + ]; + + modules.forEach((m, i) => { + const ry = 1.85 + i * 1.02; + sl.addShape("rect", { + x: 0.5, y: ry, w: 12.3, h: 0.9, + fill: { color: C.bgCard }, line: { color: C.border, width: 0.5 }, + shadow: makeShadow(), + }); + sl.addText(m.icon, { + x: 0.7, y: ry + 0.18, w: 0.55, h: 0.55, + fontSize: 20, fontFace: "Segoe UI Emoji", + }); + sl.addText(m.num, { + x: 1.3, y: ry + 0.28, w: 0.4, h: 0.28, + fontSize: 8, color: C.text3, fontFace: "Calibri", bold: true, + }); + sl.addText(m.name, { + x: 1.7, y: ry + 0.12, w: 2.8, h: 0.3, + fontSize: 13, bold: true, color: C.text, fontFace: "Calibri", + }); + sl.addText(m.desc, { + x: 1.7, y: ry + 0.46, w: 5.8, h: 0.28, + fontSize: 10, color: C.text2, fontFace: "Calibri Light", + }); + sl.addText(m.status, { + x: 7.7, y: ry + 0.26, w: 2.2, h: 0.28, + fontSize: 9, bold: true, color: m.statusColor, + fill: { color: m.statusColor, transparency: 88 }, + line: { color: m.statusColor, width: 0.5, transparency: 70 }, + align: "center", margin: [2, 6, 2, 6], fontFace: "Calibri", + }); + sl.addText(m.role, { + x: 10.1, y: ry + 0.26, w: 2.5, h: 0.28, + fontSize: 9, color: C.text3, fontFace: "Calibri Light", align: "right", + }); + }); +} + // ── 保存 ──────────────────────────────────────────────── const OUT = "C:/Projects/AIProjects/AIRegulations/AIRegulation-DocAnalysis-Demo/team-report.pptx"; prs.writeFile({ fileName: OUT })