Merge branch 'v4.7.0dev' into v5.0.0dev

# Conflicts:
#	template/uni-app/pages/goods/order_confirm/index.vue
This commit is contained in:
evoxwht 2023-03-31 16:13:09 +08:00
commit 9d6f9dd6a4
22 changed files with 1047 additions and 1027 deletions

View File

@ -1 +1 @@
APP_DEBUG = true [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = #DB_HOST# HOSTPORT = #DB_PORT# USERNAME = #DB_USER# PASSWORD = '#DB_PWD#' DATABASE = #DB_NAME# PREFIX = #DB_PREFIX# CHARSET = utf8 DEBUG = true [LANG] default_lang = zh-cn [CACHE] DRIVER = #CACHE_TYPE# CACHE_PREFIX = #CACHE_PREFIX# CACHE_TAG_PREFIX = #CACHE_TAG_PREFIX# [REDIS] REDIS_HOSTNAME = #RB_HOST# PORT = #RB_PORT# REDIS_PASSWORD = '#RB_PWD#' SELECT = #RB_SELECT# [QUEUE] QUEUE_NAME = #QUEUE_NAME#
APP_DEBUG = true [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = #DB_HOST# HOSTPORT = #DB_PORT# USERNAME = #DB_USER# PASSWORD = '#DB_PWD#' DATABASE = #DB_NAME# PREFIX = #DB_PREFIX# CHARSET = utf8mb4 DEBUG = true [LANG] default_lang = zh-cn [CACHE] DRIVER = #CACHE_TYPE# CACHE_PREFIX = #CACHE_PREFIX# CACHE_TAG_PREFIX = #CACHE_TAG_PREFIX# [REDIS] REDIS_HOSTNAME = #RB_HOST# PORT = #RB_PORT# REDIS_PASSWORD = '#RB_PWD#' SELECT = #RB_SELECT# [QUEUE] QUEUE_NAME = #QUEUE_NAME#

View File

@ -8,7 +8,7 @@
<Radio label="3">虚拟</Radio>
</RadioGroup>
</FormItem>
<FormItem v-show="formItem.type === '1' && export_open" label="发货类型:">
<FormItem v-show="formItem.type == '1' && export_open" label="发货类型:">
<RadioGroup v-model="formItem.express_record_type" @on-change="changeExpress">
<Radio label="1">手动填写</Radio>
<Radio label="2">电子面单打印</Radio>
@ -142,7 +142,7 @@ export default {
// ]
// },
temp: {},
export_open: true,
export_open: false,
};
},
methods: {

View File

@ -8,8 +8,8 @@
<Col span="12">收货人:{{ orderDatalist.orderInfo.real_name }}</Col>
</Row>
<Row class="mb10">
<Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone }}</Col>
<Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address }}</Col>
<Col span="12">联系电话:{{ orderDatalist.orderInfo.user_phone || '' }}</Col>
<Col span="12">收货地址:{{ orderDatalist.orderInfo.user_address || '' }}</Col>
</Row>
<Divider style="margin: 20px 0 !important" />
<div class="ivu-description-list-title">订单信息</div>
@ -18,7 +18,7 @@
<Col span="12" class="fontColor1"
>订单状态:{{ orderDatalist.orderInfo._status._title }}
{{
orderDatalist.orderInfo.refund.length
orderDatalist.orderInfo.refund && orderDatalist.orderInfo.refund.length
? orderDatalist.orderInfo.is_all_refund
? '退款中'
: '部分退款中'

View File

@ -567,15 +567,17 @@ export default {
getData(id) {
getDataInfoNew(id)
.then(async (res) => {
this.$refs.detailss.modals = true;
this.orderDatalist = res.data;
if (this.orderDatalist.orderInfo.refund_img) {
if (this.orderDatalist.orderInfo.refund_img.length) {
try {
this.orderDatalist.orderInfo.refund_img = JSON.parse(this.orderDatalist.orderInfo.refund_img);
} catch (e) {
this.orderDatalist.orderInfo.refund_img = [];
}
}
this.$nextTick((e) => {
this.$refs.detailss.modals = true;
});
})
.catch((res) => {
this.$Message.error(res.msg);
@ -668,7 +670,7 @@ export default {
position: relative;
}
.ivu-form-item{
}
.QRpic {
width: 180px;

View File

@ -20,11 +20,11 @@
<view class='vip-money acea-row row-middle'
v-if="item.is_vip && item.vip_price && item.vip_price > 0">
{{$t(`¥`)}}{{item.vip_price || 0}}
<image src='../../static/images/vip.png'></image><text class='num'>{{$t(`已售`)}}
{{item.sales}}{{$t(item.unit_name)}}</text>
<image src='../../static/images/vip.png'></image><text class='num'>
{{$t(`已售`)}}{{item.sales}}{{$t(item.unit_name)}}</text>
</view>
<view class='vip-money acea-row row-middle' v-else><text class='num'>{{$t(`已售`)}}
{{item.sales}}{{$t(item.unit_name)}}</text></view>
<view class='vip-money acea-row row-middle' v-else><text class='num'>
{{$t(`已售`)}}{{item.sales}}{{$t(item.unit_name)}}</text></view>
</view>
</view>
<!-- <view class='iconfont icon-gouwuche cart-color acea-row row-center-wrapper'></view> -->
@ -148,6 +148,11 @@
color: #aaa;
font-weight: normal;
margin-top: -2rpx;
white-space: nowrap;
text {
white-space: nowrap;
}
~.num {
margin-left: 22rpx;

View File

@ -13,8 +13,8 @@
<image :src='item.image'></image>
</view>
<view class='text acea-row row-column-around'>
<view class='name line1'>{{item.title}}</view>
<view class='num'><text class='iconfont icon-pintuan'></text>{{item.people}}{{$t(`人正在参与`)}}
<view class='name line1'>{{item.title || ''}}</view>
<view class='num'><text class='iconfont icon-pintuan'></text>{{item.people || ''}}{{$t(`人正在参与`)}}
</view>
<view class='money'>{{$t(`最低`)}} : {{$t(`¥`)}}<text class='price'>{{item.min_price}}</text>
</view>

View File

@ -30,7 +30,7 @@
<image src="../static/groupLine.png"></image>
</view>
</view>
<view class="list">
<view class="list" v-if="combinationList.length">
<view class="item acea-row row-between-wrapper" v-for="(item,index) in combinationList" :key='index'
@tap="openSubcribe(item)">
<view class="pictrue">

View File

@ -9,7 +9,7 @@
<view class='timeList'>
<block v-for="(item,index) in timeList" :key='index'>
<view @tap='settimeList(item,item.key)' class='item' :class="active == index + 1?'on':''">
<view class='time'><span>{{item.name}}</span></view>
<view class='time'><span>{{item.name || ''}}</span></view>
</view>
</block>
</view>
@ -21,10 +21,10 @@
<image :src='item.image'></image>
</view>
<view class='text acea-row row-column-around'>
<view class='name line2'>{{item.store_name}}</view>
<view class='name line2'>{{item.store_name || ''}}</view>
<view class='booking'>
<text v-if="item.presell_type != 0 && active != 1" class="count"
style="color: #999;">{{$t(`已预定`)}}{{item.sales ? item.sales : 0}}{{item.unit_name}}</text>
style="color: #999;">{{$t(`已预定`)}}{{item.sales ? item.sales : 0}}{{item.unit_name || ''}}</text>
<text v-else style="color: #999; font-size: 24rpx;">{{$t(`未开始`)}}</text>
</view>
<view v-if="item.coupon" class='coupon acea-row row-between-wrapper'

View File

@ -3,9 +3,9 @@
<view class="application-record" v-if="listData.length">
<view class="card-list" v-for="item in listData" :key="item.mer_intention_id">
<view class="card-top">
<view class="title">{{item.mer_name}}</view>
<view class="time">{{$t(`提交时间`)}}:{{item.create_time}}</view>
<view v-if="item.fail_msg" class="reason">{{$t(`原因`)}}:{{item.fail_msg}}</view>
<view class="title">{{item.mer_name || ''}}</view>
<view class="time">{{$t(`提交时间`)}}:{{item.create_time || ''}}</view>
<view v-if="item.fail_msg" class="reason">{{$t(`原因`)}}:{{item.fail_msg || ''}}</view>
</view>
<view class="line"></view>
<view class="card-bottom">

View File

@ -7,7 +7,7 @@
{{$t(`¥`)}}
<input v-model.number="money" class="input" name="money" type="digit" @input="inputChange" placeholder="0.00" />
</view>
<view v-if="payPrice && show" class="discount">{{$t(`会员优惠价`)}}:{{$t(`¥`)}}{{ payPrice }}</view>
<view v-if="payPrice && show" class="discount">{{$t(`会员优惠价`)}}:{{$t(`¥`)}}{{ payPrice || 0 }}</view>
</view>
</view>
<view class="radio-section">

View File

@ -22,8 +22,8 @@
<view v-for="item in memberRights" :key="item.id" class="acea-row row-middle item">
<image class="image" :src="item.pic"></image>
<view class="text">
<view class="name">{{item.title}}</view>
<view>{{item.explain}}</view>
<view class="name">{{item.title || ''}}</view>
<view>{{item.explain || ''}}</view>
</view>
</view>
</view>

View File

@ -1,6 +1,6 @@
<template>
<view>
<view class="title">{{agreement.title}}</view>
<view class="title">{{agreement.title || ''}}</view>
<view class="cont" v-html="agreement.content"></view>
</view>
</template>

View File

@ -4,19 +4,19 @@
<view class="acea-row row-middle">
<image class="image" :src="userInfo.avatar"></image>
<view class="text">
<view class="name line1">{{userInfo.nickname}}</view>
<view class="name line1">{{userInfo.nickname || ''}}</view>
<view v-if="userInfo.is_ever_level">{{$t(`永久SVIP会员`)}}</view>
<view v-else-if="userInfo.is_money_level">{{$t(`SVIP会员`)}} {{userInfo.overdue_time | dateFormat}}
{{$t(`到期`)}}
</view>
<view v-else>{{$t(`您与`)}} {{userInfo.shop_name}} {{$t(`商城的第`)}} {{userInfo.register_days}}
<view v-else>{{$t(`您与`)}} {{userInfo.shop_name || ''}} {{$t(`商城的第`)}} {{userInfo.register_days || ''}}
{{$t(`天.`)}}
</view>
</view>
</view>
<view class="acea-row row-between-wrapper info">
<view v-if="userInfo.is_money_level">{{$t(`已累积为您节省`)}} {{$t(`¥`)}}<text
class="num">{{userInfo.economize_money}}</text>
class="num">{{userInfo.economize_money || ''}}</text>
</view>
<view v-else>{{$t(`开通即享会员权益`)}}</view>
<view class="btn" @click="scrollToCard" v-if="!userInfo.is_ever_level">

View File

@ -1,49 +1,53 @@
<template>
<view v-if="shareInfoStatus" class="poster-first">
<view class="mask-share">
<image :src="imgHost + '/statics/images/share-info.png'" @click="shareInfoClose" @touchmove.stop.prevent="false"></image>
</view>
</view>
</template>
<script>
import {HTTP_REQUEST_URL} from '@/config/app';
export default {
props: {
shareInfoStatus: {
type: Boolean,
default:false,
}
},
data: function() {
return {
imgHost:HTTP_REQUEST_URL,
};
},
mounted: function() {},
methods: {
shareInfoClose: function() {
this.$emit("setShareInfoStatus");
}
}
};
</script>
<style scoped lang="scss">
.poster-first {
overscroll-behavior: contain;
}
.mask-share {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 99;
}
.mask-share image {
width: 100%;
height:100%;
}
<template>
<view v-if="shareInfoStatus" class="poster-first">
<view class="mask-share">
<image :src="imgHost + '/statics/images/share-info.png'" @click="shareInfoClose"
@touchmove.stop.prevent="false"></image>
</view>
</view>
</template>
<script>
import {
HTTP_REQUEST_URL
} from '@/config/app';
export default {
props: {
shareInfoStatus: {
type: Boolean,
default: false,
}
},
data: function() {
return {
imgHost: HTTP_REQUEST_URL,
};
},
mounted: function() {},
methods: {
shareInfoClose: function() {
this.$emit("setShareInfoStatus");
}
}
};
</script>
<style scoped lang="scss">
.poster-first {
overscroll-behavior: contain;
}
.mask-share {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 99;
}
.mask-share image {
width: 100%;
height: 100%;
}
</style>

View File

@ -1,11 +1,11 @@
<template>
<view :style="colorStyle">
<view class='newsDetail'>
<view class='title'>{{articleInfo.title}}</view>
<view class='title'>{{articleInfo.title || ''}}</view>
<view class='list acea-row row-middle'>
<view class='label'>{{articleInfo.catename}}</view>
<view class='item'></text>{{articleInfo.add_time}}</view>
<view class='item'><text class='iconfont icon-liulan'></text>{{articleInfo.visit}}</view>
<view class='label'>{{articleInfo.catename || ''}}</view>
<view class='item'></text>{{articleInfo.add_time || ''}}</view>
<view class='item'><text class='iconfont icon-liulan'></text>{{articleInfo.visit || ''}}</view>
</view>
<view class='conters'>
<jyf-parser :html="content" ref="article" :tag-style="tagStyle"></jyf-parser>
@ -16,11 +16,11 @@
<image :src="store_info.image"></image>
</view>
<view class="text">
<view class="name line1">{{store_info.store_name}}</view>
<view class="name line1">{{store_info.store_name || ''}}</view>
<view class="money font-color">
{{$t(`¥`)}}<text class="num">{{store_info.price}}</text>
{{$t(`¥`)}}<text class="num">{{store_info.price || 0}}</text>
</view>
<view class="y_money">{{$t(`¥`)}}{{store_info.ot_price}}</view>
<view class="y_money">{{$t(`¥`)}}{{store_info.ot_price || 0}}</view>
</view>
<navigator class="label"><text class="span">{{$t(`查看商品`)}}</text></navigator>
</navigator>

File diff suppressed because it is too large Load Diff

View File

@ -256,6 +256,7 @@
title: that.$t(`支付中`)
});
if (paytype == 'friend' && that.orderId) {
uni.hideLoading();
return uni.navigateTo({
url: '/pages/users/payment_on_behalf/index?order_id=' + that.orderId + '&spread=' +
this.$store.state.app.uid,
@ -290,7 +291,6 @@
'&spread=' +
this
.$store.state.app.uid
switch (status) {
case 'ORDER_EXIST':
case 'EXTEND_ORDER':
@ -518,16 +518,16 @@
case 'ALIPAY_PAY':
//#ifdef H5
uni.hideLoading();
that.$util.Tips({
title: that.$t(`等待支付中`)
}, {
tab: 4,
url: goPages + '&status=0'
uni.hideLoading();
that.$util.Tips({
title: that.$t(`等待支付中`)
}, {
tab: 4,
url: goPages + '&status=0'
});
that.formContent = res.data.result.jsConfig;
setTimeout(() => {
document.getElementById('alipaysubmit').submit();
that.formContent = res.data.result.jsConfig;
setTimeout(() => {
document.getElementById('alipaysubmit').submit();
}, 1500);
//#endif
// #ifdef MP

View File

@ -11,9 +11,9 @@
v-if='store_self_mention && is_shipping'></view>
</view>
<view class='address acea-row row-between-wrapper' @tap='onAddress' v-if='shippingType == 0'>
<view class='addressCon' v-if="addressInfo.real_name">
<view class='name'>{{addressInfo.real_name}}
<text class='phone'>{{addressInfo.phone}}</text>
<view class='addressCon' v-if="addressInfo.real_name || ''">
<view class='name'>{{addressInfo.real_name || ''}}
<text class='phone'>{{addressInfo.phone || ''}}</text>
</view>
<view class="line1">
<text class='default font-num'
@ -29,8 +29,8 @@
<view class='address acea-row row-between-wrapper' v-else @tap="showStoreList">
<block v-if="storeList.length>0">
<view class='addressCon'>
<view class='name'>{{system_store.name}}
<text class='phone'>{{system_store.phone}}</text>
<view class='name'>{{system_store.name || ''}}
<text class='phone'>{{system_store.phone || ''}}</text>
</view>
<view class="line1"> {{system_store.address}}{{", " + system_store.detailed_address}}</view>
</view>
@ -172,7 +172,7 @@
<view class='item acea-row row-between-wrapper'>
<view>{{$t(`商品总价`)}}:</view>
<view class='money'>
{{$t(`¥`)}}{{totalPriceAll || ''}}
{{$t(`¥`)}}{{allPrice || 0}}
</view>
</view>
<view class='item acea-row row-between-wrapper'
@ -388,7 +388,6 @@
priceGroup: {},
animated: false,
totalPrice: 0,
totalPriceAll: 0,
integralRatio: "0",
pagesUrl: "",
orderKey: "",
@ -823,7 +822,6 @@
that.$set(that, 'store_self_mention', res.data.store_self_mention);
that.$set(that, 'virtual_type', res.data.virtual_type || 0);
that.$set(that, 'integral_open', res.data.integral_open);
this.totalPriceAll= (parseFloat(res.data.priceGroup.totalPrice) + parseFloat(res.data.priceGroup.vipPrice)).toFixed(2)
uni.hideLoading()
//微信支付是否开启
that.cartArr[0].payStatus = res.data.pay_weixin_open || 0

View File

@ -146,7 +146,7 @@
<image src="../static/shuoming.png" mode=""></image>
{{$t(`拒绝退款`)}}
</view>
<view class="con">{{$t(`拒绝原因`)}}:{{orderInfo.refuse_reason}}</view>
<view class="con">{{$t(`拒绝原因`)}}:{{orderInfo.refuse_reason || ''}}</view>
</view>
</view>
<orderGoods v-for="(item,index) in split" :key="item.id" :evaluate='item._status._type == 3 ? 3 : 0'

View File

@ -1,298 +1,307 @@
<template>
<view :style="colorStyle">
<form @submit="subRefund">
<view class='apply-return'>
<view class='goodsStyle acea-row row-between' v-for="(item,index) in orderInfo.cart_info" :key="index">
<view class='pictrue'>
<image :src='item.productInfo.attrInfo?item.productInfo.attrInfo.image:item.productInfo.image'></image>
</view>
<view class='text acea-row row-between'>
<view class='name line2'>{{item.productInfo.store_name}}</view>
<view class='money'>
<view>{{$t(`¥`)}}{{item.truePrice}}</view>
<view class='num'>x{{item.cart_num}}</view>
</view>
</view>
</view>
<view class='list'>
<view class='item acea-row row-between-wrapper' v-if="expressList.length">
<view>{{$t(`快递公司`)}}</view>
<picker class='num' @change="bindPickerChange" :value="seIndex" :range="expressList" range-key="name">
<view class="picker acea-row row-between-wrapper">
<view class='reason'>{{expressList[seIndex].name}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
</picker>
</view>
<view class='item acea-row row-between-wrapper'>
<view>{{$t(`快递单号`)}}</view>
<input class="input" type="text" :placeholder="$t(`填写快递单号`)" placeholder-class='placeholder' v-model="refundInfo.refund_express" />
</view>
<view class='item acea-row row-between-wrapper'>
<view>{{$t(`联系电话`)}}</view>
<input class="input" type="number" :placeholder="$t(`请输入手机号`)" placeholder-class='placeholder' v-model="refundInfo.refund_phone" />
</view>
<view class='item textarea acea-row row-between'>
<view>{{$t(`备注说明`)}}</view>
<textarea :placeholder='$t(`填写备注信息,100字以内`)' class='num' v-model="refundInfo.refund_explain"></textarea>
</view>
<view class='item acea-row row-between'>
<view class='title acea-row row-between-wrapper'>
<view>{{$t(`上传图片`)}}</view>
<view class='tip'>{{$t(`最多可上传3张`)}}</view>
</view>
<view class='upload acea-row row-middle'>
<view class='pictrue' v-for="(item,index) in refund_reason_wap_img" :key="index">
<image :src='item'></image>
<view class='iconfont icon-guanbi1 font-num' @tap='DelPic(index)'></view>
</view>
<view class='pictrue acea-row row-center-wrapper row-column' @tap='uploadpic'
v-if="refund_reason_wap_img.length < 3">
<text class='iconfont icon-icon25201'></text>
<view>{{$t(`上传图片`)}}</view>
</view>
</view>
</view>
</view>
<button class='returnBnt bg-color' form-type="submit">{{$t(`提交`)}}</button>
</view>
</form>
</view>
</template>
<script>
import { refundOrderDetail, refundExpress } from '@/api/order.js';
import {
toLogin
} from '@/libs/login.js';
import {
mapGetters
} from "vuex";
import colors from '@/mixins/color.js';
export default {
mixins: [colors],
data() {
return {
expressList:[],
orderInfo:{},
seIndex: 0,
refund_reason_wap_img: [],
refundInfo:{
refund_express:'',
refund_phone:'',
refund_explain:'',
id:'',
refund_express_name:'',
refund_img:''
}
};
},
computed: mapGetters(['isLogin']),
watch: {
isLogin: {
handler: function(newV, oldV) {
if (newV) {
this.getOrderInfo();
}
},
deep: true
}
},
onLoad(options) {
this.orderId = options.orderId;
if (this.isLogin) {
this.getOrderInfo();
} else {
toLogin();
}
},
methods: {
/**
* 申请退货
*/
subRefund: function(e) {
let that = this
if (!that.refundInfo.refund_express) return this.$util.Tips({
title: that.$t(`填写快递单号`)
});
if (!that.refundInfo.refund_phone) return this.$util.Tips({
title: that.$t(`请输入手机号`)
});
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.refundInfo.refund_phone)) return this.$util.Tips({
title: that.$t(`请输入正确的手机号码`)
});
that.refundInfo.refund_express_name = that.expressList[that.seIndex].name;
that.refundInfo.refund_img = that.refund_reason_wap_img.join(',');
refundExpress(that.refundInfo).then(res => {
return this.$util.Tips({
title: res.msg,
icon: 'success'
}, {
tab: 5,
url: '/pages/users/user_return_list/index?isT=1'
});
}).catch(err => {
return this.$util.Tips({
title: err
});
})
},
/**
* 删除图片
*
*/
DelPic: function(e) {
let index = e,
that = this,
pic = this.refund_reason_wap_img[index];
that.refund_reason_wap_img.splice(index, 1);
that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
},
/**
* 上传文件
*
*/
uploadpic: function() {
let that = this;
this.$util.uploadImageOne('upload/image', function(res) {
that.refund_reason_wap_img.push(res.data.url);
that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
});
},
/**
* 获取订单详情
*
*/
getOrderInfo: function() {
let that = this;
refundOrderDetail(that.orderId).then(res => {
that.$set(that, 'orderInfo', res.data);
that.expressList = res.data.express_list;
that.refundInfo.id = res.data.id;
});
},
bindPickerChange(e) {
this.$set(this, 'seIndex', e.detail.value);
}
}
}
</script>
<style scoped lang="scss">
.apply-return .list {
background-color: #fff;
margin-top: 18rpx;
}
.apply-return .list .item {
margin-left: 30rpx;
padding-right: 30rpx;
min-height: 90rpx;
border-bottom: 1rpx solid #eee;
font-size: 30rpx;
color: #333;
.input{
text-align: right;
}
}
.apply-return .list .item .num {
color: #282828;
width: 427rpx;
text-align: right;
}
.apply-return .list .item .num .picker .reason {
width: 385rpx;
}
.apply-return .list .item .num .picker .iconfont {
color: #666;
font-size: 30rpx;
margin-top: 2rpx;
}
.apply-return .list .item.textarea {
padding: 30rpx 30rpx 30rpx 0;
}
.apply-return .list .item textarea {
height: 100rpx;
font-size: 30rpx;
}
.apply-return .list .item .placeholder {
color: #bbb;
font-size: 30rpx;
text-align: right;
}
.apply-return .list .item .title {
height: 95rpx;
width: 100%;
}
.apply-return .list .item .title .tip {
font-size: 30rpx;
color: #bbb;
}
.apply-return .list .item .upload {
padding-bottom: 36rpx;
}
.apply-return .list .item .upload .pictrue {
margin: 22rpx 23rpx 0 0;
width: 156rpx;
height: 156rpx;
position: relative;
font-size: 24rpx;
color: #bbb;
}
.apply-return .list .item .upload .pictrue:nth-of-type(4n) {
margin-right: 0;
}
.apply-return .list .item .upload .pictrue image {
width: 100%;
height: 100%;
border-radius: 3rpx;
}
.apply-return .list .item .upload .pictrue .icon-guanbi1 {
position: absolute;
font-size: 45rpx;
top: -10rpx;
right: -10rpx;
}
.apply-return .list .item .upload .pictrue .icon-icon25201 {
color: #bfbfbf;
font-size: 50rpx;
}
.apply-return .list .item .upload .pictrue:nth-last-child(1) {
border: 1rpx solid #ddd;
box-sizing: border-box;
}
.apply-return .returnBnt {
font-size: 32rpx;
color: #fff;
width: 690rpx;
height: 86rpx;
border-radius: 50rpx;
text-align: center;
line-height: 86rpx;
margin: 43rpx auto;
}
.goodsStyle .text .name {
align-self: flex-start;
}
.list /deep/ .uni-input-input {
text-align: right;
}
<template>
<view :style="colorStyle">
<form @submit="subRefund">
<view class='apply-return'>
<view class='goodsStyle acea-row row-between' v-for="(item,index) in orderInfo.cart_info" :key="index">
<view class='pictrue'>
<image :src='item.productInfo.attrInfo?item.productInfo.attrInfo.image:item.productInfo.image'>
</image>
</view>
<view class='text acea-row row-between'>
<view class='name line2'>{{item.productInfo.store_name}}</view>
<view class='money'>
<view>{{$t(`¥`)}}{{item.truePrice }}</view>
<view class='num'>x{{item.cart_num }}</view>
</view>
</view>
</view>
<view class='list'>
<view class='item acea-row row-between-wrapper' v-if="expressList.length">
<view>{{$t(`快递公司`)}}</view>
<picker class='num' @change="bindPickerChange" :value="seIndex" :range="expressList"
range-key="name">
<view class="picker acea-row row-between-wrapper">
<view class='reason'>{{expressList[seIndex].name}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
</picker>
</view>
<view class='item acea-row row-between-wrapper'>
<view>{{$t(`快递单号`)}}</view>
<input class="input" type="text" :placeholder="$t(`填写快递单号`)" placeholder-class='placeholder'
v-model="refundInfo.refund_express" />
</view>
<view class='item acea-row row-between-wrapper'>
<view>{{$t(`联系电话`)}}</view>
<input class="input" type="number" :placeholder="$t(`请输入手机号`)" placeholder-class='placeholder'
v-model="refundInfo.refund_phone" />
</view>
<view class='item textarea acea-row row-between'>
<view>{{$t(`备注说明`)}}</view>
<textarea :placeholder='$t(`填写备注信息,100字以内`)' class='num'
v-model="refundInfo.refund_explain"></textarea>
</view>
<view class='item acea-row row-between'>
<view class='title acea-row row-between-wrapper'>
<view>{{$t(`上传图片`)}}</view>
<view class='tip'>{{$t(`最多可上传3张`)}}</view>
</view>
<view class='upload acea-row row-middle'>
<view class='pictrue' v-for="(item,index) in refund_reason_wap_img" :key="index">
<image :src='item'></image>
<view class='iconfont icon-guanbi1 font-num' @tap='DelPic(index)'></view>
</view>
<view class='pictrue acea-row row-center-wrapper row-column' @tap='uploadpic'
v-if="refund_reason_wap_img.length < 3">
<text class='iconfont icon-icon25201'></text>
<view>{{$t(`上传图片`)}}</view>
</view>
</view>
</view>
</view>
<button class='returnBnt bg-color' form-type="submit">{{$t(`提交`)}}</button>
</view>
</form>
</view>
</template>
<script>
import {
refundOrderDetail,
refundExpress
} from '@/api/order.js';
import {
toLogin
} from '@/libs/login.js';
import {
mapGetters
} from "vuex";
import colors from '@/mixins/color.js';
export default {
mixins: [colors],
data() {
return {
expressList: [],
orderInfo: {},
seIndex: 0,
refund_reason_wap_img: [],
refundInfo: {
refund_express: '',
refund_phone: '',
refund_explain: '',
id: '',
refund_express_name: '',
refund_img: ''
}
};
},
computed: mapGetters(['isLogin']),
watch: {
isLogin: {
handler: function(newV, oldV) {
if (newV) {
this.getOrderInfo();
}
},
deep: true
}
},
onLoad(options) {
this.orderId = options.orderId;
if (this.isLogin) {
this.getOrderInfo();
} else {
toLogin();
}
},
methods: {
/**
* 申请退货
*/
subRefund: function(e) {
let that = this
if (!that.refundInfo.refund_express) return this.$util.Tips({
title: that.$t(`填写快递单号`)
});
if (!that.refundInfo.refund_phone) return this.$util.Tips({
title: that.$t(`请输入手机号`)
});
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(that.refundInfo.refund_phone)) return this.$util.Tips({
title: that.$t(`请输入正确的手机号码`)
});
that.refundInfo.refund_express_name = that.expressList[that.seIndex].name;
that.refundInfo.refund_img = that.refund_reason_wap_img.join(',');
refundExpress(that.refundInfo).then(res => {
return this.$util.Tips({
title: res.msg,
icon: 'success'
}, {
tab: 5,
url: '/pages/users/user_return_list/index?isT=1'
});
}).catch(err => {
return this.$util.Tips({
title: err
});
})
},
/**
* 删除图片
*
*/
DelPic: function(e) {
let index = e,
that = this,
pic = this.refund_reason_wap_img[index];
that.refund_reason_wap_img.splice(index, 1);
that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
},
/**
* 上传文件
*
*/
uploadpic: function() {
let that = this;
this.$util.uploadImageOne('upload/image', function(res) {
that.refund_reason_wap_img.push(res.data.url);
that.$set(that, 'refund_reason_wap_img', that.refund_reason_wap_img);
});
},
/**
* 获取订单详情
*
*/
getOrderInfo: function() {
let that = this;
refundOrderDetail(that.orderId).then(res => {
that.$set(that, 'orderInfo', res.data);
that.expressList = res.data.express_list;
that.refundInfo.id = res.data.id;
});
},
bindPickerChange(e) {
this.$set(this, 'seIndex', e.detail.value);
}
}
}
</script>
<style scoped lang="scss">
.apply-return .list {
background-color: #fff;
margin-top: 18rpx;
}
.apply-return .list .item {
margin-left: 30rpx;
padding-right: 30rpx;
min-height: 90rpx;
border-bottom: 1rpx solid #eee;
font-size: 30rpx;
color: #333;
.input {
text-align: right;
}
}
.apply-return .list .item .num {
color: #282828;
width: 427rpx;
text-align: right;
}
.apply-return .list .item .num .picker .reason {
width: 385rpx;
}
.apply-return .list .item .num .picker .iconfont {
color: #666;
font-size: 30rpx;
margin-top: 2rpx;
}
.apply-return .list .item.textarea {
padding: 30rpx 30rpx 30rpx 0;
}
.apply-return .list .item textarea {
height: 100rpx;
font-size: 30rpx;
}
.apply-return .list .item .placeholder {
color: #bbb;
font-size: 30rpx;
text-align: right;
}
.apply-return .list .item .title {
height: 95rpx;
width: 100%;
}
.apply-return .list .item .title .tip {
font-size: 30rpx;
color: #bbb;
}
.apply-return .list .item .upload {
padding-bottom: 36rpx;
}
.apply-return .list .item .upload .pictrue {
margin: 22rpx 23rpx 0 0;
width: 156rpx;
height: 156rpx;
position: relative;
font-size: 24rpx;
color: #bbb;
}
.apply-return .list .item .upload .pictrue:nth-of-type(4n) {
margin-right: 0;
}
.apply-return .list .item .upload .pictrue image {
width: 100%;
height: 100%;
border-radius: 3rpx;
}
.apply-return .list .item .upload .pictrue .icon-guanbi1 {
position: absolute;
font-size: 45rpx;
top: -10rpx;
right: -10rpx;
}
.apply-return .list .item .upload .pictrue .icon-icon25201 {
color: #bfbfbf;
font-size: 50rpx;
}
.apply-return .list .item .upload .pictrue:nth-last-child(1) {
border: 1rpx solid #ddd;
box-sizing: border-box;
}
.apply-return .returnBnt {
font-size: 32rpx;
color: #fff;
width: 690rpx;
height: 86rpx;
border-radius: 50rpx;
text-align: center;
line-height: 86rpx;
margin: 43rpx auto;
}
.goodsStyle .text .name {
align-self: flex-start;
}
.list /deep/ .uni-input-input {
text-align: right;
}
</style>

View File

@ -67,7 +67,7 @@
</view>
<view class="iconfont icon-fenxiang" @click="listenerActionSheet"></view>
</view>
<view class="introduce" v-text="storeInfo.store_name"></view>
<view class="introduce" v-text="storeInfo.store_name || ''"></view>
<view class="limit_good" v-if="storeInfo.limit_type > 0">
{{storeInfo.limit_type == 1 ? $t(`单次限购`) : $t(`永久限购`)}}{{storeInfo.limit_num}}{{$t(storeInfo.unit_name)}}
</view>

View File

@ -227,7 +227,9 @@
}
},
onReachBottom: function() {
this.userSpreadNewList();
if (this.teamCount > this.recordList.length) {
this.userSpreadNewList();
}
}
}
</script>
@ -370,7 +372,7 @@
.no-data {
background-color: #fff;
padding-bottom: 30rpx;
padding: 180rpx 0 300rpx;
padding: 180rpx 0 calc(100vh - 1030rpx);
.emptyBox {
text-align: center;