COMBO_PAYMENT_MODAL.md
4.9 KB
💳 组合支付功能 - 弹窗模式实现
🎯 功能说明
组合支付功能已升级为模态框(弹窗)模式,避免了样式错乱问题。
📋 使用流程
1. 点击组合支付按钮
- 在支付方式按钮区域点击 "💳 组合支付" 按钮
- 触发
showComboPaymentModal = true,弹出组合支付模态框
2. 组合支付模态框功能
#### 📊 支付信息摘要
- 应收金额: 显示订单总金额(红色)
- 已支付: 显示已组合支付的总金额(匹配时绿色,不匹配时红色)
- 剩余金额: 显示还需支付的金额(完全匹配时绿色)
#### 🔧 添加支付方式
- 支付方式选择器: 下拉菜单选择支付方式
- 微信支付
- 支付宝
- 现金
- 会员余额
- 积分抵扣
- 金额输入: 输入本次支付金额
- + 添加按钮: 将支付方式和金额添加到列表
#### ✅ 验证规则
- ✓ 金额必须 > 0
- ✓ 金额不能超过剩余金额
- ✓ 支付方式不能重复
#### 📝 已添加支付列表
- 显示所有已添加的支付方式
- 每行显示:支付方式名称、金额、删除按钮
- 可以随时删除已添加的项目
3. 确认支付
- 条件: 组合支付总金额 = 应收金额
- 状态:
- ✅ 金额匹配时: "✅ 确认支付" 按钮可用(绿色)
- ❌ 金额不匹配时: "❌ 金额未匹配" 按钮禁用(灰色)
- 点击确认: 保存组合支付信息到
info.skmx字段(JSON格式),然后生成订单
🔄 数据结构
Vue Data 新增字段
showComboPaymentModal: false, // 是否显示组合支付模态框
paymentCombinations: [], // 已添加的支付组合数组
selectedPaymentMethod: '', // 当前选择的支付方式
selectedPaymentAmount: '', // 当前输入的支付金额
支付组合对象结构
{
method: 'wechat', // 支付方式代码
label: '微信支付', // 支付方式显示名称
amount: '100.00' // 支付金额
}
订单保存数据
info.skzh = '组合支付' // 支付方式设为组合支付
info.skmx = JSON.stringify([
{ method: 'wechat', label: '微信支付', amount: '100.00' },
{ method: 'cash', label: '现金', amount: '50.00' }
]) // 收款明细(JSON字符串)
🎨 UI 样式
模态框外观
- 背景: 半透明黑色遮罩 (rgba(0,0,0,0.6))
- 宽度: 80% / 最大 600px
- 阴影: 0 8px 24px rgba(0,0,0,0.3)
- 圆角: 12px
- z-index: 9999
信息摘要区域
- 背景: #f5f7fa
- 应收金额: 红色 (#de532c)
- 已支付/剩余: 条件色(绿色✅ 或 红色❌)
支付方式列表
- 背景: #fafafa
- 左边框: 3px solid #1890ff
- 圆角: 6px
- 滚动: max-height 250px,超出自动滚动
🔌 核心方法
addPaymentMethod()
// 添加支付方式到组合支付列表
// 验证: 金额有效、不超过剩余额、支付方式有效
// 成功后: 清空输入框,更新 paymentCombinations
removePaymentMethod(index)
// 从组合支付列表移除指定支付方式
// 如果移除后列表为空,组合支付模态框保持打开
confirmComboPayment()
// 确认组合支付
// 1. 验证 canSaveOrder = true
// 2. 设置 info.skzh = '组合支付'
// 3. 保存组合信息到 info.skmx (JSON)
// 4. 关闭模态框
// 5. 调用 settlementPay() 生成订单
settlementPay()
// 生成销售出库单订单
// 如果是组合支付:已通过 confirmComboPayment() 设置数据
// 如果是单一支付:直接使用 info.skzh 值
📱 支付方式参考
| 代码 | 名称 | 备注 |
|---|---|---|
| 微信支付 | 需要验证余额 | |
| alipay | 支付宝 | 需要验证余额 |
| cash | 现金 | 无需验证 |
| balance | 会员余额 | 需要验证会员账户 |
| points | 积分抵扣 | 需要验证积分 |
🚀 后端集成
数据库字段
- skmx (LONGTEXT): 存储支付明细 JSON
- skzh (VARCHAR): 支付方式,值为 "组合支付" 时表示组合支付
示例查询
SELECT * FROM wt_xsckd WHERE skzh = '组合支付';
示例返回数据
{
"id": "CHD20251027001",
"skzh": "组合支付",
"skmx": "[{\"method\":\"wechat\",\"label\":\"微信支付\",\"amount\":\"100.00\"},{\"method\":\"cash\",\"label\":\"现金\",\"amount\":\"50.00\"}]",
"skje": 150.00
}
✨ 特性亮点
✅ 现代化界面 - 使用模态框避免样式错乱
✅ 实时验证 - 金额实时计算和验证
✅ 灵活配置 - 支持多种支付方式组合
✅ 易操作 - 清晰的 UI 和交互流程
✅ 完整记录 - 所有支付方式和金额都被记录
版本: 1.0
最后更新: 2025-10-27