import { Checkbox, Stepper } from 'antd-mobile'; import './cartList.scss'; import { perOrder } from '../../../../api/order'; import { connect } from 'react-redux'; import { useNavigate } from 'react-router-dom'; import { useEffect, useState } from 'react';

const CartList = ({ cart, recommend }) => { const [num, setNum] = useState(); const [sum, setSum] = useState(); const [checkAll, setCheckAll] = useState(false); // 全选状态 const navigate = useNavigate();

const getSum = () => {
    let data = [...cart];
    let sum = 0;
    let num = 0;
    data.forEach(item => {
        sum += item.price * item.num;
        num += item.num;
    });

    setNum(num);
    setSum(sum);
};

// 勾选单个商品
const handleCheck = (index) => {
    const newCart = [...cart];
    newCart[index].checked = !newCart[index].checked;
    // 判断是否全部勾选
    const isAllChecked = newCart.every(item => item.checked);
    setCheckAll(isAllChecked);
    // 更新购物车状态
    dispatch({
        type: 'UPDATE_CART',
        payload: newCart
    });
};

// 全选
const handleCheckAll = () => {
    const newCart = [...cart];
    const isChecked = !checkAll;
    newCart.forEach(item => item.checked = isChecked);
    setCheckAll(isChecked);
    // 更新购物车状态
    dispatch({
        type: 'UPDATE_CART',
        payload: newCart
    });
};

// 手动修改商品数量
const handleNumChange = (index, val) => {
    const newCart = [...cart];
    newCart[index].num = val;
    // 更新购物车状态
    dispatch({
        type: 'UPDATE_CART',
        payload: newCart
    });
};

// 去结算
const jiesuanFn = () => {
    const list = cart.filter(item => item.checked);
    let cartId = [];
    let cartList = [];

    list.forEach(item => {
        cartId.push(item.cartId);
        cartList.push(item);
    });

    perOrder({ cartId: cartId, totalMoney: sum }).then(res => {
        console.log(res);
        if (res.data.code === 666) {
            navigate('/ordersubmit', { state: { cartList, preOrderId: res.data.result.preOrderId, sum: sum } });
        }
    });
};

useEffect(() => {
    getSum();
}, [cart]);

return (
    <div className='cart_page'>
        <div className='title3'>
            购物车
            <div className='edit'>编辑</div>
        </div>
        <div className='cart_list'>
            <div className='cartlist-0'>
                {cart.length === 0 ? (
                    <div className='a1'>购物车是空的,快买点东西奖励自己吧</div>
                ) : (
                    <div className='cart_item'>
                        {cart.map((item, index) => (
                            <div key={index}>
                                <Checkbox checked={item.checked} onChange={() => handleCheck(index)}></Checkbox>
                                <img src={item.pic} alt='' />
                                <div className='right'>
                                    <div>{item.name}</div>
                                    <div>珊瑚紫(素皮)</div>
                                    <div className='price'>{item.price}</div>
                                    <Stepper
                                        showNumber
                                        min={1}
                                        value={item.num}
                                        onChange={(val) => handleNumChange(index, val)}
                                    />
                                </div>
                            </div>
                        ))}
                    </div>
                )}
            </div>
        </div>
        <div className='title2'>您可能还喜欢</div>
        <div className='like-list flex'>
            {recommend.map((item, index) => (
                <div key={index} className='like-item'>
                    <img src={item.photoPath} alt='' />
                    <div className='name'>{item.name}</div>
                    <div className='name1'>{item.promotionInfo}</div>
                    <div>
                        <span className='price'>¥{item.promoPrice}</span>
                        <span className='price1'>¥{item.price}</span>
                    </div>
                </div>
            ))}
        </div>
        <div className='footer2 flex'>
            <div>
                <Checkbox checked={checkAll} onChange={handleCheckAll}></Checkbox>
                <span>全选</span>
                <div>
                    商品总数量{num}  | 商品总价格:{sum}
                </div>
                <button onClick={jiesuanFn}>去结算</button>
            </div>
            <div>
                {/* <span>共计:<span className='price'>¥5699</span></span> */}
            </div>
        </div>
    </div>
);

};

export default connect(state => ({ cart: state.cart }))(CartList); ``

import Checkbox Stepper from antd-mobile;import cartListscss;import perOrder from apiorder;import connect from react-redux;import useNavigate from react-router-dom;import useEffect useState

原文地址: https://www.cveoy.top/t/topic/fqxf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录