## v1.3.1 更新列表

1. 【修复】申请退款后积分等操作可能出现错误的问题
	2. 【修复】拼团支付可能出现支付错误的问题
	3. 【修复】退款申请后的订单流程优化和积分赠送的问题
	4. 【修复】回收站中的商品无法恢复的问题
	5. 【修复】一号通短信查询记录不完整的问题
	6. 【修复】用户管理批量加分组,标签的问题
	7. 【修复】积分日志搜索显示有误的问题
	8. 【修复】手动发送优惠券可能会出错的问题
	9. 【修复】核销订单创建在某种条件下会出错的问题
	10. 【修复】移动端商品详情,购物车等样式兼容问题
	11. 【修复】业务流程性的优化
This commit is contained in:
stivepeim
2021-01-19 10:16:45 +08:00
parent 4e42da0fc1
commit be34f57322
136 changed files with 19904 additions and 23329 deletions

View File

@@ -1,154 +0,0 @@
<template>
<view>
<view class='Popup' v-if='isShowAuth'>
<image :src='logoUrl'></image>
<view class='title'>授权提醒</view>
<view class='tip'>请授权头像等信息以便为您提供更好的服务</view>
<view class='bottom flex'>
<view class='item' @click='close'>随便逛逛</view>
<!-- #ifdef APP-PLUS -->
<button class='item grant' @click="setUserInfo">去授权</button>
<!-- #endif -->
<!-- #ifdef MP -->
<button class='item grant' type="primary" open-type="getPhoneNumber" lang="zh_CN" @getphonenumber="setUserInfo">去授权</button>
<!-- #endif -->
</view>
</view>
<view class='mask' v-if='isShowAuth' @click='close'></view>
</view>
</template>
<script>
const app = getApp();
import Cache from '../utils/cache';
import { getLogo } from '../api/public';
import { LOGO_URL } from '../config/cache';
import { mapGetters } from 'vuex';
import Routine from '../libs/routine';
export default {
name:'Authorize',
props:{
isAuto:{
type:Boolean,
default:true
},
isGoIndex:{
type:Boolean,
default:true
},
isShowAuth:{
type:Boolean,
default:false
}
},
data(){
return {
logoUrl:''
}
},
computed:mapGetters(['isLogin','userInfo']),
watch:{
isLogin(n){
n === true && this.$emit('onLoadFun',this.userInfo);
}
},
created() {
this.getLogoUrl();
this.setAuthStatus();
},
methods:{
setAuthStatus(){
Routine.authorize().then(res=>{
if(res.islogin === false)
this.setUserInfo();
else
this.$emit('onLoadFun',this.userInfo);
}).catch(res=>{
if (this.isAuto)
this.$emit('authColse',true);
})
},
getUserInfo(code){
console.log(456);
Routine.getUserInfo().then(res=>{
console.log(123);
console.log(res);
let userInfo = res.userInfo
userInfo.code = code;
userInfo.spread_spid = app.globalData.spid;//获取推广人ID
userInfo.spread_code = app.globalData.code;//获取推广人分享二维码ID
userInfo.avatar = userInfo.userInfo.avatarUrl;
userInfo.city = userInfo.userInfo.city;
userInfo.country = userInfo.userInfo.country;
userInfo.nickName = userInfo.userInfo.nickName;
userInfo.province = userInfo.userInfo.province;
userInfo.sex = userInfo.userInfo.gender;
Routine.authUserInfo(code,userInfo).then(res=>{
uni.hideLoading();
this.$emit('authColse',false);
this.$emit('onLoadFun',this.userInfo);
}).catch(res=>{
uni.hideLoading();
uni.showToast({
title:res.msg,
icon:'none',
duration:2000
});
})
}).catch(res =>{
uni.hideLoading();
})
},
setUserInfo(e){
console.log('78878787');
console.log(e);
uni.showLoading({title:'正在登录中'});
if(e.detail.errMsg == "getPhoneNumber:ok"){
console.log('授权成功');
Routine.getCode().then(code=>{
console.log(code);
this.getUserInfo(code);
}).catch(res=>{
uni.hideLoading();
})
}
},
getLogoUrl(){
let that = this;
if (Cache.has(LOGO_URL)) {
this.logoUrl = Cache.get(LOGO_URL);
return;
}
getLogo().then(res=>{
that.logoUrl = res.data.logo_url
Cache.set(LOGO_URL,that.logoUrl);
})
},
close(){
let pages = getCurrentPages(), currPage = pages[pages.length - 1];
if(this.isGoIndex){
uni.switchTab({url:'/pages/index/index'});
} else {
this.$emit('authColse',false);
}
// if (currPage && currPage.isShowAuth != undefined){
// currPage.isShowAuth = true;
// }
},
}
}
</script>
<style scoped lang='scss'>
.Popup{width:500rpx;background-color:#fff;position:fixed;top:50%;left:50%;margin-left:-250rpx;transform:translateY(-50%);z-index:320;}
.Popup image{width:150rpx;height:150rpx;margin:-67rpx auto 0 auto;display:block;border: 8rpx solid #fff;border-radius: 50%}
.Popup .title{font-size:28rpx;color:#000;text-align:center;margin-top: 30rpx}
.Popup .tip{font-size:22rpx;color:#555;padding:0 24rpx;margin-top:25rpx;}
.Popup .bottom .item{width:50%;height:80rpx;background-color:#eeeeee;text-align:center;line-height:80rpx;font-size:24rpx;color:#666;margin-top:54rpx;}
.Popup .bottom .item.on{width: 100%}
.flex{display:flex;}
.Popup .bottom .item.grant{font-size:28rpx;color:#fff;font-weight:bold;background-color:#e93323;border-radius:0;padding:0;}
.mask{position:fixed;top:0;right:0;left:0;bottom:0;background-color:rgba(0,0,0,0.65);z-index:310;}
</style>

View File

@@ -9,16 +9,17 @@
<view class="pic-num">{{item.minPrice}}元可用</view>
</view>
<view class='text'>
<view class='condition line1'>
<span class='line-title' :class='item.isUse?"gray":""' v-if='item.type===0'>通用</span>
<span class='line-title' :class='item.isUse?"gray":""' v-else-if='item.type===1'>品类</span>
<span class='line-title' :class='item.isUse?"gray":""' v-else>商品</span>
<view class='condition line2'>
<span class='line-title' :class='item.isUse?"gray":""' v-if='item.useType===1'>通用</span>
<span class='line-title' :class='item.isUse?"gray":""' v-else-if='item.useType===3'>品类</span>
<span class='line-title' :class='item.isUse?"gray":""' v-else>商品</span>
<span>{{item.name}}</span>
</view>
<view class='data acea-row row-between-wrapper'>
<view>{{ item.receiveStartTime ? item.receiveStartTime + " ~ " : ""}}{{ item.receiveEndTime }}</view>
<view class='bnt gray' v-if="item.isUse">{{item.use_title || '已领取'}}</view>
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view>
<view v-if="item.day>0">领取后{{item.day}}天内可用</view>
<view v-else>{{ item.useStartTimeStr&& item.useEndTimeStr ? item.useStartTimeStr + " - " + item.useEndTimeStr : ""}}</view>
<view class='bnt gray' v-if="item.isUse">{{item.use_title || '领取'}}</view>
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view>
</view>
</view>
</view>

View File

@@ -1,173 +0,0 @@
<template>
<view>
<view class='coupon-list-window' :class='coupon.coupon==true?"on":""'>
<view class='title'>优惠券<text class='iconfont icon-guanbi' @click='close'></text></view>
<view class='coupon-list' v-if="coupon.list.length">
<view class='item acea-row row-center-wrapper' v-for="(item,index) in coupon.list" @click="getCouponUser(index,item)"
:key='index'>
<view class='money'>
<div>
<span class="num">{{ item.coupon_price }}</span>
</div>
<div class="pic-num">{{ item.use_min_price }}元可用</div>
</view>
<view class='text'>
<view class='condition line1'>
<span class="line-title" v-if="item.type === 0">通用劵</span>
<span class="line-title" v-else-if="item.type === 1">品类券</span>
<span class="line-title" v-else>商品券</span>
<span>{{ item.title }}</span>
</view>
<view class='data acea-row row-between-wrapper'>
<view>{{ item.start_time ? item.start_time + "-" : ""}}{{ item.end_time }}</view>
<view class="iconfont icon-xuanzhong1 font-color-red" v-if="checked.id === item.id"></view>
<view v-else class="iconfont icon-weixuanzhong"></view v-else>
<!-- <view class='bnt gray' v-if="item.is_use">{{item.use_title || '已领取'}}</view>
<view class='bnt bg-color' v-else>{{coupon.statusTile || '立即领取'}}</view> -->
</view>
</view>
</view>
</view>
<!-- 无优惠券 -->
<view class='pictrue' v-else>
<image src='../../static/images/noCoupon.png'></image>
</view>
</view>
<view class='mask' catchtouchmove="true" :hidden='coupon.coupon==false' @click='close'></view>
</view>
</template>
<script>
import {
setCouponReceive
} from '@/api/api.js';
export default {
props: {
//打开状态 0=领取优惠券,1=使用优惠券
openType: {
type: Number,
default: 0,
},
coupon: {
type: Object,
default: function() {
return {};
}
},
checked:{
type: Object,
default: function() {
return {};
}
},
},
data() {
return {
};
},
methods: {
close: function() {
this.$emit('ChangCouponsClone');
},
getCouponUser: function(index, item) {
let that = this;
let list = that.coupon.list;
that.$emit('ChangCoupons', item);
// if (list[index].is_use == true && this.openType == 0) return true;
// switch (this.openType) {
// case 0:
// //领取优惠券
// setCouponReceive(id).then(res => {
// that.$emit('ChangCouponsUseState', index);
// that.$util.Tips({
// title: "领取成功"
// });
// that.$emit('ChangCoupons', list[index]);
// })
// break;
// case 1:
// that.$emit('ChangCoupons', index);
// break;
// }
}
}
}
</script>
<style scoped lang="scss">
.coupon-list-window {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #f5f5f5;
border-radius: 16rpx 16rpx 0 0;
z-index: 555;
transform: translate3d(0, 100%, 0);
transition: all .3s cubic-bezier(.25, .5, .5, .9);
}
.coupon-list-window.on {
transform: translate3d(0, 0, 0);
}
.coupon-list-window .title {
height: 124rpx;
width: 100%;
text-align: center;
line-height: 124rpx;
font-size: 32rpx;
font-weight: bold;
position: relative;
}
.coupon-list-window .title .iconfont {
position: absolute;
right: 30rpx;
top: 50%;
transform: translateY(-50%);
font-size: 35rpx;
color: #8a8a8a;
font-weight: normal;
}
.coupon-list-window .coupon-list {
margin: 0 0 50rpx 0;
height: 550rpx;
overflow: auto;
}
.coupon-list-window .pictrue {
width: 414rpx;
height: 336rpx;
margin: 0 auto 50rpx auto;
}
.coupon-list-window .pictrue image {
width: 100%;
height: 100%;
}
.coupon-list .item .money{
display: flex;
flex-direction: column;
justify-content: center;
.pic-num{
color: #ffffff;
font-size: 24rpx;
}
}
.condition .line-title{
width: 90rpx;
padding: 0 10rpx;
box-sizing: border-box;
background: rgba(255, 247, 247, 1);
border: 1px solid rgba(232, 51, 35, 1);
opacity: 1;
border-radius: 22rpx;
font-size: 20rpx;
color: #e83323;
margin-right: 12rpx;
}
</style>

View File

@@ -6,7 +6,8 @@
<view class='money font-color'><text class='num'>{{item.money}}</text></view>
<view class='text'>
<view class='name'>购物买{{item.minPrice}}{{item.money}}</view>
<view>{{item.receiveStartTime ? item.receiveStartTime+'~' : ''}}{{item.receiveEndTime}}</view>
<view v-if="item.day>0">领取后{{item.day}}天内可用</view>
<view v-else>{{item.useStartTimeStr&&item.useEndTimeStr ? item.useStartTimeStr+'~'+item.useEndTimeStr : ''}}</view>
</view>
</view>
</view>

View File

@@ -25,7 +25,8 @@
<script>
import {
orderPay
orderPay,
wechatOrderPay
} from '@/api/order.js';
export default {
props: {
@@ -69,36 +70,23 @@
});
uni.showLoading({
title: '支付中'
});
orderPay({
uni: that.order_id,
paytype: paytype,
// #ifdef MP
'from': 'routine',
// #endif
// #ifdef H5 || APP-PLUS
'from': this.$wechat.isWeixin() ? 'public' : 'weixinh5'
// #endif
// // #ifdef H5
// quitUrl: location.port ? location.protocol + '//' + location.hostname + ':' + location.port + '/pages/users/order_details/index?order_id=' + this.order_id : location.protocol + '//' + location.hostname +
// '/pages/users/order_details/index?order_id=' + that.order_id
// // #endif
});
wechatOrderPay({
orderNo: that.order_id,
payChannel: this.$wechat.isWeixin() ? 'public' : 'weixinh5',
payType: paytype
}).then(res => {
switch (paytype) {
let jsConfig = res.data.jsConfig;
switch (res.data.payType) {
case 'weixin':
if (res.data.result === undefined) return that.$util.Tips({
title: '缺少支付参数'
});
// #ifdef MP || APP-PLUS
let jsConfig = res.data.jsConfig;
// let packages = 'prepay_id=' + jsConfig.prepayId;
// #ifdef MP
uni.requestPayment({
timeStamp: jsConfig.timeStamp.toString(),
timeStamp: jsConfig.timeStamp,
nonceStr: jsConfig.nonceStr,
package: jsConfig.package,
package: jsConfig.packages,
signType: jsConfig.signType,
paySign: jsConfig.paySign,
success: function(res) {
success: function(ress) {
uni.hideLoading();
return that.$util.Tips({
title: '支付成功',
@@ -129,21 +117,25 @@
});
});
},
});
})
// #endif
// #ifdef H5
if (res.data.status === "WECHAT_PAY") {
let jsConfig = res.data.jsConfig;
//let packages = 'prepay_id=' + jsConfig.prepayId;
let datas = {
timestamp:jsConfig.timeStamp,
nonceStr:jsConfig.nonceStr,
package:jsConfig.package,
signType:jsConfig.signType,
paySign:jsConfig.paySign
};
that.$wechat.pay(datas)
.then(() => {
let datas = {
timestamp: jsConfig.timeStamp,
nonceStr: jsConfig.nonceStr,
package: jsConfig.packages,
signType: jsConfig.signType,
paySign: jsConfig.paySign
};
that.$wechat.pay(datas).then(res => {
if (res.errMsg == 'chooseWXPay:cancel') {
return that.$util.Tips({
title: '支付失败'
});
} else {
wechatQueryPayResult({
orderNo: that.order_id
}).then(res => {
return that.$util.Tips({
title: "支付成功",
icon: 'success'
@@ -152,24 +144,14 @@
action: 'pay_complete'
});
});
})
.catch(function() {
}).cache(errW => {
return that.$util.Tips({
title: '支付失败'
title: errW
});
});
} else {
uni.hideLoading();
location.replace(res.data.jsConfig.h5PayUrl);
return that.$util.Tips({
title: "支付成功",
icon: 'success'
}, () => {
that.$emit('onChangeFun', {
action: 'pay_complete'
});
});
}
})
}
})
// #endif
break;
case 'yue':
@@ -183,18 +165,132 @@
});
});
break;
case 'offline':
uni.hideLoading();
return that.$util.Tips({
title: '线下支付成功',
icon: 'success'
}, () => {
that.$emit('onChangeFun', {
action: 'pay_complete'
});
});
break;
case 'weixinh5':
uni.hideLoading();
location.replace(jsConfig.mwebUrl);
return that.$util.Tips({
title: "支付成功",
icon: 'success'
}, () => {
that.$emit('onChangeFun', {
action: 'pay_complete'
});
});
break;
}
// switch (paytype) {
// case 'weixin':
// if (res.data.result === undefined) return that.$util.Tips({
// title: '缺少支付参数'
// });
// // #ifdef MP || APP-PLUS
// let jsConfig = res.data.jsConfig;
// uni.requestPayment({
// timeStamp: jsConfig.timeStamp.toString(),
// nonceStr: jsConfig.nonceStr,
// package: jsConfig.package,
// signType: jsConfig.signType,
// paySign: jsConfig.paySign,
// success: function(res) {
// uni.hideLoading();
// return that.$util.Tips({
// title: '支付成功',
// icon: 'success'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_complete'
// });
// });
// },
// fail: function(e) {
// uni.hideLoading();
// return that.$util.Tips({
// title: '取消支付'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_fail'
// });
// });
// },
// complete: function(e) {
// uni.hideLoading();
// if (e.errMsg == 'requestPayment:cancel') return that.$util.Tips({
// title: '取消支付'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_fail'
// });
// });
// },
// });
// // #endif
// // #ifdef H5
// if (res.data.status === "WECHAT_PAY") {
// let jsConfig = res.data.jsConfig;
// //let packages = 'prepay_id=' + jsConfig.prepayId;
// let datas = {
// timestamp:jsConfig.timeStamp,
// nonceStr:jsConfig.nonceStr,
// package:jsConfig.package,
// signType:jsConfig.signType,
// paySign:jsConfig.paySign
// };
// that.$wechat.pay(datas)
// .then(() => {
// return that.$util.Tips({
// title: "支付成功",
// icon: 'success'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_complete'
// });
// });
// })
// .catch(function() {
// return that.$util.Tips({
// title: '支付失败'
// });
// });
// } else {
// uni.hideLoading();
// location.replace(res.data.jsConfig.h5PayUrl);
// return that.$util.Tips({
// title: "支付成功",
// icon: 'success'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_complete'
// });
// });
// }
// // #endif
// break;
// case 'yue':
// uni.hideLoading();
// return that.$util.Tips({
// title: '余额支付成功',
// icon: 'success'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_complete'
// });
// });
// break;
// case 'offline':
// uni.hideLoading();
// return that.$util.Tips({
// title: '线下支付成功',
// icon: 'success'
// }, () => {
// that.$emit('onChangeFun', {
// action: 'pay_complete'
// });
// });
// break;
// }
}).catch(err => {
uni.hideLoading();
return that.$util.Tips({

View File

@@ -93,7 +93,6 @@
return {};
},
mounted() {
console.log(this.attr)
},
methods: {
goCat:function(){

View File

@@ -12,7 +12,7 @@
<scroll-view scroll-x="true" style="white-space: nowrap; display: flex;align-items: center; height: 100%;" scroll-with-animation :scroll-left="tabLeft" show-scrollbar="false">
<view class="wrapper">
<view v-for="(item,index) in tabTitle[tabClick].child?tabTitle[tabClick].child:[]" :key="index" class="child-item" :class="{on:index == childIndex}" @click="childTab(tabClick,index)">
<image :src="item.extra" mode=""></image>
<image :src="item.extra" mode="" :style="{'background-color':item.extra?'none':'#f7f7f7'}"></image>
<view class="txt line1">{{item.name}}</view>
</view>
</view>

View File

@@ -11,10 +11,12 @@
<view class="start" :class="'star' + item.productScore"></view>
</view>
<view class="time">{{ item.createTime }}</view>
<!-- <view class="time">{{ item.createTime }} {{ item.suk }}</view> -->
<!-- <view class="time">{{ item.createTime }}</view>
<view class="time">{{ item.suk }}</view> -->
<!-- <view class="time">{{ item.createTime }} {{ item.sku }}</view> -->
</view>
</view>
<view class="time">规格{{ item.sku?item.sku:'无' }}</view>
<view class="evaluate-infor">{{ item.comment }}</view>
<view class="imgList acea-row" v-if="item.pics.length && item.pics[0]">
<view class="pictrue" v-for="(itemn, indexn) in item.pics" :key="indexn">

View File

@@ -648,7 +648,6 @@ const initPicker={
let bDate=new Date(tYear,curMonth,curDate).getTime();
let months=[];
if(bDate-aDate>0){
console.log(1)
for(let m=1;m<=12;m++){
months.push(forMatNum(m));
};

View File

@@ -312,7 +312,6 @@
},
defaultVal(val){
this.initData();
console.log(val)
},
areaCode(){
this.initData();