31,购物车的全选,单选 。购物车总的件数,和总计

2023-11-30 06:40

本文主要是介绍31,购物车的全选,单选 。购物车总的件数,和总计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

cart.vue

  async getData() {let res = await http.$axios({url: "/api/selectCart",method: "post",headers: {token: true,},});res.data.forEach((v) => {v["checked"] = true;});this.cardList(res.data);console.log(res.data);

给数据加一个checked   设置成true  并循环

 <div class="check"><van-checkbox v-model="item.checked"></van-checkbox></div>

 mutations-types.js

//购物车
export const CART_LIST = "cartList";
export const CHECK_ALL = "checkAll";
export const UN_CHECK_ALL = "unCheckAll";
export const CHECK_ITEM = 'checkItem'

 cart.js

import {CART_LIST,CHECK_ALL,UN_CHECK_ALL,CHECK_ITEM,
} from "./mutations-types";
export default {state: {list: [], //是购物车的数据selectList: [], //选中的数据},getters: {isCheckedAll(state) {return state.list.length == state.selectList.length;},// 总件数,总价格total(state) {let total = {num: 0,price: 0,};state.list.forEach((v) => {if (v.checked) {// 件数相加total.num += parseInt(v.goods_num);// 总数= 价格乘数量total.price += v.goods_price * v.goods_num;}});return total;},},mutations: {[CART_LIST](state, cartArr) {state.list = cartArr;// console.log(cartArr);cartArr.forEach((v) => {state.selectList.push(v.id);});},//全选[CHECK_ALL](state) {state.selectList = state.list.map((v) => {v.checked = true;return v.id;});},//全不选[UN_CHECK_ALL](state) {state.list.forEach((v) => {v.checked = false;});state.selectList = [];},//单选[CHECK_ITEM](state, index) {console.log(state.list[index].id, state.selectList);let id = state.list[index].id;let i = state.selectList.indexOf(id);//能在selectList 找到对应的id  ,就删除if (i > -1) {// console.log(state.selectList);return state.selectList.splice(i, 1);}//如果之前没有选 中,就给  selectList添加一个id进去state.selectList.push(id);},},actions: {checkAllFn({ commit, getters }) {getters.isCheckedAll ? commit("unCheckAll") : commit("checkAll");},},
};

cart.vue

<template><div class="cart container"><header><ul><li><i class="iconfont icon-fanhui" @click="$router.back()"></i></li><li><span>购物车</span></li><li><span>编辑</span></li></ul></header><section v-if="list.length"><div class="cart-title">{{ isCheckedAll }}<van-checkbox @click="checkAllFn" :value="isCheckedAll"></van-checkbox><!-- value单向数据绑定 --><span>商品</span></div><ul><li v-for="(item, index) in list" :key="index"><div class="check"><van-checkbox@click="checkItem(index)"v-model="item.checked"></van-checkbox></div><h2><img :src="item.goods_imgUrl" alt="" /></h2><div class="goods"><div class="goods-title"><span>{{ item.goods_name }}</span><i class="iconfont icon-fanhui"></i></div><div class="goods-price">$ {{ item.goods_price }}</div><van-stepper v-model="item.goods_num" /></div></li></ul></section><section v-else>没有购物车数据 ,<router-link to="/home">请先回主页</router-link></section><footer v-if="list.length"><div class="radio"><van-checkbox @click="checkAllFn" :value="isCheckedAll"></van-checkbox></div><div class="total"><div>共有<span class="total-active">{{ total.num }}</span>件商品</div><div><!-- 保留小数点后两位toFixed()  --><span>总计:</span><span class="total-active">¥{{ total.price.toFixed(2) }}+0茶币</span></div></div><div class="order">去结算</div></footer></div>
</template><script>
import http from "@/common/api/request.js";
import { mapMutations, mapGetters, mapState, mapActions } from "vuex";
export default {name: "Cart",data() {return {checked: true,};},computed: {...mapState({list: (state) => state.cart.list,}),...mapGetters(["isCheckedAll", "total"]),},created() {this.getData();},methods: {...mapMutations(["cartList", "checkItem"]),...mapActions(["checkAllFn"]),async getData() {let res = await http.$axios({url: "/api/selectCart",method: "post",headers: {token: true,},});res.data.forEach((v) => {v["checked"] = true;});this.cartList(res.data);console.log(res.data);},},
};
</script>

 

这篇关于31,购物车的全选,单选 。购物车总的件数,和总计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436013

相关文章

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹),rmdir命令会失败。 如果你的目标是删除mysql-8.0.31文件夹及其内部的所有内容(无论是否为空),你应该使用rm命令结合-r(或-R,它们是等价的)选项来递归地删

尝试用java spring boot+VUE3实现前后端分离部署(8/31)

前言         这几天开学了,公司这边几个和学校对接的项目都挺忙的,然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目,大佬让我自己去学了。在看若依的项目的时候在想,python的FLASK后端实现和JAVA spring boot的实现差别大不大,两者实现的思路估计大差不差,那具体的代码逻辑和代码实现又有多大差别,java面向对象的编程思想又是怎么体现的。这些想法迫使我将原来使用

Flutter-单选和多选

import 'package:flutter/material.dart';//单选和多选void main() => runApp(MaterialApp(home: _home(),));class _home extends StatefulWidget {@overrideState<StatefulWidget> createState() {// TODO: implement

[C/C++入门][进制原理]31、求分数序列和

题目来自于信息学奥赛 1078 分析: 这道题看起来比较复杂,实际上只需要通过两个公式,一次性求出分母和分子,然后把这个求出来的数加入到变量和中。甚至都不需要知道总共游哪些数。数组都用不上。循环就能解决。 #include <iostream>#include <iomanip> // 用于格式化输出using namespace std;int main() {double s

Android RadioButton 单选按钮

RadioGroup 单选按钮组, 可以包含多个单选按钮,当单选按钮选中状态改变时会触发setOnCheckedChangeListener package shortcut.song.com.myapplication;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;imp

“弹性盒子”一维布局系统(补充)——WEB开发系列31

弹性盒子是一种一维布局方法,用于根据行或列排列元素。元素可以扩展以填补多余的空间,或者缩小以适应较小的空间,为容器中的子元素提供灵活的且一致的布局方式。 一、什么是弹性盒子? CSS 弹性盒子(Flexible Box Layout,简称 Flexbox)是 CSS3 中引入的一种布局模式,提供一种有效的方式来布局、对齐和分配容器内空间,特别是在动态和复杂的应用界面中。 1、

掌握Vuex:构建高效状态管理的购物车实例指南

Vuex 是 Vue.js 的官方状态管理库,它为 Vue 应用提供了一个集中存储所有组件状态的地方,并以相应的规则保证状态以一种可预测的方式发生变化。 1. 安装 Vuex 首先,需要安装 Vuex: npm install vuex --save 2. 创建 Store 在 Vue 项目中创建一个 store 文件夹,并在其中创建 index.js 文件: // store/in

Vue学习:v-model绑定文本框、单选按钮、下拉菜单、复选框等

v-model指令可以在组件上使用以实现双向绑定,之前学习过v-model绑定文本框和下拉菜单,今天把表单的几个控件单选按钮radio、复选框checkbox、多行文本框textarea都试着绑定了一下。 一、单行文本框和多行文本框 <p>1.单行文本框</p>用户名:<input type="text" v-model="inputMessage"><p>您的用户名是:{{inputMe

Linux入门攻坚——31、rpc概念及nfs和samba

NFS:Network File System     传统意义上,文件系统在内核中实现 RPC:函数调用(远程主机上的函数),Remote Procedure Call protocol     一部分功能由本地程序完成     另一部分功能由远程主机上的 NFS本质上是一种RPC的实现。 本地用户进程要使用文件系统,通过系统调用,由内核完成文件系统的操作,而NFS只不过是系统内核又通过RP

LeetCode 31 Next Permutation

题意: 给出一串数字,求该排列的下一个排列。如果该排列为字典序最大排列,则输出字典序最小排列。 思路: 首先C++里面有求下一个排列的函数next_permutation,该函数返回0即表示当前排列字典序最大。 如果要自己动手实现,那么就考虑“如何找到比当前排列大1的排列”。 假设排列A(aaaXddd)比排列B(aaaYfff)大1,a部分为两排列相同部分,X与Y表示最靠左边不同