import {Image, ScrollView, View } from "@tarojs/components" import Popup from "@/components/popup" import classnames from "classnames"; import MCheckbox from "@/components/checkbox"; import LoadingCard from "@/components/loadingCard"; import InfiniteScroll from "@/components/infiniteScroll"; import styles from "./index.module.scss" import { useCallback, useEffect, useRef, useState } from "react"; import Taro from "@tarojs/taro"; import { alert, goLink } from "@/common/common"; import {GetShoppingCartApi, DelShoppingCartApi} from "@/api/shopCart" import { formatHashTag, formatImgUrl, formatMillionYuan } from "@/common/fotmat"; type param = { show?: true|false, onClose?: () => void } export default ({show = false, onClose}: param) => { const selectList = [ {value:-1, title:'不限', unit:'', eunit:''}, {value:0, title:'大货', unit:'件', eunit:'kg'}, {value:1,title:'剪板', unit:'米', eunit:'m'}, {value:2,title:'散剪', unit:'米', eunit:'kg'}, ] const [selectIndex, setSelectIndex] = useState(-1) const selectProduct = (index:number) => { setSelectIndex(index) } useEffect(() => { resetList() setSelectStatus(true) }, [selectIndex]) //重置勾选数据 const resetList = () => { list?.map(item => { if(selectIndex == item.sale_mode || selectIndex == -1) { item.select = true } else { item.select = false } }) setList([...list]) } //获取数据 const [list, setList] = useState([]) const [loading, setLoading] = useState(false) const {fetchData} = GetShoppingCartApi() const getShoppingCart = async () => { setLoading(true) const {data} = await fetchData() let color_list = data.color_list||[] initList(color_list) setList(color_list) setLoading(false) } //初始化全部数据 const initList = (color_list) => { if(selectIndex == -1) { color_list?.map(item => { item.select = true }) } } //显示是展示数据 useEffect(() => { if(!show) { setList([]) setSelectIndex(-1) } else { getShoppingCart() } }, [show]) useEffect(() => { return () => { setList([]) } }, []) const [showPopup, setShowPopup] = useState(false) useEffect(() => { setShowPopup(show) }, [show]) //全选反选 const [selectStatus, setSelectStatus] = useState(false) const selectAll = () => { list.map(item => { if(selectIndex == item.sale_mode || selectIndex == -1) item.select = !selectStatus }) setSelectStatus(!selectStatus) setList([...list]) } //checkbox选中回调 const selectCallBack = (item) => { item.select = true checkSelect() setList([...list]) } //checkbox选中判断是否全部选中,全部选中后是全选,否则反选 const checkSelect = () => { let list_count = 0 let select_count = 0 list?.map(item => { if(selectIndex == -1 || selectIndex == item.sale_mode) { list_count ++ if(item.select) select_count++ } }) console.log('list_count::',list_count) console.log('select_count::',select_count) setSelectStatus(select_count == list_count) } //checkbox关闭回调 const colseCallBack = (item) => { item.select = false checkSelect() setList([...list]) } //popup关闭 const closePopup = () => { onClose?.() setShowPopup(false) } //删除购物车内容 const {fetchData:delShopFetchData} = DelShoppingCartApi() const delSelect = () => { Taro.showModal({ content: '删除所选商品?', success: async function (res) { if (res.confirm) { getSelectId() const res = await delShopFetchData({id:selectIds.current}) if(res.success) { getShoppingCart() Taro.showToast({ title: '成功', icon: 'success', }) } else { Taro.showToast({ title: res.msg, icon: 'none', }) } } else if (res.cancel) { console.log('用户点击取消') } } }) } //获取面料选中的id const selectIds = useRef([]) const getSelectId = () => { list?.map(item => { if(selectIndex == -1 || selectIndex == item.sale_mode) { item.select&&selectIds.current.push(item.id) } }) } //格式化金额 const formatPirce = useCallback((price) => { const {num} = formatMillionYuan(price, 100) return Number(num) }, []) //格式化数量 const formatCount = useCallback((item) => { return item.sale_mode == 0? item.roll + '件': item.length + 'm' }, []) //去结算 const orderDetail = () => { if(selectIndex == -1 ) { console.log(selectIndex, selectIds.current) alert.error('请选择面料') } goLink('/pages/order/index',{ids:selectIds.current, sale_mode:selectIndex}) } return ( closePopup()} > {!selectStatus?'全选':'反选'} 删除勾选项 {selectList.map((item) => { return selectProduct(item.value)} className={classnames(styles.search_item, (selectIndex==item.value)&&styles.search_item_select)}>{item.title} })} {loading&&} {!loading&&list?.length > 0&& {list?.map((item, index) => { return selectCallBack(item)} onClose={() => colseCallBack(item)}/> {formatHashTag(item.product_code, item.product_name)} {item.product_color_code +' ' + item.product_color_name} {item.sale_mode_name} {formatPirce(item.sale_price)}/kg ×{formatCount(item)} })} } {!loading&&list?.length == 0 && 暂未选择商品 去选购 } 200 预估金额 orderDetail()}> 去结算 ) }