美文网首页
cc-product-waterfall仿天猫、淘宝购物车店铺商

cc-product-waterfall仿天猫、淘宝购物车店铺商

作者: 前端组件分享 | 来源:发表于2023-12-02 19:42 被阅读0次

    cc-product-waterfall仿天猫、淘宝购物车店铺商品列表组件

    引言

    在电商应用中,购物车体验的优化对于提升用户满意度和转化率至关重要。在本文中,我们将深入探讨如何使用cc-product-waterfall组件,结合uni-number-box和xg-widget,来构建一个仿天猫、淘宝的购物车店铺商品列表。同时,我们将详细解析相关的事件处理函数,以实现如商品过滤、店铺勾选、商品勾选、数量改变以及全选等功能。

    组件介绍

    cc-product-waterfall

    cc-product-waterfall是一个强大的商品列表组件,支持瀑布流布局,非常适合用于展示大量商品。

    uni-number-box

    uni-number-box是一个数字输入框组件,用户可以通过它方便地修改商品数量。

    xg-widget

    xg-widget是一套通用的UI组件库,可以帮助我们快速构建出复杂且交互性强的用户界面。

    购物车店铺商品列表实现

    步骤1:引入必要的组件

    首先,确保你的项目中已经引入了cc-product-waterfall、uni-number-box和xg-widget等组件。具体的引入方法可能会根据你使用的框架或库有所不同。

    步骤2:构建基本布局

    使用cc-product-waterfall构建商品列表,uni-number-box用于商品数量的输入,xg-widget中的checkbox组件用于实现店铺和商品的勾选功能。

    步骤3:添加交互功能

    通过事件处理函数来实现各种交互功能,包括商品过滤、店铺勾选、商品勾选、数量改变以及全选等。

    事件处理详解

    过滤选择的商品和未选择的商品

    filterCheckedProduct和filterUncheckedProduct方法分别用于过滤出已选择和未选择的商品。这两个方法都接受一个商品列表作为参数,然后使用数组的filter方法根据商品的checked属性进行过滤。

    示例代码:

    使用方法

    引入uni-number-box xg-widget组件

    事件处理如下:

    // 过滤选择的商品

    filterCheckedProduct(products) {

    returnproducts.filter(item => item.checked);

    },

    // 过滤未选择的商品

    filterUncheckedProduct(products) {

    returnproducts.filter(item => !item.checked);

    },

    // 店铺勾选

    onShopCheckboxTap(shop) {

    shop.checked= !shop.checked;

    shop.products.forEach(product => {

    product.checked= shop.checked;

    });

    },

    // 商品勾选

    onProductCheckboxTap(product) {

    product.checked= !product.checked

    },

    // 数量改变

    onNumberBoxChange(product, e) {

    product.count = e;

    },

    // 全选

    onCheckAllTap() {

    constchecked= !this.allChecked;

    this.shops.forEach(shop => {

    shop.products.forEach(product => {

    product.checked=checked;

    })

    })

    }

    HTML代码实现部分

    <!-- 空购物车 -->

    class="bg-color-white border-bottom-left-radius-xl border-bottom-right-radius-xl padding-lg">

    购物车是空的

    逛逛秒杀

    看看关注

    <!-- 非空购物车 -->

    class="padding-lg margin-bottom-lg bg-color-white border-radius-xl">

    <!-- 店铺购物车商品 -->

    <!-- 店铺标题 -->

    {{shop.name}}

    <!-- <view class=""></view> -->

    <!-- 店铺产品列表 -->

    :key="productIndex">

    {{product.title}}

    class="row-center-center bg-color-grey border-radius-rect-circle padding-side-base padding-v-side-xs">

    class="font-size-sm">

    {{property}},

    @change="onNumberBoxChange(product, $event)">

    全选

    合计:

    ¥{{totalAmount.toFixed(2)}}

    去结算({{totalCount}})

    // 获取购物车数据来源

    importdatafrom'@/data/cart/cart';

    importmixinfrom'@/common/mixin';

    constcustomData = {

    page:0

    }

    exportdefault{

    mixins: [mixin],

    data() {

    return{

    isEmptyCart:false,

    loadMoreStatus:'more',

    shops: [],

    };

    },

    computed: {

    // 全选事件

    allChecked() {

    returnthis.cartShops.filter(item=>item.checked).length ===this.cartShops.length;

    },

    // 购物车店铺数据

    cartShops() {

    this.shops.forEach(shop=>{

    constuncheckedProducts =this.filterUncheckedProduct(shop.products);

    shop.checked = (uncheckedProducts.length ===0);

    })

    returnthis.shops;

    },

    // 计算数量

    totalCount() {

    letcount =0;

    this.cartShops.forEach(shop=>{

    this.filterCheckedProduct(shop.products).forEach(product=>{

    count +=parseInt(product.count);

    })

    })

    returncount;

    },

    // 计算金额

    totalAmount() {

    letamount =0;

    this.cartShops.forEach(shop=>{

    this.filterCheckedProduct(shop.products).forEach(product=>{

    amount +=Number(product.price * product.count)

    })

    })

    returnamount;

    }

    },

    asynccreated() {

    this.loadMoreStatus ='loading';

    // 获取商铺数据

    constshopPromise = data.shops();

    this.shops =awaitshopPromise;

    },

    methods: {

    // 过滤选择的商品

    filterCheckedProduct(products) {

    returnproducts.filter(item=>item.checked);

    },

    // 过滤未选择的商品

    filterUncheckedProduct(products) {

    returnproducts.filter(item=>!item.checked);

    },

    // 店铺勾选

    onShopCheckboxTap(shop) {

    shop.checked = !shop.checked;

    shop.products.forEach(product=>{

    product.checked = shop.checked;

    });

    },

    // 商品勾选

    onProductCheckboxTap(product) {

    product.checked = !product.checked

    },

    // 数量改变

    onNumberBoxChange(product, e) {

    product.count = e;

    },

    // 全选

    onCheckAllTap() {

    constchecked = !this.allChecked;

    this.shops.forEach(shop=>{

    shop.products.forEach(product=>{

    product.checked = checked;

    })

    })

    }

    },

    }

    .empty-button {

    @include border(1px solid);

    font-size: $uni-font-size-lg;

    border-radius: $uni-border-radius-rect-circle;

    margin: 0 $uni-spacing-col-xl;

    padding: $uni-spacing-row-sm $uni-spacing-col-xl;

    }

    $order-amount-height: 100rpx;

    .product-list {

    /* #ifdef APP-NVUE */

    @include position(fixed, 0 0 $order-amount-height 0);

    /* #endif */

    // width: 500rpx;

    }

    .shop-checkbox {

    transform: scale(0.8);

    }

    .product-checkbox {

    transform: scale(0.75);

    }

    .product-image {

    width: 200rpx;

    height: 200rpx;

    }

    .number-box {

    transform-origin: 100% 50%;

    transform: scale(0.75);

    }

    .order-amount-placeholder {

    height: $order-amount-height;

    }

    .order-amount {

    /* #ifndef APP-NVUE */

    @include position(fixed, none 0 var(--window-bottom) 0);

    /* #endif */

    /* #ifdef APP-NVUE */

    @include position(fixed, none 0 0 0);

    /* #endif */

    height: $order-amount-height;

    /* #ifndef APP-NVUE */

    z-index: 10000;

    /* #endif */

    }

    店铺勾选和商品勾选功能实现

    当用户点击店铺或商品的勾选框时,我们需要更新对应的checked状态。onShopCheckboxTap方法用于处理店铺的勾选事件,它会更新店铺及其所有商品的checked状态。onProductCheckboxTap方法用于处理商品的勾选事件,只会更新当前商品的checked状态。这两个方法都使用了JavaScript的逻辑非操作符来实现checked状态的切换。当用户点击全选按钮时,onCheckAllTap方法将会被调用。这个方法会检查当前的全选状态,然后遍历所有的店铺和商品,将它们的checked状态设置为相反的值。这样就可以实现一键全选或全不选的功能

    附组件完整代码及示例项目下载地址:https://ext.dcloud.net.cn/plugin?id=15350

    相关文章

      网友评论

          本文标题:cc-product-waterfall仿天猫、淘宝购物车店铺商

          本文链接:https://www.haomeiwen.com/subject/qhahgdtx.html