vue实现购物车案例

话不多说,先上效果图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装elementui组件库,可直接食用。

<template><div><!-- 购物车部分 --><el-container><el-header><h1>购物车案例一条龙</h1></el-header><el-main><!-- 折叠面板展示不同商店的商品 --><el-collapse v-model="activeNames" accordion><!-- 遍历商店列表 --><el-collapse-itemv-for="(store, index) in stores":title="store.name":name="'store' + index":key="store.name"><!-- 使用表格展示商品信息 --><el-table :data="store.items" style="width: 100%"><el-table-column prop="name" label="商品名称"></el-table-column><el-table-column prop="price" label="价格"></el-table-column><el-table-column label="数量"><template slot-scope="scope"><!-- 使用输入框控件调整商品数量 --><el-input-numberv-model="scope.row.quantity":min="1"@change="updateQuantity(scope.row)"></el-input-number></template></el-table-column><el-table-column label="操作"><template slot-scope="scope"><!-- 移除商品按钮 --><el-buttontype="danger"@click="removeItem(store, scope.$index)">移除</el-button></template></el-table-column></el-table></el-collapse-item></el-collapse></el-main><el-footer><!-- 显示购物车总计价格 --><div>总计:{{ getTotalPrice() }}</div><!-- 结算按钮 --><el-button type="primary" @click="showCheckout">结算</el-button></el-footer></el-container><!-- 收货流程模态框 --><el-dialog :visible.sync="dialogVisible" width="60%" center><!-- 步骤条 --><el-steps :active="active" finish-status="success" align-center><el-step title="选择收货地址" icon="el-icon-location"></el-step><el-step title="付款" icon="el-icon-bank-card"></el-step><el-step title="完成" icon="el-icon-check"></el-step></el-steps><div v-show="active === 0" class="center-content"><!-- 显示收货地址选择 --><h2>请选择收货地址:</h2><el-radio-group v-model="selectedAddress"><el-radio:label="address"v-for="(address, index) in addresses":key="index">{{ address.name }} - {{ address.address }} - {{ address.city }} -{{ address.zip }}</el-radio></el-radio-group></div><div v-show="active === 1" class="center-content"><!-- 显示付款信息 --><h2>请完成付款</h2><!-- 可以放置付款表单或者其他付款相关内容 --><div style="margin-top: 20px"><el-button @click="pay" type="primary">确认付款</el-button><el-button @click="prevStep">返回</el-button></div></div><div v-show="active === 2" class="center-content"><!-- 显示付款完成信息 --><h2>付款完成</h2><!-- 展示购买的商品信息、总计和收货地址 --><div v-if="selectedAddress"><h3>购买的商品信息:</h3><!-- 使用 el-table-tree 来展示购买的商品信息 --><el-table :data="selectedItems" style="width: 100%"><el-table-column type="expand"><template slot-scope="props"><!-- 子商品信息 --><el-table :data="props.row.children" style="width: 100%"><el-table-columnprop="name"label="商品名称"></el-table-column><el-table-column prop="price" label="价格"></el-table-column><el-table-columnprop="quantity"label="数量"></el-table-column></el-table></template></el-table-column><!-- 商店名称列 --><el-table-columnprop="storeName"label="商店名称"></el-table-column></el-table><!-- 收货地址信息 --><div>收货地址:{{ selectedAddress.name }} -{{ selectedAddress.address }} - {{ selectedAddress.city }} -{{ selectedAddress.zip }}</div></div><!-- 关闭模态框按钮 --><div style="margin-top: 20px"><el-button @click="closeDialog" type="primary">关闭</el-button></div></div><div slot="footer" class="dialog-footer" v-show="active !== 2"><!-- 下一步按钮 --><el-button @click="nextStep" type="primary">下一步</el-button></div></el-dialog></div>
</template><script>
export default {data() {return {dialogVisible: false,active: 0,addresses: [{ name: "张三", address: "北京市朝阳区", city: "北京", zip: "100000" },{name: "李四",address: "上海市浦东新区",city: "上海",zip: "200000",},{ name: "王五", address: "广州市天河区", city: "广州", zip: "300000" },{ name: "赵六", address: "深圳市南山区", city: "深圳", zip: "400000" },],selectedAddress: null, // 存储选中的收货地址stores: [{name: "阳光超市",items: [{ id: 1, name: "红烧肉", price: 28, quantity: 2 },{ id: 2, name: "麻辣香锅", price: 38, quantity: 1 },{ id: 3, name: "西湖醋鱼", price: 48, quantity: 3 },],},{name: "小龙虾馆",items: [{ id: 4, name: "香辣小龙虾", price: 58, quantity: 1 },{ id: 5, name: "麻辣小龙虾", price: 68, quantity: 2 },{ id: 6, name: "蒜蓉小龙虾", price: 78, quantity: 2 },],},],activeNames: [], // 折叠面板激活的面板名称数组};},computed: {selectedItems() {// 获取选中的商品列表const selectedItems = [];for (const store of this.stores) {const storeItems = store.items.filter((item) => item.quantity > 0);if (storeItems.length > 0) {selectedItems.push({ storeName: store.name, children: storeItems });}}return selectedItems;},},methods: {removeItem(store, index) {// 移除商品store.items.splice(index, 1);},updateQuantity(item) {// 更新商品数量item.quantity = Math.max(1, parseInt(item.quantity) || 1);},getTotalPrice() {// 计算购物车总价let totalPrice = 0;for (const store of this.stores) {totalPrice += store.items.reduce((total, item) => total + item.price * item.quantity,0);}return totalPrice;},showCheckout() {// 显示结算模态框this.dialogVisible = true;},nextStep() {// 进入下一步this.active++;},prevStep() {// 返回上一步this.active--;},pay() {// 处理付款逻辑,这里可以放置付款的相关操作// 付款成功后进入下一步this.nextStep();},closeDialog() {// 关闭模态框this.dialogVisible = false;// 重置步骤状态this.active = 0;},},
};
</script><style>
.center-content {text-align: center;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA开发】Modelsim和Vivado的使用

本篇文章包含的内容 一、FPGA工程文件结构二、Modelsim的使用三、Vivado的使用3.1 建立工程3.2 分析 RTL ANALYSIS3.2.1 .xdc约束&#xff08;Constraints&#xff09;文件的产生 3.3 综合 SYNTHESIS3.4 执行 IMPLEMENTATION3.5 烧录程序3.6 程序固化3.6.1 SPI约束3.6.2 .bin文…

特征工程:特征提取和降维-上

目录 一、前言 二、正文 Ⅰ.主成分分析 Ⅱ.核主成分分析 三、结语 一、前言 前面介绍的特征选择方法获得的特征&#xff0c;是从原始数据中抽取出来的&#xff0c;并没有对数据进行变换。而特征提取和降维&#xff0c;则是对原始数据的特征进行相应的数据变换&#xff0c;并…

Rust开发WASM,WASM Runtime运行

安装wasm runtime curl https://wasmtime.dev/install.sh -sSf | bash 查看wasmtime的安装路径 安装target rustup target add wasm32-wasi 创建测试工程 cargo new wasm_wasi_demo 编译工程 cargo build --target wasm32-wasi 运行 wasmtime ./target/wasm32-wasi/d…

猫头虎分享已解决Bug ‍ || TypeError: Object of type ‘int64‘ is not JSON serializable

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Appium使用初体验之参数配置,简单能够运行起来

一、服务器配置 Appium Server配置与Appium Server GUI&#xff08;可视化客户端&#xff09;中的配置对应&#xff0c;尤其是二者如果不在同一台机器上&#xff0c;那么就需要配置Appium Server GUI所在机器的IP&#xff08;Appium Server GUI的HOST也需要配置本机IP&#xf…

spring boot和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 日志配置 logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration scan"true" scanPeriod"10000000 seconds" debug…

探索C语言中的联合体与枚举:数据多面手的完美组合!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C语言学习 贝蒂的主页&#xff1a;Betty‘s blog 1. 联合体的定义 联合体又叫共用体&#xff0c;它是一种特殊的数据类型&…

2024智慧城市新纪元:引领未来,重塑都市生活

随着科技的飞速发展和数字化转型的不断深入&#xff0c;2024年智慧城市领域迎来了全新的发展格局。 这一年&#xff0c;智慧城市的建设更加注重人性化、可持续性和创新性&#xff0c;为城市居民带来了前所未有的便捷与舒适。以下将重点关注智慧城市的几个核心内容&#xff0c;…

《幻兽帕鲁》攻略:0基础入门及游戏基础操作 幻兽帕鲁基础设施 幻兽帕鲁基础攻击力 Mac苹果电脑玩幻兽帕鲁 幻兽帕鲁加班加点

今天就跟大家聊聊《幻兽帕鲁》攻略&#xff1a;0基础入门及游戏基础操作。 如果想在苹果电脑玩《幻兽帕鲁》记得安装CrossOver哦。 以下纯干货&#xff1a; CrossOver正版安装包&#xff08;免费试用&#xff09;&#xff1a;https://souurl.cn/Y1gDao 一、基础操作 二、界面…

Logback - 日志框架

引言 在当今的企业级应用开发中&#xff0c;日志管理是一个不可或缺的部分。它不仅帮助我们进行错误跟踪&#xff0c;还能有效监控应用程序的运行状态&#xff0c;为性能优化提供数据支撑。Spring Boot作为一个简化Spring应用开发的框架&#xff0c;自带了强大的日志管理功能。…

雾计算:去中心化计算的未来之旅

雾计算是去中心化计算的基石&#xff0c;它将重塑我们的数字格局。通过使计算和存储更接近数据源&#xff0c;它改变了我们处理物联网生成数据的方式。通过雾计算探索未来&#xff0c;揭示了减少延迟、增强隐私和高效网络利用等好处。 随着传感器和可穿戴设备等物联网设备的数…

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能&#xff0c;PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

网站被攻击有什么办法呢?

最近&#xff0c;德迅云安全遇到不少网站用户遇到攻击问题&#xff0c;来咨询安全解决方案。目前在所有的网络攻击方式中&#xff0c;DDoS是最常见&#xff0c;也是最高频的攻击方式之一。不少用户网站上线后&#xff0c;经常会遭受到攻击的困扰。有些攻击持续时间比较短影响较…

MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。

视频互动应用已经是政务和协同办公必备系统&#xff0c;早期的分模块&#xff0c;分散的视频应该不能满足业务需要&#xff0c;需要把视频监控&#xff0c;会议&#xff0c;录存一体把视频资源整合起来&#xff0c;根据客户需求&#xff0c;需要能够多方视频互动&#xff0c;直…

代码随想录算法训练营第29天|491.递增子序列 * * 46.全排列 * 47.全排列 II

文章目录 491.递增子序列思路&#xff1a;代码 思路&#xff1a;优化代码&#xff1a; 46.全排列思路代码一&#xff1a;使用used数组代码二&#xff1a;使用path判断元素 47.全排列 II思路一&#xff1a;层节点和路径都是用used数组做记录思路二&#xff1a;层通过排序后是否重…

学习Vue3的第一天

目录 简介 什么是 Vue&#xff1f; 创建Vue3工程 前提条件 基于 vue-cli 创建&#xff08;不推荐&#xff09; 基于 vite 创建&#xff08;推荐&#xff09; 通过 CDN 使用 Vue 代码示例 简介 什么是 Vue&#xff1f; Vue.js 是一个流行的前端 JavaScript 框架&#…

用keytool 生成JWT的RSA非对称密钥

写在前面 JWT 令牌 可以由 X.509 证书或 256 位非对称密钥签名来充当&#xff0c;为了获得合法的JWT 令牌&#xff0c;我们可以使用JDK中的keytool.exe工具来生成。 本例的操作环境是Windows系统&#xff0c;操作的前置条件需要先安装好JDK&#xff0c;并配置好环境变量&…

Vue 学习随笔系列九 -- 表格中插入图片、背景、自定义表头

表格中插入图片和icon 文章目录 表格中插入图片和icon一、如何插入图片1、代码2、效果 二、文字添加背景1、代码2、效果 三、表头悬浮提示语四、表头添加图标 一、如何插入图片 1、代码 <template><div><el-tablesize"small"borderv-loading"l…

K8S部署Harbor镜像仓库(含离线安装包harbor-offline-installer国内下载链接)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

面向智算服务,构建可观测体系最佳实践

作者&#xff1a;蓟北 构建面向 AI、大数据、容器的可观测体系 &#xff08;一&#xff09;智算服务可观测概况 对于越来越火爆的人工智能领域来说&#xff0c;MLOps 是解决这一领域的系统工程&#xff0c;它结合了所有与机器学习相关的任务和流程&#xff0c;从数据管理、建…