zhaoyun 2 周之前
父節點
當前提交
dd5eb6aa5b

+ 7 - 0
mer_uniapp/api/discover.js

@@ -104,6 +104,13 @@ export function noteDetailApi(noteId){
 export function secondHandDetailApi(noteId){
   return request.get(`secondHand/detail/${noteId}`,{},{ noAuth : true});
 }
+/**
+ * 二手交易用户内容详情
+ * 
+*/
+export function secondHandOrderApi(){
+  return request.get(`secondHand/order/num`,{},{ noAuth : true});
+}
 
 /**
  * 逛逛内容发现推荐列表

+ 14 - 6
mer_uniapp/api/secondHand.js

@@ -189,18 +189,18 @@ export function refundSecondHandRevokeApi(refundOrderNo) {
 }
 
 /**
- * 同意退款
+ * 同意收货
  *
  */
-export function refundSecondHandOkApi(refundOrderNo) {
-	return request.post(`refund/secondhand/ok/${refundOrderNo}`)
+export function refundReceiving(refundOrderNo) {
+	return request.post(`refund/secondhand/receiving/${refundOrderNo}`)
 }
 
 /**
- * 拒绝退
+ * 拒绝退收货
  *
  */
-export function returningSecondHandRejectApi(data) {
+export function refundReceivingReject(data) {
 	return request.post(`refund/secondhand/reject`,data)
 }
 
@@ -208,7 +208,7 @@ export function returningSecondHandRejectApi(data) {
  * 审核
  *
  */
-export function returningSecondHandAuditApi(data) {
+export function refundOrderAudit(data) {
 	return request.post(`refund/secondhand/audit`,data)
 }
 
@@ -226,4 +226,12 @@ export function secondHandRefundList(data) {
  */
 export function secondHandRefundInfoApi(refundOrderNo) {
 	return request.get(`refund/secondhand/detail/${refundOrderNo}`)
+}
+// 地址------------------------------------------
+/**
+ *地址列表
+ * 
+*/
+export function sellerAddressList() {
+  return request.get(`secondHand/seller/address/list`);
 }

+ 1 - 0
mer_uniapp/config/app.js

@@ -9,6 +9,7 @@
 // +----------------------------------------------------------------------
 //移动端商城API 网络接口修改此配置,小程序域名要求https 例如:https://api.front.merchant.java.crmeb.net
 let domain = 'https://hncsyy.com.cn'
+//let domain = 'http://127.0.0.1:20810'
 
 module.exports = {
 	// 请求域名 格式: https://您的域名

+ 5 - 5
mer_uniapp/manifest.json

@@ -1,11 +1,11 @@
 {
-    "name" : "crmeb",
-    "appid" : "__UNI__BD9C169",
-    "description" : "crmeb商城",
+    "name" : "易点到校园服务平台",
+    "appid" : "__UNI__8E11F08",
+    "description" : "易点到校园服务平台",
     "versionName" : "1.8.1",
     "versionCode" : 2,
     "transformPx" : false,
-	"sassImplementationName": "node-sass",
+    "sassImplementationName" : "node-sass",
     /* 5+App特有相关 */
     "app-plus" : {
         "titleNView" : true,
@@ -207,7 +207,7 @@
         },
         "permission" : {
             "scope.userLocation" : {
-                "desc" : "你的位置信息将用于和门店的距离长度"
+                "desc" : "获取你的具体位置,为你推荐附近门店"
             }
         },
         "optimization" : {

+ 13 - 0
mer_uniapp/pages.json

@@ -910,6 +910,19 @@
 				{
 					"path": "returns_and_refunds/index",
 					"style": {
+						"navigationBarTitleText": "售后详情",
+						"app-plus": {
+							// #ifdef APP-PLUS
+							"titleNView": {
+								"type": "default"
+							}
+							// #endif
+						}
+					}
+				},
+				{
+					"path": "second_refunds_details/index",
+					"style": {
 						"navigationBarTitleText": "退货退款",
 						"app-plus": {
 							// #ifdef APP-PLUS

+ 510 - 0
mer_uniapp/pages/goods/components/PriceChange/index.vue

@@ -0,0 +1,510 @@
+<template>
+	<!-- 退款页、一键改价页、订单备注页、立即退款立即退货页 -->
+	<view>
+		<view class="priceChange" :class="[change === true ? 'on' : '']">
+			<view class="priceChange-box">
+				<view class="priceTitle">
+					{{
+					status == 7?'退款单备注':status == 8?'退款原因': status == 0?"一键改价": status == 1?'订单备注': isRefund==8?'确认收货':'退款审核'
+        }}
+					<view class="btn acea-row row-center row-middle" @click="close">
+						<span class="iconfont icon-guanbi"></span>
+					</view>
+				</view>
+				<!-- 一键改价 -->
+				<view class="listChange" v-if="status == 0">
+					<view class="item acea-row row-between-wrapper" v-if="orderInfo.refundStatus === 0">
+						<view>商品原价</view>
+						<view class="money">
+							¥{{ orderInfo.totalPrice }}
+						</view>
+					</view>
+					<view class="item acea-row row-between-wrapper" v-if="orderInfo.refundStatus === 0">
+						<view>商品邮费</view>
+						<view class="money">
+							¥{{ orderInfo.totalPostage }}
+						</view>
+					</view>
+					<view class="item acea-row row-between-wrapper" v-if="orderInfo.refundStatus === 0">
+						<view>修改价格</view>
+						<view class="money">
+							<input type="text" v-model="price" :cursor-spacing="40" always-embed
+								:class="focus === true ? 'on' : ''" @focus="priceChange" />
+						</view>
+						<text class="iconfont icon-ic_edit"></text>
+					</view>
+				</view>
+				<!-- 立即退款 -->
+				<!-- <view class="listChange" v-if="status == 2">
+					<view v-if="isRefund" class="item acea-row row-between-wrapper">
+						<view>实际支付(¥)</view>
+						<view class="money">
+							{{ orderInfo.pay_price }}<span class="iconfont icon-suozi"></span>
+						</view>
+					</view>
+					<view v-if="isRefund" class="item acea-row row-between-wrapper">
+						<view>退款金额(¥)</view>
+						<view class="money">
+							<input type="text" v-model="refund_price" :class="focus === true ? 'on' : ''" @focus="priceChange" />
+						</view>
+					</view>
+					<view class="title" v-if="!isRefund">同意退货退款</view>
+				</view> -->
+				<!-- 退款审核 -->
+				<view class="listChange" v-if="status == 2">
+					<view class="item acea-row row-between-wrapper">
+						<view>审核状态</view>
+						<view class="money acea-row row-right">
+							<view class="radio-item acea-row row-middle" :class="{ on: isAgree }"
+								@click="agreeChange(true)">
+								<text class="iconfont"
+									:class="isAgree?'icon-a-ic_CompleteSelect':'icon-weixuanzhong'"></text>同意退{{isRefund?'款':'货'}}
+							</view>
+							<view v-if="orderInfo.refund_type != 4 && orderInfo.refund_type != 5"
+								class="radio-item acea-row row-middle" :class="{ on: !isAgree }"
+								@click="agreeChange(false)">
+								<text class="iconfont"
+									:class="isAgree?'icon-weixuanzhong':'icon-a-ic_CompleteSelect'"></text>拒绝退款
+							</view>
+						</view>
+					</view>
+					<view class="item acea-row row-between-wrapper agree-box" v-if="isAgree && !isRefund">
+						<view class="agree-title">同意退款后,用户会根据下方地址将商品退回</view>
+						<view class="address-list">
+							<radio-group @change="radioChange">
+								<view class="address-list-item acea-row row-between-wrapper"
+									v-for="(item,index) in addressList">
+									<view class="item-left">
+										<view class="name-phone">
+											<text class="name">{{item.receiverName}}</text>
+											<text class="phone">{{item.receiverPhone}}</text>
+											<text class="normal" v-if="item.isDefault">默认</text>
+										</view>
+										<view class="address line1">
+											{{item.detail}}
+										</view>
+									</view>
+									<view class="item-right">
+										<!-- <text class="iconfont" :class="true?'icon-weixuanzhong':'icon-xuanzhong'"></text> -->
+										<label class="radio">
+											<radio :value="`${item.id}`" />
+										</label>
+									</view>
+								</view>
+							</radio-group>
+						</view>
+					</view>
+					<view class="item acea-row row-between" v-if="!isAgree">
+						<view>拒绝原因</view>
+						<view class="money acea-row row-right">
+							<textarea class="reason" placeholder="请输入" v-model="refuse_reason" fixed
+								:cursor-spacing="100"></textarea>
+						</view>
+					</view>
+				</view>
+				<view class="listChange" v-if="status == 1||status == 7">
+					<textarea placeholder="请填写备注信息..." @input="inputChange(orderInfo.merchantRemark)" v-model="orderInfo.merchantRemark" fixed :cursor-spacing="100"></textarea>
+				</view>
+				<!-- <view class="listChange" v-if="status == 8">
+					<textarea placeholder="请填写退款原因..." v-model="refuse_reason"></textarea>
+				</view> -->
+				<view class="modify-box acea-row">
+					<view class="cancel btn-box" @click="close">取消</view>
+					<view class="modify btn-box" @click="refuse" v-if="status == 8">确定</view>
+					<view class="modify btn-box" @click="onConfirm" v-if="status == 2 && !isRefund">确定</view>
+					<view class="modify btn-box" @click="save" v-if="status == 1 || status == 0||status == 7">确定</view>
+					<view class="modify btn-box" @click="onConfirm" v-if="status == 2 && isRefund">确定</view>
+				</view>
+				<slot name="bottom"></slot>
+			</view>
+			<view class="safe-area-inset-bottom"></view>
+		</view>
+		<view class="mask" @touchmove.prevent v-show="change === true"></view>
+	</view>
+</template>
+<script>
+	import { string } from '../../../../plugin/clipboard/clipboard';
+import {
+		sellerAddressList,
+	} from '@/api/secondHand.js'
+	export default {
+		name: "PriceChange",
+		components: {},
+		props: {
+			change: {
+				type: Boolean,
+				default: false
+			},
+			orderInfo: {
+				type: Object,
+				default: () => {}
+			},
+			status: {
+				type: String,
+				default: ""
+			},
+			isRefund: {
+				type: Number || String,
+				default: 0
+			},
+			apiModalType:{
+				type:string||Number
+			}
+		},
+		data: function() {
+			return {
+				focus: false,
+				price: 0,
+				refund_price: 0,
+				remark: "",
+				refuse_reason: '',
+				isAgree: true,
+				addressList: [],
+				addressId: ''
+			};
+		},
+		watch: {
+			orderInfo: function(nVal) {
+				this.price = this.orderInfo.pay_price;
+				this.refund_price = this.orderInfo.pay_price;
+				this.remark = this.orderInfo.merchantRemark;
+			},
+			change(val) {
+				if (val) {
+					this.isAgree = true
+					this.refuse_reason = ''
+				}
+			},
+		},
+		created() {
+			this.getAddressList()
+		},
+		methods: {
+			inputChange(mark){
+				this.remark=mark
+			},
+			radioChange: function(evt) {
+				this.addressId = evt.detail.value
+			},
+			getAddressList() {
+				sellerAddressList().then(res => {
+					this.addressList = res.data
+				})
+			},
+			priceChange: function() {
+				this.focus = true;
+			},
+			close: function() {
+				this.price = this.orderInfo.pay_price;
+				this.$emit("closechange", false);
+			},
+			save: function() {
+				let that = this;
+				that.$emit("savePrice", {
+					price: that.price,
+					type: 1,
+					remark: that.remark,
+					merAddressId: that.addressId
+				});
+			},
+			refuse: function() {
+				let that = this;
+				that.$emit("savePrice", {
+					price: that.price,
+					type: 2,
+					remark: that.remark,
+					refuse_reason: that.refuse_reason
+				});
+			},
+			agreeChange(value) {
+				this.addressId = ''
+				this.isAgree = value;
+				if (this.isAgree) {
+					this.refuse_reason = '';
+				}
+			},
+			onConfirm() {
+				if (this.status == 1) {
+					this.save();
+				}
+				if (this.status == 2) {
+					if (this.isRefund) {
+						if (this.isAgree) {
+							this.save();
+						} else {
+							this.refuse();
+						}
+					} else {
+						if (this.isAgree) {
+							this.save();
+						} else {
+							this.refuse();
+						}
+					}
+				}
+			},
+		}
+	};
+</script>
+<style lang="scss" scoped>
+	.safe-area-inset-bottom {
+		height: 0;
+		height: constant(safe-area-inset-bottom);
+		height: env(safe-area-inset-bottom);
+	}
+
+	.mask {
+		z-index: 99;
+	}
+
+	.priceChange .reGoods {
+		padding: 0 25upx;
+		margin-top: 50upx;
+	}
+
+	.priceChange .reGoods .bnt {
+		width: 250upx;
+		height: 90upx;
+		background-color: #2291f8;
+		font-size: 32upx;
+		color: #fff;
+		text-align: center;
+		line-height: 90upx;
+		border-radius: 45upx;
+	}
+
+	.priceChange .reGoods .bnt.grey {
+		background-color: #eee;
+		color: #312b2b;
+	}
+
+	.priceChange {
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		z-index: 99999;
+		width: 100%;
+		border-radius: 40rpx 40rpx 0 0;
+		background: #FFFFFF;
+		transform: translateY(100%);
+		transition: transform 0.3s;
+	}
+
+	.priceChange.on {
+		transform: translateY(0);
+	}
+
+	.priceChange-box {}
+
+	.priceChange.goodsOn {
+		height: 380upx;
+	}
+
+	.priceChange .priceTitle {
+		position: relative;
+		height: 108rpx;
+		text-align: center;
+		font-weight: 500;
+		font-size: 32rpx;
+		line-height: 108rpx;
+		color: #333333;
+	}
+
+	.priceChange .priceTitle .btn {
+		position: absolute;
+		top: 50%;
+		right: 32rpx;
+		width: 36rpx;
+		height: 36rpx;
+		border-radius: 50%;
+		margin-top: -18rpx;
+		background: #EEEEEE;
+		text-align: center;
+		line-height: 36rpx;
+	}
+
+	.priceChange .priceTitle .iconfont {
+		vertical-align: text-bottom;
+		font-weight: normal;
+		font-size: 24rpx;
+	}
+
+	.priceChange .listChange {
+		padding: 32rpx;
+		min-height: 260rpx;
+	}
+
+	.priceChange .listChange .item {
+		margin-bottom: 30rpx;
+		font-size: 28rpx;
+		line-height: 40rpx;
+		color: #333333;
+
+		&:last-child {
+			margin-bottom: 0;
+		}
+	}
+
+	.priceChange .listChange .title {
+		font-size: 32rpx;
+		text-align: center;
+		margin-top: 52rpx;
+	}
+
+	.priceChange .listChange .item .money {
+		flex: 1;
+		text-align: right;
+		font-family: Regular;
+		font-size: 36rpx;
+	}
+
+	.priceChange .listChange .item .iconfont {
+		margin-left: 8rpx;
+		font-size: 32rpx;
+	}
+
+	.priceChange .listChange .item .money input {
+		color: #FF7E00;
+	}
+
+	.priceChange .listChange .item .money input.on {
+		// color: #666;
+	}
+
+	.priceChange .modify-box {
+		padding: 20rpx;
+	}
+
+	.priceChange .btn-box {
+		flex: 1;
+		height: 72rpx;
+		border: 2rpx solid #4C88FF;
+		border-radius: 36rpx;
+		margin-right: 16rpx;
+		text-align: center;
+		font-weight: 500;
+		font-size: 26rpx;
+		line-height: 68rpx;
+		color: #4C88FF;
+
+		&:last-child {
+			margin-right: 0;
+		}
+	}
+
+	.priceChange .modify {
+		border-color: #2A7EFB;
+		background: #2A7EFB;
+		color: #FFFFFF;
+	}
+
+	.priceChange .modify1 {
+		font-size: 32upx;
+		color: #312b2b;
+		width: 490upx;
+		height: 90upx;
+		text-align: center;
+		line-height: 90upx;
+		border-radius: 45upx;
+		background-color: #eee;
+		margin: 30upx auto 0 auto;
+	}
+
+	.priceChange .listChange textarea {
+		box-sizing: border-box;
+		border: 2rpx solid #CCCCCC;
+		width: 100%;
+		height: 224rpx;
+		padding: 20rpx;
+		border-radius: 16rpx;
+		font-size: 28rpx;
+		line-height: 40rpx;
+		color: #333;
+	}
+
+	.radio-item {
+		font-size: 28rpx;
+		color: #999999;
+
+		+.radio-item {
+			margin-left: 48rpx;
+		}
+
+		.iconfont {
+			margin-right: 12rpx;
+			font-size: 32rpx;
+		}
+
+		&.on {
+			color: #333333;
+
+			.iconfont {
+				color: #2A7EFB;
+			}
+		}
+	}
+
+	.reason {
+		width: 462rpx !important;
+		height: 80rpx !important;
+		padding: 0 !important;
+		border: 0 !important;
+	}
+
+	.agree-box {
+		.agree-title {
+			width: 710rpx;
+			background: rgba(42, 126, 251, 0.1);
+			border-radius: 10rpx;
+			padding: 20rpx;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 26rpx;
+			color: #2A7EFB;
+		}
+
+		.address-list {
+			width: 100%;
+			padding: 20rpx 10rpx;
+
+			.address-list-item {
+				justify-content: space-between;
+				margin-bottom: 20rpx;
+				.name-phone {
+					text {
+						margin-right: 20rpx;
+					}
+
+					.name {
+						font-weight: 500;
+						font-size: 30rpx;
+						color: #333333;
+					}
+
+					.phone {
+						font-weight: 400;
+						font-size: 30rpx;
+						color: #333333;
+					}
+
+					.normal {
+						background: rgba(42, 126, 251, 0.1);
+						border-radius: 8rpx;
+						font-size: 22rpx;
+						color: #2A7EFB;
+					}
+				}
+
+				.address {
+					width: 500rpx;
+					font-size: 24rpx;
+					color: #999999;
+				}
+			}
+		}
+	}
+	.icon-guanbi{
+		font-size: 18rpx !important;
+		color: #333333;
+	}
+</style>

+ 4 - 0
mer_uniapp/pages/goods/order_details/index.vue

@@ -371,6 +371,10 @@
 	} from "../../../enums/productEnums";
 	import systemFromInfo from '@/components/systemFromInfo';
 	import PointsPrice from '@/components/PointsPrice.vue';
+	import {
+		MerchantBelongListApi,
+		merchantActive
+	} from '@/api/work.js';
 	/**
 	 * 积分商品推荐样式
 	 */

+ 1 - 1
mer_uniapp/pages/goods/order_list/index.vue

@@ -58,7 +58,7 @@
 						</view>
 						<view v-if="item.refundStatus == 3" class='font_color'>已退款</view>
 						<template v-else>
-							<view v-if="item.groupBuyRecordStatus==99||item.status==9||item.groupBuyRecordStatus==10"
+							<view v-if="item.groupBuyRecordStatus==99||item.status==9||item.groupBuyRecordStatus==10 || orderType =='secondHand'" 
 								class='font_color'>{{item.status | orderStatusFilter}}</view>
 							<view v-else class='font_color'>{{item.groupBuyRecordStatus===0?'拼团中':'拼团失败'}}</view>
 						</template>

+ 47 - 35
mer_uniapp/pages/goods/refund_details/index.vue

@@ -176,9 +176,9 @@
 				<view class='wrapper borRadius14 return_info_pad btn-box acea-row' style="justify-content: flex-end;">
 					<view></view>
 
-					<view v-if="orderTypeId == 10 && refundInfo.refundStatus === 0" class="btn btn-999 acea-row row-center line-heightOne mr-20" @click="handleRevokeAudit(refundInfo.refundOrderNo, false)">审核不通过</view>
+					<view v-if="orderTypeId == 10" class="btn btn-999 acea-row row-center line-heightOne mr-20" @click="handleRevokeReject(refundInfo.refundOrderNo)">拒绝退款</view>
 					<view v-if="refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4 || refundInfo.refundStatus === 5"
-					 :class="orderTypeId == 10 ? 'bg-tk-color' : 'btn-999'" class="btn" @click="orderTypeId == 10 ? handleRevokeAudit(refundInfo.refundOrderNo, pictrue) : handleRevokeRefund(refundInfo.refundOrderNo)">{{orderTypeId == 10 ? '审核通过' : '撤销售后'}}</view>
+					 :class="orderTypeId == 10 ? 'bg-tk-color' : 'btn-999'" class="btn" @click="handleRevokeRefund(refundInfo.refundOrderNo)">{{orderTypeId == 10 ? '确认退款' : '撤销售后'}}</view>
 					<view v-if="refundInfo.refundStatus === 4 && refundInfo.afterSalesType === 2" style="color: #fff;" class="btn bg-color"
 					 @click="handleReturningRefund(refundInfo)">退回商品</view>
 				</view>
@@ -187,10 +187,10 @@
 		
 		<uni-popup ref="rejectDialog" type="dialog">
 			<view class="tui-modal-custom">
-				<view class="fs-32 fw-500 lh-44rpx text-center">审核不通过原因</view>
+				<view class="fs-32 fw-500 lh-44rpx text-center">拒绝退款原因</view>
 				<view class="mt-24 bg--w111-f5f5f5 rd-16rpx p-24">
 					<textarea class="w-full fs-26 h-342" ref="myTextarea" v-model="rejectText" :always-embed="true" :adjust-position="true"
-					 cursor-spacing="85rpx" placeholder="请输入审核不通过原因" :maxlength="100" name="desc" />
+					 cursor-spacing="85rpx" placeholder="请输入拒绝退款原因内容" :maxlength="100" name="desc" />
 					</view>
 				<view class="flex-between-center mt-40">
 					<view class="w-244 h-72 rd-36rpx flex-center fs-26 font-color close-btn" @tap="handleInputClose">取消
@@ -219,8 +219,7 @@
 	import {
 		refundSecondHandOkApi,
 		returningSecondHandRejectApi,
-		secondHandRefundInfoApi,
-		returningSecondHandAuditApi
+		secondHandRefundInfoApi
 	} from '@/api/secondHand.js';
 	import {
 		onRevokeRefund
@@ -307,11 +306,11 @@
 
 		},
 		methods: {
-			//审核保存
+			//拒绝退款保存
 			handleInputConfirm() {
 				let that = this;
 					if (!this.rejectText) return this.$util.Tips({
-						title: '请输入审核不通过原因!'
+						title: '请输入拒绝退款原因内容!'
 					});
 					uni.showLoading({
 						title: '正在处理中'
@@ -321,7 +320,7 @@
 						auditType: 'refuse',
 						reason: this.rejectText
 					}
-					returningSecondHandAuditApi(params).then(res => {
+					returningSecondHandRejectApi(params).then(res => {
 						uni.hideLoading();
 						return that.$util.Tips({
 							title: '处理成功',
@@ -337,33 +336,14 @@
 				// 关闭窗口后,恢复默认内容
 				this.$refs.rejectDialog.close()
 			},
-			//审核取消
+			//拒绝退款取消
 			handleInputClose() {
 				this.$refs.rejectDialog.close()
 			},
-			// 审核
-			handleRevokeAudit(orderNo, type) {
+			// 拒绝退款
+			handleRevokeReject(orderNo) {
 				this.rejectOrder = orderNo;
-				if (type) {
-					uni.showLoading({
-						title: '正在处理中'
-					});
-					returningSecondHandAuditApi({refundOrderNo: this.rejectOrder, auditType: 'success'}).then(res => {
-						uni.hideLoading();
-						return that.$util.Tips({
-							title: '处理成功',
-							icon: 'success'
-						}, function() {
-							that.orderRefundInfo();
-						});
-					}).catch(err => {
-						return that.$util.Tips({
-							title: err
-						});
-					});
-				} else {
-					this.$refs.rejectDialog.open();
-				}
+				this.$refs.rejectDialog.open();
 			},
 			//店铺地址
 			getMerAddress() {
@@ -378,9 +358,41 @@
 			//撤销售后
 			handleRevokeRefund(refundOrderNo) {
 					let that = this;
-					onRevokeRefund(refundOrderNo, this.orderType).then(() => {
-						this.orderRefundInfo()
-					});
+					if (this.orderTypeId == 10) {
+						uni.showModal({
+							content: '是否确认退款该订单',
+							cancelText: "取消",
+							confirmText: "确定",
+							showCancel: true,
+							confirmColor: '#f55850',
+							success: (res) => {
+								if (res.confirm) {
+									uni.showLoading({
+										title: '正在处理中'
+									});
+									refundSecondHandOkApi(refundOrderNo).then(res => {
+										uni.hideLoading();
+										return that.$util.Tips({
+											title: '退款成功',
+											icon: 'success'
+										}, function() {
+											that.orderRefundInfo();
+										});
+									}).catch(err => {
+										return that.$util.Tips({
+											title: err
+										});
+									});
+								} else {
+									
+								}
+							},
+						})
+					} else {
+						onRevokeRefund(refundOrderNo, this.orderType).then(() => {
+							this.orderRefundInfo()
+						});
+					}
 			},
 			//退回商品
 			handleReturningRefund(item) {

+ 1221 - 0
mer_uniapp/pages/goods/second_refunds_details/index.vue

@@ -0,0 +1,1221 @@
+<template>
+	<view :data-theme="theme">
+		<view class='order-details'>
+			<!-- 给header上与data上加on为退款订单-->
+			<view class='header bg_color on'>
+				<view class='picTxt acea-row row-middle'>
+					<view class='data on'>
+						<view class="acea-row row-middle mb20">
+							<view class='state line-heightOne'>
+								<view class='state line-heightOne'>
+										<span v-if="refundInfo.refundStatus==0">用户提交退款申请,请您及时处理哦~</span>
+										<span v-if="refundInfo.refundStatus==4">您已同意此退款申请,等待用户退货中~</span>
+										<span v-if="refundInfo.refundStatus==5">用户已经填写退货信息,请您耐心等待~</span>
+										<span v-if="refundInfo.refundStatus==2">退款金额原支付路径返回中!</span>
+										<span v-if="refundInfo.refundStatus==3">退款金额已返还用户账户!</span>
+										<span v-if="refundInfo.refundStatus==6">用户已经撤销此退款申请!</span>
+										<span v-if="refundInfo.refundStatus==1">{{refundInfo.refundReason}}</span>
+								</view>
+							</view>
+							<view v-show="refundInfo.refundStatus===3"><text class="font-color refundPrice">{{refundInfo.refundPrice}}元</text></view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 商品详情 -->
+			<view class="borderPad margin-100">
+				<view class="borRadius14 wrapper">
+					<orderGoods :isShowBtn="false" :refundInfo="refundInfo" :cartInfo="[refundInfo]" :jump="true" :orderData="refundInfo">
+					</orderGoods>
+					<view class="borderPad">
+						<view class="return_info">
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款件数:</view>
+								<view class='conter'>{{refundInfo.applyRefundNum}}</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款金额:</view>
+								<view class='conter'>¥{{refundInfo.refundPrice}}</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款方式:</view>
+								<view class='conter'>原路返回</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款原因:</view>
+								<view v-if="refundInfo.promoterType==='user'" class='conter'>{{refundInfo.refundReasonWap}}</view>
+								<view v-else class='conter'>商家直接退款</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 商家店铺地址 -->
+			<view v-if="refundInfo.returnGoodsType ===2 && merAddress && refundInfo.refundStatus>0" class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>商家退回地址:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap="copy(merAddress.name+','+merAddress.phone+','+merAddress.addressDetail)">复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="merAddress.name+','+merAddress.phone+','+merAddress.addressDetail">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class="text-2828 f-s-26 mb20">
+						<text class="text-2828">{{merAddress.name}}</text>
+						<text>{{merAddress.phone}}</text>
+					</view>
+					<view class="text-666 f-s-26 addressDetail">{{merAddress.addressDetail}}</view>
+				</view>
+			</view>
+			<!-- 商家退回地址 -->
+			<view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 &&refundInfo.receiver&&refundInfo.receiverPhone&&refundInfo.receiverAddressDetail"
+			 class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>商家退回地址:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap="copy(refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail)">复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class="text-2828 f-s-26 mb20">
+						<text class="text-2828">{{refundInfo.receiver}}</text>
+						<text>{{refundInfo.receiverPhone}}</text>
+					</view>
+					<view class="text-666 f-s-26 addressDetail">{{refundInfo.receiverAddressDetail}}</view>
+				</view>
+			</view>
+			<!-- 退款订单详情 "-->
+			<view class="borderPad">
+				<view class='wrapper borRadius14 return_info_pad'>
+					<view class='item acea-row row-between '>
+						<view>订单单号:</view>
+						<view class='conter acea-row row-middle row-right'><text class="text-overflow">{{refundInfo.orderNo}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.orderNo)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.orderNo">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>售后单号:</view>
+						<view class='conter acea-row row-middle row-right'><text class="text-overflow">{{refundInfo.refundOrderNo}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.refundOrderNo)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.refundOrderNo">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>申请时间:</view>
+						<view class='conter'>{{(refundInfo.createTime || 0)}}</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>售后类型:</view>
+						<view class='conter'>{{refundInfo.afterSalesType===1?'仅退款':'退货退款'}}</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>退回方式:</view>
+						<view class='conter'>
+							{{refundInfo.returnGoodsType===1?'快递退回':refundInfo.returnGoodsType===2?'到店退货':'不退货'}}</view>
+					</view>
+					<view class='item acea-row row-between' v-if="refundInfo.refundReasonWapExplain">
+						<view>备注说明:</view>
+						<view class='conter-refund text-left'>{{refundInfo.refundReasonWapExplain}}</view>
+					</view>
+					<view class='item acea-row row-between' v-if="refundInfo.refundReasonWapImg">
+						<view>退款凭证:</view>
+						<view class='conter-refund text-left'>
+							<image class="wapImg" :src="item" v-for="item in refundInfo.refundReasonWapImg.split(',')" :key='item.id'></image>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<!-- 用户到店退回信息 -->
+			<view v-if="refundInfo.returnGoodsType ===2 && refundInfo.refundStatus>0 && refundInfo.telephone" class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between'>
+						<view>联系电话:</view>
+						<view class='conter'>{{refundInfo.telephone}}</view>
+					</view>
+				</view>
+			</view>
+			<!-- 用户发货信息 -->
+			<view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 && refundInfo.expressName && refundInfo.trackingNumber"
+			 class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>物流公司:</view>
+						<view class='conter'>{{refundInfo.expressName}}</view>
+					</view>
+					<view class='item acea-row row-between mb30'>
+						<view>物流单号:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<text class="text-overflow">{{refundInfo.trackingNumber}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.trackingNumber)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.trackingNumber">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>联系电话:</view>
+						<view class='conter'>{{refundInfo.telephone}}</view>
+					</view>
+				</view>
+			</view>
+			<!-- 操作按钮 "-->
+			<view  class="borderPad">
+				<view class='wrapper borRadius14 return_info_pad btn-box acea-row' style="justify-content: flex-end;">
+					<view></view>
+					 <view class="footer acea-row row-right row-middle">
+						<view class="btn btn-999 acea-row row-center line-heightOne" @click="modify(refundInfo, 7)">退款单备注</view>
+						<view class="btn on" v-if="(refundInfo.returnGoodsType==0||refundInfo.returnGoodsType==2)&&refundInfo.refundStatus==0"  @click="modify(refundInfo,'2',1,0)">
+							退款审核
+						</view>
+						<view class="btn on" v-if="refundInfo.returnGoodsType==1&&refundInfo.refundStatus==0"  @click="modify(refundInfo,'2',0,1)">
+							退款审核
+						</view>
+						<view class="btn on" v-if="refundInfo.refundStatus==4" @click="modify(refundInfo, 2, 1,2)">确认收货</view>
+					 </view>
+					 <PriceChange :change="change" :orderInfo="orderInfo" :isRefund="isRefund"
+					 	v-on:statusChange="statusChange($event)" v-on:closechange="changeclose($event)" v-on:savePrice="savePrice"
+					 	:status="status"></PriceChange>
+				</view>
+			</view>
+		</view>
+		
+		
+	</view>
+</template>
+<script>
+	// +----------------------------------------------------------------------
+	// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+	// +----------------------------------------------------------------------
+	// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+	// +----------------------------------------------------------------------
+	// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+	// +----------------------------------------------------------------------
+	// | Author: CRMEB Team <admin@crmeb.com>
+	// +----------------------------------------------------------------------
+	import PriceChange from "../components/PriceChange/index.vue";
+	import {
+		orderRefundInfoApi
+	} from '@/api/order.js';
+	import {
+		refundReceiving,
+		refundReceivingReject,
+		secondHandRefundInfoApi,
+		refundOrderAudit
+	} from '@/api/secondHand.js';
+	import {
+		onRevokeRefund
+	} from '@/libs/order';
+	import orderGoods from "../components/orderGoods";
+	import {
+		getMerAddressApi
+	} from '@/api/merchant.js'
+	import ClipboardJS from "@/plugin/clipboard/clipboard.js";
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	// #ifdef MP
+	import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
+	// #endif
+	import {
+		setThemeColor
+	} from '@/utils/setTheme.js'
+	const app = getApp();
+	export default {
+		components: {
+			PriceChange,
+			orderGoods
+		},
+		data() {
+			return {
+				rejectText: '',
+				orderType: '',
+				orderTypeId: null,
+				rejectOrder: '',
+				merAddress: null, //店铺地址
+				refundOrderNo: '',
+				refundInfo: {}, //退款单详情
+				theme: app.globalData.theme,
+				orderInfo:{},
+				openErp: false,
+				change:false,
+				status: "",
+				apiModalType:'',
+				isRefund: 0, //1是仅退款;0是同意退货退款
+				chatConfig: {
+					consumer_hotline: '',
+					telephone_service_switch: 'false'
+				}, //客服配置
+			};
+		},
+		computed: mapGetters(['isLogin', 'chatUrl', 'userInfo']),
+		onLoad: function(options) {
+			options.type == undefined || options.type == null ? this.type = 'normal' : this.type = options.type;
+			if (!options.refundOrderNo) return this.$util.Tips({
+				title: '缺少参数'
+			}, {
+				tab: 3,
+				url: 1
+			});
+			this.$set(this, 'refundOrderNo', options.refundOrderNo);
+			this.$set(this, 'orderType', options.orderType);
+			this.$set(this, 'orderTypeId', options.orderTypeId);
+			this.bgColor = setThemeColor();
+			this.$set(this, 'chatConfig', this.$Cache.getItem('chatConfig'));
+		},
+		onShow() {
+			if (this.isLogin) {
+				this.orderRefundInfo();
+			} else {
+				toLogin();
+			}
+		},
+		onHide: function() {
+			this.isClose = true;
+		},
+		// 滚动监听
+		onPageScroll(e) {
+			// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
+			uni.$emit('scroll');
+		},
+		onReady: function() {
+			// #ifdef H5
+			this.$nextTick(function() {
+				const clipboard = new ClipboardJS(".copy-data");
+				clipboard.on("success", () => {
+					this.$util.Tips({
+						title: '复制成功'
+					});
+				});
+			});
+			// #endif
+
+		},
+		methods: {
+			//0-仅退款 1-退货退款 2-确认收货
+			modify: function(item, status, type,apiType) {
+				this.apiModalType=apiType
+				if (this.openErp && status != 1) return
+				this.change = true;
+				this.status = status.toString();
+				this.orderInfo = item;
+				if (status == 2) {
+					this.isRefund = type
+				}
+			},
+			changeclose: function(msg) {
+				this.change = msg;
+			},
+			async savePrice(opt) {
+				let that = this,
+					data = {};
+				data.refundOrderNo = that.orderInfo.refundOrderNo;
+				if (that.apiModalType == 0) {
+					if(opt.type==2&&!opt.refuse_reason){
+						return this.$util.Tips({
+							title: '请输入拒绝理由'
+						})
+					}
+					let requestObj = {
+						refundOrderNo:that.orderInfo.refundOrderNo,
+						auditType:opt.type==1?'success':'refuse',
+						reason:opt.refuse_reason?opt.refuse_reason:''
+					}
+					refundOrderAudit(requestObj).then(res=>{
+						if(res.code==200){
+							this.$util.Tips({
+								title: '审核成功'
+							})
+							this.init();
+							this.change = false
+						}else{
+							this.$util.Tips({
+								title:res.message
+							})
+						}
+					})
+				} else if (that.apiModalType == 1) {
+					//退货退款审核
+					if(opt.type==2&&!opt.refuse_reason){
+						return this.$util.Tips({
+							title: '请输入拒绝理由'
+						})
+					}
+					if(opt.type==1&&!opt.merAddressId){
+						return this.$util.Tips({
+							title: '请选择退货地址'
+						})
+					}
+					//退货退款拒绝
+					if(opt.type==2){
+						let requestObj = {
+							refundOrderNo:that.orderInfo.refundOrderNo,
+							auditType:opt.type==1?'success':'refuse',
+							reason:opt.refuse_reason?opt.refuse_reason:''
+						}
+						refundOrderAudit(requestObj).then(res=>{
+							if(res.code==200){
+								this.$util.Tips({
+									title: '操作成功'
+								})
+								this.init();
+								this.change = false
+							}else{
+								this.$util.Tips({
+									title:res.message
+								})
+							}
+						})
+					}
+					//退货退款同意
+					if(opt.type==1){
+						let requestObj = {
+							refundOrderNo:that.orderInfo.refundOrderNo,
+							auditType:opt.type==1?'success':'refuse',
+							merAddressId:opt.merAddressId
+						}
+						refundOrderAudit(requestObj).then(res=>{
+							if(res.code==200){
+								this.$util.Tips({
+									title: '操作成功'
+								})
+								this.init();
+								this.change = false
+							}else{
+								this.$util.Tips({
+									title:res.message
+								})
+							}
+						})
+					}
+				}else if(that.apiModalType == 2){
+					//确认收货
+					if(opt.type==2&&!opt.refuse_reason){
+						return this.$util.Tips({
+							title: '请输入拒绝理由'
+						})
+					}
+					if(opt.type==1){
+						// 同意
+						refundReceiving(that.orderInfo.refundOrderNo).then(res=>{
+							if(res.code==200){
+								this.$util.Tips({
+									title: '操作成功'
+								})
+								this.init();
+								this.change = false
+							}else{
+								this.$util.Tips({
+									title:res.message
+								})
+							}
+						})
+					}
+					if(opt.type==2){
+						let requestObj = {
+							refundOrderNo:that.orderInfo.refundOrderNo,
+							reason:opt.refuse_reason?opt.refuse_reason:''
+						}
+						// 拒绝
+						refundReceivingReject(requestObj).then(res=>{
+							if(res.code==200){
+								this.$util.Tips({
+									title: '操作成功'
+								})
+								this.init();
+								this.change = false
+							}else{
+								this.$util.Tips({
+									title:res.message
+								})
+							}
+						})
+					}
+				}else{
+					data.remark=opt.remark
+					if (!data.remark) {
+						return this.$util.Tips({
+							title: '请输入备注'
+						})
+					}
+					refundOrderMark(data).then(res=>{
+						if(res.code==200){
+							this.$util.Tips({
+								title: '备注成功'
+							})
+							this.getIndex();
+							this.change = false
+						}else{
+							this.$util.Tips({
+								title:res.message
+							})
+						}
+					})
+				}
+			},
+			//审核保存
+			handleInputConfirm() {
+				let that = this;
+					if (!this.rejectText) return this.$util.Tips({
+						title: '请输入审核不通过原因!'
+					});
+					uni.showLoading({
+						title: '正在处理中'
+					});
+					let params = {
+						refundOrderNo: this.rejectOrder,
+						auditType: 'refuse',
+						reason: this.rejectText
+					}
+					returningSecondHandAuditApi(params).then(res => {
+						uni.hideLoading();
+						return that.$util.Tips({
+							title: '处理成功',
+							icon: 'success'
+						}, function() {
+							that.orderRefundInfo();
+						});
+					}).catch(err => {
+						return that.$util.Tips({
+							title: err
+						});
+					});
+				// 关闭窗口后,恢复默认内容
+				this.$refs.rejectDialog.close()
+			},
+			//审核取消
+			handleInputClose() {
+				this.$refs.rejectDialog.close()
+			},
+			// 审核
+			handleRevokeAudit(orderNo, type) {
+				this.rejectOrder = orderNo;
+				if (type) {
+					uni.showLoading({
+						title: '正在处理中'
+					});
+					returningSecondHandAuditApi({refundOrderNo: this.rejectOrder, auditType: 'success'}).then(res => {
+						uni.hideLoading();
+						return that.$util.Tips({
+							title: '处理成功',
+							icon: 'success'
+						}, function() {
+							that.orderRefundInfo();
+						});
+					}).catch(err => {
+						return that.$util.Tips({
+							title: err
+						});
+					});
+				} else {
+					this.$refs.rejectDialog.open();
+				}
+			},
+			//店铺地址
+			getMerAddress() {
+				getMerAddressApi(this.refundInfo.merId).then(res => {
+					this.$set(this, 'merAddress', res.data);
+				}).catch(err => {
+					return this.$util.Tips({
+						title: err
+					});
+				})
+			},
+			//撤销售后
+			handleRevokeRefund(refundOrderNo) {
+					let that = this;
+					onRevokeRefund(refundOrderNo, this.orderType).then(() => {
+						this.orderRefundInfo()
+					});
+			},
+			//退回商品
+			handleReturningRefund(item) {
+				this.$Cache.set('productInfo', item)
+				let url =
+					`/pages/goods/returns_and_refunds/index?refundOrderNo=${item.refundOrderNo}&returnGoodsType=${item.returnGoodsType}`;
+				this.orderType == 'secondHand' ? url = url + '&orderType=secondHand' : ''
+				uni.navigateTo({
+					url: url
+				})
+			},
+			kefuClick() {
+				if (this.chatConfig.telephone_service_switch === 'true') {
+					uni.makePhoneCall({
+						phoneNumber: this.chatConfig.consumer_hotline //仅为示例
+					});
+				} else {
+					// #ifdef APP-PLUS
+					uni.navigateTo({
+						url: '/pages/users/web_page/index?webUel=' + this.chatUrl + '&title=客服'
+					})
+					// #endif
+					// #ifndef APP-PLUS
+					location.href = this.chatUrl;
+					// #endif
+				}
+			},
+			/**
+			 * 拨打电话
+			 */
+			makePhone: function(e) {
+				uni.makePhoneCall({
+					phoneNumber: e
+				})
+			},
+			/**
+			 * 获取退款订单详细信息
+			 *
+			 */
+			orderRefundInfo() {
+				let that = this;
+				uni.showLoading({
+					title: "正在加载中"
+				});
+				let api = that.orderType == 'secondHand' ? secondHandRefundInfoApi : orderRefundInfoApi;
+				api(that.refundOrderNo).then(res => {
+					uni.hideLoading();
+					let data = res.data;
+					that.$set(that, 'refundInfo', data);
+					//returnGoodsType 退货类型:0-不退货 1-快递退回,2-到店退货
+					if (that.refundInfo.returnGoodsType === 2) that.getMerAddress();
+				}).catch(err => {
+					that.$util.Tips({
+						title: err
+					}, {
+						tab: 4,
+						url: '/pages/user/index'
+					});
+				});
+			},
+			/**
+			 *
+			 * 剪切订单号
+			 */
+			// #ifndef H5
+			copy: function(orderNo) {
+				let that = this;
+				uni.setClipboardData({
+					data: orderNo
+				});
+			},
+			// #endif
+			/**
+			 * 打电话
+			 */
+			goTel: function() {
+				uni.makePhoneCall({
+					phoneNumber: this.refundInfo.deliveryId
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.addressDetail {
+		line-height: 36rpx;
+	}
+
+	.btn-box {
+		display: flex;
+		padding-top: 20rpx;
+		line-height: 60rpx;
+
+		.btn-line {
+			@include main_color(theme);
+			@include coupons_border_color(theme);
+		}
+
+		.btn-bg {
+			color: #fff;
+		}
+
+		.btn-999 {
+			border: 1px solid #999999;
+			color: #666666;
+		}
+
+		.btn {
+			width: 176rpx;
+			height: 60rpx;
+			line-height: 56rpx;
+			margin-left: 18rpx;
+			text-align: center;
+			border-radius: 30rpx;
+			font-size: 28rpx;
+		}
+		.on {
+			border-color: #2A7EFB !important;
+			background: #2A7EFB !important;
+			color: #fff !important;
+		}
+	}
+
+	.margin-100 {
+		margin: -86rpx auto 0 auto;
+	}
+
+	.return_info_pad {
+		padding: 30rpx 24rpx;
+	}
+
+	.return_info {
+		border-top: 1px solid #EEEEEE;
+		background-color: #fff;
+		padding: 32rpx 0;
+	}
+
+	.refundPrice {
+		font-size: 35rpx;
+		font-weight: bold;
+	}
+
+	.qs-btn {
+		width: auto;
+		height: 60rpx;
+		text-align: center;
+		line-height: 60rpx;
+		border-radius: 50rpx;
+		color: #fff;
+		font-size: 27rpx;
+		padding: 0 3%;
+		color: #aaa;
+		border: 1px solid #ddd;
+		margin-right: 20rpx;
+	}
+
+	.text-overflow {
+		width: 392rpx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.shuoming {
+		width: 32rpx;
+		height: 32rpx;
+	}
+
+	.mp-header {
+		width: 100%;
+		@include main_bg_color(theme);
+	}
+
+	.goodCall {
+		@include main_color(theme);
+		text-align: center;
+		width: 100%;
+		height: 86rpx;
+		padding: 0 30rpx;
+		border-bottom: 1rpx solid #eee;
+		font-size: 30rpx;
+		line-height: 86rpx;
+		background: #fff;
+
+		.icon-kefu {
+			font-size: 36rpx;
+			margin-right: 15rpx;
+		}
+
+		/* #ifdef MP */
+		button {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			height: 86rpx;
+			font-size: 30rpx;
+			@include main_color(theme);
+		}
+
+		/* #endif */
+	}
+
+	.justify-between {
+		justify-content: space-between;
+	}
+
+	.align-center {
+		align-items: center;
+	}
+
+	.order-details {
+		padding-bottom: 30rpx;
+
+		.header {
+			height: 250rpx;
+			padding: 0 24rpx;
+		}
+	}
+
+	.bg_color {
+		@include main_bg_color(theme);
+	}
+
+	.order-details .header.on {
+		// /background-color: #666 !important;
+	}
+
+	.order-details .header .pictrue {
+		width: 110rpx;
+		height: 110rpx;
+	}
+
+	.order-details .header .pictrue image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.order-details .header .data {
+		color: rgba(255, 255, 255, 0.8);
+		font-size: 24rpx;
+		margin-left: 27rpx;
+	}
+
+	.order-details .header .data.on {
+		margin-left: 0;
+		padding-top: 34rpx;
+	}
+
+	.order-details .header .data .state {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #fff;
+	}
+
+	.order-details .header .data .time {
+		margin-left: 20rpx;
+	}
+
+	.picTxt {
+		padding-left: 10rpx;
+	}
+
+	.order-details .nav {
+		background-color: #fff;
+		font-size: 26rpx;
+		color: #282828;
+		padding: 27rpx 0;
+		width: 100%;
+		border-radius: 14rpx;
+		margin: -100rpx auto 0 auto;
+	}
+
+	.order-details .nav .navCon {
+		padding: 0 40rpx;
+	}
+
+	.order-details .nav .on {
+		@include main_color(theme);
+	}
+
+	.font_color {
+		@include main_color(theme);
+	}
+
+	.order-details .nav .progress {
+		padding: 0 65rpx;
+		margin-top: 10rpx;
+	}
+
+	.order-details .nav .progress .line {
+		width: 100rpx;
+		height: 2rpx;
+		background-color: #939390;
+	}
+
+	.order-details .nav .progress .iconfont {
+		font-size: 25rpx;
+		color: #939390;
+		margin-top: -2rpx;
+	}
+
+	.order-details .address {
+		font-size: 26rpx;
+		color: #868686;
+		background-color: #fff;
+		padding: 30rpx 0;
+
+		.phone {
+			margin-left: 20rpx;
+		}
+	}
+
+	.order-details .address .name {
+		font-size: 30rpx;
+		color: #333;
+		margin-bottom: 15rpx;
+	}
+
+	.order-details .line {
+		width: 100%;
+		height: 3rpx;
+	}
+
+	.order-details .line image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .wrapper {
+		background-color: #fff;
+		margin-top: 12rpx;
+	}
+
+	.order-details .wrapper .item {
+		font-size: 28rpx;
+		color: #282828;
+	}
+
+	.order-details .wrapper .item~.item {
+		margin-top: 34rpx;
+	}
+
+	.order-details .wrapper .item .conter {
+		color: #282828;
+		text-align: right;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.mark_show {
+		color: #868686;
+		width: 470rpx;
+		text-align: right;
+	}
+
+	.order-details .wrapper .item .conter .copy {
+		font-size: 20rpx;
+		color: #666;
+		border-radius: 20rpx;
+		border: 1rpx solid #999;
+		padding: 8rpx 18rpx;
+		margin-left: 10rpx;
+	}
+
+	.order-details .wrapper .actualPay {
+		border-top: 1rpx solid #eee;
+		margin-top: 30rpx;
+		padding-top: 30rpx;
+	}
+
+	.order-details .wrapper .actualPay .money {
+		font-weight: bold;
+		font-size: 30rpx;
+		@include price_color(theme);
+	}
+
+	.order-details .footer {
+		width: 100%;
+		height: 100rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		background-color: #fff;
+		padding-right: 30rpx;
+		box-sizing: border-box;
+	}
+
+	.order-details .footer .bnt {
+		width: 158rpx;
+		height: 54rpx;
+		text-align: center;
+		line-height: 54rpx;
+		border-radius: 50rpx;
+		color: #fff;
+		font-size: 27rpx;
+	}
+
+	.order-details .footer .bnt.cancel {
+		color: #aaa;
+		border: 1rpx solid #ddd;
+	}
+
+	.order-details .footer .bnt~.bnt {
+		margin-left: 18rpx;
+	}
+
+	.order-details .writeOff {
+		background-color: #fff;
+		margin-top: 15rpx;
+		padding-bottom: 50rpx;
+	}
+
+	.order-details .writeOff .title {
+		font-size: 30rpx;
+		color: #282828;
+		height: 87rpx;
+		border-bottom: 1px solid #f0f0f0;
+		padding: 0 24rpx;
+		line-height: 87rpx;
+	}
+
+	.order-details .writeOff .grayBg {
+		background-color: #f2f5f7;
+		width: 590rpx;
+		height: 384rpx;
+		border-radius: 20rpx 20rpx 0 0;
+		margin: 50rpx auto 0 auto;
+		padding-top: 55rpx;
+	}
+
+	.order-details .writeOff .grayBg .pictrue {
+		width: 290rpx;
+		height: 290rpx;
+		margin: 0 auto;
+	}
+
+	.order-details .writeOff .grayBg .pictrue image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .writeOff .gear {
+		width: 590rpx;
+		height: 30rpx;
+		margin: 0 auto;
+	}
+
+	.order-details .writeOff .gear image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .writeOff .num {
+		background-color: #f0c34c;
+		width: 590rpx;
+		height: 84rpx;
+		color: #282828;
+		font-size: 48rpx;
+		margin: 0 auto;
+		border-radius: 0 0 20rpx 20rpx;
+		text-align: center;
+		padding-top: 4rpx;
+	}
+
+	.order-details .writeOff .rules {
+		margin: 46rpx 30rpx 0 30rpx;
+		border-top: 1px solid #f0f0f0;
+		padding-top: 10rpx;
+	}
+
+	.order-details .writeOff .rules .item {
+		margin-top: 20rpx;
+	}
+
+	.order-details .writeOff .rules .item .rulesTitle {
+		font-size: 28rpx;
+		color: #282828;
+	}
+
+	.order-details .writeOff .rules .item .rulesTitle .iconfont {
+		font-size: 30rpx;
+		color: #333;
+		margin-right: 8rpx;
+		margin-top: 5rpx;
+	}
+
+	.order-details .writeOff .rules .item .info {
+		font-size: 28rpx;
+		color: #999;
+		margin-top: 7rpx;
+	}
+
+	.order-details .writeOff .rules .item .info .time {
+		margin-left: 20rpx;
+	}
+
+	.order-details .map {
+		font-size: 30rpx;
+		color: #282828;
+		margin-top: 15rpx;
+		background-color: #fff;
+		padding: 0 24rpx;
+
+		.title {
+			line-height: 86rpx;
+			border-bottom: 1px solid #f0f0f0;
+		}
+	}
+
+	.order-details .map .place {
+		font-size: 26rpx;
+		width: 176rpx;
+		height: 50rpx;
+		border-radius: 25rpx;
+		line-height: 50rpx;
+		text-align: center;
+	}
+
+	.order-details .map .place .iconfont {
+		font-size: 27rpx;
+		height: 27rpx;
+		line-height: 27rpx;
+		margin: 2rpx 3rpx 0 0;
+	}
+
+	.order-details .address .name .iconfont {
+		font-size: 34rpx;
+		margin-left: 10rpx;
+	}
+
+	.refund {
+		padding: 0 !important;
+		margin-top: 15rpx;
+		background-color: #fff;
+
+		.title {
+			display: flex;
+			align-items: center;
+			font-size: 30rpx;
+			color: #333;
+			height: 86rpx;
+			border-bottom: 1px solid #f5f5f5;
+			font-weight: 400;
+			padding: 0 24rpx;
+
+			image {
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 10rpx;
+			}
+		}
+
+		.con {
+			font-size: 26rpx;
+			color: #666666;
+			padding: 30rpx 24rpx;
+		}
+	}
+
+	.pictrue {
+		width: 130rpx;
+		height: 130rpx;
+		border-radius: 14rpx;
+		overflow: hidden;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.text {
+		width: 490rpx;
+
+		// position: relative;
+		.name {
+			font-size: 28rpx;
+			color: #282828;
+		}
+
+		.attr {
+			font-size: 16rpx;
+			color: #868686;
+			margin-top: 7rpx
+		}
+	}
+
+	.wrapper-head {
+		background-color: #fff;
+		margin-top: 12rpx;
+		padding: 30rpx 24rpx;
+
+	}
+
+	.wrapper-info {
+		background-color: #fff;
+		margin: -100rpx auto 0 auto;
+		padding: 15px 12px;
+
+		.name {
+			width: 414rpx;
+			color: #333;
+		}
+
+		.num {
+			color: #999;
+		}
+
+		.attr {
+			color: #999;
+			font-size: 20rpx;
+			margin: 7rpx 0 16rpx 0;
+		}
+
+		.price {
+			font-size: 26rpx;
+			color: #E93323;
+		}
+	}
+
+	.borRadius-top {
+		border-radius: 14rpx 14rpx 0px 0px;
+	}
+
+	.borRadius-bottom {
+		border-radius: 0px 0px 14rpx 14rpx;
+	}
+
+	.conter-refund {
+		width: 76%;
+		text-align: right;
+		color: #868686;
+
+		.wapImg {
+			width: 106rpx;
+			height: 106rpx;
+			border-radius: 10rpx;
+			margin-right: 10rpx;
+		}
+	}
+
+	.bg-tk-color {
+		background-color: $bg-color-primary;
+		color: #fff;
+		border: none;
+	}
+	
+	.tui-modal-custom {
+		width: 600rpx;
+		position: relative;
+		box-sizing: border-box;
+		padding: 40rpx;
+		border-radius: 16px;
+		background-color: #fff;
+		z-index: 9999;
+	
+		.h-342 {
+			min-height: 268rpx;
+			max-height: 268rpx;
+			;
+			overflow-y: scroll;
+		}
+	}
+</style>

+ 1047 - 0
mer_uniapp/pages/trade_fair/refundOrderDetail/index.vue

@@ -0,0 +1,1047 @@
+<template>
+	<view :data-theme="theme">
+		<view class='order-details'>
+			<!-- 给header上与data上加on为退款订单-->
+			<view class='header bg_color on'>
+				<view class='picTxt acea-row row-middle'>
+					<view class='data on'>
+						<view class="acea-row row-middle mb20">
+							<view class='state line-heightOne'>{{refundInfo.refundStatus | refundStatusFilter}}</view>
+							<view v-show="refundInfo.refundStatus===3"><text class="font-color refundPrice">{{refundInfo.refundPrice}}元</text></view>
+						</view>
+						<view class="mb30 line2" v-if="refundInfo.refundStatus===1">{{refundInfo.refundReason}}</view>
+						<view v-else class="mb30">{{refundInfo.refundStatus | orderRefundTipsStatusFilter}}</view>
+					</view>
+				</view>
+			</view>
+			<!-- 商品详情 -->
+			<view class="borderPad margin-100">
+				<view class="borRadius14 wrapper">
+					<orderGoods :isShowBtn="false" :refundInfo="refundInfo" :cartInfo="[refundInfo]" :jump="true" :orderData="refundInfo">
+					</orderGoods>
+					<view class="borderPad">
+						<view class="return_info">
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款件数:</view>
+								<view class='conter'>{{refundInfo.applyRefundNum}}</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款金额:</view>
+								<view class='conter'>¥{{refundInfo.refundPrice}}</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款方式:</view>
+								<view class='conter'>原路返回</view>
+							</view>
+							<view class='item acea-row row-between line-heightOne'>
+								<view>退款原因:</view>
+								<view v-if="refundInfo.promoterType==='user'" class='conter'>{{refundInfo.refundReasonWap}}</view>
+								<view v-else class='conter'>商家直接退款</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<!-- 商家店铺地址 -->
+			<view v-if="refundInfo.returnGoodsType ===2 && merAddress && refundInfo.refundStatus>0" class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>商家退回地址:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap="copy(merAddress.name+','+merAddress.phone+','+merAddress.addressDetail)">复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="merAddress.name+','+merAddress.phone+','+merAddress.addressDetail">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class="text-2828 f-s-26 mb20">
+						<text class="text-2828">{{merAddress.name}}</text>
+						<text>{{merAddress.phone}}</text>
+					</view>
+					<view class="text-666 f-s-26 addressDetail">{{merAddress.addressDetail}}</view>
+				</view>
+			</view>
+			<!-- 商家退回地址 -->
+			<view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 &&refundInfo.receiver&&refundInfo.receiverPhone&&refundInfo.receiverAddressDetail"
+			 class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>商家退回地址:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap="copy(refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail)">复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.receiver+','+refundInfo.receiverPhone+','+refundInfo.receiverAddressDetail">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class="text-2828 f-s-26 mb20">
+						<text class="text-2828">{{refundInfo.receiver}}</text>
+						<text>{{refundInfo.receiverPhone}}</text>
+					</view>
+					<view class="text-666 f-s-26 addressDetail">{{refundInfo.receiverAddressDetail}}</view>
+				</view>
+			</view>
+			<!-- 退款订单详情 "-->
+			<view class="borderPad">
+				<view class='wrapper borRadius14 return_info_pad'>
+					<view class='item acea-row row-between '>
+						<view>订单单号:</view>
+						<view class='conter acea-row row-middle row-right'><text class="text-overflow">{{refundInfo.orderNo}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.orderNo)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.orderNo">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>售后单号:</view>
+						<view class='conter acea-row row-middle row-right'><text class="text-overflow">{{refundInfo.refundOrderNo}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.refundOrderNo)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.refundOrderNo">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>申请时间:</view>
+						<view class='conter'>{{(refundInfo.createTime || 0)}}</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>售后类型:</view>
+						<view class='conter'>{{refundInfo.afterSalesType===1?'仅退款':'退货退款'}}</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>退回方式:</view>
+						<view class='conter'>
+							{{refundInfo.returnGoodsType===1?'快递退回':refundInfo.returnGoodsType===2?'到店退货':'不退货'}}</view>
+					</view>
+					<view class='item acea-row row-between' v-if="refundInfo.refundReasonWapExplain">
+						<view>备注说明:</view>
+						<view class='conter-refund text-left'>{{refundInfo.refundReasonWapExplain}}</view>
+					</view>
+					<view class='item acea-row row-between' v-if="refundInfo.refundReasonWapImg">
+						<view>售后凭证:</view>
+						<view class='conter-refund text-left'>
+							<image class="wapImg" :src="item" v-for="item in refundInfo.refundReasonWapImg.split(',')" :key='item.id'></image>
+						</view>
+					</view>
+				</view>
+			</view>
+
+			<!-- 用户到店退回信息 -->
+			<view v-if="refundInfo.returnGoodsType ===2 && refundInfo.refundStatus>0 && refundInfo.telephone" class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between'>
+						<view>联系电话:</view>
+						<view class='conter'>{{refundInfo.telephone}}</view>
+					</view>
+				</view>
+			</view>
+			<!-- 用户发货信息 -->
+			<view v-if="refundInfo.returnGoodsType ===1 && refundInfo.refundStatus>0 && refundInfo.expressName && refundInfo.trackingNumber"
+			 class="borderPad">
+				<view class="borRadius14 wrapper return_info_pad">
+					<view class='item acea-row row-between mb30'>
+						<view>物流公司:</view>
+						<view class='conter'>{{refundInfo.expressName}}</view>
+					</view>
+					<view class='item acea-row row-between mb30'>
+						<view>物流单号:</view>
+						<view class='conter acea-row row-middle row-right'>
+							<text class="text-overflow">{{refundInfo.trackingNumber}}</text>
+							<!-- #ifndef H5 -->
+							<text class='copy line-heightOne' @tap='copy(refundInfo.trackingNumber)'>复制</text>
+							<!-- #endif -->
+							<!-- #ifdef H5 -->
+							<text class='copy copy-data line-heightOne' :data-clipboard-text="refundInfo.trackingNumber">复制</text>
+							<!-- #endif -->
+						</view>
+					</view>
+					<view class='item acea-row row-between'>
+						<view>联系电话:</view>
+						<view class='conter'>{{refundInfo.telephone}}</view>
+					</view>
+				</view>
+			</view>
+			<!-- 操作按钮 "-->
+			<view v-if="refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4 || refundInfo.refundStatus === 5" class="borderPad">
+				<view class='wrapper borRadius14 return_info_pad btn-box acea-row' style="justify-content: flex-end;">
+					<view></view>
+
+					<view v-if="orderTypeId == 10 && refundInfo.refundStatus === 0" class="btn btn-999 acea-row row-center line-heightOne mr-20" @click="handleRevokeAudit(refundInfo.refundOrderNo, false)">审核不通过</view>
+					<view v-if="refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4 || refundInfo.refundStatus === 5"
+					 :class="orderTypeId == 10 ? 'bg-tk-color' : 'btn-999'" class="btn" @click="orderTypeId == 10 ? handleRevokeAudit(refundInfo.refundOrderNo, pictrue) : handleRevokeRefund(refundInfo.refundOrderNo)">{{orderTypeId == 10 ? '审核通过' : '撤销售后'}}</view>
+					<view v-if="refundInfo.refundStatus === 4 && refundInfo.afterSalesType === 2" style="color: #fff;" class="btn bg-color"
+					 @click="handleReturningRefund(refundInfo)">退回商品</view>
+				</view>
+			</view>
+		</view>
+		
+		<uni-popup ref="rejectDialog" type="dialog">
+			<view class="tui-modal-custom">
+				<view class="fs-32 fw-500 lh-44rpx text-center">审核不通过原因</view>
+				<view class="mt-24 bg--w111-f5f5f5 rd-16rpx p-24">
+					<textarea class="w-full fs-26 h-342" ref="myTextarea" v-model="rejectText" :always-embed="true" :adjust-position="true"
+					 cursor-spacing="85rpx" placeholder="请输入审核不通过原因" :maxlength="100" name="desc" />
+					</view>
+				<view class="flex-between-center mt-40">
+					<view class="w-244 h-72 rd-36rpx flex-center fs-26 font-color close-btn" @tap="handleInputClose">取消
+					</view>
+					<view class="w-244 h-72 rd-36rpx flex-center bg-color text--w111-fff fs-26"
+						@tap="handleInputConfirm">保存
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+<script>
+	// +----------------------------------------------------------------------
+	// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
+	// +----------------------------------------------------------------------
+	// | Copyright (c) 2016~2025 https://www.crmeb.com All rights reserved.
+	// +----------------------------------------------------------------------
+	// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
+	// +----------------------------------------------------------------------
+	// | Author: CRMEB Team <admin@crmeb.com>
+	// +----------------------------------------------------------------------
+	import {
+		orderRefundInfoApi
+	} from '@/api/order.js';
+	import {
+		refundSecondHandOkApi,
+		returningSecondHandRejectApi,
+		secondHandRefundInfoApi,
+		returningSecondHandAuditApi
+	} from '@/api/secondHand.js';
+	import {
+		onRevokeRefund
+	} from '@/libs/order';
+	import orderGoods from "../components/orderGoods";
+	import {
+		getMerAddressApi
+	} from '@/api/merchant.js'
+	import ClipboardJS from "@/plugin/clipboard/clipboard.js";
+	import {
+		toLogin
+	} from '@/libs/login.js';
+	import {
+		mapGetters
+	} from "vuex";
+	// #ifdef MP
+	import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
+	// #endif
+	import {
+		setThemeColor
+	} from '@/utils/setTheme.js'
+	const app = getApp();
+	export default {
+		components: {
+			orderGoods
+		},
+		data() {
+			return {
+				rejectText: '',
+				orderType: '',
+				orderTypeId: null,
+				rejectOrder: '',
+				merAddress: null, //店铺地址
+				refundOrderNo: '',
+				refundInfo: {}, //退款单详情
+				theme: app.globalData.theme,
+				chatConfig: {
+					consumer_hotline: '',
+					telephone_service_switch: 'false'
+				}, //客服配置
+			};
+		},
+		computed: mapGetters(['isLogin', 'chatUrl', 'userInfo']),
+		onLoad: function(options) {
+			options.type == undefined || options.type == null ? this.type = 'normal' : this.type = options.type;
+			if (!options.refundOrderNo) return this.$util.Tips({
+				title: '缺少参数'
+			}, {
+				tab: 3,
+				url: 1
+			});
+			this.$set(this, 'refundOrderNo', options.refundOrderNo);
+			this.$set(this, 'orderType', options.orderType);
+			this.$set(this, 'orderTypeId', options.orderTypeId);
+			this.bgColor = setThemeColor();
+			this.$set(this, 'chatConfig', this.$Cache.getItem('chatConfig'));
+		},
+		onShow() {
+			if (this.isLogin) {
+				this.orderRefundInfo();
+			} else {
+				toLogin();
+			}
+		},
+		onHide: function() {
+			this.isClose = true;
+		},
+		// 滚动监听
+		onPageScroll(e) {
+			// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
+			uni.$emit('scroll');
+		},
+		onReady: function() {
+			// #ifdef H5
+			this.$nextTick(function() {
+				const clipboard = new ClipboardJS(".copy-data");
+				clipboard.on("success", () => {
+					this.$util.Tips({
+						title: '复制成功'
+					});
+				});
+			});
+			// #endif
+
+		},
+		methods: {
+			//审核保存
+			handleInputConfirm() {
+				let that = this;
+					if (!this.rejectText) return this.$util.Tips({
+						title: '请输入审核不通过原因!'
+					});
+					uni.showLoading({
+						title: '正在处理中'
+					});
+					let params = {
+						refundOrderNo: this.rejectOrder,
+						auditType: 'refuse',
+						reason: this.rejectText
+					}
+					returningSecondHandAuditApi(params).then(res => {
+						uni.hideLoading();
+						return that.$util.Tips({
+							title: '处理成功',
+							icon: 'success'
+						}, function() {
+							that.orderRefundInfo();
+						});
+					}).catch(err => {
+						return that.$util.Tips({
+							title: err
+						});
+					});
+				// 关闭窗口后,恢复默认内容
+				this.$refs.rejectDialog.close()
+			},
+			//审核取消
+			handleInputClose() {
+				this.$refs.rejectDialog.close()
+			},
+			// 审核
+			handleRevokeAudit(orderNo, type) {
+				this.rejectOrder = orderNo;
+				if (type) {
+					uni.showLoading({
+						title: '正在处理中'
+					});
+					returningSecondHandAuditApi({refundOrderNo: this.rejectOrder, auditType: 'success'}).then(res => {
+						uni.hideLoading();
+						return that.$util.Tips({
+							title: '处理成功',
+							icon: 'success'
+						}, function() {
+							that.orderRefundInfo();
+						});
+					}).catch(err => {
+						return that.$util.Tips({
+							title: err
+						});
+					});
+				} else {
+					this.$refs.rejectDialog.open();
+				}
+			},
+			//店铺地址
+			getMerAddress() {
+				getMerAddressApi(this.refundInfo.merId).then(res => {
+					this.$set(this, 'merAddress', res.data);
+				}).catch(err => {
+					return this.$util.Tips({
+						title: err
+					});
+				})
+			},
+			//撤销售后
+			handleRevokeRefund(refundOrderNo) {
+					let that = this;
+					onRevokeRefund(refundOrderNo, this.orderType).then(() => {
+						this.orderRefundInfo()
+					});
+			},
+			//退回商品
+			handleReturningRefund(item) {
+				this.$Cache.set('productInfo', item)
+				let url =
+					`/pages/goods/returns_and_refunds/index?refundOrderNo=${item.refundOrderNo}&returnGoodsType=${item.returnGoodsType}`;
+				this.orderType == 'secondHand' ? url = url + '&orderType=secondHand' : ''
+				uni.navigateTo({
+					url: url
+				})
+			},
+			kefuClick() {
+				if (this.chatConfig.telephone_service_switch === 'true') {
+					uni.makePhoneCall({
+						phoneNumber: this.chatConfig.consumer_hotline //仅为示例
+					});
+				} else {
+					// #ifdef APP-PLUS
+					uni.navigateTo({
+						url: '/pages/users/web_page/index?webUel=' + this.chatUrl + '&title=客服'
+					})
+					// #endif
+					// #ifndef APP-PLUS
+					location.href = this.chatUrl;
+					// #endif
+				}
+			},
+			/**
+			 * 拨打电话
+			 */
+			makePhone: function(e) {
+				uni.makePhoneCall({
+					phoneNumber: e
+				})
+			},
+			/**
+			 * 获取退款订单详细信息
+			 *
+			 */
+			orderRefundInfo() {
+				let that = this;
+				uni.showLoading({
+					title: "正在加载中"
+				});
+				let api = that.orderType == 'secondHand' ? secondHandRefundInfoApi : orderRefundInfoApi;
+				api(that.refundOrderNo).then(res => {
+					uni.hideLoading();
+					let data = res.data;
+					that.$set(that, 'refundInfo', data);
+					//returnGoodsType 退货类型:0-不退货 1-快递退回,2-到店退货
+					if (that.refundInfo.returnGoodsType === 2) that.getMerAddress();
+				}).catch(err => {
+					that.$util.Tips({
+						title: err
+					}, {
+						tab: 4,
+						url: '/pages/user/index'
+					});
+				});
+			},
+			/**
+			 *
+			 * 剪切订单号
+			 */
+			// #ifndef H5
+			copy: function(orderNo) {
+				let that = this;
+				uni.setClipboardData({
+					data: orderNo
+				});
+			},
+			// #endif
+			/**
+			 * 打电话
+			 */
+			goTel: function() {
+				uni.makePhoneCall({
+					phoneNumber: this.refundInfo.deliveryId
+				})
+			}
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.addressDetail {
+		line-height: 36rpx;
+	}
+
+	.btn-box {
+		display: flex;
+		padding-top: 20rpx;
+		line-height: 60rpx;
+
+		.btn-line {
+			@include main_color(theme);
+			@include coupons_border_color(theme);
+		}
+
+		.btn-bg {
+			color: #fff;
+		}
+
+		.btn-999 {
+			border: 1px solid #999999;
+			color: #666666;
+		}
+
+		.btn {
+			width: 176rpx;
+			height: 60rpx;
+			line-height: 56rpx;
+			margin-left: 18rpx;
+			text-align: center;
+			border-radius: 30rpx;
+			font-size: 28rpx;
+		}
+	}
+
+	.margin-100 {
+		margin: -86rpx auto 0 auto;
+	}
+
+	.return_info_pad {
+		padding: 30rpx 24rpx;
+	}
+
+	.return_info {
+		border-top: 1px solid #EEEEEE;
+		background-color: #fff;
+		padding: 32rpx 0;
+	}
+
+	.refundPrice {
+		font-size: 35rpx;
+		font-weight: bold;
+	}
+
+	.qs-btn {
+		width: auto;
+		height: 60rpx;
+		text-align: center;
+		line-height: 60rpx;
+		border-radius: 50rpx;
+		color: #fff;
+		font-size: 27rpx;
+		padding: 0 3%;
+		color: #aaa;
+		border: 1px solid #ddd;
+		margin-right: 20rpx;
+	}
+
+	.text-overflow {
+		width: 392rpx;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.shuoming {
+		width: 32rpx;
+		height: 32rpx;
+	}
+
+	.mp-header {
+		width: 100%;
+		@include main_bg_color(theme);
+	}
+
+	.goodCall {
+		@include main_color(theme);
+		text-align: center;
+		width: 100%;
+		height: 86rpx;
+		padding: 0 30rpx;
+		border-bottom: 1rpx solid #eee;
+		font-size: 30rpx;
+		line-height: 86rpx;
+		background: #fff;
+
+		.icon-kefu {
+			font-size: 36rpx;
+			margin-right: 15rpx;
+		}
+
+		/* #ifdef MP */
+		button {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			height: 86rpx;
+			font-size: 30rpx;
+			@include main_color(theme);
+		}
+
+		/* #endif */
+	}
+
+	.justify-between {
+		justify-content: space-between;
+	}
+
+	.align-center {
+		align-items: center;
+	}
+
+	.order-details {
+		padding-bottom: 30rpx;
+
+		.header {
+			height: 250rpx;
+			padding: 0 24rpx;
+		}
+	}
+
+	.bg_color {
+		@include main_bg_color(theme);
+	}
+
+	.order-details .header.on {
+		// /background-color: #666 !important;
+	}
+
+	.order-details .header .pictrue {
+		width: 110rpx;
+		height: 110rpx;
+	}
+
+	.order-details .header .pictrue image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.order-details .header .data {
+		color: rgba(255, 255, 255, 0.8);
+		font-size: 24rpx;
+		margin-left: 27rpx;
+	}
+
+	.order-details .header .data.on {
+		margin-left: 0;
+		padding-top: 34rpx;
+	}
+
+	.order-details .header .data .state {
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #fff;
+	}
+
+	.order-details .header .data .time {
+		margin-left: 20rpx;
+	}
+
+	.picTxt {
+		padding-left: 10rpx;
+	}
+
+	.order-details .nav {
+		background-color: #fff;
+		font-size: 26rpx;
+		color: #282828;
+		padding: 27rpx 0;
+		width: 100%;
+		border-radius: 14rpx;
+		margin: -100rpx auto 0 auto;
+	}
+
+	.order-details .nav .navCon {
+		padding: 0 40rpx;
+	}
+
+	.order-details .nav .on {
+		@include main_color(theme);
+	}
+
+	.font_color {
+		@include main_color(theme);
+	}
+
+	.order-details .nav .progress {
+		padding: 0 65rpx;
+		margin-top: 10rpx;
+	}
+
+	.order-details .nav .progress .line {
+		width: 100rpx;
+		height: 2rpx;
+		background-color: #939390;
+	}
+
+	.order-details .nav .progress .iconfont {
+		font-size: 25rpx;
+		color: #939390;
+		margin-top: -2rpx;
+	}
+
+	.order-details .address {
+		font-size: 26rpx;
+		color: #868686;
+		background-color: #fff;
+		padding: 30rpx 0;
+
+		.phone {
+			margin-left: 20rpx;
+		}
+	}
+
+	.order-details .address .name {
+		font-size: 30rpx;
+		color: #333;
+		margin-bottom: 15rpx;
+	}
+
+	.order-details .line {
+		width: 100%;
+		height: 3rpx;
+	}
+
+	.order-details .line image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .wrapper {
+		background-color: #fff;
+		margin-top: 12rpx;
+	}
+
+	.order-details .wrapper .item {
+		font-size: 28rpx;
+		color: #282828;
+	}
+
+	.order-details .wrapper .item~.item {
+		margin-top: 34rpx;
+	}
+
+	.order-details .wrapper .item .conter {
+		color: #282828;
+		text-align: right;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
+	.mark_show {
+		color: #868686;
+		width: 470rpx;
+		text-align: right;
+	}
+
+	.order-details .wrapper .item .conter .copy {
+		font-size: 20rpx;
+		color: #666;
+		border-radius: 20rpx;
+		border: 1rpx solid #999;
+		padding: 8rpx 18rpx;
+		margin-left: 10rpx;
+	}
+
+	.order-details .wrapper .actualPay {
+		border-top: 1rpx solid #eee;
+		margin-top: 30rpx;
+		padding-top: 30rpx;
+	}
+
+	.order-details .wrapper .actualPay .money {
+		font-weight: bold;
+		font-size: 30rpx;
+		@include price_color(theme);
+	}
+
+	.order-details .footer {
+		width: 100%;
+		height: 100rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		background-color: #fff;
+		padding-right: 30rpx;
+		box-sizing: border-box;
+	}
+
+	.order-details .footer .bnt {
+		width: 158rpx;
+		height: 54rpx;
+		text-align: center;
+		line-height: 54rpx;
+		border-radius: 50rpx;
+		color: #fff;
+		font-size: 27rpx;
+	}
+
+	.order-details .footer .bnt.cancel {
+		color: #aaa;
+		border: 1rpx solid #ddd;
+	}
+
+	.order-details .footer .bnt~.bnt {
+		margin-left: 18rpx;
+	}
+
+	.order-details .writeOff {
+		background-color: #fff;
+		margin-top: 15rpx;
+		padding-bottom: 50rpx;
+	}
+
+	.order-details .writeOff .title {
+		font-size: 30rpx;
+		color: #282828;
+		height: 87rpx;
+		border-bottom: 1px solid #f0f0f0;
+		padding: 0 24rpx;
+		line-height: 87rpx;
+	}
+
+	.order-details .writeOff .grayBg {
+		background-color: #f2f5f7;
+		width: 590rpx;
+		height: 384rpx;
+		border-radius: 20rpx 20rpx 0 0;
+		margin: 50rpx auto 0 auto;
+		padding-top: 55rpx;
+	}
+
+	.order-details .writeOff .grayBg .pictrue {
+		width: 290rpx;
+		height: 290rpx;
+		margin: 0 auto;
+	}
+
+	.order-details .writeOff .grayBg .pictrue image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .writeOff .gear {
+		width: 590rpx;
+		height: 30rpx;
+		margin: 0 auto;
+	}
+
+	.order-details .writeOff .gear image {
+		width: 100%;
+		height: 100%;
+		display: block;
+	}
+
+	.order-details .writeOff .num {
+		background-color: #f0c34c;
+		width: 590rpx;
+		height: 84rpx;
+		color: #282828;
+		font-size: 48rpx;
+		margin: 0 auto;
+		border-radius: 0 0 20rpx 20rpx;
+		text-align: center;
+		padding-top: 4rpx;
+	}
+
+	.order-details .writeOff .rules {
+		margin: 46rpx 30rpx 0 30rpx;
+		border-top: 1px solid #f0f0f0;
+		padding-top: 10rpx;
+	}
+
+	.order-details .writeOff .rules .item {
+		margin-top: 20rpx;
+	}
+
+	.order-details .writeOff .rules .item .rulesTitle {
+		font-size: 28rpx;
+		color: #282828;
+	}
+
+	.order-details .writeOff .rules .item .rulesTitle .iconfont {
+		font-size: 30rpx;
+		color: #333;
+		margin-right: 8rpx;
+		margin-top: 5rpx;
+	}
+
+	.order-details .writeOff .rules .item .info {
+		font-size: 28rpx;
+		color: #999;
+		margin-top: 7rpx;
+	}
+
+	.order-details .writeOff .rules .item .info .time {
+		margin-left: 20rpx;
+	}
+
+	.order-details .map {
+		font-size: 30rpx;
+		color: #282828;
+		margin-top: 15rpx;
+		background-color: #fff;
+		padding: 0 24rpx;
+
+		.title {
+			line-height: 86rpx;
+			border-bottom: 1px solid #f0f0f0;
+		}
+	}
+
+	.order-details .map .place {
+		font-size: 26rpx;
+		width: 176rpx;
+		height: 50rpx;
+		border-radius: 25rpx;
+		line-height: 50rpx;
+		text-align: center;
+	}
+
+	.order-details .map .place .iconfont {
+		font-size: 27rpx;
+		height: 27rpx;
+		line-height: 27rpx;
+		margin: 2rpx 3rpx 0 0;
+	}
+
+	.order-details .address .name .iconfont {
+		font-size: 34rpx;
+		margin-left: 10rpx;
+	}
+
+	.refund {
+		padding: 0 !important;
+		margin-top: 15rpx;
+		background-color: #fff;
+
+		.title {
+			display: flex;
+			align-items: center;
+			font-size: 30rpx;
+			color: #333;
+			height: 86rpx;
+			border-bottom: 1px solid #f5f5f5;
+			font-weight: 400;
+			padding: 0 24rpx;
+
+			image {
+				width: 32rpx;
+				height: 32rpx;
+				margin-right: 10rpx;
+			}
+		}
+
+		.con {
+			font-size: 26rpx;
+			color: #666666;
+			padding: 30rpx 24rpx;
+		}
+	}
+
+	.pictrue {
+		width: 130rpx;
+		height: 130rpx;
+		border-radius: 14rpx;
+		overflow: hidden;
+
+		image {
+			width: 100%;
+			height: 100%;
+		}
+	}
+
+	.text {
+		width: 490rpx;
+
+		// position: relative;
+		.name {
+			font-size: 28rpx;
+			color: #282828;
+		}
+
+		.attr {
+			font-size: 16rpx;
+			color: #868686;
+			margin-top: 7rpx
+		}
+	}
+
+	.wrapper-head {
+		background-color: #fff;
+		margin-top: 12rpx;
+		padding: 30rpx 24rpx;
+
+	}
+
+	.wrapper-info {
+		background-color: #fff;
+		margin: -100rpx auto 0 auto;
+		padding: 15px 12px;
+
+		.name {
+			width: 414rpx;
+			color: #333;
+		}
+
+		.num {
+			color: #999;
+		}
+
+		.attr {
+			color: #999;
+			font-size: 20rpx;
+			margin: 7rpx 0 16rpx 0;
+		}
+
+		.price {
+			font-size: 26rpx;
+			color: #E93323;
+		}
+	}
+
+	.borRadius-top {
+		border-radius: 14rpx 14rpx 0px 0px;
+	}
+
+	.borRadius-bottom {
+		border-radius: 0px 0px 14rpx 14rpx;
+	}
+
+	.conter-refund {
+		width: 76%;
+		text-align: right;
+		color: #868686;
+
+		.wapImg {
+			width: 106rpx;
+			height: 106rpx;
+			border-radius: 10rpx;
+			margin-right: 10rpx;
+		}
+	}
+
+	.bg-tk-color {
+		background-color: $bg-color-primary;
+		color: #fff;
+		border: none;
+	}
+	
+	.tui-modal-custom {
+		width: 600rpx;
+		position: relative;
+		box-sizing: border-box;
+		padding: 40rpx;
+		border-radius: 16px;
+		background-color: #fff;
+		z-index: 9999;
+	
+		.h-342 {
+			min-height: 268rpx;
+			max-height: 268rpx;
+			;
+			overflow-y: scroll;
+		}
+	}
+</style>

+ 35 - 6
mer_uniapp/pages/trade_fair/trade_fair_user/index.vue

@@ -64,11 +64,20 @@
 					<view class="item">
 						<text class="mr10">{{userInfo.likeNum}}</text> 获赞
 					</view> -->
-					<navigator v-if="userInfo.id==uid" :url="!id ? '/pages/goods/order_list/index?orderType=secondHand' : ''" class="item" hover-class="none">
+					<!--navigator v-if="userInfo.id==uid" :url="!id ? '/pages/goods/order_list/index?orderType=secondHand' : ''" class="item" hover-class="none">
 						<text class="mr10"></text> 我的订单
+					</navigator-->
+					<navigator v-if="userInfo.id==uid" :url="!id ? '/pages/goods/order_list/index?orderType=secondHand&status=0' : ''" class="item" hover-class="none">
+						<text class="mr10">{{myOrder.awaitPayCount}}</text>待付款
+					</navigator>
+					<navigator v-if="userInfo.id==uid" :url="!id ? '/pages/goods/order_list/index?orderType=secondHand&status=1' : ''" class="item" hover-class="none">
+						<text class="mr10">{{myOrder.awaitShippedCount}}</text>待发货
+					</navigator>
+					<navigator v-if="userInfo.id==uid" :url="!id ? '/pages/goods/order_list/index?orderType=secondHand&status=4' : ''" class="item" hover-class="none">
+						<text class="mr10">{{myOrder.receiptCount}}</text>待收货
 					</navigator>
 					<navigator v-if="userInfo.id==uid" :url="!id ? '/pages/trade_fair/trade_return_list/index' : ''" class="item" hover-class="none">
-						<text class="mr10">{{userInfo.refundNum}}</text> 售后
+						<text class="mr10">{{userInfo.refundNum}}</text> 售后/退款
 					</navigator>
 				</view>
 			</view>
@@ -181,7 +190,7 @@
 				</view>
 			</view>
 		</view>
-
+		
 		<uni-popup ref="inputDialog" type="dialog">
 			<view v-if="isShowSignature" class="tui-modal-custom">
 				<view class="fs-32 fw-500 lh-44rpx text-center">{{fieldStr == 'signature' ? '编辑简介' : '编辑学校'}}</view>
@@ -197,10 +206,11 @@
 					<view class="w-244 h-72 rd-36rpx flex-center bg-color text--w111-fff fs-26"
 						@tap="handleInputConfirm">保存
 					</view>
-				</view>
+				</view> 
 			</view>
 		</uni-popup>
 	</view>
+	
 </template>
 
 <script>
@@ -217,6 +227,7 @@
 	import WaterfallsFlowItem from '@/components/discoverFlowItem/discoverFlowItem.vue'
 	import emptyPage from '@/components/emptyPage.vue';
 	import NavBar from '@/components/navBar.vue';
+	//import PriceChange from '@/components/PriceChange/index.vue'
 	import {
 		userHomeApi,
 		myHomeApi,
@@ -226,7 +237,8 @@
 		secondHandListApi,
 		secondHandFollowListApi,
 		editSignatureApi,
-		editSchoolApi
+		editSchoolApi,
+		secondHandOrderApi
 	} from '@/api/discover.js';
 	import {
 		getSecondHandDetail,
@@ -262,7 +274,8 @@
 			WaterfallsFlowItem,
 			emptyPage,
 			NavBar,
-			easyLoadimage
+			easyLoadimage,
+			//PriceChange
 		},
 		data() {
 			return {
@@ -277,6 +290,7 @@
 				isShowAuth: false, //是否隐藏授权
 				isAuto: false, //没有授权的不会自动授权
 				userInfo: {},
+				myOrder: {},
 				where: {
 					page: 1,
 					limit: 10
@@ -309,6 +323,7 @@
 				this.isShow = true
 				this.getMyHome();
 				this.myNoteList();
+				this.getMyOrder();
 			// }
 		},
 		onReady() {},
@@ -366,6 +381,7 @@
 				// } else {
 					this.getMyHome();
 					this.myNoteList();
+					this.getMyOrder();
 				// }
 			},
 			//获取我的用户信息
@@ -383,6 +399,19 @@
 					})
 				});
 			},
+			//获取我的用户信息
+			getMyOrder() {
+				secondHandOrderApi().then(res => {
+					console.log(res.data)
+					this.myOrder = res.data;
+					this.isMore = false;
+				}).catch(err => {
+					uni.showToast({
+						title: err,
+						icon: 'none'
+					})
+				});
+			},
 			/**
 			 * 去订单详情
 			 */