improve: 保底值

This commit is contained in:
From-wh 2023-03-31 15:56:38 +08:00
parent 5aa8fcdf8c
commit 4ee92f8403
10 changed files with 1003 additions and 989 deletions

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

@ -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

@ -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(`¥`)}}{{allPrice}}
{{$t(`¥`)}}{{allPrice || 0}}
</view>
</view>
<view class='item acea-row row-between-wrapper'

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

@ -66,7 +66,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>