import { Button, RichText, Text, View } from '@tarojs/components' import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' import classnames from 'classnames' import { useCallback, useEffect, useMemo, useState } from 'react' import DesSwiper from './components/swiper' import OrderCount from './components/orderCount' import styles from './index.module.scss' import FeaturePopup from './components/feature' import ShopCart from '@/components/shopCart' import { formatHashTag, formatImgUrl, formatPriceDiv, formatRemoveHashTag } from '@/common/fotmat' import { GetProductDetailApi } from '@/api/material' import useLogin from '@/use/useLogin' import { AnalysisShortCodeApi, GetShortCodeApi } from '@/api/share' import { SHARE_SCENE } from '@/common/enum' import useUserInfo from '@/use/useUserInfo' import LabAndImg from '@/components/LabAndImg' import { alert } from '@/common/common' import AddCollection from '@/components/addCollection' import { AddFavoriteApi, DelFavoriteProductApi } from '@/api/favorite' import useCommonData from '@/use/useCommonData' import { IMG_CND_Prefix } from '@/common/constant' import MoveBtn from '@/components/moveBtn' interface item { title: string; img: string; url: string; id: number } interface Params { list?: item[] swiperOnClick?: (val: item) => void style?: Object } const Details = (props: Params) => { const { getPhoneNumber, userInfo } = useLogin() // 获取参数(有两种参数:1.商品id, 2.页面分享) const router = useRouter() const [params, setParams] = useState({ id: '', share: null }) // 解析短码参数 const { fetchData: fetchDataAnalysisShortCode } = AnalysisShortCodeApi() const analysisShortCode = async() => { const res = await fetchDataAnalysisShortCode({ md5_key: router.params.share }) setParams({ id: res.data.product_id, share: res.data }) } // 判断是否是分享过来的参数 const judgeParam = async() => { if (router.params.id) { setParams({ ...params, id: router.params.id }) } else if (router.params.share) { analysisShortCode() } } // 获取购物车数据数量 const { getShopCount, commonData } = useCommonData() // 获取数据 const [productInfo, setProductInfo] = useState({}) const { fetchData } = GetProductDetailApi() const getProductDetail = async() => { const { data } = await fetchData({ id: params.id }) setProductInfo(data) Taro.stopPullDownRefresh() } // 面料名称 const productName = useMemo(() => { return formatHashTag(productInfo.code, productInfo.name) }, [productInfo]) const [showCart, setShowCart] = useState(false) const [showOrderCount, setShowOrderCount] = useState(false) // const html = ` // // ` const html = '' const shareImg = useMemo(() => { const data = productInfo.texture_url ? productInfo.texture_url.toString().split(',') : [] const str = data.length > 0 ? data[0] : '/mall/share_img_01.png' return formatImgUrl(str, '!w400') }, [productInfo]) const { setSortCode, userInfo: userObj } = useUserInfo() // 详情页获取分享短码 const { ShareDetail } = SHARE_SCENE const { fetchData: fetchDataShortCode } = GetShortCodeApi() const getShortCode = async() => { const { data: resDetail } = await fetchDataShortCode({ share_user_id: userObj.adminUserInfo.user_id, type: ShareDetail.value, product_id: parseInt(params.id), }) const img = formatImgUrl(shareImg, '!w400') setSortCode({ ...userObj.sort_code, shareShortDetail: { title: productName as string, code: resDetail.md5_key, img } }) } useDidShow(() => { judgeParam() setShowCart(false) getShopCount() }) useEffect(() => { if (params.id) { getProductDetail() } }, [params]) // 授权手机号和下单 const placeOrder = async(status = 'to_phone', e: any = {}) => { if (!productInfo.id) { return false } if (status == 'to_phone') { if (!e.detail.code) { return alert.error('请授权手机号') } try { await getPhoneNumber(e.detail.code) } catch (msg) { Taro.showToast({ icon: 'none', title: msg, }) return false } } setShowOrderCount(true) } // 收藏功能 const [collectStatus, setCollectStatus] = useState(false) const [collectionShow, setCollectionShow] = useState(false) const { fetchData: addFavoritefetchData } = AddFavoriteApi() const onAdd = useCallback( async(val) => { const res = await addFavoritefetchData({ favorite_id: val.id, product_id: Number(params.id) }) if (res.success) { alert.none('收藏成功') setCollectStatus(true) getProductDetail() } else { alert.none(res.msg) } setCollectionShow(false) }, [params], ) useEffect(() => { if (productInfo.code) { getShortCode() setCollectStatus(() => productInfo.is_favorite) } }, [productInfo]) const closeCollection = useCallback(() => { setCollectionShow(false) }, []) // 取消收藏 const { fetchData: delFavoriteProductFetchData } = DelFavoriteProductApi() const delFavoriteProduct = async() => { const res = await delFavoriteProductFetchData({ favorite_id: productInfo.favorite_id, product_id: [productInfo.id] }) if (res.success) { setCollectStatus(false) getProductDetail() alert.none('已取消收藏') } } const openCollection = () => { if (productInfo.is_favorite) { delFavoriteProduct() } else { setCollectionShow(true) } } // 页面下拉刷新 usePullDownRefresh(() => { getProductDetail() }) const [showPopup, setshowPopup] = useState(false) return ( {productInfo.code && {productName}} {productInfo.describe} 收藏 分享 商品参数 { productInfo.is_instruct && setshowPopup(true)}>{'特色百科 >'} } {/* 编号:{productInfo.code} */} 幅宽:{productInfo.width} 工艺:{productInfo.craft} 空差:{productInfo.weight_error_discount / 1000}KG 克重:{productInfo.weight_density} 成分:{productInfo.component} 纸筒:{productInfo.tube / 1000}KG 出米数:{productInfo.length_to_weight_rate / 100} 开单减空差:{productInfo.weight_error / 1000}KG 色号信息 ({productInfo?.product_color_list?.length}) {productInfo?.product_color_list?.map((item) => { return ( {item.name} {formatPriceDiv(item.bulk_price)}/Kg ) })} 询货/咨询 setShowCart(true)}> 购物车 {commonData.shopCount > 0 && {commonData.shopCount > 99 ? '99+' : commonData.shopCount}} {(!userInfo.adminUserInfo?.is_authorize_phone && ( 选购商品 )) || ( placeOrder('to_order')}> 选购商品 )} setShowOrderCount(false)} title={productName} productId={productInfo.id} /> setShowCart(false)} /> setshowPopup(false)} productName={productName} productIds={Number(params?.id)}> ) } export default Details