PRESALE_FEATURE_SUMMARY.md
4.69 KB
预售出库单功能实现总结
功能需求
- 缺货商品(库存=0)仍然可以添加到购物车
- 缺货商品应通过预售出库单方式处理
- 普通商品正常创建销售出库单
- 系统需要自动判断并调用正确的API端点
实现方案
1. 收银台前端逻辑修改 (sy/home.html)
1.1 商品选择逻辑
原来的限制:缺货商品禁止添加
// ❌ 旧逻辑
if (!item.mdkc || item.mdkc <= 0) {
alert('库存不足,无法添加');
return;
}
新的逻辑:允许缺货商品添加,但标记为预售
// ✅ 新逻辑
const isPresale = !item.mdkc || item.mdkc <= 0;
this.addgoodlist.push({
quantity: 1,
isPresale: isPresale, // 标记是否为预售商品
...item
});
if (isPresale) {
alert('该商品库存不足,将作为预售商品处理');
}
1.2 套装商品逻辑
原来的限制:套装中有任何商品缺货,整个套装禁止添加
// ❌ 旧逻辑
if (insufficientStock.length > 0) {
alert('套装中以下商品库存不足,无法添加到购物车:...');
return;
}
新的逻辑:允许套装添加,标记其中的缺货商品
// ✅ 新逻辑
let hasPresaleItem = false;
packageItem.wtSptzMxList.forEach((item) => {
if (!product || !product.mdkc || product.mdkc < requiredQty) {
hasPresaleItem = true; // 标记该套装包含预售商品
}
});
// 即使有缺货商品也允许添加
if (hasPresaleItem) {
alert('套装中存在库存不足的商品,将作为预售单处理');
}
1.3 购物车显示优化
为预售商品显示视觉提示:
<!-- 预售标记 -->
<span v-if="item.isPresale"
style="background-color: #ff6b6b; color: white; padding: 2px 6px;">
预售
</span>
<!-- 预售商品用不同背景色 -->
<div :style="{
backgroundColor: item.isPresale ? '#fff3cd' : '#fff',
borderLeft: item.isPresale ? '4px solid #ff6b6b' : 'none'
}">
2. 结算逻辑修改 (sy/settlement.html)
2.1 普通支付流程
在 settlementPay() 方法中:
// ✅ 检查是否有预售商品
const hasPresaleItem = this.addgoodlist.some(item => item.isPresale);
const apiEndpoint = hasPresaleItem ? "/api/Extend/wtysckd" : "/api/Extend/wtxsckd";
const documentType = hasPresaleItem ? '预售出库单' : '销售出库单';
if (hasPresaleItem) {
alert('购物车中存在库存不足的商品,将创建' + documentType);
}
// 调用正确的API端点
axios({
url: this.baseUrl + apiEndpoint,
method: 'POST',
data: this.info
}).then((res) => {
if (res.data.code == 200) {
window.alert(documentType + '创建成功');
window.location = 'home.html';
}
});
2.2 组合支付流程
在 finalizeComboPayment() 方法中实现相同的预售判断逻辑。
3. API端点映射
| 商品类型 | 调用端点 | 说明 |
|---|---|---|
| 全部有货 | /api/Extend/wtxsckd |
销售出库单 |
| 存在缺货 | /api/Extend/wtysckd |
预售出库单 |
用户体验流程
用户操作流程:
1. 选择商品(包括缺货商品)
↓
2. 系统自动检测库存并标记
- 有货商品 → 正常显示
- 缺货商品 → 显示"预售"标签,黄色背景,红色左边框
↓
3. 确认收款
↓
4. 系统自动判断:
- 全部有货 → 创建销售出库单 (wtXsckd)
- 存在缺货 → 创建预售出库单 (wtYsckd)
↓
5. 返回首页,订单已创建
数据结构
购物车商品对象新增字段:
{
id: "product_id",
spmc: "商品名称",
quantity: 2,
lsj: 99.99,
mdkc: 0, // 库存
isPresale: true, // ✅ 新增:标记是否为预售商品
...otherFields
}
前后端兼容性
- ✅ 后端
/api/Extend/wtysckd和/api/Extend/wtxsckdAPI 已存在 - ✅ 两个API的数据结构完全相同
- ✅ 前端只是根据商品类型选择调用不同的端点
- ✅
isPresale标记仅用于前端显示,不发送到后端
测试场景
| 场景 | 预期行为 |
|---|---|
| 全部商品有货 | 创建销售出库单 |
| 部分商品缺货 | 缺货商品标记为"预售",创建预售出库单 |
| 套装包含缺货商品 | 套装允许添加,缺货商品标记为预售 |
| 组合支付 + 缺货商品 | 调用预售API创建预售出库单 |
优势
- 提升用户体验:用户无需被库存限制,可以预售缺货商品
- 流程自动化:系统自动判断和调用正确的API
- 数据清晰:预售商品通过后台预售出库单管理,易于追踪
- 视觉友好:预售商品有明显标记,用户一目了然
- 零对接成本:完全利用现有的预售出库单API,无需修改后端