import { Button, Icon, RichText, Text, View } from '@tarojs/components' import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' import classnames from 'classnames' import { useCallback, useEffect, useMemo, useRef, 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 Recommend from './components/recommend' import ShopCart from '@/components/shopCart' import { formatDateTime, 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, goLink } from '@/common/common' import AddCollection from '@/components/addCollection' import { AddFavoriteApi, DelFavoriteProductApi } from '@/api/favorite' import useCommonData from '@/use/useCommonData' import MoveBtn from '@/components/moveBtn' import Dialog from '@/components/Dialog' import NormalButton from '@/components/normalButton' import IconFont from '@/components/iconfont/iconfont' import LabAndImgShow from '@/components/LabAndImgShow' import PopupSelectColor from '@/components/popupSelectColor' import { GetColorCardOrderByProductApi } from '@/api/colorCard' interface item { title: string; img: string; url: string; id: number } interface Params { list?: item[] swiperOnClick?: (val: item) => void style?: Object } interface CurrentDialogDetail { lab: { l: number; a: number; b: number } rgb: { r: number; g: number; b: number } texture_url: string code: string name: string bulk_price: number update_price_time: string | Date length_cut_price: number } const Details = (props: Params) => { const { getPhoneNumber, userInfo } = useLogin() // 获取参数(有两种参数:1.商品id, 2.页面分享) const router = useRouter() const [params, setParams] = useState({ id: '', share: null }) const [productId, setProductId] = useState(0) const [recommendStatus, setRecommendStatus] = useState(false) // 解析短码参数 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 }) setProductId(data.id) setProductInfo(data) Taro.stopPullDownRefresh() } // 面料名称 const productName = useMemo(() => { return formatHashTag(productInfo.code, productInfo.name) }, [productInfo]) const recommendName = useMemo(() => { return formatHashTag(productInfo.product_screw_code, productInfo.product_screw_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), }) setSortCode({ ...userObj.sort_code, shareShortDetail: { title: productName as string, code: resDetail.md5_key, img: shareImg } }) } 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 } } setProductId(productInfo.id) setRecommendStatus(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) const currentDialogDetail = useRef({} as CurrentDialogDetail) const [showDialog, setShowDialog] = useState(false) const handleCloseDialog = () => { setShowDialog(false) } const handleChangeDialog = (isShow) => { setShowDialog(isShow) } // 选择颜色 const handleClickProductColor = (current) => { console.log('current', current) currentDialogDetail.current = current setShowDialog(true) } const recommendData = useMemo(() => { return { product_screw_id: productInfo?.product_screw_id, product_screw_name: productInfo?.product_screw_name, product_screw_code: productInfo?.product_screw_code, screw_rgb: productInfo?.screw_rgb, screw_lab: productInfo?.screw_lab, screw_texture_url: productInfo?.screw_texture_url, } }, [productInfo]) const openProduct = useCallback((id) => { setProductId(id) setShowOrderCount(true) setRecommendStatus(true) }, []) const { fetchData: colorCardFetchData } = GetColorCardOrderByProductApi() const getColorCardData = async() => { const res = await colorCardFetchData({ product_id: productInfo.id }) if (res.data) { res.data.count = 1 Taro.setStorageSync('colorCard', JSON.stringify([res.data])) Taro.navigateTo({ url: '/pages/colorCardOrder/index', }) } } const [showColorSelect, setShowColorSelect] = useState(false) const openColorSelect = () => { setShowColorSelect(true) } 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_screw_id && } 色号信息 ({productInfo?.product_color_list?.length}) {productInfo?.product_color_list?.map((item) => { return ( handleClickProductColor(item)}> {item.name} {formatPriceDiv(item.bulk_price)}/Kg{ item.length_cut_price ? (item.bulk_price > item.length_cut_price) ? : : null } ) })} {/* 询货/咨询 */} goLink('/pages/shopCar/index', {}, 'switchTab')}> 购物车 {commonData.shopCount > 0 && {commonData.shopCount > 99 ? '99+' : commonData.shopCount}} 领取色卡 领取剪样 {(!userInfo.adminUserInfo?.is_authorize_phone && ( 选购商品 )) || ( placeOrder('to_order')}> 选购商品 )} setShowOrderCount(false)} recom_title={recommendName} title={productName} productId={productId} /> setShowCart(false)} /> setshowPopup(false)} productName={productName} productIds={Number(params?.id)}> {formatHashTag(currentDialogDetail.current!.code, currentDialogDetail.current!.name)} ¥{formatPriceDiv(currentDialogDetail.current!.bulk_price)}/KG { currentDialogDetail.current!.length_cut_price ? (currentDialogDetail.current!.bulk_price > currentDialogDetail.current!.length_cut_price) ? : : null } { currentDialogDetail.current!.length_cut_price ? <> 更新于:{formatDateTime(currentDialogDetail.current!.update_price_time, 'YYYY-MM-DD') } ¥{formatPriceDiv(currentDialogDetail.current!.length_cut_price)}/KG : 暂无历史报价 } 知道了 setShowColorSelect(false)} /> ) } export default Details