feat 对接售后列表

This commit is contained in:
AERWEN\26795 2023-10-21 23:11:27 +08:00
parent 34a8f40953
commit 799d1d5d03
13 changed files with 246 additions and 99 deletions

View File

@ -1,5 +1,9 @@
import { getRightsList } from './api'; import { getRightsList } from './api';
import { AfterServiceStatus, ServiceType, ServiceTypeDesc } from '../config'; import { AfterServiceStatus, ServiceType, ServiceTypeDesc } from '../config';
import {
getOrderRefundList
} from '~/services/order/getOrderRefundList';
Page({ Page({
page: { page: {
@ -8,6 +12,7 @@ Page({
}, },
data: { data: {
enable: false,
tabs: [ tabs: [
{ {
key: -1, key: -1,
@ -66,7 +71,7 @@ Page({
}, },
onPullDownRefresh_(e) { onPullDownRefresh_(e) {
const { callback } = e.detail; // const { callback } = e.detail;
this.setData({ this.setData({
pullDownRefreshing: true, pullDownRefreshing: true,
}); // 下拉刷新时不显示load-more }); // 下拉刷新时不显示load-more
@ -75,7 +80,7 @@ Page({
this.setData({ this.setData({
pullDownRefreshing: false, pullDownRefreshing: false,
}); });
callback && callback(); // callback && callback();
}) })
.catch((err) => { .catch((err) => {
this.setData({ this.setData({
@ -90,75 +95,78 @@ Page({
this.refreshList(status); this.refreshList(status);
}, },
// 获取售后订单列表
getAfterServiceList(statusCode = -1, reset = false) { getAfterServiceList(statusCode = -1, reset = false) {
const params = { const params = {
parameter: { parameter: {
pageSize: this.page.size, pageSize: this.page.size,
pageNum: this.page.num, pageIndex: this.page.num,
}, },
}; };
if (statusCode !== -1) params.parameter.afterServiceStatus = statusCode; if (statusCode !== -1) params.parameter.afterServiceStatus = statusCode;
this.setData({ this.setData({
listLoading: 1, listLoading: 1,
}); });
return getRightsList(params) return getOrderRefundList(params)
.then((res) => { .then((res) => {
console.log(res,'售后订单列表');
this.page.num++; this.page.num++;
let dataList = []; let dataList = [];
let { tabs } = this.data; let { tabs } = this.data;
if (res && res.data && res.data.states) { // if (res && res.data && res.data.states) {
tabs = this.data.tabs.map((item) => { // tabs = this.data.tabs.map((item) => {
switch (item.key) { // switch (item.key) {
case AfterServiceStatus.TO_AUDIT: // case AfterServiceStatus.TO_AUDIT:
item.info = res.data.states.audit; // item.info = res.data.states.audit;
break; // break;
case AfterServiceStatus.THE_APPROVED: // case AfterServiceStatus.THE_APPROVED:
item.info = res.data.states.approved; // item.info = res.data.states.approved;
break; // break;
case AfterServiceStatus.COMPLETE: // case AfterServiceStatus.COMPLETE:
item.info = res.data.states.complete; // item.info = res.data.states.complete;
break; // break;
case AfterServiceStatus.CLOSED: // case AfterServiceStatus.CLOSED:
item.info = res.data.states.closed; // item.info = res.data.states.closed;
break; // break;
} // }
return item; // return item;
}); // });
} // }
if (res && res.data && res.data.dataList) { if (res && res.data && res.data.result) {
dataList = (res.data.dataList || []).map((_data) => { dataList = (res.data.result || []).map((_data) => {
return { return {
id: _data.rights.rightsNo, id: _data.orderRefundGuid,
serviceNo: _data.rights.rightsNo, serviceNo: _data.orderRefundGuid,
storeName: _data.rights.storeName, storeName: _data.storeName,
type: _data.rights.rightsType, type: _data.refundType,
typeDesc: ServiceTypeDesc[_data.rights.rightsType], typeDesc: ServiceTypeDesc[_data.refundType],
typeDescIcon: typeDescIcon:
_data.rightsType === ServiceType.ONLY_REFUND _data.rightsType === ServiceType.ONLY_REFUND
? 'money-circle' ? 'money-circle'
: 'return-goods-1', : 'return-goods-1',
status: _data.rights.rightsStatus, status: _data.rightsStatus,
statusName: _data.rights.userRightsStatusName, statusName: _data.eserRightsStatusDesc,
statusDesc: _data.rights.userRightsStatusDesc, statusDesc: _data.eserRightsStatusDesc,
amount: _data.rights.refundAmount, amount: _data.refundMoney,
goodsList: _data.rightsItem.map((item, i) => ({ goodsList: _data.orderRefundGoodList.map((item, i) => ({
id: i, id: i,
thumb: item.goodsPictureUrl, thumb: item.thumb,
title: item.goodsName, title: item.title,
specs: (item.specInfo || []).map((s) => s.specValues || ''), specs: (item.specifications || []).map((s) => s.specValue || ''),
itemRefundAmount: item.itemRefundAmount, itemRefundAmount: item.price,
rightsQuantity: item.itemRefundAmount, rightsQuantity: item.buyQuantity,
})), })),
storeId: _data.storeId, storeId: _data.shopGuid,
buttons: _data.buttonVOs || [], buttons: _data.buttonVOs || [],
logisticsNo: _data.logisticsVO.logisticsNo, // 退货物流单号 // logisticsNo: _data.logisticsVO.logisticsNo, // 退货物流单号
logisticsCompanyName: _data.logisticsVO.logisticsCompanyName, // 退货物流公司 // logisticsCompanyName: _data.logisticsVO.logisticsCompanyName, // 退货物流公司
logisticsCompanyCode: _data.logisticsVO.logisticsCompanyCode, // 退货物流公司 // logisticsCompanyCode: _data.logisticsVO.logisticsCompanyCode, // 退货物流公司
remark: _data.logisticsVO.remark, // 退货备注 // remark: _data.logisticsVO.remark, // 退货备注
logisticsVO: _data.logisticsVO, // logisticsVO: _data.logisticsVO,
}; };
}); });
} }
return new Promise((resolve) => { return new Promise((resolve) => {
if (reset) { if (reset) {
this.setData( this.setData(

View File

@ -27,6 +27,7 @@
> >
<view slot="footer" class="order-goods-card-footer"> <view slot="footer" class="order-goods-card-footer">
<wr-price <wr-price
priceUnit="yuan"
price="{{goods.itemRefundAmount}}" price="{{goods.itemRefundAmount}}"
fill fill
wr-class="order-goods-card-footer-price-class" wr-class="order-goods-card-footer-price-class"

View File

@ -1,6 +1,8 @@
import Dialog from 'tdesign-miniprogram/dialog/index'; import Dialog from 'tdesign-miniprogram/dialog/index';
import Toast from 'tdesign-miniprogram/toast/index'; import Toast from 'tdesign-miniprogram/toast/index';
import {
repeal
} from '~/services/order/repeal';
import { cancelRights } from '../../after-service-detail/api'; import { cancelRights } from '../../after-service-detail/api';
import { ServiceButtonTypes } from '../../config'; import { ServiceButtonTypes } from '../../config';
@ -9,6 +11,7 @@ Component({
service: { service: {
type: Object, type: Object,
observer(service) { observer(service) {
console.log(service,'看看service');
const buttonsRight = service.buttons || service.buttonVOs || []; const buttonsRight = service.buttons || service.buttonVOs || [];
this.setData({ this.setData({
buttons: { buttons: {
@ -74,6 +77,7 @@ Component({
}); });
}, },
// 撤销申请
onConfirm() { onConfirm() {
Dialog.confirm({ Dialog.confirm({
title: '是否撤销退货申请?', title: '是否撤销退货申请?',
@ -81,13 +85,16 @@ Component({
confirmBtn: '撤销申请', confirmBtn: '撤销申请',
cancelBtn: '不撤销', cancelBtn: '不撤销',
}).then(() => { }).then(() => {
const params = { rightsNo: this.data.service.id }; const params = { orderRefundGuid: this.data.service.id };
return cancelRights(params).then(() => { return repeal(params).then((res) => {
if(res.code === 200){
bindrefresh()
Toast({ Toast({
context: this, context: this,
selector: '#t-toast', selector: '#t-toast',
message: '你确认撤销申请', message: '撤销申请成功!',
}); });
}
}); });
}); });
}, },

View File

@ -8,13 +8,14 @@
<view class="wr-goods-card__main"> <view class="wr-goods-card__main">
<view class="wr-goods-card__thumb thumb-class" bind:tap="clickThumbHandle"> <view class="wr-goods-card__thumb thumb-class" bind:tap="clickThumbHandle">
<!-- data-src 是方便加购动画读取图片用的 --> <!-- data-src 是方便加购动画读取图片用的 -->
<t-image <!-- <t-image
t-class="wr-goods-card__thumb-com" t-class="wr-goods-card__thumb-com"
wx:if="{{ !!goods.thumb && !goods.hideKey.thumb }}" wx:if="{{ !!goods.thumb && !goods.hideKey.thumb }}"
src="{{ goods.thumb }}" src="{{ goods.thumb }}"
mode="{{ thumbMode }}" mode="{{ thumbMode }}"
lazy-load="{{ lazyLoad }}" lazy-load="{{ lazyLoad }}"
/> /> -->
<image src="{{ goods.thumb }}" mode="{{ thumbMode }}" class="wr-goods-card__thumb-com"></image>
<slot name="thumb-cover" /> <slot name="thumb-cover" />
</view> </view>
@ -39,6 +40,7 @@
<slot name="price-prefix" /> <slot name="price-prefix" />
<view wx:if="{{ goods.price && !goods.hideKey.price }}" class="wr-goods-card__price"> <view wx:if="{{ goods.price && !goods.hideKey.price }}" class="wr-goods-card__price">
<price <price
priceUnit="yuan"
wr-class="price-class" wr-class="price-class"
symbol="{{currency}}" symbol="{{currency}}"
price="{{goods.price}}" price="{{goods.price}}"
@ -48,6 +50,7 @@
</view> </view>
<view wx:if="{{ goods.originPrice && !goods.hideKey.originPrice && isValidityLinePrice }}" class="wr-goods-card__origin-price"> <view wx:if="{{ goods.originPrice && !goods.hideKey.originPrice && isValidityLinePrice }}" class="wr-goods-card__origin-price">
<price <price
priceUnit="yuan"
wr-class="origin-price-class" wr-class="origin-price-class"
symbol="{{currency}}" symbol="{{currency}}"
price="{{goods.originPrice}}" price="{{goods.originPrice}}"

View File

@ -21,14 +21,14 @@ export const AfterServiceStatus = {
// 售后类型 // 售后类型
export const ServiceType = { export const ServiceType = {
RETURN_GOODS: 10, // 退货退款 RETURN_GOODS: 1, // 退货退款
ONLY_REFUND: 20, // 退款 ONLY_REFUND: 2, // 退款(无需退货)
ORDER_CANCEL: 30, // 支付后取消 ORDER_CANCEL: 30, // 支付后取消
}; };
export const ServiceTypeDesc = { export const ServiceTypeDesc = {
[ServiceType.ONLY_REFUND]: '退款(无需退货)',
[ServiceType.RETURN_GOODS]: '退货', [ServiceType.RETURN_GOODS]: '退货',
[ServiceType.ONLY_REFUND]: '退款',
[ServiceType.ORDER_CANCEL]: '支付后取消', [ServiceType.ORDER_CANCEL]: '支付后取消',
}; };

View File

@ -1,7 +1,17 @@
import Dialog from 'tdesign-miniprogram/dialog/index'; import Dialog from 'tdesign-miniprogram/dialog/index';
import Toast from 'tdesign-miniprogram/toast/index'; import Toast from 'tdesign-miniprogram/toast/index';
import reasonSheet from '../components/reason-sheet/reasonSheet'; import reasonSheet from '../components/reason-sheet/reasonSheet';
import { getDeliverCompanyList, create, update } from './api'; import {
getDeliverCompanyList,
create,
update
} from './api';
import {
getLogisticsCompanyList
} from '~/services/order/getLogisticsCompanyList';
import {
buyerDelivery
} from '~/services/order/buyerDelivery';
Page({ Page({
deliveryCompanyList: [], deliveryCompanyList: [],
@ -28,7 +38,9 @@ Page({
content: '', content: '',
confirmBtn: '确认', confirmBtn: '确认',
}).then(() => { }).then(() => {
wx.navigateBack({ backRefresh: true }); wx.navigateBack({
backRefresh: true
});
}); });
} }
this.rightsNo = rightsNo; this.rightsNo = rightsNo;
@ -77,20 +89,27 @@ Page({
}); });
}, },
// 获取物流公司列表
getDeliveryCompanyList() { getDeliveryCompanyList() {
if (this.deliveryCompanyList.length > 0) { if (this.deliveryCompanyList.length > 0) {
return Promise.resolve(this.deliveryCompanyList); return Promise.resolve(this.deliveryCompanyList);
} }
return getDeliverCompanyList().then((res) => { return getLogisticsCompanyList().then((res) => {
this.deliveryCompanyList = res.data || []; this.deliveryCompanyList = res.data || [];
return this.deliveryCompanyList; return this.deliveryCompanyList;
}); });
}, },
onInput(e) { onInput(e) {
const { key } = e.currentTarget.dataset; const {
const { value } = e.detail; key
this.setData({ [key]: value }); } = e.currentTarget.dataset;
const {
value
} = e.detail;
this.setData({
[key]: value
});
}, },
onCompanyTap() { onCompanyTap() {
@ -99,15 +118,16 @@ Page({
show: true, show: true,
title: '选择物流公司', title: '选择物流公司',
options: deliveryCompanyList.map((company) => ({ options: deliveryCompanyList.map((company) => ({
title: company.name, title: company.logisticsCompanyName,
checked: this.data.deliveryCompany checked: this.data.deliveryCompany ?
? company.code === this.data.deliveryCompany.code company.code === this.data.deliveryCompany.code :
: false, false,
})), })),
showConfirmButton: true, showConfirmButton: true,
showCancelButton: true, showCancelButton: true,
emptyTip: '请选择物流公司', emptyTip: '请选择物流公司',
}).then((indexes) => { }).then((indexes) => {
console.log(indexes);
this.setData({ this.setData({
deliveryCompany: deliveryCompanyList[indexes[0]], deliveryCompany: deliveryCompanyList[indexes[0]],
}); });
@ -116,7 +136,10 @@ Page({
}, },
checkParams() { checkParams() {
const res = { errMsg: '', require: false }; const res = {
errMsg: '',
require: false
};
if (!this.data.trackingNo) { if (!this.data.trackingNo) {
res.errMsg = '请填写运单号'; res.errMsg = '请填写运单号';
@ -125,10 +148,13 @@ Page({
res.errMsg = '请选择物流公司'; res.errMsg = '请选择物流公司';
res.require = true; res.require = true;
} }
this.setData({ submitActived: !res.require }); this.setData({
submitActived: !res.require
});
return res; return res;
}, },
// 提交
onSubmit() { onSubmit() {
const checkRes = this.checkParams(); const checkRes = this.checkParams();
if (checkRes.errMsg) { if (checkRes.errMsg) {
@ -144,31 +170,45 @@ Page({
const { const {
trackingNo, trackingNo,
remark, remark,
deliveryCompany: { code, name }, deliveryCompany: {
logisticsCompanyCode,
logisticsCompanyName,
logisticsCompanyGuid
},
} = this.data; } = this.data;
const params = { const params = {
rightsNo: this.rightsNo, orderRefundGuid: this.rightsNo,
logisticsCompanyCode: code, logisticsCompanyGuid: logisticsCompanyGuid,
logisticsCompanyName: name, expressNo: trackingNo,
logisticsNo: trackingNo, customerWaybillRemark: remark,
remark,
}; };
console.log(params,'填写运单号参数');
const api = this.isChange ? create : update; const api = this.isChange ? create : update;
this.setData({ submitting: true }); this.setData({
api(params) submitting: true
.then(() => { });
this.setData({ submitting: false }); buyerDelivery(params)
.then((res) => {
if(res.code === 200){
this.setData({
submitting: false
});
Toast({ Toast({
context: this, context: this,
selector: '#t-toast', selector: '#t-toast',
message: '保存成功', message: '保存成功',
icon: '', icon: '',
}); });
setTimeout(() => wx.navigateBack({ backRefresh: true }), 1000); setTimeout(() => wx.navigateBack({
backRefresh: true
}), 1000);
}
}) })
.catch(() => { .catch(() => {
this.setData({ submitting: false }); this.setData({
submitting: false
});
}); });
}, },
@ -182,7 +222,9 @@ Page({
message: '扫码成功', message: '扫码成功',
icon: '', icon: '',
}); });
this.setData({ trackingNo: res.result }); this.setData({
trackingNo: res.result
});
}, },
fail: () => {}, fail: () => {},
}); });

View File

@ -19,9 +19,9 @@
</t-cell> </t-cell>
<t-cell <t-cell
t-class-title="t-cell-title-width" t-class-title="t-cell-title-width"
t-class-note="{{deliveryCompany && deliveryCompany.name ? 't-cell__value' : 't-cell__placeholder'}}" t-class-note="{{deliveryCompany && deliveryCompany.logisticsCompanyName ? 't-cell__value' : 't-cell__placeholder'}}"
title="物流公司" title="物流公司"
note="{{deliveryCompany && deliveryCompany.name || '请选择物流公司'}}" note="{{deliveryCompany && deliveryCompany.logisticsCompanyName || '请选择物流公司'}}"
arrow arrow
bindtap="onCompanyTap" bindtap="onCompanyTap"
/> />

View File

@ -2,7 +2,7 @@ import {
request request
} from '../_utils/request'; } from '../_utils/request';
/** 编辑个人资料 */ /** 添加地址 */
export function addOrUpdateAddress(data) { export function addOrUpdateAddress(data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
request({ request({

View File

@ -0,0 +1,21 @@
import {
request
} from '../_utils/request';
/** 买家发货(填写运单号) */
export function buyerDelivery(data) {
return new Promise((resolve, reject) => {
request({
url: `OrderRefundApi/buyerDelivery`,
method: 'POST',
data: data,
success: function (res) {
resolve(res);
},
fail: function (error) {
reject(error);
}
});
});
}

View File

@ -3,7 +3,7 @@ import {
} from '../_utils/request'; } from '../_utils/request';
/* 提交订单 */ /* 获取订单运费 */
export async function getGoodsFreight(data) { export async function getGoodsFreight(data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
request({ request({

View File

@ -0,0 +1,22 @@
import {
request
} from '../_utils/request';
/* 获取物流公司列表 */
export async function getLogisticsCompanyList(data) {
return new Promise((resolve, reject) => {
request({
url: `OrderRefundApi/getLogisticsCompanyList`,
method: 'Get',
data: data,
success: function (res) {
resolve(res);
},
fail: function (error) {
reject(error);
}
});
});
}

View File

@ -0,0 +1,22 @@
import {
request
} from '../_utils/request';
/* 获取售后列表 */
export async function getOrderRefundList(data) {
return new Promise((resolve, reject) => {
request({
url: `OrderRefundApi/getOrderRefundList`,
method: 'Get',
data: data,
success: function (res) {
resolve(res);
},
fail: function (error) {
reject(error);
}
});
});
}

21
services/order/repeal.js Normal file
View File

@ -0,0 +1,21 @@
import {
request
} from '../_utils/request';
/** 撤销售后单记录 */
export function repeal(data) {
return new Promise((resolve, reject) => {
request({
url: `OrderRefundApi/repeal`,
method: 'POST',
data: data,
success: function (res) {
resolve(res);
},
fail: function (error) {
reject(error);
}
});
});
}