Lee-0731
|
@ -0,0 +1,16 @@
|
||||||
|
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
|
||||||
|
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
|
||||||
|
"version": "0.0",
|
||||||
|
"configurations": [{
|
||||||
|
"default" :
|
||||||
|
{
|
||||||
|
"launchtype" : "local"
|
||||||
|
},
|
||||||
|
"mp-weixin" :
|
||||||
|
{
|
||||||
|
"launchtype" : "local"
|
||||||
|
},
|
||||||
|
"type" : "uniCloud"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
globalData:{
|
||||||
|
projectname:'', // 项目名称
|
||||||
|
lat:'', // 公司地址维度
|
||||||
|
lng:'' ,// 公司地址经度
|
||||||
|
hostapi:'https://laonon.scdxtc.cn' // 域名配置
|
||||||
|
},
|
||||||
|
// 优先于show方法
|
||||||
|
onLaunch: function() {
|
||||||
|
uni.login({
|
||||||
|
success: (res) => {
|
||||||
|
uni.request({
|
||||||
|
url: this.globalData.hostapi +'/api/user/login',
|
||||||
|
data:{code:res.code},
|
||||||
|
success: (result) => {
|
||||||
|
console.log(result,'登录信息')
|
||||||
|
if(result.data.code == 0) {
|
||||||
|
uni.setStorageSync('userId',result.data.account_id);
|
||||||
|
uni.setStorageSync('token',result.data.data.token);//缓存token
|
||||||
|
uni.setStorageSync('openid',result.data.data.openid);//缓存openid
|
||||||
|
uni.setStorageSync('expire',result.data.data.expire);//缓存失效时间(时间戳格式)
|
||||||
|
uni.setStorageSync('phone_active',result.data.data.phone_active);//是否授权手机号
|
||||||
|
uni.setStorageSync('is_active',result.data.data.is_active);//是否授权头像和昵称
|
||||||
|
uni.setStorageSync('invite_code',result.data.data.invite_code);//缓存邀请码
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onShow: function() {
|
||||||
|
|
||||||
|
},
|
||||||
|
onHide: function() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* 阿里巴巴矢量图标库 start */
|
||||||
|
@import url("./commons/icon-font.css");
|
||||||
|
/* 阿里巴巴矢量图标库 end */
|
||||||
|
|
||||||
|
/* 项目基础样式 start */
|
||||||
|
@import url("./commons/base.css");
|
||||||
|
/* 项目基础样式 end */
|
||||||
|
|
||||||
|
/* 项目页面样式 start */
|
||||||
|
@import url("./commons/style.css");
|
||||||
|
/* 项目页面样式 end */
|
||||||
|
|
||||||
|
/* 动画样式 start */
|
||||||
|
@import url("./commons/animate.min.css");
|
||||||
|
/* 动画样式 end */
|
||||||
|
|
||||||
|
@import url("./commons/loading.css");
|
||||||
|
</style>
|
||||||
|
|
|
@ -0,0 +1,177 @@
|
||||||
|
/* flex布局 */
|
||||||
|
.flex {display: flex;}
|
||||||
|
|
||||||
|
/* 盒模型 */
|
||||||
|
.border-box{box-sizing: border-box;}
|
||||||
|
|
||||||
|
/* 背景颜色 */
|
||||||
|
.background-white{background-color: #ffffff;}
|
||||||
|
.background-orange{background-color: #febf00;}
|
||||||
|
.background-grey{background-color: #484848;}
|
||||||
|
|
||||||
|
/* 圆角 */
|
||||||
|
.radius10{border-radius: 10rpx;}
|
||||||
|
.radius15{border-radius: 15rpx;}
|
||||||
|
.radius20{border-radius: 20rpx;}
|
||||||
|
.radius25{border-radius: 25rpx;}
|
||||||
|
.radius30{border-radius: 30rpx;}
|
||||||
|
.radius35{border-radius: 35rpx;}
|
||||||
|
.radius40{border-radius: 40rpx;}
|
||||||
|
.radius100{border-radius: 100%;}
|
||||||
|
|
||||||
|
/* 外边距 */
|
||||||
|
.mar-sxc10{margin: 10rpx auto;}
|
||||||
|
.mar-sxc15{margin: 15rpx auto;}
|
||||||
|
.mar-sxc20{margin: 20rpx auto;}
|
||||||
|
.mar-sxc25{margin: 25rpx auto;}
|
||||||
|
.mar-sxc30{margin: 30rpx auto;}
|
||||||
|
.mar-sx10{margin: 10rpx 0;}
|
||||||
|
.mar-sx15{margin: 15rpx 0;}
|
||||||
|
.mar-sx20{margin: 20rpx 0;}
|
||||||
|
.mar-sx25{margin: 25rpx 0;}
|
||||||
|
.mar-sx30{margin: 30rpx 0;}
|
||||||
|
.mar-zy10{margin: 0 10rpx;}
|
||||||
|
.mar-zy15{margin: 0 15rpx;}
|
||||||
|
.mar-zy20{margin: 0 20rpx;}
|
||||||
|
.mar-zy25{margin: 0 25rpx;}
|
||||||
|
.mar-zy30{margin: 0 30rpx;}
|
||||||
|
.mar-s10{margin-top: 10rpx;}
|
||||||
|
.mar-s15{margin-top: 15rpx;}
|
||||||
|
.mar-s20{margin-top: 20rpx;}
|
||||||
|
.mar-s25{margin-top: 25rpx;}
|
||||||
|
.mar-s30{margin-top: 30rpx;}
|
||||||
|
.mar-s35{margin-top: 35rpx;}
|
||||||
|
.mar-s40{margin-top: 40rpx;}
|
||||||
|
.mar-s50{margin-top: 50rpx;}
|
||||||
|
.mar-s60{margin-top: 60rpx;}
|
||||||
|
.mar-s70{margin-top: 70rpx;}
|
||||||
|
.mar-s80{margin-top: 80rpx;}
|
||||||
|
.mar-x10{margin-bottom: 10rpx;}
|
||||||
|
.mar-x15{margin-bottom: 15rpx;}
|
||||||
|
.mar-x20{margin-bottom: 20rpx;}
|
||||||
|
.mar-x25{margin-bottom: 25rpx;}
|
||||||
|
.mar-x30{margin-bottom: 30rpx;}
|
||||||
|
.mar-x35{margin-bottom: 35rpx;}
|
||||||
|
.mar-x40{margin-bottom: 40rpx;}
|
||||||
|
.mar-x50{margin-bottom: 50rpx;}
|
||||||
|
.mar-x60{margin-bottom: 60rpx;}
|
||||||
|
.mar-x70{margin-bottom: 70rpx;}
|
||||||
|
.mar-x80{margin-bottom: 80rpx;}
|
||||||
|
|
||||||
|
/* 内边距 */
|
||||||
|
.pad-all10{padding: 10rpx;}
|
||||||
|
.pad-all15{padding: 15rpx;}
|
||||||
|
.pad-all20{padding: 20rpx;}
|
||||||
|
.pad-all25{padding: 25rpx;}
|
||||||
|
.pad-all30{padding: 30rpx;}
|
||||||
|
.pad-all35{padding: 35rpx;}
|
||||||
|
.pad-all40{padding: 40rpx;}
|
||||||
|
|
||||||
|
.pad-sx10{padding: 10rpx 0;}
|
||||||
|
.pad-sx15{padding: 15rpx 0;}
|
||||||
|
.pad-sx20{padding: 20rpx 0;}
|
||||||
|
.pad-sx25{padding: 25rpx 0;}
|
||||||
|
.pad-sx30{padding: 30rpx 0;}
|
||||||
|
.pad-sx35{padding: 35rpx 0;}
|
||||||
|
.pad-sx40{padding: 40rpx 0;}
|
||||||
|
|
||||||
|
.pad-zy10{padding: 0 10rpx;}
|
||||||
|
.pad-zy15{padding: 0 15rpx;}
|
||||||
|
.pad-zy20{padding: 0 20rpx;}
|
||||||
|
.pad-zy25{padding: 0 25rpx;}
|
||||||
|
.pad-zy30{padding: 0 30rpx;}
|
||||||
|
.pad-zy35{padding: 0 35rpx;}
|
||||||
|
.pad-zy40{padding: 0 40rpx;}
|
||||||
|
|
||||||
|
.pad-x130{padding-bottom: 130rpx;}
|
||||||
|
.pad-x140{padding-bottom: 140rpx;}
|
||||||
|
.pad-x150{padding-bottom: 150rpx;}
|
||||||
|
.pad-x160{padding-bottom: 160rpx;}
|
||||||
|
.pad-x170{padding-bottom: 170rpx;}
|
||||||
|
.pad-x180{padding-bottom: 180rpx;}
|
||||||
|
.pad-x190{padding-bottom: 190rpx;}
|
||||||
|
|
||||||
|
/* 字体 */
|
||||||
|
.font18{ font-size: 24rpx;}
|
||||||
|
.font20{ font-size: 24rpx;}
|
||||||
|
.font24{ font-size: 24rpx;}
|
||||||
|
.font26{ font-size: 26rpx;}
|
||||||
|
.font28{ font-size: 28rpx;}
|
||||||
|
.font30{ font-size: 30rpx;}
|
||||||
|
.font32{ font-size: 32rpx;}
|
||||||
|
.font34{ font-size: 34rpx;}
|
||||||
|
.font36{ font-size: 36rpx;}
|
||||||
|
.font38{ font-size: 38rpx;}
|
||||||
|
.font40{ font-size: 40rpx;}
|
||||||
|
.font42{ font-size: 42rpx;}
|
||||||
|
.font44{ font-size: 44rpx;}
|
||||||
|
.font46{ font-size: 46rpx;}
|
||||||
|
.font48{ font-size: 48rpx;}
|
||||||
|
.font60{ font-size: 60rpx;}
|
||||||
|
|
||||||
|
.color-ff{ color: #ffffff;}
|
||||||
|
.color-00{ color: #000000;}
|
||||||
|
.color-48{ color: #484848;}
|
||||||
|
.color-66{ color: #666666;}
|
||||||
|
.color-99{ color: #999999;}
|
||||||
|
.color-orange{color: #febf00;}
|
||||||
|
.color-red{ color: #dd062f;}
|
||||||
|
.color-8c{ color: #8c8c9b;}
|
||||||
|
|
||||||
|
/* 文字行数 */
|
||||||
|
.clips1{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 1;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips2{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips3{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 3;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips4{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 4;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips5{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 5;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips6{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 6;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips7{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 7;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips8{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 8;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips9{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 9;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
.clips10{display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 10;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;word-break:break-all;}
|
||||||
|
|
||||||
|
image{
|
||||||
|
/* 照顾低版本浏览器 如果图片外面包含了链接会有边框的问题 */
|
||||||
|
border: 0;
|
||||||
|
/* 取消图片底侧有空白缝隙的问题 ① */
|
||||||
|
vertical-align: middle;
|
||||||
|
/* 取消图片底侧有空白缝隙的问题 ② */
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 去除滚动条 */
|
||||||
|
scroll-view ::-webkit-scrollbar {
|
||||||
|
display: none !important;
|
||||||
|
width: 0 !important;
|
||||||
|
height: 0 !important;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 圆圈中间一个原点 start */
|
||||||
|
.mo-item {
|
||||||
|
width: 30rpx;
|
||||||
|
height: 30rpx;
|
||||||
|
border-radius: 100%;
|
||||||
|
border: 2rpx solid #000000;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.active-item{
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border: 2rpx solid #FF0000;
|
||||||
|
}
|
||||||
|
.active-item::before{
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%,-50%);
|
||||||
|
width: 20rpx;
|
||||||
|
height: 20rpx;
|
||||||
|
border-radius: 100%;
|
||||||
|
background-color: #FF0000;
|
||||||
|
}
|
|
@ -0,0 +1,155 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "iconfont"; /* Project id 3180711 */
|
||||||
|
src: url('https://at.alicdn.com/t/font_3180711_atv5gkgm4w4.woff2?t=1651830764889') format('woff2'),
|
||||||
|
url('https://at.alicdn.com/t/font_3180711_atv5gkgm4w4.woff?t=1651830764889') format('woff'),
|
||||||
|
url('https://at.alicdn.com/t/font_3180711_atv5gkgm4w4.ttf?t=1651830764889') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-family: "iconfont" !important;
|
||||||
|
font-size: 16px;
|
||||||
|
font-style: normal;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-del:before {
|
||||||
|
content: "\e718";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-cut:before {
|
||||||
|
content: "\e609";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add:before {
|
||||||
|
content: "\e60a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-picture05:before {
|
||||||
|
content: "\e639";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-picture04:before {
|
||||||
|
content: "\e636";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-picture03:before {
|
||||||
|
content: "\e642";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-picture02:before {
|
||||||
|
content: "\e8bc";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-picture01:before {
|
||||||
|
content: "\e62c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-sandian:before {
|
||||||
|
content: "\e769";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-nothing-collection:before {
|
||||||
|
content: "\e610";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-nothing-more:before {
|
||||||
|
content: "\e624";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-nothing-data:before {
|
||||||
|
content: "\e60c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-address-check:before {
|
||||||
|
content: "\e6c2";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-address-unchecked:before {
|
||||||
|
content: "\e623";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-navigate-now:before {
|
||||||
|
content: "\e640";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-send-goods:before {
|
||||||
|
content: "\e601";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-payment:before {
|
||||||
|
content: "\e602";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-finish:before {
|
||||||
|
content: "\e63f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-take:before {
|
||||||
|
content: "\e649";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-refund:before {
|
||||||
|
content: "\e613";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-customer-black:before {
|
||||||
|
content: "\ec2e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-customer:before {
|
||||||
|
content: "\e628";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-check:before {
|
||||||
|
content: "\e61e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-del-white:before {
|
||||||
|
content: "\e61f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-screen:before {
|
||||||
|
content: "\e60b";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-search:before {
|
||||||
|
content: "\e653";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-caidan-mo:before {
|
||||||
|
content: "\e73e";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-renwu-mo:before {
|
||||||
|
content: "\e73f";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-shop-cart:before {
|
||||||
|
content: "\e73d";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-caidan-active:before {
|
||||||
|
content: "\e608";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-renwu-acitve:before {
|
||||||
|
content: "\e67c";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-home-mo:before {
|
||||||
|
content: "\e673";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-home-active:before {
|
||||||
|
content: "\e674";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-return:before {
|
||||||
|
content: "\e600";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-next:before {
|
||||||
|
content: "\e60e";
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
<template>
|
||||||
|
<view class="nothing">
|
||||||
|
<view class="nothing-box">
|
||||||
|
<image v-if="imgSrc!=''" class="nothing-img" :src="imgSrc" mode="aspectFill" lazy-load></image>
|
||||||
|
<i class="iconImg icon"
|
||||||
|
:class="['icon-nothing-more','icon-nothing-data','icon-nothing-collection'][currentType]"></i>
|
||||||
|
<view v-if="currentType!=1" class="nothing-con">{{content}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name:"nothing-page",
|
||||||
|
props:{
|
||||||
|
imgSrc:{ // 没有更多的图片
|
||||||
|
type:String,
|
||||||
|
default:''
|
||||||
|
},
|
||||||
|
content:{ // 没有更多的描述
|
||||||
|
type:String,
|
||||||
|
default:'暂无内容'
|
||||||
|
},
|
||||||
|
currentType:{ // 暂无更多 icon 图标
|
||||||
|
type:Number,
|
||||||
|
default: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.nothing{position: fixed;top: 0;bottom: 0;left: 0;right: 0;display: flex;justify-content: center;align-items: center;}
|
||||||
|
.nothing-box{display: flex;justify-content: center;flex-direction: column;align-items: center;}
|
||||||
|
.nothing-box .nothing-img{width: 470rpx;height: 270rpx;}
|
||||||
|
.iconImg {font-size: 280rpx;color: #999999;}
|
||||||
|
.nothing-con{font-size: 24rpx;font-family: PingFang SC;font-weight: 500;color: #999999;}
|
||||||
|
</style>
|
|
@ -0,0 +1,54 @@
|
||||||
|
<template>
|
||||||
|
<view :style="{
|
||||||
|
color: textColor,
|
||||||
|
fontSize: textFontSize,
|
||||||
|
fontWeight: `${ ifBold ? 'bold' : 0 }`,
|
||||||
|
textAlign: `${ ifCenter ? 'center' : 'left' }`,
|
||||||
|
padding: paddingStr
|
||||||
|
}">{{textStr}}</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name:"pitera",
|
||||||
|
props:{
|
||||||
|
// 内容
|
||||||
|
textStr: {
|
||||||
|
type:String,
|
||||||
|
default:'-- NO MORE --'
|
||||||
|
},
|
||||||
|
// 字体颜色
|
||||||
|
textColor: {
|
||||||
|
type:String,
|
||||||
|
default:'#999999'
|
||||||
|
},
|
||||||
|
// 字体大小
|
||||||
|
textFontSize: {
|
||||||
|
type: String,
|
||||||
|
default: '24rpx'
|
||||||
|
},
|
||||||
|
// 是否加粗
|
||||||
|
ifBold: {
|
||||||
|
type:Boolean,
|
||||||
|
default:false
|
||||||
|
},
|
||||||
|
// 是否居中
|
||||||
|
ifCenter: {
|
||||||
|
type:Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 内边距的值
|
||||||
|
paddingStr: {
|
||||||
|
type:String,
|
||||||
|
default:'20rpx'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,122 @@
|
||||||
|
<template>
|
||||||
|
<view class="share-coupon pad-all20 border-box">
|
||||||
|
<view class="coupon radius100 flex" @tap="goCoupon">
|
||||||
|
<view class="icon flex">
|
||||||
|
<image src="/static/icon/icon-coupon.png" mode="widthFix"></image>
|
||||||
|
<text class="font24 color-ff">领券</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="share radius100 flex" @tap="shareImgEv(spuId)">
|
||||||
|
<view class="icon flex">
|
||||||
|
<image src="/static/icon/icon-share.png" mode="widthFix"></image>
|
||||||
|
<text class="font24 color-ff">分享给好友</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { base64ToPath } from '@/jsFile/base64-src.js';
|
||||||
|
export default {
|
||||||
|
name:'share-coupon',
|
||||||
|
props:{
|
||||||
|
spuId:{
|
||||||
|
type:Number,
|
||||||
|
default:0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
footBarList:[], //底部列表
|
||||||
|
shareFlag:true, //是否可分享
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
// 领券
|
||||||
|
goCoupon(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/coupon/coupon?index=1`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
shareImgEv(id){
|
||||||
|
this.$toolAll.tools.showToast('分享图生成中...','none',10000);
|
||||||
|
if(this.shareFlag){
|
||||||
|
this.shareFlag = false;
|
||||||
|
this.$requst.post('/api/spu/share-img',{spu_id:id}).then(res=>{
|
||||||
|
console.log(base64ToPath(res.data.poster),'分享图片')
|
||||||
|
base64ToPath(res.data.poster).then(path=>{
|
||||||
|
uni.hideToast();
|
||||||
|
this.$toolAll.tools.showToast('正在调起分享...');
|
||||||
|
wx.showShareImageMenu({
|
||||||
|
path: path,
|
||||||
|
success:(res=>{
|
||||||
|
this.shareFlag = true;
|
||||||
|
}),
|
||||||
|
fail:(err=>{
|
||||||
|
this.shareFlag = true;
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} else {this.$toolAll.tools.showToast('请勿重复点击');}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.share-coupon{
|
||||||
|
width: 164rpx;
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
bottom: 188rpx;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
.coupon{
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 124rpx;
|
||||||
|
height: 124rpx;
|
||||||
|
background-color: #febf00;
|
||||||
|
box-shadow: 0 0 20rpx rgba(254,191,0,.4);
|
||||||
|
margin-bottom: 30rpx;
|
||||||
|
}
|
||||||
|
.coupon image{
|
||||||
|
width: 47rpx;
|
||||||
|
height: 47rpx;
|
||||||
|
}
|
||||||
|
.coupon text{
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 10rpx;
|
||||||
|
}
|
||||||
|
.share{
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 124rpx;
|
||||||
|
height: 124rpx;
|
||||||
|
background-color: #00b809;
|
||||||
|
box-shadow: 0 0 20rpx rgba(0,184,9,.4);
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
.share image{
|
||||||
|
width: 56rpx;
|
||||||
|
height: 46rpx;
|
||||||
|
}
|
||||||
|
.share text{
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 1.2;
|
||||||
|
margin-top: 8rpx;
|
||||||
|
transform: scale(.84);
|
||||||
|
}
|
||||||
|
.coupon .icon,
|
||||||
|
.share .icon{
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,415 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<!-- 全选 -->
|
||||||
|
<view class="change-all border-box background-white font26 flex" :style="{top:statusHeight+50+'px'}">
|
||||||
|
<label class="label flex" @tap="chooseAll"><radio :checked="allChoose" color="#febf00" style="transform: scale(.8);"/><text>全选</text></label>
|
||||||
|
<view class="del-cart" @tap="delShopEv">删除</view>
|
||||||
|
</view>
|
||||||
|
<view class="slide-list">
|
||||||
|
<view class="slide-item" v-for="(item, index) in listData" :key="index">
|
||||||
|
<view class="slide-item-li border-box background-white flex" @tap.stop="goDetail(item.spuId)">
|
||||||
|
<label class="radio" @tap.stop="chooseEv(index)"><radio :checked="item.ifcheck" color="#febf00"/></label>
|
||||||
|
<view class="shop-img radius30">
|
||||||
|
<image :src="item.image" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt">
|
||||||
|
<view class="shop-txt-top">
|
||||||
|
<view class="title font30 clips1">{{item.title}}</view>
|
||||||
|
<view class="specs font24 color-66 mar-sx10 clips2">规格:{{item.skuName}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt-bottom flex">
|
||||||
|
<!-- 商品价格 -->
|
||||||
|
<view class="price font30 color-red">¥{{item.price}}</view>
|
||||||
|
<!-- 商品数量 -->
|
||||||
|
<view class="num font24 flex">
|
||||||
|
<!-- 减数量 -->
|
||||||
|
<i class="icon icon-cut count-btn fon24 color-ff radius10 flex" @tap.stop="addCutEv(index,0)" :style="{backgroundColor: item.num==minNum || item.slide_x!=0 ? '#d3d3d3' : '#febf00'}"></i>
|
||||||
|
<!-- 实际数量 -->
|
||||||
|
<input class="input border-box radius10" type="digit" @blur="blurEv(index,$event)" @focus="focusEv(item.num)" :disabled="item.slide_x!=0" v-model="item.num">
|
||||||
|
<!-- 加数量 -->
|
||||||
|
<i class="icon icon-add count-btn fon24 color-ff radius10 flex" @tap.stop="addCutEv(index,1)" :style="{backgroundColor: item.num==maxNum || item.slide_x!=0 ? '#d3d3d3' : '#febf00'}"></i>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提交订单 -->
|
||||||
|
<view class="pull-footer-bg background-white pad-all20 radius30 border-box">
|
||||||
|
<view class="pull-footer background-grey radius30 pad-all20 border-box flex">
|
||||||
|
<view class="price color-ff">
|
||||||
|
<view class="font36">合计:¥{{allPrice>0?allPrice:'0'}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn font36 color-48 radius30 flex" :style="{background: !buyNum ? '#cccccc' : '#febf00'}" @tap="submitEv">{{allPrice==0 ? '去购物' : '立即购买'}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="listData.length!=0 && total==listData.length"><pitera textStr="—— 到底啦 ——"></pitera></view>
|
||||||
|
<nothing-page v-if="!ifLoading && !listData.length" content="您的购物车,空空如也(*^▽^*)"></nothing-page>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState,mapGetters,mapMutations } from 'vuex'//引入mapState
|
||||||
|
import pitera from '@/components/nothing/pitera';
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
pitera
|
||||||
|
},
|
||||||
|
name: 'cart-slide',
|
||||||
|
props: {
|
||||||
|
list: { //数据list
|
||||||
|
type: Array,
|
||||||
|
default () {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
button: { //按钮数据list
|
||||||
|
type: Array,
|
||||||
|
default () {
|
||||||
|
return [
|
||||||
|
// {title: '分享',background: '#c4c7cd'},
|
||||||
|
{title: '删除',background: 'linear-gradient(to right,#ff3771 0%,#fd5549 100%)'}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
customB:{
|
||||||
|
type:String,
|
||||||
|
default:'0'
|
||||||
|
},
|
||||||
|
skuId:{
|
||||||
|
type:String,
|
||||||
|
default:0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusHeight:uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
listData: [],
|
||||||
|
start_slide_x: 0,
|
||||||
|
btnWidth: 0,
|
||||||
|
startX: 0,
|
||||||
|
LastX: 0,
|
||||||
|
startTime: 0,
|
||||||
|
itemIndex: 0,
|
||||||
|
originalNum:0,//当前输入框原值
|
||||||
|
maxNum:99999,//最大可输入数量
|
||||||
|
minNum:1,//最小可输入数量
|
||||||
|
ifLoading:true,
|
||||||
|
page:1,
|
||||||
|
size:10,
|
||||||
|
total:0,
|
||||||
|
delIds:'', //删除ids
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
windowWidth() {
|
||||||
|
return uni.getSystemInfoSync().windowWidth;
|
||||||
|
},
|
||||||
|
// 总价及合计
|
||||||
|
allPrice() {
|
||||||
|
let allPrice = 0;
|
||||||
|
this.listData.forEach(item=>{
|
||||||
|
if(item.ifcheck) {
|
||||||
|
allPrice += parseFloat(item.price*item.num);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return this.$toolAll.tools.addXiaoShu(allPrice);
|
||||||
|
// return allPrice.toString();
|
||||||
|
},
|
||||||
|
|
||||||
|
// 要删除的数量
|
||||||
|
buyNum() {
|
||||||
|
let buyNum = 0;
|
||||||
|
this.listData.forEach(item=>{
|
||||||
|
if(item.ifcheck) {
|
||||||
|
buyNum += 1;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return buyNum;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 全选
|
||||||
|
allChoose() {
|
||||||
|
let ifAll = false;
|
||||||
|
if(this.listData.length) {
|
||||||
|
let temparr = this.listData.filter(item=>{return item.ifcheck==false})
|
||||||
|
temparr.length==0 ? ifAll = true : ifAll = false;
|
||||||
|
let delTemparr = this.listData.filter(item=>{return item.ifcheck==true})
|
||||||
|
let delArr = [];
|
||||||
|
delTemparr.forEach(item=>{
|
||||||
|
delArr.push(item.id)
|
||||||
|
})
|
||||||
|
// 删除购物车
|
||||||
|
this.delIds = delArr.join(',');
|
||||||
|
}
|
||||||
|
return ifAll
|
||||||
|
},
|
||||||
|
...mapState({
|
||||||
|
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.listData = this.list;
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取商品列表
|
||||||
|
getList(){
|
||||||
|
uni.showLoading();
|
||||||
|
this.total = 0;
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/shopping-cart',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
if(uni.getStorageSync('business_code')!==''){
|
||||||
|
this.vipPrice = true;
|
||||||
|
}
|
||||||
|
this.total = res.data.total;
|
||||||
|
console.log(res,'购物车列表')
|
||||||
|
if(this.page==1) this.listData = [];
|
||||||
|
if(res.data.list.length){
|
||||||
|
res.data.list.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id: item.id,
|
||||||
|
spuId:item.spu.id,
|
||||||
|
skuId:item.sku_id,
|
||||||
|
coding:item.sku.coding,
|
||||||
|
image: item.spu.spu_cover,
|
||||||
|
title: item.spu.spu_name,
|
||||||
|
content: item.spu.unit,
|
||||||
|
customTitle: item.sku.custom_title,
|
||||||
|
skuName: item.sku.sku_name,
|
||||||
|
slide_x: 0,
|
||||||
|
price:item.sku.sku_price,
|
||||||
|
num:item.num,
|
||||||
|
ifcheck:this.skuId==item.sku_id ? true : false,
|
||||||
|
ifExit:true,
|
||||||
|
ifShow:true,
|
||||||
|
}
|
||||||
|
this.listData.push(obj);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.ifLoading = false;
|
||||||
|
uni.hideLoading();
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 全选事件
|
||||||
|
chooseAll(){
|
||||||
|
let exit = this.listData.filter(item=>item.ifcheck==false);
|
||||||
|
if(exit.length){
|
||||||
|
this.listData.forEach(item=>item.ifcheck = true);
|
||||||
|
} else {
|
||||||
|
this.listData.forEach(item=>{item.ifcheck = false});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 去购物、去结算、删除
|
||||||
|
submitEv(){
|
||||||
|
if(this.allPrice==0) {
|
||||||
|
// 去购物
|
||||||
|
uni.reLaunch({
|
||||||
|
url:`/pages/index/index`
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// 去结算
|
||||||
|
let buyList = [];
|
||||||
|
this.listData.forEach(item=>{
|
||||||
|
if(item.ifcheck) {
|
||||||
|
let obj = {
|
||||||
|
sku_coding: item.coding,
|
||||||
|
num: item.num
|
||||||
|
}
|
||||||
|
buyList.push(obj);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
uni.setStorageSync('buyList',buyList);
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/cart/settlement'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选中事件
|
||||||
|
chooseEv(index) {
|
||||||
|
this.listData[index].ifcheck = !this.listData[index].ifcheck;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 数量加减事件
|
||||||
|
addCutEv(index,num) {
|
||||||
|
if(this.listData[index].slide_x==0){
|
||||||
|
if(num) {
|
||||||
|
// 加 ,如果当前商品数量不等于最大值
|
||||||
|
if(this.listData[index].num != this.maxNum) {
|
||||||
|
this.listData[index].num++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 减 ,如果当前商品数量大于最小值
|
||||||
|
if(this.listData[index].num > this.minNum) {
|
||||||
|
this.listData[index].num--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/shopping-cart-change-num',{id:this.listData[index].id,num:this.listData[index].num}).then(res=>{
|
||||||
|
if(res.code!=0){
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除商品
|
||||||
|
delShopEv(){
|
||||||
|
if(this.delIds!==''){
|
||||||
|
uni.showModal({
|
||||||
|
title: '提示',
|
||||||
|
content: '是否删除选中商品?',
|
||||||
|
success: (res)=> {
|
||||||
|
if (res.confirm) {
|
||||||
|
// 确认删除
|
||||||
|
this.confirmDel();
|
||||||
|
} else if (res.cancel) {
|
||||||
|
console.log('用户点击取消');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 确认删除
|
||||||
|
confirmDel(){
|
||||||
|
this.$requst.post('/api/order/shopping-cart-del',{ids:this.delIds.toString()}).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
this.$toolAll.tools.showToast('删除成功');
|
||||||
|
// this.getList();
|
||||||
|
if(this.listData.length){
|
||||||
|
this.listData.forEach((item,index)=>{
|
||||||
|
if(item.ifcheck){
|
||||||
|
this.listData.splice(index,1);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
this.$store.commit('setNum', this.listData.length);
|
||||||
|
this.totalPrice();
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 计算总价
|
||||||
|
totalPrice() {
|
||||||
|
let totalPrice = 0;
|
||||||
|
this.listData.forEach(item=>{
|
||||||
|
totalPrice += parseFloat(item.price*item.num);
|
||||||
|
})
|
||||||
|
totalPrice = this.$toolAll.tools.addXiaoShu(totalPrice);
|
||||||
|
this.$store.commit('setPrice', totalPrice);
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查看商品详情
|
||||||
|
goDetail(id) {
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/shop-detail/shop-detail?id=${id}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 输入框获取焦点事件
|
||||||
|
focusEv(num) {
|
||||||
|
// 储存当前商品的原始数值
|
||||||
|
this.originalNum = num;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 输入框失去焦点事件
|
||||||
|
blurEv(index,e) {
|
||||||
|
// 失去焦点时,获取当前输入框里的数值
|
||||||
|
let currentNum = e.detail.value*1;
|
||||||
|
// 如果当前输入框的值不等于0或空,并且当前输入框的值大于最大值,当前商品的数量 = 最大值, 否则为当前输入框输入的值
|
||||||
|
this.listData[index].num = currentNum ? currentNum > this.maxNum ? this.maxNum : currentNum : this.originalNum;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.slide-list{
|
||||||
|
margin-top: 20rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li{
|
||||||
|
align-items: center;
|
||||||
|
width: calc(100% - 40rpx);
|
||||||
|
padding: 30rpx 0;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-bottom: 2rpx solid #eaeaea;
|
||||||
|
}
|
||||||
|
.slide-item-li .radio>radio{
|
||||||
|
transform: scale(.8);
|
||||||
|
margin-left: -5rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-img{
|
||||||
|
width: 194rpx;
|
||||||
|
height: 194rpx;
|
||||||
|
margin: 0 24rpx 0 6rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-img image{
|
||||||
|
width: 100%;
|
||||||
|
min-height: 194rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt{
|
||||||
|
width: calc(100% - 264rpx);
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-top{
|
||||||
|
min-height: 134rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-top .title{
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-top .specs{
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-bottom{
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 50rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-bottom .price{
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-bottom .num{
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 170rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-bottom .num>.count-btn{
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
}
|
||||||
|
.slide-item-li .shop-txt-bottom .num>.input{
|
||||||
|
width: 78rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
border: 2rpx solid #d3d3d3;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.change-all{
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: calc(100% - 40rpx);
|
||||||
|
height: 80rpx;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-bottom: 2rpx solid #eaeaea;
|
||||||
|
position: sticky;
|
||||||
|
left: 0;
|
||||||
|
z-index: 9;
|
||||||
|
}
|
||||||
|
.change-all .label{
|
||||||
|
align-items: center;
|
||||||
|
margin-left: -5rpx;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,175 @@
|
||||||
|
<template>
|
||||||
|
<view class="status-box" :style="{marginBottom: marginBottom}">
|
||||||
|
<!-- 网络、电量栏 -->
|
||||||
|
<view :style="{height: statusBarHeight+'px',background: backgroudColor}"></view>
|
||||||
|
<!-- 头部状态栏 -->
|
||||||
|
<view class="status-nav flex" :style="{background: backgroudColor,height:navBarHeight}">
|
||||||
|
<!-- 返回键 -->
|
||||||
|
<view class="left-box flex" @tap="backEv" v-if="ifReturn" :style="{height: navBarHeight}">
|
||||||
|
<slot name="leftcontent">
|
||||||
|
<i class="icon icon-return" style="font-size: 38rpx;" :style="{color: returnColor}"></i>
|
||||||
|
</slot>
|
||||||
|
</view>
|
||||||
|
<!-- 标题 -->
|
||||||
|
<view class="tab-title" :style="{color: titleColor,justifyContent: ifCenter ? 'center' : '',padding: ifCenter ? '0px' : `${ifReturn ? '0 38' : '0 15'}px`}">
|
||||||
|
<view class="title-box" :class="['','clips1','clips2'][clipNumber*1]" :style="{maxWidth: ifCenter ? '360rpx' : '70%'}">
|
||||||
|
<!-- 有网络 -->
|
||||||
|
<view v-if="ifTitle && ifNet">{{navBarTitle}}</view>
|
||||||
|
<!-- 无网络 -->
|
||||||
|
<view v-if="!ifNet">{{netText}}<text @tap="refreshEv" style="color: #3875F6;margin-left: 20rpx;">刷新</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 右侧图标 -->
|
||||||
|
<view class="right-box flex" :style="{height: navBarHeight}">
|
||||||
|
<slot name="rightcontent"></slot>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'status-nav',
|
||||||
|
props: {
|
||||||
|
//状态栏、导航栏背景颜色
|
||||||
|
backgroudColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#FFFFFF'
|
||||||
|
},
|
||||||
|
// 默认导航栏高度
|
||||||
|
navBarHeight: {
|
||||||
|
type: String,
|
||||||
|
default: '50px'
|
||||||
|
},
|
||||||
|
//是否显示返回键
|
||||||
|
ifReturn: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 返回键颜色
|
||||||
|
returnColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#000000'
|
||||||
|
},
|
||||||
|
//是否显示标题
|
||||||
|
ifTitle: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 导航栏标题
|
||||||
|
navBarTitle: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
// 标题最多几行显示
|
||||||
|
clipNumber: {
|
||||||
|
type: String,
|
||||||
|
default: '1'
|
||||||
|
},
|
||||||
|
//标题颜色
|
||||||
|
titleColor: {
|
||||||
|
type: String,
|
||||||
|
default: '#000000'
|
||||||
|
},
|
||||||
|
// 标题是否居中
|
||||||
|
ifCenter: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
// 底部距离内容多高
|
||||||
|
marginBottom: {
|
||||||
|
type: String,
|
||||||
|
default: '20rpx'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
ifNet: true, // 是否有网络
|
||||||
|
netText: '当前无网络',
|
||||||
|
netTimer: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// 网络监测
|
||||||
|
this.$toolAll.tools.networkStatus();
|
||||||
|
// 获取当前页面路径
|
||||||
|
this.$toolAll.tools.obtainPagePath();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.ifNet = uni.getStorageSync('isNet');
|
||||||
|
}, 500)
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 刷新网络事件
|
||||||
|
refreshEv() {
|
||||||
|
this.netText = '正在刷新...';
|
||||||
|
let outTime = 0; //十秒超时
|
||||||
|
this.netTimer = setInterval(() => {
|
||||||
|
outTime++;
|
||||||
|
this.$toolAll.tools.networkStatus();
|
||||||
|
if (uni.getStorageSync('isNet')) {
|
||||||
|
clearInterval(this.netTimer);
|
||||||
|
this.ifNet = true;
|
||||||
|
}
|
||||||
|
if (outTime == 10) {
|
||||||
|
clearInterval(this.netTimer);
|
||||||
|
this.netText = '刷新失败';
|
||||||
|
outTime = 0;
|
||||||
|
}
|
||||||
|
}, 1000)
|
||||||
|
},
|
||||||
|
//返回事件
|
||||||
|
backEv() {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 1,
|
||||||
|
fail: () => {
|
||||||
|
uni.reLaunch({
|
||||||
|
url: '/pages/tabbar/index/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.status-box {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-nav {
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.left-box {
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: absolute;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-box {
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
padding: 0 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-title {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 36rpx;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-title .title-box {
|
||||||
|
margin-top: -4rpx;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,156 @@
|
||||||
|
<template>
|
||||||
|
<view class="tabbar border-box pad-sx40 background-white pad-zy20 flex" v-if="isLoading">
|
||||||
|
<view class="content background-grey border-box color-ff flex">
|
||||||
|
<view class="nav flex" @tap="chooseFootTab(index)" v-for="(item,index) in footBarList" :key="index" v-if="current == index">
|
||||||
|
<image :style="{width:[39,32][index]+'rpx',height:[40,38][index]+'rpx'}" :src="item.iconPath" mode="widthFix"></image>
|
||||||
|
<view class="title fon24" :class="current==index ? 'active' : ''">{{item.title}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="price font60">
|
||||||
|
<text>¥{{cartPrice>0?cartPrice:'0'}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="cart background-orange font36 color-48 flex" @tap="goCart">
|
||||||
|
<text>购物车</text>
|
||||||
|
<view class="amount font26" v-if="cartNum*1 <= 99">
|
||||||
|
(<text>{{cartNum}}</text>)
|
||||||
|
</view>
|
||||||
|
<view class="amount font26" v-if="cartNum*1 > 99">
|
||||||
|
(<text>99</text>)
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
import { mapState } from 'vuex'; //引入mapState
|
||||||
|
export default {
|
||||||
|
name:'tabbar',
|
||||||
|
props:{
|
||||||
|
// 当前选中项
|
||||||
|
current:{
|
||||||
|
type:String,
|
||||||
|
default:'1'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
footBarList:[], //底部列表
|
||||||
|
isLoading:false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// 获取当前页面路径
|
||||||
|
this.$toolAll.tools.obtainPagePath();
|
||||||
|
// 缓存状态栏+标题栏的高度
|
||||||
|
const query = wx.createSelectorQuery().in(this)
|
||||||
|
query.select('.tabbar').boundingClientRect((rect) => {
|
||||||
|
this.$store.commit('footHeightEv',rect.height);
|
||||||
|
}).exec()
|
||||||
|
// 获取底部信息
|
||||||
|
this.getTabbarList();
|
||||||
|
},
|
||||||
|
computed:{
|
||||||
|
...mapState({
|
||||||
|
cartNum: state=> state.moduleA.cartNum,
|
||||||
|
cartPrice: state=> state.moduleA.cartPrice
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
methods:{
|
||||||
|
// 获取底部信息
|
||||||
|
getTabbarList(){
|
||||||
|
this.$requst.get('/api/index/mini-program-setting').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'底部信息')
|
||||||
|
let tabbarArr = [];
|
||||||
|
res.data.footBar.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
iconPath:this.$hostHttp+item.icon,
|
||||||
|
title:item.name,
|
||||||
|
}
|
||||||
|
tabbarArr.push(obj)
|
||||||
|
})
|
||||||
|
this.footBarList = tabbarArr;
|
||||||
|
// 查询购物车信息
|
||||||
|
getCartInfo();
|
||||||
|
this.isLoading = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 跳转tabbar
|
||||||
|
chooseFootTab(index){
|
||||||
|
if(index==0){
|
||||||
|
uni.reLaunch({url:'/pages/index/index'})
|
||||||
|
}else {
|
||||||
|
if(this.$toolAll.tools.judgeAuth()) {
|
||||||
|
// 已授权
|
||||||
|
switch (index){
|
||||||
|
case 1:
|
||||||
|
uni.reLaunch({url:'/pages/my/my'})
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 去购物车
|
||||||
|
goCart(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/cart/cart',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.tabbar{
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
padding: 20rpx 20rpx 40rpx;
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
align-items: center;
|
||||||
|
width: 70.5%;
|
||||||
|
height: 130rpx;
|
||||||
|
padding: 22rpx 7rpx;
|
||||||
|
border-radius: 30rpx 0 0 30rpx;
|
||||||
|
}
|
||||||
|
.content .nav{
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 144rpx;
|
||||||
|
height: 100%;
|
||||||
|
border-right: 2rpx solid #FFFFFF;
|
||||||
|
}
|
||||||
|
.nav>image{
|
||||||
|
margin-top: 7rpx;
|
||||||
|
}
|
||||||
|
.nav>.title{
|
||||||
|
width: 100%;
|
||||||
|
font-size: 24rpx;
|
||||||
|
line-height: 1.5;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.content .price{
|
||||||
|
width: calc(100% - 144rpx);
|
||||||
|
text-indent: 36rpx;
|
||||||
|
}
|
||||||
|
.cart{
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 29.5%;
|
||||||
|
height: 130rpx;
|
||||||
|
border-radius: 0 30rpx 30rpx 0;
|
||||||
|
}
|
||||||
|
.cart>.amount{
|
||||||
|
line-height: 2;
|
||||||
|
margin-left: 10rpx;
|
||||||
|
}
|
||||||
|
.cart>.amount text{
|
||||||
|
margin: 0 4rpx;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,201 @@
|
||||||
|
function getLocalFilePath(path) {
|
||||||
|
if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf(
|
||||||
|
'_downloads') === 0) {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
if (path.indexOf('file://') === 0) {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
if (path.indexOf('/storage/emulated/0/') === 0) {
|
||||||
|
return path
|
||||||
|
}
|
||||||
|
if (path.indexOf('/') === 0) {
|
||||||
|
var localFilePath = plus.io.convertAbsoluteFileSystem(path)
|
||||||
|
if (localFilePath !== path) {
|
||||||
|
return localFilePath
|
||||||
|
} else {
|
||||||
|
path = path.substr(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '_www/' + path
|
||||||
|
}
|
||||||
|
|
||||||
|
function dataUrlToBase64(str) {
|
||||||
|
var array = str.split(',')
|
||||||
|
return array[array.length - 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = 0
|
||||||
|
|
||||||
|
function getNewFileId() {
|
||||||
|
return Date.now() + String(index++)
|
||||||
|
}
|
||||||
|
|
||||||
|
function biggerThan(v1, v2) {
|
||||||
|
var v1Array = v1.split('.')
|
||||||
|
var v2Array = v2.split('.')
|
||||||
|
var update = false
|
||||||
|
for (var index = 0; index < v2Array.length; index++) {
|
||||||
|
var diff = v1Array[index] - v2Array[index]
|
||||||
|
if (diff !== 0) {
|
||||||
|
update = diff > 0
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return update
|
||||||
|
}
|
||||||
|
|
||||||
|
export function pathToBase64(path) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
if (typeof window === 'object' && 'document' in window) {
|
||||||
|
if (typeof FileReader === 'function') {
|
||||||
|
var xhr = new XMLHttpRequest()
|
||||||
|
xhr.open('GET', path, true)
|
||||||
|
xhr.responseType = 'blob'
|
||||||
|
xhr.onload = function() {
|
||||||
|
if (this.status === 200) {
|
||||||
|
let fileReader = new FileReader()
|
||||||
|
fileReader.onload = function(e) {
|
||||||
|
resolve(e.target.result)
|
||||||
|
}
|
||||||
|
fileReader.onerror = reject
|
||||||
|
fileReader.readAsDataURL(this.response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.onerror = reject
|
||||||
|
xhr.send()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var canvas = document.createElement('canvas')
|
||||||
|
var c2x = canvas.getContext('2d')
|
||||||
|
var img = new Image
|
||||||
|
img.onload = function() {
|
||||||
|
canvas.width = img.width
|
||||||
|
canvas.height = img.height
|
||||||
|
c2x.drawImage(img, 0, 0)
|
||||||
|
resolve(canvas.toDataURL())
|
||||||
|
canvas.height = canvas.width = 0
|
||||||
|
}
|
||||||
|
img.onerror = reject
|
||||||
|
img.src = path
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (typeof plus === 'object') {
|
||||||
|
plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
|
||||||
|
entry.file(function(file) {
|
||||||
|
var fileReader = new plus.io.FileReader()
|
||||||
|
fileReader.onload = function(data) {
|
||||||
|
resolve(data.target.result)
|
||||||
|
}
|
||||||
|
fileReader.onerror = function(error) {
|
||||||
|
reject(error)
|
||||||
|
}
|
||||||
|
fileReader.readAsDataURL(file)
|
||||||
|
}, function(error) {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
}, function(error) {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
|
||||||
|
wx.getFileSystemManager().readFile({
|
||||||
|
filePath: path,
|
||||||
|
encoding: 'base64',
|
||||||
|
success: function(res) {
|
||||||
|
resolve('data:image/png;base64,' + res.data)
|
||||||
|
},
|
||||||
|
fail: function(error) {
|
||||||
|
reject(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reject(new Error('not support'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function base64ToPath(base64) {
|
||||||
|
return new Promise(function(resolve, reject) {
|
||||||
|
if (typeof window === 'object' && 'document' in window) {
|
||||||
|
base64 = base64.split(',')
|
||||||
|
var type = base64[0].match(/:(.*?);/)[1]
|
||||||
|
var str = atob(base64[1])
|
||||||
|
var n = str.length
|
||||||
|
var array = new Uint8Array(n)
|
||||||
|
while (n--) {
|
||||||
|
array[n] = str.charCodeAt(n)
|
||||||
|
}
|
||||||
|
return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], {
|
||||||
|
type: type
|
||||||
|
})))
|
||||||
|
}
|
||||||
|
var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
|
||||||
|
if (extName) {
|
||||||
|
extName = extName[1]
|
||||||
|
} else {
|
||||||
|
reject(new Error('base64 error'))
|
||||||
|
}
|
||||||
|
var fileName = getNewFileId() + '.' + extName
|
||||||
|
if (typeof plus === 'object') {
|
||||||
|
var basePath = '_doc'
|
||||||
|
var dirPath = 'uniapp_temp'
|
||||||
|
var filePath = basePath + '/' + dirPath + '/' + fileName
|
||||||
|
if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime
|
||||||
|
.innerVersion)) {
|
||||||
|
plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
|
||||||
|
entry.getDirectory(dirPath, {
|
||||||
|
create: true,
|
||||||
|
exclusive: false,
|
||||||
|
}, function(entry) {
|
||||||
|
entry.getFile(fileName, {
|
||||||
|
create: true,
|
||||||
|
exclusive: false,
|
||||||
|
}, function(entry) {
|
||||||
|
entry.createWriter(function(writer) {
|
||||||
|
writer.onwrite = function() {
|
||||||
|
resolve(filePath)
|
||||||
|
}
|
||||||
|
writer.onerror = reject
|
||||||
|
writer.seek(0)
|
||||||
|
writer.writeAsBinary(dataUrlToBase64(base64))
|
||||||
|
}, reject)
|
||||||
|
}, reject)
|
||||||
|
}, reject)
|
||||||
|
}, reject)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var bitmap = new plus.nativeObj.Bitmap(fileName)
|
||||||
|
bitmap.loadBase64Data(base64, function() {
|
||||||
|
bitmap.save(filePath, {}, function() {
|
||||||
|
bitmap.clear()
|
||||||
|
resolve(filePath)
|
||||||
|
}, function(error) {
|
||||||
|
bitmap.clear()
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
}, function(error) {
|
||||||
|
bitmap.clear()
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
|
||||||
|
var filePath = wx.env.USER_DATA_PATH + '/' + fileName
|
||||||
|
wx.getFileSystemManager().writeFile({
|
||||||
|
filePath: filePath,
|
||||||
|
data: dataUrlToBase64(base64),
|
||||||
|
encoding: 'base64',
|
||||||
|
success: function() {
|
||||||
|
resolve(filePath)
|
||||||
|
},
|
||||||
|
fail: function(error) {
|
||||||
|
reject(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reject(new Error('not support'))
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
import requst from './requst.js';
|
||||||
|
import store from '@/store/index.js'
|
||||||
|
|
||||||
|
// 查询轮播位置
|
||||||
|
export function slidePosition(data) {
|
||||||
|
return requst.get("/api/common/slide-positions");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询购物车信息
|
||||||
|
export function getCartInfo(){
|
||||||
|
return requst.get('/api/user/info').then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
let cartObj = res.data.shopping_cart_info;
|
||||||
|
store.commit('setNum', cartObj.count)
|
||||||
|
store.commit('setPrice', cartObj.total_price)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,195 @@
|
||||||
|
// 清理所有缓存并前往登录授权页
|
||||||
|
const goLogin = () => {
|
||||||
|
uni.clearStorageSync();
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/login/login'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let flag = true;
|
||||||
|
// 刷新token并跳转到当前页面
|
||||||
|
var authTimer = null;
|
||||||
|
const refreshTokenPage = () => {
|
||||||
|
clearTimeout(authTimer);
|
||||||
|
// 获取当前页面路径
|
||||||
|
let currentRoutes = getCurrentPages(); // 获取当前打开过的页面路由数组
|
||||||
|
let currentRoute = currentRoutes[currentRoutes.length - 1].route //获取当前页面路由
|
||||||
|
let currentParam = currentRoutes[currentRoutes.length - 1].options; //获取路由参数
|
||||||
|
// 拼接参数
|
||||||
|
let param = ''
|
||||||
|
for (let key in currentParam) {
|
||||||
|
param += '?' + key + '=' + currentParam[key]
|
||||||
|
}
|
||||||
|
let localRoute = '/'+ currentRoute + param;
|
||||||
|
if(localRoute !== '/pages/login/login'){
|
||||||
|
uni.login({
|
||||||
|
success: (res) => {
|
||||||
|
uni.request({
|
||||||
|
url:'https://laonon.scdxtc.cn/api/user/login',
|
||||||
|
data:{code:res.code},
|
||||||
|
success: (result) => {
|
||||||
|
if(result.data.code == 0) {
|
||||||
|
uni.setStorageSync('userId',result.data.account_id);
|
||||||
|
uni.setStorageSync('token',result.data.data.token);//缓存token
|
||||||
|
uni.setStorageSync('openid',result.data.data.openid);//缓存openid
|
||||||
|
uni.setStorageSync('expire',result.data.data.expire);//缓存失效时间(时间戳格式)
|
||||||
|
uni.setStorageSync('phone_active',result.data.data.phone_active);//是否授权手机号
|
||||||
|
uni.setStorageSync('is_active',result.data.data.is_active);//是否授权头像和昵称
|
||||||
|
uni.setStorageSync('invite_code',result.data.data.invite_code);//缓存邀请码
|
||||||
|
uni.reLaunch({ // 重新进入当前页面
|
||||||
|
url:localRoute
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
flag = true;
|
||||||
|
}
|
||||||
|
// 请求错误处理
|
||||||
|
const checkError = (e) => {
|
||||||
|
console.log('500接口错误');
|
||||||
|
// console.error("----接口错误----", e)
|
||||||
|
if (e.data) {
|
||||||
|
if (e.data.code) {
|
||||||
|
switch (Number(e.data.code)) {
|
||||||
|
case 500:
|
||||||
|
// 接口错误
|
||||||
|
console.log('500接口错误');
|
||||||
|
case 4003:
|
||||||
|
// 参数错误
|
||||||
|
console.log('4003参数错误');
|
||||||
|
break;
|
||||||
|
case 4004:
|
||||||
|
// 记录不存在
|
||||||
|
console.log('4004记录不存在');
|
||||||
|
break;
|
||||||
|
case 5001:
|
||||||
|
// xxx错误
|
||||||
|
console.log('5001xxx错误');
|
||||||
|
break;
|
||||||
|
case 5050:
|
||||||
|
// 服务器错误,请稍后重试
|
||||||
|
console.log('5050服务器错误,请稍后重试');
|
||||||
|
// 调用到登录页
|
||||||
|
goLogin();
|
||||||
|
break;
|
||||||
|
case 5051:
|
||||||
|
// 未知错误
|
||||||
|
console.log('5051未知错误');
|
||||||
|
break;
|
||||||
|
case 6001:
|
||||||
|
// token验证失败或已失效
|
||||||
|
console.log('6001token验证失败或已失效');
|
||||||
|
if(flag) {
|
||||||
|
flag = false;
|
||||||
|
// 调用刷新token事件并跳转到当前页面
|
||||||
|
refreshTokenPage();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装request的(GET、POST)请求
|
||||||
|
const request = (method, url, options) => {
|
||||||
|
let methods = '';
|
||||||
|
let headers = {};
|
||||||
|
switch (method) {
|
||||||
|
case 'get':
|
||||||
|
methods = 'GET'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+uni.getStorageSync('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'post':
|
||||||
|
methods = 'POST'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/json; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+uni.getStorageSync('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'postForm':
|
||||||
|
methods = 'POST'
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+uni.getStorageSync('token') || ''
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
uni.request({
|
||||||
|
url: `${getApp().globalData.hostapi}${url}`,
|
||||||
|
method: methods,
|
||||||
|
data: options,
|
||||||
|
header: headers,
|
||||||
|
success: res => {
|
||||||
|
console.log(`${url}返的结果===>`,res);
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
resolve(res.data);
|
||||||
|
if(res.data.code !== 0){
|
||||||
|
// 接口返回错误信息
|
||||||
|
checkError(res);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 接口返回错误信息
|
||||||
|
checkError(res);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: e => {
|
||||||
|
// 接口请求错误
|
||||||
|
checkError(e, reject);
|
||||||
|
},
|
||||||
|
complete: rest => {
|
||||||
|
// 是否成功,都会执行
|
||||||
|
console.log(rest,100);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 上传文件 封装请求
|
||||||
|
const uploadFile = (url, options) => {
|
||||||
|
let tempData = options || {}
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
uni.uploadFile({
|
||||||
|
url: `${getApp().globalData.hostapi}${url}`,
|
||||||
|
filePath: tempData.path,
|
||||||
|
name: 'image',
|
||||||
|
fileType:'image',
|
||||||
|
formData: tempData,
|
||||||
|
header: {
|
||||||
|
'Content-Type': 'multipart/form-data;charset=UTF-8',
|
||||||
|
'Authorization': 'Bearer '+uni.getStorageSync('token') || ''
|
||||||
|
},
|
||||||
|
success: res => {
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
let temp = JSON.parse(res.data)
|
||||||
|
if (temp.code == 0) {
|
||||||
|
resolve(temp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
get: (url, options) => {
|
||||||
|
return request('get', url, options)
|
||||||
|
},
|
||||||
|
// JOSN格式
|
||||||
|
post: (url, options) => {
|
||||||
|
return request('post', url, options)
|
||||||
|
},
|
||||||
|
// form-data格式
|
||||||
|
postForm: (url, options) => {
|
||||||
|
return request('postForm', url, options)
|
||||||
|
},
|
||||||
|
// 上传
|
||||||
|
upload: (url, options) => {
|
||||||
|
return uploadFile(url, options)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,627 @@
|
||||||
|
const tools = {
|
||||||
|
timer:'',
|
||||||
|
/**
|
||||||
|
* @description 埋点倒计时
|
||||||
|
*/
|
||||||
|
daoTime(){
|
||||||
|
let daoTime = uni.getStorageSync('daoTime')
|
||||||
|
if(daoTime==''){//初次判断倒计时是否为空
|
||||||
|
uni.setStorageSync('daoTime',60)//设置倒计时
|
||||||
|
daoTime = uni.getStorageSync('daoTime')
|
||||||
|
this.timer = setInterval(()=>{
|
||||||
|
uni.setStorageSync('daoTime',daoTime--)//设置倒计时
|
||||||
|
if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){
|
||||||
|
uni.removeStorageSync('daoTime')//清空倒计时
|
||||||
|
clearInterval(this.timer)//关闭倒计时
|
||||||
|
// console.log('上/报,埋点');
|
||||||
|
uni.removeStorageSync('maiList')//清空上报参数
|
||||||
|
this.daoTime()//重新倒计时
|
||||||
|
}
|
||||||
|
},1000)
|
||||||
|
} else {//继续当前倒计时倒计
|
||||||
|
this.timer = setInterval(()=>{
|
||||||
|
uni.setStorageSync('daoTime',daoTime--)//设置倒计时
|
||||||
|
if(uni.getStorageSync('daoTime')<=0 || uni.getStorageSync('maiList').length==5){
|
||||||
|
uni.removeStorageSync('daoTime')//清空倒计时
|
||||||
|
clearInterval(this.timer)//关闭倒计时
|
||||||
|
// console.log('上报,埋点');
|
||||||
|
uni.removeStorageSync('maiList')//清空上报参数
|
||||||
|
this.daoTime()//重新倒计时
|
||||||
|
}
|
||||||
|
},1000)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 关闭倒计时
|
||||||
|
*/
|
||||||
|
closeTimer(){
|
||||||
|
clearInterval(this.timer)
|
||||||
|
console.log('倒计时清空了');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 获取字符串中的数字
|
||||||
|
*/
|
||||||
|
obtainCount(str) {
|
||||||
|
return parseInt(str.replace(/[^0-9]/ig,""))
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 获取微信扫码后的结果,并解析
|
||||||
|
*/
|
||||||
|
unescapeEv(op) {
|
||||||
|
let str = unescape(op.q);
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 手机号验证
|
||||||
|
*/
|
||||||
|
isPhone:function(phone){
|
||||||
|
// 手机号正则表达式
|
||||||
|
let reg_tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
|
||||||
|
return !reg_tel.test(phone);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 电子邮箱验证
|
||||||
|
*/
|
||||||
|
isEmail(email){
|
||||||
|
let reg_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
|
||||||
|
return !reg_email.test(email);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 身份证验证
|
||||||
|
*/
|
||||||
|
isIdentity(identity) {
|
||||||
|
let reg_identity = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
|
||||||
|
return !reg_identity.test(identity);
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 手机号中间四位用"****"带替
|
||||||
|
*/
|
||||||
|
hideMPhone(phone){
|
||||||
|
return `${phone.substr(0, 3)}****${phone.substr(7)}`
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 手机号中间加字符
|
||||||
|
*/
|
||||||
|
phoneAddChat(phone,startNum=3,endNum=7,character=' '){
|
||||||
|
let phoneStr = phone;
|
||||||
|
phoneStr = phoneStr.replace(/\s*/g, "");
|
||||||
|
var phoneArr = [];
|
||||||
|
for(var i = 0; i < phoneStr.length; i++){
|
||||||
|
if (i==startNum||i==endNum){
|
||||||
|
phoneArr.push(`${character}` + phoneStr.charAt(i));
|
||||||
|
} else {
|
||||||
|
phoneArr.push(phoneStr.charAt(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
phone = phoneArr.join("");
|
||||||
|
return phone;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 昵称从第一个字开始,后面的都用"*"代替
|
||||||
|
*/
|
||||||
|
hideName(name,num){
|
||||||
|
return `${name.substr(0, 1)}****${name.substr(name.length-1)}`
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 金额转换各三位数使用英文","隔开
|
||||||
|
*/
|
||||||
|
changeNum(num){
|
||||||
|
if (num) {
|
||||||
|
// 针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了
|
||||||
|
/*
|
||||||
|
也可以这样想象,现在有一串数字字符串在你面前,如果让你给他家千分位的逗号的话,你是怎么来思考和操作的?
|
||||||
|
字符串长度为0/1/2/3时都不用添加
|
||||||
|
字符串长度大于3的时候,从右往左数,有三位字符就加一个逗号,然后继续往前数,直到不到往前数少于三位字符为止
|
||||||
|
*/
|
||||||
|
num = num+''; // 数字转换为字符串,数字是没有.length属性的
|
||||||
|
for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
|
||||||
|
num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3))
|
||||||
|
}
|
||||||
|
// 将数据(符号、整数部分、小数部分)整体组合返回
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 整数添加.00,小数就不添加
|
||||||
|
*/
|
||||||
|
addXiaoShu(num){
|
||||||
|
// console.log(num,'添加小数点后两位小数');
|
||||||
|
let str = num.toString();
|
||||||
|
str = str*1;
|
||||||
|
str = str.toFixed(2);
|
||||||
|
str = str+'';
|
||||||
|
return str.includes('.') ? str : str = num + '.00';
|
||||||
|
},
|
||||||
|
// type:+加、-减、*乘、/除
|
||||||
|
// len:小数后保留几位
|
||||||
|
/**
|
||||||
|
* @description 数字换算解决失精度问题
|
||||||
|
*/
|
||||||
|
operationEv(num1,num2,type,len=0){
|
||||||
|
// 将数字转化成字符串
|
||||||
|
num1 = num1.toString();
|
||||||
|
num2 = num2.toString();
|
||||||
|
// 获取小数点的位置
|
||||||
|
var index1 = num1.indexOf(".");
|
||||||
|
var index2 = num2.indexOf(".");
|
||||||
|
// 如果小数点存在,那么就再获取各自的小数位数
|
||||||
|
var ws1 = 0;
|
||||||
|
var ws2 = 0;
|
||||||
|
if(index1 != -1){
|
||||||
|
ws1 = num1.split(".")[1].length;
|
||||||
|
}
|
||||||
|
if(index2 != -1){
|
||||||
|
ws2 = num2.split(".")[1].length;
|
||||||
|
}
|
||||||
|
// 看谁的小数位数大,谁的小数位数小
|
||||||
|
var bigger = (ws1 > ws2) ? ws1 : ws2;
|
||||||
|
var smaller = (ws1 < ws2) ? ws1 : ws2;
|
||||||
|
// 计算得到需要补齐的0的个数
|
||||||
|
var zerosCount = bigger - smaller;
|
||||||
|
// 好了,现在不管三七二十,全部去除小数点
|
||||||
|
num1 = num1.replace(".","");
|
||||||
|
num2 = num2.replace(".","");
|
||||||
|
// 比较num1和num2谁大,比较方法就是看谁是smaller,是smaller的一方就补0
|
||||||
|
if(ws1 == smaller){
|
||||||
|
for (var i = 0; i < zerosCount; i++) {
|
||||||
|
num1 += "0";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (var i = 0; i < zerosCount; i++) {
|
||||||
|
num2 += "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 开始计算
|
||||||
|
var sum = "";
|
||||||
|
if(type=="+"){
|
||||||
|
// 加
|
||||||
|
sum = parseInt(num1) + parseInt(num2);
|
||||||
|
}
|
||||||
|
if(type=="-"){
|
||||||
|
// 减
|
||||||
|
sum = parseInt(num1) - parseInt(num2);
|
||||||
|
}
|
||||||
|
if(type=="*"){
|
||||||
|
// 乘
|
||||||
|
sum = parseInt(num1) * parseInt(num2);
|
||||||
|
}
|
||||||
|
if(type=="/"){
|
||||||
|
// 除
|
||||||
|
sum = parseInt(num1) / parseInt(num2);
|
||||||
|
}
|
||||||
|
// 根据较大的小数位数计算倍数
|
||||||
|
var beishu = 1;
|
||||||
|
for (var i = 0; i < bigger; i++) {
|
||||||
|
beishu = beishu*10;
|
||||||
|
}
|
||||||
|
sum = sum/beishu;
|
||||||
|
if(type=="*"){
|
||||||
|
switch (bigger){
|
||||||
|
case 1:
|
||||||
|
sum = sum / 10;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sum = sum / 100;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sum = sum / 1000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type=="/"){
|
||||||
|
switch (bigger){
|
||||||
|
case 1:
|
||||||
|
sum = sum * 10;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sum = sum * 100;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sum = sum * 1000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
len!=0 ? sum = sum.toFixed(len) : '';
|
||||||
|
return sum;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 金额输入框验证
|
||||||
|
*/
|
||||||
|
checkPrice(number,zong){
|
||||||
|
let reg = /^[0-9]*$/;//数字正则表达式
|
||||||
|
let newObj = {}
|
||||||
|
zong = parseInt(zong).toString()//取小数点左边的整数
|
||||||
|
if(!reg.test(number)){//不是数字时
|
||||||
|
newObj = {
|
||||||
|
len:zong.length,//动态设置长度
|
||||||
|
val:zong//动态设置值正整数的总金额
|
||||||
|
}
|
||||||
|
} else {//是数字时
|
||||||
|
newObj = {
|
||||||
|
len:zong.length,
|
||||||
|
val:number//动态设置当前输入的值
|
||||||
|
}
|
||||||
|
if(number*1 > zong*1){//输入的金额大于总金额
|
||||||
|
newObj.val = zong//赋值总金额
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newObj
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 文本提示
|
||||||
|
*/
|
||||||
|
showToast: function(msg, icon='none',time) {
|
||||||
|
// 弹框显示时间:默认2秒
|
||||||
|
var newTime = 2000
|
||||||
|
if (time) {newTime = time;}
|
||||||
|
return uni.showToast({
|
||||||
|
title: msg,
|
||||||
|
icon: icon,
|
||||||
|
duration:newTime
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 富文本处理
|
||||||
|
*/
|
||||||
|
escape2Html(str) {
|
||||||
|
var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' };
|
||||||
|
return str.replace(/&(lt|gt|nbsp|amp|quot|src);/ig, function (all, t) {
|
||||||
|
return arrEntities[t];
|
||||||
|
})
|
||||||
|
.replace('<section', '<div')
|
||||||
|
.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, (match, p1) => {
|
||||||
|
return `<img mode="widthFix" style="max-width:100%!important;height:auto" src='${p1.indexOf('http') > -1 ? p1 : 'https://laonon.scdxtc.cn' + p1}' />`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 检查网络状态
|
||||||
|
*/
|
||||||
|
networkStatus(){
|
||||||
|
uni.getNetworkType({
|
||||||
|
success: (res)=> {
|
||||||
|
console.log('当前网络状态:',res.networkType);//none:当前无网络连接
|
||||||
|
if(res.networkType=='none'){
|
||||||
|
uni.setStorageSync('isNet',false)
|
||||||
|
} else {
|
||||||
|
uni.setStorageSync('isNet',true);
|
||||||
|
// 微信小程序原生API性能优化
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
// 连网下,检测小程序是否有更新
|
||||||
|
this.checkUpdate();
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description app、小程序的检测版本并更新
|
||||||
|
*/
|
||||||
|
checkUpdate(){
|
||||||
|
// 检测app
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
|
||||||
|
// #endif
|
||||||
|
//检测小程序
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
var self = this;
|
||||||
|
// 获取小程序更新机制兼容
|
||||||
|
if (wx.canIUse('getUpdateManager')) {
|
||||||
|
const updateManager = wx.getUpdateManager();//1. 检查小程序是否有新版本发布
|
||||||
|
updateManager.onCheckForUpdate(function(res) {// 请求完新版本信息的回调
|
||||||
|
if (res.hasUpdate) {
|
||||||
|
//检测到新版本,需要更新,给出提示
|
||||||
|
wx.showModal({
|
||||||
|
title: '更新提示',
|
||||||
|
content: '检测到新版本,是否下载新版本并重启小程序?',
|
||||||
|
success: function(res) {
|
||||||
|
if (res.confirm) {
|
||||||
|
//2. 用户确定下载更新小程序,小程序下载及更新静默进行
|
||||||
|
self.downLoadAndUpdate(updateManager)
|
||||||
|
// 清除所有缓存
|
||||||
|
uni.clearStorage();
|
||||||
|
uni.clearStorageSync();
|
||||||
|
} else if (res.cancel) {
|
||||||
|
//用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
|
||||||
|
wx.showModal({
|
||||||
|
title: '温馨提示~',
|
||||||
|
content: '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~',
|
||||||
|
showCancel:false,//隐藏取消按钮
|
||||||
|
confirmText:"确定更新",//只保留确定更新按钮
|
||||||
|
success: function(res) {
|
||||||
|
if (res.confirm) {
|
||||||
|
//下载新版本,并重新应用
|
||||||
|
self.downLoadAndUpdate(updateManager)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else { // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
|
||||||
|
wx.showModal({
|
||||||
|
title: '提示',
|
||||||
|
content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
// 下载小程序新版本并重启应用
|
||||||
|
downLoadAndUpdate(updateManager){
|
||||||
|
var self = this;
|
||||||
|
wx.showLoading(); //静默下载更新小程序新版本
|
||||||
|
updateManager.onUpdateReady(function () {
|
||||||
|
wx.hideLoading(); //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||||||
|
updateManager.applyUpdate();
|
||||||
|
// 清除缓存
|
||||||
|
uni.clearStorageSync();
|
||||||
|
uni.clearStorage();
|
||||||
|
})
|
||||||
|
updateManager.onUpdateFailed(function () { // 新的版本下载失败
|
||||||
|
wx.showModal({
|
||||||
|
title: '已经有新版本了哟~',
|
||||||
|
content: '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 文本复制
|
||||||
|
*/
|
||||||
|
clickCopy(data){
|
||||||
|
uni.setClipboardData({
|
||||||
|
data: data,
|
||||||
|
success: ()=> {
|
||||||
|
uni.showToast({title: '复制成功',duration: 2000,icon: 'none'});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
authTimer:null,
|
||||||
|
/**
|
||||||
|
* @description 判断是否授权,没授权,前往登录页面授权
|
||||||
|
*/
|
||||||
|
judgeAuth(){
|
||||||
|
let auth = false;
|
||||||
|
clearTimeout(this.authTimer);
|
||||||
|
if(!uni.getStorageSync('token') || uni.getStorageSync('is_active') == 0) {
|
||||||
|
this.showToast('请授权登录');
|
||||||
|
this.authTimer = setTimeout(()=>{
|
||||||
|
uni.reLaunch({url:'/pages/login/login'});
|
||||||
|
},2000)
|
||||||
|
} else {
|
||||||
|
auth = true;
|
||||||
|
}
|
||||||
|
return auth;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 判断当前环境:清空日志输出
|
||||||
|
*/
|
||||||
|
currentContext(){
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
if(uni.getSystemInfoSync().platform != "devtools"){//devtools:开发版 值域为:ios、android、mac(3.1.10+)、windows(3.1.10+)、linux(3.1.10+)
|
||||||
|
// console.log = () =>{}
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
// 微信小程序原生API性能优化
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
let hInfo = wx.getAccountInfoSync();
|
||||||
|
// console.log(hInfo.envVersion);//develop:开发版 trial:体验版 release:正式版
|
||||||
|
if(hInfo.miniProgram.envVersion == "release"){
|
||||||
|
// 清除所有输出日志
|
||||||
|
console.log = () =>{};
|
||||||
|
// 开启埋点倒计时
|
||||||
|
// this.daoTime();
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 禁止小程序使用右上角分享
|
||||||
|
*/
|
||||||
|
disableShareEv(){
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
wx.hideShareMenu({
|
||||||
|
menus: ['shareAppMessage', 'shareTimeline']
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 获取当前页面完整url
|
||||||
|
*/
|
||||||
|
obtainPagePath(){
|
||||||
|
let pages = getCurrentPages();
|
||||||
|
// 获取纯页面路径
|
||||||
|
let route = pages[pages.length - 1].route;
|
||||||
|
uni.setStorageSync('url',route);
|
||||||
|
// 获取当前页面url,带参数
|
||||||
|
let routeParam = pages[pages.length - 1].$page.fullPath;
|
||||||
|
// console.log(routeParam.options,'获取当前url参数');
|
||||||
|
uni.setStorageSync('page-path-options',routeParam);
|
||||||
|
console.log(uni.getStorageSync('page-path-options'),'当前页面完整路径');
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 拨打电话
|
||||||
|
* @param {Number} phone
|
||||||
|
*/
|
||||||
|
countCustomer(phone=10086){
|
||||||
|
const res = uni.getSystemInfoSync();
|
||||||
|
if(res.platform=='ios'){
|
||||||
|
uni.makePhoneCall({
|
||||||
|
phoneNumber:phone*1,
|
||||||
|
success: () => {},
|
||||||
|
fail: () => {}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.showActionSheet({
|
||||||
|
itemList:[phone,'立即呼叫'],
|
||||||
|
itemColor:'#3875F6',
|
||||||
|
success: (res) => {
|
||||||
|
if(res.tapIndex==1){
|
||||||
|
uni.makePhoneCall({
|
||||||
|
phoneNumber:phone
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 图片选择
|
||||||
|
* @param {Number} count
|
||||||
|
*/
|
||||||
|
uploadImg(count=1) {
|
||||||
|
let imgArr = [];
|
||||||
|
uni.chooseImage({
|
||||||
|
count:count,
|
||||||
|
sizeType:['compressed'],
|
||||||
|
sourceType:['album','camera'],
|
||||||
|
success: (res) => {
|
||||||
|
let files = res.tempFilePaths
|
||||||
|
console.log(files);
|
||||||
|
files.forEach(item=>{
|
||||||
|
imgArr.push(item);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return imgArr;
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 打开小程序获取用户信息权限
|
||||||
|
*/
|
||||||
|
wxOpenSet() {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
// 用户信息
|
||||||
|
uni.authorize({
|
||||||
|
scope:'scope.userInfo',
|
||||||
|
success: (res) => {},
|
||||||
|
fail: (res) => {
|
||||||
|
uni.showModal({
|
||||||
|
content:'检测到您没打开获取信息功能权限,是否去设置打开?',
|
||||||
|
confirmText: "确认",
|
||||||
|
cancelText:'取消',
|
||||||
|
success: (res) => {
|
||||||
|
if(res.confirm){
|
||||||
|
uni.openSetting({
|
||||||
|
success: (res) => {
|
||||||
|
console.log(res);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
console.log('取消');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 传入目的地的经纬度、地点名称、详细地址,打开地图导航到达目的地
|
||||||
|
*/
|
||||||
|
goFlag:true,
|
||||||
|
goThere(latitude=30.656693,longitude=104.136425,address="四川省成都市成华区双店路B口"){
|
||||||
|
if(this.goFlag){
|
||||||
|
this.goFlag = false;
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
wx.getLocation({//获取当前经纬度
|
||||||
|
type: 'wgs84', //返回可以用于wx.openLocation的经纬度,官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息
|
||||||
|
success: (res)=> {
|
||||||
|
wx.openLocation({//使用微信内置地图查看位置。
|
||||||
|
latitude: parseFloat(latitude),//要去的纬度-地址
|
||||||
|
longitude: parseFloat(longitude),//要去的经度-地址
|
||||||
|
address: address,
|
||||||
|
fail:err=>{
|
||||||
|
tools.showToast('地址信息错误');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
// #ifdef APP-PLUS || H5
|
||||||
|
uni.openLocation({
|
||||||
|
latitude: parseFloat(latitude),
|
||||||
|
longitude: parseFloat(longitude),
|
||||||
|
address:address,
|
||||||
|
success:()=> {
|
||||||
|
console.log('success');
|
||||||
|
},
|
||||||
|
fail:err=>{
|
||||||
|
console.log(err)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.goFlag = true;
|
||||||
|
},2000)
|
||||||
|
} else {
|
||||||
|
tools.showToast('请勿多次点击');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* @description 保存图片
|
||||||
|
* @param {String} src
|
||||||
|
*/
|
||||||
|
saveImg(src) {
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
uni.saveImageToPhotosAlbum({
|
||||||
|
filePath: src,
|
||||||
|
success:(resimg)=> {}
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
let exist = src.slice(0,4);
|
||||||
|
if(exist=='http') {
|
||||||
|
uni.downloadFile({
|
||||||
|
url: src,
|
||||||
|
success: (res) => {
|
||||||
|
uni.saveImageToPhotosAlbum({
|
||||||
|
filePath: res.tempFilePath,
|
||||||
|
success: ()=> {
|
||||||
|
uni.showToast({title:'保存成功',icon:'error'})
|
||||||
|
},
|
||||||
|
fail: () => {
|
||||||
|
uni.showToast({title:'保存失败',icon:'error'})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
wx.saveFile({
|
||||||
|
tempFilePath: src,
|
||||||
|
success:(wximg)=> {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 把base64转换成图片
|
||||||
|
* @param {String} data
|
||||||
|
*/
|
||||||
|
|
||||||
|
getBase64ImageUrl(data) {
|
||||||
|
/// 获取到base64Data
|
||||||
|
var base64Data = data;
|
||||||
|
/// 通过微信小程序自带方法将base64转为二进制去除特殊符号,再转回base64
|
||||||
|
base64Data = wx.arrayBufferToBase64(wx.base64ToArrayBuffer(base64Data));
|
||||||
|
/// 拼接请求头,data格式可以为image/png或者image/jpeg等,看需求
|
||||||
|
const base64ImgUrl = "data:image/png;base64," + base64Data;
|
||||||
|
/// 刷新数据
|
||||||
|
return base64ImgUrl;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
tools
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
import Vue from 'vue';
|
||||||
|
import App from './App';
|
||||||
|
import store from './store'
|
||||||
|
Vue.prototype.$store = store
|
||||||
|
|
||||||
|
import nothingPage from './components/nothing/nothing-page.vue';//引入无内容组件
|
||||||
|
Vue.component('nothing-page',nothingPage);//全局注册无内容组件
|
||||||
|
|
||||||
|
import statusNav from './components/status-nav/status-nav.vue'; //引入头部组件
|
||||||
|
Vue.component('status-nav',statusNav);//全局注册头部组件
|
||||||
|
|
||||||
|
|
||||||
|
// 常用便捷式公共方法
|
||||||
|
import tools from '@/jsFile/tools.js';
|
||||||
|
Vue.prototype.$toolAll = tools;
|
||||||
|
|
||||||
|
// 响应数据
|
||||||
|
import requst from '@/jsFile/requst.js';
|
||||||
|
Vue.prototype.$requst = requst;
|
||||||
|
|
||||||
|
//公共域名
|
||||||
|
Vue.prototype.$hostHttp = 'https://laonon.scdxtc.cn';
|
||||||
|
|
||||||
|
App.mpType = 'app';
|
||||||
|
|
||||||
|
const app = new Vue({
|
||||||
|
store,
|
||||||
|
...App
|
||||||
|
})
|
||||||
|
|
||||||
|
app.$mount()
|
|
@ -0,0 +1,87 @@
|
||||||
|
{
|
||||||
|
"name" : "app适配微信小程序",
|
||||||
|
"appid" : "__UNI__768F35C",
|
||||||
|
"description" : "这是一款基于uniapp开发的app和微信小程序的模板框架",
|
||||||
|
"versionName" : "1.0.0",
|
||||||
|
"versionCode" : "100",
|
||||||
|
"transformPx" : false,
|
||||||
|
"app-plus" : {
|
||||||
|
"usingComponents" : true,
|
||||||
|
"compilerVersion" : 3,
|
||||||
|
/* 5+App特有相关 */
|
||||||
|
"modules" : {
|
||||||
|
"Payment" : {},
|
||||||
|
"Share" : {}
|
||||||
|
},
|
||||||
|
/* 模块配置 */
|
||||||
|
"distribute" : {
|
||||||
|
/* 应用发布信息 */
|
||||||
|
"android" : {
|
||||||
|
/* android打包配置 */
|
||||||
|
"permissions" : [
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ios" : {},
|
||||||
|
/* ios打包配置 */
|
||||||
|
"sdkConfigs" : {
|
||||||
|
"maps" : {},
|
||||||
|
"payment" : {
|
||||||
|
"weixin" : {
|
||||||
|
"__platform__" : [ "ios", "android" ],
|
||||||
|
"appid" : "wx2654bc27c419ada6",
|
||||||
|
"UniversalLinks" : ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"push" : {},
|
||||||
|
"geolocation" : {},
|
||||||
|
"share" : {
|
||||||
|
"weixin" : {
|
||||||
|
"appid" : "wx2654bc27c419ada6",
|
||||||
|
"UniversalLinks" : ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ad" : {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"splashscreen" : {
|
||||||
|
"alwaysShowBeforeRender" : false,
|
||||||
|
"waiting" : false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* SDK配置 */
|
||||||
|
"quickapp" : {},
|
||||||
|
/* 快应用特有相关 */
|
||||||
|
"mp-weixin" : {
|
||||||
|
/* 小程序特有相关 */
|
||||||
|
"appid" : "wxa02e44170bc722cd",
|
||||||
|
"setting" : {
|
||||||
|
"urlCheck" : true,
|
||||||
|
"es6" : true
|
||||||
|
},
|
||||||
|
"usingComponents" : true,
|
||||||
|
"permission" : {
|
||||||
|
"scope.userLocation" : {
|
||||||
|
"desc" : "您的位置信息将用于小程序位置接口的效果展示"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mp-baidu" : {
|
||||||
|
"appid" : "24346353"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "轮播视频和图片",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "轮播视频和图片",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"dependencies": {
|
||||||
|
"moment": "^2.29.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"id": "zhuge-swiper",
|
||||||
|
"name": "轮播视频和图片",
|
||||||
|
"version": "1.0.1",
|
||||||
|
"description": "自动轮播视频和图片组件。播放视频时停止轮播,手动滑动swiper时视频停止播放",
|
||||||
|
"keywords": [
|
||||||
|
"vue",
|
||||||
|
"swiper",
|
||||||
|
"zhuge"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,164 @@
|
||||||
|
{
|
||||||
|
"pages": [
|
||||||
|
{ //首页
|
||||||
|
"path": "pages/index/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "首页",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //我的
|
||||||
|
"path": "pages/my/my",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "我的",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //购物车
|
||||||
|
"path" : "pages/cart/cart",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //确认订单
|
||||||
|
"path" : "pages/cart/settlement",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //完成订单
|
||||||
|
"path" : "pages/cart/finish",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //登录
|
||||||
|
"path" : "pages/login/login",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "登录",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"subPackages": [{ //A包
|
||||||
|
"root": "pagesA",
|
||||||
|
"pages": [
|
||||||
|
{ //地址管理
|
||||||
|
"path" : "address/address",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //我的余额
|
||||||
|
"path" : "recharge/recharge",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //我的积分
|
||||||
|
"path" : "integral/integral",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //分销管理
|
||||||
|
"path" : "distribution/distribution",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //优惠券
|
||||||
|
"path" : "coupon/coupon",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //订单管理
|
||||||
|
"path" : "order/order",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //订单详情
|
||||||
|
"path" : "order/detail",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ //B包
|
||||||
|
"root": "pagesB",
|
||||||
|
"pages": [
|
||||||
|
{ //商品简介
|
||||||
|
"path" : "shop-detail/shop-detail",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //个人资料
|
||||||
|
"path" : "ucenter/ucenter",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //免责申明
|
||||||
|
"path" : "disclaimers/disclaimers",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //积分规则
|
||||||
|
"path" : "integral-rule/integral-rule",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ //经销商申请
|
||||||
|
"path" : "distributor/distributor",
|
||||||
|
"style" : {
|
||||||
|
"navigationBarTitleText": "",
|
||||||
|
"enablePullDownRefresh": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"globalStyle": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarBackgroundColor": "#FFFFFF", //导航栏背景色
|
||||||
|
"navigationStyle": "custom", //禁用原生导航栏,微信小程序可用
|
||||||
|
"backgroundColor":"#FFFFFF",//下拉显示出来的窗口的背景色
|
||||||
|
"backgroundTextStyle":"light",//下拉 loading 的样式,仅支持 dark / light
|
||||||
|
// "transparentTitle":"none",//导航栏整体(前景、背景)透明设置。支持 always 一直透明 / auto 滑动自适应 / none 不透明
|
||||||
|
"app-plus": {
|
||||||
|
"titleNView": false, //禁用原生导航栏,APP和H5可用
|
||||||
|
"bounce": "none",
|
||||||
|
"scrollIndicator": "none"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"condition" : { //模式配置,仅开发期间生效
|
||||||
|
"current": 0, //当前激活的模式(list 的索引项)
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"name": "", //模式名称
|
||||||
|
"path": "", //启动页面,必选
|
||||||
|
"query": "" //启动参数,在页面的onLoad函数里面得到
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-b150">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="购物车" :marginBottom="0"></status-nav>
|
||||||
|
<view class="cart-content">
|
||||||
|
<cart-slide ref="cart" :skuId='skuId'></cart-slide>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// 底部组件
|
||||||
|
import cartSlide from '@/components/shopping-carts/cart-slide';
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
cartSlide
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
skuId:''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
this.$refs.cart.getList();
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
uni.removeStorageSync('buyList');
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op.skuId) this.skuId = op.skuId;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,48 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<status-nav :ifReturn="false" navBarTitle="完成" :marginBottom="0"></status-nav>
|
||||||
|
<view class="finish-content">
|
||||||
|
<view class="finish-img flex">
|
||||||
|
<image src="/static/icon/icon-finish.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="finish-txt font48">支付已完成</view>
|
||||||
|
<view class="finish-btns font36 border-box">
|
||||||
|
<view class="btn radius30 border-box background-orange flex" @tap="goShop">继续购物</view>
|
||||||
|
<view class="btn radius30 border-box flex" @tap="goOrder">查看订单</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
imgsrc:'',
|
||||||
|
id:'',//订单id
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
console.log(op)
|
||||||
|
this.id = op.id
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 提交
|
||||||
|
goOrder(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/order/detail?id=${this.id}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 继续购物
|
||||||
|
goShop(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/index/index'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,360 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x150" v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="确认订单" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 收件人信息 -->
|
||||||
|
<view class="settlement-content pad-zy20 border-box">
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">收件人信息</view>
|
||||||
|
<view class="addressee-info mar-s20 flex" @tap="toAddress">
|
||||||
|
<view class="txt" v-if="default_address">
|
||||||
|
<view class="font30 mar-x10">{{default_address.name}}<text>{{default_address.phone}}</text></view>
|
||||||
|
<text class="font24 color-8c">{{default_address.province_str}}{{default_address.city_str}}{{default_address.county_str}}{{default_address.address}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="txt" v-else>
|
||||||
|
<view class="font30 color-8c" style="line-height: 2;">请选择地址</view>
|
||||||
|
</view>
|
||||||
|
<image src="/static/icon/icon-more.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 订单信息 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">订单信息</view>
|
||||||
|
<view class="shop-slide-list">
|
||||||
|
<view class="shop-slide-item">
|
||||||
|
<view class="item border-box background-white flex" v-for="(item,index) in orderShopList" :key="index">
|
||||||
|
<view class="shop-img radius30">
|
||||||
|
<image :src="item.spu_cover" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt">
|
||||||
|
<view class="shop-txt-top">
|
||||||
|
<view class="title font30 clips1">{{item.goods_name}}</view>
|
||||||
|
<view class="specs font24 color-66 mar-sx10 clips2">规格:{{item.sku_name}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt-bottom flex">
|
||||||
|
<!-- 商品价格 -->
|
||||||
|
<view class="price font30 color-red">¥{{item.price}}<text class="font24 color-66">x{{item.num}}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 优惠选择 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">优惠选择</view>
|
||||||
|
<view class="section-list font30">
|
||||||
|
<view class="item flex" v-if="orderInfo.vip_level>0">
|
||||||
|
<label class="radio" @tap="chooseEv('vip')"><radio :checked="vipCheck" color="#febf00"/>会员折扣</label>
|
||||||
|
<view class="txt flex">
|
||||||
|
<view>{{orderInfo.membership_discount}}折</view>
|
||||||
|
<view class="btn"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="item flex" @tap.stop="toCoupon">
|
||||||
|
<label class="radio" @tap.stop="chooseEv('coupon')"><radio :checked="couponCheck" color="#febf00"/>优惠券</label>
|
||||||
|
<view class="txt flex">
|
||||||
|
<view class="color-red" v-if="couponList.length">{{'-'+ couponList[couponIndex].amount}}</view>
|
||||||
|
<view class="btn">
|
||||||
|
<image src="/static/icon/icon-join.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 积分抵扣 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">积分抵扣</view>
|
||||||
|
<view class="section-list font30">
|
||||||
|
<view class="item flex">
|
||||||
|
<label class="radio" @tap="scoreCheck=!scoreCheck"><radio :checked="scoreCheck && orderInfo.available_score>0" color="#febf00"/>可用积分</label>
|
||||||
|
<view class="txt flex">
|
||||||
|
<view class="color-66">{{orderInfo.available_score}}</view>
|
||||||
|
<view class="btn"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 支付方式 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">支付方式</view>
|
||||||
|
<view class="section-list font30">
|
||||||
|
<view class="item flex">
|
||||||
|
<label class="radio" @tap="wechatCheck=!wechatCheck"><radio :checked="wechatCheck" color="#febf00"/>微信支付</label>
|
||||||
|
</view>
|
||||||
|
<view class="item flex">
|
||||||
|
<label class="radio" @tap="priceCheck=!priceCheck"><radio :checked="priceCheck" color="#febf00"/>余额支付</label>
|
||||||
|
<view class="txt flex">
|
||||||
|
<view class="color-66">{{orderInfo.available_balance}}</view>
|
||||||
|
<view class="btn"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="pull-footer-bg background-white pad-all20 radius30 border-box">
|
||||||
|
<view class="pull-footer background-grey radius30 pad-all20 border-box flex">
|
||||||
|
<view class="price color-ff" style="margin-left: 24rpx;">
|
||||||
|
<view class="font36 flex">合计:<span>¥{{totalPrice}}</span></view>
|
||||||
|
<text class="font26" v-if="discountPrice>0">总优惠:¥{{discountPrice}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="btn font36 color-48 background-orange radius30 flex" @tap="submitEv">立即支付</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 优惠券弹窗 -->
|
||||||
|
<view class="pull-bg" style="background-color: rgba(0,0,0,.3);" v-show="isCoupon"></view>
|
||||||
|
<view class="coupon-box border-box background-white" v-show="isCoupon">
|
||||||
|
<view class="title font36 background-white pad-sx25">优惠券选择</view>
|
||||||
|
<scroll-view scroll-y="true" class="coupon-scoll">
|
||||||
|
<view class="coupon-list pad-zy20 border-box">
|
||||||
|
<view class="coupon-item radius30 mar-s40 flex" v-for="(item,index) in couponList" :key="index" @tap="changeCoupon(index)">
|
||||||
|
<view class="price color-ff border-box"><text class="font30">¥</text>{{parseInt(item.amount)}}</view>
|
||||||
|
<view class="txt">
|
||||||
|
<view class="font36">{{item.name}}</view>
|
||||||
|
<view class="font24 color-8c mar-s10">满{{parseInt(item.condition)}}减{{parseInt(item.amount)}}</view>
|
||||||
|
<view class="font24 color-8c mar-s10">{{item.begin_at}}至{{item.end_at}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn mar-zy20 color-ff font24" v-if="index == couponIndex">已选择</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="coupon-btns border-box pad-zy20 color-48 mar-sx30 flex">
|
||||||
|
<view class="btn font36 radius30 background-orange" @tap="useCoupon">确认使用</view>
|
||||||
|
<view class="btn font36 radius30" style="background-color: #e9e9e9;" @tap="closeCoupon">取消选择</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
orderInfo:{}, //订单信息
|
||||||
|
default_address:{}, //地址信息
|
||||||
|
orderShopList:[], // 商品信息
|
||||||
|
couponList:[], //优惠券列表
|
||||||
|
couponIndex:0, //优惠券选择
|
||||||
|
vipCheck: false, //会员折扣
|
||||||
|
couponCheck:false, // 优惠选择
|
||||||
|
scoreCheck:false, //积分抵扣
|
||||||
|
wechatCheck:false, //微信支付
|
||||||
|
priceCheck:false, //余额支付
|
||||||
|
isCoupon:false, //优惠券弹窗
|
||||||
|
flag:true,
|
||||||
|
preferential_options:'coupon',//优惠选择
|
||||||
|
totalPrice:'',//总价
|
||||||
|
discountPrice:'', //优惠价格
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getOrderInfo();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 选择地址
|
||||||
|
toAddress(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/address/address?type=change`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 计算价格
|
||||||
|
computePrice(){
|
||||||
|
// 计算优惠价格
|
||||||
|
if(this.vipCheck && !this.couponCheck){
|
||||||
|
this.discountPrice = this.$toolAll.tools.addXiaoShu(this.orderInfo.total_price*(1 - this.$toolAll.tools.addXiaoShu(this.orderInfo.membership_discount)/10));
|
||||||
|
this.totalPrice = this.$toolAll.tools.addXiaoShu(this.orderInfo.total_price-this.discountPrice);
|
||||||
|
}
|
||||||
|
if(this.couponCheck && !this.vipCheck){
|
||||||
|
this.discountPrice = this.$toolAll.tools.addXiaoShu(this.couponList[this.couponIndex].amount);
|
||||||
|
this.totalPrice = this.$toolAll.tools.addXiaoShu(this.orderInfo.total_price - this.discountPrice);
|
||||||
|
}
|
||||||
|
if(!this.couponCheck && !this.vipCheck){
|
||||||
|
this.discountPrice = 0;
|
||||||
|
this.totalPrice = this.$toolAll.tools.addXiaoShu(this.orderInfo.total_price);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取订单准备信息
|
||||||
|
getOrderInfo(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
let params = {
|
||||||
|
sku_list: uni.getStorageSync('buyList'),
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/prepare-info',params).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'订单准备信息');
|
||||||
|
// 其他信息
|
||||||
|
this.orderInfo = res.data;
|
||||||
|
|
||||||
|
// 优惠券信息
|
||||||
|
let baseArr = res.data.available_coupon_list;
|
||||||
|
let couponArr = baseArr.sort(function (a, b) {
|
||||||
|
return b.amount - a.amount;
|
||||||
|
});
|
||||||
|
this.couponList = couponArr;
|
||||||
|
if(this.couponList.length==0){
|
||||||
|
this.couponCheck = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 商品信息
|
||||||
|
this.orderShopList = res.data.list;
|
||||||
|
|
||||||
|
// 地址信息
|
||||||
|
let addr_id = uni.getStorageSync('addr_id');
|
||||||
|
if(addr_id){
|
||||||
|
// 获取地址
|
||||||
|
this.getAddrDetail(addr_id);
|
||||||
|
}else{
|
||||||
|
this.default_address = res.data.default_address;
|
||||||
|
}
|
||||||
|
// 计算价格
|
||||||
|
this.discountPrice = 0;
|
||||||
|
this.totalPrice = this.$toolAll.tools.addXiaoShu(this.orderInfo.total_price);
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取地址
|
||||||
|
getAddrDetail(id){
|
||||||
|
this.$requst.post('/api/user/address-info',{id:id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'地址详情');
|
||||||
|
this.default_address = res.data;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 打开优惠券弹窗
|
||||||
|
toCoupon(){
|
||||||
|
if(this.couponList.length){
|
||||||
|
this.isCoupon =true;
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast('还没有优惠券');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选择优惠券
|
||||||
|
changeCoupon(index){
|
||||||
|
if(index!==this.couponIndex){
|
||||||
|
this.couponIndex = index;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
//确认选择
|
||||||
|
useCoupon(){
|
||||||
|
this.isCoupon = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
//取消选择
|
||||||
|
closeCoupon(){
|
||||||
|
this.isCoupon = false;
|
||||||
|
this.couponIndex = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选择按钮
|
||||||
|
chooseEv(type){
|
||||||
|
if(type == 'vip'){
|
||||||
|
if(this.vipCheck){
|
||||||
|
this.vipCheck = false;
|
||||||
|
}else{
|
||||||
|
this.vipCheck = true;
|
||||||
|
this.couponCheck = false;
|
||||||
|
}
|
||||||
|
this.computePrice();
|
||||||
|
}
|
||||||
|
if(type == 'coupon'){
|
||||||
|
if(this.couponCheck){
|
||||||
|
this.couponCheck = false;
|
||||||
|
}else{
|
||||||
|
this.couponCheck = true;
|
||||||
|
this.vipCheck = false;
|
||||||
|
}
|
||||||
|
this.computePrice();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 提交
|
||||||
|
submitEv(){
|
||||||
|
this.flag = false;
|
||||||
|
if(this.vipCheck){
|
||||||
|
this.preferential_options = 'membership_discount';
|
||||||
|
}
|
||||||
|
if(this.couponCheck){
|
||||||
|
this.preferential_options = 'coupon';
|
||||||
|
}
|
||||||
|
if(!this.couponCheck && !this.vipCheck){
|
||||||
|
this.preferential_options = '';
|
||||||
|
}
|
||||||
|
if(this.default_address == null) {
|
||||||
|
this.$toolAll.tools.showToast('请填写地址信息');
|
||||||
|
}else{
|
||||||
|
if(this.wechatCheck || this.priceCheck){
|
||||||
|
let params = {
|
||||||
|
sku_list: uni.getStorageSync('buyList'),
|
||||||
|
preferential_options:this.preferential_options,
|
||||||
|
coupon_id: this.couponCheck?this.couponList[this.couponIndex].id:'',
|
||||||
|
deduction_points:this.scoreCheck?1:0,
|
||||||
|
is_balance:this.priceCheck?1:0,
|
||||||
|
is_wechat:this.wechatCheck?1:0,
|
||||||
|
address_id:this.default_address.id
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/create',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
console.log(res,'支付返回')
|
||||||
|
if(res.data.need_wechat_pay == 1){
|
||||||
|
// 调用微信支付
|
||||||
|
this.callPayMent(res.data.payment_params);
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast('支付成功(*^▽^*)');
|
||||||
|
uni.removeStorageSync('addr_id');
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pages/cart/finish?id=${res.data.id}`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
console.log(res.msg,'提示信息')
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
this.flag = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast('请选择支付方式');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 调用微信支付
|
||||||
|
callPayMent(data){
|
||||||
|
//调起支付
|
||||||
|
wx.requestPayment({
|
||||||
|
'timeStamp': data.timeStamp,
|
||||||
|
'nonceStr': data.nonceStr,
|
||||||
|
'package': data.package,
|
||||||
|
"signType": data.signType,
|
||||||
|
'paySign': data.sign,
|
||||||
|
'success': function (res) { // 接口调用成功的回调函数
|
||||||
|
console.log('支付成功:',res);
|
||||||
|
this.$toolAll.tools.showToast('支付成功(*^▽^*)');
|
||||||
|
uni.removeStorageSync('addr_id');
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pages/cart/finish?id=${res.data.id}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
'fail': function (res) { // 接口调用失败的回调函数
|
||||||
|
console.log('支付失败:' + JSON.stringify(res));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,379 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="index-page pad-x190 border-box" v-if="isLoading">
|
||||||
|
<!-- 顶部背景 -->
|
||||||
|
<view class="index-top">
|
||||||
|
<image :src="indexBackground" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="index-content background-white">
|
||||||
|
<!-- 搜索 -->
|
||||||
|
<view class="pull-search-bg background-white radius20 pad-sx30 border-box">
|
||||||
|
<view class="pull-search radius20 flex" v-if="isShow">
|
||||||
|
<image class="img" src="/static/icon/icon-search.png" mode="widthFix"></image>
|
||||||
|
<input class="input pad-zy15 border-box font30" v-model="keyword" type="text" placeholder="搜索" confirm-type="search" @confirm="doSearch" placeholder-style="color: #666666">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 商品分类 -->
|
||||||
|
<view class="index-cate-bg pad-zy20 background-white" :class="!isShow?'show':''" id="index-cate-bg">
|
||||||
|
<view class="index-cate pad-zy20 border-box" :class="!isShow?'show':''">
|
||||||
|
<view class="pull-title">
|
||||||
|
<view class="txt font32 pad-sx10" v-if="isShow">商品</view>
|
||||||
|
<view class="line background-orange" v-if="isShow"></view>
|
||||||
|
</view>
|
||||||
|
<view class="cate-list-bg">
|
||||||
|
<scroll-view scroll-x="true" :scroll-left="tabsScrollLeft" @scroll="scroll">
|
||||||
|
<view class="cate-list flex" id="tab_list" :style="{width:cateWidth}">
|
||||||
|
<view class="cate-item" :class="index==currentIndex?'color-orange':''" id="tab_item" v-for="(item,index) in cateList" :key="index" @tap="changeCateEv(index)">
|
||||||
|
<view class="img mar-sx20"><image :src="item.cover" mode="widthFix"></image></view>
|
||||||
|
<view class="txt font24">{{item.title}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 商品列表 -->
|
||||||
|
<view class="commodity pad-zy20 border-box flex">
|
||||||
|
<view class="item mar-s40 radius20" v-for="(item,index) in commodityList" :key="index" @tap.stop="goDetail(item.id)">
|
||||||
|
<view class="img">
|
||||||
|
<image :src="item.cover" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="txt pad-all20">
|
||||||
|
<view class="title fon30 clips2">{{item.name}}</view>
|
||||||
|
<view class="price font30 mar-sx10">¥{{item.price}}</view>
|
||||||
|
<view class="bottom flex">
|
||||||
|
<view class="sold font24 color-99">{{item.amount>=100?'99+':item.amount}}件已售</view>
|
||||||
|
<view class="btn font24 background-orange flex" @tap.stop="joinCart(index)">加入购物车</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 到底啦 -->
|
||||||
|
<view class="no-more font24" v-if="noMore"><text>—— 到底啦 ——</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 搜索结果 -->
|
||||||
|
<view class="pull-bg" v-if="showSearch"></view>
|
||||||
|
<view class="search-box border-box" v-if="showSearch" @tap.stop="closeSearch">
|
||||||
|
<view class="close-box" :style="{height:statusHeight+50+'px'}" @tap="closeSearch"></view>
|
||||||
|
<!-- 搜索 -->
|
||||||
|
<view class="search-bg background-white pad-sx30 border-box">
|
||||||
|
<view class="search radius20 flex">
|
||||||
|
<image class="img" src="/static/icon/icon-search.png" mode="widthFix"></image>
|
||||||
|
<input class="input pad-zy15 border-box font30" v-model="keyword" type="text" placeholder="搜索" confirm-type="search" @confirm="doSearch" placeholder-style="color: #666666">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="keyword-txt background-white font30">关键词:{{searchKeyword}}</view>
|
||||||
|
<scroll-view scroll-y="true" class="search-list background-white">
|
||||||
|
<!-- 搜索列表 -->
|
||||||
|
<view class="commodity pad-zy20 border-box flex">
|
||||||
|
<view class="item mar-s40 radius20" v-for="(item,index) in searchList" :key="index" @tap.stop="goDetail(item.id)">
|
||||||
|
<view class="img">
|
||||||
|
<image :src="item.cover" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="txt pad-all20">
|
||||||
|
<view class="title fon30 clips2">{{item.name}}</view>
|
||||||
|
<view class="price font30 mar-sx10">¥{{item.price}}</view>
|
||||||
|
<view class="bottom flex">
|
||||||
|
<view class="sold font24 color-99">{{item.stock>=100?'99+':item.stock}}件已售</view>
|
||||||
|
<view class="btn font24 background-orange flex" @tap.stop="joinCart(index)">加入购物车</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 没有相关结果 -->
|
||||||
|
<view class="no-more font24" v-if="searchList.length==0"><text>—— 没有相关结果 ——</text></view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<tabbar v-if="isLoading"></tabbar>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import tabbar from '@/components/tabbar/tabbar';
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
tabbar
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusHeight:uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
scrollTop:0, //分类距离顶部距离
|
||||||
|
isShow: true, //显示
|
||||||
|
//分类导航
|
||||||
|
currentIndex:0,
|
||||||
|
scrollLeft:0,
|
||||||
|
tabsScrollLeft:0,
|
||||||
|
cateWidth:'',
|
||||||
|
indexBackground:'', //背景图
|
||||||
|
keyword:'', //关键词
|
||||||
|
cateList:[], //商品分类
|
||||||
|
commodityList:[], //商品列表
|
||||||
|
ifLoading:true,
|
||||||
|
page:1, //分页
|
||||||
|
size:10, //条数
|
||||||
|
total:0, //总数
|
||||||
|
noMore:false, //没有更多
|
||||||
|
vip_level:0, //是否是会员
|
||||||
|
keyword:'', //关键词
|
||||||
|
searchKeyword:'', //搜索关键词
|
||||||
|
searchList:[], //搜索结果
|
||||||
|
showSearch:false, //显示搜索结果
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
// 获取用户信息
|
||||||
|
this.getUserInfo();
|
||||||
|
// 获取头部背景
|
||||||
|
this.getTabbarEv();
|
||||||
|
// 获取分类列表
|
||||||
|
this.getCateEv();
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.playTimer = setTimeout(()=>{
|
||||||
|
this.isplay = true;
|
||||||
|
},2000)
|
||||||
|
this.vip_level = uni.getStorageSync('vip_level');
|
||||||
|
},
|
||||||
|
onReady() {
|
||||||
|
|
||||||
|
},
|
||||||
|
onHide() {
|
||||||
|
clearTimeout(this.playTimer);
|
||||||
|
this.isplay =false;
|
||||||
|
},
|
||||||
|
onPageScroll(object){
|
||||||
|
this.setTop();
|
||||||
|
if(object.scrollTop>this.scrollTop){
|
||||||
|
this.isShow = false;
|
||||||
|
}else{
|
||||||
|
this.isShow = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
onShareAppMessage(res) {
|
||||||
|
|
||||||
|
},
|
||||||
|
// 分享到朋友圈
|
||||||
|
onShareTimeline(res){
|
||||||
|
|
||||||
|
},
|
||||||
|
// 触底
|
||||||
|
onReachBottom(e) {
|
||||||
|
if(!this.noMore){
|
||||||
|
this.page++;
|
||||||
|
// 查询商品列表
|
||||||
|
this.getCommodityEv(this.cateList[this.currentIndex].id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
list() {
|
||||||
|
this.setTabList()
|
||||||
|
},
|
||||||
|
value() {
|
||||||
|
this.currentIndex = this.value
|
||||||
|
this.setTabList()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取个人信息
|
||||||
|
getUserInfo(){
|
||||||
|
this.$requst.get('/api/user/info').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'个人信息')
|
||||||
|
uni.setStorageSync('vip_level',res.data.vip_level);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取头部背景
|
||||||
|
getTabbarEv(){
|
||||||
|
this.$requst.get('/api/index/mini-program-setting').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'个性装扮')
|
||||||
|
this.indexBackground = this.$hostHttp + res.data.indexBackground;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取商品分类
|
||||||
|
getCateEv(){
|
||||||
|
this.$requst.get('/api/spu/category').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'商品分类')
|
||||||
|
let cateArr =[];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
title:item.title,
|
||||||
|
cover:item.cover
|
||||||
|
}
|
||||||
|
cateArr.push(obj);
|
||||||
|
})
|
||||||
|
this.cateList = cateArr;
|
||||||
|
this.cateWidth = this.cateList.length*158 - 58 + 'rpx';
|
||||||
|
// 查询商品列表
|
||||||
|
this.getCommodityEv(this.cateList[this.currentIndex].id);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询商品列表
|
||||||
|
getCommodityEv(id){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
category_id:id
|
||||||
|
}
|
||||||
|
this.$requst.get('/api/spu/list',params).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'商品列表')
|
||||||
|
this.total = res.data.total;
|
||||||
|
let commodityArr = [];
|
||||||
|
res.data.list.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
cover:item.cover,
|
||||||
|
name:item.name,
|
||||||
|
original_price:item.original_price,
|
||||||
|
price:item.price,
|
||||||
|
tag:item.tag,
|
||||||
|
stock:item.stock,
|
||||||
|
sku_id:item.default_sku.id,
|
||||||
|
amount:item.amount,
|
||||||
|
}
|
||||||
|
commodityArr.push(obj)
|
||||||
|
})
|
||||||
|
this.commodityList = this.commodityList.concat(commodityArr);
|
||||||
|
if(this.commodityList.length==this.total){
|
||||||
|
this.noMore =true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 加入购物车
|
||||||
|
joinCart(index){
|
||||||
|
if(this.$toolAll.tools.judgeAuth()) {
|
||||||
|
this.$requst.post('/api/order/shopping-cart-add',{sku_id:this.commodityList[index].sku_id,num:1}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('加入购物车成功(*^▽^*)');
|
||||||
|
getCartInfo();
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 去详情页
|
||||||
|
goDetail(id){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/shop-detail/shop-detail?id=${id}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 分类选择事件
|
||||||
|
changeCateEv(index) {
|
||||||
|
if(this.currentIndex !== index){
|
||||||
|
this.currentIndex = index;
|
||||||
|
// 获取商品列表
|
||||||
|
this.commodityList = [];
|
||||||
|
this.noMore = false;
|
||||||
|
this.getCommodityEv(this.cateList[index].id);
|
||||||
|
// 分类切换效果
|
||||||
|
this.setTabList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 分类切换效果
|
||||||
|
setTabList() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.cateList.length > 0) {
|
||||||
|
//计算左滑距离
|
||||||
|
this.setLeft()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
//计算左滑距离
|
||||||
|
setLeft() {
|
||||||
|
let lineLeft = 0;
|
||||||
|
this.getElementData('#tab_list', (data) => {
|
||||||
|
let list = data[0];
|
||||||
|
this.getElementData('#tab_item', (res) => {
|
||||||
|
let el = res[this.currentIndex]
|
||||||
|
lineLeft = el.width / 2 + (-list.left) + el.left - list.width / 2 - this.scrollLeft
|
||||||
|
this.tabsScrollLeft = this.scrollLeft + lineLeft
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 计算顶部距离
|
||||||
|
setTop(){
|
||||||
|
this.getElementData('#index-cate-bg', (res) => {
|
||||||
|
let el = res[0];
|
||||||
|
this.scrollTop = el.top + el.height/4;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取DOM距离
|
||||||
|
getElementData(el, callback) {
|
||||||
|
uni.createSelectorQuery().in(this).selectAll(el).boundingClientRect().exec((data) => {
|
||||||
|
callback(data[0]);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 滚动
|
||||||
|
scroll(e) {
|
||||||
|
this.scrollLeft = e.detail.scrollLeft;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 搜索结果
|
||||||
|
doSearch(){
|
||||||
|
this.showSearch = true;
|
||||||
|
this.searchKeyword = this.keyword;
|
||||||
|
this.keyword = '';
|
||||||
|
this.$requst.get('/api/spu/list',{keyword:this.searchKeyword}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'搜索列表')
|
||||||
|
this.total = res.data.total;
|
||||||
|
let searchArr = [];
|
||||||
|
res.data.list.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
cover:item.cover,
|
||||||
|
name:item.name,
|
||||||
|
original_price:item.original_price,
|
||||||
|
price:item.price,
|
||||||
|
tag:item.tag,
|
||||||
|
stock:item.stock,
|
||||||
|
sku_id:item.default_sku.id
|
||||||
|
}
|
||||||
|
searchArr.push(obj)
|
||||||
|
})
|
||||||
|
this.searchList = this.searchList.concat(searchArr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭搜索
|
||||||
|
closeSearch(){
|
||||||
|
this.showSearch = false;
|
||||||
|
this.searchKeyword = '';
|
||||||
|
this.searchList = [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,142 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class='login-header'>
|
||||||
|
<image class="infoImg" mode="aspectFill" :src="userInfo.avatarUrl || imgSrc"></image>
|
||||||
|
<view class="logo-name">{{appletName}}</view>
|
||||||
|
<view class="logo-title font24 color-99 mar-s20" style="text-align: center;">{{appleSubtitle}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="login-footer">
|
||||||
|
<view class="login-btn radius20 color-48 font36" :style="{background:'#febf00'}" type='primary' @tap="bindGetUserInfo">微信授权</view>
|
||||||
|
<view class="agreement-box font30">如您点击授权,您将同意授权<text @tap="toAgreement" class="agreement">《免责声明》</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
userInfo: {}, //用户信息
|
||||||
|
canIGetUserProfile: false,
|
||||||
|
imgSrc: '/static/img/logo.png', //默认logo头像
|
||||||
|
appletName:'“老农极鲜~土货”', //小程序名称
|
||||||
|
appleSubtitle:'精选特产尽在土货',
|
||||||
|
isShowP:false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
onLoad() {
|
||||||
|
if (uni.getUserProfile) {
|
||||||
|
this.canIGetUserProfile = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 设置logo图
|
||||||
|
setLogo(){
|
||||||
|
this.$requst.get('index/base-config').then(res=>{
|
||||||
|
this.imgSrc = this.$http + res.data.logo;
|
||||||
|
this.appletName = res.data.appletName;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
refuse(){//暂不绑定事件
|
||||||
|
this.isShowP=false;
|
||||||
|
this.$toolAll.tools.showToast('登录成功','success')
|
||||||
|
uni.reLaunch({url:'/pages/index/index'})
|
||||||
|
},
|
||||||
|
getphonenumber(e){//授权绑定手机号
|
||||||
|
let ya = this;
|
||||||
|
wx.login({
|
||||||
|
success:(res)=>{
|
||||||
|
this.$requst.post('/api/user/login',{code:res.code}).then(result => {
|
||||||
|
if(e.detail.errMsg=="getPhoneNumber:ok"){
|
||||||
|
this.$requst.post('user/bind-phone',{openid: result.data.openid,session_key:result.data.session_key, iv:e.detail.iv,encryptedData:e.detail.encryptedData}).then(res=>{
|
||||||
|
console.log('手机号信息:',res);
|
||||||
|
if(res.code==0){
|
||||||
|
this.$toolAll.tools.showToast('手机号绑定成功');
|
||||||
|
this.isShowP = true;
|
||||||
|
} else this.$toolAll.tools.showToast(res.msg);
|
||||||
|
},error=>{})
|
||||||
|
} else {
|
||||||
|
// console.log('取消授权手机号')
|
||||||
|
}
|
||||||
|
}).catch(err=>{
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
toAgreement(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pagesB/disclaimers/disclaimers'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//调起登录授权
|
||||||
|
bindGetUserInfo(e) {
|
||||||
|
let ya = this;
|
||||||
|
//新版登录方式
|
||||||
|
uni.getUserProfile({
|
||||||
|
desc: '登录',
|
||||||
|
lang: 'zh_CN',
|
||||||
|
success: (res) => {
|
||||||
|
ya.userInfo = res.userInfo;
|
||||||
|
uni.login({
|
||||||
|
provider: 'weixin',
|
||||||
|
success: (res)=> {
|
||||||
|
if (res.code) {
|
||||||
|
ya.updateUserInfo(res.code);
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '登录失败!',
|
||||||
|
duration: 2000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fail: (res) => {}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
//调用登录接口
|
||||||
|
updateUserInfo(code) {
|
||||||
|
let ya = this;
|
||||||
|
uni.showToast({
|
||||||
|
title: '登录中...',
|
||||||
|
icon:'loading',
|
||||||
|
duration:10000
|
||||||
|
})
|
||||||
|
var params = {
|
||||||
|
code:code,
|
||||||
|
nickname: ya.userInfo.nickName,//用户昵称
|
||||||
|
headimgurl: ya.userInfo.avatarUrl,//用户头像
|
||||||
|
country: ya.userInfo.country,//用户所在国家
|
||||||
|
province: ya.userInfo.province,//用户所在省份
|
||||||
|
city: ya.userInfo.city,//用户所在城市
|
||||||
|
gender: ya.userInfo.gender,//用户性别
|
||||||
|
language:ya.userInfo.language,//语言
|
||||||
|
is_active:1
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/login',params).then(res => {
|
||||||
|
if(res.code == 0){
|
||||||
|
uni.setStorageSync('userId',res.data.account_id)
|
||||||
|
uni.setStorageSync('token',res.data.token)//缓存token
|
||||||
|
uni.setStorageSync('openid',res.data.openid)//缓存openid
|
||||||
|
uni.setStorageSync('expire',res.data.expire)//缓存失效时间(时间戳格式)
|
||||||
|
uni.setStorageSync('phone_active',res.data.phone_active)//是否授权手机号
|
||||||
|
uni.setStorageSync('is_active',res.data.is_active)//是否授权头像和昵称
|
||||||
|
uni.setStorageSync('business_code',res.data.business_code)//缓存邀请码
|
||||||
|
if(uni.getStorageSync('page-path-options')) {
|
||||||
|
uni.reLaunch({ // 重新进入当前页面
|
||||||
|
url:uni.getStorageSync('page-path-options')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
uni.reLaunch({
|
||||||
|
url:'/pages/index/index'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},error => {})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,406 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x170" v-if="isLoading">
|
||||||
|
<!-- 滚动顶部 -->
|
||||||
|
<view class="scrool-top background-white" :style="{height:statusHeight+50+'px'}" v-if="scroolTop"></view>
|
||||||
|
<view class="my-top">
|
||||||
|
<view class="my-bg">
|
||||||
|
<image src="/static/img/my-bg.jpg" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<!-- 头部 -->
|
||||||
|
<view class="my-herder pad-zy20 border-box">
|
||||||
|
<view class="my-message color-ff flex">
|
||||||
|
<!-- 头像 -->
|
||||||
|
<view class="my-portrait radius100">
|
||||||
|
<image :src="headPortrait" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<!-- 用户名 -->
|
||||||
|
<view class="my-txt flex">
|
||||||
|
<view class="my-nickname font36 flex">
|
||||||
|
<text>{{nickName}}</text>
|
||||||
|
<image :src="vip_info.ico" mode="widthFix" v-if="vip_info.ico!==''"></image>
|
||||||
|
</view>
|
||||||
|
<view class="my-vip-txt font24 background-orange radius25 pad-zy40 mar-s20 flex">{{vip_info.name}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="my-money color-ff flex">
|
||||||
|
<view class="item">
|
||||||
|
<view class="font48">{{userInfo.score}}</view>
|
||||||
|
<text class="font24">我的积分</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="font48">{{userInfo.coupon_count}}</view>
|
||||||
|
<text class="font24">我的优惠券</text>
|
||||||
|
</view>
|
||||||
|
<view class="item">
|
||||||
|
<view class="font48">{{userInfo.balance}}</view>
|
||||||
|
<text class="font24">我的余额</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 订单量 -->
|
||||||
|
<view class="my-order background-grey border-box flex">
|
||||||
|
<view class="item" v-for="(item,index) in myOrder" :key="index" @tap="changeOrder(index)">
|
||||||
|
<view class="img flex">
|
||||||
|
<image :src="item.imgSrc" mode="widthFix" :style="{width:item.iconWidth+'rpx',height:item.iconHeight+'rpx'}"></image>
|
||||||
|
<view class="point radius100" v-if="orderObj.indexOf(index.toString())!=-1 && myOrder[index].num>0"></view>
|
||||||
|
</view>
|
||||||
|
<view class="txt font24 color-ff">{{item.title}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 其他资料 -->
|
||||||
|
<view class="my-content pad-all40">
|
||||||
|
<view class="item flex" v-for="(item,index) in listData" :key="index" @tap.stop="toMore(index)" v-if="showObj.indexOf(index.toString())!=-1">
|
||||||
|
<view class="title flex">
|
||||||
|
<view class="img flex">
|
||||||
|
<image :src="item.imgSrc" :style="{width:item.iconWidth+'rpx',height:item.iconHeight+'rpx'}" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="title font28">{{item.titele}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="more">
|
||||||
|
<image src="/static/icon/icon-join.png" mode="widthFix" style="width: 14rpx;height: 26rpx;"></image>
|
||||||
|
</view>
|
||||||
|
<button class="get-phone-btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumberA" v-if="index==0&&mobile==''"></button>
|
||||||
|
<button class="get-phone-btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumberB" v-if="index==1&&mobile==''"></button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 会员注册 -->
|
||||||
|
<view class="pull-bg" style="background-color: rgba(0,0,0,.3);" v-if="isVip || isShow"></view>
|
||||||
|
<view class="vip-box-bg border-box" v-if="isVip">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">会员注册</view>
|
||||||
|
<view class="vip-list">
|
||||||
|
<view class="vip-item mar-s20">
|
||||||
|
<view class="tips color-99">姓名</view>
|
||||||
|
<input class="input" type="text" v-model="myName" placeholder="请输入姓名" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">电话</view>
|
||||||
|
<input class="input" type="number" v-model="myPhone" placeholder="请输入电话" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 background-orange radius30 mar-s60 flex" @tap="submitEv">注册会员</view>
|
||||||
|
<view class="close-btn" @tap="closeEv">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 分销码 -->
|
||||||
|
<view class="vip-box-bg border-box" v-if="isShow">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">分销二维码</view>
|
||||||
|
<view class="vip-code flex" style="padding: 40rpx 0 20rpx;">
|
||||||
|
<image :src="codeImg" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 radius30 color-ff mar-s60 flex" style="background-color: #00b809;position: relative;" @tap="submitEv">
|
||||||
|
<image src="/static/icon/icon-wechat.png" mode="widthFix"></image>
|
||||||
|
<text>分享给朋友</text>
|
||||||
|
<button class="shear-btn" type="primary" open-type="share"></button>
|
||||||
|
</view>
|
||||||
|
<view class="close-btn" @tap="closeEv">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 底部tab -->
|
||||||
|
<tabbar current="0" v-if="isLoading"></tabbar>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import tabbar from '@/components/tabbar/tabbar.vue';
|
||||||
|
import {getCarInfo} from '@/jsFile/public-api.js';
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
components:{
|
||||||
|
tabbar,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusHeight:uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
scroolTop:false, //是否显示顶部
|
||||||
|
headPortrait:'', //头像
|
||||||
|
nickName:'', //用户名
|
||||||
|
businessCode:'', //是否会员
|
||||||
|
customerSrc:'', //商家客服二维码
|
||||||
|
vip_info:{}, //会员信息
|
||||||
|
myOrder:[
|
||||||
|
{title:'全部',tag:'all',imgSrc:'/static/icon/icon-order-01.png',num:0,iconWidth:42,iconHeight:44},
|
||||||
|
{title:'待付款',tag:'waiting',imgSrc:'/static/icon/icon-order-02.png',num:0,iconWidth:46,iconHeight:40},
|
||||||
|
{title:'已下单',tag:'paid',imgSrc:'/static/icon/icon-order-03.png',num:0,iconWidth:50,iconHeight:44},
|
||||||
|
{title:'已发货',tag:'shipped',imgSrc:'/static/icon/icon-order-04.png',num:0,iconWidth:48,iconHeight:42},
|
||||||
|
{title:'已完成',tag:'completed',imgSrc:'/static/icon/icon-order-05.png',num:0,iconWidth:49,iconHeight:44}
|
||||||
|
],//订单
|
||||||
|
listData:[
|
||||||
|
{titele:'个人资料',imgSrc:'/static/icon/icon-my-01.png',iconWidth:35,iconHeight:36},
|
||||||
|
{titele:'注册会员',imgSrc:'/static/icon/icon-my-02.png',iconWidth:40,iconHeight:34},
|
||||||
|
{titele:'地址管理',imgSrc:'/static/icon/icon-my-03.png',iconWidth:32,iconHeight:40},
|
||||||
|
{titele:'余额充值',imgSrc:'/static/icon/icon-my-04.png',iconWidth:34,iconHeight:28},
|
||||||
|
{titele:'积分管理',imgSrc:'/static/icon/icon-my-05.png',iconWidth:32,iconHeight:30},
|
||||||
|
{titele:'分销管理',imgSrc:'/static/icon/icon-my-06.png',iconWidth:35,iconHeight:35},
|
||||||
|
{titele:'优惠券管理',imgSrc:'/static/icon/icon-my-07.png',iconWidth:38,iconHeight:27},
|
||||||
|
{titele:'我的分享码',imgSrc:'/static/icon/icon-my-08.png',iconWidth:34,iconHeight:40},
|
||||||
|
{titele:'免责声明',imgSrc:'/static/icon/icon-my-09.png',iconWidth:40,iconHeight:40}
|
||||||
|
],//列表数据
|
||||||
|
vip_level:0,// 是否会员
|
||||||
|
isVip:false, //会员申请弹窗
|
||||||
|
myName:'', //姓名
|
||||||
|
myPhone:'', //电话
|
||||||
|
flag:true,
|
||||||
|
vipCode:'', //会员码
|
||||||
|
showObj:'012345678', //显示列表
|
||||||
|
mobile:'', //联系方式
|
||||||
|
orderObj:'123', //订单显示
|
||||||
|
userInfo:'',//用户信息
|
||||||
|
isLoading:false,
|
||||||
|
shareFlag:true, //是否可分享
|
||||||
|
isShow:false,
|
||||||
|
codeImg:'', //分销码
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onPageScroll(object){
|
||||||
|
if(object.scrollTop>50){
|
||||||
|
this.scroolTop = true;
|
||||||
|
}else{
|
||||||
|
this.scroolTop = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onHide() {
|
||||||
|
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getUserInfo();
|
||||||
|
if(uni.getStorageSync('showVip')){
|
||||||
|
this.showVip = uni.getStorageSync('showVip');
|
||||||
|
}else{
|
||||||
|
uni.setStorageSync('showVip','true');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
onShareAppMessage(res) {
|
||||||
|
if(res.from==='button'){//分享按钮
|
||||||
|
this.isShow = false;
|
||||||
|
return {
|
||||||
|
title:'分销二维码',
|
||||||
|
imageUrl:this.codeImg,
|
||||||
|
success: function (res) {
|
||||||
|
if(res.errMsg == 'shareAppMessage:ok'){
|
||||||
|
console.log("成功",res)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail:function(res){
|
||||||
|
console.log("失败",res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取用户信息
|
||||||
|
getUserInfo(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.$requst.get('/api/user/info').then(res=>{
|
||||||
|
console.log(res,'用户信息')
|
||||||
|
if(res.code==0) {
|
||||||
|
this.userInfo = res.data;
|
||||||
|
uni.setStorageSync('business_id',res.data.business_id);
|
||||||
|
let newArr = res.data.order_count;
|
||||||
|
this.headPortrait = res.data.headimgurl;
|
||||||
|
this.nickName = res.data.nickname;
|
||||||
|
this.mobile = res.data.mobile,
|
||||||
|
this.myPhone = this.mobile,
|
||||||
|
this.businessCode = res.data.business_code;
|
||||||
|
this.vip_level = res.data.vip_level;
|
||||||
|
this.vip_info = res.data.vip_info;
|
||||||
|
this.myOrder[0].num = newArr.all;
|
||||||
|
this.myOrder[1].num = newArr.waiting;
|
||||||
|
this.myOrder[2].num = newArr.paid;
|
||||||
|
this.myOrder[3].num = newArr.shipped;
|
||||||
|
this.myOrder[4].num = newArr.completed;
|
||||||
|
if(this.vip_level!==0){
|
||||||
|
this.showObj='02345678'
|
||||||
|
}
|
||||||
|
// 获取分销码
|
||||||
|
this.getCodeEv();
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取分销码
|
||||||
|
getCodeEv(){
|
||||||
|
this.$requst.post('/api/user/my-distribution-code').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'分销码');
|
||||||
|
this.codeImg = this.$hostHttp + res.data.qr;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 跳转方式
|
||||||
|
toMore(index){
|
||||||
|
if(index == 0){
|
||||||
|
if(this.mobile!==''){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/ucenter/ucenter`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}else if(index == 1){
|
||||||
|
if(this.vip_level == 0 && this.mobile!==''){
|
||||||
|
this.isVip = true;
|
||||||
|
}
|
||||||
|
}else if(index == 2){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/address/address`
|
||||||
|
})
|
||||||
|
}else if(index == 3){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/recharge/recharge`
|
||||||
|
})
|
||||||
|
}else if(index == 4){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/integral/integral`
|
||||||
|
})
|
||||||
|
}else if(index == 5){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/distribution/distribution`
|
||||||
|
})
|
||||||
|
}else if(index == 6){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/coupon/coupon`
|
||||||
|
})
|
||||||
|
}else if(index == 7){
|
||||||
|
this.isShow = true;
|
||||||
|
}else if(index == 8){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/disclaimers/disclaimers`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取授权信息
|
||||||
|
onGetPhoneNumberA(e){
|
||||||
|
if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户决绝授权
|
||||||
|
this.$toolAll.tools.showToast('您已拒绝授权');
|
||||||
|
}else{ //允许授权
|
||||||
|
let params={
|
||||||
|
iv:e.detail.iv,
|
||||||
|
encryptedData:e.detail.encryptedData
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/bind-phone',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('绑定成功');
|
||||||
|
this.getUserInfo();
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/ucenter/ucenter`
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onGetPhoneNumberB(e){
|
||||||
|
if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户决绝授权
|
||||||
|
this.$toolAll.tools.showToast('您已拒绝授权');
|
||||||
|
}else{ //允许授权
|
||||||
|
let params={
|
||||||
|
iv:e.detail.iv,
|
||||||
|
encryptedData:e.detail.encryptedData
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/bind-phone',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('绑定成功');
|
||||||
|
this.getUserInfo();
|
||||||
|
this.isVip =true;
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 提交会员申请
|
||||||
|
submitEv(){
|
||||||
|
if(this.checkEmpty() && this.flag){
|
||||||
|
this.flag = false;
|
||||||
|
let params = {
|
||||||
|
real_name:this.myName,
|
||||||
|
mobile:this.myPhone,
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/register-vip',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.closeEv(); //关闭会员申请
|
||||||
|
this.getUserInfo(); // 刷新信息
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},2000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 验证表单
|
||||||
|
checkEmpty(){
|
||||||
|
let result = false;
|
||||||
|
if(!this.myName) {
|
||||||
|
this.$toolAll.tools.showToast('请填写姓名');
|
||||||
|
} else if(this.$toolAll.tools.isPhone(this.myPhone)) {
|
||||||
|
this.$toolAll.tools.showToast('请正确填写联系电话');
|
||||||
|
} else {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
//关闭会员申请
|
||||||
|
closeEv(){
|
||||||
|
this.isVip = false;
|
||||||
|
this.myName = '';
|
||||||
|
this.flag = true;
|
||||||
|
this.isShow = false;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 跳转订单管理
|
||||||
|
changeOrder(index){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/order/order?tag=${this.myOrder[index].tag}&index=${index}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 保存二维码
|
||||||
|
saveImg(){
|
||||||
|
this.$toolAll.tools.saveImg(this.customerSrc);
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
shareImgEv(id){
|
||||||
|
this.$toolAll.tools.showToast('分享图生成中...','none',10000);
|
||||||
|
if(this.shareFlag){
|
||||||
|
this.shareFlag = false;
|
||||||
|
this.$requst.post('/api/spu/share-img',{spu_id:id}).then(res=>{
|
||||||
|
console.log(base64ToPath(res.data.poster),'分享图片')
|
||||||
|
base64ToPath(res.data.poster).then(path=>{
|
||||||
|
uni.hideToast();
|
||||||
|
this.$toolAll.tools.showToast('正在调起分享...');
|
||||||
|
wx.showShareImageMenu({
|
||||||
|
path: path,
|
||||||
|
success:(res=>{
|
||||||
|
this.shareFlag = true;
|
||||||
|
}),
|
||||||
|
fail:(err=>{
|
||||||
|
this.shareFlag = true;
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} else {this.$toolAll.tools.showToast('请勿重复点击');}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,278 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x170" v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="地址管理" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 收件人信息 -->
|
||||||
|
<view class="settlement-content pad-zy20 border-box">
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30" v-for="(item,index) in addressList" :key="index">
|
||||||
|
<view class="addr-info mar-s20" @tap.stop="changeAddr(item.id)">
|
||||||
|
<view class="txt mar-x20">
|
||||||
|
<view class="font30 mar-x10">{{item.name}}<text style="margin-left: 30rpx;">{{item.phone}}</text></view>
|
||||||
|
<text class="font24 color-8c">{{item.addressMsg}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="addr-bottom font28 flex">
|
||||||
|
<label class="radio flex"><radio :checked="item.is_default" @tap.stop="chooseEv(item.id)" color="#febf00"/>设为默认地址</label>
|
||||||
|
<view class="btns flex">
|
||||||
|
<view class="btn" @tap="openEdit(item.id)">编辑</view>
|
||||||
|
<view class="btn" @tap="delAddress(item.id)">删除</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="pull-btn background-white border-box">
|
||||||
|
<view class="btn background-orange font36 radius30 flex" @tap="openAdd">新增地址</view>
|
||||||
|
</view>
|
||||||
|
<!-- 地址编辑 -->
|
||||||
|
<view class="pull-bg" style="background-color: rgba(0,0,0,.3);" v-show="isShow"></view>
|
||||||
|
<view class="vip-box-bg border-box" v-if="isShow">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">收件人地址</view>
|
||||||
|
<view class="vip-list">
|
||||||
|
<view class="vip-item mar-s20">
|
||||||
|
<view class="tips color-99">姓名</view>
|
||||||
|
<input class="input" type="text" v-model="name" placeholder="请输入姓名" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">电话</view>
|
||||||
|
<input class="input" type="number" v-model="phone" placeholder="请输入联系电话" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">地址</view>
|
||||||
|
<picker mode="region" @change="change">
|
||||||
|
<view class="addr-input flex">
|
||||||
|
<view class="input-box flex">
|
||||||
|
<input class="input-flex clips1" type="text" v-model="province" disabled="true">
|
||||||
|
<image src="/static/icon/icon-shop.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="input-box flex">
|
||||||
|
<input class="input-flex clips1" type="text" v-model="city" disabled="true">
|
||||||
|
<image src="/static/icon/icon-shop.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="input-box flex">
|
||||||
|
<input class="input-flex clips1" type="text" v-model="county" disabled="true">
|
||||||
|
<image src="/static/icon/icon-shop.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">详细地址</view>
|
||||||
|
<input class="input" type="number" v-model="address" placeholder="请输入详细地址" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 background-orange radius30 mar-s60 flex" @tap="editAddress(id)">确认保存</view>
|
||||||
|
<view class="close-btn" @tap="closeEv">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShow:false, //地址编辑弹窗
|
||||||
|
addressList:[], //地址列表
|
||||||
|
name:'', //姓名
|
||||||
|
phone:'', //电话
|
||||||
|
province:'北京市', //省
|
||||||
|
city:'北京市', //市
|
||||||
|
county:'东城区',//区
|
||||||
|
address:'', //详细地址
|
||||||
|
id:'', //地址id
|
||||||
|
changeType:'', //进入方式
|
||||||
|
flag: true, //表单提交
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op.type!==''){
|
||||||
|
this.changeType = op.type;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getAddress();
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getAddress();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 选择地址
|
||||||
|
changeAddr(id){
|
||||||
|
if(this.changeType == 'change'){
|
||||||
|
// 缓存地址id
|
||||||
|
uni.setStorageSync('addr_id',id);
|
||||||
|
// 返回
|
||||||
|
uni.navigateBack({
|
||||||
|
delta:1,
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 获取地址列表
|
||||||
|
getAddress(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
this.$requst.post('/api/user/address').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'地址列表');
|
||||||
|
let addrArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let addrObj = {
|
||||||
|
id:item.id,
|
||||||
|
name:item.name,
|
||||||
|
phone:item.phone,
|
||||||
|
addressMsg:item.province_str+item.city_str+item.county_str+item.address,
|
||||||
|
is_default:item.is_default
|
||||||
|
}
|
||||||
|
addrArr.push(addrObj);
|
||||||
|
})
|
||||||
|
this.addressList = addrArr;
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 新增&编辑地址
|
||||||
|
editAddress(){
|
||||||
|
if(this.checkEmpty() && this.flag){
|
||||||
|
let params ={
|
||||||
|
id:this.id==''?'':this.id,
|
||||||
|
name:this.name,
|
||||||
|
phone:this.phone,
|
||||||
|
province_str:this.province,
|
||||||
|
city_str:this.city,
|
||||||
|
county_str:this.county,
|
||||||
|
address:this.address
|
||||||
|
}
|
||||||
|
console.log(params,'地址信息');
|
||||||
|
this.$requst.post('/api/user/address-save',params).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
if(this.id == ''){
|
||||||
|
this.$toolAll.tools.showToast('新增成功');
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast('编辑成功');
|
||||||
|
}
|
||||||
|
// 关闭弹窗
|
||||||
|
this.closeEv();
|
||||||
|
// 重新获取地址列表
|
||||||
|
this.getAddress();
|
||||||
|
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 表单验证
|
||||||
|
checkEmpty(){
|
||||||
|
let result = false;
|
||||||
|
if(!this.name) {
|
||||||
|
this.$toolAll.tools.showToast('请填写联系人');
|
||||||
|
} else if(this.$toolAll.tools.isPhone(this.phone)) {
|
||||||
|
this.$toolAll.tools.showToast('请正确填写联系电话');
|
||||||
|
} else if(!this.province && !this.city && !this.county) {
|
||||||
|
this.$toolAll.tools.showToast('请选择地址');
|
||||||
|
} else if(!this.address) {
|
||||||
|
this.$toolAll.tools.showToast('请填写详细地址');
|
||||||
|
} else {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取地址详情
|
||||||
|
getAddressInfo(id){
|
||||||
|
this.$requst.post('/api/user/address-info',{id:id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
this.name = res.data.name;
|
||||||
|
this.phone = res.data.phone;
|
||||||
|
this.province = res.data.province_str;
|
||||||
|
this.city = res.data.city_str;
|
||||||
|
this.county = res.data.county_str;
|
||||||
|
this.address = res.data.address;
|
||||||
|
this.isShow = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 设置默认地址
|
||||||
|
chooseEv(id){
|
||||||
|
if(this.flag){
|
||||||
|
this.$requst.post('/api/user/address-set-default',{id:id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
this.$toolAll.tools.showToast('设置成功');
|
||||||
|
// 重新获取地址列表
|
||||||
|
this.getAddress();
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除地址
|
||||||
|
delAddress(id){
|
||||||
|
if(this.flag){
|
||||||
|
this.$requst.post('/api/user/address-del',{id:id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
this.$toolAll.tools.showToast('删除成功');
|
||||||
|
// 重新获取地址列表
|
||||||
|
this.getAddress();
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 打开编辑
|
||||||
|
openEdit(id){
|
||||||
|
if(id!==''){
|
||||||
|
this.id = id;
|
||||||
|
this.getAddressInfo(id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 打开新增
|
||||||
|
openAdd(){
|
||||||
|
this.isShow = true;
|
||||||
|
this.name = '';
|
||||||
|
this.phone = '';
|
||||||
|
this.province = '北京市';
|
||||||
|
this.city = '北京市';
|
||||||
|
this.county = '东城区';
|
||||||
|
this.address = '';
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选择省市区
|
||||||
|
change(e){
|
||||||
|
this.province = e.detail.value[0];
|
||||||
|
this.city = e.detail.value[1];
|
||||||
|
this.county = e.detail.value[2];
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
closeEv(){
|
||||||
|
this.isShow = false;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,115 @@
|
||||||
|
<template>
|
||||||
|
<view v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="优惠券" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 优惠券 -->
|
||||||
|
<view class="record-nav border-box flex" style="background-color: #f5f5f5;padding: 40rpx 20rpx;margin: 0;">
|
||||||
|
<view class="item color-8c radius20 border-box" :class="index==navIndex?'cur':''" v-for="(item,index) in navList" :key="index" @tap="changeNav(index)">{{item.title}}</view>
|
||||||
|
</view>
|
||||||
|
<!-- 优惠券列表 -->
|
||||||
|
<view class="coupon-list pad-zy20 border-box">
|
||||||
|
<view class="coupon-item radius30 mar-s40 flex" :class="navIndex==2?'grey':''" v-for="(item,index) in couponList" :key="index">
|
||||||
|
<view class="price color-ff border-box"><text class="font30">¥</text>{{parseInt(item.amount)}}</view>
|
||||||
|
<view class="txt">
|
||||||
|
<view class="font36">{{item.name}}</view>
|
||||||
|
<view class="font24 color-8c mar-s10">满{{parseInt(item.condition)}}减{{parseInt(item.amount)}}</view>
|
||||||
|
<view class="font24 color-8c mar-s10">{{item.begin_at}}至{{item.end_at}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn mar-zy20 color-ff font24" v-if="navIndex==0" @tap="useEv">使用</view>
|
||||||
|
<view class="btn mar-zy20 color-ff font24" v-if="navIndex==1" @tap="receiveEv(item.id,index)">领取</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 到底啦 -->
|
||||||
|
<view class="no-more font24" v-if="noMore" style="margin-top: 20rpx;"><text>—— 到底啦 ——</text></view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
navList:[
|
||||||
|
{title:'已领取',tag:'normal'},
|
||||||
|
{title:'可领取',tag:'waiting'},
|
||||||
|
{title:'已过期',tag:'invalid'}
|
||||||
|
], //导航数据
|
||||||
|
navIndex:0, //导航位置
|
||||||
|
couponList:[], //优惠券列表
|
||||||
|
page:1,
|
||||||
|
size:10,
|
||||||
|
noMore:false,
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op.index){
|
||||||
|
this.navIndex = op.index;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getCouponEv();
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
if(!this.noMore){
|
||||||
|
this.page++;
|
||||||
|
// 查询优惠券
|
||||||
|
this.getCouponEv();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 查询优惠券
|
||||||
|
getCouponEv(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
status:this.navList[this.navIndex].tag
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/get-coupon-list',params).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'优惠券列表');
|
||||||
|
if(res.data.length == 0){
|
||||||
|
this.noMore = true;
|
||||||
|
}
|
||||||
|
this.couponList = this.couponList.concat(res.data);
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 使用优惠券
|
||||||
|
useEv(){
|
||||||
|
// 去首页
|
||||||
|
uni.reLaunch({
|
||||||
|
url:`/pages/index/index`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 领取优惠券
|
||||||
|
receiveEv(id){
|
||||||
|
this.$requst.get('/api/user/get-coupon',{coupon_id:id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
this.$toolAll.tools.showToast('领取成功');
|
||||||
|
this.couponList.splice(index,1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 导航切换
|
||||||
|
changeNav(index){
|
||||||
|
if(index!==this.navIndex){
|
||||||
|
this.navIndex = index;
|
||||||
|
// 清除数据
|
||||||
|
this.noMore = false;
|
||||||
|
this.couponList = [];
|
||||||
|
this.page = 1;
|
||||||
|
// 查询优惠券
|
||||||
|
this.getCouponEv();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,423 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x150" v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="分销中心" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 分销概况 -->
|
||||||
|
<view class="distribution border-box">
|
||||||
|
<view class="distribution-msg radius30 pad-all40 border-box">
|
||||||
|
<view class="distribution-txt border-box flex">
|
||||||
|
<view class="txt">
|
||||||
|
<view class="title font30 mar-x20">我的佣金</view>
|
||||||
|
<view class="price font60"><text class="font48">¥</text>{{commission}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="code-btn mar-s10" @tap="openCode">
|
||||||
|
<image src="/static/icon/icon-code.png" mode="widthFix" style="width: 87rpx;height: 87rpx;"></image>
|
||||||
|
<view class="font24 mar-s10">查看分销码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="distribution-profit mar-s40 flex">
|
||||||
|
<view class="item">
|
||||||
|
<text class="font24">累计收益</text>
|
||||||
|
<view class="profit-price font36 mar-s10">¥{{cumulative_income>0?cumulative_income:'0'}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="font24">累计提现</text>
|
||||||
|
<view class="profit-price font36 mar-s10">¥{{cumulative_withdrawal>0?cumulative_withdrawal:'0'}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="line"></view>
|
||||||
|
<view class="item">
|
||||||
|
<text class="font24">我的团队</text>
|
||||||
|
<view class="profit-price font36 mar-s10">{{my_team}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 记录导航 -->
|
||||||
|
<view class="record-nav border-box pad-zy20 flex">
|
||||||
|
<view class="item color-8c radius20 border-box" :class="index==navIndex?'cur':''" v-for="(item,index) in navList" :key="index" @tap="changeNav(index)">{{item}}</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 记录列表 -->
|
||||||
|
<view class="record-list border-box">
|
||||||
|
<!-- 团队导航 -->
|
||||||
|
<view class="team-nav flex" v-if="navIndex==1">
|
||||||
|
<view class="item" v-for="(item,index) in teamNav" :key="index" @tap="changeTeam(index)">
|
||||||
|
<view class="txt font30">{{item}}</view>
|
||||||
|
<view class="line mar-s15" :class="index==teamIndex?'background-orange':''"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="record-item border-box pad-sx40 flex" v-for="(item,index) in recordList" :key="index">
|
||||||
|
<view class="left flex">
|
||||||
|
<view class="img radius30" v-if="item.cover">
|
||||||
|
<image :src="item.cover" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="txt">
|
||||||
|
<view class="font36 mar-x10"><text class="font26" v-if="navIndex==2">¥</text>{{item.name}}</view>
|
||||||
|
<view class="font24 color-99">{{item.created_at}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="right">
|
||||||
|
<view class="font24" v-if="navIndex==2">
|
||||||
|
<text v-if="item.title=='待审批'">{{item.title}}</text>
|
||||||
|
<text class="color-red" v-if="item.title=='已驳回'">{{item.title}}</text>
|
||||||
|
<text style="color: #7b7b7b;" v-if="item.title=='已完成'">{{item.title}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="font24" v-else>{{item.title}}</view>
|
||||||
|
<view class="font30 color-red mar-s10" v-if="item.price">{{item.price>0&&navIndex==0?'+'+item.price:item.price}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 到底啦 -->
|
||||||
|
<view class="no-more font24" v-if="noMore"><text>—— 到底啦 ——</text></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="pull-btn border-box" style="background-color: #f5f5f5; padding-top: 28rpx;">
|
||||||
|
<view class="btn background-orange font36 radius30 flex" @tap="openWithdrawal">立即提现</view>
|
||||||
|
</view>
|
||||||
|
<!-- 分销码 -->
|
||||||
|
<view class="pull-bg" style="background-color: rgba(0,0,0,.3);" v-show="isShow || withdrawal"></view>
|
||||||
|
<view class="vip-box-bg border-box" v-if="isShow">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">分销二维码</view>
|
||||||
|
<view class="vip-code flex">
|
||||||
|
<image :src="codeImg" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 radius30 color-ff mar-s60 flex" style="background-color: #00b809;position: relative;">
|
||||||
|
<image src="/static/icon/icon-wechat.png" mode="widthFix"></image>
|
||||||
|
<text>分享给朋友</text>
|
||||||
|
<button class="shear-btn" type="primary" open-type="share"></button>
|
||||||
|
</view>
|
||||||
|
<view class="close-btn" @tap="closeEv">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 提现 -->
|
||||||
|
<view class="vip-box-bg border-box" v-if="withdrawal">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">提现申请</view>
|
||||||
|
<view class="vip-list">
|
||||||
|
<view class="vip-item mar-s20">
|
||||||
|
<view class="tips color-99">提现金额</view>
|
||||||
|
<input class="input" type="number" v-model="myPrice" placeholder="请输入提现金额" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">姓名</view>
|
||||||
|
<input class="input color-99" type="text" v-model="real_name" disabled="true">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">开户行</view>
|
||||||
|
<input class="input color-99" type="number" v-model="deposit_bank" disabled="true">
|
||||||
|
</view>
|
||||||
|
<view class="vip-item mar-s40">
|
||||||
|
<view class="tips color-99">银行卡号</view>
|
||||||
|
<input class="input color-99" type="number" v-model="bank_account" disabled="true">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 background-orange radius30 mar-s60 flex" @tap="submitEv">立即提现</view>
|
||||||
|
<view class="close-btn" @tap="closeEv">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isShow:false, //分销码弹窗
|
||||||
|
withdrawal:false, //提现弹窗
|
||||||
|
navList:['返利记录','我的团队','提现记录'], //导航数据
|
||||||
|
navIndex:0, //导航当前
|
||||||
|
teamNav:['经销商团队','我的消费团'], //团队导航
|
||||||
|
teamIndex:0, //团队当前
|
||||||
|
recordList:[], //记录列表
|
||||||
|
commission:0, //佣金金额
|
||||||
|
cumulative_income:0, //累计收益
|
||||||
|
cumulative_withdrawal:0, //累计提现
|
||||||
|
my_team:0, //我的团队
|
||||||
|
codeImg:'', //分销码
|
||||||
|
real_name:'', //姓名
|
||||||
|
bank_account:'',//卡号
|
||||||
|
deposit_bank:'', //银行
|
||||||
|
myPrice:'', //提现金额
|
||||||
|
page:1,
|
||||||
|
size:10,
|
||||||
|
noMore:false,
|
||||||
|
flag:true,
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
// // 调用返利记录列表
|
||||||
|
// this.getRebateEv();
|
||||||
|
// // 调用我的团队列表
|
||||||
|
// this.getMyTeam();
|
||||||
|
// // 调用获取提现记录列表
|
||||||
|
// this.getWithdrawal();
|
||||||
|
|
||||||
|
// 获取分销码
|
||||||
|
this.getCodeEv();
|
||||||
|
|
||||||
|
// 获取列表信息
|
||||||
|
this.getRecordList();
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
onShareAppMessage(res) {
|
||||||
|
this.isShow = false;
|
||||||
|
if(res.from==='button'){//分享按钮
|
||||||
|
return {
|
||||||
|
title:'分销二维码',
|
||||||
|
imageUrl:this.codeImg,
|
||||||
|
success: function (res) {
|
||||||
|
if(res.errMsg == 'shareAppMessage:ok'){
|
||||||
|
console.log("成功",res)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail:function(res){
|
||||||
|
console.log("失败",res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
if(!this.noMor){
|
||||||
|
this.page++;
|
||||||
|
// 获取列表信息
|
||||||
|
this.getRecordList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getUserInfo();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取个人信息
|
||||||
|
getUserInfo(){
|
||||||
|
this.$requst.post('/api/user/info').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'用户信息');
|
||||||
|
this.commission = res.data.commission;
|
||||||
|
this.cumulative_income = this.$toolAll.tools.addXiaoShu(res.data.cumulative_income);
|
||||||
|
this.cumulative_withdrawal = this.$toolAll.tools.addXiaoShu(res.data.cumulative_withdrawal);
|
||||||
|
this.my_team = res.data.my_team;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 获取分销码
|
||||||
|
getCodeEv(){
|
||||||
|
this.$requst.post('/api/user/my-distribution-code').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'分销码');
|
||||||
|
this.codeImg = this.$hostHttp + res.data.qr;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取列表信息
|
||||||
|
getRecordList(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
if(this.navIndex == 0){
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
type:'commission'
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/data-log-list',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'返利记录');
|
||||||
|
let recordArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
name:item.subAccount==null?'':item.subAccount.nickname,
|
||||||
|
cover:item.subAccount==null?'':item.subAccount.headimgurl,
|
||||||
|
created_at:item.created_at,
|
||||||
|
title:item.name,
|
||||||
|
price:this.$toolAll.tools.addXiaoShu(item.num)
|
||||||
|
}
|
||||||
|
recordArr.push(obj);
|
||||||
|
})
|
||||||
|
if(recordArr.length==0){
|
||||||
|
this.noMor = true;
|
||||||
|
}
|
||||||
|
this.recordList = this.recordList.concat(recordArr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if(this.navIndex == 1){
|
||||||
|
if(this.teamIndex == 0){
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
is_distributor:1
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/team-list',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'经销商团队');
|
||||||
|
let recordArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
name:item.nickname,
|
||||||
|
cover:item.headimgurl,
|
||||||
|
created_at:item.created_at,
|
||||||
|
title:'累计返利',
|
||||||
|
price:this.$toolAll.tools.addXiaoShu(item.contribution)
|
||||||
|
}
|
||||||
|
recordArr.push(obj);
|
||||||
|
})
|
||||||
|
if(recordArr.length==0){
|
||||||
|
this.noMor = true;
|
||||||
|
}
|
||||||
|
this.recordList = this.recordList.concat(recordArr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
is_distributor:0
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/team-list',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'我的消费团队');
|
||||||
|
let recordArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
name:item.nickname,
|
||||||
|
cover:item.headimgurl,
|
||||||
|
created_at:item.created_at,
|
||||||
|
title:'累计返利',
|
||||||
|
price:this.$toolAll.tools.addXiaoShu(item.contribution)
|
||||||
|
}
|
||||||
|
recordArr.push(obj);
|
||||||
|
})
|
||||||
|
if(recordArr.length==0){
|
||||||
|
this.noMor = true;
|
||||||
|
}
|
||||||
|
this.recordList = this.recordList.concat(recordArr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(this.navIndex == 2){
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/withdrawal-commission-log-list',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'提现列表');
|
||||||
|
let recordArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id:item.id,
|
||||||
|
name:this.$toolAll.tools.addXiaoShu(item.number),
|
||||||
|
cover:'',
|
||||||
|
created_at:item.created_at,
|
||||||
|
title:item.status,
|
||||||
|
price:''
|
||||||
|
}
|
||||||
|
recordArr.push(obj);
|
||||||
|
})
|
||||||
|
if(recordArr.length==0){
|
||||||
|
this.noMor = true;
|
||||||
|
}
|
||||||
|
this.recordList = this.recordList.concat(recordArr);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// 打开分销码
|
||||||
|
openCode(){
|
||||||
|
this.isShow = true;
|
||||||
|
},
|
||||||
|
// 打开提现
|
||||||
|
openWithdrawal(){
|
||||||
|
this.$requst.post('/api/user/get-deposit-bank-info').then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'提现账户信息');
|
||||||
|
this.real_name = res.data.real_name;
|
||||||
|
this.bank_account =res.data.bank_account;
|
||||||
|
this.deposit_bank = res.data.deposit_bank;
|
||||||
|
this.withdrawal = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 发起提现
|
||||||
|
submitEv(){
|
||||||
|
if(this.checkEmpty() && this.flag){
|
||||||
|
let params = {
|
||||||
|
commission:this.myPrice,
|
||||||
|
username:this.real_name,
|
||||||
|
deposit_bank:this.deposit_bank,
|
||||||
|
bank_account:this.bank_account
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/commission-withdrawal',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'提现成功');
|
||||||
|
this.withdrawal = false;
|
||||||
|
this.getUserInfo();
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},2000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 验证表单
|
||||||
|
checkEmpty(){
|
||||||
|
let result = false;
|
||||||
|
if(!this.myPrice) {
|
||||||
|
this.$toolAll.tools.showToast('请填写提现金额');
|
||||||
|
} else {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 切换导航
|
||||||
|
changeNav(index){
|
||||||
|
if(index!==this.navIndex){
|
||||||
|
this.navIndex = index;
|
||||||
|
this.page = 0;
|
||||||
|
this.recordList = [];
|
||||||
|
// 获取列表信息
|
||||||
|
this.getRecordList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 切换团队
|
||||||
|
changeTeam(index){
|
||||||
|
if(index!==this.teamIndex){
|
||||||
|
this.teamIndex = index;
|
||||||
|
this.page = 0;
|
||||||
|
this.recordList = [];
|
||||||
|
// 获取列表信息
|
||||||
|
this.getRecordList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 关闭弹窗
|
||||||
|
closeEv(){
|
||||||
|
this.isShow = false;
|
||||||
|
this.withdrawal =false;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,109 @@
|
||||||
|
<template>
|
||||||
|
<view v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="我的积分" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 余额概况 -->
|
||||||
|
<view class="recharge border-box">
|
||||||
|
<view class="recharge-msg radius30 border-box">
|
||||||
|
<view class="txt flex">
|
||||||
|
<text class="font30">我的积分</text>
|
||||||
|
<text class="font24" @tap="goIntegralRule">积分规则</text>
|
||||||
|
</view>
|
||||||
|
<view class="price font60">{{score}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 明细 -->
|
||||||
|
<view class="recharge-detailed border-box pad-all20 mar-s20">
|
||||||
|
<view class="recharge-title font30 flex">
|
||||||
|
<view class="line background-orange"></view>
|
||||||
|
<text>积分明细</text>
|
||||||
|
</view>
|
||||||
|
<view class="detailed-list">
|
||||||
|
<view class="detailed-item font30 border-box pad-sx20 flex" v-for="(item,index) in detailedList" :key="index">
|
||||||
|
<view class="txt">
|
||||||
|
<view class="name mar-x10">{{item.name}}</view>
|
||||||
|
<view class="time font24 color-99">{{item.created_at}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="price" style="margin-right: 10rpx;" :class="item.num<0?'color-red':''">{{item.num}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 到底啦 -->
|
||||||
|
<view class="no-more font24" style="margin-top: 20rpx;" v-if="noMore"><text>—— 到底啦 ——</text></view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
detailedList:[],//明细列表
|
||||||
|
score:0, //积分
|
||||||
|
page:1,
|
||||||
|
size:10,
|
||||||
|
total:0,
|
||||||
|
noMore:false,
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
// 获取个人信息
|
||||||
|
this.getUserInfo();
|
||||||
|
},
|
||||||
|
onReachBottom() {
|
||||||
|
if(!this.noMore){
|
||||||
|
this.page++;
|
||||||
|
// 查询积分明细
|
||||||
|
this.getScoreEV();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取个人信息
|
||||||
|
getUserInfo(){
|
||||||
|
this.$requst.post('/api/user/info').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'用户信息');
|
||||||
|
this.score = res.data.score;
|
||||||
|
|
||||||
|
this.detailedList = [];
|
||||||
|
// 查询积分明细
|
||||||
|
this.getScoreEV();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询积分明细
|
||||||
|
getScoreEV(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
let params = {
|
||||||
|
page:this.page,
|
||||||
|
size:this.size,
|
||||||
|
type:'score'
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/data-log-list',params).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'积分明细');
|
||||||
|
if(res.data==0){
|
||||||
|
this.noMore = true;
|
||||||
|
}
|
||||||
|
this.detailedList = this.detailedList.concat(res.data);
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查看积分规则
|
||||||
|
goIntegralRule(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesB/integral-rule/integral-rule`
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,199 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x170" v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="订单详情" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 收件人信息 -->
|
||||||
|
<view class="settlement-content pad-zy20 border-box">
|
||||||
|
<!-- 订单简介 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="order-info pad-zy20 border-box">
|
||||||
|
<view class="flex mar-s20">
|
||||||
|
<text>订单编号</text>
|
||||||
|
<text>{{orderDetail.coding}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex mar-s20">
|
||||||
|
<text>下单时间</text>
|
||||||
|
<text>{{orderDetail.created_at}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex mar-s20">
|
||||||
|
<text>订单状态</text>
|
||||||
|
<text>{{orderDetail.status_text}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 订单信息 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">订单信息</view>
|
||||||
|
<view class="shop-slide-list">
|
||||||
|
<view class="shop-slide-item">
|
||||||
|
<view class="item border-box background-white flex" v-for="(item,index) in orderDetail.skus" :key="index">
|
||||||
|
<view class="shop-img radius30">
|
||||||
|
<image :src="item.spu_cover" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt">
|
||||||
|
<view class="shop-txt-top">
|
||||||
|
<view class="title font30 clips1">{{item.spu_name}}</view>
|
||||||
|
<view class="specs font24 color-66 mar-sx10 clips2">规格:{{item.sku_name}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="shop-txt-bottom flex">
|
||||||
|
<!-- 商品价格 -->
|
||||||
|
<view class="price font30 color-red">¥{{item.price}}<text class="font24 color-66">x{{item.num}}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 收货信息 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30">
|
||||||
|
<view class="title">收货信息</view>
|
||||||
|
<view class="addressee-info mar-s20 flex">
|
||||||
|
<view class="txt">
|
||||||
|
<view class="font30 mar-x10">{{orderDetail.address_info.name}}<text>{{orderDetail.address_info.phone}}</text></view>
|
||||||
|
<text class="font24 color-8c">{{orderDetail.address_info.province_str}}{{orderDetail.address_info.city_str}}{{orderDetail.address_info.county_str}}{{orderDetail.address_info.address}}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 物流信息 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30" v-if="orderDetail.express_name!==''">
|
||||||
|
<view class="title">物流信息</view>
|
||||||
|
<view class="addressee-info mar-s20 flex">
|
||||||
|
<view class="txt" style="width: 100%;">
|
||||||
|
<view class="font30 mar-x10">{{orderDetail.express_name}}</view>
|
||||||
|
<view class="txt-coding font24 flex" style="margin-top: 10rpx;">
|
||||||
|
<text class="color-8c">快递单号:{{orderDetail.express_number}}</text>
|
||||||
|
<view class="copy_btn" @tap="copyEV">复制查询</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 付款信息 -->
|
||||||
|
<view class="section background-white radius30 mar-x40 pad-all25 border-box font30" v-if="orderDetail.status!=='waiting'">
|
||||||
|
<view class="pay-info">
|
||||||
|
<view class="flex">
|
||||||
|
<text>商品总金额</text>
|
||||||
|
<text class="color-red">{{orderDetail.original_price}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex mar-s20">
|
||||||
|
<text>折扣优惠</text>
|
||||||
|
<text class="color-red">{{orderDetail.discount_money>0?orderDetail.discount_money:0}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex mar-s20">
|
||||||
|
<text>积分抵扣</text>
|
||||||
|
<text class="color-red">{{orderDetail.score_deduction_money>0?orderDetail.score_deduction_money:0}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="pay-actual mar-s30 flex">实付款:<text class="color-red font36">{{priceAll>0?'¥'+ priceAll:0}}</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="pull-btn background-white border-box" style="box-shadow: 0 -9rpx 21rpx rgba(0,0,0,.1);">
|
||||||
|
<view class="btn border-btn border-box color-8c font36 radius30 flex" @tap="cancleEv(orderDetail.coding)" v-if="orderDetail.status == 'waiting' || orderDetail.status == 'paid'">取消订单</view>
|
||||||
|
<view class="btn border-box background-orange color-ff font36 radius30 flex" @tap="affirmEv(orderDetail.id)" v-if="orderDetail.status == 'shipped'">确认收货</view>
|
||||||
|
<view class="btn border-btn border-box color-8c font36 radius30 flex" @tap="buyAgain" v-if="orderDetail.status == 'completed' || orderDetail.status == 'closed'">再次购买</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
orderDetail:{}, //订单详情
|
||||||
|
flag:true,
|
||||||
|
isLoading:false,
|
||||||
|
id:0, //订单id
|
||||||
|
priceAll:'', //实际付款
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op.id !== ''){
|
||||||
|
this.id = op.id;
|
||||||
|
}
|
||||||
|
this.getOrderDetail();
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
onShareAppMessage() {
|
||||||
|
|
||||||
|
},
|
||||||
|
// 分享到朋友圈
|
||||||
|
onShareTimeline(res){
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 查询订单详情
|
||||||
|
getOrderDetail(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.$requst.get('/api/user/order-detail',{id:this.id}).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
console.log(res,'订单详情')
|
||||||
|
this.orderDetail = res.data;
|
||||||
|
this.priceAll = this.$toolAll.tools.addXiaoShu(parseFloat(res.data.balance) + parseFloat(res.data.wechat));
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 取消订单
|
||||||
|
cancleEv(coding){
|
||||||
|
let params = {
|
||||||
|
order_coding: coding //订单号
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/cancel',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('取消订单成功(*^▽^*)');
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pagesA/order/order'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 确认收货
|
||||||
|
affirmEv(id){
|
||||||
|
let params = {
|
||||||
|
order_id: id //订单号
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/accepted',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('确认收货成功(*^▽^*)');
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pagesA/order/order'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 再次购买
|
||||||
|
buyAgain(index){
|
||||||
|
let buyList = [];
|
||||||
|
let newArr = this.orderDetail;
|
||||||
|
newArr.skus.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
sku_coding: item.coding,
|
||||||
|
num: item.num
|
||||||
|
}
|
||||||
|
buyList.push(obj);
|
||||||
|
})
|
||||||
|
uni.setStorageSync('buyList',buyList);
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/cart/settlement'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 复制查询
|
||||||
|
copyEV(){
|
||||||
|
this.$toolAll.tools.clickCopy(this.orderDetail.express_number);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,298 @@
|
||||||
|
<template>
|
||||||
|
<view v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="订单管理" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 订单搜索 -->
|
||||||
|
<view class="order-search">
|
||||||
|
<input class="input font30 pad-zy40 color-66 radius20 border-box" type="text" placeholder="请输入订单编号" placeholder-style="color:#666666">
|
||||||
|
</view>
|
||||||
|
<!-- 订单导航 -->
|
||||||
|
<view class="order-nav-bg mar-s30" :style="{top:newTop+'px'}">
|
||||||
|
<scroll-view scroll-x="true" :scroll-left="tabsScrollLeft" @scroll="scroll">
|
||||||
|
<view class="order-nav flex" id="tab_list" :style="{width:navWidth}">
|
||||||
|
<view id="tab_item" class="item font30 color-8c radius20" :class="activeIndex == index?'cur':''" v-for="(item,index) in orderNav" @tap="changeNav(index,item.tag)">{{item.title}}</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 订单列表 -->
|
||||||
|
<view class="order-list">
|
||||||
|
<view class="order-item" @tap.stop="toDetail(item.id)" v-for="(item,index) in orderList" :key="index">
|
||||||
|
<view class="order-code flex">
|
||||||
|
<text>订单号:{{item.coding}}</text>
|
||||||
|
<text class="status color-red" v-if="item.status=='waiting'">{{item.status_text}}</text>
|
||||||
|
<text class="status" style="color: #02d20b;" v-if="item.status=='paid' || item.status=='shipped'">{{item.status_text}}</text>
|
||||||
|
<text class="status color-99" v-if="item.status=='completed' || item.status=='closed'">{{item.status_text}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="item-bg">
|
||||||
|
<view class="item flex" v-for="(item1,index1) in item.skus" :key="index1">
|
||||||
|
<view class="img"><image :src="item1.spu_cover" mode="widthFix"></image></view>
|
||||||
|
<view class="txt">
|
||||||
|
<view class="title clips1">{{item1.spu_name}}</view>
|
||||||
|
<view class="specs clips2">规格:{{item1.sku_name}}</view>
|
||||||
|
<view class="price flex">
|
||||||
|
<text>¥{{item1.price}}</text>
|
||||||
|
<view><text>x</text>{{item1.num}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="total-price flex">
|
||||||
|
<text>合计:¥{{item.price}}</text>
|
||||||
|
<view class="btns flex" v-if="item.status == 'waiting'">
|
||||||
|
<view class="btn border-box" @tap.stop="cancleEv(item.coding)">取消订单</view>
|
||||||
|
<view class="btn btn-01 border-box" @tap.stop="payEv(item.coding)">立即支付</view>
|
||||||
|
</view>
|
||||||
|
<view class="btns flex" v-if="item.status == 'paid'">
|
||||||
|
<view class="btn border-box" @tap.stop="cancleEv(item.coding)">取消订单</view>
|
||||||
|
</view>
|
||||||
|
<view class="btns flex" v-if="item.status == 'shipped'">
|
||||||
|
<view class="btn btn-02 border-box background-orange" @tap.stop="affirmEv(item.id)">确认收货</view>
|
||||||
|
</view>
|
||||||
|
<view class="btns flex" v-if="item.status == 'completed' || item.status == 'closed'">
|
||||||
|
<view class="btn border-box" @tap.stop="buyAgain(index)">再次购买</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 到底啦 -->
|
||||||
|
<view class="no-more font24" style="margin: 0;padding: 25rpx 0;" v-if="total!==0&&totalAll==total"><text>—— 到底啦 ——</text></view>
|
||||||
|
<!-- 没有内容 -->
|
||||||
|
<nothing-page v-if="total==0&&totalAll == total" content="还没有相关订单哟(*^▽^*)"></nothing-page>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
newTop:uni.getSystemInfoSync().statusBarHeight + 50,
|
||||||
|
orderNav:[
|
||||||
|
{title:'全部',tag:'all'},
|
||||||
|
{title:'待付款',tag:'waiting'},
|
||||||
|
{title:'已下单',tag:'paid'},
|
||||||
|
{title:'已发货',tag:'shipped'},
|
||||||
|
{title:'已完成',tag:'completed'},
|
||||||
|
],
|
||||||
|
activeIndex:0,
|
||||||
|
scrollLeft:0,
|
||||||
|
tabsScrollLeft:0,
|
||||||
|
navWidth:'', //导航宽度
|
||||||
|
orderList:[],
|
||||||
|
flag:true,
|
||||||
|
isLoading:false,
|
||||||
|
total:0,
|
||||||
|
totalAll:-1,
|
||||||
|
page: 1,
|
||||||
|
size: 10,
|
||||||
|
tag: 'all'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op.tag !== ''){
|
||||||
|
this.tag = op.tag;
|
||||||
|
}
|
||||||
|
if(op.index !== ''){
|
||||||
|
this.activeIndex = op.index;
|
||||||
|
}
|
||||||
|
this.navWidth = this.orderNav.length*150 - 20 + 'rpx';
|
||||||
|
// 分类切换效果
|
||||||
|
this.setTabList();
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.getOrderList();
|
||||||
|
},
|
||||||
|
onReachBottom(e) {
|
||||||
|
if(this.orderList.length<this.total){
|
||||||
|
this.page++;
|
||||||
|
this.getOrderList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 分享到微信
|
||||||
|
onShareAppMessage() {
|
||||||
|
|
||||||
|
},
|
||||||
|
// 分享到朋友圈
|
||||||
|
onShareTimeline(res){
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 导航切换
|
||||||
|
changeNav(index,tag) {
|
||||||
|
this.total=0;
|
||||||
|
this.totalAll=-1;
|
||||||
|
this.activeIndex = index;
|
||||||
|
this.tag = tag;
|
||||||
|
this.orderList=[];
|
||||||
|
this.page = 1;
|
||||||
|
this.getOrderList();
|
||||||
|
// 分类切换效果
|
||||||
|
this.setTabList();
|
||||||
|
},
|
||||||
|
// 获取订单列表
|
||||||
|
getOrderList(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
let params = {
|
||||||
|
page: this.page,
|
||||||
|
size: this.size,
|
||||||
|
tag: this.tag
|
||||||
|
}
|
||||||
|
this.$requst.get('/api/user/order',params).then(res=>{
|
||||||
|
console.log(res,'订单列表')
|
||||||
|
if(res.data.length!=0){
|
||||||
|
this.total = res.data.total;
|
||||||
|
let newArr = [];
|
||||||
|
res.data.list.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
id: item.id, //id
|
||||||
|
coding: item.coding, //订单号
|
||||||
|
price: item.price, //总价
|
||||||
|
status: item.status, //订单状态英文
|
||||||
|
status_text: item.status_text, //订单状态中文
|
||||||
|
skus: item.skus //订单详情
|
||||||
|
}
|
||||||
|
newArr.push(obj);
|
||||||
|
})
|
||||||
|
this.orderList = this.orderList.concat(newArr);
|
||||||
|
if(this.orderList.length == this.total){
|
||||||
|
this.totalAll = this.total;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 去详情
|
||||||
|
toDetail(id){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pagesA/order/detail?id=${id}`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 取消订单
|
||||||
|
cancleEv(coding){
|
||||||
|
let params = {
|
||||||
|
order_coding: coding //订单号
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/cancel',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('取消订单成功(*^▽^*)');
|
||||||
|
this.orderList = [];
|
||||||
|
this.page = 1;
|
||||||
|
this.getOrderList();
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 确认收货
|
||||||
|
affirmEv(id){
|
||||||
|
let params = {
|
||||||
|
order_id: id //订单号
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/order/accepted',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('确认收货成功(*^▽^*)');
|
||||||
|
this.orderList = [];
|
||||||
|
this.page = 1;
|
||||||
|
this.getOrderList();
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 再次购买
|
||||||
|
buyAgain(index){
|
||||||
|
let buyList = [];
|
||||||
|
let newArr = this.orderList[index];
|
||||||
|
newArr.skus.forEach(item=>{
|
||||||
|
let obj = {
|
||||||
|
sku_coding: item.coding,
|
||||||
|
num: item.num
|
||||||
|
}
|
||||||
|
buyList.push(obj);
|
||||||
|
})
|
||||||
|
uni.setStorageSync('buyList',buyList);
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/cart/settlement'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 立即支付
|
||||||
|
payEv(coding){
|
||||||
|
this.$requst.post('/api/order/pay',{order_coding:coding}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
console.log(res,'立即支付');
|
||||||
|
// 调用微信支付
|
||||||
|
this.callPayMent(res.data.payment_params)
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 调用微信支付
|
||||||
|
callPayMent(data){
|
||||||
|
//调起支付
|
||||||
|
wx.requestPayment({
|
||||||
|
'timeStamp': data.timeStamp,
|
||||||
|
'nonceStr': data.nonceStr,
|
||||||
|
'package': data.package,
|
||||||
|
"signType": data.signType,
|
||||||
|
'paySign': data.sign,
|
||||||
|
'success': function (res) { // 接口调用成功的回调函数
|
||||||
|
console.log('支付成功:',res);
|
||||||
|
this.$toolAll.tools.showToast('支付成功(*^▽^*)');
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pages/cart/finish`
|
||||||
|
})
|
||||||
|
},
|
||||||
|
'fail': function (res) { // 接口调用失败的回调函数
|
||||||
|
console.log('支付失败:' + JSON.stringify(res));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 分类切换效果
|
||||||
|
setTabList() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
if (this.orderNav.length > 0) {
|
||||||
|
//计算左滑距离
|
||||||
|
this.setLeft()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
//计算左滑距离
|
||||||
|
setLeft() {
|
||||||
|
let lineLeft = 0;
|
||||||
|
this.getElementData('#tab_list', (data) => {
|
||||||
|
let list = data[0];
|
||||||
|
this.getElementData('#tab_item', (res) => {
|
||||||
|
let el = res[this.activeIndex]
|
||||||
|
lineLeft = el.width / 2 + (-list.left) + el.left - list.width / 2 - this.scrollLeft
|
||||||
|
this.tabsScrollLeft = this.scrollLeft + lineLeft
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取DOM距离
|
||||||
|
getElementData(el, callback) {
|
||||||
|
uni.createSelectorQuery().in(this).selectAll(el).boundingClientRect().exec((data) => {
|
||||||
|
callback(data[0]);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
// 滚动
|
||||||
|
scroll(e) {
|
||||||
|
this.scrollLeft = e.detail.scrollLeft;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,191 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x170" v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="我的余额" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 余额概况 -->
|
||||||
|
<view class="recharge border-box">
|
||||||
|
<view class="recharge-msg radius30 border-box">
|
||||||
|
<view class="txt flex">
|
||||||
|
<text class="font30">我的余额</text>
|
||||||
|
<text class="font24">余额可用于购物使用</text>
|
||||||
|
</view>
|
||||||
|
<view class="price font60"><text class="font48">¥</text>{{balance}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 充值金额 -->
|
||||||
|
<view class="recharge-amount border-box pad-all20 mar-s20">
|
||||||
|
<view class="recharge-title font30 flex">
|
||||||
|
<view class="line background-orange"></view>
|
||||||
|
<text>充值金额</text>
|
||||||
|
</view>
|
||||||
|
<view class="amount-list flex">
|
||||||
|
<view class="amount-item border-box radius20 mar-s25" @tap="changeAmount(index)" :class="index==amountIndex?'checked':''" v-for="(item,index) in amountList" :key="index">
|
||||||
|
<view class="font48 mar-s15">{{parseInt(item.money)}}元</view>
|
||||||
|
<text class="font24">售价{{parseInt(item.price)}}元</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 明细 -->
|
||||||
|
<view class="recharge-detailed border-box pad-all20 mar-s20">
|
||||||
|
<view class="recharge-title font30 flex">
|
||||||
|
<view class="line background-orange"></view>
|
||||||
|
<text>消费明细</text>
|
||||||
|
</view>
|
||||||
|
<view class="detailed-list">
|
||||||
|
<view class="detailed-item font30 border-box pad-sx20 flex" v-for="(item,index) in detailedList" :key="index">
|
||||||
|
<view class="txt">
|
||||||
|
<view class="name mar-x10">{{item.title}}</view>
|
||||||
|
<view class="time font24 color-99">{{item.create_time}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="price" :class="parseFloat(item.money)<0?'color-red':''">{{item.money}}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="pull-footer-bg background-white pad-all20 radius30 border-box">
|
||||||
|
<view class="pull-footer background-grey radius30 pad-all20 border-box flex">
|
||||||
|
<view class="price color-ff" style="margin-left: 24rpx;">
|
||||||
|
<view class="font60 flex">¥{{amountPrice}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn font36 color-48 background-orange radius30 flex" @tap="submitEv">确认充值</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
amountList:[],//充值模板
|
||||||
|
amountIndex:0, //充值选中
|
||||||
|
amountPrice:'', //充值金额
|
||||||
|
detailedList:[],//明细列表
|
||||||
|
balance:'', //用户余额
|
||||||
|
flag:true,
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
// 获取用户信息
|
||||||
|
this.getUserInfo();
|
||||||
|
// 获取充值模板
|
||||||
|
this.getAmountMode();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取个人信息
|
||||||
|
getUserInfo(){
|
||||||
|
this.$requst.post('/api/user/info').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'用户信息');
|
||||||
|
this.balance = res.data.balance;
|
||||||
|
// 获取余额消费记录
|
||||||
|
this.getPeiceDetailed();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取充值模板
|
||||||
|
getAmountMode(){
|
||||||
|
this.$requst.post('/api/user/recharge-template-list').then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'充值模板');
|
||||||
|
let amountArr = [];
|
||||||
|
res.data.forEach(item=>{
|
||||||
|
let amountObj = {
|
||||||
|
id:item.id,
|
||||||
|
name:item.name,
|
||||||
|
money:item.money,
|
||||||
|
price:item.price,
|
||||||
|
status:item.status
|
||||||
|
}
|
||||||
|
amountArr.push(amountObj);
|
||||||
|
})
|
||||||
|
this.amountList = amountArr;
|
||||||
|
this.amountPrice = this.$toolAll.tools.addXiaoShu(this.amountList[0].price);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取余额消费记录
|
||||||
|
getPeiceDetailed(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
})
|
||||||
|
this.$requst.post('/api/user/balance-log-list',{template_id:this.amountList[this.amountIndex].id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'余额记录');
|
||||||
|
this.detailedList = res.data;
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选择充值金额
|
||||||
|
changeAmount(index){
|
||||||
|
if(index!==this.amountIndex){
|
||||||
|
this.amountIndex = index;
|
||||||
|
this.amountPrice = this.$toolAll.tools.addXiaoShu(this.amountList[index].price);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 发起充值
|
||||||
|
submitEv(){
|
||||||
|
if(this.flag){
|
||||||
|
this.$requst.post('/api/recharge/create',{template_id:this.amountList[this.amountIndex].id}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'发起充值');
|
||||||
|
// 调用微信支付
|
||||||
|
this.callPayMent(res.data);
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 调用微信支付
|
||||||
|
callPayMent(data){
|
||||||
|
//调起支付
|
||||||
|
wx.requestPayment({
|
||||||
|
'timeStamp': data.timeStamp,
|
||||||
|
'nonceStr': data.nonceStr,
|
||||||
|
'package': data.package,
|
||||||
|
"signType": data.signType,
|
||||||
|
'paySign': data.sign,
|
||||||
|
'success': function (res) { // 接口调用成功的回调函数
|
||||||
|
console.log('支付成功:',res);
|
||||||
|
this.amountConfirm(data.coding);
|
||||||
|
},
|
||||||
|
'fail': function (res) { // 接口调用失败的回调函数
|
||||||
|
console.log('支付失败:' + JSON.stringify(res));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 确认充值
|
||||||
|
amountConfirm(coding){
|
||||||
|
this.$requst.post('/api/recharge/paid',{order_coding:coding}).then(res=>{
|
||||||
|
if(res.code == 0){
|
||||||
|
console.log(res,'充值成功');
|
||||||
|
this.$toolAll.tools.showToast('充值成功');
|
||||||
|
// 重新获取用户信息
|
||||||
|
this.getUserInfo();
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},1200)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,47 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="免责声明" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 内容 -->
|
||||||
|
<view class="disclaimers border-box" :style="{'min-height':disclaimersHeight}">
|
||||||
|
<view class="disclaimers-txt font24 color-8c">
|
||||||
|
<rich-text :nodes="disclaimers"></rich-text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
disclaimersHeight: `calc(100vh - ${uni.getSystemInfoSync().statusBarHeight + 50}px)`,
|
||||||
|
disclaimers:'',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
// 查询免责声明
|
||||||
|
this.getDisclaimers();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 查询免责声明
|
||||||
|
getDisclaimers(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.$requst.get('/api/index/statement').then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
this.disclaimers = this.$toolAll.tools.escape2Html(res.data.content);
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,105 @@
|
||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="经销商申请" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 内容 -->
|
||||||
|
<view class="distributor border-box" :style="{'min-height':disclaimersHeight}">
|
||||||
|
<view class="tags font24" style="text-align: center;color: #ff0000;">请认真填写相关信息,此信息将用于分销提现使用!</view>
|
||||||
|
<view class="distributor-list font30">
|
||||||
|
<view class="distributor-item color-99 mar-s40">
|
||||||
|
<view class="tips">我的邀请人</view>
|
||||||
|
<input class="input" type="text" :value="invite_name" disabled="true">
|
||||||
|
</view>
|
||||||
|
<view class="distributor-item mar-s40">
|
||||||
|
<view class="tips color-99">姓名</view>
|
||||||
|
<input class="input" type="text" v-model="real_name" placeholder="请输入您的真实姓名" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="distributor-item mar-s40">
|
||||||
|
<view class="tips color-99">电话</view>
|
||||||
|
<input class="input" type="number" v-model="phone" placeholder="请输入您的手机号" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="distributor-item mar-s40">
|
||||||
|
<view class="tips color-99">开户行</view>
|
||||||
|
<input class="input" type="text" v-model="deposit_bank" placeholder="请填写开户行(如:中国银行)" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
<view class="distributor-item mar-s40">
|
||||||
|
<view class="tips color-99">银行卡号</view>
|
||||||
|
<input class="input" type="number" v-model="bank_account" placeholder="请填写银行卡号" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="distributor-btn background-white border-box" @tap="submitEv">
|
||||||
|
<view class="btn font36 background-orange color-48 radius30 flex">立即提交</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
disclaimersHeight: `calc(100vh - ${uni.getSystemInfoSync().statusBarHeight + 50}px)`,
|
||||||
|
disclaimers:'',
|
||||||
|
invite_code:'',
|
||||||
|
invite_name:'',
|
||||||
|
real_name:'',
|
||||||
|
phone:'',
|
||||||
|
deposit_bank:'',
|
||||||
|
bank_account:'',
|
||||||
|
flag:true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
console.log(op,1212121212)
|
||||||
|
this.invite_code = op.invite_code;
|
||||||
|
this.invite_name = op.invite_name;
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 提交申请
|
||||||
|
submitEv(){
|
||||||
|
if(this.checkEmpty() && this.flag){
|
||||||
|
let params = {
|
||||||
|
invite_code:this.invite_code,
|
||||||
|
invite_name:this.invite_name,
|
||||||
|
real_name:this.real_name,
|
||||||
|
phone:this.phone,
|
||||||
|
deposit_bank:this.deposit_bank,
|
||||||
|
bank_account:this.bank_account,
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/distributor-apply',params).then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
uni.reLaunch({
|
||||||
|
url:`/pages/index/index`
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.flag = true;
|
||||||
|
},2000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 验证表单
|
||||||
|
checkEmpty(){
|
||||||
|
let result = false;
|
||||||
|
if(!this.real_name) {
|
||||||
|
this.$toolAll.tools.showToast('请填写真实姓名');
|
||||||
|
} else if(this.$toolAll.tools.isPhone(this.phone)) {
|
||||||
|
this.$toolAll.tools.showToast('请正确填写手机号');
|
||||||
|
}if(!this.deposit_bank) {
|
||||||
|
this.$toolAll.tools.showToast('请填写开户行');
|
||||||
|
}if(!this.bank_account) {
|
||||||
|
this.$toolAll.tools.showToast('请填写卡号');
|
||||||
|
} else {
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,50 @@
|
||||||
|
<template>
|
||||||
|
<view v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="积分规则" :marginBottom="0"></status-nav>
|
||||||
|
<!-- 内容 -->
|
||||||
|
<view class="disclaimers border-box" :style="{'min-height':disclaimersHeight}">
|
||||||
|
<view class="disclaimers-txt font24 color-8c">
|
||||||
|
<view class="txt">每{{integral_rule.deduction_points_score}}积分可抵扣{{integral_rule.deduction_points_score_value}}元;</view>
|
||||||
|
<view class="txt">每下单{{integral_rule.place_order_score}}元,可获得{{integral_rule.place_order_score_value}}积分。</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
disclaimersHeight: `calc(100vh - ${uni.getSystemInfoSync().statusBarHeight + 50}px)`,
|
||||||
|
integral_rule:{},
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
// 查询积分明细
|
||||||
|
this.getDisclaimers();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 查询积分明细
|
||||||
|
getDisclaimers(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.$requst.get('/api/user/integral-rule').then(res=>{
|
||||||
|
if(res.code==0){
|
||||||
|
this.integral_rule = res.data;
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading =true;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,229 @@
|
||||||
|
<template>
|
||||||
|
<view class="pad-x170">
|
||||||
|
<!-- 滚动顶部 -->
|
||||||
|
<view class="scrool-top background-white" :style="{height:statusHeight+50+'px'}" v-if="scroolTop"></view>
|
||||||
|
<!-- 返回按钮 -->
|
||||||
|
<view class="back-btn flex" :style="{top:statusHeight+'px'}" @tap="backEv">
|
||||||
|
<i class="icon icon-return" style="font-size: 38rpx;" :style="{color: '#000000'}"></i>
|
||||||
|
</view>
|
||||||
|
<!-- 商品轮播 -->
|
||||||
|
<view class="shop-top-img">
|
||||||
|
<image :src="shopDetail.images[0]" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<view class="shop-content pad-all20 background-white">
|
||||||
|
<!-- 商品标题 -->
|
||||||
|
<view class="shop-title font40 mar-x30">{{shopDetail.name}}</view>
|
||||||
|
<!-- 商品详情 -->
|
||||||
|
<view class="shop-body">
|
||||||
|
<view class="pull-title">
|
||||||
|
<view class="txt font32 pad-sx10">详情介绍</view>
|
||||||
|
<view class="line background-orange"></view>
|
||||||
|
</view>
|
||||||
|
<view class="body-txt font30 color-48">
|
||||||
|
<rich-text :nodes="shopDetail.content"></rich-text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 规格 -->
|
||||||
|
<view class="pull-bg" v-if="showSku"></view>
|
||||||
|
<view class="shop-specs background-white border-box" v-if="showSku">
|
||||||
|
<view class="specs-top flex">
|
||||||
|
<view class="title font30">规格选择</view>
|
||||||
|
<view class="close" @tap="closeSpecs">
|
||||||
|
<image src="/static/icon/icon-close.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<scroll-view scroll-y="true" class="specs-list">
|
||||||
|
<view class="specs-item border-box radius20 mar-s20 pad-zy20 font36 flex" :class="skuIndex==index?'active':''" v-for="(item,index) in shopSku" :key="index" @tap="changeSpecs(index)">
|
||||||
|
<text>{{item.title}}</text>
|
||||||
|
<text>¥{{vip_level>0?item.price:item.original_price}}</text>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="specs-btns flex">
|
||||||
|
<view class="btn radius30 font36 color-ff background-orange flex" @tap="buyNow">立即购买</view>
|
||||||
|
<view class="btn radius30 font36 color-ff background-grey flex" @tap="joinCart">加入购物车</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 尾部 -->
|
||||||
|
<view class="shop-foot border-box background-white pad-all20">
|
||||||
|
<view class="shop-footer background-grey pad-sx15 radius30 flex">
|
||||||
|
<view class="shop-nav font24 color-ff flex" @tap="goHome">
|
||||||
|
<image src="/static/icon/icon-home.png" mode="widthFix"></image>
|
||||||
|
<text>首页</text>
|
||||||
|
</view>
|
||||||
|
<view class="shop-cart background-white radius100 flex" @tap="goCart">
|
||||||
|
<image src="/static/icon/icon-cart.png" mode="widthFix"></image>
|
||||||
|
<view class="shop-num radius100 font24 color-ff flex" v-if="cartNum*1>=0&&cartNum*1<=99">
|
||||||
|
<text>{{cartNum}}</text>
|
||||||
|
</view>
|
||||||
|
<view class="shop-num radius100 font24 color-ff flex" v-if="cartNum*1>99">
|
||||||
|
<text>99</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="shop-btn background-orange font36 color-48 radius30 flex" @tap="openSpecs">立即购买</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 分享&领券 -->
|
||||||
|
<share-coupon :spuId="shopDetail.id"></share-coupon>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {getCartInfo} from '@/jsFile/public-api.js';
|
||||||
|
import {mapState} from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
statusHeight:uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
scroolTop:false, //是否显示顶部
|
||||||
|
shopDetail:{}, //商品详情
|
||||||
|
shopSku:[], //商品规格
|
||||||
|
showSku:false, //是否展示规格弹窗
|
||||||
|
skuIndex:0, //规格选中位置
|
||||||
|
id:0, //商品id
|
||||||
|
vip_level:0, // 是否会员
|
||||||
|
isLoading: true,
|
||||||
|
shareImg:'', // 分享图片
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
if(op !== ''){
|
||||||
|
this.id = op.id;
|
||||||
|
// 查询商品详情
|
||||||
|
this.getDetail(op.id);
|
||||||
|
// 查询商品规格
|
||||||
|
this.getSku(op.id);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
this.vip_level = uni.getStorageSync('vip_level');
|
||||||
|
getCartInfo();
|
||||||
|
},
|
||||||
|
computed:{
|
||||||
|
...mapState({
|
||||||
|
cartNum: state=> state.moduleA.cartNum
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
onPageScroll(object){
|
||||||
|
if(object.scrollTop>50){
|
||||||
|
this.scroolTop = true;
|
||||||
|
}else{
|
||||||
|
this.scroolTop = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onShareAppMessage(res) {
|
||||||
|
|
||||||
|
},
|
||||||
|
// 分享到朋友圈
|
||||||
|
onShareTimeline(res){
|
||||||
|
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// 获取当前页面路径
|
||||||
|
this.$toolAll.tools.obtainPagePath();
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 查询商品详情
|
||||||
|
getDetail(id){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.isLoading =false;
|
||||||
|
this.$requst.get('/api/spu/detail',{id:id}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
console.log(res,'详情')
|
||||||
|
let shopObj = {
|
||||||
|
id:res.data.detail.id,
|
||||||
|
images:res.data.detail.images.split(','),
|
||||||
|
name:res.data.detail.name,
|
||||||
|
content:this.$toolAll.tools.escape2Html(res.data.detail.content)
|
||||||
|
}
|
||||||
|
this.shopDetail = shopObj; // 商品详情
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading =true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询商品规格
|
||||||
|
getSku(id){
|
||||||
|
this.$requst.get('/api/spu/spec',{id:id}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
console.log(res,'规格')
|
||||||
|
this.shopSku = res.data.sku_list; //商品规格
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 打开规格选择
|
||||||
|
openSpecs(){
|
||||||
|
this.showSku =true;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 规格选择
|
||||||
|
changeSpecs(index){
|
||||||
|
if(this.skuIndex !== index){
|
||||||
|
this.skuIndex = index;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭规格选择
|
||||||
|
closeSpecs(){
|
||||||
|
this.showSku =false;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 加入购物车
|
||||||
|
joinCart(){
|
||||||
|
if(this.$toolAll.tools.judgeAuth()) {
|
||||||
|
this.$requst.post('/api/order/shopping-cart-add',{sku_id:this.shopSku[this.skuIndex].id,num:1}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('加入购物车成功(*^▽^*)');
|
||||||
|
getCartInfo();
|
||||||
|
// 关闭弹窗
|
||||||
|
this.closeSpecs();
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 立即购买
|
||||||
|
buyNow(){
|
||||||
|
if(this.$toolAll.tools.judgeAuth()) {
|
||||||
|
this.$requst.post('/api/order/shopping-cart-add',{sku_id:this.shopSku[this.skuIndex].id,num:1}).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
// 关闭弹窗
|
||||||
|
this.closeSpecs();
|
||||||
|
uni.navigateTo({
|
||||||
|
url:`/pages/cart/cart`
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.$toolAll.tools.showToast(res.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 去首页
|
||||||
|
goHome(){
|
||||||
|
uni.reLaunch({
|
||||||
|
url:'/pages/index/index',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 去购物车
|
||||||
|
goCart(){
|
||||||
|
uni.navigateTo({
|
||||||
|
url:'/pages/cart/cart',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 返回
|
||||||
|
backEv(){
|
||||||
|
uni.navigateBack({
|
||||||
|
delta:1
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,229 @@
|
||||||
|
<template>
|
||||||
|
<view v-if="isLoading">
|
||||||
|
<status-nav :ifReturn="true" navBarTitle="个人中心" :marginBottom="0"></status-nav>
|
||||||
|
<view class="ucenter-bg border-box" :style="{'min-height':windoHeight - statusHeight - 50+'px'}">
|
||||||
|
<view class="ucenter">
|
||||||
|
<view class="item item-first flex">
|
||||||
|
<view class="title">头像</view>
|
||||||
|
<view class="img">
|
||||||
|
<image :src="headImgUrl" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="item flex">
|
||||||
|
<view class="title">昵称</view>
|
||||||
|
<view class="msg">{{nickName}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="item flex" @tap="openEdit('real_name')">
|
||||||
|
<view class="title">真实姓名</view>
|
||||||
|
<input class="msg" type="text" v-model="realName" disabled="true">
|
||||||
|
<view class="more">
|
||||||
|
<image src="/static/public/icon-my-more.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="item flex" style="position: relative;">
|
||||||
|
<view class="title">联系电话</view>
|
||||||
|
<input class="msg" type="number" v-model="mobile" disabled="true">
|
||||||
|
<view class="more">
|
||||||
|
<image src="/static/public/icon-my-more.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
<button class="get-phone-btn" open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber"></button>
|
||||||
|
</view>
|
||||||
|
<picker mode="region" @change="change">
|
||||||
|
<view class="item flex">
|
||||||
|
<view class="title">联系地址</view>
|
||||||
|
<input class="msg" type="text" v-model="area" disabled="true">
|
||||||
|
<view class="more">
|
||||||
|
<image src="/static/public/icon-my-more.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</picker>
|
||||||
|
<view class="item flex" @tap="openEdit('address')">
|
||||||
|
<view class="title">详细地址</view>
|
||||||
|
<input class="msg" type="text" v-model="address" disabled="true">
|
||||||
|
<view class="more">
|
||||||
|
<image src="/static/public/icon-my-more.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 修改信息 -->
|
||||||
|
<view class="pull-bg" style="background-color: rgba(0,0,0,.3);" v-show="isOpen" @tap="closeEdit"></view>
|
||||||
|
<view class="vip-box-bg border-box" v-if="isOpen">
|
||||||
|
<view class="vip-box radius20 background-white font30">
|
||||||
|
<view class="title">{{title}}</view>
|
||||||
|
<view class="vip-list">
|
||||||
|
<view class="vip-item mar-s20">
|
||||||
|
<view class="tips color-99">{{subtitle}}</view>
|
||||||
|
<input class="input" type="text" v-model="msg" :placeholder="placeholder" placeholder-style="color:#000000">
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="submit-btn font36 background-orange radius30 mar-s60 flex" @tap="submitEdit">提交修改</view>
|
||||||
|
<view class="close-btn" @tap="closeEdit">
|
||||||
|
<image src="/static/icon/close-btn.png" mode="widthFix"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
windoHeight:uni.getSystemInfoSync().windowHeight,
|
||||||
|
statusHeight:uni.getSystemInfoSync().statusBarHeight,
|
||||||
|
headImgUrl:'', //头像链接
|
||||||
|
nickName:'', //昵称
|
||||||
|
businessCode:'', //会员码
|
||||||
|
realName:'',//真实姓名
|
||||||
|
mobile:'',//电话
|
||||||
|
area:'',//联系地址
|
||||||
|
address:'',//详细地址
|
||||||
|
isOpen:false, //是否显示
|
||||||
|
title:'', //标题
|
||||||
|
subtitle:'', //副标题
|
||||||
|
msg:'', //修改内容
|
||||||
|
field:'', //修改位置
|
||||||
|
placeholder:'', //默认信息
|
||||||
|
headImg:'', //缓存头像链接
|
||||||
|
province:'', //省
|
||||||
|
city:'', //市
|
||||||
|
county:'', //区
|
||||||
|
isLoading:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(op) {
|
||||||
|
this.getUserData();
|
||||||
|
},
|
||||||
|
onShow() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 获取用户信息
|
||||||
|
getUserData(){
|
||||||
|
uni.showLoading({
|
||||||
|
title:'加载中'
|
||||||
|
});
|
||||||
|
this.$requst.get('/api/user/info').then(res=>{
|
||||||
|
console.log(res,'用户信息')
|
||||||
|
if(res.code==0) {
|
||||||
|
this.headImgUrl = res.data.headimgurl;
|
||||||
|
this.nickName = res.data.nickname;
|
||||||
|
this.businessCode = res.data.business_code;
|
||||||
|
this.realName= res.data.real_name;
|
||||||
|
this.mobile= res.data.mobile;
|
||||||
|
this.area= res.data.province+res.data.city+res.data.county;
|
||||||
|
this.address= res.data.address;
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
this.isLoading = true;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 选择修改信息
|
||||||
|
openEdit(type){
|
||||||
|
if(type == 'real_name'){
|
||||||
|
this.title = '真实姓名';
|
||||||
|
this.subtitle = '真实姓名';
|
||||||
|
this.placeholder = this.realName;
|
||||||
|
this.isOpen = true;
|
||||||
|
this.field = 'real_name';
|
||||||
|
}
|
||||||
|
if(type == 'address'){
|
||||||
|
this.title = '详细地址';
|
||||||
|
this.subtitle = '详细地址';
|
||||||
|
this.placeholder = this.address;
|
||||||
|
this.isOpen = true;
|
||||||
|
this.field = 'address';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 选择省市区
|
||||||
|
change(e){
|
||||||
|
this.area = e.detail.value[0] + e.detail.value[1] + e.detail.value[2];
|
||||||
|
this.province = e.detail.value[0];
|
||||||
|
this.city = e.detail.value[1];
|
||||||
|
this.county = e.detail.value[2];
|
||||||
|
this.field = 'area'
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.submitEdit()
|
||||||
|
},200)
|
||||||
|
},
|
||||||
|
// 提交修改
|
||||||
|
submitEdit(){
|
||||||
|
if(this.field == 'real_name'){
|
||||||
|
var params = {
|
||||||
|
real_name:this.msg
|
||||||
|
}
|
||||||
|
console.log(params,123)
|
||||||
|
}
|
||||||
|
if(this.field == 'address'){
|
||||||
|
var params = {
|
||||||
|
address:this.msg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(this.field == 'area'){
|
||||||
|
var params = {
|
||||||
|
province:this.province,
|
||||||
|
city:this.city,
|
||||||
|
county:this.county
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uni.showLoading({
|
||||||
|
title:'修改中'
|
||||||
|
});
|
||||||
|
if(params){
|
||||||
|
this.$requst.post('/api/user/edit-info',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('修改成功');
|
||||||
|
// 关闭弹窗
|
||||||
|
this.closeEdit();
|
||||||
|
// 刷新用户信息
|
||||||
|
this.getUserData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast('您没有更改信息');
|
||||||
|
// 关闭弹窗
|
||||||
|
this.closeEdit();
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
},
|
||||||
|
|
||||||
|
// 关闭弹窗
|
||||||
|
closeEdit(){
|
||||||
|
this.title = '';
|
||||||
|
this.subtitle = '';
|
||||||
|
this.msg='';
|
||||||
|
this.isOpen = false;
|
||||||
|
this.type=''
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取授权信息
|
||||||
|
onGetPhoneNumber(e){
|
||||||
|
if(e.detail.errMsg=="getPhoneNumber:fail user deny"){ //用户决绝授权
|
||||||
|
this.$toolAll.tools.showToast('您已拒绝授权');
|
||||||
|
}else{ //允许授权
|
||||||
|
let params={
|
||||||
|
iv:e.detail.iv,
|
||||||
|
encryptedData:e.detail.encryptedData
|
||||||
|
}
|
||||||
|
this.$requst.post('/api/user/bind-phone',params).then(res=>{
|
||||||
|
if(res.code==0) {
|
||||||
|
this.$toolAll.tools.showToast('绑定成功');
|
||||||
|
// 刷新用户信息
|
||||||
|
this.getUserData();
|
||||||
|
}else{
|
||||||
|
this.$toolAll.tools.showToast(res.msg);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
"description": "项目配置文件",
|
||||||
|
"packOptions": {
|
||||||
|
"ignore": []
|
||||||
|
},
|
||||||
|
"setting": {
|
||||||
|
"urlCheck": true,
|
||||||
|
"es6": true,
|
||||||
|
"enhance": true,
|
||||||
|
"postcss": true,
|
||||||
|
"preloadBackgroundData": false,
|
||||||
|
"minified": true,
|
||||||
|
"newFeature": false,
|
||||||
|
"coverView": true,
|
||||||
|
"nodeModules": false,
|
||||||
|
"autoAudits": false,
|
||||||
|
"showShadowRootInWxmlPanel": true,
|
||||||
|
"scopeDataCheck": false,
|
||||||
|
"uglifyFileName": false,
|
||||||
|
"checkInvalidKey": true,
|
||||||
|
"checkSiteMap": true,
|
||||||
|
"uploadWithSourceMap": true,
|
||||||
|
"compileHotReLoad": false,
|
||||||
|
"lazyloadPlaceholderEnable": false,
|
||||||
|
"useMultiFrameRuntime": true,
|
||||||
|
"useApiHook": true,
|
||||||
|
"useApiHostProcess": true,
|
||||||
|
"babelSetting": {
|
||||||
|
"ignore": [],
|
||||||
|
"disablePlugins": [],
|
||||||
|
"outputPath": ""
|
||||||
|
},
|
||||||
|
"useIsolateContext": false,
|
||||||
|
"userConfirmedBundleSwitch": false,
|
||||||
|
"packNpmManually": false,
|
||||||
|
"packNpmRelationList": [],
|
||||||
|
"minifyWXSS": true,
|
||||||
|
"disableUseStrict": false,
|
||||||
|
"minifyWXML": true,
|
||||||
|
"showES6CompileOption": false,
|
||||||
|
"useCompilerPlugins": false,
|
||||||
|
"ignoreUploadUnusedFiles": true
|
||||||
|
},
|
||||||
|
"compileType": "miniprogram",
|
||||||
|
"libVersion": "2.22.0",
|
||||||
|
"appid": "wx987dc41899f719e8",
|
||||||
|
"projectname": "%E4%BD%A9%E4%B8%BD%E5%95%86%E5%9F%8E",
|
||||||
|
"debugOptions": {
|
||||||
|
"hidedInDevtools": []
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"staticServerOptions": {
|
||||||
|
"baseURL": "",
|
||||||
|
"servePath": ""
|
||||||
|
},
|
||||||
|
"isGameTourist": false,
|
||||||
|
"condition": {
|
||||||
|
"search": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"conversation": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"game": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"plugin": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"gamePlugin": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"miniprogram": {
|
||||||
|
"list": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1005 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 100 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 4.3 KiB |
|
@ -0,0 +1 @@
|
||||||
|
// 根级别的 action
|
|
@ -0,0 +1,16 @@
|
||||||
|
// 组装模块并导出 store 的地方
|
||||||
|
import Vue from 'vue'
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
import moduleA from '@/store/modules/moduleA'
|
||||||
|
import moduleB from '@/store/modules/moduleB'
|
||||||
|
|
||||||
|
Vue.use(Vuex);//vue的插件机制
|
||||||
|
|
||||||
|
//Vuex.modules 模块选项
|
||||||
|
const store = new Vuex.Store({
|
||||||
|
modules: {
|
||||||
|
moduleA,
|
||||||
|
moduleB
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export default store
|
|
@ -0,0 +1,112 @@
|
||||||
|
// 购物车模块
|
||||||
|
export default {
|
||||||
|
state:{//存放状态
|
||||||
|
// 底部导航的高
|
||||||
|
footHeight:'',
|
||||||
|
token:'token已生成',
|
||||||
|
userInfo:{},
|
||||||
|
count:0,
|
||||||
|
publicColor:'',
|
||||||
|
todos: [{
|
||||||
|
id: 1,
|
||||||
|
text: '我是内容一',
|
||||||
|
done: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
text: '我是内容二',
|
||||||
|
done: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
obj:{
|
||||||
|
a:'吃鸡腿',
|
||||||
|
b:'吃自助餐'
|
||||||
|
},
|
||||||
|
titleList:[],
|
||||||
|
imgList:[],
|
||||||
|
onLineList:[],
|
||||||
|
cartNum:0,
|
||||||
|
cartPrice:0,
|
||||||
|
geList:[],
|
||||||
|
changeBusiness:false,
|
||||||
|
},
|
||||||
|
// Vuex中store数据改变的唯一方法就是mutations 不适合异步方法
|
||||||
|
mutations: {
|
||||||
|
setNum(state,num){
|
||||||
|
state.cartNum = num;
|
||||||
|
},
|
||||||
|
setPrice(state,price){
|
||||||
|
state.cartPrice = price;
|
||||||
|
},
|
||||||
|
setGe(state,payload){
|
||||||
|
state.geList = payload.geList;
|
||||||
|
},
|
||||||
|
footHeightEv(state,str){
|
||||||
|
state.footHeight = str;
|
||||||
|
},
|
||||||
|
add(state) {
|
||||||
|
state.count = 7;
|
||||||
|
},
|
||||||
|
add2(state, payload) {
|
||||||
|
state.count = payload.amount;
|
||||||
|
},
|
||||||
|
// 单个属性处理方法
|
||||||
|
setToken(state,str) {
|
||||||
|
state.token = str;
|
||||||
|
},
|
||||||
|
// 对象处理方法
|
||||||
|
updateUserInfo(state, payload) {
|
||||||
|
// 变更状态
|
||||||
|
state.userInfo = payload.userInfo;
|
||||||
|
},
|
||||||
|
// 新增字段方法
|
||||||
|
newProp(state,payload) {
|
||||||
|
state.obj = { ...state.obj, c: payload.c };
|
||||||
|
},
|
||||||
|
updateState(state, payload) {
|
||||||
|
state.onLineList = payload.list;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 可以执行任意的同步和异步操作
|
||||||
|
actions:{
|
||||||
|
addCountAction ({commit}) {
|
||||||
|
commit('add')
|
||||||
|
},
|
||||||
|
addCountAction2 (context , payload) {
|
||||||
|
context.commit('add2', payload)
|
||||||
|
},
|
||||||
|
// 异步方法
|
||||||
|
addCountAction3 (context , payload) {
|
||||||
|
setTimeout(function () {
|
||||||
|
context.commit('add2', payload)
|
||||||
|
}, 2000)
|
||||||
|
},
|
||||||
|
actionA ({ commit }) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
commit('someMutation')
|
||||||
|
resolve()
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
actionB ({ dispatch, commit }) {
|
||||||
|
return dispatch('actionA').then(() => {
|
||||||
|
commit('someOtherMutation')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性),对 state 的加工,是派生出来的数据。 可以在多组件中共享 getter 函数,这样做还可以提高运行效率。
|
||||||
|
getters: {
|
||||||
|
doneTodos: state => {
|
||||||
|
return state.todos.filter(todo => todo.done)
|
||||||
|
},
|
||||||
|
doneTodosCount: (state, getters) => {
|
||||||
|
//state :可以访问数据
|
||||||
|
//getters:访问其他函数,等同于 store.getters
|
||||||
|
return getters.doneTodos.length
|
||||||
|
},
|
||||||
|
getTodoById: (state) => (id) => {
|
||||||
|
return state.todos.find(todo => todo.id === id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
export default {
|
||||||
|
state:{//存放状态
|
||||||
|
token:'token已生成',
|
||||||
|
userInfo:{},
|
||||||
|
count:0,
|
||||||
|
publicColor:'',
|
||||||
|
todos: [{
|
||||||
|
id: 1,
|
||||||
|
text: '我是内容一',
|
||||||
|
done: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
text: '我是内容二',
|
||||||
|
done: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
obj:{
|
||||||
|
a:'吃鸡腿',
|
||||||
|
b:'吃自助餐'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Vuex中store数据改变的唯一方法就是mutations 不适合异步方法
|
||||||
|
mutations: {
|
||||||
|
add(state) {
|
||||||
|
state.count = 7;
|
||||||
|
},
|
||||||
|
add2(state, payload) {
|
||||||
|
state.count = payload.amount;
|
||||||
|
},
|
||||||
|
// 单个属性处理方法
|
||||||
|
setToken(state,str) {
|
||||||
|
state.token = str;
|
||||||
|
},
|
||||||
|
// 对象处理方法
|
||||||
|
updateUserInfo(state, payload) {
|
||||||
|
// 变更状态
|
||||||
|
state.userInfo = payload.userInfo;
|
||||||
|
},
|
||||||
|
// 新增字段方法
|
||||||
|
newProp(state,payload) {
|
||||||
|
state.obj = { ...state.obj, c: payload.c };
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 可以执行任意的同步和异步操作
|
||||||
|
actions:{
|
||||||
|
addCountAction ({commit}) {
|
||||||
|
commit('add')
|
||||||
|
},
|
||||||
|
addCountAction2 (context , payload) {
|
||||||
|
context.commit('add2', payload)
|
||||||
|
},
|
||||||
|
// 异步方法
|
||||||
|
addCountAction3 (context , payload) {
|
||||||
|
setTimeout(function () {
|
||||||
|
context.commit('add2', payload)
|
||||||
|
}, 2000)
|
||||||
|
},
|
||||||
|
actionA ({ commit }) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
commit('someMutation')
|
||||||
|
resolve()
|
||||||
|
}, 1000)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
actionB ({ dispatch, commit }) {
|
||||||
|
return dispatch('actionA').then(() => {
|
||||||
|
commit('someOtherMutation')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性),对 state 的加工,是派生出来的数据。 可以在多组件中共享 getter 函数,这样做还可以提高运行效率。
|
||||||
|
getters: {
|
||||||
|
// doneTodos: state => {
|
||||||
|
// return state.todos.filter(todo => todo.done)
|
||||||
|
// },
|
||||||
|
// doneTodosCount: (state, getters) => {
|
||||||
|
// //state :可以访问数据
|
||||||
|
// //getters:访问其他函数,等同于 store.getters
|
||||||
|
// return getters.doneTodos.length
|
||||||
|
// },
|
||||||
|
// getTodoById: (state) => (id) => {
|
||||||
|
// return state.todos.find(todo => todo.id === id)
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
// 根级别的 mutation
|
|
@ -0,0 +1,119 @@
|
||||||
|
#引入vuex状态机
|
||||||
|
在根目录创建store目录
|
||||||
|
|
||||||
|
#在main.js引入store、注册store、挂载store在程序上
|
||||||
|
import Vue from 'vue';
|
||||||
|
import App from './App';
|
||||||
|
#import store from './store'
|
||||||
|
#Vue.prototype.$store = store
|
||||||
|
|
||||||
|
const app = new Vue({
|
||||||
|
# store,
|
||||||
|
...App
|
||||||
|
})
|
||||||
|
app.$mount()
|
||||||
|
|
||||||
|
|
||||||
|
#在页面内使用store的属性
|
||||||
|
<view @tap="add"></view>
|
||||||
|
import { mapState,mapGetters,mapMutations } from 'vuex'//引入mapState
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
#单纯访问属性值
|
||||||
|
computed:{
|
||||||
|
tokenEv() {
|
||||||
|
return this.$store.state.token;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
<!--
|
||||||
|
需要引入 import { mapState } from 'vuex'//引入mapState
|
||||||
|
-->
|
||||||
|
computed:mapState({
|
||||||
|
// 从state中拿到数据 箭头函数可使代码更简练
|
||||||
|
token: state => state.token,
|
||||||
|
}),
|
||||||
|
computed:mapState(['token']),
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
token: function (state) {
|
||||||
|
return '追加的' + state.token
|
||||||
|
},
|
||||||
|
userInfo: state => state.userInfo,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
computed:{
|
||||||
|
...mapState([
|
||||||
|
'token',
|
||||||
|
'userInfo',
|
||||||
|
'count',
|
||||||
|
'obj'
|
||||||
|
])
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
token: state => state.moduleA.token,
|
||||||
|
count: state => state.moduleB.count
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
#单纯访问方法
|
||||||
|
computed: {
|
||||||
|
todos() {
|
||||||
|
return this.$store.getters.doneTodos
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
doneTodosCount() {
|
||||||
|
return this.$store.getters.doneTodosCount
|
||||||
|
}
|
||||||
|
},
|
||||||
|
<!-- 方法传值 -->
|
||||||
|
computed: {
|
||||||
|
getTodoById() {
|
||||||
|
return this.$store.getters.getTodoById(1)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
<!--
|
||||||
|
需要引入 import { mapGetters } from 'vuex'//引入mapState
|
||||||
|
-->
|
||||||
|
computed: {
|
||||||
|
// 使用对象展开运算符将 getter 混入 computed 对象中
|
||||||
|
...mapGetters([
|
||||||
|
'doneTodos',
|
||||||
|
'doneTodosCount',
|
||||||
|
'getTodoById'
|
||||||
|
// ...
|
||||||
|
])
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
#改变状态机里面的值
|
||||||
|
<!-- 传递字符串改变 -->
|
||||||
|
this.$store.commit('setToken', 'token已改变');
|
||||||
|
<!-- 传递对象 -->
|
||||||
|
this.$store.commit('updateUserInfo',{userInfo:'用户信息'})
|
||||||
|
this.$store.commit({
|
||||||
|
type: 'updateUserInfo',
|
||||||
|
userInfo: '新方式更新用户信息'
|
||||||
|
})
|
||||||
|
this.$store.commit('newProp',{c:'吃火锅'})
|
||||||
|
<!-- 输出值 -->
|
||||||
|
console.log(this.token);
|
||||||
|
<!-- 调用方法 -->
|
||||||
|
this.add();
|
||||||
|
<!-- 必须是同步方法 -->
|
||||||
|
this.$store.dispatch('addCountAction')
|
||||||
|
this.$store.dispatch('addCountAction2',{amount:10})
|
||||||
|
<!-- 异步方法 -->
|
||||||
|
this.$store.dispatch('addCountAction3',{amount:30})
|
||||||
|
setTimeout(()=>{
|
||||||
|
console.log(this.count,388);
|
||||||
|
},3000)
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
<!--
|
||||||
|
需要引入 import { mapMutations } from 'vuex'//引入mapState
|
||||||
|
-->
|
||||||
|
...mapMutations(['add']),//对象展开运算符直接拿到add
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
* 这里是uni-app内置的常用样式变量
|
||||||
|
*
|
||||||
|
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||||
|
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||||
|
*
|
||||||
|
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 颜色变量 */
|
||||||
|
|
||||||
|
/* 行为相关颜色 */
|
||||||
|
$uni-color-primary: #007aff;
|
||||||
|
$uni-color-success: #4cd964;
|
||||||
|
$uni-color-warning: #f0ad4e;
|
||||||
|
$uni-color-error: #dd524d;
|
||||||
|
|
||||||
|
/* 文字基本颜色 */
|
||||||
|
$uni-text-color:#333;//基本色
|
||||||
|
$uni-text-color-inverse:#fff;//反色
|
||||||
|
$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
|
||||||
|
$uni-text-color-placeholder: #808080;
|
||||||
|
$uni-text-color-disable:#c0c0c0;
|
||||||
|
|
||||||
|
/* 背景颜色 */
|
||||||
|
$uni-bg-color:#ffffff;
|
||||||
|
$uni-bg-color-grey:#f8f8f8;
|
||||||
|
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
|
||||||
|
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
|
||||||
|
|
||||||
|
/* 边框颜色 */
|
||||||
|
$uni-border-color:#c8c7cc;
|
||||||
|
|
||||||
|
/* 尺寸变量 */
|
||||||
|
|
||||||
|
/* 文字尺寸 */
|
||||||
|
$uni-font-size-sm:24upx;
|
||||||
|
$uni-font-size-base:28upx;
|
||||||
|
$uni-font-size-lg:32upx;
|
||||||
|
|
||||||
|
/* 图片尺寸 */
|
||||||
|
$uni-img-size-sm:40upx;
|
||||||
|
$uni-img-size-base:52upx;
|
||||||
|
$uni-img-size-lg:80upx;
|
||||||
|
|
||||||
|
/* Border Radius */
|
||||||
|
$uni-border-radius-sm: 4upx;
|
||||||
|
$uni-border-radius-base: 6upx;
|
||||||
|
$uni-border-radius-lg: 12upx;
|
||||||
|
$uni-border-radius-circle: 50%;
|
||||||
|
|
||||||
|
/* 水平间距 */
|
||||||
|
$uni-spacing-row-sm: 10px;
|
||||||
|
$uni-spacing-row-base: 20upx;
|
||||||
|
$uni-spacing-row-lg: 30upx;
|
||||||
|
|
||||||
|
/* 垂直间距 */
|
||||||
|
$uni-spacing-col-sm: 8upx;
|
||||||
|
$uni-spacing-col-base: 16upx;
|
||||||
|
$uni-spacing-col-lg: 24upx;
|
||||||
|
|
||||||
|
/* 透明度 */
|
||||||
|
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
|
||||||
|
|
||||||
|
/* 文章场景相关 */
|
||||||
|
$uni-color-title: #2C405A; // 文章标题颜色
|
||||||
|
$uni-font-size-title:40upx;
|
||||||
|
$uni-color-subtitle: #555555; // 二级标题颜色
|
||||||
|
$uni-font-size-subtitle:36upx;
|
||||||
|
$uni-color-paragraph: #3F536E; // 文章段落颜色
|
||||||
|
$uni-font-size-paragraph:30upx;
|