From e2e86f12817bc6733776c42d23afa0ada947d0e0 Mon Sep 17 00:00:00 2001 From: yuqei Date: Sun, 17 May 2026 23:01:55 +0800 Subject: [PATCH] feat: add commercial pricing entry --- frontend/src/app/pricing/page.tsx | 179 ++++++++++++++++ frontend/src/components/auth/auth-guard.tsx | 2 +- frontend/src/components/layout/app-topbar.tsx | 3 + frontend/src/lib/commercial-plans.ts | 150 ++++++++++++++ ...‰与审查助手-商业化运营与收费方案-2026-05-17.md | 196 ++++++++++++++++++ ...µ·草与审查助手-当前工作进度保存-2026-05-11.md | 52 +++++ 6 files changed, 581 insertions(+), 1 deletion(-) create mode 100644 frontend/src/app/pricing/page.tsx create mode 100644 frontend/src/lib/commercial-plans.ts create mode 100644 project-docs/AI合同起草与审查助手-商业化运营与收费方案-2026-05-17.md diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx new file mode 100644 index 00000000..88081d6c --- /dev/null +++ b/frontend/src/app/pricing/page.tsx @@ -0,0 +1,179 @@ +"use client"; + +import { + ArrowRightOutlined, + CheckCircleOutlined, + CrownOutlined, + SafetyCertificateOutlined, + ThunderboltOutlined, +} from "@ant-design/icons"; +import { Alert, Button, Card, Col, Divider, List, Row, Space, Statistic, Table, Tag, Typography } from "antd"; +import Link from "next/link"; + +import { addOnItems, commercialPlans, commercialStages, paidFeatureGroups, type AddOnItem } from "@/lib/commercial-plans"; + +const { Title, Text, Paragraph } = Typography; + +const addOnColumns = [ + { + title: "增值项", + dataIndex: "name", + key: "name", + width: 180, + }, + { + title: "计费方式", + dataIndex: "billing", + key: "billing", + width: 220, + }, + { + title: "适用说明", + dataIndex: "description", + key: "description", + }, +]; + +export default function PricingPage() { + return ( +
+ +
+
+ Commercial Plan + 套餐与计费 + + 免费只用于开发测试、演示和短期试点;一旦进入真实业务合同处理、多人协作、报告导出、知识库治理或私有部署,就应进入收费链路。 + + + + + + + + + +
+ + Revenue Rule + + 试点可以免费,正式使用必须收费 + + ( + + } + title={{item.title}} + description={{item.content}} + /> + + )} + /> + +
+ + + + + } /> + + + + + } /> + + + + + } /> + + + + + + + {commercialStages.map((stage) => ( + + + + {stage.badge} + + {stage.title} + + {stage.chargeRule} + {stage.boundary} + + {stage.action} + + + + ))} + + + + + {commercialPlans.map((plan) => ( + + + {plan.featured ? : } + {plan.name} +
+ } + extra={plan.featured ? 推荐 : null} + style={{ height: "100%", borderColor: plan.featured ? "#d9822b" : undefined }} + > + +
+ + {plan.price} + + {plan.billingCycle} +
+ {plan.audience} + ( + + + {item} + + )} + /> + + + {plan.highlights.map((item) => ( + {item} + ))} + + + + +
+ + + ))} + + + + rowKey="name" columns={addOnColumns} dataSource={addOnItems} pagination={false} /> + + + + +
+ ); +} diff --git a/frontend/src/components/auth/auth-guard.tsx b/frontend/src/components/auth/auth-guard.tsx index f60b84ea..7bcbc4d4 100644 --- a/frontend/src/components/auth/auth-guard.tsx +++ b/frontend/src/components/auth/auth-guard.tsx @@ -8,7 +8,7 @@ import { getCurrentUser } from "@/services/auth"; import { isRequestError, RequestError } from "@/services/http"; import { getStoredAccessToken, handleSessionExpired, syncCurrentUser, syncSession, useAuthStore } from "@/stores/auth.store"; -const PUBLIC_PATHS = new Set(["/", "/login", "/demo-request"]); +const PUBLIC_PATHS = new Set(["/", "/login", "/demo-request", "/pricing"]); type AuthCheckErrorKind = "forbidden" | "timeout" | "network" | "unknown"; diff --git a/frontend/src/components/layout/app-topbar.tsx b/frontend/src/components/layout/app-topbar.tsx index 651b7d8d..bed0b444 100644 --- a/frontend/src/components/layout/app-topbar.tsx +++ b/frontend/src/components/layout/app-topbar.tsx @@ -12,6 +12,7 @@ import { FileProtectOutlined, FolderOpenOutlined, HistoryOutlined, + PayCircleOutlined, SafetyCertificateOutlined, SettingOutlined, SolutionOutlined, @@ -29,6 +30,7 @@ import { clearSession, useAuthStore } from "@/stores/auth.store"; const publicNavItems = [ { href: "/", label: "首页", icon: }, + { href: "/pricing", label: "套餐计费", icon: }, { href: "/demo-request", label: "演示申请", icon: }, { href: "/login?tab=register", label: "注册", icon: }, { href: "/login", label: "登录", icon: }, @@ -80,6 +82,7 @@ const adminNavItems = [ { href: "/legal-articles", label: "法条全文库", icon: }, { href: "/files", label: "文件管理", icon: }, { href: "/tenant-settings", label: "租户设置", icon: }, + { href: "/pricing", label: "套餐计费", icon: }, { href: "/users", label: "用户管理", icon: }, { href: "/audit-logs", label: "审计日志", icon: }, { href: "/pilot-readiness", label: "试点交付", icon: }, diff --git a/frontend/src/lib/commercial-plans.ts b/frontend/src/lib/commercial-plans.ts new file mode 100644 index 00000000..554af4f9 --- /dev/null +++ b/frontend/src/lib/commercial-plans.ts @@ -0,0 +1,150 @@ +import type { ReactNode } from "react"; + +export type CommercialStage = { + title: string; + badge: string; + chargeRule: string; + boundary: string; + action: string; +}; + +export type CommercialPlan = { + key: string; + name: string; + price: string; + billingCycle: string; + audience: string; + quota: string[]; + highlights: string[]; + cta: string; + featured?: boolean; +}; + +export type AddOnItem = { + name: string; + billing: string; + description: string; +}; + +export const commercialStages: CommercialStage[] = [ + { + title: "开发测试期", + badge: "当前阶段", + chargeRule: "免费", + boundary: "仅用于内部验证、演示和功能闭环,不承诺正式 SLA,不对外开放批量生产使用。", + action: "继续沉淀样板合同、试点案例和法条全文库。", + }, + { + title: "邀请试点期", + badge: "试点转化", + chargeRule: "限时免费或象征性试点费", + boundary: "建议 14-30 天,限定用户数、审查量、生成量和知识库容量,试点结束必须进入续费评估。", + action: "签试点确认单,记录使用量、节省时间、风险命中率和续费意向。", + }, + { + title: "正式商用期", + badge: "开始收费", + chargeRule: "按套餐订阅收费", + boundary: "一旦进入真实业务合同处理、多人协作、报告导出、知识库治理或私有部署,即进入收费范围。", + action: "按企业规模选择团队版、专业版或私有部署版。", + }, + { + title: "规模化运营期", + badge: "持续增收", + chargeRule: "订阅 + 超额包 + 实施服务", + boundary: "超出套餐额度、接入更多知识库、定制审查规则、专属模型或多租户组织治理时另行计费。", + action: "建立客户成功复盘、续费提醒和扩容报价机制。", + }, +]; + +export const commercialPlans: CommercialPlan[] = [ + { + key: "trial", + name: "试用版", + price: "¥0", + billingCycle: "14 天或约定试点期", + audience: "首次评估客户、演示客户", + quota: ["3 个用户", "30 次合同审查", "20 份合同生成", "1 个知识库"], + highlights: ["体验完整主链路", "可查看风险摘要", "导出报告保留试用标识"], + cta: "申请试点", + }, + { + key: "starter", + name: "基础版", + price: "¥399", + billingCycle: "每月起", + audience: "小团队、行政和商务合同场景", + quota: ["5 个用户", "100 次合同审查/月", "80 份合同生成/月", "2GB 文件容量"], + highlights: ["合同生成与审查", "基础报告下载", "标准模板库"], + cta: "升级基础版", + }, + { + key: "team", + name: "团队版", + price: "¥1,999", + billingCycle: "每月起", + audience: "法务、采购、销售协作团队", + quota: ["20 个用户", "800 次合同审查/月", "500 份合同生成/月", "10GB 文件容量"], + highlights: ["知识库增强", "审查记录留痕", "团队权限与审计"], + cta: "选择团队版", + featured: true, + }, + { + key: "professional", + name: "专业版", + price: "¥6,999", + billingCycle: "每月起", + audience: "合同量较大的企业法务部门", + quota: ["80 个用户", "4,000 次合同审查/月", "2,000 份合同生成/月", "50GB 文件容量"], + highlights: ["规则治理", "法条全文库引用", "上线值守与告警"], + cta: "升级专业版", + }, + { + key: "enterprise", + name: "私有部署版", + price: "面议", + billingCycle: "年费 + 实施服务", + audience: "数据敏感、内网部署和定制规则客户", + quota: ["专属部署", "容量按项目约定", "可接企业知识库", "可定制流程"], + highlights: ["私有化交付", "专属法务知识包", "运维和培训服务"], + cta: "联系部署评估", + }, +]; + +export const addOnItems: AddOnItem[] = [ + { + name: "超额审查包", + billing: "按 1,000 次起购买", + description: "适合月末集中审查、招投标或采购旺季。", + }, + { + name: "行业模板包", + billing: "按模板包或年度维护收费", + description: "覆盖采购、销售、服务、劳动、保密、数据合规等场景。", + }, + { + name: "法条与规则包", + billing: "按专题包收费", + description: "扩展司法解释、部门规章、地方示范文本和企业内控制度。", + }, + { + name: "私有部署实施", + billing: "一次性实施费 + 年度维护", + description: "包括部署、培训、数据初始化、告警联调和上线演练。", + }, +]; + +export const paidFeatureGroups: Array<{ title: string; content: ReactNode }> = [ + { + title: "什么时候免费", + content: "开发测试、公开演示、短期邀请试点可以免费,但必须限制周期、账号、合同量和导出权益。", + }, + { + title: "什么时候收费", + content: "客户开始处理真实业务合同、需要多人协作、报告导出、知识库治理、私有部署或 SLA 时开始收费。", + }, + { + title: "怎么避免永久免费", + content: "所有试用都必须绑定到期日、额度、转正评估和升级入口;免费只作为获客入口,不作为长期交付形态。", + }, +]; diff --git a/project-docs/AI合同起草与审查助手-商业化运营与收费方案-2026-05-17.md b/project-docs/AI合同起草与审查助手-商业化运营与收费方案-2026-05-17.md new file mode 100644 index 00000000..393546c4 --- /dev/null +++ b/project-docs/AI合同起草与审查助手-商业化运营与收费方案-2026-05-17.md @@ -0,0 +1,196 @@ +# AI合同起草与审查助手-商业化运营与收费方案 + +日期:2026-05-17 + +## 1. 方案结论 + +平台最终目标是盈利,不应长期呈现为“永久免费工具”。 + +当前阶段的商业化口径定为: + +> 开发测试免费,短期试点可免费,正式商用必须收费。 + +免费是获客、演示和试点手段,不是长期交付形态。平台对外应从“免费使用”调整为“免费试点 + 套餐订阅 + 超额包 + 私有部署实施”的收入模型。 + +## 2. 产品定位 + +对外主定位继续沿用既有商业化重定位结论: + +> AI 合同起草与审查助手 + +不要第一阶段直接卖“大而全的法务平台”,而是先卖清晰的业务闭环: + +1. 选择合同模板。 +2. 生成合同初稿。 +3. 发起 AI 预审。 +4. 查看风险、法条依据和审查建议。 +5. 继续追问。 +6. 下载报告。 +7. 沉淀到企业知识库和规则库。 + +内部仍保留平台化架构,外部先卖“起草 + 审查”的明确价值。 + +## 3. 免费与收费边界 + +### 3.1 什么时候免费 + +以下场景可以免费: + +| 场景 | 免费原因 | 必须限制 | +|---|---|---| +| 开发测试 | 内部功能验证 | 不对外承诺 SLA | +| 产品演示 | 获客和销售演示 | 使用脱敏样本 | +| 邀请试点 | 验证真实需求和续费意愿 | 14-30 天、限账号、限审查量、限生成量 | +| 公益/样板客户 | 换取案例、反馈或渠道背书 | 必须签试点确认和公开授权边界 | + +免费必须有到期时间、额度和转正动作。不能出现“永久免费、无限量、无边界”的表达。 + +### 3.2 什么时候收费 + +以下任一情况出现,就应进入收费: + +1. 客户开始处理真实业务合同。 +2. 超过试点期。 +3. 需要多人协作。 +4. 需要正式报告导出。 +5. 需要企业知识库、法条全文库或审查规则治理。 +6. 需要私有部署、内网部署或数据隔离。 +7. 需要 SLA、运维告警、培训和上线支持。 +8. 需要导入企业历史合同、模板、制度或自定义规则。 +9. 超出试用额度。 + +## 4. 收入模型 + +### 4.1 主收入 + +| 收入类型 | 说明 | +|---|---| +| 套餐订阅 | 按月或按年收取基础费用 | +| 用户数扩容 | 超出套餐用户数后加收 | +| 审查/生成超额包 | 超出月额度后按包购买 | +| 私有部署 | 一次性部署费 + 年度维护费 | +| 行业模板包 | 按行业或合同类型收费 | +| 法条/规则包 | 按专题包或年度维护收费 | +| 培训与实施 | 按项目收费 | + +### 4.2 建议套餐 + +| 套餐 | 价格建议 | 适用客户 | 权益 | +|---|---:|---|---| +| 试用版 | 0 元 | 首次评估、演示客户 | 3 用户、30 次审查、20 份生成、1 个知识库 | +| 基础版 | 399 元/月起 | 小团队、行政、商务 | 5 用户、100 次审查/月、80 份生成/月、2GB 文件容量 | +| 团队版 | 1,999 元/月起 | 法务、采购、销售协作团队 | 20 用户、800 次审查/月、500 份生成/月、10GB 文件容量 | +| 专业版 | 6,999 元/月起 | 合同量较大的企业法务部门 | 80 用户、4,000 次审查/月、2,000 份生成/月、50GB 文件容量 | +| 私有部署版 | 面议 | 数据敏感、内网部署客户 | 专属部署、容量按项目约定、定制规则和知识库 | + +价格是当前阶段建议锚点,不是最终合同报价。正式报价应根据客户行业、部署方式、合同量、数据规模和实施范围调整。 + +## 5. 试点转收费流程 + +### 5.1 标准流程 + +1. 客户提交演示或试点申请。 +2. 平台开通试用版,限定试点期限和额度。 +3. 试点期间记录使用量、风险命中、报告下载、活跃用户和反馈。 +4. 试点第 7 天做一次客户成功回访。 +5. 试点结束前 3 天自动提醒续费评估。 +6. 输出试点复盘报告。 +7. 根据使用量推荐基础版、团队版、专业版或私有部署版。 +8. 签订正式服务合同或结束试点。 + +### 5.2 试点必须收集的指标 + +| 指标 | 用途 | +|---|---| +| 活跃用户数 | 判断套餐用户数 | +| 合同生成数量 | 判断生成额度 | +| 合同审查数量 | 判断审查额度 | +| 报告下载数量 | 判断正式交付价值 | +| Chat 追问次数 | 判断知识助手价值 | +| 风险命中率 | 证明审查价值 | +| 人工节省时间 | 支撑续费报价 | +| 客户反馈等级 | 判断是否进入正式销售 | + +## 6. 平台产品修改要求 + +### 6.1 第一阶段已落地 + +本轮先落地产品表达,不做真实支付系统: + +1. 新增公开页面:`/pricing`。 +2. 顶部导航新增“套餐计费”。 +3. 未登录用户也可以查看套餐和收费边界。 +4. 管理员菜单也可以进入套餐计费页。 +5. 页面明确显示: + - 开发测试免费。 + - 试点限时免费。 + - 正式商用收费。 + - 超额、行业模板、法条规则包和私有部署另行计费。 + +### 6.2 第二阶段应开发 + +1. 租户表补充商业化字段: + - `plan_code` + - `trial_started_at` + - `trial_ends_at` + - `billing_status` + - `review_quota_monthly` + - `generation_quota_monthly` + - `knowledge_base_quota` + - `storage_quota_mb` +2. 新增使用量统计: + - 审查次数 + - 生成次数 + - 报告下载次数 + - Chat 次数 + - 存储容量 +3. 新增试用到期提醒。 +4. 新增超额提示和升级入口。 +5. 新增管理员套餐调整入口。 +6. 新增销售线索和试点转化看板。 + +### 6.3 第三阶段应开发 + +1. 支付或订单模块。 +2. 发票和合同管理。 +3. 渠道代理和客户成功看板。 +4. 私有部署授权文件。 +5. 商业版 license 校验。 +6. 年度续费提醒。 + +## 7. 销售话术 + +### 7.1 一句话 + +AI 合同起草与审查助手,帮助企业先快速生成合同初稿,再完成 AI 预审、风险定位、法条引用和报告输出。 + +### 7.2 价值表达 + +1. 给业务团队:减少从零起草合同的时间。 +2. 给法务团队:提前筛出高风险条款。 +3. 给管理层:让合同风险、处理进度和知识沉淀可追踪。 +4. 给试点客户:先免费或低成本验证,再根据真实用量选择套餐。 + +### 7.3 风险边界 + +平台提供辅助起草、辅助审查和风险提示,不替代律师正式法律意见。正式商用合同应保留人工确认和法律责任边界。 + +## 8. 运营节奏 + +| 阶段 | 时间 | 目标 | +|---|---|---| +| 内测期 | 当前到首批试点前 | 打磨演示链路、套餐页和试点材料 | +| 试点期 | 14-30 天 | 获取真实合同样本、验证价值、沉淀案例 | +| 转化期 | 试点结束前 3 天到结束后 7 天 | 推套餐、报价、签正式服务 | +| 续费期 | 每月/每季度 | 看使用量、推扩容包、复盘 ROI | + +## 9. 当前状态 + +当前平台已经具备收费表达第一步: + +1. 有明确商业化方案。 +2. 有套餐计费页面。 +3. 有免费与收费边界。 +4. 有试点转收费路径。 + +但还没有真实支付、订单、发票和额度强制控制。下一阶段应优先补“使用量统计 + 试用到期 + 超额提示”,再做支付闭环。 diff --git a/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md b/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md index 43b708be..f12f5e75 100644 --- a/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md +++ b/project-docs/AI合同起草与审查助手-当前工作进度保存-2026-05-11.md @@ -2149,6 +2149,58 @@ - 本轮无 required 阻塞项。 - 外部 Webhook 已从“等待真实地址”变为“真实送达已验证”。 +## 2026-05-17 商业化运营收费方案与套餐计费入口 +### 本轮完成项 +- 已制定详细商业化运营与收费方案: + - 文档:`project-docs/AI合同起草与审查助手-商业化运营与收费方案-2026-05-17.md` + - 核心原则:开发测试免费,短期试点可免费,正式商用必须收费。 + - 收入模型:套餐订阅、用户扩容、审查/生成超额包、私有部署、行业模板包、法条/规则包、培训实施。 + - 试点转收费流程:演示申请 -> 限时试点 -> 使用量复盘 -> 套餐推荐 -> 正式服务合同。 +- 已新增平台内套餐计费入口: + - 页面:`/pricing` + - 文件:`frontend/src/app/pricing/page.tsx` + - 套餐配置:`frontend/src/lib/commercial-plans.ts` + - 顶部导航:未登录用户和管理员菜单均可进入“套餐计费”。 + - 公开访问:`/pricing` 已加入 AuthGuard 公共路径,未登录也可以查看。 +- 已在页面中明确呈现: + - 开发测试期免费。 + - 邀请试点期限时免费或象征性试点费。 + - 正式商用期按套餐订阅收费。 + - 规模化运营期按订阅、超额包和实施服务持续增收。 + - 试用版、基础版、团队版、专业版、私有部署版的权益边界。 + +### 本轮验证 +- 前端 lint: + - `npm --prefix frontend run lint -- src/app/pricing/page.tsx src/lib/commercial-plans.ts src/components/layout/app-topbar.tsx src/components/auth/auth-guard.tsx` + - 结果:通过。 +- 前端生产构建: + - `npm --prefix frontend run build` + - 结果:通过,构建路由包含 `/pricing`。 +- 浏览器验证: + - 地址:`http://127.0.0.1:4302/pricing` + - 结果:未登录状态可访问,页面可见“套餐与计费”“试点可以免费,正式使用必须收费”“收费阶段”和各套餐权益。 +- `git diff --check`: + - 结果:通过,仅有 Windows CRLF 工作区提示。 + +### 当前状态 +- 平台不再只呈现“免费使用”心智,已经有明确的商业化入口和收费边界。 +- 本轮只落地商业化表达和套餐入口,尚未做真实支付、订单、发票、额度扣减和强制拦截。 + +### 未完成项 +- 第二阶段应补: + - 租户商业化字段:套餐编码、试用开始/结束、计费状态、审查额度、生成额度、知识库额度、存储额度。 + - 使用量统计:审查、生成、报告下载、Chat、存储容量。 + - 试用到期提醒、超额提示和升级入口。 + - 管理员套餐调整入口和销售线索看板。 +- 第三阶段再补: + - 支付/订单/发票。 + - 私有部署 license。 + - 年度续费提醒和客户成功看板。 + +### 阻塞项 +- 本轮无 required 阻塞项。 +- 当前商业化第一阶段闭环已完成,后续进入“使用量统计与试用到期提醒”更合适。 + ## 2026-05-16 Phase14 生产巡检与 Chat/报告法条引用闭环 ### 本轮完成项 - 已完成 Chat/报告法条引用闭环代码补齐并推送远程 `main`: