# 订单系统 - 补单支付功能 ## 功能说明 订单支付功能已升级,现在支持两种支付方式: - ✅ **正常支付**: 从订单列表选择订单进行支付 - ✅ **补单支付**: 输入订单号进行支付(用于补单场景) --- ## 前端实现 ### 支付弹窗 支付弹窗现在包含两种支付类型选择: ```vue 正常支付 补单支付 ``` ### 正常支付 显示订单号和订单金额: ```vue ``` ### 补单支付 输入支付订单号: ```vue ``` ### 支付方式 两种支付类型都支持选择支付方式: ```vue 支付宝 微信 银行卡 ``` ### 支付表单数据结构 ```typescript const payForm = ref({ order_id: 0, // 订单ID(正常支付) order_no: '', // 订单号(显示用) amount: 0, // 订单金额(显示用) payment_method: 'alipay', // 支付方式 payType: 'normal', // 支付类型:normal/supplement supplement_order_no: '' // 补单订单号(补单支付) }) ``` ### 支付逻辑 ```typescript const confirmPay = async () => { // 验证补单支付的订单号 if (payForm.value.payType === 'supplement' && !payForm.value.supplement_order_no) { feedback.msgWarning('请输入支付订单号') return } if (payForm.value.payType === 'normal') { // 正常支付:使用订单ID await orderPay({ id: payForm.value.order_id, payment_method: payForm.value.payment_method }) } else { // 补单支付:使用订单号 await orderPay({ order_no: payForm.value.supplement_order_no, payment_method: payForm.value.payment_method, is_supplement: 1 }) } } ``` --- ## 后端实现 ### 验证规则更新 `OrderValidate` 中的 pay 场景验证已更新: ```php 'pay' => ['payment_method'], // 只验证支付方式 ``` 支持的参数: - `id`: 订单ID(正常支付) - `order_no`: 订单号(补单支付) - `payment_method`: 支付方式(必填) - `is_supplement`: 是否补单支付(0/1) ### 控制器逻辑 `OrderController::pay()` 方法现在支持两种支付方式: ```php public function pay() { $params = (new OrderValidate())->post()->goCheck('pay'); // 判断是否是补单支付 if (!empty($params['is_supplement']) && $params['is_supplement'] == 1) { // 补单支付:通过订单号查找订单 if (empty($params['order_no'])) { return $this->fail('补单支付需要提供订单号'); } $order = Order::where('order_no', $params['order_no'])->find(); if (!$order) { return $this->fail('订单不存在'); } $orderId = $order->id; } else { // 正常支付:通过订单ID if (empty($params['id'])) { return $this->fail('订单ID不能为空'); } $orderId = (int)$params['id']; } $result = OrderLogic::pay($orderId, $params['payment_method']); if (!$result) { return $this->fail(OrderLogic::getError()); } return $this->success('支付成功'); } ``` --- ## API 调用示例 ### 正常支付 ```bash POST /order.order/pay { "id": 1, "payment_method": "alipay" } ``` ### 补单支付 ```bash POST /order.order/pay { "order_no": "ORD20260310123456789", "payment_method": "wechat", "is_supplement": 1 } ``` --- ## 使用流程 ### 正常支付流程 1. 用户在订单列表中点击"支付"按钮 2. 弹窗打开,默认选择"正常支付" 3. 显示订单号和订单金额 4. 选择支付方式 5. 点击"确认支付" ### 补单支付流程 1. 用户打开支付弹窗 2. 选择"补单支付" 3. 输入支付订单号 4. 选择支付方式 5. 点击"确认支付" --- ## 错误处理 ### 前端验证 - 补单支付时必须输入订单号 - 支付方式必须选择 ### 后端验证 - 补单支付时订单号必须存在 - 订单必须存在于数据库中 - 支付方式必须有效 --- ## 相关文件 ### 前端 - `admin/src/views/order/index.vue` - 订单列表页面 - `admin/src/api/order.ts` - 订单API接口 ### 后端 - `server/app/adminapi/controller/order/OrderController.php` - 订单控制器 - `server/app/adminapi/validate/order/OrderValidate.php` - 订单验证 - `server/app/adminapi/logic/order/OrderLogic.php` - 订单业务逻辑 --- ## 版本信息 - **功能版本**: 1.4.0 - **实现日期**: 2026-03-10 - **功能类型**: 支付功能扩展 - **状态**: ✅ 完成 --- **功能实现完成** ✅