From f1469941a5e3c42d60be909e46b5dab30a8eb921 Mon Sep 17 00:00:00 2001 From: maqian Date: Wed, 24 Sep 2025 19:05:35 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=94=AE=E5=90=8E=E6=8B=86=E5=8D=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/sp-checkbox/index.js | 5 +- src/consts/localstorage.js | 2 +- src/doc/trade.js | 1 + src/subpages/trade/after-sale-list.js | 95 +++++++++++++++++-- src/subpages/trade/after-sale-list.scss | 12 ++- .../trade/comps/comp-aftertrade-item.js | 24 ++--- .../trade/comps/comp-aftertrade-item.scss | 2 +- src/subpages/trade/logistics-info.js | 36 +++++-- src/subpages/trade/logistics-info.scss | 56 +++++++++++ 9 files changed, 199 insertions(+), 34 deletions(-) diff --git a/src/components/sp-checkbox/index.js b/src/components/sp-checkbox/index.js index 6e61418d5..e0819f00f 100644 --- a/src/components/sp-checkbox/index.js +++ b/src/components/sp-checkbox/index.js @@ -15,7 +15,8 @@ function SpCheckboxNew(props) { const [isChecked, setChecked] = useState(checked) - const onChangeCheckbox = () => { + const onChangeCheckbox = (e) => { + e.stopPropagation() if (disabled) return setChecked(!isChecked) onChange && onChange(!isChecked) @@ -23,7 +24,7 @@ function SpCheckboxNew(props) { useEffect(() => { setChecked(props.checked) - }) + }, []) return ( formatDateTime(create_time * 1000), diff --git a/src/subpages/trade/after-sale-list.js b/src/subpages/trade/after-sale-list.js index c277971fa..819004c65 100644 --- a/src/subpages/trade/after-sale-list.js +++ b/src/subpages/trade/after-sale-list.js @@ -4,7 +4,7 @@ import Taro, { useRouter } from '@tarojs/taro' import { View, ScrollView } from '@tarojs/components' import { AtButton } from 'taro-ui' import { useImmer } from 'use-immer' -import { SpPage, SpTagBar, SpScrollView } from '@/components' +import { SpPage, SpTagBar, SpScrollView, SpSearchBar } from '@/components' import api from '@/api' import doc from '@/doc' import { pickBy } from '@/utils' @@ -23,13 +23,22 @@ const initialState = { status: '0', typeVal:'0', tradeList: [], - refresherTriggered: false + refresherTriggered: false, + order_id: '', + selectAftersn: [] } function TradeAfterSaleList(props) { const [state, setState] = useImmer(initialState) - const { tradeStatus, status, tradeList, refresherTriggered, typeVal } = state + const { + tradeStatus, + status, + tradeList, + refresherTriggered, + typeVal, + order_id, + selectAftersn + } = state const tradeRef = useRef() - const router = useRouter() useEffect(() => { // 撤销售后事件 @@ -57,7 +66,8 @@ function TradeAfterSaleList(props) { page: pageIndex, pageSize, order_type: 'normal', - aftersales_status: status + aftersales_status: status, + order_id } // params.order_class = typeVal == '1' ? 'employee_purchase' : 'normal' const { list, total_count } = await api.aftersales.list(params) @@ -72,6 +82,7 @@ function TradeAfterSaleList(props) { const onChangeTradeState = (e) => { setState((draft) => { draft.status = tradeStatus[e].value + draft.selectAftersn = [] }) } @@ -90,8 +101,73 @@ function TradeAfterSaleList(props) { }) } + const handleOnChange = (val) => { + setState((v) => { + v.order_id = val + }) + } + + const handleOnClear = () => { + setState((v) => { + v.order_id = '' + v.tradeList = [] + }) + tradeRef.current.reset() + } + + const handleConfirm = async (val) => { + setState((v) => { + v.tradeList = [] + v.order_id = val + }) + await tradeRef.current.reset() + } + + const onSelect = (sn) => { + let list = [...selectAftersn] + const index = list.indexOf(sn) + if (index > -1) { + list.splice(index, 1) + } else { + list.push(sn) + } + setState((draft) => { + draft.selectAftersn = list + }) + } + + const onSubmit = () => { + console.log(tradeList,selectAftersn) + const fliterList = tradeList?.filter((item) => selectAftersn.includes(item.aftersalesBn) && item.aftersalesAddress) + debugger + const address = fliterList[0].aftersalesAddress + Taro.setStorageSync('moreAftersalesBn', { + aftersalesBn: selectAftersn, + address + }) + Taro.navigateTo({ url: `/subpages/trade/logistics-info?type=more` }) + } + return ( - + + 批量处理 + + } + > + + + {tradeList.map((item, index) => ( - + ))} diff --git a/src/subpages/trade/after-sale-list.scss b/src/subpages/trade/after-sale-list.scss index 512d401b1..c6a43bbe4 100644 --- a/src/subpages/trade/after-sale-list.scss +++ b/src/subpages/trade/after-sale-list.scss @@ -1,6 +1,10 @@ $tag-bar-height: 90px; .page-trade-aftersale-list { + .search-bar-container { + padding: 20px; + background: #fff; + } .sp-tag-bar { background: #f5f5f5; height: $tag-bar-height; @@ -23,5 +27,11 @@ $tag-bar-height: 90px; } .comp-tradeitem .shop-info .shop-name { width: 400px; -} + } + .btn-wrap { + width: 80%; + // display: flex; + // justify-content: end; + margin: 20px auto; + } } diff --git a/src/subpages/trade/comps/comp-aftertrade-item.js b/src/subpages/trade/comps/comp-aftertrade-item.js index 288da5d2c..ad4988840 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.js +++ b/src/subpages/trade/comps/comp-aftertrade-item.js @@ -3,17 +3,17 @@ import { useSelector } from 'react-redux' import Taro from '@tarojs/taro' import { View, Text } from '@tarojs/components' import { AtButton } from 'taro-ui' -import { SpImage, SpPrice, SpTradeItem } from '@/components' +import { SpImage, SpPrice, SpTradeItem, SpCheckboxNew } from '@/components' import { VERSION_STANDARD } from '@/utils' import { AFTER_SALE_STATUS } from '@/consts' import './comp-aftertrade-item.scss' function CompTradeItem(props) { - const { info } = props + const { info, isShowChecked = false, selectAftersn = [], onSelect = () => {} } = props if (!info) { return null } - const { aftersalesBn, distributorInfo, orderId, createdTime, aftersalesStatus, items, orderStatus, refundFee, orderClass = 'normal', point, distributorId ,freight} = info + const { aftersalesBn, distributorInfo, createdTime, aftersalesStatus, items, orderStatus, refundFee, orderClass = 'normal', point, distributorId ,freight} = info // const { pointName } = useSelector((state) => state.sys) @@ -40,22 +40,20 @@ function CompTradeItem(props) { - {/* - + + {/* */} + {isShowChecked && onSelect(aftersalesBn)} />} {distributorInfo?.name}{!VERSION_STANDARD && } - */} + {`退款单号: ${aftersalesBn}`} {`申请时间: ${createdTime}`} {AFTER_SALE_STATUS[aftersalesStatus]} - {items.map((good) => ( - + {items.map((good, goodIns) => ( + ))} - {/* { @@ -74,10 +72,6 @@ function CompTradeItem(props) { } - - - - ) } diff --git a/src/subpages/trade/comps/comp-aftertrade-item.scss b/src/subpages/trade/comps/comp-aftertrade-item.scss index 3493e4216..f5dabe217 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.scss +++ b/src/subpages/trade/comps/comp-aftertrade-item.scss @@ -68,7 +68,7 @@ .shop-info { display: flex; - align-items: flex-start; + align-items: center; .sp-image { border-radius: 16px; diff --git a/src/subpages/trade/logistics-info.js b/src/subpages/trade/logistics-info.js index 84eb82a98..09f212a00 100644 --- a/src/subpages/trade/logistics-info.js +++ b/src/subpages/trade/logistics-info.js @@ -4,23 +4,26 @@ import Taro, { getCurrentInstance } from '@tarojs/taro' import { AtButton } from 'taro-ui' import api from '@/api' import S from '@/spx' -import { View, Picker } from '@tarojs/components' +import { View, Picker, Text } from '@tarojs/components' import { LOGISTICS_CODE } from '@/consts' import { SpPage, SpCell, SpInput as AtInput, SpToast } from '@/components' -import { showToast } from '@/utils' +import { showToast, copyText } from '@/utils' import './logistics-info.scss' const initialState = { logi_no: '', corpIndex: 0, - expressList: [] + expressList: [], + afterInfo: null } function TradeLogisticsInfo(props) { const $instance = getCurrentInstance() const [state, setState] = useImmer(initialState) - const { logi_no, expressList, corpIndex } = state + const { logi_no, expressList, corpIndex, afterInfo } = state + const { item_id, order_id, aftersales_bn, type = 'single' } = $instance.router.params useEffect(() => { + const aftersInfo = Taro.getStorageSync('moreAftersalesBn') || null const _expressList = Object.keys(LOGISTICS_CODE).map((key) => { return { name: LOGISTICS_CODE[key], @@ -29,11 +32,15 @@ function TradeLogisticsInfo(props) { }) setState((draft) => { draft.expressList = _expressList + draft.afterInfo = aftersInfo }) + return () => { + Taro.removeStorageSync('moreAftersalesBn') + } }, []) const onSubmit = async () => { - const { item_id, order_id, aftersales_bn } = $instance.router.params + const aftersInfo = Taro.getStorageSync('moreAftersalesBn') || null const corp_code = expressList[corpIndex]?.code if (!corp_code) { showToast('请填写物流公司') @@ -47,10 +54,10 @@ function TradeLogisticsInfo(props) { await api.aftersales.sendback({ item_id, order_id, - aftersales_bn, + aftersales_bn: aftersales_bn || aftersInfo?.aftersalesBn, logi_no, corp_code, - showError:false + showError:false, }) showToast('操作成功') setTimeout(() => { @@ -87,6 +94,21 @@ function TradeLogisticsInfo(props) { } > + {type == 'more' && + + <> + + {afterInfo?.address?.aftersales_contact} + {afterInfo?.address?.aftersales_mobile} + + { + copyText(`${afterInfo?.address?.aftersales_contact} ${afterInfo?.address?.aftersales_mobile}\n${afterInfo?.address?.aftersales_address}`) + }}>复制 + + + {afterInfo?.address?.aftersales_address} + + } Date: Thu, 25 Sep 2025 16:02:26 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/subpages/trade/after-sale-list.js | 17 +++++++++++------ .../trade/comps/comp-aftertrade-item.js | 2 +- .../trade/comps/comp-aftertrade-item.scss | 1 - src/subpages/trade/logistics-info.js | 3 ++- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/subpages/trade/after-sale-list.js b/src/subpages/trade/after-sale-list.js index 819004c65..1938e303c 100644 --- a/src/subpages/trade/after-sale-list.js +++ b/src/subpages/trade/after-sale-list.js @@ -148,14 +148,19 @@ function TradeAfterSaleList(props) { Taro.navigateTo({ url: `/subpages/trade/logistics-info?type=more` }) } + const renderFooter = () => { + if (status != '1') return null + return ( + + 批量处理 + + ) + } + return ( - 批量处理 - - } + renderFooter={renderFooter()} > diff --git a/src/subpages/trade/comps/comp-aftertrade-item.js b/src/subpages/trade/comps/comp-aftertrade-item.js index ad4988840..aa1949d0f 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.js +++ b/src/subpages/trade/comps/comp-aftertrade-item.js @@ -42,7 +42,7 @@ function CompTradeItem(props) { {/* */} - {isShowChecked && onSelect(aftersalesBn)} />} + {isShowChecked && onSelect(aftersalesBn)} />} {distributorInfo?.name}{!VERSION_STANDARD && } {`退款单号: ${aftersalesBn}`} diff --git a/src/subpages/trade/comps/comp-aftertrade-item.scss b/src/subpages/trade/comps/comp-aftertrade-item.scss index f5dabe217..33b65cc10 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.scss +++ b/src/subpages/trade/comps/comp-aftertrade-item.scss @@ -79,7 +79,6 @@ font-size: 30px; color: #111; font-weight: bold; - margin-left: 24px; display: flex; align-items: center; diff --git a/src/subpages/trade/logistics-info.js b/src/subpages/trade/logistics-info.js index 09f212a00..76bb529e4 100644 --- a/src/subpages/trade/logistics-info.js +++ b/src/subpages/trade/logistics-info.js @@ -54,10 +54,11 @@ function TradeLogisticsInfo(props) { await api.aftersales.sendback({ item_id, order_id, - aftersales_bn: aftersales_bn || aftersInfo?.aftersalesBn, + aftersales_bn: aftersales_bn, logi_no, corp_code, showError:false, + aftersales_data: aftersInfo?.aftersalesBn }) showToast('操作成功') setTimeout(() => { From 80b4968201b1b210b8c9e52d1c302e1df8e6e735 Mon Sep 17 00:00:00 2001 From: maqian Date: Fri, 26 Sep 2025 18:30:54 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/subpages/trade/after-sale-list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/subpages/trade/after-sale-list.js b/src/subpages/trade/after-sale-list.js index 1938e303c..5d2ee68f8 100644 --- a/src/subpages/trade/after-sale-list.js +++ b/src/subpages/trade/after-sale-list.js @@ -195,7 +195,7 @@ function TradeAfterSaleList(props) { From 6aeb9dcbde46235868253a7d5191b5e82d1ae36f Mon Sep 17 00:00:00 2001 From: maqian Date: Sun, 28 Sep 2025 11:06:58 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=94=AE=E5=90=8E=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E5=95=86=E5=93=81=E9=87=91=E9=A2=9D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/doc/trade.js | 4 ++-- src/subpages/delivery/after-sale-detail.js | 2 +- src/subpages/trade/after-sale-detail.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/doc/trade.js b/src/doc/trade.js index b30eccbb9..638e3bbd8 100644 --- a/src/doc/trade.js +++ b/src/doc/trade.js @@ -157,8 +157,8 @@ export const TRADE_AFTER_SALES_ITEM = { pic: ({ orderItem }) => orderItem.pic, itemName: ({ orderItem }) => orderItem.item_name, itemSpecDesc: ({ orderItem }) => orderItem.item_spec_desc, - num: ({ orderItem }) => orderItem.refundNum, - price: ({ orderItem }) => orderItem.total_fee / 100, + num: 'num', + price: ({ refund_fee, num }) => (refund_fee / num) / 100, isPrescription: ({ orderItem }) => orderItem.is_prescription, }) }, diff --git a/src/subpages/delivery/after-sale-detail.js b/src/subpages/delivery/after-sale-detail.js index aa08091ff..d8b0823dc 100644 --- a/src/subpages/delivery/after-sale-detail.js +++ b/src/subpages/delivery/after-sale-detail.js @@ -195,7 +195,7 @@ function TradeAfterSaleDetail(props) { {item.itemSpecDesc && {`${item.itemSpecDesc}`}} - x {item.num} + x {item.num} diff --git a/src/subpages/trade/after-sale-detail.js b/src/subpages/trade/after-sale-detail.js index 41b5eb558..792a5bf04 100644 --- a/src/subpages/trade/after-sale-detail.js +++ b/src/subpages/trade/after-sale-detail.js @@ -206,7 +206,7 @@ function TradeAfterSaleDetail(props) { {item.itemSpecDesc && {`${item.itemSpecDesc}`}} - x {item.num} + x {item.num} From 10f08fa8f1d61b443b0bcf44e907dcd5c748dc1c Mon Sep 17 00:00:00 2001 From: maqian Date: Sun, 28 Sep 2025 14:03:11 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=F0=9F=AB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/doc/trade.js | 3 ++- src/subpages/trade/after-sale-detail.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/doc/trade.js b/src/doc/trade.js index 638e3bbd8..311f15ace 100644 --- a/src/doc/trade.js +++ b/src/doc/trade.js @@ -171,8 +171,9 @@ export const TRADE_AFTER_SALES_ITEM = { refundFee: ({ refund_fee }) => refund_fee / 100, refund_info: ({ refund_info }) => { return pickBy(refund_info, { - refundFee: ({ refunded_fee }) => refunded_fee / 100, + refundFee: ({ refund_fee }) => refund_fee / 100, refundPoint: 'refund_point', + freight: ({ freight }) => freight / 100 }) }, refundPoint: 'refund_point', diff --git a/src/subpages/trade/after-sale-detail.js b/src/subpages/trade/after-sale-detail.js index 792a5bf04..f24bbe0c1 100644 --- a/src/subpages/trade/after-sale-detail.js +++ b/src/subpages/trade/after-sale-detail.js @@ -224,9 +224,9 @@ function TradeAfterSaleDetail(props) { }> { - info?.refund_freight_amount > 0 && + info?.refund_info?.freight > 0 && - + } From 3c9c13af3eb4e4a49c607461bd94add0e0ef6a7a Mon Sep 17 00:00:00 2001 From: maqian Date: Mon, 29 Sep 2025 08:01:49 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=94=AE=E5=90=8E-=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/doc/trade.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/doc/trade.js b/src/doc/trade.js index 311f15ace..e1cd9f8b2 100644 --- a/src/doc/trade.js +++ b/src/doc/trade.js @@ -142,6 +142,7 @@ export const AFTER_TRADE = { refundFee: ({ refund_fee }) => refund_fee / 100, userId: 'user_id', freight: ({ freight }) => freight / 100, + progress: 'progress', } export const TRADE_AFTER_SALES_ITEM = { From 34109c85e4ff3fc961651d84d83482726816dd41 Mon Sep 17 00:00:00 2001 From: maqian Date: Mon, 29 Sep 2025 08:24:28 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/subpages/trade/comps/comp-aftertrade-item.js | 2 +- src/subpages/trade/comps/comp-aftertrade-item.scss | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/subpages/trade/comps/comp-aftertrade-item.js b/src/subpages/trade/comps/comp-aftertrade-item.js index aa1949d0f..beffb71fb 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.js +++ b/src/subpages/trade/comps/comp-aftertrade-item.js @@ -43,7 +43,7 @@ function CompTradeItem(props) { {/* */} {isShowChecked && onSelect(aftersalesBn)} />} - {distributorInfo?.name}{!VERSION_STANDARD && } + {distributorInfo?.name}{!VERSION_STANDARD && } {`退款单号: ${aftersalesBn}`} {`申请时间: ${createdTime}`} diff --git a/src/subpages/trade/comps/comp-aftertrade-item.scss b/src/subpages/trade/comps/comp-aftertrade-item.scss index 33b65cc10..c6a1e3727 100644 --- a/src/subpages/trade/comps/comp-aftertrade-item.scss +++ b/src/subpages/trade/comps/comp-aftertrade-item.scss @@ -74,6 +74,9 @@ border-radius: 16px; overflow: hidden; } + .nochecked { + margin-left: 0px !important; + } .shop-name { font-size: 30px;