byteplan-cli 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/package.json +7 -3
  2. package/skills/byteplan-analysis/SKILL.md +1078 -0
  3. package/skills/byteplan-api/API_REFERENCE.md +249 -0
  4. package/skills/byteplan-api/SKILL.md +96 -0
  5. package/skills/byteplan-api/package.json +16 -0
  6. package/skills/byteplan-api/scripts/api.js +973 -0
  7. package/skills/byteplan-excel/SKILL.md +212 -0
  8. package/skills/byteplan-excel/examples/margin-analysis.json +40 -0
  9. package/skills/byteplan-excel/package.json +12 -0
  10. package/skills/byteplan-excel/pnpm-lock.yaml +68 -0
  11. package/skills/byteplan-excel/scripts/generate_excel.js +156 -0
  12. package/skills/byteplan-html/SKILL.md +490 -0
  13. package/skills/byteplan-html/examples/example-output.html +184 -0
  14. package/skills/byteplan-html/examples/generate-ppt-style-html.js +611 -0
  15. package/skills/byteplan-html/examples/margin-contribution-analysis.json +152 -0
  16. package/skills/byteplan-html/package.json +18 -0
  17. package/skills/byteplan-html/scripts/generate_html.js +517 -0
  18. package/skills/byteplan-ppt/SKILL.md +394 -0
  19. package/skills/byteplan-ppt/examples/margin-contribution-analysis.json +152 -0
  20. package/skills/byteplan-ppt/package.json +16 -0
  21. package/skills/byteplan-ppt/pnpm-lock.yaml +138 -0
  22. package/skills/byteplan-ppt/scripts/check_ppt_overlap.js +318 -0
  23. package/skills/byteplan-ppt/scripts/generate_ppt.js +680 -0
  24. package/skills/byteplan-video/SKILL.md +606 -0
  25. package/skills/byteplan-video/examples/sample-video-data.json +82 -0
  26. package/skills/byteplan-video/remotion-project/package.json +22 -0
  27. package/skills/byteplan-video/remotion-project/pnpm-lock.yaml +1646 -0
  28. package/skills/byteplan-video/remotion-project/remotion.config.ts +6 -0
  29. package/skills/byteplan-video/remotion-project/scene_durations.json +32 -0
  30. package/skills/byteplan-video/remotion-project/scripts/generate_audio.js +279 -0
  31. package/skills/byteplan-video/remotion-project/src/DynamicReport.tsx +172 -0
  32. package/skills/byteplan-video/remotion-project/src/Root.tsx +51 -0
  33. package/skills/byteplan-video/remotion-project/src/SalesReport.tsx +107 -0
  34. package/skills/byteplan-video/remotion-project/src/index.tsx +4 -0
  35. package/skills/byteplan-video/remotion-project/src/scenes/ChartSlide.tsx +201 -0
  36. package/skills/byteplan-video/remotion-project/src/scenes/CoverSlide.tsx +61 -0
  37. package/skills/byteplan-video/remotion-project/src/scenes/EndSlide.tsx +60 -0
  38. package/skills/byteplan-video/remotion-project/src/scenes/InsightSlide.tsx +101 -0
  39. package/skills/byteplan-video/remotion-project/src/scenes/KpiSlide.tsx +84 -0
  40. package/skills/byteplan-video/remotion-project/src/scenes/RecommendationSlide.tsx +100 -0
  41. package/skills/byteplan-video/remotion-project/tsconfig.json +13 -0
  42. package/skills/byteplan-video/remotion-project/video_data.json +76 -0
  43. package/skills/byteplan-video/scripts/generate_video.js +270 -0
  44. package/skills/byteplan-video/templates/package.json +31 -0
  45. package/skills/byteplan-video/templates/pnpm-lock.yaml +2200 -0
  46. package/skills/byteplan-video/templates/remotion.config.ts +9 -0
  47. package/skills/byteplan-video/templates/scripts/generate-audio.ts +55 -0
  48. package/skills/byteplan-video/templates/src/components/BarChartScene.tsx +153 -0
  49. package/skills/byteplan-video/templates/src/components/InsightScene.tsx +135 -0
  50. package/skills/byteplan-video/templates/src/components/LineChartScene.tsx +214 -0
  51. package/skills/byteplan-video/templates/src/components/SceneFactory.tsx +34 -0
  52. package/skills/byteplan-video/templates/src/components/SummaryScene.tsx +155 -0
  53. package/skills/byteplan-video/templates/src/components/TitleScene.tsx +130 -0
  54. package/skills/byteplan-video/templates/src/compositions/AnalysisVideo.tsx +39 -0
  55. package/skills/byteplan-video/templates/src/index.tsx +28 -0
  56. package/skills/byteplan-video/templates/src/register-root.tsx +4 -0
  57. package/skills/byteplan-video/templates/src/storyboard/types.ts +46 -0
  58. package/skills/byteplan-video/templates/tsconfig.json +17 -0
  59. package/skills/byteplan-video/templates/tsconfig.scripts.json +13 -0
  60. package/skills/byteplan-word/SKILL.md +233 -0
  61. package/skills/byteplan-word/package.json +12 -0
  62. package/skills/byteplan-word/pnpm-lock.yaml +120 -0
  63. package/skills/byteplan-word/scripts/generate_word.js +548 -0
  64. package/src/cli.js +4 -0
  65. package/src/commands/skills.js +279 -0
