4 Commits

Author SHA1 Message Date
1f399d6b00 feat(storefront): 显示价=定价×客户折扣率(三类统一)+产线订阅购买链路+修既有控件bug
1) get_customer_price_display 新增(core.py + __init__.py + env 注册)
   统一三类产品对外报价口径:显示价 = 资源真实定价 × 客户折扣率
   - 产线 pipeline_pricing_map / 存储 storres_pricing_map / 模型 llm_model.ppid
     各自解析 ppid → get_pricing_display 取单位价 → × 折扣
   - 折扣率解析走 discount 模块 get_min_product_discount(专属优先/'*'兜底/1.0)
     >1 加价(存储1.5)、<1 让利(百炼0.9);折扣≠1 时返回 original_text 原价
   - 未登录(user_org_id 空)传 '' 只命中 '*' 通用折扣 → 访客可见报价

2) purchase_realtime 加产线分支(product_type=='pipeline')
   订阅制:无 usage 表,直接算价→余额预检→product_accounting_generic 实时记账→开订阅权益
   charge_mode month/year,entitlement.duration_days 30/365

3) 展示页 index.ui:接 get_customer_price_display;产线卡显示月/年价+原价划线+订阅态文案;
   按钮按订阅状态分流(已订阅→进入产线 / 未订阅→立即购买);product_code 兼容
   opportunity_general/bidding_general/sdlc_general 与旧 PIPE-* 两套映射

4) 修两个既有 bug(购买页原本就坏):
   - InputNumber 控件 bricks 未注册 → widgetBuild 返回 null 静默不渲染,改 UiInt
   - 支付脚本 getWidgetById 缺第二参数(查找起点) → from_widget undefined 抛 TypeError
     点击支付无反应,补 bricks.app.root;UiType 取值 .value → resultValue()
   - UiType 系控件同时传 name(表单/getValue)+id(set_id 覆盖 DOM id 供 getWidgetById)

本地 mock 渲染测试 6 项全过:三类价格/订阅态分流/规划中占位/未登录访客可见价无购买按钮
2026-09-06 16:55:49 +08:00
f2e828c7b6 feat(storefront): 产线产品展示型卡片——进产线入口/规划中占位,不走购买扣款 2026-08-31 08:38:32 +08:00
fd794616b3 feat(storefront): 商城改 TabPanel+产品卡片布局; 补齐购买链路权限注册
- 展示层重写: 分类=Tab(服务端渲染), 卡片含介绍+真实定价+立即购买按钮,
  点击弹购买确认弹窗(purchase_confirm→purchase_realtime 实时记账链路不变)
- 定价文案取资源模块 get_product_display_info(含折扣前的资源真实价)
- load_path 补注册 purchase_confirm/purchase_realtime/my_subscriptions
  (此前缺失, 客户点购买会 401)
2026-08-28 16:34:16 +08:00
Hermes Agent
6dae1676ef feat: 新增商家产品商城页面(storefront)
- 左侧可收缩产品分类树
- 右侧产品列表(卡片式)和产品详情
- 未登录可浏览,登录后显示购买按钮
- 页面和API注册到load_path.py
2026-06-23 18:19:42 +08:00