123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import {
- defineStore
- } from 'pinia';
- import CartApi from '@/sheep/api/trade/cart';
- const cart = defineStore({
- id: 'cart',
- state: () => ({
- shopNameMap: [],
- shopSkuMap: [],
- list: [], // 购物车列表
- selectedIds: [], // 已选列表
- isAllSelected: false, // 是否全选
- totalPriceSelected: 0, // 选中项总金额
- }),
- actions: {
- // 获取购物车列表
- async getList() {
- const {
- data,
- code
- } = await CartApi.getCartList();
- if (code === 0) {
- this.list = data.validList
- this.shopSkuMap = data.shopSkuMap
- this.shopNameMap = data.shopNameMap
- // 计算各种关联属性
- this.selectedIds = [];
- this.isAllSelected = true;
- this.totalPriceSelected = 0;
- this.list.forEach((item) => {
- if (item.selected) {
- this.selectedIds.push(item.id);
- this.totalPriceSelected += item.count * item.sku.price;
- } else {
- this.isAllSelected = false;
- }
- });
- }
- },
- // 添加购物车
- async add(goodsInfo) {
- // 添加购物项
- const {
- code
- } = await CartApi.addCart({
- skuId: goodsInfo.id,
- count: goodsInfo.goods_num,
- });
- // 刷新购物车列表
- if (code === 0) {
- await this.getList();
- }
- },
- // 更新购物车
- async update(goodsInfo) {
- const {
- code
- } = await CartApi.updateCartCount({
- id: goodsInfo.goods_id,
- count: goodsInfo.goods_num,
- });
- if (code === 0) {
- await this.getList();
- }
- },
- // 移除购物车
- async delete(ids) {
- let id;
- if (typeof ids === 'number') {
- id = ids
- }else {
- id = ids.join(',')
- }
- const {
- code
- } = await CartApi.deleteCart(id);
-
- if (code === 0) {
- await this.getList();
- }
- },
- // 单选购物车商品
- async selectSingle(goodsId) {
- const {
- code
- } = await CartApi.updateCartSelected({
- ids: [goodsId],
- selected: !this.selectedIds.includes(goodsId), // 取反
- });
- if (code === 0) {
- await this.getList();
- }
- },
- // 全选购物车商品
- async selectAll(flag) {
- const {
- code
- } = await CartApi.updateCartSelected({
- ids: this.list.map((item) => item.id),
- selected: flag
- });
- if (code === 0) {
- await this.getList();
- }
- },
- // 清空购物车。注意,仅用于用户退出时,重置数据
- emptyList() {
- this.list = [];
- this.selectedIds = [];
- this.isAllSelected = true;
- this.totalPriceSelected = 0;
- },
- },
- persist: {
- enabled: true,
- strategies: [{
- key: 'cart-store',
- }, ],
- },
- });
- export default cart;
|