Authored by lijing

开发完成

... ... @@ -27,7 +27,7 @@ exports.index = (req, res, next) => {
}).catch(next);
};
exports.grow = (req, res) => {
exports.grow = (req, res, next) => {
let responseData = {
module: 'home',
page: 'grade-new',
... ... @@ -40,5 +40,23 @@ exports.grow = (req, res) => {
pageFooter: true
};
res.render('grade-new/grow', responseData);
let params = {
uid: req.user.uid,
page: 1
};
req.ctx(gradeNewModel).grow(params).then(result => {
res.render('grade-new/grow', Object.assign(responseData, result));
}).catch(next);
};
exports.getHis = (req, res, next) => {
let params = {
uid: req.user.uid,
page: req.query.page
};
req.ctx(gradeNewModel).getHisAjax(params).then(result => {
res.json(result);
}).catch(next);
};
... ...
... ... @@ -3,6 +3,12 @@
const api = global.yoho.API;
const helpers = global.yoho.helpers;
const _ = require('lodash');
const moment = require('moment');
// 格式年月日
const _formatDay = (day) => {
return moment(day).format('YYYY-MM-DD');
};
/**
* 会员等级
... ... @@ -49,11 +55,45 @@ module.exports = class extends global.yoho.BaseModel {
});
}
getGrowthVip(uid) {
let options = {
data: {
method: 'app.passport.growthvip',
uid: uid
},
param: {
code: 200
}
};
return this.get(options).then(result => {
return result;
});
}
getHis(params) {
let options = {
data: {
method: 'app.passport.growthhistory',
uid: params.uid,
page: params.page
},
param: {
code: 200
}
};
return this.get(options).then(result => {
return result;
});
}
index(param) {
if (param.uid) {
return api.all([
this.getGradeGrade(param.uid, param.channel),
this.getGradeUser(param.uid, param.channel)
this.getGradeUser(param.uid, param.channel),
this.getGrowthVip(param.uid)
]).then((result) => {
let resu = {
... ... @@ -106,46 +146,116 @@ module.exports = class extends global.yoho.BaseModel {
}
let upg = (1 * (result[0].data.upgrade_need_cost)).toFixed(2);
obj = _.assign(obj, {
costOfThisYear: result[0].data.current_year_cost,
sumCost: result[0].data.current_total_cost,
allUrl: helpers.urlFormat('/home/privilege'),
costGap: upg
allUrl: helpers.urlFormat('/home/privilege')
});
}
if (result[0].data.next_need_cost === 0 || result[0].data.next_need_cost === '') {
// 当vip等级升至顶级时,进度条满格
if (result[1] && result[1].data) {
obj = _.assign(obj, {
percent: 100
name: result[1].data.nickname,
headIco: result[1].data.head_ico
});
} else {
}
let perf = (100 * (result[0].data.current_year_cost /
result[0].data.next_need_cost)).toFixed(2);
if (result[2] && result[2].data) {
let nowGrowth = parseInt(result[2].data.current_total_growth, 10);
let nextGrowth = parseInt(result[2].data.upgrade_need_growth, 10) || 0;
obj = _.assign(obj, {
percent: perf
nowGrowth: nowGrowth,
nextGrowth: nextGrowth,
percent: nowGrowth < 7000 ? nowGrowth / 70 : 100
});
}
resu.vipGrade.push(obj);
return resu;
});
} else {
return Promise.resolve({});
}
}
grow(param) {
return api.all([
this.getGrowthVip(param.uid),
this.getHis(param)
]).then((result) => {
let resu = {
levelHis: [],
detailHis: []
};
if (result) {
if (result[0] && result[0].data) {
let build = [];
if (result[0].data.sliver_start_time) {
build.push({
tip: '普通升级为银卡',
time: _formatDay(result[0].data.sliver_start_time * 1000)
});
}
if (result[0].data.gold_start_time) {
build.push({
tip: '银卡升级为金卡',
time: _formatDay(result[0].data.gold_start_time * 1000)
});
}
if (result[1] && result[1].data) {
obj = _.assign(obj, {
name: result[1].data.nickname,
headIco: result[1].data.head_ico
if (result[0].data.whitegold_start_time) {
build.push({
tip: '金卡升级为白金',
time: _formatDay(result[0].data.whitegold_start_time * 1000)
});
}
resu.vipGrade.push(obj);
resu.levelHis = build;
}
if (result[1] && result[1].data && result[1].data.data) {
let build = [];
_.forEach(result[1].data.data, function(val) {
build.push({
title: val.typeDesc,
time: _formatDay(val.createTime),
value: val.growthValue
});
});
resu.detailHis = build;
}
}
return resu;
});
} else {
return Promise.resolve({});
}
getHisAjax(param) {
return api.all([
this.getHis(param)
]).then((result) => {
let resu = {
detailHis: []
};
if (result && result[0] && result[0].data) {
let build = [];
_.forEach(result[0].data.data, function(val) {
build.push({
title: val.typeDesc,
time: _formatDay(val.createTime),
value: val.growthValue
});
});
resu.detailHis = build;
}
return resu;
});
}
};
... ...
... ... @@ -145,5 +145,6 @@ router.get('/logistic', auth, orderDetailController.logistic); // 瘚
router.get('/gradeNew/index', auth, gradeNew.index); // 会员等级
router.get('/gradeNew/grow', auth, gradeNew.grow); // 成长记录
router.get('/gradeNew/getHis', gradeNew.getHis); // 成长记录
module.exports = router;
... ...
... ... @@ -5,72 +5,25 @@
</div>
<div class="tab-item">
<div class="ul-detail">
{{# detailHis}}
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
<p>{{title}}</p>
<p>{{time}}</p>
</div>
<div class="num">+7</div>
</div>
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
</div>
<div class="num">+7</div>
</div>
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
</div>
<div class="num">+7</div>
</div>
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
</div>
<div class="num">+7</div>
</div>
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
</div>
<div class="num">+7</div>
</div>
<div class="li-item">
<div class="text">
<p>登录</p>
<p>2017-04-27</p>
</div>
<div class="num">+7</div>
<div class="num">+{{value}}</div>
</div>
{{/ detailHis}}
</div>
</div>
<div class="tab-item hide">
<div class="ul-detail">
{{# levelHis}}
<div class="li-item">
<div class="title">金卡升级为白金</div>
<div class="date">2017-04-20</div>
</div>
<div class="li-item">
<div class="title">金卡升级为白金</div>
<div class="date">2017-04-20</div>
</div>
<div class="li-item">
<div class="title">金卡升级为白金</div>
<div class="date">2017-04-20</div>
</div>
<div class="li-item">
<div class="title">金卡升级为白金</div>
<div class="date">2017-04-20</div>
</div>
<div class="li-item">
<div class="title">金卡升级为白金</div>
<div class="date">2017-04-20</div>
<div class="title">{{tip}}</div>
<div class="date">{{time}}</div>
</div>
{{/ levelHis}}
</div>
</div>
</div>
... ...
... ... @@ -26,15 +26,19 @@
<div class="intro">
<div class="name">{{name}},您好!</div>
<div class="level">
<span class="now">我的成长值:<span class="val">2250</span> </span>
<span class="next">下次升级还需:<span class="val">2750</span></span>
<span class="now">我的成长值:<span class="val">{{nowGrowth}}</span></span>
{{#if nextGrowth}}
<span class="next">下次升级还需:<span class="val">{{nextGrowth}}</span></span>
{{/if}}
</div>
</div>
{{/ vipGrade}}
</div>
<div class="level-process clearfix">
<div class="line-c">
<div class="line"></div>
{{# vipGrade}}
<div class="line"{{#if percent}} style="width:{{percent}}%"{{/if}}></div>
{{/ vipGrade}}
<div class="point">
<div class="point-item">
<div class="level-text">
... ... @@ -64,7 +68,7 @@
</div>
</div>
</div>
<a class="big-top">
<a class="big-top" href="//m.yohobuy.com/home/helpDetail?code=20111130-152124&name=如何成为VIP会员">
会员等级介绍
<span class="iconfont">&#xe604;</span>
<span class="s-title">了解等级规则</span>
... ...
{{# detailHis}}
<div class="li-item">
<div class="text">
<p>{{title}}</p>
<p>{{time}}</p>
</div>
<div class="num">+{{value}}</div>
</div>
{{/ detailHis}}
... ...
... ... @@ -5,13 +5,41 @@ import {
} from 'yoho-mvc';
import {
TabView
TabView,
GetContent
} from './view';
import {
globalSearch as search
} from './model';
let hisContent = require('home/grade-new.hbs');
let tip = require('plugin/tip');
class GradeController extends Controller {
constructor() {
super();
this.tabView = new TabView();
this.content = new GetContent();
this.content.on('search', this.doSearch.bind(this));
this.page = 1;
}
doSearch() {
if (!this.end) {
this.page ++;
this.search(this.page);
}
}
search(page) {
search('//m.yohobuy.com/home/gradeNew/getHis', {page: page}).then(data => {
$('.ul-detail:first').append(hisContent(data));
if (data.detailHis <= 0) {
this.end = true;
tip.show('没有更多了~~');
}
}).catch(() => {});
}
}
... ...
'use strict';
import {
http
} from 'yoho-mvc';
function globalSearch(url, data) {
return http({
url: location.protocol + url,
data: data,
});
}
export {
globalSearch
};
... ...
... ... @@ -5,6 +5,7 @@ import {
class TabView extends View {
constructor() {
super('.tab');
this.end = false;
this.on('touchend touchcancel', 'span', this.tabClick.bind(this));
}
... ... @@ -16,10 +17,29 @@ class TabView extends View {
$this.addClass('active').siblings('span').removeClass('active');
$('.tab-item:eq(' + $index + ')').removeClass('hide').siblings('.tab-item').addClass('hide');
window.rePosFooter();
}
}
}
class GetContent extends View {
constructor() {
super('.grade-new-c');
// srcoll to load more
$(window).scroll(() => {
window.requestAnimationFrame(this.scrollHandler.bind(this));
});
}
scrollHandler() {
if (($(window).scrollTop() + $(window).height() >= $(document).height()) && $('.ul-detail').length > 0) {
this.emit('search');
}
}
}
export {
TabView
TabView,
GetContent
};
... ...
... ... @@ -126,7 +126,7 @@
}
.line {
width: 80%;
width: 0;
height: 100%;
max-width: 100%;
background-color: #444;
... ... @@ -146,12 +146,27 @@
background-size: auto 100%;
background-repeat: no-repeat;
float: left;
margin-right: 177px;
position: relative;
}
.point-item:last-child {
margin-right: 0;
.point-item:nth-child(1) {
margin-right: 57px;
.level-text {
margin-left: -80px;
}
}
.point-item:nth-child(2) {
margin-right: 167px;
.level-text {
margin-left: -40px;
}
}
.point-item:nth-child(3) {
margin-right: 307px;
}
.level-text {
... ...