feat: 添加退款相关功能和状态显示

- 新增退款状态显示,包括“已退款”和“退款中”
- 添加退款目的地页面,支持查看订单退款信息
- 更新订单列表和订单详情页,支持退款操作
- 更新依赖edu-core至v1.0.13以支持新功能
This commit is contained in:
2026-05-09 11:09:14 +08:00
parent 708804cbbf
commit 5f4a4d4ae4
12 changed files with 221 additions and 35 deletions

View File

@@ -4,6 +4,7 @@ if (process.env.NODE_ENV === 'development') {
// 开发环境 // 开发环境
// baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川 // baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川
baseUrl = "https://api.nuttyreading.com/"; // 线上正式 baseUrl = "https://api.nuttyreading.com/"; // 线上正式
// baseUrl = "http://192.168.110.131:9200/pb/"; // 王亚男
} else if (process.env.NODE_ENV === 'production') { } else if (process.env.NODE_ENV === 'production') {
// 生产环境11 // 生产环境11
//baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川 //baseUrl = "http://192.168.110.100:9200/pb/"; // 张川川

View File

@@ -125,6 +125,9 @@ Vue.component('common-video', commonVideo);
import CommonCourseVideo from 'edu-core/components/course-video' import CommonCourseVideo from 'edu-core/components/course-video'
Vue.component('CommonCourseVideo', CommonCourseVideo); Vue.component('CommonCourseVideo', CommonCourseVideo);
import CommonRefundDestination from 'edu-core/components/order/refund-destination.vue'
Vue.component('common-refund-destination', CommonRefundDestination);
import commonCoupon from '@/pages/component/commonComponents/coupon/index.vue' import commonCoupon from '@/pages/component/commonComponents/coupon/index.vue'
Vue.component('common-coupon', commonCoupon); Vue.component('common-coupon', commonCoupon);
import commonGoodsList from '@/pages/component/commonComponents/goodsList.vue' import commonGoodsList from '@/pages/component/commonComponents/goodsList.vue'

View File

@@ -13,8 +13,8 @@
"src" : "图片路径" "src" : "图片路径"
} }
], ],
"versionName" : "1.0.61", "versionName" : "1.0.62",
"versionCode" : 1061, "versionCode" : 1062,
"app-plus" : { "app-plus" : {
"nvueCompiler" : "weex", "nvueCompiler" : "weex",
"compatible" : { "compatible" : {

11
package-lock.json generated
View File

@@ -9,7 +9,7 @@
"version": "3.4.5", "version": "3.4.5",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.12", "edu-core": "file:../edu-core",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"tcplayer.js": "^5.1.0" "tcplayer.js": "^5.1.0"
}, },
@@ -19,7 +19,6 @@
}, },
"../edu-core": { "../edu-core": {
"version": "1.0.8", "version": "1.0.8",
"extraneous": true,
"license": "ISC", "license": "ISC",
"devDependencies": {} "devDependencies": {}
}, },
@@ -74,9 +73,8 @@
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
}, },
"node_modules/edu-core": { "node_modules/edu-core": {
"version": "1.0.12", "resolved": "../edu-core",
"resolved": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#ea1dca213de69ac5a01a44a352ab33024edd2577", "link": true
"license": "ISC"
}, },
"node_modules/es5-shim": { "node_modules/es5-shim": {
"version": "4.6.7", "version": "4.6.7",
@@ -399,8 +397,7 @@
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
}, },
"edu-core": { "edu-core": {
"version": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#ea1dca213de69ac5a01a44a352ab33024edd2577", "version": "file:../edu-core"
"from": "edu-core@git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.12"
}, },
"es5-shim": { "es5-shim": {
"version": "4.6.7", "version": "4.6.7",

View File

@@ -21,7 +21,7 @@
}, },
"homepage": "https://github.com/dcloudio/hello-uniapp#readme", "homepage": "https://github.com/dcloudio/hello-uniapp#readme",
"dependencies": { "dependencies": {
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.12", "edu-core": "file:../edu-core",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"tcplayer.js": "^5.1.0" "tcplayer.js": "^5.1.0"
}, },

