You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zhishifufei_uniapp/pages/my/refund_apply.vue

435 lines
8.9 KiB

10 months ago
<template>
<BaseContainer class="refund-apply">
<NavBar title="申请退款" />
<view class="refund-apply" v-if="order.id">
<view class="goods" v-for="cart of order.cartInfo">
<view class="image">
<image mode="aspectFit" class="img" :src="cart.productInfo.image" />
</view>
<view class="text">
<view class="name">{{ cart.productInfo.store_name }}</view>
<view class="money">
<view class="price">
<span>{{ cart.productInfo.price }}</span>
</view>
</view>
</view>
<view class="number">x{{ cart.cart_num }}</view>
</view>
<view class="form">
<view class="form-bd">
<view class="label">
<view>退款金额</view>
<view class="readonly-value">{{ "¥" + order.pay_price }}</view>
</view>
<view class="label flex-between">
<view>退款原因</view>
<view class="flex flex-center-x">
<picker
mode="selector"
:range="reason"
range-key="reason_refund"
class="flex-auto"
@change="handleReasonChange"
>{{ refund_reason || "选择退款原因" }}
</picker>
<view class="iconfont iconxiangyou"></view>
</view>
</view>
<view class="label">
<view>备注说明</view>
<textarea
placeholder="填写备注信息"
auto-height
placeholder-class="input-placeholder"
v-model="remarks"
></textarea>
</view>
<view class="upload">
<view>
<view>上传凭证</view>
<view>最多可上传3张</view>
</view>
<view>
<view>
<view class="li" v-for="(pic, index) in pics">
<text
class="iconfont del-btn iconguanbi2"
@click="imgdel(index)"
></text>
<image mode="aspectFit" :src="pic" />
</view>
</view>
<view class="label" v-if="pics.length < 3" @click="handleUpload">
<view class="image">
<image mode="aspectFit" src="@/static/icon/camera.png" />
</view>
<view class="text">上传凭证</view>
</view>
</view>
</view>
</view>
<view class="form-ft">
<view class="submit-button flex flex-center" @click="submit">提交</view>
</view>
</view>
</view>
</BaseContainer>
</template>
<script>
import { getOrderRefundData } from "@/api/user";
import { getRefundReason, submitRefundApply } from "@/api/auth";
export default {
data() {
return {
order_id: "",
reason: [],
refund_reason: "",
remarks: "",
pics: [],
order: {},
};
},
onLoad({ order_id }) {
this.order_id = order_id;
this.getData();
this.getRefundReason();
},
methods: {
handleUpload() {
this.$util.pickerOneImg().then((path) => {
path && this.pics.push(path);
});
},
handleReasonChange({ detail }) {
this.refund_reason = this.reason[detail.value].reason_refund;
},
async getData() {
uni.showLoading();
try {
const { data } = await getOrderRefundData(this.order_id);
uni.hideLoading();
this.order = data.order;
} catch (err) {
uni.hideLoading();
this.$util.showMsg(err.msg);
}
},
imgdel(index) {
this.pics.splice(index, 1);
},
getRefundReason() {
getRefundReason().then(({ data }) => {
this.reason = data;
});
},
async submit() {
if (!this.refund_reason) {
return this.$util.showMsg("请选择退款原因");
}
uni.showLoading({ mask: true });
const data = {
refund_reason: this.refund_reason,
remarks: this.remarks,
pics: this.pics,
};
try {
const { code } = await submitRefundApply(this.order_id, data);
uni.hideLoading();
if (code === 200) {
this.$util.showMsg("申请成功");
setTimeout(() => {
uni.navigateTo({
url: "/pages/special/order?uni=" + this.order_id,
});
}, 500);
} else {
this.$util.showMsg("申请失败");
}
} catch (err) {
uni.hideLoading();
this.$util.showMsg("申请失败");
}
},
},
};
</script>
<style>
page {
background-color: #f5f5f5;
}
.input-placeholder {
color: #bcbcbc;
}
</style>
<style scoped lang="scss">
/* 申请退款 */
.refund-apply .goods {
display: flex;
padding: 30rpx;
background-color: #ffffff;
}
.refund-apply .goods .image {
width: 230rpx;
height: 128rpx;
border-radius: 10rpx;
overflow: hidden;
}
.refund-apply .goods .img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
pointer-events: none;
}
.refund-apply .goods .text {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
margin-right: 20rpx;
margin-left: 20rpx;
}
.refund-apply .goods .name {
-webkit-line-clamp: 2;
overflow: hidden;
font-size: 28rpx;
line-height: 30rpx;
color: #343434;
}
.refund-apply .goods .money {
margin-top: 40rpx;
}
.refund-apply .goods .price,
.refund-apply .goods .vip-price {
display: inline-block;
}
.refund-apply .goods .price {
font-size: 26rpx;
color: #9a9a9a;
}
.refund-apply .goods .price text {
font-size: 26rpx;
}
.refund-apply .goods .vip-price {
font-size: 24rpx;
}
.refund-apply .goods .vip-price image {
display: inline-block;
width: 46rpx;
height: 21rpx;
pointer-events: none;
-webkit-touch-callout: none;
}
.refund-apply .goods .number {
font-size: 26rpx;
line-height: 30rpx;
color: #9a9a9a;
}
.refund-apply .form {
margin-top: 12rpx;
}
.refund-apply .form-bd {
padding-left: 30rpx;
background-color: #ffffff;
}
.refund-apply .form-bd > .label {
display: flex;
align-items: center;
padding-top: 30rpx;
padding-right: 30rpx;
padding-bottom: 30rpx;
}
.refund-apply .form-bd > .label view:first-child {
font-size: 30rpx;
color: #343434;
}
.refund-apply .form-bd > .label + .label {
border-top: 1px solid #eee;
}
.readonly-value,
.refund-apply .form-bd > .label input {
flex: 1;
font-family: inherit;
font-size: 30rpx;
text-align: right;
color: #666;
}
.refund-apply .form-bd > .label picker {
color: #bcbcbc;
}
.refund-apply .form-bd > .label textarea {
flex: 1;
margin-left: 25rpx;
font-family: inherit;
font-size: 30rpx;
resize: none;
min-height: 5em;
}
.iconxiangyou {
margin-left: 25rpx;
font-size: 30rpx;
line-height: 1;
color: #999999;
}
.refund-apply .form-bd > .label:nth-child(3) view:first-child {
align-self: flex-start;
}
.refund-apply .upload {
border-top: 1px solid #eee;
}
.refund-apply .upload > view:first-child {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 30rpx;
padding-right: 30rpx;
padding-bottom: 30rpx;
font-size: 30rpx;
color: #343434;
}
.refund-apply .upload > view:first-child > view:last-child {
color: #bcbcbc;
}
.refund-apply .upload > view:last-child {
padding-right: 30rpx;
}
.refund-apply .upload > view:last-child::after {
content: " ";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.refund-apply .upload .label {
float: left;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 156rpx;
height: 156rpx;
border: 1px solid #ddd;
border-radius: 3rpx;
margin-right: 30rpx;
margin-bottom: 30rpx;
}
.refund-apply .upload .label .image {
width: 47rpx;
height: 47rpx;
}
.refund-apply .upload .label image {
display: block;
width: 100%;
height: 100%;
pointer-events: none;
}
.refund-apply .upload .label .text {
margin-top: 15rpx;
font-size: 24rpx;
color: #bcbcbc;
}
.refund-apply .upload .li {
position: relative;
float: left;
width: 156rpx;
height: 156rpx;
border: 1px solid #ddd;
border-radius: 3rpx;
margin-right: 30rpx;
margin-bottom: 30rpx;
}
.refund-apply .upload .li image {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
pointer-events: none;
}
.refund-apply .upload .li .del-btn {
position: absolute;
top: 0;
right: 0;
z-index: 2;
width: 40rpx;
height: 40rpx;
border-radius: 50%;
background-color: #2c8eff;
transform: translate(25%, -25%);
font-size: 40rpx;
line-height: 1;
color: #ffffff;
cursor: pointer;
}
.refund-apply .form-ft {
padding: 30rpx;
margin-top: 40rpx;
}
.refund-apply .form-ft .submit-button {
width: 100%;
height: 86rpx;
border-radius: 43rpx;
background-color: #2c8eff;
font-family: inherit;
font-size: 32rpx;
color: #ffffff;
}
</style>