Jelajahi Sumber

申请退款

shish 3 tahun lalu
induk
melakukan
7a2ae48a6f

+ 1 - 0
hdApp/src/pages.json

@@ -418,6 +418,7 @@
 				{ "path": "purDetails", "style": { "navigationBarTitleText": "采购详情", "enablePullDownRefresh": true } },
 				{ "path": "purDetails", "style": { "navigationBarTitleText": "采购详情", "enablePullDownRefresh": true } },
 				{ "path": "info", "style": { "navigationBarTitleText": "订单详情", "enablePullDownRefresh": true } },
 				{ "path": "info", "style": { "navigationBarTitleText": "订单详情", "enablePullDownRefresh": true } },
 				{ "path": "xj", "style": { "navigationBarTitleText": "请选择颜色"} },
 				{ "path": "xj", "style": { "navigationBarTitleText": "请选择颜色"} },
+				{ "path": "refund", "style": { "navigationBarTitleText": "申请退款"} },
 				{ "path": "refundDetail", "style": { "navigationBarTitleText": "退款详情", "enablePullDownRefresh": true } },
 				{ "path": "refundDetail", "style": { "navigationBarTitleText": "退款详情", "enablePullDownRefresh": true } },
 				{ "path": "level", "style": { "navigationBarTitleText": "会员等级", "enablePullDownRefresh": true } },
 				{ "path": "level", "style": { "navigationBarTitleText": "会员等级", "enablePullDownRefresh": true } },
 				{ "path": "bookProduct", "style": { "navigationBarTitleText": "预订花材", "enablePullDownRefresh": false } },
 				{ "path": "bookProduct", "style": { "navigationBarTitleText": "预订花材", "enablePullDownRefresh": false } },

+ 4 - 0
hdApp/src/pagesPurchase/purDetails.vue

@@ -267,6 +267,7 @@
         <button class="admin-button-com blue big" @click="toPay">去付款</button>
         <button class="admin-button-com blue big" @click="toPay">去付款</button>
       </block>
       </block>
       <block v-else>
       <block v-else>
+        <!-- <button class="admin-button-com default big" @click="refundOrder" style="margin-right:80upx;" v-if="detailInfo.payStatus == 1">申请退款</button> -->
         <button class="admin-button-com blue big" @click="clearOrder" v-if="detailInfo.debt == 1">付款结清</button>
         <button class="admin-button-com blue big" @click="clearOrder" v-if="detailInfo.debt == 1">付款结清</button>
       </block>
       </block>
 
 
@@ -359,6 +360,9 @@ export default {
 				}
 				}
 			});
 			});
 		},
 		},