View File

@@ -193,6 +193,18 @@
} }
} }
}, },
{
"path": "pages/bookShop/refundDestination",
"style": {
"navigationBarTitleText": "钱款去向",
"enablePullDownRefresh": false,
"app-plus": {
"bounce": "none",
"titleNView": false,
"popGesture": "none"
}
}
},
{ {
"path": "pages/goods/order/index", "path": "pages/goods/order/index",
"style": { "style": {

View File

@@ -88,6 +88,16 @@
v-if="orderContet.orderStatus == 5" v-if="orderContet.orderStatus == 5"
>已超时</text >已超时</text
> >
<text
class="orderState orderState6"
v-if="orderContet.orderStatus == 6"
>已退款</text
>
<text
class="orderState orderState7"
v-if="orderContet.orderStatus == 7"
>退款中</text
>
</view> </view>
<view <view
class="orderContent" class="orderContent"
@@ -1105,14 +1115,15 @@ export default {
text: "继续付款", text: "继续付款",
}); });
} }
if (this.orderContet.orderStatus == 0) { // sociology注释取消订单按钮
this.customButton.push({ // if (this.orderContet.orderStatus == 0) {
width: "160rpx", // this.customButton.push({
text: "取消订单", // width: "160rpx",
color: "#333", // text: "取消订单",
backgroundColor: "#f0f0f0", // color: "#333",
}); // backgroundColor: "#f0f0f0",
} // });
// }
// var seconds = res.result.timestamp + 30 * 60 + 2 // 过期时间 // var seconds = res.result.timestamp + 30 * 60 + 2 // 过期时间
// var nowSeconds = Math.floor(new Date().getTime() / 1000); // var nowSeconds = Math.floor(new Date().getTime() / 1000);
@@ -1131,6 +1142,10 @@ export default {
this.titleStat = "待收到"; this.titleStat = "待收到";
} else if (this.orderContet.orderStatus == 3) { } else if (this.orderContet.orderStatus == 3) {
this.titleStat = "已完成"; this.titleStat = "已完成";
} else if (this.orderContet.orderStatus == 6) {
this.titleStat = "已退款";
} else if (this.orderContet.orderStatus == 7) {
this.titleStat = "退款中";
} }
if ( if (
this.orderContet.orderStatus >= 2 && this.orderContet.orderStatus >= 2 &&
@@ -1173,10 +1188,28 @@ export default {
}, },
}); });
}, },
checkPayTimeout(payItem) {
const createTime = payItem && payItem.createTime;
if (!createTime) return true;
const createdAt = new Date(String(createTime).replace(/-/g, "/")).getTime();
if (!createdAt) return true;
const expired = Date.now() - createdAt > 10 * 60 * 1000;
if (expired) {
uni.showModal({
title: "提示",
content: "订单已超时,不能继续支付,请重新下单",
confirmText: "知道了",
showCancel: false,
});
return false;
}
return true;
},
// 支付 // 支付
goPay(payItem) { goPay(payItem) {
console.log(payItem, "订单数据"); console.log(payItem, "订单数据");
if (!this.checkPayTimeout(payItem)) return;
if (payItem.paymentMethod == 2) { if (payItem.paymentMethod == 2) {
console.log("阿里支付"); console.log("阿里支付");
setPay( setPay(
@@ -1320,6 +1353,12 @@ uni-view {
.orderState5 { .orderState5 {
background-color: #787878; background-color: #787878;
} }
.orderState6 {
background-color: #f56c6c;
}
.orderState7 {
background-color: #f56c6c;
}
.guoqi { .guoqi {
font-size: 28rpx; font-size: 28rpx;
align-items: center; align-items: center;

View File

@@ -24,7 +24,7 @@
<view class="cateList flexbox"> <view class="cateList flexbox">
<common-sticky <common-sticky
itemStyle="width:20%; height: 68rpx;font-size:24rpx;" itemStyle="height: 68rpx;font-size:24rpx; padding: 0 20rpx;"
:list="ordersTabs" :list="ordersTabs"
label="name" label="name"
:currentCateIndex="currentCateIndex" :currentCateIndex="currentCateIndex"
@@ -120,6 +120,16 @@
v-show="slotProps.row.orderStatus == 5" v-show="slotProps.row.orderStatus == 5"
>已过期</text >已过期</text
> >
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 6"
>已退款</text
>
<text
class="orderstatus"
v-show="slotProps.row.orderStatus == 7"
>退款中</text
>
</view> </view>
</view> </view>
<view <view
@@ -380,11 +390,12 @@
class="operation_box boxShadow" class="operation_box boxShadow"
v-if="slotProps.row.isShowMore == true" v-if="slotProps.row.isShowMore == true"
> >
<view <!-- sociology注释取消订单入口 -->
<!-- <view
v-if="slotProps.row.orderStatus == 0" v-if="slotProps.row.orderStatus == 0"
@click.native.stop="canceOrder(slotProps.row)" @click.native.stop="canceOrder(slotProps.row)"
>取消订单</view >取消订单</view
> > -->
</view> </view>
<view class="btns flexbox" style="margin-top: 10rpx"> <view class="btns flexbox" style="margin-top: 10rpx">
<view <view
@@ -421,8 +432,18 @@
> >
<view <view
class="orderstatusbtn" class="orderstatusbtn"
v-if="slotProps.row.orderStatus == 3" v-if="
>申请售后</view slotProps.row.orderStatus == 6 ||
slotProps.row.orderStatus == 7
"
@click.stop="goRefundDestination(slotProps.row)"
>钱款去向</view
>
<view
class="orderstatusbtn"
v-if="slotProps.row.refundableStatus === true"
@click.stop="confirmApplyRefund(slotProps.row)"
>申请退款</view
> >
<!-- <view <!-- <view
class="orderstatusbtn" class="orderstatusbtn"
@@ -615,12 +636,14 @@ export default {
come: "1", come: "1",
isShowTab: false, isShowTab: false,
isLoadingHide: false, isLoadingHide: false,
moreList: [ // sociology注释取消订单菜单
{ // moreList: [
name: "取消订单", // {
key: "false", // name: "取消订单",
}, // key: "false",
], // },
// ],
moreList: [],
currentCateIndex: 0, currentCateIndex: 0,
pagination: { pagination: {
// 请求参数 // 请求参数
@@ -671,6 +694,16 @@ export default {
value: 3, value: 3,
badge: {}, badge: {},
}, },
{
name: "已退款",
value: 6,
badge: {},
},
{
name: "退款中",
value: 7,
badge: {},
},
], ],
selectOrderInfo: {}, selectOrderInfo: {},
ordersListTab: 1, ordersListTab: 1,
@@ -790,7 +823,8 @@ export default {
console.log("index at line 609:", index); console.log("index at line 609:", index);
if (index.key == "false") { if (index.key == "false") {
this.isShowMore = false; this.isShowMore = false;
this.canceOrder(this.selectOrderInfo); // sociology注释取消订单触发
// this.canceOrder(this.selectOrderInfo);
} }
}, },
openMore(row, index) { openMore(row, index) {
@@ -856,6 +890,51 @@ export default {
val.orderSn, val.orderSn,
}); });
}, },
goRefundDestination(row) {
uni.navigateTo({
url: `/pages/bookShop/refundDestination?orderId=${row.orderId}`,
});
},
confirmApplyRefund(row) {
uni.showModal({
title: "申请退款",
content: "请确认是否提交退款申请?",
confirmText: "确认提交",
cancelText: "取消",
success: (res) => {
if (res.confirm) {
this.submitOrderRefund(row);
}
},
});
},
submitOrderRefund(orderRow) {
this.$http
.request({
url: "book/buyOrder/refundOrder",
method: "POST",
data: {
orderId: orderRow.orderId,
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code === 0) {
this.$commonJS.showToast("申请退款成功");
this.newestpage = 1;
this.pagination.page = 1;
this.newList = [];
this.getBookList(this.ordersListTab, false);
return;
}
this.$commonJS.showToast(res.errMsg || "申请退款失败");
})
.catch(() => {
this.$commonJS.showToast("申请退款失败");
});
},
getBookList(flag, refreshflag) { getBookList(flag, refreshflag) {
this.isLoadingHide = false; this.isLoadingHide = false;
var that = this; var that = this;
@@ -882,6 +961,8 @@ export default {
// * 3已完成 // * 3已完成
// * 4: 交易失败 // * 4: 交易失败
// * 5: 已过期 // * 5: 已过期
// * 6: 已退款
// * 7: 退款中
console.log("res at line 757:", res); console.log("res at line 757:", res);
that.map = res.data; that.map = res.data;
@@ -909,7 +990,7 @@ export default {
var params = { var params = {
userId: this.userInfo.id, userId: this.userInfo.id,
come: this.come, come: this.come,
orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-待付款 1-待发出 2-待收到 3-已完成 4-交易失败 5-已过期 orderStatus: flag == -1 ? "" : flag, //传null为全部订单状态 0-待付款 1-待发出 2-待收到 3-已完成 4-交易失败 5-已过期 6-已退款 7-退款中
...this.pagination, ...this.pagination,
// limit: 10, // limit: 10,
// page: this.newestpage, // page: this.newestpage,
@@ -949,9 +1030,27 @@ export default {
this.axiosStatus = 1; this.axiosStatus = 1;
}, },
checkPayTimeout(payItem) {
const createTime = payItem && payItem.createTime;
if (!createTime) return true;
const createdAt = new Date(String(createTime).replace(/-/g, "/")).getTime();
if (!createdAt) return true;
const expired = Date.now() - createdAt > 10 * 60 * 1000;
if (expired) {
uni.showModal({
title: "提示",
content: "订单已超时,不能继续支付,请重新下单",
confirmText: "知道了",
showCancel: false,
});
return false;
}
return true;
},
// 支付 // 支付
goPay(payItem) { goPay(payItem) {
console.log(payItem, "订单数据"); console.log(payItem, "订单数据");
if (!this.checkPayTimeout(payItem)) return;
if (payItem.paymentMethod == 2) { if (payItem.paymentMethod == 2) {
console.log("阿里支付"); console.log("阿里支付");
setPay( setPay(
@@ -1629,9 +1728,9 @@ export default {
z-index: 970; z-index: 970;
} }
/deep/.u-tabs__wrapper__nav__item { // /deep/.u-tabs__wrapper__nav__item {
padding: 0 !important; // padding: 0 !important;
} // }
.commonDetailPage { .commonDetailPage {
background-color: #f5f5f5; background-color: #f5f5f5;

View File

@@ -0,0 +1,27 @@
<template>
<view class="page-wrap">
<public-module></public-module>
<common-refund-destination :order-id="orderId" :http="$http" />
</view>
</template>
<script>
export default {
data() {
return {
orderId: "",
};
},
onLoad(options) {
if (options && options.orderId != null) {
this.orderId = options.orderId;
}
},
};
</script>
<style scoped>
.page-wrap {
min-height: 100vh;
}
</style>

View File

@@ -445,4 +445,8 @@ export default {
font-weight: 700; font-weight: 700;
} }
} }
.title_list {
margin-bottom: 20rpx;
}
</style> </style>

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- <scroll-view class="scroll-view_H cateList" scroll-x="true" scroll-left="0"> --> <!-- <scroll-view class="scroll-view_H cateList" scroll-x="true" scroll-left="0"> -->
<view class="" style="background-color: #fff; width: 100%"> <view class="" style="background-color: #fff; width: 100%; padding: 0 20rpx;">
<u-tabs <u-tabs
lineWidth="30" lineWidth="30"
lineColor="#3AB3AE" lineColor="#3AB3AE"

View File

@@ -376,4 +376,8 @@ button::after {
// border-bottom: 0.5px solid #dadbde; // border-bottom: 0.5px solid #dadbde;
} }
} }
}
uni-text {
white-space: normal;
} }