import { EditSaleOrderAddressApi, EditSaleOrderShipmentModeApi } from "@/api/order"; import { alert } from "@/common/common"; import { ORDER_STATUS } from "@/common/enum"; import { debounce } from "@/common/util"; import AddressList from "@/components/AddressList"; import Popup from "@/components/popup"; import { Text, View } from "@tarojs/components" import classnames from "classnames"; import { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useState } from "react"; import styles from './index.module.scss' export type AddressInfoParam = { province_name: string, city_name: string, district_name: string, address_detail: string, id?: number, name: string, phone: string, } type Param = { onSelect?: (val:any) => void, //选择地址 defaultValue?: AddressInfoParam|null, //默认值 disabled?: false|true, //true禁用后只用于展示 onChangeShipmentMode?: (val: number) => void, //返回收货方式 orderInfo?: { orderId: number //订单id shipment_mode: 1|2, //1自提 2物流 status: number //订单状态 } } export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue = null, orderInfo}: Param, ref) => { const [showAddressList, setShowAddressList] = useState(false) useEffect(() => { setUserInfo(() => defaultValue) }, [defaultValue]) const [userInfo, setUserInfo] = useState() //地址格式 const formatAddress = useMemo(() => { if(userInfo) return userInfo.province_name + userInfo.city_name + userInfo.district_name + userInfo.address_detail }, [userInfo]) const changeShow = () => { if(receivingStatus == 2 && !logisticsShow) setShowAddressList(() => true) } useEffect(() => { if(orderInfo) setReceivingStatus(() => orderInfo.shipment_mode) }, [orderInfo]) //把内部方法提供给外部 useImperativeHandle(ref, () => ({ changeShow })) //收货方法,1:自提,2物流 const [receivingStatus, setReceivingStatus] = useState(1) const {fetchData: shipmentModeFetchData} = EditSaleOrderShipmentModeApi() const onReceivingStatus = (value, e) => { e.stopPropagation() changeReceivingStatus(value) } const changeReceivingStatus = debounce(async (value) => { if(!orderInfo) return false alert.loading('正在修改') const res = await shipmentModeFetchData({id: orderInfo.orderId, shipment_mode:value}) if(res.success) { alert.success('收货方式修改成功') onChangeShipmentMode?.(value) setReceivingStatus(value) } else { alert.none(res.msg) } }, 10) //修改地址 const [addressId, setAddressId] = useState(0) const {fetchData: addressFetchData} = EditSaleOrderAddressApi() const getAddress = async (value) => { if(!orderInfo) return false alert.loading('正在修改') const res = await addressFetchData({id: orderInfo.orderId, address_id: value.id}) if(res.success) { alert.success('地址修改成功') onSelect?.(value) setShowAddressList(() => false) setAddressId(value.id) setUserInfo(() => value) } else { alert.none(res.msg) } } //订单状态 const { SaleOrderStatusWaitingReceipt, SaleOrderStatusAlreadyReceipt, SaleOrderStatusComplete, SaleOrderStatusRefund, SaleOrderStatusCancel } = ORDER_STATUS //根据订单状态判断是否显示物流 const logisticsShowList = [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value] const logisticsShow = useMemo(() => { return logisticsShowList.includes(orderInfo?.status as number) }, [orderInfo]) return ( changeShow()}> {formatAddress} {(receivingStatus == 2 && !logisticsShow)&&} {userInfo?.name} {userInfo?.phone} {!logisticsShow&& onReceivingStatus(1,e)}>自提 onReceivingStatus(2,e)}>物流 || 查看物流 } setShowAddressList(false)}> 请选择收货地址 ) }))