@@ -0,0 +1,394 @@
1
+ ---
2
+ name: byteplan-ppt
3
+ description: 根据已有的分析数据生成 PPT 报告。PPT风格与 byteplan-html 完全一致,包括渐变背景、卡片式设计、大字体展示。使用微软雅黑字体。需要先使用 byteplan-analysis skill 完成数据分析。
4
+ ---
5
+
6
+ # BytePlan PPT 报告 Skill
7
+
8
+ ## 概述
9
+
10
+ 此 Skill 根据已有的分析数据生成 PPT 报告,**设计风格与 byteplan-html 完全一致**:
11
+
12
+ 1. **检查数据** - 确认数据文件存在
13
+ 2. **组装数据** - 将分析数据转换为 PPT 格式
14
+ 3. **生成 PPT** - 使用 PptxGenJS 创建演示文稿
15
+ 4. **检查质量** - 执行元素重叠检查
16
+
17
+ **设计原则**:PPT 与 HTML 风格统一,确保演示效果一致。
18
+
19
+ **前置条件**:必须先使用 [byteplan-analysis](../byteplan-analysis/SKILL.md) skill 完成数据分析。
20
+
21
+ ---
22
+
23
+ ## 设计规范(与 HTML 一致)
24
+
25
+ ### 1. 页面结构(11页标准模板)
26
+
27
+ | 页码 | 内容 | 背景风格 |
28
+ |------|------|----------|
29
+ | 1 | 封面 | 紫色渐变 |
30
+ | 2 | 目录 | 深色渐变 |
31
+ | 3 | 核心发现摘要(三卡片) | 深蓝色渐变 |
32
+ | 4 | 关键指标概览(四卡片) | 深色渐变 |
33
+ | 5 | 数据图表1(柱状图) | 深色渐变 |
34
+ | 6 | 数据图表2(贡献率) | 深蓝色渐变 |
35
+ | 7 | 排行榜(TOP8) | 深色渐变 |
36
+ | 8 | 数据明细表 | 深色渐变 |
37
+ | 9 | 关键洞察(四卡片) | 深蓝色渐变 |
38
+ | 10 | 行动建议(四卡片) | 深色渐变 |
39
+ | 11 | 结尾页 | 紫色渐变 |
40
+
41
+ ### 2. 颜色规范
42
+
43
+ ```
44
+ 主题色:
45
+ - purple: #667eea(主强调色)
46
+ - dark-purple: #764ba2(渐变终点色)
47
+
48
+ 背景色:
49
+ - dark-bg: #1a1a2e(主背景)
50
+ - dark-bg-2: #16213e(次背景)
51
+ - dark-bg-3: #0f3460(强调背景)
52
+
53
+ 文字色:
54
+ - text-white: #FFFFFF(标题文字)
55
+ - text-gray: #CBD5E1(正文文字)
56
+ - text-muted: #94A3B8(辅助文字)
57
+
58
+ 数据色:
59
+ - green: #4ade80(正向数据/数值)
60
+ - blue: #60a5fa(链接/贡献率)
61
+ - pink: #f472b6(图表色)
62
+ - orange: #fbbf24(警告/排名)
63
+ - red: #f87171(负向数据)
64
+ - cyan: #06B6D4(图表色)
65
+ ```
66
+
67
+ ### 3. 字体规范
68
+
69
+ ```
70
+ 字体:微软雅黑(Microsoft YaHei)
71
+
72
+ 封面标题:44pt, Bold
73
+ 页面标题:28pt, Bold
74
+ 卡片标题:16-26pt, Bold
75
+ 正文内容:12-14pt
76
+ 数据数值:22-24pt, Bold, Green
77
+ 贡献率:14pt, Blue
78
+ ```
79
+
80
+ ### 4. 渐变背景
81
+
82
+ ```
83
+ 封面/结尾页:
84
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%)
85
+
86
+ 内容页(交替使用):
87
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)
88
+ background: linear-gradient(135deg, #0f3460 0%, #16213e 100%)
89
+ background: linear-gradient(135deg, #16213e 0%, #1a1a2e 100%)
90
+ ```
91
+
92
+ ### 5. 卡片设计
93
+
94
+ **重要规则:洞察卡片和建议卡片使用直角(不使用圆角)**
95
+
96
+ ```
97
+ 基础卡片:
98
+ - 背景:rgba(255,255,255,0.1) [白色10%透明度]
99
+ - 边框:2px solid rgba(255,255,255,0.2)
100
+
101
+ 洞察卡片(直角):
102
+ - 背景:紫色/橙色透明背景(transparency: 80%)
103
+ - 左边框:5px solid #667eea(紫色)或 #fbbf24(橙色)
104
+ - 圆角:无(使用直角 rect)
105
+ - 普通洞察:紫色背景 + 紫色左边框
106
+ - 警告洞察:橙色背景 + 橙色左边框 + 橙色标题
107
+
108
+ 建议卡片(直角):
109
+ - 背景:rgba(74,222,128,0.2) [绿色20%透明度]
110
+ - 左边框:5px solid #4ade80(绿色)
111
+ - 圆角:无(使用直角 rect)
112
+ ```
113
+
114
+ ### 6. 图表配色
115
+
116
+ ```javascript
117
+ // 柱状图颜色(与 HTML 一致)
118
+ chartColors: ['#4ade80', '#60a5fa', '#f472b6', '#667eea', '#fbbf24']
119
+
120
+ // 排行榜第一名高亮
121
+ backgroundColor: '#4ade80' // 第一名绿色
122
+ backgroundColor: '#60a5fa' // 第二、三名蓝色
123
+ backgroundColor: '#667eea' // 其他紫色
124
+ ```
125
+
126
+ ---
127
+
128
+ ## 数据格式
129
+
130
+ ### 新格式(推荐):使用 charts 数组
131
+
132
+ 支持动态数量的图表,与 byteplan-html 保持一致:
133
+
134
+ ```json
135
+ {
136
+ "title": "报告标题",
137
+ "subtitle": "副标题",
138
+ "period": "2026年3月",
139
+ "sections": ["章节1", "章节2"],
140
+ "summary": [
141
+ { "rank": "🥇 第一名", "name": "项目A", "type": "类型", "value": "¥1,000,000", "rate": "贡献率 68%" }
142
+ ],
143
+ "kpis": [
144
+ { "icon": "💰", "label": "指标名称", "value": "1,000", "unit": "单位" }
145
+ ],
146
+ "charts": [
147
+ {
148
+ "title": "图表标题1",
149
+ "type": "bar",
150
+ "data": [{ "name": "类别A", "value": 100 }]
151
+ },
152
+ {
153
+ "title": "图表标题2",
154
+ "type": "horizontalBar",
155
+ "data": [{ "name": "类别A", "value": 68 }]
156
+ }
157
+ ],
158
+ "tableData": {
159
+ "title": "明细表",
160
+ "columns": ["列1", "列2"],
161
+ "rows": [["值1", "值2"]]
162
+ },
163
+ "insights": [
164
+ { "title": "洞察标题", "content": "洞察内容", "warning": false }
165
+ ],
166
+ "recommendations": [
167
+ { "title": "建议标题", "content": "建议内容" }
168
+ ],
169
+ "source": "BytePlan 数据平台"
170
+ }
171
+ ```
172
+
173
+ **图表类型说明**:
174
+
175
+ | type 值 | 图表类型 | 说明 |
176
+ |---------|----------|------|
177
+ | `"bar"` | 柱状图 | 默认类型,适合数值对比 |
178
+ | `"horizontalBar"` | 横向条形图 | 适合排行榜、百分比展示 |
179
+ | `"ranking"` | 排行榜 | 第一名绿色高亮,第二三名蓝色 |
180
+
181
+ ### 旧格式(向后兼容)
182
+
183
+ ```json
184
+ {
185
+ "title": "报告标题",
186
+ "subtitle": "副标题",
187
+ "period": "2026年3月",
188
+ "sections": ["章节1", "章节2", "章节3", "章节4"],
189
+ "summary": [
190
+ { "rank": "🥇 第一名", "name": "项目A", "type": "类型", "value": "¥1,000,000", "rate": "贡献率 68%" }
191
+ ],
192
+ "kpis": [
193
+ { "icon": "💰", "label": "指标名称", "value": "1,000", "unit": "单位" }
194
+ ],
195
+ "barChart": {
196
+ "title": "图表标题",
197
+ "data": [{ "name": "类别A", "value": 100 }]
198
+ },
199
+ "ratioData": {
200
+ "title": "贡献率标题",
201
+ "data": [{ "name": "类别A", "value": 68 }]
202
+ },
203
+ "rankingData": {
204
+ "title": "排行榜标题",
205
+ "data": [{ "name": "项目A", "value": 100 }]
206
+ },
207
+ "tableData": {
208
+ "title": "明细表",
209
+ "columns": ["列1", "列2"],
210
+ "rows": [["值1", "值2"]]
211
+ },
212
+ "insights": [
213
+ { "title": "洞察标题", "content": "洞察内容", "warning": false }
214
+ ],
215
+ "recommendations": [
216
+ { "title": "建议标题", "content": "建议内容" }
217
+ ],
218
+ "source": "BytePlan 数据平台"
219
+ }
220
+ ```
221
+
222
+ **注意**:推荐使用新的 `charts` 数组格式,更灵活且与 HTML 报告统一。
223
+
224
+ ---
225
+
226
+ ## 使用方法
227
+
228
+ ### 方式一:命令行
229
+
230
+ ```bash
231
+ # 使用默认数据文件 (ppt_data.json)
232
+ cd skills/byteplan-ppt
233
+ pnpm run generate -o report.pptx
234
+
235
+ # 指定数据文件
236
+ pnpm run generate -o report.pptx -d /path/to/data.json
237
+
238
+ # 检查质量
239
+ pnpm run check report.pptx
240
+ ```
241
+
242
+ ### 方式二:Node.js 调用
243
+
244
+ ```javascript
245
+ import { generatePpt } from './scripts/generate_ppt.js';
246
+
247
+ generatePpt('report.pptx', 'data.json');
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 完整示例
253
+
254
+ ### 1. 准备数据文件
255
+
256
+ ```bash
257
+ # 从分析结果生成数据文件
258
+ # 确保 ppt_data.json 包含所有必要字段
259
+ ```
260
+
261
+ ### 2. 生成 PPT
262
+
263
+ ```bash
264
+ cd skills/byteplan-ppt
265
+ pnpm run generate -o 边际贡献分析报告.pptx -d ../ppt_data.json
266
+ ```
267
+
268
+ ### 3. 检查质量
269
+
270
+ ```bash
271
+ pnpm run check 边际贡献分析报告.pptx
272
+ ```
273
+
274
+ ### 4. 打开查看
275
+
276
+ ```bash
277
+ open 边际贡献分析报告.pptx
278
+ ```
279
+
280
+ ---
281
+
282
+ ## 与 HTML 风格对照
283
+
284
+ | 元素 | HTML | PPT |
285
+ |------|------|-----|
286
+ | 封面背景 | 紫色渐变 #667eea → #764ba2 | 相同 |
287
+ | 内容页背景 | 深色渐变 #1a1a2e → #16213e | 相同 |
288
+ | 字体 | 微软雅黑 | 微软雅黑 |
289
+ | 标题字号 | 44px (封面) / 28px (页面) | 44pt / 28pt |
290
+ | 卡片样式 | 圆角 + 半透明背景 | 相同 |
291
+ | 数据颜色 | 绿色 #4ade80 | 相同 |
292
+ | 图表配色 | 5色循环 | 相同 |
293
+ | 洞察卡片 | 左边框紫色/橙色 | 相同 |
294
+ | 建议卡片 | 左边框绿色 | 相同 |
295
+
296
+ ---
297
+
298
+ ## 完整示例
299
+
300
+ ### 示例:跨境电商边际贡献分析
301
+
302
+ 本案例展示如何使用 BytePlan 平台数据生成完整的 PPT 报告。
303
+
304
+ #### 1. 准备数据文件
305
+
306
+ 参考示例数据文件:`examples/margin-contribution-analysis.json`
307
+
308
+ ```bash
309
+ # 复制示例数据
310
+ cp examples/margin-contribution-analysis.json ppt_data.json
311
+ ```
312
+
313
+ #### 2. 生成 PPT
314
+
315
+ ```bash
316
+ cd skills/byteplan-ppt
317
+ pnpm run generate -o 边际贡献分析报告.pptx
318
+ ```
319
+
320
+ #### 3. 检查质量
321
+
322
+ ```bash
323
+ pnpm run check 边际贡献分析报告.pptx
324
+ ```
325
+
326
+ #### 4. 预期输出
327
+
328
+ 生成的 PPT 包含以下内容:
329
+
330
+ | 页码 | 内容 | 说明 |
331
+ |------|------|------|
332
+ | 1 | 封面 | 紫色渐变背景,标题"跨境电商边际贡献分析报告" |
333
+ | 2 | 目录 | 8个章节的双列布局 |
334
+ | 3 | 核心发现摘要 | 三卡片展示:天猫(第一名)、CD120P(第二名)、美国(第三名) |
335
+ | 4 | 关键指标概览 | 四卡片KPI:最大贡献、最高贡献率、核心市场、风险项 |
336
+ | 5 | 渠道边际贡献对比 | 5个渠道的柱状图对比 |
337
+ | 6 | 渠道贡献率对比 | 横向条形图展示各渠道贡献率 |
338
+ | 7 | TOP8排行榜 | 横向条形图,第一名绿色高亮 |
339
+ | 8 | 数据明细表 | 8条记录的明细表,负值红色显示 |
340
+ | 9 | 关键洞察 | 四卡片:三个发现 + 一个风险提示(橙色边框) |
341
+ | 10 | 行动建议 | 四卡片(绿色边框) |
342
+ | 11 | 结尾页 | 紫色渐变背景,"谢谢观看" |
343
+
344
+ #### 5. 示例数据结构
345
+
346
+ ```json
347
+ {
348
+ "title": "跨境电商边际贡献分析报告",
349
+ "subtitle": "找出贡献最大的要素",
350
+ "period": "2026年3月31日",
351
+ "sections": ["核心发现摘要", "关键指标概览", ...],
352
+ "summary": [
353
+ { "rank": "🥇 第一名", "name": "天猫", "type": "渠道", "value": "¥16,273,934", "rate": "贡献率 68%" }
354
+ ],
355
+ "kpis": [
356
+ { "icon": "💰", "label": "最大边际贡献", "value": "16,273,934", "unit": "元(天猫)" }
357
+ ],
358
+ "barChart": {
359
+ "title": "渠道边际贡献对比",
360
+ "data": [{ "name": "天猫", "value": 16273934 }]
361
+ },
362
+ "ratioData": {
363
+ "title": "渠道边际贡献率对比",
364
+ "data": [{ "name": "天猫", "value": 68 }]
365
+ },
366
+ "rankingData": {
367
+ "title": "边际贡献 TOP8 排行榜",
368
+ "data": [{ "name": "天猫 (渠道)", "value": 16273934 }]
369
+ },
370
+ "tableData": {
371
+ "title": "边际贡献明细表",
372
+ "columns": ["要素名称", "类型", "收入(元)", "边际贡献(元)", "贡献率"],
373
+ "rows": [["天猫", "渠道", "17,742,456", "16,273,934", "68%"]]
374
+ },
375
+ "insights": [
376
+ { "title": "天猫渠道表现卓越", "content": "以68%贡献率成为最大贡献来源。", "warning": false },
377
+ { "title": "⚠️ 存在亏损产品", "content": "CD130P-B和CD140P边际贡献为负。", "warning": true }
378
+ ],
379
+ "recommendations": [
380
+ { "title": "加大天猫渠道投入", "content": "增加营销预算和运营资源。" }
381
+ ],
382
+ "source": "BytePlan 数据平台 · 跨境电商租户"
383
+ }
384
+ ```
385
+
386
+ ---
387
+
388
+ ## 注意事项
389
+
390
+ - **字体要求**:必须使用微软雅黑,确保中英文显示效果
391
+ - **PPT 页数**:标准 11 页
392
+ - **元素检查**:生成后必须执行重叠检查
393
+ - **与 HTML 一致**:设计风格与 byteplan-html 完全统一
394
+ - **包管理器**:使用 pnpm 安装依赖
@@ -0,0 +1,152 @@
1
+ {
2
+ "title": "跨境电商边际贡献分析报告",
3
+ "subtitle": "找出贡献最大的要素",
4
+ "period": "2026年3月31日",
5
+ "sections": [
6
+ "核心发现摘要",
7
+ "关键指标概览",
8
+ "渠道贡献分析",
9
+ "贡献率对比",
10
+ "贡献排行榜",
11
+ "数据明细表",
12
+ "关键洞察",
13
+ "行动建议"
14
+ ],
15
+ "summary": [
16
+ {
17
+ "rank": "🥇 第一名",
18
+ "name": "天猫",
19
+ "type": "渠道",
20
+ "value": "¥16,273,934",
21
+ "rate": "贡献率 68%"
22
+ },
23
+ {
24
+ "rank": "🥈 第二名",
25
+ "name": "CD120P",
26
+ "type": "产品",
27
+ "value": "¥5,635,209",
28
+ "rate": "贡献率 74%"
29
+ },
30
+ {
31
+ "rank": "🥉 第三名",
32
+ "name": "美国",
33
+ "type": "国家",
34
+ "value": "¥4,983,568",
35
+ "rate": "贡献率 65%"
36
+ }
37
+ ],
38
+ "kpis": [
39
+ {
40
+ "icon": "💰",
41
+ "label": "最大边际贡献",
42
+ "value": "16,273,934",
43
+ "unit": "元(天猫)"
44
+ },
45
+ {
46
+ "icon": "📈",
47
+ "label": "最高贡献率",
48
+ "value": "74%",
49
+ "unit": "(CD120P)"
50
+ },
51
+ {
52
+ "icon": "🌍",
53
+ "label": "核心市场贡献",
54
+ "value": "4,983,568",
55
+ "unit": "元(美国)"
56
+ },
57
+ {
58
+ "icon": "⚠️",
59
+ "label": "负贡献要素",
60
+ "value": "2",
61
+ "unit": "个(需关注)"
62
+ }
63
+ ],
64
+ "barChart": {
65
+ "title": "渠道边际贡献对比",
66
+ "data": [
67
+ { "name": "天猫", "value": 16273934 },
68
+ { "name": "Amazon", "value": 2785991 },
69
+ { "name": "Walmart", "value": 2528805 },
70
+ { "name": "Amazon_VC", "value": 1712695 },
71
+ { "name": "Shopify", "value": 624534 }
72
+ ]
73
+ },
74
+ "ratioData": {
75
+ "title": "渠道边际贡献率对比",
76
+ "data": [
77
+ { "name": "天猫", "value": 68 },
78
+ { "name": "Amazon", "value": 12 },
79
+ { "name": "Walmart", "value": 11 },
80
+ { "name": "Amazon_VC", "value": 7 },
81
+ { "name": "Shopify", "value": 3 }
82
+ ]
83
+ },
84
+ "rankingData": {
85
+ "title": "边际贡献 TOP8 排行榜",
86
+ "data": [
87
+ { "name": "天猫 (渠道)", "value": 16273934 },
88
+ { "name": "CD120P (产品)", "value": 5635209 },
89
+ { "name": "美国 (国家)", "value": 4983568 },
90
+ { "name": "Amazon (渠道)", "value": 2785991 },
91
+ { "name": "品牌01", "value": 3059742 },
92
+ { "name": "Walmart (渠道)", "value": 2528805 },
93
+ { "name": "英国 (国家)", "value": 1712695 },
94
+ { "name": "品牌03", "value": 2445409 }
95
+ ]
96
+ },
97
+ "tableData": {
98
+ "title": "边际贡献明细表",
99
+ "columns": ["要素名称", "类型", "收入(元)", "边际贡献(元)", "贡献率"],
100
+ "rows": [
101
+ ["天猫", "渠道", "17,742,456", "16,273,934", "68%"],
102
+ ["CD120P", "产品", "27,538,152", "5,635,209", "74%"],
103
+ ["美国", "国家", "35,434,599", "4,983,568", "65%"],
104
+ ["Amazon", "渠道", "29,469,759", "2,785,991", "12%"],
105
+ ["品牌01", "品牌", "10,447,912", "3,059,742", "40%"],
106
+ ["Walmart", "渠道", "6,583,724", "2,528,805", "11%"],
107
+ ["CD130P-B", "产品", "3,134,013", "-654,608", "-9%"],
108
+ ["CD140P", "产品", "3,638,106", "-388,318", "-5%"]
109
+ ]
110
+ },
111
+ "insights": [
112
+ {
113
+ "title": "天猫渠道表现卓越",
114
+ "content": "以68%贡献率和16,273,934元贡献额,成为最大贡献来源,运营效率高。",
115
+ "warning": false
116
+ },
117
+ {
118
+ "title": "CD120P效率最高",
119
+ "content": "贡献率达74%,每单位收入创造边际贡献最大,是明星产品。",
120
+ "warning": false
121
+ },
122
+ {
123
+ "title": "美国市场是核心",
124
+ "content": "贡献4,983,568元,贡献率65%,覆盖面广、效益稳定。",
125
+ "warning": false
126
+ },
127
+ {
128
+ "title": "⚠️ 存在亏损产品",
129
+ "content": "CD130P-B和CD140P边际贡献为负,需评估定价策略。",
130
+ "warning": true
131
+ }
132
+ ],
133
+ "recommendations": [
134
+ {
135
+ "title": "加大天猫渠道投入",
136
+ "content": "增加营销预算和运营资源,强化最大贡献渠道。"
137
+ },
138
+ {
139
+ "title": "推广CD120P产品",
140
+ "content": "扩大生产规模并加强推广力度,打造明星产品。"
141
+ },
142
+ {
143
+ "title": "深耕美国市场",
144
+ "content": "优化物流、客服和本地化服务,巩固核心市场。"
145
+ },
146
+ {
147
+ "title": "调整亏损产品",
148
+ "content": "对CD130P-B和CD140P进行成本分析和定价评估。"
149
+ }
150
+ ],
151
+ "source": "BytePlan 数据平台 · 跨境电商租户"
152
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "byteplan-ppt",
3
+ "version": "1.0.0",
4
+ "description": "BytePlan PPT 报告生成",
5
+ "type": "module",
6
+ "scripts": {
7
+ "generate": "node scripts/generate_ppt.js",
8
+ "check": "node scripts/check_ppt_overlap.js",
9
+ "example": "node scripts/generate_ppt.js -o example-output.pptx -d examples/margin-contribution-analysis.json"
10
+ },
11
+ "dependencies": {
12
+ "pptxgenjs": "^3.12.0",
13
+ "jszip": "^3.10.1",
14
+ "xml2js": "^0.6.2"
15
+ }
16
+ }
@@ -0,0 +1,138 @@
1
+ lockfileVersion: '6.0'
2
+
3
+ dependencies:
4
+ jszip:
5
+ specifier: ^3.10.1
6
+ version: 3.10.1
7
+ pptxgenjs:
8
+ specifier: ^3.12.0
9
+ version: 3.12.0
10
+ xml2js:
11
+ specifier: ^0.6.2
12
+ version: 0.6.2
13
+
14
+ packages:
15
+
16
+ /@types/node@18.19.130:
17
+ resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
18
+ dependencies:
19
+ undici-types: 5.26.5
20
+ dev: false
21
+
22
+ /core-util-is@1.0.3:
23
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
24
+ dev: false
25
+
26
+ /https@1.0.0:
27
+ resolution: {integrity: sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==}
28
+ dev: false
29
+
30
+ /image-size@1.2.1:
31
+ resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
32
+ engines: {node: '>=16.x'}
33
+ hasBin: true
34
+ dependencies:
35
+ queue: 6.0.2
36
+ dev: false
37
+
38
+ /immediate@3.0.6:
39
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
40
+ dev: false
41
+
42
+ /inherits@2.0.4:
43
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
44
+ dev: false
45
+
46
+ /isarray@1.0.0:
47
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
48
+ dev: false
49
+
50
+ /jszip@3.10.1:
51
+ resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
52
+ dependencies:
53
+ lie: 3.3.0
54
+ pako: 1.0.11
55
+ readable-stream: 2.3.8
56
+ setimmediate: 1.0.5
57
+ dev: false
58
+
59
+ /lie@3.3.0:
60
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
61
+ dependencies:
62
+ immediate: 3.0.6
63
+ dev: false
64
+
65
+ /pako@1.0.11:
66
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
67
+ dev: false
68
+
69
+ /pptxgenjs@3.12.0:
70
+ resolution: {integrity: sha512-ZozkYKWb1MoPR4ucw3/aFYlHkVIJxo9czikEclcUVnS4Iw/M+r+TEwdlB3fyAWO9JY1USxJDt0Y0/r15IR/RUA==}
71
+ dependencies:
72
+ '@types/node': 18.19.130
73
+ https: 1.0.0
74
+ image-size: 1.2.1
75
+ jszip: 3.10.1
76
+ dev: false
77
+
78
+ /process-nextick-args@2.0.1:
79
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
80
+ dev: false
81
+
82
+ /queue@6.0.2:
83
+ resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
84
+ dependencies:
85
+ inherits: 2.0.4
86
+ dev: false
87
+
88
+ /readable-stream@2.3.8:
89
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
90
+ dependencies:
91
+ core-util-is: 1.0.3
92
+ inherits: 2.0.4
93
+ isarray: 1.0.0
94
+ process-nextick-args: 2.0.1
95
+ safe-buffer: 5.1.2
96
+ string_decoder: 1.1.1
97
+ util-deprecate: 1.0.2
98
+ dev: false
99
+
100
+ /safe-buffer@5.1.2:
101
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
102
+ dev: false
103
+
104
+ /sax@1.6.0:
105
+ resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
106
+ engines: {node: '>=11.0.0'}
107
+ dev: false
108
+
109
+ /setimmediate@1.0.5:
110
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
111
+ dev: false
112
+
113
+ /string_decoder@1.1.1:
114
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
115
+ dependencies:
116
+ safe-buffer: 5.1.2
117
+ dev: false
118
+
119
+ /undici-types@5.26.5:
120
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
121
+ dev: false
122
+
123
+ /util-deprecate@1.0.2:
124
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
125
+ dev: false
126
+
127
+ /xml2js@0.6.2:
128
+ resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
129
+ engines: {node: '>=4.0.0'}
130
+ dependencies:
131
+ sax: 1.6.0
132
+ xmlbuilder: 11.0.1
133
+ dev: false
134
+
135
+ /xmlbuilder@11.0.1:
136
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
137
+ engines: {node: '>=4.0'}
138
+ dev: false