import { GetSaleOrderDetailApi, EditSaleOrderRemarkApi } from '@/api/order' import { AddShoppingCartApi } from '@/api/shopCart' import { SubscriptionMessageApi } from '@/api/user' import { alert, goLink } from '@/common/common' import { ORDER_STATUS } from '@/common/enum' import { formatDateTime, formatImgUrl } from '@/common/fotmat' import OrderBtns from '@/components/orderBtns' import Popup from '@/components/popup' import SearchInput from '@/components/searchInput' import ShopCart from '@/components/shopCart' import useLogin from '@/use/useLogin' import { 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 AddressInfoDetail from './components/addressInfoDetail' import AdvanceOrderState from './components/advanceOrderState' import ApplyRefund from './components/applyRefund' import KindList from './components/kindList' import OrderState from './components/orderState' import Payment from './components/payment' import Remark from './components/remark' import ReturnRecord from './components/returnRecord' import ScanPayCheck from './components/scanPayCheck' import styles from './index.module.scss' export default () => { useLogin() const [showDesc, setShowDesc] = useState(false) const router = useRouter() const orderId = useRef(Number(router.params.id)) useDidShow(() => { getSaleOrderPreView() }) //订单状态枚举 const { SaleOrderStatusTaking, SaleOrderStatusWaitingDelivery, SaleOrderStatusWaitingReceipt, // 待收货 SaleOrderStatusAlreadyReceipt, // 已收货 SaleOrderStatusComplete, // 已完成 SaleOrderStatusRefund, // 已退款 SaleOrderStatusCancel, // 已取消 SaleorderstatusWaitingPrePayment, // 预付款 } = ORDER_STATUS //获取订单详情 const firstOpen = useRef(true) const [orderDetail, setOrderDetail] = useState() //获取到的原始数据 const { fetchData: getOrderFetchData } = GetSaleOrderDetailApi() const getSaleOrderPreView = async () => { if (orderId.current) { let res = await getOrderFetchData({ id: orderId.current }) setOrderDetail(res.data) setOrderRemark(res.data.remark) //预付款自动打开支付 if (firstOpen.current && SaleorderstatusWaitingPrePayment.value == res.data.status) { firstOpen.current = false toPay() } } Taro.stopPullDownRefresh() // Taro.hideToast() } //监听获取到的数据 useEffect(() => { if (orderDetail) formatData() }, [orderDetail]) //格式化数据格式 const [formatDetailOrder, setFormatDetailOrder] = useState() //格式化后的数据 const formatData = () => { setFormatDetailOrder({ ...orderDetail, unit: orderDetail.sale_mode == 0 ? '条' : 'm', //单位 list: orderDetail.product_list, }) } const formatPreViewOrderMemo = useMemo(() => { return formatDetailOrder }, [formatDetailOrder]) //复制功能 const clipboardData = () => { Taro.setClipboardData({ data: orderDetail?.order_no || '', success: function (res) { Taro.showToast({ icon: 'none', title: '复制成功', }) }, }) } //初始地址数据 const defaultAddress = useMemo(() => { return { province_name: orderDetail?.province_name, city_name: orderDetail?.city_name, district_name: orderDetail?.district_name, address_detail: orderDetail?.address_detail, target_user_name: orderDetail?.target_user_name, target_user_phone: orderDetail?.target_user_phone, shipment_mode: orderDetail?.shipment_mode, id: orderDetail?.id, sale_mode: orderDetail?.sale_mode, status: orderDetail?.status, take_goods_address: orderDetail?.take_goods_address, take_goods_phone: orderDetail?.take_goods_phone, } }, [orderDetail]) //订单备注 const { fetchData: remarkFetchData } = EditSaleOrderRemarkApi() const [orderRemark, setOrderRemark] = useState('') const getRemark = useCallback(async (e) => { setOrderRemark(() => e) let res = await remarkFetchData({ remark: e, id: orderId.current }) if (res.success) { getSaleOrderPreView() alert.success('提交成功') } else { alert.error(res.msg) } setShowDesc(() => false) }, []) const noCanOpenDescList = useRef([ SaleOrderStatusTaking.value, //提货中 SaleOrderStatusWaitingDelivery.value, //待发货 SaleOrderStatusWaitingReceipt.value, // 待收货 SaleOrderStatusAlreadyReceipt.value, // 已收货 SaleOrderStatusComplete.value, // 已完成 SaleOrderStatusRefund.value, // 已退款 SaleOrderStatusCancel.value, // 已取消 ]) const descOpen = () => { if (noCanOpenDescList.current.includes(orderDetail?.status)) return alert.none('该订单状态不能修改备注') setShowDesc(() => true) } //去付款 const [payMentShow, setPayMentShow] = useState(false) const toPay = () => { setPayMentShow(true) } //打开地址修改 const addressRef = useRef(null) //修改收货方式 const getShipmentMode = useCallback(() => { getSaleOrderPreView() }, [orderDetail]) //修改地址 const getAddress = useCallback(() => { getSaleOrderPreView() }, [orderDetail]) //获取底部按钮点击, 获取按钮状态 const orderStateClick = useCallback( (val) => { if (val == 1 || val == 6 || val == 8) { getSaleOrderPreView() } else if (val == 2) { //待付款 toPay() } else if (val == 3) { //申请退款 if (!orderDetail?.av_return_roll) return alert.none('该订单已申请过退款') setRefundShow(true) } else if (val == 7) { //再购 addShopCart() } else if (val == 9) { //售后记录 onReturnRecordShow() } else if (val == 10) { setShowScanPayCheck(true) } }, [orderDetail], ) //页面下拉刷新 usePullDownRefresh(() => { getSaleOrderPreView() }) //支付成功 const onPaySuccess = useCallback(() => { alert.success('支付成功') getSaleOrderPreView() closePayShow() }, [orderDetail]) //关闭支付弹窗 const closePayShow = useCallback(() => { setPayMentShow(() => false) }, [orderDetail]) //按钮所需数据 const orderInfo = useMemo(() => { return { orderId: orderDetail?.id, ...orderDetail, } }, [orderDetail]) //刷新页面 const refresh = useCallback(() => { alert.loading('刷新中') getSaleOrderPreView() }, [orderDetail]) //退款申请 const [refundShow, setRefundShow] = useState(false) const applyRefundClose = useCallback(() => { setRefundShow(false) }, []) const applyRefundSuccess = useCallback(() => { getSaleOrderPreView() }, []) //查看物流 const getLogistics = useCallback(() => { if (orderDetail?.delivery_appendix_url) { const list = orderDetail?.delivery_appendix_url?.map((item) => { return formatImgUrl(item, '!w800') }) if (list?.length <= 0) return alert.error('暂无图片') Taro.previewImage({ current: list[0], // 当前显示 urls: list, // 需要预览的图片http链接列表 }) } }, [orderDetail]) //添加购物车 const [showCart, setShowCart] = useState(false) const { fetchData: addFetchData } = AddShoppingCartApi() const addShopCart = async () => { let color_list: { product_color_id: number; roll?: number; length?: number }[] = [] orderDetail?.product_list.map((pitem) => { pitem?.product_colors.map((citem) => { if (orderDetail?.sale_mode == 0) { return color_list.push({ product_color_id: citem.id, roll: citem.roll }) } else { return color_list.push({ product_color_id: citem.id, length: citem.length }) } }) }) const state = await addFetchData({ sale_mode: orderDetail?.sale_mode, color_list, }) if (state.success) { Taro.showToast({ title: '已加入购物车', }) setShowCart(true) } else { Taro.showToast({ icon: 'none', title: state.msg, }) } } //显示售后记录 const [returnRecordShow, setReturnRecordShow] = useState(false) const onReturnRecordShow = useCallback(() => { setReturnRecordShow(true) }, []) const closeReturnRecord = useCallback(() => { setReturnRecordShow(false) }, []) //显示 const [showScanPayCheck, setShowScanPayCheck] = useState(false) return ( {(orderDetail?.status != SaleorderstatusWaitingPrePayment.value && ) || } 订单信息 {orderDetail?.order_no} clipboardData()}> 复制 {formatDateTime(orderDetail?.create_time)} {orderDetail?.payment_time && ( {formatDateTime(orderDetail?.payment_time)} )} 订单备注 {(orderRemark && {orderDetail?.remark}) || 填写备注} {orderDetail?.status != SaleOrderStatusCancel.value && ( )} setShowDesc(false)}> getRemark(e)} defaultValue={orderDetail?.remark} /> setShowScanPayCheck(false)} orderInfo={orderDetail} /> setShowCart(false)} /> ) }