import { Button, CustomWrapper, Image, RichText, Text, View } from '@tarojs/components' import Taro, { useDidShow, usePullDownRefresh, useRouter, useShareAppMessage } from '@tarojs/taro'; import classnames from "classnames"; import DesSwiper from './components/swiper'; import OrderCount from './components/orderCount'; import ShopCart from '@/components/shopCart'; import Preview,{colorItem} from './components/preview'; import styles from './index.module.scss' import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import {formatHashTag, formatImgUrl} from '@/common/fotmat' import {GetProductDetailApi} from '@/api/material' import useLogin from '@/use/useLogin'; import { AnalysisShortCodeApi, BindShortCodeApi, 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 { GetShoppingCartApi } from '@/api/shopCart'; type item = {title:string, img:string, url:string, id:number} type Params = { list?: item[] swiperOnClick?: (val: item) => void, style?: Object } export default (props:Params) => { const {getPhoneNumber, userInfo} = useLogin() //获取参数(有两种参数:1.商品id, 2.页面分享) const router = useRouter() const [params, setParams] = useState({id: '', share: null}) //判断是否是分享过来的参数 const judgeParam = async () => { if(router.params.id) { setParams({...params, id:router.params.id}) }else if(router.params.share) { analysisShortCode() } } //解析短码参数 const {fetchData: fetchDataAnalysisShortCode} = AnalysisShortCodeApi() const analysisShortCode = async () => { let res = await fetchDataAnalysisShortCode({md5_key: router.params.share}) setParams({id: res.data.product_id, share: res.data}) } useDidShow(() => { judgeParam() setShowCart(false) getShoppingCart() }) useEffect(() => { if(params.id) { getProductDetail() } }, [params]) //获取数据 const [productInfo, setProductInfo] = useState({}) const {fetchData} = GetProductDetailApi() const getProductDetail = async () => { let {data} = await fetchData({id: params.id}) setProductInfo(data) Taro.stopPullDownRefresh() } useEffect(() => { if(productInfo.code) { getShortCode() setCollectStatus(() => productInfo.is_favorite) } }, [productInfo]) //面料名称 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 [colorInfo, setColorInfo] = useState() const [showPreview, setShowPreview] = useState(false) const getColorItem = (item) => { setColorInfo({ title: item.code, texture_url: item.texture_url, lab: item.lab, rgb: item.rgb }) setShowPreview(true) } 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:''}}) } //授权手机号和下单 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 openCollection = () => { if(productInfo.is_favorite) { delFavoriteProduct() } else { setCollectionShow(true) } } const onAdd = useCallback(async (val) => { let res = await addFavoritefetchData({favorite_id: val.id, product_id: Number(params.id)}) if(res.success) { alert.success('添加成功') setCollectStatus(true) getProductDetail() } else { alert.none(res.msg) } setCollectionShow(false) }, [params]) const closeCollection = useCallback(() => { setCollectionShow(false) }, []) //取消收藏 const {fetchData: delFavoriteProductFetchData} = DelFavoriteProductApi() const delFavoriteProduct = async () => { let res = await delFavoriteProductFetchData({favorite_id: productInfo.favorite_id, product_id:[productInfo.id]}) if(res.success) { setCollectStatus(false) getProductDetail() alert.none('已取消收藏') } } //获取购物车数据数量 const [shopCount, setShopCount] = useState(0) const {fetchData: fetchDataShopCount} = GetShoppingCartApi() const getShoppingCart = async () => { const {data} = await fetchDataShopCount() let color_list = data.color_list||[] setShopCount(color_list.length) } //页面下拉刷新 usePullDownRefresh(() => { getProductDetail() }) return ( {productInfo.code&&{productName}} {productInfo.describe} 分享 收藏 详情参数 编号:{productInfo.code} 幅宽:{productInfo.width} 克重:{productInfo.weight_density} 成分:{productInfo.component} 色号 ({productInfo?.product_color_list?.length}) {productInfo?.product_color_list?.map(item => { return getColorItem(item)}> {item.code} })} setShowCart(true)}> 购物车 {(shopCount > 0)&&{shopCount > 99?'99+':shopCount}} { (!userInfo.adminUserInfo?.is_authorize_phone)&& 选购商品 || placeOrder('to_order')}>选购商品 } setShowOrderCount(false)} title={productName} productId={productInfo.id}/> setShowCart(false)}/> setShowPreview(false)}/> ) }