You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

543 lines
13 KiB

<template>
<view class="container">
<view class="user-section">
<image class="bg" src="/static/img/user-bg.jpg"></image>
<view class="user-info-box">
<view class="portrait-box">
<image class="portrait" :src="userInfo.portrait || '/static/img/missing-face.png'"></image>
</view>
<view class="info-box">
<text class="username">{{userInfo.name || '游客'}}</text>
<text class="usercode" @click="checklogin()">编号{{userInfo.usercode || '请登录'}}</text>
</view>
</view>
</view>
<view class="cover-container">
<image class="arc" src="/static/img/arc.png"></image>
<view class="tj-sction" v-if="showsh">
<view class="tj-item" @click="tochongzhi()">
<text class="num">{{personinfo.yue}}<text v-if="personinfo.djmoney" class="djmoney">冻结:{{personinfo.djmoney}}</text></text>
<text>余额</text>
</view>
<view class="tj-item" @click="tocoupon()">
<text class="num">{{personinfo.yhqnum}}</text>
<text>优惠券</text>
</view>
<view class="tj-item" @click="tojifen()">
<text class="num">{{personinfo.jifen}}</text>
<text>积分</text>
</view>
</view>
<view class="order-section">
<view class="order-item" @click="navTo('/pages/orderlist/orderlist?state=0')" hover-class="common-hover" :hover-stay-time="50">
<text class="yticon icon-shouye" style="color: #3883FA;"></text>
<text>全部订单</text>
</view>
<view class="order-item" @click="navTo('/pages/orderlist/orderlist?state=1')" hover-class="common-hover" :hover-stay-time="50">
<text class="yticon icon-daifukuan" style="color: #3883FA;"></text>
<text>已确认</text>
</view>
<view class="order-item" @click="navTo('/pages/orderlist/orderlist?state=2')" hover-class="common-hover" :hover-stay-time="50">
<text class="yticon icon-yishouhuo" style="color: #3883FA;"></text>
<text>待确认</text>
</view>
<view class="order-item" @click="navTo('/pages/orderlist/orderlist?state=3')" hover-class="common-hover" :hover-stay-time="50">
<text class="yticon icon-shouhoutuikuan" style="color: #3883FA;"></text>
<text>已取消</text>
</view>
</view>
<!-- 浏览历史 -->
<view class="history-section icon">
<view class="sec-header">
<text class="yticon icon-lishijilu"></text>
<text v-if="recordlist.length>0">浏览历史</text>
<text v-if="recordlist.length==0" @click="tipnomore()">浏览历史</text>
<view class="clean" @click="cleanall()" v-if="recordlist.length>0">清除历史</view>
</view>
<scroll-view scroll-x class="h-list">
<image v-for="(item, index) in recordlist" :key="index" @click="navTo('/pages/product/product?cpid='+item.cpid)" :src="item.img" mode="aspectFill"></image>
</scroll-view>
<list-cell icon="icon-shoucang_xuanzhongzhuangtai" iconColor="#54b4ef" title="我的收藏" @eventClick="navTo('/pages/user/keep')"></list-cell>
<view class="kf">
<view class="kfleft">
<image src="../../static/img/kefu.png"></image>
</view>
<view class="kfright">
<button class="kfbt" open-type="contact" >联系客服</button>
</view>
</view>
<list-cell icon="icon-shezhi1" v-if="userInfo.openid" iconColor="#e07472" title="退出" border="" @eventClick="logout()"></list-cell>
<list-cell icon="icon-shezhi1" v-if="!userInfo.openid" iconColor="#e07472" title="登录" border="" @eventClick="checklogin()"></list-cell>
</view>
</view>
</view>
</template>
<script>
// 功能列表小封装
import * as XLSX from '@/static/excel.js';
import listCell from '@/components/mix-list-cell';
let startY = 0, moveY = 0, pageAtTop = true;
export default {
components: {
listCell
},
data(){
return {
coverTransform: 'translateY(0px)',
coverTransition: '0s',
moving: false,
userInfo:[],
recordlist:[],
showsh:0,
personinfo:[]
}
},
onShow(){
this.baseset();
let getuserinfo=uni.getStorageSync('userinfo');
//console.log(getuserinfo);
if(getuserinfo!=''){
this.getread_recordlsit(getuserinfo.uid);
this.userInfo=getuserinfo;
}
this.userinfo();
},
onLoad(){
},
// #ifndef MP
onNavigationBarButtonTap(e) {
const index = e.index;
// if (index === 0) {
// this.navTo('/pages/set/set');
// }else if(index === 1){
// // #ifdef APP-PLUS
// const pages = getCurrentPages();
// const page = pages[pages.length - 1];
// const currentWebview = page.$getAppWebview();
// currentWebview.hideTitleNViewButtonRedDot({
// index
// });
// // #endif
// uni.navigateTo({
// url: '/pages/notice/notice'
// })
// }
},
// #endif
computed: {
},
methods: {
async baseset() {
let reinfo=await this.$api.baseset({action:'baseset'});
this.showsh=reinfo.code;
},
async userinfo() {
let getuserinfo=uni.getStorageSync('userinfo');
let reinfo=await this.$api.userinfo({action:'userinfo',uid:getuserinfo.uid,aid:getuserinfo.aid});
this.personinfo=reinfo.data;
},
//获取浏览列表
async getread_recordlsit(uid) {
let reinfo=await this.$api.getread_recordlsit({action:'getread_recordlsit',uid:uid});
this.recordlist=reinfo.data;
},
//清空浏览列表
async cleanrecord() {
let reinfo=await this.$api.cleanrecord({action:'cleanrecord',uid:this.userInfo.uid});
if(reinfo.code==1){
this.getread_recordlsit()
}
uni.hideLoading();
},
//清空浏览历史
cleanall(){
let t=this;
t.checklogin();
uni.showModal({
title: '温馨提示',
content: '是否清空浏览历史记录?',
success: function (res) {
if (res.confirm) {
uni.showLoading({
title:'正在清除...'
})
t.cleanrecord()
} else if (res.cancel) {
//console.log('用户点击取消');
}
}
});
},
tipnomore(){
uni.showToast({
title:'暂无浏览历史',icon:'none'
})
},
navTo(url){
let getuserinfo=uni.getStorageSync('userinfo');
if(getuserinfo==''){
// uni.navigateTo({
// url:'/pages/user/checklogin'
// })
uni.navigateTo({
url:'/pages/user/login'
})
}else{
uni.navigateTo({
url
})
}
},
//点击积分
tojifen(){
let getuserinfo=uni.getStorageSync('userinfo');
if(getuserinfo==''){
uni.navigateTo({
url:'/pages/user/login'
})
}else{
uni.navigateTo({
url:'/pages/user/jifen'
})
}
},
//点击余额
tochongzhi(){
let getuserinfo=uni.getStorageSync('userinfo');
if(getuserinfo==''){
uni.navigateTo({
url:'/pages/user/login'
})
}else{
uni.navigateTo({
url:'/pages/user/chongzhi?yue='+this.personinfo.yue
})
}
},
tocoupon(){
let getuserinfo=uni.getStorageSync('userinfo');
if(getuserinfo==''){
uni.navigateTo({
url:'/pages/user/login'
})
}else{
uni.navigateTo({
url:'/pages/coupon/coupon'
})
}
},
/**
* 会员卡下拉和回弹
* 1.关闭bounce避免ios端下拉冲突
* 2.由于touchmove事件的缺陷(以前做小程序就遇到,比如20跳到40,h5反而好很多),下拉的时候会有掉帧的感觉
* transition设置0.1秒延迟,让css来过渡这段空窗期
* 3.回弹效果可修改曲线值来调整效果,推荐一个好用的bezier生成工具 http://cubic-bezier.com/
*/
coverTouchstart(e){
if(pageAtTop === false){
return;
}
this.coverTransition = 'transform .1s linear';
startY = e.touches[0].clientY;
},
coverTouchmove(e){
moveY = e.touches[0].clientY;
let moveDistance = moveY - startY;
if(moveDistance < 0){
this.moving = false;
return;
}
this.moving = true;
if(moveDistance >= 80 && moveDistance < 100){
moveDistance = 80;
}
if(moveDistance > 0 && moveDistance <= 80){
this.coverTransform = `translateY(${moveDistance}px)`;
}
},
coverTouchend(){
if(this.moving === false){
return;
}
this.moving = false;
this.coverTransition = 'transform 0.3s cubic-bezier(.21,1.93,.53,.64)';
this.coverTransform = 'translateY(0px)';
},
checklogin(){
let getuserinfo=uni.getStorageSync('userinfo');
if(getuserinfo==''){
// uni.navigateTo({
// url:'/pages/user/checklogin'
// })
uni.navigateTo({
url:'/pages/user/login'
})
}
},
logout(){
uni.showModal({
title: '温馨提示',
content: '请问是否退出登录',
success: function (res) {
if (res.confirm) {
uni.showToast({
title:'已退出'
})
uni.clearStorage('userinfo');
uni.reLaunch({
url:'/pages/index/index'
})
} else if (res.cancel) {
}
}
});
}
}
}
</script>
<style lang='scss'>
%flex-center {
display:flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
%section {
display:flex;
justify-content: space-around;
align-content: center;
background: #fff;
border-radius: 10upx;
}
.user-section{
height: 520upx;
padding: 100upx 30upx 0;
position:relative;
.bg{
position:absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
filter: blur(1px);
opacity: .7;
}
}
.user-info-box{
height: 180upx;
display:flex;
align-items:center;
position:relative;
z-index: 1;
.portrait{
width: 130upx;
height: 130upx;
border:5upx solid #fff;
border-radius: 50%;
}
.username{
font-size: $font-lg + 6upx;
color: $font-color-dark;
margin-left: 20upx;
}
.usercode{
padding: 8rpx;
border-radius: 15rpx;
background-color: #4399FC;
color: #fff;
font-size: 35rpx;
position: relative;
left: 20rpx;
}
}
.vip-card-box{
display:flex;
flex-direction: column;
color: #f7d680;
height: 240upx;
background: linear-gradient(left, rgba(0,0,0,.7), rgba(0,0,0,.8));
border-radius: 16upx 16upx 0 0;
overflow: hidden;
position: relative;
padding: 20upx 24upx;
.card-bg{
position:absolute;
top: 20upx;
right: 0;
width: 380upx;
height: 260upx;
}
.b-btn{
position: absolute;
right: 20upx;
top: 16upx;
width: 132upx;
height: 40upx;
text-align: center;
line-height: 40upx;
font-size: 22upx;
color: #36343c;
border-radius: 20px;
background: linear-gradient(left, #f9e6af, #ffd465);
z-index: 1;
}
.tit{
font-size: $font-base+2upx;
color: #f7d680;
margin-bottom: 28upx;
.yticon{
color: #f6e5a3;
margin-right: 16upx;
font-size: $font-base+18upx;
}
}
.e-b{
font-size: $font-sm;
color: #d8cba9;
margin-top: 10upx;
}
}
.cover-container{
background: $page-color-base;
margin-top: -150upx;
padding: 0 30upx;
position:relative;
background: #f5f5f5;
padding-bottom: 20upx;
.arc{
position:absolute;
left: 0;
top: -34upx;
width: 100%;
height: 36upx;
}
}
.tj-sction{
@extend %section;
.tj-item{
@extend %flex-center;
flex-direction: column;
height: 140upx;
font-size: $font-sm;
color: #75787d;
}
.num{
font-size: $font-lg;
color: $font-color-dark;
margin-bottom: 8upx;
}
}
.order-section{
@extend %section;
padding: 28upx 0;
margin-top: 20upx;
.order-item{
@extend %flex-center;
width: 120upx;
height: 120upx;
border-radius: 10upx;
font-size: $font-sm;
color: $font-color-dark;
}
.yticon{
font-size: 48upx;
margin-bottom: 18upx;
color: #fa436a;
}
.icon-shouhoutuikuan{
font-size:44upx;
}
}
.history-section{
padding: 30upx 0 0;
margin-top: 20upx;
background: #fff;
border-radius:10upx;
.sec-header{
display:flex;
align-items: center;
font-size: $font-base;
color: $font-color-dark;
line-height: 40upx;
margin-left: 30upx;
.yticon{
font-size: 44upx;
color: #5eba8f;
margin-right: 16upx;
line-height: 40upx;
}
}
.h-list{
white-space: nowrap;
padding: 30upx 30upx 0;
image{
display:inline-block;
width: 160upx;
height: 160upx;
margin-right: 20upx;
border-radius: 10upx;
}
}
}
.clean{
position: absolute;
right: 45upx;
padding: 3upx 8upx;
background-color: #DD524D;
color: #fff;
border-radius: 10upx;
font-size: $font-base;
}
.kf{
display: flex;
padding: 20upx $page-row-spacing;
line-height:60upx;
position:relative;
align-items:center;
image{
left: 90upx;
width: 50upx;
height: 50upx;
}
.kfright{
width: 30%;
}
.kfbt{
font-size: $font-base;
background: none;
position: relative;
left: -35upx;
color: $font-color-dark;
}
.kfbt::after {border: 0;}
}
/* 自定义样式,非组件 */
.myitem{
display: flex;
align-items:center;
padding: 20upx $page-row-spacing;
image{
left: 90upx;
width: 40upx;
height: 40upx;
}
.myitemright{
width: 80%;
font-size: $font-sm+2upx;
color: $font-color-dark;
margin-left: 15upx;
margin-bottom: 10upx;
}
}
</style>