0
点赞
收藏
分享

微信扫一扫

31,购物车的全选,单选

日月同辉9908 2022-03-23 阅读 48
前端

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;
    },
  },
  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">xx</span>
          件商品
        </div>
        <div>
          <span>总计:</span><span class="total-active">$1280+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"]),
  },
  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>

 

举报

相关推荐

0 条评论