2022-05-18 19:13:21 +08:00

161 lines
6.7 KiB
TypeScript

import { GetSaleOrderDetailApi } from "@/api/order";
import { goLink } from "@/common/common";
import { formatDateTime, formatPriceDiv } from "@/common/fotmat";
import Popup from "@/components/popup";
import SearchInput from "@/components/searchInput";
import { Text, Textarea, View } from "@tarojs/components"
import Taro, { useRouter } from "@tarojs/taro";
import classnames from "classnames";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import AddressInfo from "./components/addressInfo";
import KindList from "./components/kindList";
import OrderState from "./components/orderState";
import Remark from "./components/remark";
import WeightMemo from "./components/weightMemo";
import styles from './index.module.scss'
export default () => {
const [showDesc, setShowDesc] = useState(false)
const router = useRouter()
useEffect(() => {
getSaleOrderPreView()
}, [])
//获取订单详情
const [orderDetail, setOrderDetail] = useState<any>() //获取到的原始数据
const {fetchData: getOrderFetchData} = GetSaleOrderDetailApi()
const getSaleOrderPreView = async () => {
if(router.params.id) {
let res = await getOrderFetchData({id: router.params.id})
setOrderDetail(res.data)
}
}
//监听获取到的数据
useEffect(() => {
if(orderDetail)
formatData()
}, [orderDetail])
//格式化数据格式
const [formatDetailOrder, setFormatDetailOrder] = useState<any>() //格式化后的数据
const formatData = () => {
if(orderDetail?.color_list&&orderDetail?.color_list.length > 0) {
let dataList = {}
let num_count = 0 //总数量
orderDetail?.color_list.map(item => {
dataList[item.product_code] = dataList[item.product_code]||{}
dataList[item.product_code].product_code = item.product_code
dataList[item.product_code].product_name = item.product_name
dataList[item.product_code].sale_mode_name = orderDetail.sale_mode_name
dataList[item.product_code].color_list = dataList[item.product_code]?.color_list||[]
dataList[item.product_code].color_list.push(item)
//大货
if (orderDetail.sale_mode == 0) num_count += item.roll
//剪板或散件
if (orderDetail.sale_mode == 1 || orderDetail.sale_mode == 2) num_count += item.length
})
if (orderDetail.sale_mode == 1 || orderDetail.sale_mode == 2) num_count = Number(num_count / 100);
setFormatDetailOrder({
estimate_amount: orderDetail.estimate_amount, //预估金额
estimate_weight: orderDetail.estimate_weight,
sale_mode: orderDetail.sale_mode,
sale_mode_name: orderDetail.sale_mode_name,
colo_count: orderDetail.color_list.length, //颜色数量
num_count: num_count, //总数量
unit: orderDetail.sale_mode == 0?'条':'m', //单位
list: Object.values(dataList)
})
}
}
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(() => {
const address = orderDetail?.default_address
if(address) {
return {
province_name: address.province_name,
city_name: address.city_name,
district_name: address.district_name,
address_detail: address.address_detail,
id: address.id,
name: address.name,
phone: address.phone
}
}
return null
}, [orderDetail])
//订单备注
const [orderRemark, setOrderRemark] = useState('')
const getRemark = useCallback((e) => {
setOrderRemark(() => e)
setShowDesc(() => false)
}, [])
//修改地址
const changeAddress = useCallback(() => {
goLink('/pages/editOrder/index', {id: router.params.id})
}, [router.params])
return (
<View className={styles.order_main}>
<View className={styles.weight_memo_con}>
<WeightMemo/>
</View>
<OrderState />
<View onClick={() => changeAddress()}>
<AddressInfo defaultValue={defaultAddress} disabled={true} />
</View>
<KindList value={formatPreViewOrderMemo}/>
<View className={styles.order_info} >
<View className={styles.order_info_title}></View>
<SearchInput showBorder={false} title='单号'>
<View className={styles.order_num}>
<Text>{orderDetail?.order_no}</Text>
<View className={styles.order_num_btn} onClick={() => clipboardData()}></View>
</View>
</SearchInput>
<SearchInput showBorder={false} title='下单时间'>
<Text>{formatDateTime(orderDetail?.create_time)}</Text>
</SearchInput>
<SearchInput showBorder={false} title='付款时间'>
<Text>{formatDateTime(orderDetail?.create_time)}</Text>
</SearchInput>
</View>
<View className={styles.order_desc} onClick={() => setShowDesc(true)}>
<View className={styles.order_desc_con}></View>
{
orderRemark&&<View className={styles.order_desc_text}>{orderRemark}</View>||
<View className={styles.order_desc_text_hint}></View>
}
<View className={classnames(styles.miconfont, 'iconfont icon-a-moreback')}></View>
</View>
<View className={styles.submit_order}>
<View className={styles.order_btn}></View>
</View>
<Popup show={showDesc} showTitle={false} onClose={() => setShowDesc(false)} >
<Remark onSave={(e) => getRemark(e)}/>
</Popup>
<View className="common_safe_area_y"></View>
</View>
)
}