吴昊天 e712f5554c feat(商品): 网盘商品改 direct 单按钮直购,自定义表单商品禁止加入购物车
加购策略
- virtual Handler::getCartStrategy() 由 cart/多品改为 cart_mode=direct、multi_item=false,
  中台据此下发 cart_button=0,列表与详情只保留「立即购买」。
- 详情页 direct 模式不再写购物车:选中规格后跳单品直购页
  /pages/center/order/create/index?product_id=&sku_unique=&product_type=&num=;
  多规格首次点击先弹规格窗确认规格,再次点击直接下单。
- 列表卡片 cart_button=0 时展示「立即购买」,点击整行进详情。
- StoreCartServices::setCart() 增加 isDirectCartMode() 校验,new=false 时抛
  「该商品不支持加入购物车,请直接购买」,防止其他入口绕过 UI 加购。

自定义表单
- CenterProductServices::hasCustomForm() 统一判定(兼容 JSON 字符串/空数组/已解码数组),
  5 处 cart_button 计算与 cart_strategy 组装均按 direct 处理。
- StoreCartServices::setCart() 增加 hasCustomForm() 校验,new=false 时直接拦截。

商品图片
- getList/productDetail 的 image、recommend_image、slider_image 与 SKU pic
  统一 set_file_url 补全站点域名,与后台列表口径一致,修复图片裂图。
- 同步更新 .crmeb 用户端购物车文档与虚拟商品 README、详情页 mock 数据。
2026-10-23 14:16:54 +08:00

97 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# product/virtual/ — 网盘产品类型
## 功能概述
网盘产品类型,适用于网盘资源售卖、支付后自动发放网盘链接与提取码等场景(如电子书、课程、会员码等)。用户下单支付成功后,订单详情自动展示网盘链接与提取码。
## 核心文件
```
virtual/
├── controller/
│ ├── admin/
│ │ └── ProductController.php 网盘商品管理
│ └── user/
│ └── OrderController.php 用户端网盘订单
├── dao/
│ ├── VirtualOrderDao.php 网盘订单 DAO
│ ├── VirtualProductDao.php 网盘商品 DAO
│ └── VirtualProductSkuDao.php 网盘商品 SKU DAO
├── handler/
│ ├── VirtualOrderAdapter.php 网盘订单适配器
│ └── VirtualAfterSaleHandler.php 网盘售后规则处理器
├── listener/
│ ├── OrderPaidListener.php 支付成功自动发货
│ ├── OrderCancelListener.php 订单取消
│ ├── OrderCommentListener.php 订单评价
│ ├── OrderDeleteListener.php 订单删除
│ ├── OrderPriceChangeListener.php 改价
│ ├── OrderRefundCreateAfterListener.php 申请退款后
│ ├── OrderRefundSuccessListener.php 退款成功
│ ├── OrderRefundRefuseListener.php 拒绝退款
│ ├── OrderRefundCancelAfterListener.php 取消退款后
│ └── OrderCenterDetailExtendListener.php 订单详情注入网盘链接与提取码
├── model/
│ ├── VirtualProduct.php 网盘商品模型(eb_pt_virtual)
│ ├── VirtualProductSku.php 网盘 SKU 模型(eb_pt_virtual_sku)
│ └── VirtualOrder.php 网盘订单模型(eb_pt_virtual_order)
├── pipeline/
│ └── VirtualPipeline.php 网盘订单管线
├── route/
│ ├── admin.php 后台路由
│ └── user.php 用户端路由
├── service/
│ ├── VirtualProductServices.php 网盘商品服务
│ └── VirtualOrderServices.php 网盘订单服务
├── App.php
├── Handler.php 产品类型主处理器
├── Installer.php
├── event.php
└── plugin.json
```
## 关键事件
| 事件名 | 说明 |
|--------|------|
| `OrderPaySuccess` | 支付成功自动发货(发放网盘资源) |
| `OrderCancel` | 订单取消,检查资源是否已发放 |
| `OrderRefundCreateAfter` | 申请退款后检查资源状态 |
| `OrderRefundSuccess` | 退款成功撤销资源访问 |
| `OrderRefundRefuse` | 拒绝退款恢复资源访问 |
| `OrderRefundCancelAfter` | 取消退款后恢复资源访问 |
| `OrderComment` | 订单评价 |
| `OrderDelete` | 订单删除 |
| `OrderPriceChange` | 改价 |
| `OrderCenterDetailExtend` | 订单详情注入网盘链接与提取码(履约信息) |
## 售后规则
- 支持售后期限:24小时
- 已发放后不支持售后
- 仅支持退款类型
## 用户端加购策略
网盘商品不支持加入购物车,只能直接购买:
- `Handler::getCartStrategy()` 返回 `cart_mode=direct`、`multi_item=false`,中台据此下发 `cart_button=0`,列表与详情只展示「立即购买」。
- 商品详情页点击「立即购买」跳单品直购页 `/pages/center/order/create/index?product_id=&sku_unique=&product_type=virtual&num=`,由 `CenterOrderController::confirm/create` 的 direct 链路下单,不写购物车(多规格首次点击先弹规格窗确认规格)。
- `StoreCartServices::setCart()` 对 `cart_mode=direct` 的商品在 `new=false` 时抛「该商品不支持加入购物车,请直接购买」,防止其他入口绕过 UI 加购。
## 数据表
- `eb_pt_virtual` — 网盘商品扩展表
- `eb_pt_virtual_sku` — 网盘商品 SKU 表
- `eb_pt_virtual_order` — 网盘商品订单扩展表
## 插件信息
```json
{
"key": "product_virtual",
"name": "网盘产品",
"type": "product_type"
}
```