Install
openclaw skills install @mebusw/jackyshen-gen-quotation生成专业PDF报价单、培训提案和商业文档。当用户提及报价单、报价、提案、培训方案、商业文档、生成PDF,或提供培训服务、咨询费用、定价详情时触发。支持中英文内容。
openclaw skills install @mebusw/jackyshen-gen-quotation从自然语言、Markdown 或结构化数据生成品牌一致、风格专业的 PDF 报价单和培训提案。
始终使用 scripts/render_quotation.py 中的 Python 脚本,不要重写 Node.js 或 JavaScript 脚本。
Usage: python scripts/render_quotation.py output/quotation_data.json templates/modern/quotation.html output/quotation.pdf
中间渲染模版文件和最终输出都必须在当前工作路径下的 ./output
用户输入(自然语言 / Markdown / 结构化数据)
↓
LLM 结构化提取
↓
QuoteDocument Schema (Pydantic)
↓
Jinja2 模板渲染
↓
HTML 输出
↓
Playwright PDF
↓
PDF 输出
主色: #083A67(深海蓝 Navy)
辅色: #4F82BA(钢蓝 Steel Blue)
点缀色: #FFFFFF(白色 White)
背景色: #FFFFFF(白色)
Logo 位置:页面右上角。
根据原始输入自动判断生成的类型,如果不确定,询问用户:"请确认文档类型"
| 类型 | "doc_title"值 | 关键字段 |
|---|---|---|
quotation | "报价单 / Quotation" | customer_company, pricing_items, total, payment_terms |
outline | "培训大纲 / Outline" | outline, modules, objectives |
mixed | "培训方案及报价 / Proposal" | 两者兼有 |
不明确时,默认为 mixed。
按顺序收集以下字段,如有缺失请询问用户。
我司信息
logo.png,脚本会自动在 skill 目录下查找)客户信息
文档信息
quotation类型特有的必需信息outline类型的必需信息logo.png 即可,脚本会自动在 skill 目录下查找, primary_color, secondary_color, accent_color}输出必须匹配以下 Schema 的结构化 JSON:
QuoteDocument:
company: CompanyInfo # 供方信息
customer: CustomerInfo # 需方信息
quotation: QuotationInfo # 文档基本信息
doc_type: str # "quotation" | "outline" | "mixed" — 控制模板条件渲染
pricing_items: list[PricingItem] # 报价明细(doc_type != "outline" 时显示)
pricing_summary: PricingSummary # subtotal, tax_rate, tax_amount, total_amount, currency, tax_included
payment_terms: PaymentTerms # 付款条款
tax: TaxInfo # 税费
validity: ValidityInfo # 有效期
outline: CourseOutline | None # 课程大纲(doc_type != "quotation" 时显示)
notes: list[str] = [] # 备注
signature: SignatureInfo # 签章信息(doc_type != "outline" 时显示)
branding: BrandingConfig # 品牌配置
PricingItem:
category: str # training | travel | interview | consulting | material | other
service_name: str # 服务名称
unit_price: float # 单价
quantity: float # 数量
unit: str # 天/人/次/项
days: float | None # 天数(可选)
subtotal: float # 小计
remarks: str | None # 备注(可选)
CourseOutline:
title: str
modules: list[CourseModule]
learning_objectives: list[str] = []
target_audience: list[str] = []
CourseModule:
module_title: str
duration: str | None # 如 "2小时"
topics: list[str]
exercises: list[str] = []
CompanyInfo:
name: str # 公司名称
address: str # 地址
tel: str # 电话
email: str | None # 邮箱(可选)
slogan: str | None # 口号(可选)
CustomerInfo:
name: str # 客户名称
contact_person: str | None # 联系人(可选)
PricingSummary:
subtotal: float # 小计
tax_rate: float # 税率(默认 0)
tax_amount: float # 税费(默认 0)
total_amount: float # 总计(必填,模板依赖此字段)
currency: str # 币种(默认 "CNY")
tax_included: bool # 含税否(默认 false)
PaymentTerms:
payment_method: str | None # 付款方式(如"银行转账")
payment_schedule: str | None # 付款阶段(如"课程结束后结算")
ValidityInfo:
valid_until: str # 有效期,格式 YYYY/M/D(默认当前日期+90天)
SignatureInfo:
account_name: str # 账户名称
bank_name: str # 开户行
account_number: str # 银行账号
BrandingConfig:
logo_path: str # 填 "logo.png",脚本自动在 skill 目录下查找
primary_color: str # 主色(默认 #083A67)
secondary_color: str # 辅色(默认 #4F82BA)
accent_color: str # 点缀色(默认 #FFFFFF)
使用 Jinja2 模板方式。禁止 LLM 直接生成 HTML。
模板路径: templates/modern/quotation.html
渲染后的模版路径: output/quotation_output.html
模板使用 UPerform 品牌主题:
#083A67) + 白色背景#083A67)#1a1a1a) + 白色背景核心规则: LLM 输出 JSON → JSON 传入 Jinja2 → Jinja2 生成 HTML → Playwright 渲染 PDF。LLM 绝不直接写 HTML。
默认输出:PDF 文件,通过 Playwright page.pdf() 生成。
仅预览 HTML 时,使用 html 输出。
当用户说"生成报价单"或类似内容时,回复:
好的,我来帮您生成专业报价单。
请提供以下信息(可以一次性全部提供,也可以逐项回答):
1. **客户信息** — 客户名称、公司名
2. **服务项目** — 培训/咨询内容、人数、天数、单价
3. **文档标题** — 报价单标题
4. **报价日期** — YYYY/M/D
5. **付款信息** — 银行账户信息(可选)
| category | 中文 | 示例 |
|---|---|---|
| training | 培训 | 讲师授课、培训课程 |
| travel | 差旅 | 讲师差旅、交通住宿 |
| interview | 访谈 | 前期调研、访谈 |
| consulting | 咨询 | 咨询服务、顾问费 |
| material | 材料 | 教材、设计物料 |
| other | 其他 | 其他费用 |
模板根据 doc_type 字段决定显示哪些区块:
| 字段 | quotation | outline | mixed |
|---|---|---|---|
| 报价明细 pricing_items | ✅ | ❌ | ✅ |
| 银行账户 signature | ✅ | ❌ | ✅ |
| 课程大纲 outline | ❌ | ✅ | ✅ |
| 备注 notes | ✅ | ✅ | ✅ |
quotation 类型:
公司: 上海优普丰企业管理有限公司
客户: 皇家 ROYAL CANIN
日期: 2026/5/28
doc_type: "quotation"
报价项目:
| 项目 | 时长 | 人数 | 单价 | 小计 |
|------|------|------|------|------|
| 变革管理敏捷项目培训 | 2天 | 30人以内 | 25,000.00/天 | 50,000.00 |
| 课前访谈调研(线上) | 0.5天 | — | — | 5,000.00 |
| 讲师差旅 | 2天 | — | — | 5,000.00 |
共计: 60,000.00 CNY
备注:
- 培训时间: 9:00am-5:00pm, 1.5小时午餐
- 报价含讲师差旅、课程费、教材费等
银行信息:
- 开户行: 上海银行愚园路支行
- 账号: 3164 1803 0002 50561
- 账户名称: 上海优普丰企业管理有限公司
outline 类型:
公司: 上海优普丰企业管理有限公司
客户: 皇家 ROYAL CANIN
日期: 2026/5/28
doc_type: "outline"
课程目标:
1. 破冰融合——通过互动活动,促进EOS项目组跨职能成员相互认识、建立信任
2. 激活知识——基于EOS项目真实场景,演练敏捷项目管理工具
3. 建立共识——运用ADKAR变革管理模型,识别项目当前所处阶段
课程大纲:
模块一:第一天:敏捷项目管理实战演练(9:00-17:00)
- 开场与破冰
- 项目挑战共识
- 敏捷项目管理框架回顾
...
模块二:第二天:变革管理与项目推进共识(9:00-16:00)
...
"quotation" | "outline" | "mixed",模板据此显示/隐藏对应区块logo_path 填 logo.png 即可,脚本会自动在 skill 目录下查找。