Authored by htoooth

Merge branch 'develop' of http://git.yoho.cn/fe/yoho-limited-sell-miniapp into develop

... ... @@ -6,7 +6,10 @@
"pages/account/bindMobile",
"pages/product/detail/detail",
"pages/webview/webview",
"pages/snapshootShare/snapshootShare"
"pages/snapshootShare/snapshootShare",
"pages/queue/index",
"pages/queue/myList",
"pages/queue/prizeUserList"
],
"window": {
"backgroundTextStyle": "dark",
... ...
import api from '../../common/api';
export default {
/**
*
*/
getLimitSaleList(data) { // 获取限定发售列表
return api.get({
url: '',
data: data
});
},
/**
* 获取活动信息
*/
getActivityInfo(actId) {
if (!actId) {
return Promise.reject({
code: 403,
message: '缺少actId参数'
});
}
return api.get({
url: '',
data: {
method: 'app.drawline.getActivityInfo',
activityId: actId
}
});
},
/**
* 获取用户参与排队的信息
*/
getUserActivityInfo(actId) {
if (!actId) {
return Promise.reject({
code: 403,
message: '缺少actId参数'
});
}
return api.get({
url: '',
data: {
method: 'app.drawline.getUserActivityInfo',
activityId: actId
}
});
},
/**
* 获取排队列表
*/
getQueueList(actId, start = 0, limit = 50) {
if (!actId) {
return Promise.reject({
code: 403,
message: '缺少actId参数'
});
}
return api.get({
url: '',
data: {
activityId: actId,
sort: start,
limit: limit,
method: 'app.drawline.getQueueList',
randCode: (new Date()).getTime()
}
});
},
/**
* 加入排队
*/
addQueue(actId) {
if (!actId) {
return Promise.reject({
code: 403,
message: '缺少actId参数'
});
}
return api.post({
url: '',
data: {
method: 'app.drawline.addQueue',
activityId: actId
}
});
},
/**
* 获取中奖名单
*/
getPrizeUserList(actId, limit = 30, page = 1) {
if (!actId) {
return Promise.reject({
code: 403,
message: '缺少actId参数'
});
}
return api.get({
url: '',
data: {
activityId: actId,
limit: limit,
page: page,
method: 'app.drawline.getLuckyUserList'
}
});
}
};
... ...
... ... @@ -215,11 +215,19 @@ Page({
goReferer: function() { // 无需绑定的获取用户信息后返回
if (this.data.referer && !this.data.needBind) {
router.goUrl(`${config.MINI_APP_DOMAIN}${this.data.referer}`);
this.setData({
referer: '',
needBind: 1
});
}
},
goBack: function() {
if (this.data.referer) {
router.goUrl(`${config.MINI_APP_DOMAIN}${this.data.referer}`);
this.setData({
referer: '',
needBind: 1
});
}
}
});
... ...
... ... @@ -117,6 +117,7 @@ Page(Object.assign({
let originUid = options.originUid ? options.originUid : '';
let uid = app.getUid();
// let uid = '500027570';
// originUid = '500027570';
... ... @@ -429,4 +430,4 @@ Page(Object.assign({
});
}
}, Actionsheet));
\ No newline at end of file
}, Actionsheet));
... ...
import config from '../../common/config';
import api from '../../common/api';
import event from '../../common/event';
import LimitModel from '../../models/limit/index';
import helper from '../../utils/helper';
import wx from '../../utils/wx';
let app = getApp();
let router = global.router;
/**
* method=app.limitProduct.queryHelpInfo(助力信息)
method=app.limitProduct.addhelpUserInfo(添加助力信息)
method=app.drawline.getMyQueueList 获取我的排队列表
*/
/**
* 接口:获取用户排队信息
* https://api.yoho.cn/?activityId=179&app_version=6.4.0&client_secret=ee1114702f3db67327afe9eeeac92b5a&client_type=iphone&fromPage=iFP_Queue&method=app.drawline.getUserActivityInfo&os_version=11.2.5&physical_channel=1&screen_size=375x667&session_key=3c9a644c3d95d9a7453c61f3009b2884&udid=1a61c0b4db7b6e27999b1237977b5347eb503956&uid=349709&v=7
*
* 接口:获取排队用户信息
* https://api.yoho.cn/?activityId=179&app_version=6.4.0&client_secret=e8f42148d30976fb44dfff1d89ea7a60&client_type=iphone&fromPage=iFP_Queue&limit=50&method=app.drawline.getQueueList&os_version=11.2.5&physical_channel=1&screen_size=375x667&session_key=3c9a644c3d95d9a7453c61f3009b2884&sort=0&udid=1a61c0b4db7b6e27999b1237977b5347eb503956&uid=349709&v=7
*
* 接口:排队活动
* https://api.yoho.cn/?activityId=179&app_version=6.4.0&client_secret=52db394bdb79e2dcf0e2a2782496ee78&client_type=iphone&fromPage=iFP_Queue&method=app.drawline.getActivityInfo&os_version=11.2.5&physical_channel=1&screen_size=375x667&session_key=3c9a644c3d95d9a7453c61f3009b2884&udid=1a61c0b4db7b6e27999b1237977b5347eb503956&uid=349709&v=7
*
* 接口:中奖列表
* https://api.yoho.cn/?activityId=179&app_version=6.4.0&client_secret=936b01c80de696e81c59fee6ea64fd50&client_type=iphone&fromPage=iFP_QueueResult&limit=20&method=app.drawline.getLuckyUserList&os_version=11.2.6&page=1&physical_channel=1&screen_size=375x667&session_key=3c9a644c3d95d9a7453c61f3009b2884&udid=1a61c0b4db7b6e27999b1237977b5347eb503956&uid=349709&v=7
*
* 接口:添加用户分享记录
* https://api.yoho.cn/?activityId=294&app_version=6.4.0&client_secret=e7ecfcd3410f5c8b0054c07b8366a700&client_type=iphone&fromPage=iFP_LimitPurchaseDetail&method=app.limitProduct.addUserShare&os_version=11.2.6&physical_channel=1&screen_size=375x667&session_key=d4c06294461b138058ce3aa2978cd602&udid=1a61c0b4db7b6e27999b1237977b5347eb503956&uid=349709&v=7 HTTP/1.1
*/
Page({
/**
* 页面的初始数据
*/
data: {
userInfo: {}, // 用户信息
activityInfo: {}, // 活动信息
test_uid: [349709, // 测试用
500030924,
500030922,
500030918,
500030916,
500030914,
500030912,
500030910,
500030908,
500030906,
500030904,
500030890,
500030888,
500030886,
500030884,
500030876,
500030830,
500030694,
500030690,
500030688
],
now_test_uid_index: 15,
h5PageUrl: [
{
title: '排队活动说明',
url: 'https://activity.yoho.cn/feature/249.html?nodownload=1'
}
],
bgStyle: [ // 排队图片
'../../static/images/limit/queue_bg_1.png',
'../../static/images/limit/queue_bg_2.png',
'../../static/images/limit/queue_bg_3.png',
'../../static/images/limit/queue_bg_4.png',
'../../static/images/limit/queue_bg_5.png',
'../../static/images/limit/queue_bg_6.png',
'../../static/images/limit/queue_bg_7.png',
'../../static/images/limit/queue_bg_8.png'
],
vipImage: [ // 3种用户vip等级小图标
'',
'../../static/images/limit/level-1.png',
'../../static/images/limit/level-2.png',
'../../static/images/limit/level-3.png'
],
defaultAvatar: '../../static/images/icons/default-avatar.png',
resultHead: [
'../../static/images/limit/fail-head.png',
'../../static/images/limit/success-head.png'
],
api_status: 0, // 用于防止连续点击参加活动 0:没调用接口 1:正在调用接口
giftImage: '../../static/images/limit/gift.png',
queueList: [], // 排队列表
scrollTop: 0, // 控制scroll-view滚动的实际位置
tempScrollTop: 0, // 手动滚动页面时保存当前滚动的位置
showMsg: 0 // 0不显示提示框, 1显示提示框
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
console.log(options);
let actId = options.actId;
let uid = app.getUid() || this.data.test_uid[this.data.now_test_uid_index];
if (actId) {
this.getActivityInfo(actId).then(res => {
console.log('res', res);
if (res.code === 200) {
this.getQueueList(actId, 0);
}
if (uid) {
this.getUserActivityInfo(actId, uid);
}
}); // 获取活动信息
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
let actId = this.data.activityInfo.activityId;
if (actId) {
this.getActivityInfo(actId).then(res => {
console.log('res', res);
if (res.code === 200) {
this.getQueueList(actId, 0);
wx.stopPullDownRefresh();
}
}); // 获取活动信息
}
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
console.log('到底部啦');
let actId = this.data.activityInfo.activityId;
let sort = this.data.queueList[this.data.queueList.length - 1].sort;
let limit = 50;
if (sort > 1) {
if (sort - 1 < limit) {
limit = sort - 1;
}
this.getQueueList(actId, sort - 1, limit, true);
}
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function(res) {
return {
title: this.data.activityInfo.activityName || '排队活动',
path: './?actId=' + this.data.activityInfo.activityId,
success: function(data) {
console.log(data);
},
fail: function(data) {
console.log(data);
}
};
},
/**
* scroll-view滚动事件
*/
scroll: function(e) {
console.log(e);
let scrollTop = e.detail.scrollTop;
this.setData({
tempScrollTop: scrollTop
});
},
/**
* 点击用户头像,跳转到用户对应位置<已取消该功能>
*/
userTap: function(e) {
console.log(this.data.userInfo);
let uid = this.data.userInfo.uid;
let sort = this.data.userInfo.sort || 0;
let limit = sort >= 50 ? 50 : sort;
let actId = this.data.activityInfo.activityId;
let list_length = this.data.queueList.length > 200 ? 200 : this.data.queueList.length;
for (let i = 0; i < list_length; i++) {
let item = this.data.queueList[i];
if (item.uid === uid) {
this.scrollPage('item_' + item.uid);
console.log(item.uid);
break;
} else if (i === list_length - 1) {
console.log(i);
this.getQueueList(actId, sort, limit).then(res => {
console.log('111', res);
if (res.code === 200) {
let item_id = 'item_' + uid;
this.scrollPage(item_id);
}
});
}
}
},
/**
* 关闭提示框
*/
closeMsg: function(e) {
this.setData({
showMsg: 0
});
},
/**
* 点击参加活动按钮
*/
joinInQueue: function(e) {
let uid = app.getUid() || this.data.test_uid[this.data.now_test_uid_index];
let activityId = this.data.activityInfo.activityId;
let isEnd = this.data.activityInfo.isEnd === 0 ? 0 : 1;
if (activityId && uid && !isEnd) {
this.addQueue(this.data.activityInfo.activityId, uid);
} else if (isEnd) {
this.setData({
showMsg: 1
});
}
},
/**
* 获取活动信息
*/
getActivityInfo: function(actId) {
return LimitModel.getActivityInfo(actId).then(res => { // 获取活动信息
console.log(res);
if (res.code === 200) {
let topBanner = helper.image(res.data.topBanner, 750, 352, 1);
let isBegin = res.data.isBegin;
let isDrawEnd = res.data.isDrawEnd;
let isEnd = res.data.isEnd;
let prizeType = res.data.prizeType;
let activityName = res.data.activityName;
let activityId = res.data.activityId;
let bgStyle = res.data.bgStyle && res.data.bgStyle.length > 0 ? res.data.bgStyle : this.data.bgStyle;
this.setData({
activityInfo: {
topBanner: topBanner,
isBegin: isBegin, // 是否已开始 0-未开始 1-进行中 2-已结束
isDrawEnd: isDrawEnd, // 是否已开奖 1-开奖 0-未开奖
isEnd: isEnd, // 是否已结束 1-结束 0-未结束
prizeType: prizeType, // 奖品类型1-有货币 2-优惠券 3-限购码
activityId: activityId,
activityName: activityName
},
bgStyle: bgStyle
});
return Promise.resolve({code: res.code});
} else {
return Promise.reject({code: res.code});
}
});
},
/**
* 加入排队
*/
addQueue: function(actId, uid) {
if (!this.data.api_status) {
this.setData({
api_status: 1
});
LimitModel.addQueue(actId).then((res) => {
console.log('加入排队', res);
if (res.code === 200 && res.data) {
let sort = res.data.sort;
this.setData({
userInfo: Object.assign(this.data.userInfo, {sort: sort, isDrawline: 1}),
showMsg: 1,
api_status: 0
});
setTimeout(this.getQueueList, 1000);
// this.getQueueList(this.data.activityInfo.activityId, 0);
}
}).catch(() => {
console.log('错误');
this.setData({
api_status: 0
});
});
}
},
/**
* 获取用户参与排队的信息
*/
getUserActivityInfo: function(actId) {
LimitModel.getUserActivityInfo(actId).then(res => {
console.log('getUserActivityInfo:', res);
this.setData({
userInfo: {
uid: res.data.uid,
headIco: helper.image(res.data.headIco, 128, 128, 1) || this.data.defaultAvatar,
isDrawline: res.data.isDrawline,
isLucky: res.data.isLucky,
sort: res.data.sort
}
});
if (this.data.activityInfo.isDrawEnd) {
this.setData({
showMsg: 1
});
}
});
},
/**
* 获取排队列表
*/
getQueueList: function(actId, start = 0, limit = 50, isAdd = false) {
let that = this;
actId = actId || this.data.activityInfo.activityId;
return LimitModel.getQueueList(actId, start, limit).then(res => {
console.log(res);
if (res.data && res.data.length > 0) {
let result = [];
res.data.forEach((item, index) => {
if (!item.headIco) {
item.headIco = that.data.defaultAvatar;
} else {
item.headIco = helper.image(item.headIco, 100, 100, 1);
}
item.nickName = item.nickName || '用户' + item.uid;
item.nickName = item.nickName.length > 12 ? item.nickName.substring(0, 12) + '...' : item.nickName;
item.queueTime = this.formatTimeText(item.queueTime);
item.vipLevel = item.vipLevel || 0;
item.vipImage = this.data.vipImage[item.vipLevel];
let bgStyle = this.data.bgStyle;
let bgIndex = index % bgStyle.length;
item.background = helper.imgView(bgStyle[bgIndex], 340, 162, 1);
result.push(item);
});
if (isAdd) { // 如果是下拉则添加数据
this.setData({
queueList: this.data.queueList.concat(result)
});
} else { // 普通情况下覆盖
this.setData({
queueList: result
});
}
return Promise.resolve({code: 200, data: this.data.queueList});
} else {
return Promise.reject({code: 203, message: '获取失败'});
}
});
},
scrollPage: function(id) { // 滚动页面到对应位置
if (id) {
let item_query = wx.createSelectorQuery();
item_query.select('#' + id).boundingClientRect();
item_query.selectViewport().scrollOffset();
item_query.exec(res => {
console.log('scroll:', res);
if (res.length > 0 && this.data.queueList.length > 6 && res[0].top !== 0) {
wx.pageScrollTo({
scrollTop: res[0].top + res[1].scrollTop,
duration: 500
});
// this.setData({
// scrollTop: res[0].top + this.data.tempScrollTop
// })
}
});
}
},
/**
* 跳转到活动说明的H5页面
*/
navigateToDescPage: function() {
wx.navigateTo({
url: '../webview/webview?url=' + this.data.h5PageUrl[0].url + '&title=' + this.data.h5PageUrl[0].title
});
},
/**
*跳转到中奖名单页面
*/
navigateToPrizeUserList: function() {
if (this.data.activityInfo.isDrawEnd) {
router.go('prizeUserList', {actId: this.data.activityInfo.activityId});
}
},
/**
* 跳转到个人中心限购码页面
*/
navigateToUserCodePage: function() {
if (this.data.userInfo.isLucky) {
router.go('userCenter');
}
},
/**
* 处理接口返回的图片url
*/
formatImgUrl: function(url, mode, width, height) {
return url.replace(/{mode}/g, mode).replace(/{width}/g, width).replace(/{height}/g, height);
},
formatTimeText: function(time) {
let new_time;
if (time < 60) {
new_time = time + 'sec';
} else if (time >= 60 && time < 60 * 60) {
new_time = parseInt(time / 60, 10) + 'min';
} else if (time >= 60 * 60 && time < 60 * 60 * 24) {
new_time = parseInt(time / (60 * 60), 10) + 'hour';
} else if (time >= 60 * 60 * 24) {
new_time = parseInt(time / (60 * 60 * 24), 10) + 'day';
}
return new_time;
}
});
... ...
{
"navigationBarTitleText": "参加排队",
"enablePullDownRefresh": true,
"backgroundColor": "#222",
"backgroundTextStyle": "light"
}
\ No newline at end of file
... ...
<!--pages/limit/queue.wxml 限定商品用户排队页面-->
<view class='container'>
<!--头部-->
<!-- <scroll-view scroll-y scroll-top='{{scrollTop}}' bindscroll='scroll' bindscrolltolower='onReachBottom' scroll-with-animation> -->
<view class='queue-title' style='background-image: url("{{activityInfo.topBanner}}")'>
<view class='queue-buttons'>
<text class='queue-desc-link' bindtap='navigateToDescPage'>点击查看活动说明>></text>
<button class='queue-prize-link {{activityInfo.isDrawEnd ? "active" : ""}}' bindtap='navigateToPrizeUserList'>{{activityInfo.isDrawEnd ? '查看中奖名单' : '等待开奖中'}}</button>
</view>
</view>
<!--排队列表-->
<block class='queue-list' wx:for='{{queueList}}' wx:key='{{item.id}}'>
<view id='item_{{item.uid}}' class='queue-item {{item.uid === userInfo.uid ? "active" : ""}}'>
<view class='item-head-container'>
<!--headImage-->
<image class='item-head' src='{{item.headIco}}'></image>
<block wx:if='{{item.isLucky}}'>
<view class='gift-icon'>
<image src='{{giftImage}}'></image>
</view>
</block>
</view>
<view class='item-info-container'>
<!--itemInfo-->
<view class='item-user-rank'>{{item.sort}}</view>
<view class='item-user-name'>{{item.nickName}}</view>
<view class='item-user-time'>
<view class='item-user-time-icon'></view>
<view class='item-user-time-text'>{{item.queueTime}}</view>
<view class='item-user-vip-level' wx:if='{{item.vipLevel}}'>
<image src='{{item.vipImage}}'></image>
</view>
</view>
</view>
<view class='item-bg'>
<image src='{{item.background}}'></image>
</view>
</view>
</block>
<!-- </scroll-view> -->
<!--悬浮按钮-->
<block wx:if="{{userInfo.isDrawline && !activityInfo.isEnd}}">
<view class='user-container' bindtap='userTap'>
<view class='userrank'>
<view class='rank-text'>
<!-- {{userInfo.sort}} -->
查看我的排队号
</view>
</view>
<view class='userhead'>
<image src='{{userInfo.headIco}}'></image>
</view>
</view>
</block>
<block wx:elif='{{userInfo.isDrawline && activityInfo.isEnd}}'>
<view class='user-container {{userInfo.isLucky ? "success" : "fail"}}' bindtap='navigateToUserCodePage'>
<view class='userrank'>
<view class='rank-text'>
{{userInfo.sort}}
</view>
</view>
<view class='userhead'>
<image src='{{resultHead[userInfo.isLucky]}}'></image>
</view>
</view>
</block>
<block wx:elif='{{activityInfo.isBegin === 1 && !activityInfo.isEnd}}'>
<view class='button-container' bindtap='joinInQueue'>
<view class='join-button'>
<text>参加活动</text>
</view>
</view>
</block>
<block wx:elif='{{!activityInfo.isBegin}}'>
<view class='button-container'>
<view class='end-button'>
<text>即将开售</text>
</view>
</view>
</block>
<block wx:elif='{{activityInfo.isEnd}}'>
<view class='button-container' bindtap='joinInQueue'>
<view class='end-button'>
<text>活动结束</text>
</view>
</view>
</block>
<!--弹出消息框-->
<view class='msg-container' hidden='{{!showMsg ? true : false}}'>
<block wx:if='{{userInfo.sort}}'><!--用户有排队信息的情况下-->
<block wx:if='{{activityInfo.isDrawEnd}}'><!--如果活动结束,并开奖-->
<block wx:if='{{userInfo.isLucky}}'><!--中奖弹框-->
<text class='title'>恭喜!</text>
<text class='queue-text lucky'>
<text>恭喜您限购码GET,请到个人中心查看明细。</text>
</text>
<view class='msg-button-container'>
<view class='button-close' bindtap='closeMsg'>关闭</view>
<button class='button-share' plain='true' bindtap='navigateToUserCodePage'>去看看</button>
</view>
</block>
<block wx:else><!--没中奖弹框-->
<text class='title'>OOPS!</text>
<text class='queue-text lucky'>
<text>幸运女神擦肩而过,不要灰心下次就是您!</text>
</text>
<view class='msg-button-container fail'>
<view class='button-close' bindtap='closeMsg'>关闭</view>
</view>
</block>
</block>
<block wx:else><!--活动没结束,排队成功弹框-->
<text class='title'>排队成功</text>
<text class='queue-text'>
<text>您的排队号为: </text>
<text class='queue-num'>{{userInfo.sort}}</text>
</text>
<text class='share-text'>分享给小伙伴,中奖几率更高哦~</text>
<view class='msg-button-container'>
<view class='button-close' bindtap='closeMsg'>关闭</view>
<button class='button-share' open-type="share" plain='true'>去分享</button>
</view>
</block>
</block>
<block wx:else><!--活动结束弹框-->
<text class='title'>OOPS!</text>
<text class='queue-text fail'>
<text>您来晚啦,下次早点哦</text>
</text>
<view class='msg-button-container fail'>
<view class='button-close' bindtap='closeMsg'>关闭</view>
</view>
</block>
</view>
</view>
\ No newline at end of file
... ...
/* pages/limit/queue.wxss */
page {
background-color: #222;
}
.container {
display: flex;
height: 100%;
flex-direction: column;
align-items: center;
justify-content: flex-start;
box-sizing: border-box;
padding: 0;
}
scroll-view {
height: 1206rpx;
}
.queue-title {
display: flex;
flex-direction: column;
justify-content: flex-end;
width: 100%;
height: 352rpx;
background-size: 100% 100%;
}
image {
width: 100%;
height: 100%;
}
.queue-buttons {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
width: 100%;
height: 80rpx;
line-height: 80rpx;
}
.queue-desc-link {
color: #fff;
font-size: 24rpx;
margin-left: 30rpx;
}
.queue-prize-link {
height: 44rpx;
margin-right: 30rpx;
color: #fff;
font-size: 24rpx;
background-color: #a0a0a0;
border-radius: 30rpx;
line-height: 44rpx;
}
.queue-prize-link.active {
background-color: #c30016;
}
.user-container,
.button-container {
display: flex;
position: fixed;
height: 100rpx;
bottom: 42rpx;
right: 32rpx;
flex-direction: row;
align-items: flex-end;
justify-content: space-between;
z-index: 19;
}
/* 用户头像及排名 */
.userrank {
position: relative;
color: #fff;
margin-right: 10rpx;
border-radius: 14rpx 20rpx 0 14rpx;
background-color: #000;
}
.user-container.success .userrank {
background-color: #fed832;
}
.user-container.fail .userrank {
background-color: #b0b0b0;
}
.user-container.success image,
.user-container.fail image {
border: none;
}
/* 头像旁边的特殊形状,使用:after :before实现 */
.userrank .rank-text {
display: flex;
width: 100%;
height: 100%;
left: 0;
top: 0;
padding: 2px 6px;
align-items: center;
justify-content: center;
border: 2px solid #fff;
border-radius: 6px 6px 0rpx 6px;
box-sizing: border-box;
overflow: hidden;
font-size: 28rpx;
line-height: 1.2;
z-index: -1;
}
/* 先做一个圆角矩形,显示左边与下方边框,则左下角为圆角,并设置与父级的右边框对齐 */
.rank-text:after {
content: '';
width: 8px;
height: 50%;
border: none;
border-left: 2px solid #fff;
border-bottom: 2px solid #fff;
border-radius: 0 0 0 20rpx;
position: absolute;
bottom: 0rpx;
right: -5.8px;
box-sizing: border-box;
}
/* 在下面画一个矩形,显示下边框,背景从黑色渐变到透明 */
.rank-text:before {
content: '';
width: 10px;
height: 6px;
border: none;
border-bottom: 2px solid #fff;
border-radius: 2px;
position: absolute;
bottom: 0rpx;
right: -5px;
background: linear-gradient(45deg, #000 40%, transparent 60%);
box-sizing: border-box;
}
.user-container.success .rank-text:before {
background: linear-gradient(45deg, #fed832 40%, transparent 60%);
}
.user-container.fail .rank-text:before {
background: linear-gradient(45deg, #b0b0b0 40%, transparent 60%);
}
.userhead {
width: 108rpx;
height: 108rpx;
}
.userhead image {
border: 4rpx solid #fff;
border-radius: 50%;
box-sizing: border-box;
}
.join-button {
display: flex;
width: 108rpx;
height: 108rpx;
border: 4rpx solid #fff;
border-radius: 50%;
box-sizing: border-box;
background-color: #000;
align-items: center;
justify-content: center;
}
.end-button {
display: flex;
width: 108rpx;
height: 108rpx;
border: 4rpx solid #fff;
border-radius: 50%;
box-sizing: border-box;
background-color: #a0a0a0;
align-items: center;
justify-content: center;
}
.join-button text,
.end-button text {
display: flex;
width: 60rpx;
height: 72rpx;
text-align: center;
align-items: center;
color: #fff;
font-size: 28rpx;
line-height: 1.2;
}
.queue-list { /* 排队列表 */
display: flex;
width: 100%;
flex-direction: column;
}
.queue-item { /* 列表中的item */
display: flex;
position: relative;
width: 100%;
height: 162rpx;
align-items: center;
color: white;
background-color: #444;
box-sizing: border-box;
overflow: hidden;
}
.queue-item.active { /* 用户自身白底渐变 */
background: linear-gradient(90deg, rgba(255, 255, 255, 0.8) 5%, rgba(255, 255, 255, 0.1) 55%, rgba(255, 255, 255, 0.1));
color: #000;
}
.queue-item:after { /* item下方细线 */
content: '';
position: absolute;
width: 100%;
height: 100%;
bottom: 0;
left: 0;
border-bottom: 1rpx solid rgba(34, 34, 34, 0.5);
transform: scaleX(0.6) scaleY(0.3);
transform-origin: 0% 100%;
z-index: 0;
}
.queue-item .item-head-container { /* item头像 */
display: flex;
position: relative;
width: 150rpx;
height: 150rpx;
align-items: center;
justify-content: center;
box-sizing: border-box;
}
.item-head-container .item-head {/* item头像图 */
width: 96rpx;
height: 96rpx;
border-radius: 50%;
}
.item-head-container .gift-icon {
position: absolute;
width: 30rpx;
height: 30rpx;
right: 24rpx;
bottom: 34rpx;
z-index: 5;
}
.item-info-container { /* item用户相关信息 */
display: flex;
flex-flow: column;
width: 260rpx;
height: 150rpx;
align-items: flex-start;
justify-content: center;
box-sizing: border-box;
}
.item-user-rank { /* item 用户排名 */
font-size: 36rpx;
font-weight: bold;
line-height: 40rpx;
}
.item-user-name { /* item 用户名称 */
width: 100%;
font-size: 24rpx;
line-height: 36rpx;
overflow: hidden;
white-space: nowrap;
}
.item-user-time { /* item 用户排队时间 */
display: flex;
justify-content: center;
height: 32rpx;
line-height: 32rpx;
align-items: center;
font-size: 24rpx;
color: rgba(255, 255, 255, 0.7);
}
.item-user-vip-level { /* vip等级 */
width: 52rpx;
height: 32rpx;
}
.item-user-time-icon { /* 时间小图标 */
width: 16rpx;
height: 16rpx;
background-image: url('http://imgboys1.yohobuy.com/staticimg/2018/03/05/10/019d6b2073bc15c96a5ae74b8b73f0d2fc.png');
background-size: 100% 100%;
margin-right: 8rpx;
}
.queue-item.active .item-user-time-icon { /* 用户自身白底时的时间小图标 */
background-image: url('http://imgboys1.yohobuy.com/staticimg/2018/03/05/10/01c72176785481a14216a7eda3786aee01.png');
}
.item-user-time-text { /* 时间文字 */
margin-right: 8rpx;
}
.queue-item.active .item-user-time { /* 用户自身白底时的时间文字 */
color: rgba(0, 0, 0, 0.7);
}
.item-bg { /* 右边的排队图片 */
width: 340rpx;
height: 100%;
box-sizing: border-box;
z-index: 1;
}
.item-bg image {
width: 100%;
height: 100%;
}
.msg-container {
display: flex;
position: fixed;
flex-direction: column;
align-items: center;
justify-content: flex-start;
width: 540rpx;
height: 326rpx;
left: 106rpx;
top: 376rpx;
border-radius: 10rpx;
background-color: #fff;
z-index: 19;
}
.msg-container .title {
width: 100%;
font-size: 36rpx;
text-align: center;
padding-top: 41rpx;
padding-bottom: 17rpx;
color: #d0021b;
}
.msg-container .queue-text {
display: flex;
width: 100%;
height: 46rpx;
justify-content: center;
align-items: center;
font-size: 30rpx;
}
.queue-text.fail {
height: 92rpx;
line-height: 46rpx;
}
.queue-text.lucky {
width: 86%;
height: 92rpx;
line-height: 46rpx;
text-align: center;
}
.queue-text .queue-num {
color: #d0021b;
}
.msg-container .share-text {
display: flex;
width: 100%;
height: 46rpx;
justify-content: center;
align-items: center;
font-size: 30rpx;
}
.msg-container .msg-button-container {
display: flex;
position: relative;
width: 100%;
height: 89rpx;
margin-top: 39rpx;
box-sizing: border-box;
}
.msg-button-container:before {
content: '';
position: absolute;
width: 100%;
height: 10%;
top: 0;
left: 0;
border-top: 1rpx solid rgba(34, 34, 34, 0.5);
transform: scaleY(0.2);
transform-origin: 0% 0%;
z-index: 0;
}
.msg-button-container view {
position: relative;
width: 50%;
height: 100%;
border: none;
text-align: center;
line-height: 89rpx;
font-size: 32rpx;
box-sizing: border-box;
}
.msg-button-container.fail view {
width: 100%;
color: #d0021b;
}
.msg-button-container .button-share:before {
content: '';
position: absolute;
width: 10%;
height: 100%;
top: 0;
left: 0;
border-left: 1rpx solid rgba(34, 34, 34, 0.5);
transform: scaleX(0.2);
transform-origin: 0% 50%;
z-index: 1;
}
.msg-button-container .button-share {
width: 50%;
height: 100%;
margin: 0;
padding: 0;
border-color: rgba(255, 255, 255, 0);
color: #d0021b;
}
... ...
// pages/queue/myList.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
});
... ...
{}
\ No newline at end of file
... ...
<!--pages/queue/myList.wxml-->
<text>pages/queue/myList.wxml</text>
... ...
import config from '../../common/config';
import api from '../../common/api';
import event from '../../common/event';
import LimitModel from '../../models/limit/index';
import helper from '../../utils/helper';
import wx from '../../utils/wx';
let app = getApp();
let router = global.router;
Page({
/**
* 页面的初始数据
*/
data: {
actId: 0,
prizeUserList: [],
vipImage: [ // 3种用户vip等级小图标
'',
'../../static/images/limit/level-1.png',
'../../static/images/limit/level-2.png',
'../../static/images/limit/level-3.png'
],
giftImage: '../../static/images/limit/gift.png'
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
let actId = options.actId;
this.setData({
actId: actId
});
if (actId) {
this.getPrizeUserList(actId);
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
wx.stopPullDownRefresh();
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
getPrizeUserList: function(actId, limit = 30, page = 1) {
actId = actId || this.data.actId;
return LimitModel.getPrizeUserList(actId, limit, page).then(res => {
console.log(res);
if (res.data && res.data.list.length > 0) {
let result = [];
res.data.list.forEach((item, index) => {
if (!item.headIco) {
item.headIco = '../../static/images/icons/default-avatar.png';
} else {
item.headIco = helper.image(item.headIco, 100, 100, 1);
}
item.nickName = item.nickName || '用户' + item.uid;
item.nickName = item.nickName.length > 12 ? item.nickName.substring(0, 12) + '...' : item.nickName;
item.vipLevel = item.vipLevel || 0;
item.vipImage = this.data.vipImage[item.vipLevel];
result.push(item);
});
console.log('prize', result);
this.setData({
prizeUserList: result
});
return Promise.resolve({ code: 200, data: this.data.prizeUserList });
} else {
return Promise.reject({ code: 203, message: '获取失败' });
}
});
},
/**
* 处理接口返回的图片url
*/
formatImgUrl: function(url, mode, width, height) {
return url.replace(/{mode}/g, mode).replace(/{width}/g, width).replace(/{height}/g, height);
}
});
... ...
{
"navigationBarTitleText": "中奖名单",
"enablePullDownRefresh": true,
"backgroundColor": "#222",
"backgroundTextStyle": "light"
}
\ No newline at end of file
... ...
<!--排队活动中奖名单列表-->
<view class='container'>
<view class='queue-list'>
<view class='queue-item' wx:for='{{prizeUserList}}' wx:key='{{item.id}}'>
<view class='head-container'>
<image src='{{item.headIco}}'></image>
<view class='gift-icon'>
<image src='{{giftImage}}'></image>
</view>
</view>
<view class='info-container'>
<text class='user-rank'>{{item.sort}}</text>
<text class='user-name'>{{item.nickName}}</text>
<view class='user-vip-level'>
<image src='{{item.vipImage}}'></image>
</view>
</view>
</view>
</view>
</view>
\ No newline at end of file
... ...
page {
background-color: #222;
}
image {
width: 100%;
height: 100%;
}
.container {
display: flex;
height: 100%;
flex-direction: column;
align-items: center;
justify-content: flex-start;
box-sizing: border-box;
padding: 0;
}
.queue-list {
width: 100%;
display: flex;
flex-direction: row;
align-content: flex-start;
flex-wrap: wrap;
box-sizing: border-box;
}
.queue-item {
display: flex;
flex-shrink: 0;
flex-direction: row;
align-items: center;
width: 374rpx;
height: 176rpx;
border-top: 1rpx solid #222;
background-color: #3a3a3a;
font-size: 24rpx;
color: #fff;
}
.queue-item:nth-child(odd) {
margin-right: 1rpx;
}
.queue-item .head-container {
display: flex;
position: relative;
align-items: center;
justify-content: center;
width: 156rpx;
height: 156rpx;
}
.head-container image {
width: 96rpx;
height: 96rpx;
border-radius: 50%;
box-sizing: border-box;
}
.head-container .gift-icon {
position: absolute;
width: 30rpx;
height: 30rpx;
right: 24rpx;
bottom: 34rpx;
z-index: 5;
}
.gift-icon image {
width: 100%;
height: 100%;
border: none;
}
.queue-item .info-container {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
width: 210rpx;
height: 156rpx;
overflow: hidden;
}
.user-rank { /* item 用户排名 */
font-size: 36rpx;
font-weight: bold;
line-height: 40rpx;
}
.user-name {
width: 100%;
font-size: 24rpx;
line-height: 36rpx;
overflow: hidden;
white-space: nowrap;
}
.info-container .user-vip-level {
width: 40rpx;
height: 25rpx;
}
... ...
... ... @@ -2,8 +2,8 @@ let app = getApp();
const windowWidth = app.globalData.systemInfo.windowWidth;
const windowHeight = app.globalData.systemInfo.windowHeight;
const screenHeight = app.globalData.systemInfo.screenHeight;
const scale = windowWidth / 375;
// const scale = 0.6
var Point = function(x, y) {
return {
... ... @@ -235,4 +235,4 @@ Page({
hidden() {
wx.navigateBack();
}
});
\ No newline at end of file
});
... ...
... ... @@ -45,7 +45,7 @@
"id": -1,
"name": "个人中心首页",
"pathName": "pages/home/index",
"query": "f"
"query": ""
},
{
"id": 2,
... ... @@ -61,6 +61,12 @@
},
{
"id": -1,
"name": "限定商品排队",
"pathName": "pages/queue/index",
"query": "actId=332"
},
{
"id": -1,
"name": "情详页-好友助力",
"pathName": "pages/product/detail/detail",
"query": "limitProductCode=2018062115403668"
... ...
... ... @@ -5,4 +5,7 @@ export default {
productDetail: {path: '/pages/product/detail/detail'},
userCenter: {path: '/pages/home/index'},
snapShare: {path: '/pages/snapshootShare/snapshootShare'},
queueList: {path: '/pages/queue/index'},
prizeUserList: {path: '/pages/queue/prizeUserList'},
myList: {path: '/pages/queue/myList'}
};
... ...
... ... @@ -61,8 +61,8 @@ function image(imgUrl, w, h, mode, q) {
// 如果图片没有imageView2,则默认添加imageView2
function imgView(imgSrc, w, h, mode, q) {
var imgUrl = imgSrc || '';
var indexOf = imgUrl.indexOf('?');
let imgUrl = imgSrc || '';
let indexOf = imgUrl.indexOf('?');
if (!imgUrl) {
return '';
... ... @@ -72,10 +72,6 @@ function imgView(imgSrc, w, h, mode, q) {
return imgUrl;
}
if (['http://', 'https://'].indexOf((imgUrl || '')) === -1) {
return imgUrl;
}
if (indexOf === -1) {
imgUrl += '?imageView2/{mode}/w/{width}/h/{height}';
return image(imgUrl, w, h, mode, q);
... ...