商城测试版v7

This commit is contained in:
czm 2022-07-20 19:09:52 +08:00
parent 305c3aa0eb
commit 87bcda1c38
13 changed files with 122 additions and 483 deletions

View File

@ -17,7 +17,7 @@
position: absolute; position: absolute;
background-color: #fff; background-color: #fff;
width: 226px; width: 226px;
box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.06); box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.3);
border-radius: 10px; border-radius: 10px;
padding: 0 20px; padding: 0 20px;
box-sizing: border-box; box-sizing: border-box;

View File

@ -49,12 +49,13 @@ export default memo(({orderInfo, showStatus = 'detail', onClick}:Param) => {
SaLeModeWeightCut, SaLeModeWeightCut,
} = SALE_MODE } = SALE_MODE
//注册按钮 //注册按钮, id:按钮id唯一label按钮名称sort排序数字越大越靠后validatarFunc验证
type orderBtnsListParams = {id: number, label: string, validatarFunc: (val: typeof orderInfo) => any} type orderBtnsListParams = {id: number, label: string, sort: number, validatarFunc: (val: typeof orderInfo) => any}
const orderBtnsList = useRef<orderBtnsListParams[]>([ const orderBtnsList = useRef<orderBtnsListParams[]>([
{ {
id: 1, id: 1,
label: '取消订单', label: '取消订单',
sort: 1,
validatarFunc: (orderInfo) => { validatarFunc: (orderInfo) => {
//在待发货之前没有付过款 //在待发货之前没有付过款
let orderStatus = [ let orderStatus = [
@ -69,74 +70,10 @@ export default memo(({orderInfo, showStatus = 'detail', onClick}:Param) => {
return orderInfo.actual_amount == 0 && orderStatus.includes(orderInfo.status) return orderInfo.actual_amount == 0 && orderStatus.includes(orderInfo.status)
} }
}, },
{
id: 7,
label: '再次购买',
validatarFunc: () => {
return true
}
},
{
id: 8,
label: '退款',
validatarFunc: (orderInfo) => {
//散剪和剪板在待接单时付过款
let orderStatus = [
SaleOrderStatusBooking.value
]
return orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && orderStatus.includes(orderInfo.status)
}
},
{
id: 9,
label: '售后记录',
validatarFunc: (orderInfo) => {
return orderInfo.is_return
}
},
{
id: 3,
label: '申请退款',
validatarFunc: (orderInfo) => {
//大货在待发货付过款
let orderStatus = [
SaleOrderStatusWaitingDelivery.value,
SaleOrderStatusTaking.value
]
return orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && orderInfo.av_return_roll && orderStatus.includes(orderInfo.status)
}
},
{
id: 5,
label: '申请退货',
validatarFunc: (orderInfo) => {
let orderStatus = [
SaleOrderStatusAlreadyReceipt.value,
SaleOrderStatusRefund.value
]
return orderInfo.av_return_roll&& orderStatus.includes(orderInfo.status)
}
},
{
id: 6,
label: '确认收货',
validatarFunc: (orderInfo) => {
let orderStatus = [
SaleOrderStatusWaitingReceipt.value
]
return orderStatus.includes(orderInfo.status)
}
},
{
id: 10,
label: '销售码单',
validatarFunc: (orderInfo) => {
return orderInfo.actual_amount > 0 && orderInfo.wait_pay_amount == 0 && showStatus == 'detail'
}
},
{ {
id: 2, id: 2,
label: '去付款', label: '去付款',
sort: 100,
validatarFunc: (orderInfo) => { validatarFunc: (orderInfo) => {
//只要没有付完款就显示 //只要没有付完款就显示
let orderStatus = [ let orderStatus = [
@ -150,15 +87,87 @@ export default memo(({orderInfo, showStatus = 'detail', onClick}:Param) => {
] ]
return orderInfo.wait_pay_amount != 0 && orderStatus.includes(orderInfo.status) return orderInfo.wait_pay_amount != 0 && orderStatus.includes(orderInfo.status)
} }
} },
{
id: 3,
label: '申请退款',
sort: 5,
validatarFunc: (orderInfo) => {
//大货在待发货付过款
let orderStatus = [
SaleOrderStatusWaitingDelivery.value,
SaleOrderStatusTaking.value
]
return orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && orderInfo.av_return_roll && orderStatus.includes(orderInfo.status)
}
},
{
id: 5,
label: '申请退货',
sort: 5,
validatarFunc: (orderInfo) => {
let orderStatus = [
SaleOrderStatusAlreadyReceipt.value,
SaleOrderStatusRefund.value
]
return orderInfo.av_return_roll&& orderStatus.includes(orderInfo.status)
}
},
{
id: 6,
label: '确认收货',
sort: 10,
validatarFunc: (orderInfo) => {
let orderStatus = [
SaleOrderStatusWaitingReceipt.value
]
return orderStatus.includes(orderInfo.status)
}
},
{
id: 7,
label: '再次购买',
sort: 6,
validatarFunc: () => {
return true
}
},
{
id: 8,
label: '退款',
sort: 5,
validatarFunc: (orderInfo) => {
//散剪和剪板在待接单时付过款
let orderStatus = [
SaleOrderStatusBooking.value
]
return orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && orderStatus.includes(orderInfo.status)
}
},
{
id: 9,
label: '售后记录',
sort: 6,
validatarFunc: (orderInfo) => {
return orderInfo.is_return
}
},
{
id: 10,
label: '销售码单',
sort: 9,
validatarFunc: (orderInfo) => {
return orderInfo.actual_amount > 0 && orderInfo.wait_pay_amount == 0 && showStatus == 'detail'
}
},
]) ])
//显示的按钮数组 //显示的按钮数组
const orderBtnsShowList: orderBtnsListParams[] = useMemo(() => { const orderBtnsShowList: orderBtnsListParams[] = useMemo(() => {
return orderBtnsList.current.filter(item => { let list = orderBtnsList.current.filter(item => {
return item.validatarFunc(orderInfo) return item.validatarFunc(orderInfo)
}) })
return list.sort((a, b) => a.sort - b.sort)
}, [orderInfo]) }, [orderInfo])
//小程序订阅 //小程序订阅
@ -278,7 +287,7 @@ export default memo(({orderInfo, showStatus = 'detail', onClick}:Param) => {
{showMore&&<View className={styles.more_con}> {showMore&&<View className={styles.more_con}>
<View className={styles.more_list} style={styleTop}> <View className={styles.more_list} style={styleTop}>
{orderBtnsShowList.map((item, index) => { {orderBtnsShowList.map((item, index) => {
return ((index >= 3) &&<View className={styles.more_item} key={item.id} onClick={() => submitBtns(item.id, index)}>{item.label}</View>) return ((index < (orderBtnsShowList.length - 3)) &&<View className={styles.more_item} key={item.id} onClick={() => submitBtns(item.id, index)}>{item.label}</View>)
})} })}
</View> </View>
<View className={styles.more_bg} catchMove onClick={() => setShowMore(false)}></View> <View className={styles.more_bg} catchMove onClick={() => setShowMore(false)}></View>
@ -287,7 +296,7 @@ export default memo(({orderInfo, showStatus = 'detail', onClick}:Param) => {
<View className={styles.list_scroll}> <View className={styles.list_scroll}>
{orderBtnsShowList.map((item, index) => {orderBtnsShowList.map((item, index) =>
(index < 3)&&<View key={item.id} className={classnames(styles.btns_item)} onClick={() => submitBtns(item.id, index)}>{item.label}</View> ((orderBtnsShowList.length - 3) <= index)&&<View key={item.id} className={classnames(styles.btns_item)} onClick={() => submitBtns(item.id, index)}>{item.label}</View>
)} )}
</View> </View>
</View> </View>

View File

@ -14,6 +14,7 @@ type OrderParam = {
total_fabrics?: number, total_fabrics?: number,
total_number?: number, total_number?: number,
status?: number, //订单状态 status?: number, //订单状态
av_return_product?: any[] //申请售后列表
} }
type Param = { type Param = {
@ -22,40 +23,28 @@ type Param = {
} }
const kindeList:FC<Param> = memo(({order, onSelectChange}) => { const kindeList:FC<Param> = memo(({order, onSelectChange}) => {
//对应数量
const formatCount = useCallback((item) => {
return (order?.sale_mode == 0? item.roll : Number(item.length / 100)) + order?.unit
}, [order])
//checkbox选中回调 //checkbox选中回调
const selectCallBack = (colorItem) => { const selectCallBack = (colorItem) => {
onSelectChange?.({color_id:colorItem.id, length:colorItem.length, sale_order_detail_id:colorItem.sale_order_detail_id, status: true}) onSelectChange?.({color_id:colorItem.product_color_id, length:colorItem.length, sale_order_detail_id:colorItem.sale_order_detail_id, status: true})
} }
//checkbox关闭回调 //checkbox关闭回调
const colseCallBack = (colorItem) => { const colseCallBack = (colorItem) => {
onSelectChange?.({color_id:colorItem.id, length:colorItem.length, status: false, sale_order_detail_id:colorItem.sale_order_detail_id,}) onSelectChange?.({color_id:colorItem.product_color_id, length:colorItem.length, status: false, sale_order_detail_id:colorItem.sale_order_detail_id,})
}
//判断该面料下的颜色都退完了
const colorNum = (item) => {
return item.product_colors.some(val => {
return val.return_roll + val.apply_return_roll == 0
})
} }
return ( return (
<View className={styles.apply_after_sales_list}> <View className={styles.apply_after_sales_list}>
{order?.list?.map(item => colorNum(item)&&<View className={styles.apply_after_sales_item} > {order?.av_return_product?.map(item => <View className={styles.apply_after_sales_item} >
<View className={styles.apply_after_sales_title}> <View className={styles.apply_after_sales_title}>
<View className={styles.tag}>{order.sale_mode_name}</View> <View className={styles.tag}>{order.sale_mode_name}</View>
<View className={styles.title}>{formatHashTag(item.code, item.name)}</View> <View className={styles.title}>{formatHashTag(item.product_code, item.product_name)}</View>
</View> </View>
<View className={styles.color_list}> <View className={styles.color_list}>
{item.product_colors.map(colorItem => ((colorItem.return_roll + colorItem.apply_return_roll) == 0)&&<View className={styles.color_item}> {item?.av_product_color?.map(colorItem => <View className={styles.color_item}>
<View className={styles.image}><Image src={formatImgUrl('')}/></View> <View className={styles.image}><Image src={formatImgUrl('')}/></View>
<View className={styles.name_and_number}><Text>{colorItem.code + ' ' + colorItem.name}</Text><Text>x {formatCount(colorItem)}</Text></View> <View className={styles.name_and_number}><Text>{colorItem.product_color_code + ' ' + colorItem.product_color_name}</Text><Text>x {colorItem.length/100} m</Text></View>
<MCheckbox status={item.select} onSelect={() => selectCallBack(colorItem)} onClose={() => colseCallBack(colorItem)}/> <MCheckbox status={item.select} onSelect={() => selectCallBack(colorItem)} onClose={() => colseCallBack(colorItem)}/>
</View>)} </View>)}
</View> </View>

View File

@ -14,6 +14,7 @@ type OrderParam = {
total_fabrics?: number, total_fabrics?: number,
total_number?: number, total_number?: number,
status?: number, //订单状态 status?: number, //订单状态
av_return_product?: any[] //申请售后列表
} }
type Param = { type Param = {
@ -22,39 +23,27 @@ type Param = {
} }
const kindeList:FC<Param> = memo(({order, onNumChange}) => { const kindeList:FC<Param> = memo(({order, onNumChange}) => {
//对应数量
const formatCount = useCallback((item) => {
return (item.roll - item.return_roll - item.apply_return_roll) + order?.unit!
}, [order])
//计步器返回值 //计步器返回值
const getCounterChange = useCallback((colorItem) => { const getCounterChange = useCallback((colorItem) => {
return (number) => { return (number) => {
onNumChange?.({number, color_id: colorItem.id, sale_order_detail_id:colorItem.sale_order_detail_id}) onNumChange?.({number, color_id: colorItem.product_color_id, sale_order_detail_id:colorItem.sale_order_detail_id})
} }
}, []) }, [order])
//判断该面料下的颜色都退完了
const colorNum = (item) => {
let res = item.product_colors.some(val => {
return (val.return_roll + val.apply_return_roll) < val.roll
})
return res
}
return ( return (
<View className={styles.apply_after_sales_list}> <View className={styles.apply_after_sales_list}>
{order?.list?.map(item => (colorNum(item))&&<View className={styles.apply_after_sales_item}> {order?.av_return_product?.map(item => <View className={styles.apply_after_sales_item}>
<View className={styles.apply_after_sales_title}> <View className={styles.apply_after_sales_title}>
<View className={styles.tag}>{order.sale_mode_name}</View> <View className={styles.tag}>{order.sale_mode_name}</View>
<View className={styles.title}>{formatHashTag(item.code, item.name)}</View> <View className={styles.title}>{formatHashTag(item.product_code, item.product_name)}</View>
</View> </View>
<View className={styles.color_list}> <View className={styles.color_list}>
{item.product_colors.map(colorItem => ((colorItem.return_roll + colorItem.apply_return_roll) < colorItem.roll)&&<View className={styles.color_item}> {item?.av_product_color?.map(colorItem => <View className={styles.color_item}>
<View className={styles.image}><Image src={formatImgUrl('')}/></View> <View className={styles.image}><Image src={formatImgUrl('')}/></View>
<View className={styles.name_and_number}><Text>{colorItem.code + ' ' + colorItem.name}</Text><Text>x {formatCount(colorItem)}</Text></View> <View className={styles.name_and_number}><Text>{colorItem.product_color_code + ' ' + colorItem.product_color_name}</Text><Text>x {colorItem.roll}</Text></View>
<View className={styles.btn_count}> <View className={styles.btn_count}>
<Counter maxNum={colorItem.roll - (colorItem.return_roll + colorItem.apply_return_roll)} onChange={getCounterChange(colorItem)}/> <Counter maxNum={colorItem.roll} onChange={getCounterChange(colorItem)}/>
</View> </View>
</View>)} </View>)}
</View> </View>

View File

@ -65,6 +65,7 @@ export default () => {
...orderDetail, ...orderDetail,
unit: orderDetail.sale_mode == 0?'条':'m', //单位 unit: orderDetail.sale_mode == 0?'条':'m', //单位
list: orderDetail.product_list, list: orderDetail.product_list,
}) })
} }
@ -84,30 +85,21 @@ export default () => {
//大货时获取计步器数据 //大货时获取计步器数据
const getNumChange = useCallback((val) => { const getNumChange = useCallback((val) => {
if(parseInt(val.number) > 0) { if(parseInt(val.number) > 0) {
roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.number, sale_order_detail_id: val.sale_order_detail_id} roll_list.current[val.color_id] = {product_roll: val.number, sale_order_detail_id: val.sale_order_detail_id}
} else { } else {
delete roll_list.current[val.color_id] delete roll_list.current[val.color_id]
} }
setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current)}))
let count = 0
Object.values(roll_list.current).map((item: any) => {
count += item.product_roll
})
setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count}))
}, []) }, [])
//散剪和剪板 //散剪和剪板
const getSelectChange = useCallback((val) => { const getSelectChange = useCallback((val) => {
if(val.status) { if(val.status) {
roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.length, sale_order_detail_id: val.sale_order_detail_id} roll_list.current[val.color_id] = {product_roll: val.length, sale_order_detail_id: val.sale_order_detail_id}
} else { } else {
delete roll_list.current[val.color_id] delete roll_list.current[val.color_id]
} }
let count = 0 setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current)}))
Object.values(roll_list.current).map((item: any) => {
count += item.product_roll
})
setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count}))
}, []) }, [])
//获取图片列表 //获取图片列表

View File

@ -5,7 +5,7 @@ import styles from './index.module.scss'
import Popup from "@/components/popup"; import Popup from "@/components/popup";
import Taro from "@tarojs/taro"; import Taro from "@tarojs/taro";
import { alert } from "@/common/common"; import { alert } from "@/common/common";
import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from "@/common/fotmat"; import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatRemoveHashTag, formatWeightDiv } from "@/common/fotmat";
import useCheckAuthorize from "@/use/useCheckAuthorize"; import useCheckAuthorize from "@/use/useCheckAuthorize";
import { GetPayCode } from "@/api/onlinePay"; import { GetPayCode } from "@/api/onlinePay";
import LoadingCard from "@/components/loadingCard"; import LoadingCard from "@/components/loadingCard";
@ -33,28 +33,6 @@ type ListParam = {
} }
export default memo(({show = true, onClose, company, orderInfo}:Param) => { export default memo(({show = true, onClose, company, orderInfo}:Param) => {
const [detail, setDetail] = useState<any>() const [detail, setDetail] = useState<any>()
//获取支付方式数据
const [payInfo, setPayInfo] = useState<any>()
const {fetchData: orderFetchData} = GetOrderPayApi()
const {fetchData: prepayOrderFetchData} = GetPrepayOrderPayApi()
const getOrderPay = async () => {
if(orderInfo&&orderInfo.should_collect_order_id) {
//有应收单id时用应收单获取数据
let {data} = await orderFetchData({id: orderInfo?.should_collect_order_id})
setPayInfo(() => data)
}
else if(orderInfo&&orderInfo.pre_collect_order_id) {
//用预付单id获取支付信息
let {data} = await prepayOrderFetchData({id: orderInfo?.pre_collect_order_id})
setPayInfo(() => data)
}
}
useEffect(() => {
if(orderInfo)
getOrderPay()
}, [orderInfo])
useEffect(() => { useEffect(() => {
if(show) { if(show) {
@ -63,14 +41,14 @@ export default memo(({show = true, onClose, company, orderInfo}:Param) => {
}, [show]) }, [show])
useEffect(() => { useEffect(() => {
if(orderInfo && payInfo) { if(orderInfo) {
let lists:ListParam[] = [] let lists:ListParam[] = []
orderInfo.product_list?.map(pitem => { orderInfo.product_list?.map(pitem => {
pitem?.product_colors?.map(citem => { pitem?.product_colors?.map(citem => {
lists.push({ lists.push({
product_code: formatHashTag(pitem.code, '', 'name')!, product_code: formatRemoveHashTag(pitem.code),
product_name: pitem.name, product_name: pitem.name,
product_color_code: formatHashTag(citem.code)!, product_color_code: formatRemoveHashTag(citem.code),
product_color_name: citem.name, product_color_name: citem.name,
num: citem.roll.toString(), num: citem.roll.toString(),
length: (citem.length/100).toString(), length: (citem.length/100).toString(),
@ -91,21 +69,21 @@ export default memo(({show = true, onClose, company, orderInfo}:Param) => {
target_user_name: userName(orderInfo), //收件人 target_user_name: userName(orderInfo), //收件人
target_address: address(orderInfo), //收货地址 target_address: address(orderInfo), //收货地址
target_description: orderInfo.remark, //发货备注 target_description: orderInfo.remark, //发货备注
pay_account: payInfo.offline_remittance_information?.transfer_remittance_account, //专属收款账号 pay_account: orderInfo.account, //专属收款账号
bank_account_name: payInfo.offline_remittance_information?.account_name, //账户名称 bank_account_name: orderInfo.account_name, //账户名称
bank_name: payInfo.offline_remittance_information?.bank_of_deposit, //开户银行 bank_name: orderInfo.bank_of_deposit, //开户银行
pay_type:"", //支付方式, 可不传 pay_type:"", //支付方式, 可不传
client: orderInfo.purchaser_name, //客户名称 client: orderInfo.purchaser_name, //客户名称
phone: userPhone(orderInfo), //收货手机号码 phone: userPhone(orderInfo), //收货手机号码
order_total_length: (orderInfo.total_number/100).toString(), //订单布匹长度 order_total_length: (orderInfo.total_number/100).toString(), //订单布匹长度
order_total_price: formatPriceDiv(orderInfo.total_sale_price).toString(), //订单价格 order_total_price: formatPriceDiv(orderInfo.total_sale_price).toString(), //订单价格
order_total_num: (orderInfo.total_number) + '', order_total_num: (orderInfo.total_number).toString(),
qrcode:"", //跳转链接 qrcode:"", //跳转链接
order_total_weight: formatWeightDiv(orderInfo.total_estimate_weight).toString(), //订单布匹重量 order_total_weight: formatWeightDiv(orderInfo.total_estimate_weight).toString(), //订单布匹重量
list: lists list: lists
})) }))
} }
}, [orderInfo, payInfo]) }, [orderInfo])
//收货地址 //收货地址
const address = (addressInfo) => { const address = (addressInfo) => {
@ -199,6 +177,5 @@ export default memo(({show = true, onClose, company, orderInfo}:Param) => {
</View> </View>
</Popup> </Popup>
</View> </View>
) )
}) })

View File

@ -195,6 +195,7 @@ import styles from './index.module.scss'
//支付成功 //支付成功
const onPaySuccess = useCallback(() => { const onPaySuccess = useCallback(() => {
alert.success('支付成功')
getSaleOrderPreView() getSaleOrderPreView()
closePayShow() closePayShow()
}, [orderDetail]) }, [orderDetail])

View File

@ -73,7 +73,7 @@ export default memo(({value, onClickBtn}: Param) => {
//总条数 //总条数
const numText = useMemo(() => { const numText = useMemo(() => {
let total_number_new = value?.sale_mode == 0? value?.total_number:(value?.total_number/100) let total_number_new = value?.sale_mode == 0? value?.total_number:(value?.total_number/100)
return `${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${total_number_new}${value?.sale_mode == 0? '条':'米'}` return `${value?.total_fabrics} 种面料,${value?.total_colors} 种颜色,共 ${total_number_new}${value?.sale_mode == 0? ' 条':' 米'}`
}, [value]) }, [value])
@ -113,7 +113,7 @@ export default memo(({value, onClickBtn}: Param) => {
(index <= 1)&&<View className={styles.color_item}> (index <= 1)&&<View className={styles.color_item}>
<View className={styles.color_title}>{formatHashTag(itemColor.code, itemColor.name)}</View> <View className={styles.color_title}>{formatHashTag(itemColor.code, itemColor.name)}</View>
<View className={styles.color_price}>{standardPrice(itemColor.sale_price, value.sale_mode)}</View> <View className={styles.color_price}>{standardPrice(itemColor.sale_price, value.sale_mode)}</View>
<View className={styles.color_num}>×{formatCount(itemColor, value.sale_mode) + (value.sale_mode == 0?'条':'米')}</View> <View className={styles.color_num}>×{formatCount(itemColor, value.sale_mode) + (value.sale_mode == 0?' 条':' 米')}</View>
</View> </View>
) )
}) })

View File

@ -1,194 +0,0 @@
import Search from "@/components/search"
import useLogin from "@/use/useLogin"
import { Image, ScrollView, Text, View } from "@tarojs/components"
import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro"
import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import styles from './index.module.scss'
import classnames from "classnames";
import Order from "./components/order"
import InfiniteScroll from "@/components/infiniteScroll"
import {GetOrderStatusListApi, GetOrderListApi, OrderStatusListApi} from '@/api/order'
import { dataLoadingStatus, getFilterData } from "@/common/util"
import OrderStatusList from "./components/orderStatusList"
import Payment from "../order/components/payment"
import { ORDER_STATUS } from "@/common/enum"
import { AddShoppingCartApi } from "@/api/shopCart"
import ShopCart from "@/components/shopCart"
import ApplyRefund from "./components/applyRefund"
import { alert } from "@/common/common"
export default () => {
const {checkLogin} = useLogin()
useDidShow(async () => {
await checkLogin()
})
//搜索参数
const [searchField, setSearchField] = useState({
status: -1,
page : 1,
size : 10,
Name:''
})
//获取订单状态
const {fetchData: orderStatusListFetchData} = OrderStatusListApi()
const [statusList, setStatusList] = useState<any[]>([{id: -1, name: '全部'}])
const getOrderStatusList = () => {
const status = Object.values(ORDER_STATUS).map(item => {
return {id: item.value, name: item.label}
})
setStatusList((e) => [...e, ...status])
}
useEffect(() => {
getOrderStatusList()
}, [])
//获取订单列表
const {fetchData: listFetchData, state:orderState} = GetOrderListApi()
const [orderData, setOrderData] = useState<{list:any[], total:number}>({list:[], total:0})
const getOrderList = async () => {
let res = await listFetchData(getFilterData(searchField))
setOrderData({list: res.data.list, total: res.data.total})
setRefresherTriggeredStatus(() => false)
}
//监听筛选条件变化
useEffect(() => {
getOrderList()
}, [searchField])
//上拉加载数据
const pageNum = useRef({size: searchField.size, page: searchField.page})
const getScrolltolower = useCallback(() => {
if(orderData.list.length < orderData.total) {
pageNum.current.page++
const size = pageNum.current.size * pageNum.current.page
setSearchField({...searchField, size })
}
}, [orderData])
//状态改变
const changeStatus = useCallback((e) => {
pageNum.current.page = 1
setSearchField((value) => ({...value, status:e, size:10}))
setOrderData(() => ({list:[], total:0}))
}, [])
//数据加载状态
const statusMore = useMemo(() => {
return dataLoadingStatus({list:orderData.list, total: orderData.total, status: orderState.loading})
}, [orderData, orderState])
//输入了搜索关键字
const getSearchData = useCallback((e) => {
pageNum.current.page = 1
setOrderData(() => ({list:[], total:0}))
setSearchField((val) => ({...val, name:e, size:10}))
}, [])
//列表下拉刷新
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
const getRefresherRefresh = async () => {
pageNum.current.size = 1
setRefresherTriggeredStatus(true)
setSearchField((val) => ({...val, size:10}))
}
//监听点击的按钮
const clickOrderBtn = useCallback(({status, orderInfo}) => {
setCallBackPayOrderInfo(() => orderInfo)
if(status == 1 || status == 6) {
getOrderList()
} else if(status == 2) {
//去支付
toPay()
} else if (status == 3) {
//申请退款
if(!orderInfo?.av_return_roll) return alert.none('该订单已申请过退款')
setRefundShow(true)
} else if (status == 7) {
//购买
addShopCart(orderInfo)
}
}, [orderData])
const [callBackOrderInfo, setCallBackPayOrderInfo] = useState<any>()
//去付款
const [payMentShow, setPayMentShow] = useState(false)
const toPay = () => {
setPayMentShow(true)
}
//关闭支付弹窗
const closePayShow = useCallback(() => {
setPayMentShow(() => false)
}, [])
//支付成功
const onPaySuccess = useCallback(() => {
getOrderList()
closePayShow()
}, [])
//添加购物车
const [showCart, setShowCart] = useState(false)
const {fetchData:addFetchData} = AddShoppingCartApi()
const addShopCart = async (item) => {
let color_list:{product_color_id: number, roll?: number, length?: number}[] = []
item?.product_list.map(pitem => {
pitem?.product_colors.map(citem => {
if(item?.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: item?.sale_mode,
color_list
})
if(state.success) {
Taro.showToast({
title:'已加入购物车'
})
setShowCart(true)
} else {
Taro.showToast({
icon:'none',
title: state.msg
})
}
}
//申请退款
const [refundShow, setRefundShow] = useState(false)
const applyRefundClose = useCallback(() => {
setRefundShow(false)
}, [])
return (
<View className={styles.order_list_main}>
<View className={styles.title}>
<Search placeIcon="out" placeholder="搜索商品/名称/颜色/订单号" showBtn={true} changeOnSearch={getSearchData} debounceTime={300}/>
<OrderStatusList list={statusList} onSelect={changeStatus} defaultId={1}/>
</View>
<View className={styles.order_list}>
<InfiniteScroll statusMore={statusMore} selfonScrollToLower={getScrolltolower} refresherEnabled={false} refresherTriggered={refresherTriggeredStatus} selfOnRefresherRefresh={getRefresherRefresh}>
{orderData?.list.map(item => {
return <View key={item.id} className={styles.order_item_con}> <Order value={item} onClickBtn={clickOrderBtn}/></View>
})}
</InfiniteScroll>
</View>
<ApplyRefund show={refundShow} onClose={applyRefundClose} orderId={callBackOrderInfo?.id}/>
<ShopCart show={showCart} onClose={() => setShowCart(false)}/>
<Payment onSubmitSuccess={onPaySuccess} show={payMentShow} onClose={closePayShow} orderInfo={callBackOrderInfo}/>
</View>
)
}

View File

@ -49,10 +49,10 @@ export default memo(({order, comfirm = false}:Param) => {
if(order) { if(order) {
if(!order?.quality_check_pass_fabrics&&!order?.quality_check_pass_number&&!order?.quality_check_pass_colors) { if(!order?.quality_check_pass_fabrics&&!order?.quality_check_pass_number&&!order?.quality_check_pass_colors) {
let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100) let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100)
return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${total_number}${order?.unit}` return `${order?.total_fabrics} 种面料,${order?.total_colors} 种颜色,共 ${total_number} ${order?.unit}`
} else { } else {
let total_number = order?.sale_mode == 0?order?.quality_check_pass_number:(order?.quality_check_pass_number/100) let total_number = order?.sale_mode == 0?order?.quality_check_pass_number:(order?.quality_check_pass_number/100)
return `${order?.quality_check_pass_fabrics}种面料,${order?.quality_check_pass_colors}种颜色,共${total_number}${order?.unit}` return `${order?.quality_check_pass_fabrics} 种面料,${order?.quality_check_pass_colors} 种颜色,共 ${total_number} ${order?.unit}`
} }
} }
}, [order]) }, [order])

View File

@ -71,7 +71,7 @@ export default memo(({value, onClickBtn}: Param) => {
const numText = useMemo(() => { const numText = useMemo(() => {
let total_number_new = value?.sale_mode == 0? value?.total_number:(value?.total_number/100) let total_number_new = value?.sale_mode == 0? value?.total_number:(value?.total_number/100)
return `${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${total_number_new}${value?.sale_mode == 0? '条':'米'}` return `${value?.total_fabrics} 种面料,${value?.total_colors} 种颜色,共 ${total_number_new}${value?.sale_mode == 0? ' 条':' 米'}`
}, [value]) }, [value])
//售后单状态 //售后单状态
@ -119,11 +119,11 @@ export default memo(({value, onClickBtn}: Param) => {
) )
}) })
} }
<View className={styles.color_item}> {value?.product_list?.[0].product_colors.length > 2 && <View className={styles.color_item}>
<View className={styles.color_more}></View> <View className={styles.color_more}></View>
<View className={styles.color_more}></View> <View className={styles.color_more}></View>
<View className={styles.color_more}></View> <View className={styles.color_more}></View>
</View> </View>}
</View> </View>
</View> </View>
<View className={styles.color_count_num}>{numText}</View> <View className={styles.color_count_num}>{numText}</View>

View File

@ -1,124 +0,0 @@
import Search from "@/components/search"
import useLogin from "@/use/useLogin"
import { Image, ScrollView, Text, View } from "@tarojs/components"
import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro"
import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import styles from './index.module.scss'
import classnames from "classnames";
import Order from "./components/order"
import InfiniteScroll from "@/components/infiniteScroll"
import { dataLoadingStatus, getFilterData } from "@/common/util"
import OrderStatusList from "./components/orderStatusList"
import { AFTER_ORDER_STATUS } from "@/common/enum"
import { GetSaleOrderListApi } from "@/api/salesAfterOrder"
import ReturnLogistics from "./components/returnLogistics"
export default () => {
const {checkLogin} = useLogin()
useDidShow(async () => {
await checkLogin()
})
//搜索参数
const [searchField, setSearchField] = useState({
status: -1,
page : 1,
size : 10,
Name:''
})
//获取订单状态
const [statusList, setStatusList] = useState<any[]>([{id: -1, name: '全部'}])
const getOrderStatusList = () => {
const status = Object.values(AFTER_ORDER_STATUS).map(item => {
return {id: item.value, name: item.label}
})
setStatusList((e) => [...e, ...status])
}
useEffect(() => {
getOrderStatusList()
}, [])
//获取订单列表
const {fetchData: listFetchData, state:orderState} = GetSaleOrderListApi()
const [orderData, setOrderData] = useState<{list:any[], total:number}>({list:[], total:0})
const getOrderList = async () => {
let res = await listFetchData(getFilterData(searchField))
setOrderData({list: res.data.list, total: res.data.total})
setRefresherTriggeredStatus(() => false)
}
//监听筛选条件变化
useEffect(() => {
getOrderList()
}, [searchField])
//上拉加载数据
const pageNum = useRef({size: searchField.size, page: searchField.page})
const getScrolltolower = useCallback(() => {
if(orderData.list.length < orderData.total) {
pageNum.current.page++
const size = pageNum.current.size * pageNum.current.page
setSearchField({...searchField, size })
}
}, [orderData])
//状态改变
const changeStatus = useCallback((e) => {
pageNum.current.page = 1
setSearchField((value) => ({...value, status:e, size:10}))
setOrderData(() => ({list:[], total:0}))
}, [])
//数据加载状态
const statusMore = useMemo(() => {
return dataLoadingStatus({list:orderData.list, total: orderData.total, status: orderState.loading})
}, [orderData, orderState])
//输入了搜索关键字
const getSearchData = useCallback((e) => {
pageNum.current.page = 1
setOrderData(() => ({list:[], total:0}))
setSearchField((val) => ({...val, name:e, size:10}))
}, [])
//列表下拉刷新
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
const getRefresherRefresh = async () => {
pageNum.current.size = 1
setRefresherTriggeredStatus(true)
setSearchField((val) => ({...val, size:10}))
}
//监听点击的按钮
const clickOrderBtn = useCallback(({status, orderInfo}) => {
if(status == 2) {
//退货物流
}
}, [orderData])
//物流显示
const [logisticsShow, setLogisticsShow] = useState(false)
const onCloseLogistics = useCallback(() => setLogisticsShow(false), [])
return (
<View className={styles.order_list_main}>
<View className={styles.title}>
<Search placeIcon="out" placeholder="搜索商品/名称/颜色/订单号" showBtn={true} changeOnSearch={getSearchData} debounceTime={300}/>
<OrderStatusList list={statusList} onSelect={changeStatus} defaultId={1}/>
</View>
<View className={styles.order_list}>
<InfiniteScroll statusMore={statusMore} selfonScrollToLower={getScrolltolower} refresherEnabled={true} refresherTriggered={refresherTriggeredStatus} selfOnRefresherRefresh={getRefresherRefresh}>
{orderData?.list.map(item => {
return <View key={item.id} className={styles.order_item_con}> <Order value={item} onClickBtn={clickOrderBtn}/></View>
})}
</InfiniteScroll>
<ReturnLogistics show={logisticsShow} onClose={onCloseLogistics}/>
</View>
</View>
)
}

View File

@ -1,5 +1,5 @@
import { View } from '@tarojs/components' import { Text, View } from '@tarojs/components'
import Search from '@/components/search' import Search from '@/components/search'
import { alert, goLink } from '@/common/common'; import { alert, goLink } from '@/common/common';
import classnames from "classnames"; import classnames from "classnames";
@ -80,7 +80,7 @@ export default () => {
{searchData?.historyField.length > 0 && <View className={styles.history}> {searchData?.historyField.length > 0 && <View className={styles.history}>
<View className={styles.history_header}> <View className={styles.history_header}>
<View className={styles.history_header_title}></View> <View className={styles.history_header_title}></View>
<View className={classnames('iconfont icon-lajixiang', styles.miconfont)}></View> <View className={classnames('iconfont icon-shanchu', styles.miconfont)}></View>
</View> </View>
<View className={styles.list}> <View className={styles.list}>
{searchData?.historyField?.map((item, index) => <View key={index} className={styles.item} onClick={() => searchEvent(item.search_key, false)}>{item.search_key}</View>)} {searchData?.historyField?.map((item, index) => <View key={index} className={styles.item} onClick={() => searchEvent(item.search_key, false)}>{item.search_key}</View>)}