+    refundOrder(){
+      this.pageTo({url: '/pagesPurchase/refund?id='+this.detailInfo.id,type:2})
+    },
     clearOrder(){
     clearOrder(){
       let arr = []
       let arr = []
       arr.push(this.detailInfo.id)
       arr.push(this.detailInfo.id)

+ 311 - 0
hdApp/src/pagesPurchase/refund.vue

@@ -0,0 +1,311 @@
+<template>
+	<view class="app-content">
+		<view class="flex refund-item">
+			<view class="refund-label">退款方式:</view>
+			<view class="flex list">
+				<view class="flex" @tap="refundType=1" >
+					<view class="flex-center radioBtn" :class="refundType==1?'active':''">
+					</view>退货并退款</view>
+				<view style="margin-left: 30upx" class="flex" @tap="refundType=2">
+					<view class="flex-center radioBtn" :class="refundType==1?'':'active'">
+						</view>仅退款</view>
+			</view>
+		</view>
+		<view class="refund-item-list" v-if="refundType==1">
+			<view class="refund-label"><text></text>选择商品:</view>
+			<view>
+				<view class="list" v-for="(res,i) in product" :key="i">
+				<view class="flex list-title" >
+					<text class="product-name">{{res.name}}</text>
+					<text class="product-num">{{ `${parseFloat(res.xhNum)}` }}{{res.xhUnitName}}</text>
+					<text class="product-price">{{`${parseFloat(res.xhUnitPrice)}`}}元/{{res.xhUnitName}}</text>
+				</view>
+				<view class="flex list-val" style="font-size:26upx;font-weight:bold;">
+					<input type="number" placeholder="退货数" v-model="res.refundCount" placeholder-style="color:#CCCCCC" />
+					<text style="margin-left:10upx;">{{res.xhUnitName}}</text>
+					<text style="color:green;margin-left:20upx;">可退{{Number(res.xhNum)-Number(res.refundNum)}}{{res.xhUnitName}}</text>
+				</view>
+			</view>
+			</view>
+		</view>
+		<view class="flex refund-item">
+			<view class="refund-label">订单金额:</view>
+			<view class="list">
+				¥{{parseFloat(orderInfo.orderPrice)||0}}
+				<text style="margin-left:25upx;font-size:25upx;color:green;" v-if="Number(orderInfo.tkPrice)>0">已退¥{{orderInfo.tkPrice ? parseFloat(orderInfo.tkPrice) : 0}}</text>
+			</view>
+		</view>
+		<view class="flex refund-item">
+			<view class="refund-label">可退金额:</view>
+			<view class="list">¥{{couldRefundPrice}}</view>
+		</view>
+		<view class="flex refund-item">
+			<view class="refund-label">合计退款:</view>
+			<view class="list">¥{{refundPrice}}</view>
+		</view>
+		<view class="flex refund-item">
+			<view class="refund-label"><text></text>实际退款:</view>
+			<input type="digit" v-model="refundMoney">
+		</view>
+		<view class="refund-item">
+			<view class="refund-label">备注:</view>
+			<textarea v-model="remark" />
+		</view>
+		<view style="padding:20upx 0 20upx 0;font-size:32upx;font-weight:bold;">
+			<text v-if="orderInfo.onlinePay == 2" style="color:green;">此单线上付款,提交后,钱会原路自动退回给客户</text>
+			<block v-else>
+				<text v-if="Number(orderInfo.debtPrice)>0" style="color:#3385ff;">
+				此单为欠款单,提交后,欠款金额会自动减少
+				</text>
+				<text v-else style="color:red;">此单线下付款,提交后钱不会原路退回,请线下转账给客户</text>
+			</block>
+		</view>
+		<view class="flex-center btn-box" style="margin-bottom:50upx;margin-top:20upx;padding-bottom:10upx;">
+			<view class="flex-center btn" @tap="cancelRefund">取消</view>
+			<view class="flex-center btn active" @tap="confirmRefund" style="margin-left: 80upx">确定</view>
+		</view>
+
+		<view style="font-size:32upx;z-index:9999;color:red;text-align:center;font-weight:bold;margin-bottom:30upx;" 
+		v-if="!$util.isEmpty(unClear)" @click="goClear(unClear)">
+			<text>有一个待结账单 ¥{{unClear.actPrice?parseFloat(unClear.actPrice):0}}</text>
+			<text style="font-weight:bold;margin-left:15upx;">查看</text>
+		</view>
+
+	</view>
+</template>
+<script>
+import TuiListCell from "@/components/plugin/list-cell";
+import { getDetail,refund } from "@/api/order/index";
+import { getUnClear } from "@/api/clear"
+export default {
+	name: "orderDetail",
+	components: {
+		TuiListCell
+	},
+	data() {
+		return {
+			product:[],
+			refundMoney:0,
+			refundType:1,
+			remark:'',
+			orderInfo:{},
+			couldRefundPrice:0,
+			unClear:[]
+		};
+	},
+	onShow() {
+	},
+	computed:{
+		refundPrice(){
+			let price = 0
+			if(this.product){
+				for (const item of this.product) {
+					if(Number(item.refundCount)>0){
+						let currentPrice = Number(item.refundCount)*Number(item.xhUnitPrice)
+						currentPrice.toFixed(2)
+						price = Number(price) + Number(currentPrice)
+						price.toFixed(2)
+					}
+				}
+			}
+			price = parseFloat(price.toFixed(2))
+			this.refundMoney = price
+			return price
+		}
+	},
+	watch:{
+	},
+	methods: {
+		cancelRefund(){
+			uni.navigateBack({delta: 1});
+		},
+		confirmRefund(){
+			let hasError = false
+			let product = []
+			let that = this
+			this.product.forEach(ele=>{
+				let currentRefundCont = ele.refundCount ? Number(ele.refundCount) :0
+				let currentNum = ele.xhNum ? Number(ele.xhNum) : 0
+				let hasRefundNum = ele.refundNum ? Number(ele.refundNum) : 0
+				let couldRefundNum = Number(currentNum) - Number(hasRefundNum)
+				if(Number(currentRefundCont) > Number(couldRefundNum)){
+					uni.showToast({title:ele.name+'超过可退数量',icon:'none'})
+					hasError = true;
+					return false
+				}
+				if(Number(ele.refundCount)>0){
+					product.push({
+						"productId":ele.productId,
+						"num":ele.refundCount,
+						"unitType":ele.unitType,
+						unitName:ele.xhUnitName,
+						unitType:ele.xhUnitType,
+						unitPrice:ele.xhUnitPrice
+					})
+				}
+			})
+			if(hasError){
+				return
+			}
+			if(this.$util.isEmpty(product)&&this.refundType==1){
+				uni.showToast({title:'请选择商品',icon:'none'})
+				return;
+			}
+			let refundParams = {
+				id:this.option.id,
+				product:JSON.stringify(product),
+				price:this.refundMoney,
+				remark:this.remark,
+				refundType:this.refundType,
+				getOriginalItem:1
+			};
+			that.$util.confirmModal({content:'确认退款?'},() => {
+				uni.showLoading({title: "提交中",mask:true})
+				refund(refundParams).then(res => {
+					if(res.code == 1){
+						uni.hideLoading()
+						this.$util.pageTo({url: '/pagesOrder/refundSuccess?id='+res.data.id,type:2})
+					}
+				})
+			})
+		},
+		async init() {
+			//getOriginalItem 取原有的花材结构(小菊的花材结构有变化)
+			const res = await getDetail({ id: this.option.id,getOriginalItem:1 })
+			this.orderInfo = res.data
+			
+			this.couldRefundPrice = Number(res.data.orderPrice) - Number(res.data.tkPrice)
+			this.couldRefundPrice = this.couldRefundPrice.toFixed(2)
+			this.couldRefundPrice = parseFloat(this.couldRefundPrice)
+
+			this.product = res.data.product.map(ele=>{
+				return {...ele,refundCount:null}
+			})
+
+			let customId = res.data.customId ? res.data.customId : 0
+			if(Number(customId)>0){
+				getUnClear({customId:customId}).then(res=>{
+					if(res.code == 1){
+						this.unClear = res.data.info
+					}
+				})
+			}
+
+		},
+		goClear(item){
+			this.$util.pageTo({url:'/admin/clear/customInfo?id='+item.id})
+		},
+	}
+};
+</script>
+<style lang="scss" scoped>
+	.app-content{
+		height: calc(100vh - 30upx * 2);
+		padding: 30upx;
+		background: #FFFFFF;
+		font-size: 30upx;
+		.radioBtn{
+			width: 30upx;
+			height: 30upx;
+			margin-right: 10upx;
+			border: 1upx solid #ddd;
+			border-radius: 50%;
+			&.active{
+				position: relative;
+				border: 1upx solid #3385ff;
+				&:after{
+					content: '';
+					position: absolute;
+					width: 18upx;
+					height: 18upx;
+					background: #3385ff;
+					border-radius: 50%;
+				}
+			}
+		}
+		.refund-item-list{
+			display: flex;
+			padding-bottom: 30upx;
+			padding-top: 30upx;
+			border-top: 1upx solid #e6e4e4;
+			border-bottom: 1upx solid #e6e4e4;
+			.refund-label{
+				width: 200upx;
+				color:#666666;
+				font-size:26upx;
+				text{color: red;}
+			}
+			.list{
+				margin-bottom: 10upx;
+				.list-title{
+					height: 60upx;
+					padding-bottom: 20upx;
+					font-size:26upx;
+					font-weight:bold;
+					.product-name{
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						width:190upx;
+					}
+					.product-price{
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						width:130upx;
+						margin-left:10upx;
+					}
+					.product-num{
+						width:90upx;
+						overflow: hidden;
+						text-overflow:ellipsis;
+						white-space: nowrap;
+						margin-left:10upx;
+					}
+				}
+				.list-val{
+					input{
+						width: 200upx;
+						border: 1upx solid #ddd;
+						text-align: center;
+						font-weight: normal;
+					}
+				}
+			}
+		}
+		.refund-item{
+			display: flex;
+			padding: 18upx 0;
+			.refund-label{
+				width: 200upx;
+				color:#666666;
+				font-size:26upx;
+				text{
+					color: red;
+				}
+			}
+			input{
+				border: 1upx solid #ddd;
+			}
+			textarea{
+				width: calc(100% - 210upx);
+				height:150upx;
+				border: 1upx solid #ddd;
+			}
+		}
+		.btn-box{
+			.btn{
+				width: 220upx;
+				height: 90upx;
+				border: 1upx solid #666666;
+				border-radius: 10upx;
+				color:#666666;
+				&.active{
+					background: #3385ff;
+					color: #fff;
+					border: 1upx solid #3385ff;
+				}
+			}
+		}
+	}
+</style>