261 lines
6.1 KiB
Vue
261 lines
6.1 KiB
Vue
|
<template>
|
|||
|
<view class="apply-refund">
|
|||
|
<view class="goods bg-white m-t-20">
|
|||
|
<view class="flex">
|
|||
|
<u-image width="160rpx" height="160rpx" border-radius="6rpx" lazy-load :src="goods.image" />
|
|||
|
<view class="goods-info">
|
|||
|
<view class="line-2">{{goods.goods_name}}</view>
|
|||
|
<view class="xs muted m-t-10">{{goods.spec_value}}</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="opt-box m-t-20 bg-white">
|
|||
|
<view v-show="!hiddenOpt">
|
|||
|
<view class="opt-item flex row-between border-line" @tap="onlyRefund">
|
|||
|
<view>
|
|||
|
<view class="lg">仅退款</view>
|
|||
|
<view class="muted xs m-t-10">未收到货,与卖家协商同意无需退货只需退款</view>
|
|||
|
</view>
|
|||
|
<u-icon class="m-l-10" name="arrow-right" size="28" />
|
|||
|
</view>
|
|||
|
<view class="opt-item flex row-between" @tap="allRefunds">
|
|||
|
<view>
|
|||
|
<view class="lg">退货退款</view>
|
|||
|
<view class="muted xs m-t-10">已收到货,需退还收到的实物</view>
|
|||
|
</view>
|
|||
|
<u-icon class="m-l-10" name="arrow-right" size="28" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view v-show="hiddenOpt">
|
|||
|
<view class="refund-info flex row-between m-t-20">
|
|||
|
<view class="lable">数量</view>
|
|||
|
<view>{{goods.goods_num}}</view>
|
|||
|
</view>
|
|||
|
<view class="refund-info flex row-between">
|
|||
|
<view class="lable">退款金额</view>
|
|||
|
<price-format :color="colorConfig.primary" :price="goods.goods_price" />
|
|||
|
</view>
|
|||
|
<view class="refund-info flex row-between" @tap="showPop=true">
|
|||
|
<view class="lable">退款原因</view>
|
|||
|
<view class="flex">
|
|||
|
<text :class="{muted: !reasonString}">{{reasonString ? reasonString : '请选择' }}</text>
|
|||
|
<u-icon class="m-l-10" name="arrow-right" size="28" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="refund-info flex col-top">
|
|||
|
<view class="label">备注说明</view>
|
|||
|
<view class="flex-1" style="background-color: #F8F8F8;">
|
|||
|
<u-input v-model="remark" type="textarea" placeholder="请描述申请售后的具体原因,100字以内" :border="false"
|
|||
|
:height="160" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="upload bg-white">
|
|||
|
<view class="title flex row-between">
|
|||
|
<view>上传凭证</view>
|
|||
|
<view class="muted">(选填,最多可上传1张)</view>
|
|||
|
</view>
|
|||
|
<u-upload ref="uUpload" :show-progress="false" :header="{token: $store.getters.token}"
|
|||
|
:max-count="1" width="160" height="160" :action="action" upload-text="上传图片"
|
|||
|
@on-success="onSuccess" @on-remove="onRemove" />
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<button v-show="hiddenOpt" class="btn br60" type="primary" size="lg" @tap="onSubmit">申请退款</button>
|
|||
|
|
|||
|
<u-select v-model="showPop" mode="single-column" value-name="index" label-name="name" :list="reason"
|
|||
|
@confirm="confirmSelect"></u-select>
|
|||
|
</view>
|
|||
|
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import {
|
|||
|
refundOptType
|
|||
|
} from "@/utils/type";
|
|||
|
import {
|
|||
|
baseURL
|
|||
|
} from '@/config/app';
|
|||
|
import {
|
|||
|
getGoodsInfo,
|
|||
|
applyAfterSale,
|
|||
|
applyAgain
|
|||
|
} from "@/api/user";
|
|||
|
import {
|
|||
|
uploadFile,
|
|||
|
trottle
|
|||
|
} from '@/utils/tools.js';
|
|||
|
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
action: baseURL + '/api/file/formimage',
|
|||
|
hiddenOpt: false,
|
|||
|
optTyle: refundOptType.ONLY_REFUND,
|
|||
|
goods: {},
|
|||
|
reason: [],
|
|||
|
showPop: false,
|
|||
|
reasonString: '',
|
|||
|
fileList: [],
|
|||
|
remark: ""
|
|||
|
};
|
|||
|
},
|
|||
|
onLoad(options) {
|
|||
|
const {
|
|||
|
order_id,
|
|||
|
item_id,
|
|||
|
after_sale_id
|
|||
|
} = this.$Route.query
|
|||
|
this.orderId = order_id;
|
|||
|
this.itemId = item_id;
|
|||
|
this.afterSaleId = after_sale_id;
|
|||
|
this.getGoodsInfoFun();
|
|||
|
this.onSubmit = trottle(this.onSubmit, 1000, this)
|
|||
|
},
|
|||
|
|
|||
|
methods: {
|
|||
|
confirmSelect(e) {
|
|||
|
this.reasonString = e[0].label
|
|||
|
},
|
|||
|
|
|||
|
onlyRefund() {
|
|||
|
this.optTyle = refundOptType.ONLY_REFUND
|
|||
|
this.hiddenOpt = true
|
|||
|
},
|
|||
|
|
|||
|
allRefunds() {
|
|||
|
this.optTyle = refundOptType.REFUNDS;
|
|||
|
this.hiddenOpt = true;
|
|||
|
},
|
|||
|
onSuccess(e) {
|
|||
|
this.fileList.push(e.data.base_uri)
|
|||
|
},
|
|||
|
onRemove(index) {
|
|||
|
this.fileList.splice(index, 1)
|
|||
|
console.log(index)
|
|||
|
},
|
|||
|
async onSubmit() {
|
|||
|
const {
|
|||
|
reason,
|
|||
|
reasonString,
|
|||
|
optTyle,
|
|||
|
remark,
|
|||
|
fileList
|
|||
|
} = this;
|
|||
|
if (!reasonString) {
|
|||
|
return this.$toast({
|
|||
|
title: '请选择退款原因'
|
|||
|
});
|
|||
|
}
|
|||
|
const params = {
|
|||
|
reason: reasonString,
|
|||
|
refund_type: optTyle,
|
|||
|
remark: remark,
|
|||
|
img: fileList.length ? fileList[0] : ''
|
|||
|
};
|
|||
|
if (this.afterSaleId) {
|
|||
|
params.id = this.afterSaleId
|
|||
|
} else {
|
|||
|
params.item_id = this.itemId
|
|||
|
params.order_id = this.orderId
|
|||
|
}
|
|||
|
const {
|
|||
|
data,
|
|||
|
code,
|
|||
|
msg
|
|||
|
} = this.afterSaleId ? await applyAgain(params) : await applyAfterSale(params)
|
|||
|
if (code == 1) {
|
|||
|
this.$toast({
|
|||
|
title: msg
|
|||
|
});
|
|||
|
uni.$emit("refreshsale")
|
|||
|
setTimeout(() => {
|
|||
|
this.$Router.replace({
|
|||
|
path: '/bundle/pages/after_sales_detail/after_sales_detail',
|
|||
|
query: {
|
|||
|
id: data.after_sale_id
|
|||
|
}
|
|||
|
})
|
|||
|
}, 1000)
|
|||
|
}
|
|||
|
|
|||
|
},
|
|||
|
|
|||
|
getGoodsInfoFun() {
|
|||
|
let {
|
|||
|
orderId,
|
|||
|
itemId
|
|||
|
} = this;
|
|||
|
getGoodsInfo({
|
|||
|
order_id: orderId,
|
|||
|
item_id: itemId
|
|||
|
}).then(res => {
|
|||
|
if (res.code == 1) {
|
|||
|
this.goods = res.data.goods;
|
|||
|
this.reason = res.data.reason.map((item, index) => ({
|
|||
|
name: item,
|
|||
|
index
|
|||
|
}));
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style lang="scss">
|
|||
|
.apply-refund {
|
|||
|
padding-bottom: 50rpx;
|
|||
|
|
|||
|
.goods {
|
|||
|
padding: 20rpx 24rpx;
|
|||
|
|
|||
|
.goods-info {
|
|||
|
margin-left: 24rpx;
|
|||
|
flex: 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
.opt-box {
|
|||
|
.opt-item {
|
|||
|
padding: 20rpx 20rpx 30rpx;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
.apply-refund {
|
|||
|
.refund-info {
|
|||
|
padding: 24rpx 20rpx;
|
|||
|
border-bottom: $-solid-border;
|
|||
|
|
|||
|
.label {
|
|||
|
width: 140rpx;
|
|||
|
margin-top: 19rpx;
|
|||
|
}
|
|||
|
|
|||
|
textarea {
|
|||
|
flex: 1;
|
|||
|
height: 172rpx;
|
|||
|
border-radius: 10rpx;
|
|||
|
padding: 20rpx;
|
|||
|
box-sizing: border-box;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.upload {
|
|||
|
padding: 0 20rpx 30rpx;
|
|||
|
|
|||
|
.title {
|
|||
|
padding: 24rpx 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.btn {
|
|||
|
margin: 30rpx 26rpx
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|