设计一个包含两行记录的购物车,能够显示商品名称和单价,能够单击“+”、“-”按钮修改商品购买数量,商品购买数量改变后能够自动重新小计商品价格,自动更新商品总价,商品购买数量上限是5,超过上限自动弹出警告信息,单击“确认购买”按钮弹出“购买成功”对话框,模拟购买过程。
时间: 2024-10-17 21:12:27 浏览: 29
设计这样一个购物车功能可以分为几个步骤,首先我们需要创建一个基础的组件模型,然后添加交互元素以及处理一些业务逻辑。以下是大致的设计思路:
1. **组件设计**:
- 商品项组件 (`CartItem`),包含商品名称 (name),单价 (price),默认购买数量 (quantity),数量增加/减少按钮 (+/-) 和购买数量上限 (maxQuantity)。
```javascript
// 示例组件
<template>
<div class="cart-item">
<span>{{ name }}</span>
<span>¥{{ price * quantity }}</span>
<button @click="decrement">-</button>
<input type="number" :value="quantity" min="0" max="{{ maxQuantity }}" @change="updateTotalPrice" />
<button @click="increment">+</button>
<span v-if="quantity > maxQuantity" class="warning">已达到购买上限</span>
</div>
</template>
...
<script>
export default {
// ...其他数据和方法
data() {
return {
name: '',
price: 0,
quantity: 1,
maxQuantity: 5,
}
},
methods: {
decrement() {
if (this.quantity > 0) this.quantity--;
},
increment() {
if (this.quantity < this.maxQuantity) this.quantity++;
},
updateTotalPrice(e) {
const newPrice = this.price * this.quantity;
this.totalPrice = newPrice; // 总价应存储在组件外部,这里仅做示例
}
}
};
</script>
```
2. **购物车组件 (`ShoppingCart`)**:
- 显示商品列表,并处理确认购买操作。
- 存储所有商品项 (`items`), 总价 (`totalPrice`), 以及全局购买限制 (`globalMaxQuantity`)。
```javascript
<template>
<div>
<ul>
<li v-for="(item, index) in items" :key="index">
<CartItem :name="item.name" :price="item.price" :quantity="item.quantity" :maxQuantity="globalMaxQuantity" />
</li>
</ul>
<button @click="confirmPurchase">确认购买</button>
<div v-if="isExceedingGlobalLimit">已达购买总数上限,请分批购买。</div>
</div>
</template>
...
<script>
export default {
props: {
globalMaxQuantity: Number, // 全局购买上限
},
data() {
return {
items: [], // 初始化为空数组
totalPrice: 0,
}
},
methods: {
confirmPurchase() {
alert('购买成功');
// 模拟购买操作,实际应用中可能需要连接后台API
},
handleItemAddition(item) {
// 根据需求更新商品数量并检查是否超过总限值
}
}
// 更改CartItem组件内的quantity时,通过props将变化传递给handleItemAddition
// 并在此处理相应逻辑
};
</script>
```
阅读全文