import { View } from '@tarojs/components' import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' import type { ReactNode } from 'react' import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' import classnames from 'classnames' import AddressDetailBox from '../orderDetails/components/addressDetailBox' import Remark from '../orderDetails/components//remark' import styles from './index.module.scss' import Popup from '@/components/popup' import { debounce } from '@/common/util' import { MpSaleOrderPost, MpSaleOrderPreview, } from '@/api/order' import { alert } from '@/common/common' import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' // 卡片盒子元素 interface Obs { title?: string modeName?: string showMode?: boolean children?: ReactNode clickNode?: () => void } const DefaultBox = (props: Obs) => { const { title = '标题', modeName = '大货', showMode = false, children, clickNode, } = props return ( {title} { showMode && clickNode?.()}>{modeName} } {children} ) } const DefaultBoxWithMemo = memo(DefaultBox) // 产品商品元素 interface PropGoods { // item?: { // code?: string | number // } list: any[] obj: { sale_mode?: number | string } } const GoodsItem = (porps: PropGoods) => { const { list = [], obj = {} } = porps return ( <> { list.map((item, index) => { return ( {item.code}# {item.name} { item.product_colors.map((it, inx) => { return ( {it.code} {it.name} x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} ¥{it.sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'} ¥{formatPriceDiv(it.estimate_amount)} ) }) } ) }) } ) } const GoodsItemWithMemo = memo(GoodsItem) const SubmitOrder = () => { const router: any = useRouter() const [infoObj, setInfoObj] = useState({}) let selectId = -1 // 收货方法,1:自提,2物流 const [receivingStatus, setReceivingStatus] = useState(null) // 切换自提或者物流 const onReceivingStatus = debounce(async(e, value) => { e.stopPropagation() if (receivingStatus == value) { alert.error('不能选择相同的方式') return false } Taro.showLoading({ title: '请稍等...', mask: true, }) setReceivingStatus(value) Taro.hideLoading() }, 300) const { fetchData: infoFetch } = MpSaleOrderPreview() const [pussName, setPusername] = useState('') // 获取订单详情 const getDetail = async() => { let arr: any[] = [] setPusername(decodeURIComponent(router.params.purchaser_name)) arr = JSON.parse(decodeURIComponent(router.params.shopping_cart_product_color_list)) const list: any[] = [] arr?.forEach((item) => { list.push({ shopping_cart_product_color_id: item, sale_price: 0, }) }) const query = { purchaser_id: Number(router.params.purchaser_id), sale_mode: Number(router.params.sale_mode), shopping_cart_product_color_list: list, } const res = await infoFetch(query) setInfoObj(res.data) } // 备注操作 const [showDesc, setShowDesc] = useState(false) const getRemark = useCallback(async(e) => { setShowDesc(false) setInfoObj(val => ({ ...val, remark: e })) }, []) const handSelect = (obj) => { if (receivingStatus == 1) { return false } Taro.navigateTo({ url: '/pages/addressManager/index?orderId=' + '-100' + `&purchaser_id=${router.params.purchaser_id}`, }) } // 提交订单 const { fetchData: postFetch } = MpSaleOrderPost() const handSure = () => { if (receivingStatus == 2 && !infoObj.address_id) { return alert.error('请选择地址') } const list: any[] = [] infoObj.product_list.forEach((item) => { item.product_colors.forEach((it) => { list.push({ sale_price: it.sale_price, shopping_cart_product_color_id: Number(it.id), }) }) }) const query = { address_id: Number(infoObj.address_id) ? Number(infoObj.address_id) : 0, list, physical_warehouse: infoObj.physical_warehouse, purchaser_id: Number(router.params.purchaser_id), remark: infoObj.remark, sale_mode: infoObj.sale_mode, shipment_mode: receivingStatus, } Taro.showModal({ content: '确认提交吗?', confirmText: '确认', cancelText: '取消', async success(res) { if (res.confirm) { Taro.showLoading({ title: '请稍等...', mask: true, }) const res = await postFetch(query) if (res?.msg === 'success') { Taro.showToast({ title: '成功', }) Taro.hideLoading() Taro.redirectTo({ url: `/pages/orderDetails/index?id=${res.data.id}`, }) } else { Taro.hideLoading() Taro.showToast({ title: res?.msg, icon: 'error', }) } } }, }) } useEffect(() => { setInfoObj(infoObj) }, [infoObj]) useDidShow(() => { // 获取选择的地址 const pages = Taro.getCurrentPages() const currPage = pages[pages.length - 1] // 获取当前页面 setInfoObj(val => ({ ...val, sale_mode: Number(router.params.sale_mode), province_name: currPage.data?.addressObj?.province_name ? currPage.data?.addressObj?.province_name : '', address_id: currPage.data?.addressObj?.id ? currPage.data?.addressObj?.id : '', city_name: currPage.data?.addressObj?.city_name ? currPage.data?.addressObj?.city_name : '', address_detail: currPage.data?.addressObj?.address_detail ? currPage.data?.addressObj?.address_detail : '', district_name: currPage.data?.addressObj?.district_name ? currPage.data?.addressObj?.district_name : '', target_user_name: currPage.data?.addressObj?.name ? currPage.data?.addressObj?.name : '', purchaser_phone: currPage.data?.addressObj?.phone ? currPage.data?.addressObj?.phone : '', })) selectId = currPage.data?.addressObj?.id const obj = currPage?.data?.ids?.filter((item) => { return item == selectId }) if (currPage?.data?.ids && obj.length === 0) { setInfoObj(val => ({ ...val, sale_mode: Number(router.params.sale_mode), province_name: '', address_id: '', city_name: '', address_detail: '', district_name: '', target_user_name: '', purchaser_phone: '', })) } if (!currPage.data?.addressObj) { setReceivingStatus(1) } else { setReceivingStatus(2) } }) useEffect(() => { getDetail() }, []) return ( handSelect(obj)} obj={infoObj} receivingStatus={receivingStatus} onReceivingStatus={(e, value) => onReceivingStatus(e, value)} > {pussName} {/* {infoObj.purchaser_phone} */} {/* {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 个颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} */} 合计金额 {/* */} ¥{formatPriceDiv(infoObj.estimate_amount)} `} clickNode={() => setShowDesc(true)}> {infoObj.remark === '' ? '暂无' : infoObj.remark} setShowDesc(false)}> getRemark(e)} defaultValue={infoObj.remark} showInput={!!showDesc} /> 预估金额: ¥{formatPriceDiv(infoObj.estimate_amount)} {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 种颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} handSure()}>提交订单 ) } export default SubmitOrder