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.
436 lines
11 KiB
436 lines
11 KiB
<template>
|
|
<view id="order-apply">
|
|
<view class="title">选择类型</view>
|
|
<view class="content">
|
|
<text>服务类型</text>
|
|
<picker :value="selectedIndex" :range="list" @change="change" range-key="name">
|
|
<!--<view class="picker">{{list[selectedIndex]}}</view>-->
|
|
<input type="text" placeholder="选择售后服务类型" disabled :value="list[selectedIndex].name"></input>
|
|
</picker>
|
|
</view>
|
|
<view class="title">退款信息</view>
|
|
<view class="list">
|
|
<view class="list-detail">
|
|
<text>申请数量</text>
|
|
<view class="num">
|
|
<view class="subtraction" @tap="plus">+</view>
|
|
<view class="text-number">{{applyNum}}</view>
|
|
<view class="plus" @tap="minus">-</view>
|
|
</view>
|
|
<!--<input type="range" />-->
|
|
</view>
|
|
<view class="content">
|
|
<text>退换原因</text>
|
|
<picker :value="reasonIndex" :range="reason" range-key="name" @change="changeCause" mode = selector>
|
|
<!--<view class="picker">{{list[selectedIndex]}}</view>-->
|
|
<input type="text" placeholder="选择退换原因" disabled :value="reason[reasonIndex].name"></input>
|
|
</picker>
|
|
</view>
|
|
<view class="list-detail">
|
|
<text>退款金额</text>
|
|
<view class="right"><input type="text" @input="changeValue" :value="amount" :placeholder="'最多可退' + availableAmount + '元'"></input></view>
|
|
|
|
</view>
|
|
</view>
|
|
<view class="title">
|
|
问题描述
|
|
</view>
|
|
<view class="text-area">
|
|
<textarea @input="changeDetail" :value="qestionDetail" contenteditable="true"></textarea>
|
|
</view>
|
|
<view class="title">
|
|
上传凭证
|
|
</view>
|
|
<view class="content btn-box">
|
|
<view class="imgContainer" v-for="(img, index) in imgList" :key="index">
|
|
<image :src="img"></image>
|
|
<view class="delete" :data-index="index" @tap="deleteImg">X</view>
|
|
</view>
|
|
<view class="append" @tap="selectImage" v-if="imgList.length<5">
|
|
+
|
|
</view>
|
|
</view>
|
|
<view class="submit" :style="'background: ' + config.mainColor" @tap="submitApplication">
|
|
提交
|
|
</view>
|
|
</view>
|
|
|
|
</template>
|
|
<script>
|
|
import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
list: [{
|
|
name:'',
|
|
value:''
|
|
}],
|
|
// 最大的申请数量
|
|
maxNum: "",
|
|
selectedIndex:0,
|
|
// 申请数量
|
|
applyNum: 1,
|
|
// 退款金额
|
|
amount: "",
|
|
// 问题描述
|
|
qestionDetail: "",
|
|
// 可退的金额
|
|
availableAmount: "",
|
|
reason: [{
|
|
name:'',
|
|
value:''
|
|
}],
|
|
reasonIndex:0,
|
|
imgList: [],
|
|
order_id: "",
|
|
order_item_id: "",
|
|
good: {
|
|
money: "",
|
|
number: ""
|
|
},
|
|
config: ''
|
|
};
|
|
},
|
|
|
|
onLoad(e) {
|
|
// 第三方平台配置颜色
|
|
var config = this.$cookieStorage.get('globalConfig') || '';
|
|
this.setData({
|
|
config: config
|
|
});
|
|
var id = e.id,
|
|
no = e.no;
|
|
this.setData({
|
|
order_id: no,
|
|
order_item_id: id
|
|
});
|
|
pageLogin(getUrl(), () => {
|
|
this.queryRefundBaseInfo(id);
|
|
this.queryCauseList();
|
|
});
|
|
},
|
|
|
|
onShow() {// let app =getApp();
|
|
// app.isBirthday().then(()=>{
|
|
// if(this.$cookieStorage.get("birthday_gift")){
|
|
// var giftData=this.$cookieStorage.get("birthday_gift").data;
|
|
// new app.ToastPannel().__page.showText(giftData);
|
|
// }
|
|
// });
|
|
},
|
|
methods: {
|
|
changeValue(e) {
|
|
let amount = e.detail.value;
|
|
|
|
if (!amount) {
|
|
amount = '';
|
|
} else if (/\S*$/.test(amount)) {
|
|
amount = amount.replace(/[^\d\.]|^\./g, '').replace(/\.{2}/g, '.').replace(/^([1-9]\d*|0)(\.\d{1,2})(\.|\d{1})?$/, '$1$2').replace(/^0\d{1}/g, '0');
|
|
}
|
|
|
|
if (Number(amount) > this.availableAmount) {
|
|
amount = this.availableAmount;
|
|
}
|
|
|
|
this.setData({
|
|
amount: amount
|
|
});
|
|
},
|
|
|
|
changeDetail(e) {
|
|
var str = e.detail.value;
|
|
|
|
if (e.detail.value.length > 150) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: '超出字数限制'
|
|
});
|
|
str = str.slice(0, 150);
|
|
}
|
|
|
|
this.setData({
|
|
qestionDetail: str
|
|
});
|
|
},
|
|
|
|
setAmount(i) {
|
|
this.setData({
|
|
availableAmount: (this.good.money / this.good.number * i).toFixed(2)
|
|
});
|
|
},
|
|
|
|
change(e) {
|
|
console.log(e);
|
|
// 修改选中项文案
|
|
this.setData({
|
|
selectedIndex: e.detail.value
|
|
});
|
|
console.log('this.selectedIndex',this.selectedIndex)
|
|
},
|
|
changeCause: function (e) {
|
|
this.setData({
|
|
reasonIndex: e.detail.value
|
|
});
|
|
},
|
|
getValue: function (e) {
|
|
console.log(e.detail.value);
|
|
},
|
|
|
|
deleteImg(e) {
|
|
var i = e.currentTarget.dataset.index;
|
|
var arr = this.imgList;
|
|
arr.splice(i, 1);
|
|
this.setData({
|
|
imgList: arr
|
|
});
|
|
},
|
|
|
|
selectImage() {
|
|
uni.chooseImage({
|
|
count: 1,
|
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
|
sourceType: ['album'], //从相册选择
|
|
success: res => {
|
|
var tempFilePaths = res.tempFilePaths;
|
|
var token = this.$cookieStorage.get('user_token');
|
|
/* this.$http.uploadFile({
|
|
header: {
|
|
'content-type': 'multipart/form-data',
|
|
Authorization: token
|
|
},
|
|
api: 'api/users/upload/avatar',
|
|
//仅为示例,非真实的接口地址
|
|
filePath: tempFilePaths[0],
|
|
name: 'avatar_file'
|
|
}).then(res => {
|
|
var result = JSON.parse(res.data);
|
|
var arr = this.imgList;
|
|
arr.push(result.data.url); // this.imgList.push();
|
|
|
|
this.setData({
|
|
imgList: arr
|
|
});
|
|
}); */
|
|
uni.uploadFile({
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
url: config.GLOBAL.baseUrl + 'api/users/upload/avatar',
|
|
filePath: tempFilePaths[0],
|
|
fileType: 'image',
|
|
name: 'avatar_file',
|
|
success: res => {
|
|
var result = JSON.parse(res.data);
|
|
var arr = this.imgList;
|
|
arr.push(result.data.url); // this.imgList.push();
|
|
|
|
this.setData({
|
|
imgList: arr
|
|
});
|
|
}
|
|
})
|
|
}
|
|
});
|
|
},
|
|
|
|
submitApplication() {
|
|
var applyItem = {
|
|
order_no: this.order_id,
|
|
order_item_id: parseInt(this.order_item_id),
|
|
quantity: parseInt(this.applyNum),
|
|
images: this.imgList,
|
|
amount: parseFloat(this.amount),
|
|
content: this.qestionDetail,
|
|
type: this.list[this.selectedIndex].value,
|
|
reason:this.reason[this.reasonIndex].value
|
|
},
|
|
message = null;
|
|
if (!is.has(applyItem.type)) {
|
|
message = "请选择售后类型";
|
|
} else if (!is.has(applyItem.reason)) {
|
|
message = '请填写退换原因';
|
|
} else if (!is.has(applyItem.amount)) {
|
|
message = '请填写退款金额';
|
|
}
|
|
|
|
/* else if (!is.has(applyItem.content)) {
|
|
message = "请输入问题描述";
|
|
} */
|
|
if (message) {
|
|
wx.showModal({
|
|
title: '提示',
|
|
content: message,
|
|
showCancel: false
|
|
});
|
|
} else {
|
|
applyItem.type = parseInt(applyItem.type);
|
|
this.applyretreat(applyItem);
|
|
}
|
|
},
|
|
|
|
applyretreat(data) {
|
|
wx.showLoading({
|
|
mask: true,
|
|
title: '正在申请'
|
|
});
|
|
this.$http.post({
|
|
api: "api/refund/apply",
|
|
data: data,
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
wx.showToast({
|
|
title: "申请成功请等待审核",
|
|
duration: 1500,
|
|
success: () => {
|
|
setTimeout(() => {
|
|
wx.redirectTo({
|
|
url: '/pages/afterSales/detail/detail?no=' + res.data.refund_no
|
|
});
|
|
}, 1500);
|
|
}
|
|
});
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '申请失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
} else {
|
|
wx.showModal({
|
|
content: '申请失败',
|
|
showCancel: false
|
|
});
|
|
wx.hideLoading();
|
|
}
|
|
});
|
|
},
|
|
|
|
plus() {
|
|
var num = this.applyNum;
|
|
num++;
|
|
if (num > this.maxNum) return;
|
|
this.setData({
|
|
applyNum: num
|
|
});
|
|
this.setAmount(num);
|
|
},
|
|
|
|
minus() {
|
|
var num = this.applyNum;
|
|
if (num <= 1) return;
|
|
num--;
|
|
this.setData({
|
|
applyNum: num
|
|
});
|
|
this.setAmount(num);
|
|
},
|
|
|
|
queryRefundBaseInfo(id) {
|
|
this.$http.get({
|
|
api: "api/refund/base_info",
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
},
|
|
data: {
|
|
order_item_id: id
|
|
}
|
|
}).then(res => {
|
|
var store = res.data.data;
|
|
var meta = res.data.meta.type;
|
|
var list = [];
|
|
meta.forEach(v => {
|
|
list.push({
|
|
name: v.value,
|
|
value: String(v.key)
|
|
});
|
|
});
|
|
/*var list=[{
|
|
name: meta[0].value,
|
|
value: meta[0].key
|
|
}];*/
|
|
|
|
this.setData({
|
|
'good.money': store.total / 100,
|
|
'good.number': store.quantity,
|
|
availableAmount: (store.total / 100 / store.quantity).toFixed(2),
|
|
maxNum: store.quantity,
|
|
list: list
|
|
});
|
|
});
|
|
},
|
|
|
|
queryServiceList(status, distribution_status) {
|
|
this.$http.get({
|
|
api: 'api/users/BankAccount/show-bank',
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
}
|
|
}).then(res => {
|
|
res = res.data;
|
|
});
|
|
},
|
|
|
|
queryCauseList(type = 'order_refund_reason') {
|
|
this.$http.get({
|
|
api: 'api/system/settings',
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
},
|
|
data: {
|
|
type: type
|
|
}
|
|
}).then(res => {
|
|
res = res.data;
|
|
var list = [];
|
|
res.data.forEach(v => {
|
|
if (v.is_enabled != 0) {
|
|
list.push({
|
|
name: v.value,
|
|
value: String(v.key)
|
|
});
|
|
}
|
|
});
|
|
this.setData({
|
|
reason: list
|
|
});
|
|
});
|
|
},
|
|
|
|
setData: function (obj) {
|
|
let that = this;
|
|
let keys = [];
|
|
let val, data;
|
|
Object.keys(obj).forEach(function (key) {
|
|
keys = key.split('.');
|
|
val = obj[key];
|
|
data = that.$data;
|
|
keys.forEach(function (key2, index) {
|
|
if (index + 1 == keys.length) {
|
|
that.$set(data, key2, val);
|
|
} else {
|
|
if (!data[key2]) {
|
|
that.$set(data, key2, {});
|
|
}
|
|
}
|
|
|
|
data = data[key2];
|
|
});
|
|
});
|
|
}
|
|
},
|
|
computed: {},
|
|
watch: {}
|
|
};
|
|
</script>
|
|
<style rel="stylesheet/less" lang="less">
|
|
@import "apply";
|
|
</style>
|