From a552a023f8dbbcaee9832b9ffc56aa4fd426c88a Mon Sep 17 00:00:00 2001 From: czm <2192718639@qq.com> Date: Mon, 6 Jun 2022 20:32:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=94=AF=E4=BB=98=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.config.ts | 6 + src/common/enum.ts | 12 ++ src/components/orderBtns/index.tsx | 3 +- .../order/components/orderState/index.tsx | 20 ++- src/pages/order/components/payment/index.tsx | 41 ++++-- src/pages/order/index.tsx | 12 +- .../components/order/index.module.scss | 1 + .../orderList/components/order/index.tsx | 9 +- src/pages/orderList/index.tsx | 26 ++-- .../components/order/index.module.scss | 121 +++++++++++++++ .../salesAfterList/components/order/index.tsx | 106 +++++++++++++ .../orderStatusList/index.module.scss | 18 +++ .../components/orderStatusList/index.tsx | 46 ++++++ .../orderStatusTag/index.module.scss | 21 +++ .../components/orderStatusTag/index.tsx | 20 +++ src/pages/salesAfterList/index.config.ts | 4 + src/pages/salesAfterList/index.module.scss | 38 +++++ src/pages/salesAfterList/index.tsx | 139 ++++++++++++++++++ 18 files changed, 603 insertions(+), 40 deletions(-) create mode 100644 src/pages/salesAfterList/components/order/index.module.scss create mode 100644 src/pages/salesAfterList/components/order/index.tsx create mode 100644 src/pages/salesAfterList/components/orderStatusList/index.module.scss create mode 100644 src/pages/salesAfterList/components/orderStatusList/index.tsx create mode 100644 src/pages/salesAfterList/components/orderStatusTag/index.module.scss create mode 100644 src/pages/salesAfterList/components/orderStatusTag/index.tsx create mode 100644 src/pages/salesAfterList/index.config.ts create mode 100644 src/pages/salesAfterList/index.module.scss create mode 100644 src/pages/salesAfterList/index.tsx diff --git a/src/app.config.ts b/src/app.config.ts index 9c67410..0d1fbb8 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -116,6 +116,12 @@ export default { pages: [ "index", ] + }, + { + root: "pages/salesAfterList", + pages: [ + "index", + ] } ] } diff --git a/src/common/enum.ts b/src/common/enum.ts index 8972e0a..00a8ec1 100644 --- a/src/common/enum.ts +++ b/src/common/enum.ts @@ -13,6 +13,17 @@ export const ORDER_STATUS = { SaleOrderStatusCancel : {value:5, label:'已取消'}, // 已取消 } +//售后单状态枚举 +export const AFTER_ORDER_STATUS = { + SaleOrderStatusBooking : {value:0, label:'申请中'}, + SaleOrderStatusArranging : {value:1, label:'退货中'}, + SaleOrderStatusArranged : {value:2, label:'待验布'}, + SaleOrderStatusWaitingPayment : {value:7, label:'退款中'}, + SaleOrderStatusWaitingDelivery : {value:3, label:'已退款'}, + SaleOrderStatusWaitingReceipt : {value:8, label:'已取消'}, + SaleOrderStatusAlreadyReceipt : {value:9, label:'已拒绝'}, +} + //支付方式 export const PAYMENT_METHOD = { PaymentMethodPreDeposit: {value:1, label:'预存款'}, @@ -21,6 +32,7 @@ export const PAYMENT_METHOD = { PaymentMethodScanCodeToPay: {value:4, label:'扫码支付'}, PaymentMethodCashOnDelivery: {value:5, label:'货到付款'}, } +export type PAYMENT_METHOD_PARAM = 1|2|3|4|5 //分享场景枚举 export const SHARE_SCENE = { diff --git a/src/components/orderBtns/index.tsx b/src/components/orderBtns/index.tsx index 66d1f98..f098520 100644 --- a/src/components/orderBtns/index.tsx +++ b/src/components/orderBtns/index.tsx @@ -10,14 +10,13 @@ type Param = { orderInfo: { status: number, //订单状态 orderId: number, //订单id - settle_mode: number, //支付方式 actual_amount: number, //实付金额 wait_pay_amount: number, //待付金额 }|null, onClick?: (val: number) => void //点击后触发的事件,返回订单状态 } -export const OrderBtnsemus = [{id:1, label:'取消订单'},{id:2, label:'去付款'},{id:3, label:'申请退款'},{id:4, label:'查看物流'}, {id:5, label:'申请退货'}, {id:6, label:'确认收货'}, {id:7, label:'再次购买'}] +// export const OrderBtnsemus = [{id:1, label:'取消订单'},{id:2, label:'去付款'},{id:3, label:'申请退款'},{id:4, label:'查看物流'}, {id:5, label:'申请退货'}, {id:6, label:'确认收货'}, {id:7, label:'再次购买'}] export default memo(({orderInfo, onClick}:Param) => { const { SaleOrderStatusBooking, diff --git a/src/pages/order/components/orderState/index.tsx b/src/pages/order/components/orderState/index.tsx index 471cc9e..82ed17f 100644 --- a/src/pages/order/components/orderState/index.tsx +++ b/src/pages/order/components/orderState/index.tsx @@ -3,6 +3,10 @@ import { memo, useMemo, useState } from "react" import styles from './index.module.scss' import classnames from "classnames"; import { formatDateTime, formatImgUrl } from "@/common/fotmat"; +import { PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum"; + + + type Param = { list: { status: string, @@ -10,10 +14,18 @@ type Param = { tag: string, desc: string }[], - settle_mode: -1|0|1|2, //-1:没选支付方式,0:全额现结,1:定期付款,2:货到付款 + payment_method: 0|PAYMENT_METHOD_PARAM, } -export default memo(({list = [], settle_mode = -1}:Param) => { + +//支付方式枚举 +const { + PaymentMethodAccountPeriod, + PaymentMethodCashOnDelivery, +} = PAYMENT_METHOD + +export default memo(({list = [], payment_method = 0}:Param) => { + const [showMore, setShowMore] = useState(false) const changeMore = () => { setShowMore(() => !showMore) @@ -42,8 +54,8 @@ export default memo(({list = [], settle_mode = -1}:Param) => { } - {(settle_mode == 2)&&} - {(settle_mode == 1)&&} + {(payment_method == PaymentMethodAccountPeriod.value)&&} + {(payment_method == PaymentMethodCashOnDelivery.value)&&} } diff --git a/src/pages/order/components/payment/index.tsx b/src/pages/order/components/payment/index.tsx index a452f95..8af70dc 100644 --- a/src/pages/order/components/payment/index.tsx +++ b/src/pages/order/components/payment/index.tsx @@ -11,21 +11,22 @@ import ScanPay from "../scanPay"; import { GetOrderPayApi, SubmitOrderPayApi } from "@/api/orderPay"; import { formatPriceDiv } from "@/common/fotmat"; import {alert} from "@/common/common" -import { PAYMENT_METHOD } from "@/common/enum"; +import { PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum"; type Param = { show?: true|false, onClose?: () => void, - orderId?: number, //应付单id - onSubmitSuccess?: () => void //支付成功 + onSubmitSuccess?: () => void, //支付成功 + orderInfo?: OrderInfo } -type PayInfo = { - amount: string +type OrderInfo = { + orderId: number, //应付单id + payment_method: 0|PAYMENT_METHOD_PARAM //支付方式 } type PayStatus = 1|2|3|4|5|null //1:预存款, 2:账期,3:线下汇款, 4:扫码支付, 5:货到付款 -export default memo(({show = false, onClose, orderId = 0, onSubmitSuccess}:Param) => { +export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) => { //提交参数 const [submitData, setSubmitData] = useState<{id:number, payment_method: PayStatus}>({ @@ -51,15 +52,15 @@ export default memo(({show = false, onClose, orderId = 0, onSubmitSuccess}:Param const [payInfo, setPayInfo] = useState() const {fetchData: orderFetchData} = GetOrderPayApi() const getOrderPay = async () => { - let {data} = await orderFetchData({id: orderId}) + let {data} = await orderFetchData({id: orderInfo?.orderId}) setPayInfo(() => data) } useEffect(() => { - if(show&&orderId) { - setSubmitData((val) => ({...val, id:orderId})) + if(show&&orderInfo?.orderId) { + setSubmitData((val) => ({...val, id:orderInfo.orderId})) getOrderPay() } - }, [show, orderId]) + }, [show, orderInfo]) //预存款选择 const advanceSelectData = useCallback((val) => { @@ -88,10 +89,19 @@ export default memo(({show = false, onClose, orderId = 0, onSubmitSuccess}:Param } } + //预付款 const advance_payment = useMemo(() => { - const price = formatPriceDiv(payInfo?.should_collect_money - payInfo?.amount_paid) + const price = payInfo?.should_collect_money - payInfo?.amount_paid return ( - {(payInfo?.advance_deposit_balance < price)&&'余额不足,' }剩余 ¥{payInfo?.advance_deposit_balance} + {(payInfo?.advance_deposit_balance < price)&&'余额不足,' }剩余 ¥{formatPriceDiv(payInfo?.advance_deposit_balance)} + ) + }, [payInfo]) + + //账期 + const account_peyment = useMemo(() => { + const price = payInfo?.should_collect_money - payInfo?.amount_paid + return ( + {(payInfo?.account_period < price)&&'额度不足, '}剩余 ¥{formatPriceDiv(payInfo?.account_period_credit_available_line)} ) }, [payInfo]) @@ -133,16 +143,17 @@ export default memo(({show = false, onClose, orderId = 0, onSubmitSuccess}:Param advanceSelectData(PaymentMethodPreDeposit.value)} onClose={() => advanceSelectData(null)}/> - + {(orderInfo?.payment_method != PaymentMethodAccountPeriod.value)&& {payInfo?.account_period}天账期 - 可用额度 ¥{payInfo?.account_period_credit_available_line} + {/* 可用额度 ¥{formatPriceDiv(payInfo?.account_period_credit_available_line)} */} + {account_peyment} periodSelectData(PaymentMethodAccountPeriod.value)} onClose={() => periodSelectData(null)}/> - + } diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx index a625aeb..1367b57 100644 --- a/src/pages/order/index.tsx +++ b/src/pages/order/index.tsx @@ -115,6 +115,12 @@ import styles from './index.module.scss' setShowDesc(() => false) }, []) + //支付所需数据 + const payOrderInfo = useMemo(() => { + if(orderDetail) + return {orderId: orderDetail.should_collect_order_id, payment_method:orderDetail.payment_method } + }, [orderDetail]) + //去付款 const [payMentShow, setPayMentShow] = useState(false) const toPay = () => { @@ -177,12 +183,14 @@ import styles from './index.module.scss' //订单状态枚举 const {SaleOrderStatusCancel} = ORDER_STATUS + + return ( {/* */} - + @@ -216,7 +224,7 @@ import styles from './index.module.scss' setShowDesc(false)} > getRemark(e)}/> - + ) diff --git a/src/pages/orderList/components/order/index.module.scss b/src/pages/orderList/components/order/index.module.scss index e453de3..85e1123 100644 --- a/src/pages/orderList/components/order/index.module.scss +++ b/src/pages/orderList/components/order/index.module.scss @@ -117,5 +117,6 @@ background-color: #F6F6F6; border-radius: 10px; padding: 10px 22px; + margin-top: 20px; } } \ No newline at end of file diff --git a/src/pages/orderList/components/order/index.tsx b/src/pages/orderList/components/order/index.tsx index 64eeb3a..7bff925 100644 --- a/src/pages/orderList/components/order/index.tsx +++ b/src/pages/orderList/components/order/index.tsx @@ -1,6 +1,6 @@ import { goLink } from "@/common/common"; import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat"; -import OrderBtns, {OrderBtnsemus} from "@/components/orderBtns"; +import OrderBtns from "@/components/orderBtns"; import Payment from "@/pages/order/components/payment"; import { useSelector } from "@/reducers/hooks"; import { Image, Text, View } from "@tarojs/components" @@ -21,12 +21,12 @@ type Param = { total_number: number, status: 0, id: number, - settle_mode: number, //支付方式 + payment_method: number, //支付方式 actual_amount: number, //实付金额 wait_pay_amount: number //待付金额 should_collect_order_id: number //应付单id }, - onClickBtn?: (val:number) => void + onClickBtn?: (val:{status:number, orderInfo:Param['value']}) => void } export default memo(({value, onClickBtn}: Param) => { const userInfo = useSelector(state => state.userInfo) @@ -41,7 +41,7 @@ export default memo(({value, onClickBtn}: Param) => { //点击订单按钮 const orderBtnsClick = useCallback((status) => { - onClickBtn?.(status) + onClickBtn?.({status, orderInfo:value}) }, [value]) //按钮所需数据 @@ -49,7 +49,6 @@ export default memo(({value, onClickBtn}: Param) => { return { status: value?.status, //订单状态 orderId: value?.id, - settle_mode: value?.settle_mode, //支付方式 -1 还没支付 0:全额现结,1:定期付款,2:货到付款 actual_amount: value?.actual_amount, //实付金额 wait_pay_amount: value?.wait_pay_amount, //待付金额 } diff --git a/src/pages/orderList/index.tsx b/src/pages/orderList/index.tsx index 9b213fc..dee8c57 100644 --- a/src/pages/orderList/index.tsx +++ b/src/pages/orderList/index.tsx @@ -11,6 +11,7 @@ import {GetOrderStatusListApi, GetOrderListApi} 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" export default () => { const {checkLogin} = useLogin() @@ -27,12 +28,13 @@ export default () => { }) //获取订单状态 - const {fetchData: statusFetchData} = GetOrderStatusListApi() + // const {fetchData: statusFetchData} = GetOrderStatusListApi() const [statusList, setStatusList] = useState([{id: -1, name: '全部'}]) - const getOrderStatusList = async () => { - let res = await statusFetchData() - let list = [...statusList, ...res.data.list||[]] - setStatusList(() => list) + const getOrderStatusList = () => { + const status = Object.values(ORDER_STATUS).map(item => { + return {id: item.value, name: item.label} + }) + setStatusList((e) => [...e, ...status]) } useEffect(() => { getOrderStatusList() @@ -93,15 +95,17 @@ export default () => { } //监听点击的按钮 - const clickOrderBtn = useCallback((state) => { - if(state == 2) { + const clickOrderBtn = useCallback(({status, orderInfo}) => { + if(status == 2) { //去支付 + setPayOrderInfo({orderId:orderInfo.should_collect_order_id, payment_method:orderInfo.payment_method}) toPay() } }, [orderData]) + //去付款 - const [shouldCollectOrderId, setShouldCollectOrderId] = useState(0) + const [payOrderInfo, setPayOrderInfo] = useState() const [payMentShow, setPayMentShow] = useState(false) const toPay = () => { setPayMentShow(true) @@ -110,15 +114,13 @@ export default () => { const closePayShow = useCallback(() => { setPayMentShow(() => false) }, []) - //支付成功 const onPaySuccess = useCallback(() => { + getOrderList() closePayShow() }, []) - - return ( @@ -132,7 +134,7 @@ export default () => { })} - + ) } diff --git a/src/pages/salesAfterList/components/order/index.module.scss b/src/pages/salesAfterList/components/order/index.module.scss new file mode 100644 index 0000000..e453de3 --- /dev/null +++ b/src/pages/salesAfterList/components/order/index.module.scss @@ -0,0 +1,121 @@ +.order_item{ + background-color: #fff; + border-radius: 20px; + padding: 20px; + box-sizing: border-box; + .header{ + display: flex; + align-items: center; + .user{ + display: flex; + align-items: center; + .name { + color: #000; + font-weight: 700; + margin-left: 15px; + font-size: $font_size; + } + image{ + width: 70px; + height: 70px; + border-radius: 50%; + } + } + .order_num { + flex: 1; + font-size: $font_size_medium; + color: $color_font_one; + text-align: right; + padding-right: 30px; + display: flex; + justify-content: flex-end; + align-items: center; + .miconfont { + font-size: 20px; + } + } + .tag{ + font-size: $font_size_min; + padding: 5px 15px; + background-color: $color_main; + color: #fff; + border-radius: 0px 20px 0px 20px; + } + } + .product_title{ + display: flex; + align-items: center; + padding: 35px 0; + .product_tag{ + background-color: #CDE5FF; + font-size: $font_size_min; + padding: 5px 10px; + color: $color_main; + border-radius: 6px; + } + .product_name{ + flex:1; + font-size: $font_size; + font-weight: 700; + padding-left: 20px; + } + .product_status{ + font-size: $font_size; + color: $color_main; + } + } + .product_list{ + display: flex; + .image{ + width: 126px; + height: 126px; + background: #e5ad3a; + border-radius: 20px 20px 0px 0px; + position: relative; + image{ + width: 100%; + height: 100%; + border-radius: 20px 20px 0px 0px; + } + .color_num { + background: rgba(0,0,0, 0.5); + border-radius: 50px 0px 0px 0px; + font-size: $font_size_min; + color: #fff; + position: absolute; + right:0; + bottom:0; + padding: 5px 10px; + box-sizing: border-box; + } + } + .color_list{ + flex:1; + padding-left: 30px; + .color_item{ + display: flex; + justify-content: space-between; + font-size: $font_size_min; + color: $color_font_three; + align-items: center; + margin-bottom: 20px; + .color_title{ + font-weight: 700; + font-size: $font_size; + color: #000; + } + .color_more{ + color: $color_font_three; + } + } + } + + } + .color_count_num{ + font-size: $font_size_min; + color: $color_font_two; + background-color: #F6F6F6; + border-radius: 10px; + padding: 10px 22px; + } +} \ No newline at end of file diff --git a/src/pages/salesAfterList/components/order/index.tsx b/src/pages/salesAfterList/components/order/index.tsx new file mode 100644 index 0000000..f33edaa --- /dev/null +++ b/src/pages/salesAfterList/components/order/index.tsx @@ -0,0 +1,106 @@ +import { goLink } from "@/common/common"; +import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat"; +import OrderBtns from "@/components/orderBtns"; +import { useSelector } from "@/reducers/hooks"; +import { Image, Text, View } from "@tarojs/components" +import classnames from "classnames"; +import { memo, useCallback, useMemo, useRef, useState } from "react"; +import OrderStatusTag from "../orderStatusTag"; +import styles from './index.module.scss' + +type Param = { + value: { + order_no: string, + sale_mode: number, + sale_mode_name: string, + status_name: string, + shipment_mode_name: string, + product_list: any[], + total_fabrics: number, + total_colors: number, + total_number: number, + status: 0, + id: number, + payment_method: number, //支付方式 + actual_amount: number, //实付金额 + wait_pay_amount: number //待付金额 + should_collect_order_id: number //应付单id + }, + onClickBtn?: (val:{status:number, orderInfo:Param['value']}) => void +} +export default memo(({value, onClickBtn}: Param) => { + const userInfo = useSelector(state => state.userInfo) + //对应数量 + const formatCount = useCallback((item, sale_mode) => { + return sale_mode == 0? item.roll : Number(item.length / 100) + }, [value]) + //对应单价 + const standardPrice = useCallback((price, sale_mode) => { + return formatPriceDiv(price).toLocaleString() + '/' + (sale_mode == 1?'m':'kg') + }, [value]) + + //点击订单按钮 + const orderBtnsClick = useCallback((status) => { + onClickBtn?.({status, orderInfo:value}) + }, [value]) + + //按钮所需数据 + const orderInfo = useMemo(() => { + return { + status: value?.status, //订单状态 + orderId: value?.id, + actual_amount: value?.actual_amount, //实付金额 + wait_pay_amount: value?.wait_pay_amount, //待付金额 + } + }, [value]) + + return ( + + goLink('/pages/order/index', {id: value?.id})}> + + + {userInfo?.adminUserInfo?.user_name} + + + 订单号:{value?.order_no} + + + + + goLink('/pages/order/index', {id: value?.id})}> + + {value?.sale_mode_name} + {formatHashTag(value?.product_list[0].code, value?.product_list[0].name)} + {value?.status_name} + + + + + {value?.product_list[0].product_colors[0].code} + + + {value?.product_list[0].product_colors.map((itemColor, index) => { + return ( + (index <= 1)&& + {formatHashTag(itemColor.code, itemColor.name)} + {standardPrice(itemColor.sale_price, value.sale_mode)} + ×{formatCount(itemColor, value.sale_mode)}条 + + ) + }) + } + + …… + …… + …… + + + + {`${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${value?.total_number}条`} + + + + + ) +}) + diff --git a/src/pages/salesAfterList/components/orderStatusList/index.module.scss b/src/pages/salesAfterList/components/orderStatusList/index.module.scss new file mode 100644 index 0000000..47de83d --- /dev/null +++ b/src/pages/salesAfterList/components/orderStatusList/index.module.scss @@ -0,0 +1,18 @@ +.order_status_list{ + font-size: $font_size; + color: #9E9E9E; + margin-top: 20px; + .order_status_item{ + padding: 20px; + box-sizing: border-box; + } + .selected{ + font-weight: 700; + color: #000; + border-bottom: 4px solid #707070; + } + .order_list_scroll{ + white-space: nowrap; + display: flex; + } +} \ No newline at end of file diff --git a/src/pages/salesAfterList/components/orderStatusList/index.tsx b/src/pages/salesAfterList/components/orderStatusList/index.tsx new file mode 100644 index 0000000..3e12f6f --- /dev/null +++ b/src/pages/salesAfterList/components/orderStatusList/index.tsx @@ -0,0 +1,46 @@ +import { ScrollView, View } from "@tarojs/components" +import { memo, useEffect, useState } from "react" +import styles from './index.module.scss' +import classnames from "classnames"; + +type Param = { + list: {id: number, name: string}[], + defaultId?: number|null, + onSelect?: (val: number) => void +} +export default memo(({list = [], defaultId = null, onSelect}: Param) => { + const [selectInfo, setSelectInfo] = useState({ + selected: -1, //当前选中的id + tabId: '', //需要滚动到的id + }) + useEffect(() => { + if(defaultId) { + const index = list?.findIndex(item => { + console.log(item.id, defaultId) + return item.id == defaultId + }) + if(index !== -1) { + const num = index > 0?( index - 1) : 0 + setSelectInfo((e) => ({...e, tabId:list[num].id.toString()})) + } + } + }, [defaultId]) + const clickEvent = ({item, index}: {item:any, index:number}) => { + const num = index > 0?( index - 1) : 0 + setSelectInfo((e) => ({...e, tabId:list[num].id.toString(), selected: item.id})) + onSelect?.(item.id) + } + + return ( + + + + {list.map((item, index) => { + return clickEvent({item, index})} className={classnames(styles.order_status_item, (selectInfo.selected==item.id)&&styles.selected)}>{item.name} + })} + + + + ) +}) + diff --git a/src/pages/salesAfterList/components/orderStatusTag/index.module.scss b/src/pages/salesAfterList/components/orderStatusTag/index.module.scss new file mode 100644 index 0000000..1f6f8d3 --- /dev/null +++ b/src/pages/salesAfterList/components/orderStatusTag/index.module.scss @@ -0,0 +1,21 @@ +.tag{ + font-size: $font_size_min; + padding: 5px 15px; + background-color: $color_main; + color: #fff; + border-radius: 0px 20px 0px 20px; + display: flex; + align-items: center; + .miconfont{ + font-size: 30px; + } + +} +.saleReturn_tag{ + background-color: #FFE6CE; + color: #EE7500; +} +.priceReturn_tag { + background-color: #E4E4FF; + color: #1818B4; +} \ No newline at end of file diff --git a/src/pages/salesAfterList/components/orderStatusTag/index.tsx b/src/pages/salesAfterList/components/orderStatusTag/index.tsx new file mode 100644 index 0000000..a88ae20 --- /dev/null +++ b/src/pages/salesAfterList/components/orderStatusTag/index.tsx @@ -0,0 +1,20 @@ +import { Text, View } from "@tarojs/components" +import { memo } from "react" +import classnames from "classnames"; +import styles from './index.module.scss' + + +type Param = { + status: '' +} +export default memo(({status}:Param) => { + status + return ( + <> + + + 退货 + + + ) +}) \ No newline at end of file diff --git a/src/pages/salesAfterList/index.config.ts b/src/pages/salesAfterList/index.config.ts new file mode 100644 index 0000000..d4c9fc3 --- /dev/null +++ b/src/pages/salesAfterList/index.config.ts @@ -0,0 +1,4 @@ +export default { + navigationBarTitleText: '退货/售后', + enableShareAppMessage: true, +} diff --git a/src/pages/salesAfterList/index.module.scss b/src/pages/salesAfterList/index.module.scss new file mode 100644 index 0000000..e8f528a --- /dev/null +++ b/src/pages/salesAfterList/index.module.scss @@ -0,0 +1,38 @@ +.order_list_main{ + height: 100vh; + background-color: $color_bg_one; + display: flex; + flex-direction: column; + .title{ + padding: 0 20px; + background-color: #fff; + box-shadow: 0px 0px 4px 0px rgba(0,0,0,0.16); + border-bottom: 2px solid #e2e2e2; + height: 160px; + .order_status_list{ + font-size: $font_size; + color: #9E9E9E; + margin-top: 20px; + .order_status_item{ + padding: 20px; + box-sizing: border-box; + } + .selected{ + font-weight: 700; + color: #000; + border-bottom: 4px solid #707070; + } + .order_list_scroll{ + white-space: nowrap; + display: flex; + } + } + } + .order_list{ + height: calc(100vh - 160px); + .order_item_con{ + margin-top: 20px; + padding: 0 20px; + } + } +} \ No newline at end of file diff --git a/src/pages/salesAfterList/index.tsx b/src/pages/salesAfterList/index.tsx new file mode 100644 index 0000000..f5c59c7 --- /dev/null +++ b/src/pages/salesAfterList/index.tsx @@ -0,0 +1,139 @@ +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} from '@/api/order' +import { dataLoadingStatus, getFilterData } from "@/common/util" +import OrderStatusList from "./components/orderStatusList" +import Payment from "../order/components/payment" +import { AFTER_ORDER_STATUS } from "@/common/enum" + +export default () => { + const {checkLogin} = useLogin() + useDidShow(async () => { + await checkLogin() + }) + + //搜索参数 + const [searchField, setSearchField] = useState({ + status: -1, + page : 1, + size : 10, + Name:'' + }) + + //获取订单状态 + const [statusList, setStatusList] = useState([{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} = 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}) => { + if(status == 2) { + //去支付 + setPayOrderInfo({orderId:orderInfo.should_collect_order_id, payment_method:orderInfo.payment_method}) + toPay() + } + }, [orderData]) + + + //去付款 + const [payOrderInfo, setPayOrderInfo] = useState() + const [payMentShow, setPayMentShow] = useState(false) + const toPay = () => { + setPayMentShow(true) + } + //关闭支付弹窗 + const closePayShow = useCallback(() => { + setPayMentShow(() => false) + }, []) + //支付成功 + const onPaySuccess = useCallback(() => { + getOrderList() + closePayShow() + }, []) + + + return ( + + + + + + + + {orderData?.list.map(item => { + return + })} + + + + + ) +}