Authored by zzzzzzz

Merge branch 'master' of git.yoho.cn:fe/yohobuywap-node into feature/newfloor

Showing 75 changed files with 3244 additions and 50 deletions
@@ -7,11 +7,6 @@ @@ -7,11 +7,6 @@
7 7
8 const config = require('./config/common'); 8 const config = require('./config/common');
9 9
10 -// use one apm  
11 -if (config.useOneapm) {  
12 - require('oneapm');  
13 -}  
14 -  
15 const express = require('express'); 10 const express = require('express');
16 const path = require('path'); 11 const path = require('path');
17 const bodyParser = require('body-parser'); 12 const bodyParser = require('body-parser');
@@ -29,12 +29,11 @@ exports.index = (req, res, next) => { @@ -29,12 +29,11 @@ exports.index = (req, res, next) => {
29 exports.main = (req, res, next) => { 29 exports.main = (req, res, next) => {
30 const isReplay = /^\/live\/replay\//.test(req.path); 30 const isReplay = /^\/live\/replay\//.test(req.path);
31 const id = req.params.id; 31 const id = req.params.id;
32 - const goDownload = req.query.no;  
33 32
34 res.locals.liveRoom = id; 33 res.locals.liveRoom = id;
35 res.locals.module = 'activity'; 34 res.locals.module = 'activity';
36 res.locals.page = 'live-play'; 35 res.locals.page = 'live-play';
37 - res.locals.enableFoot = goDownload !== 1; 36 + res.locals.enableFoot = Number(req.query.no) !== 1;
38 37
39 model.fetchInfo(id, isReplay) 38 model.fetchInfo(id, isReplay)
40 .then(result => { 39 .then(result => {
  1 +/**
  2 + * 市场推广
  3 + * <jing.li@yoho.cn>
  4 + * 2016/09/07
  5 + */
  6 +
  7 +'use strict';
  8 +
  9 +const indexModel = require('../models/market');
  10 +
  11 +exports.index = (req, res, next) => {
  12 +
  13 + indexModel.index({
  14 +
  15 + }).then((result) => {
  16 +
  17 + res.render('market/market', result);
  18 +
  19 + }).catch(next);
  20 +
  21 +};
@@ -6,7 +6,8 @@ @@ -6,7 +6,8 @@
6 6
7 var express = require('express'), 7 var express = require('express'),
8 path = require('path'), 8 path = require('path'),
9 - hbs = require('express-handlebars'); 9 + hbs = require('express-handlebars'),
  10 + helpers = require(path.join(global.utils, 'helpers'));
10 11
11 var app = express(); 12 var app = express();
12 13
@@ -23,7 +24,7 @@ app.engine('.hbs', hbs({ @@ -23,7 +24,7 @@ app.engine('.hbs', hbs({
23 defaultLayout: 'layout', 24 defaultLayout: 'layout',
24 layoutsDir: doraemon, 25 layoutsDir: doraemon,
25 partialsDir: ['./views/partial', `${doraemon}/partial`], 26 partialsDir: ['./views/partial', `${doraemon}/partial`],
26 - helpers: global.yoho.helpers 27 + helpers: Object.assign({}, global.yoho.helpers, helpers)
27 })); 28 }));
28 29
29 // router 30 // router
  1 +/**
  2 + * 市场推广
  3 + * <jing.li@yoho.cn>
  4 + * 2016/09/07
  5 + */
  6 +
  7 +'use strict';
  8 +const service = global.yoho.ServiceAPI;
  9 +const helpers = global.yoho.helpers;
  10 +const _ = require('lodash');
  11 +const index = () => {
  12 +
  13 + return service.get('/operations/api/v5/resource/home', {
  14 + content_code: '797c299afc4170452cf7b2048806b6b8',
  15 + gender: 1,
  16 + limit: 1000,
  17 + page: 1
  18 + }).then(result => {
  19 +
  20 + let resu = {
  21 + swiper: [],
  22 + floorAdList: [],
  23 + newsList: [],
  24 + download: []
  25 + };
  26 +
  27 + if (result.data.list[0]) {
  28 +
  29 + let headerTip = result.data.list[0].data.text;
  30 +
  31 + resu = Object.assign(resu, { headerTip });
  32 +
  33 + }
  34 +
  35 + if (result.data.list[1]) {
  36 +
  37 + let adList = result.data.list[1].data.list;
  38 +
  39 + let build = [];
  40 +
  41 + adList.forEach(ad => {
  42 + build.push({
  43 + img: helpers.image(ad.src, 640, 310),
  44 + url: ad.url
  45 + });
  46 + });
  47 +
  48 + resu.swiper = build;
  49 +
  50 + let floorList = result.data.list[1].data.list;
  51 +
  52 + let floorAdListTitle = result.data.list[1].data.title.title;
  53 +
  54 + resu = _.assign(resu, { floorAdListTitle });
  55 +
  56 + let floor = [];
  57 +
  58 + let i = 0;
  59 +
  60 + floorList.forEach(ad => {
  61 + if (i < 12) { // 控制显示条数,默认1-12
  62 + floor.push({
  63 + img: helpers.image(ad.src, 640, 170),
  64 + url: ad.url,
  65 + title: ad.title
  66 + });
  67 + i++;
  68 + }
  69 + });
  70 +
  71 + resu.floorAdList = floor;
  72 +
  73 + }
  74 +
  75 + if (result.data.list[2]) {
  76 +
  77 + let newsList = result.data.list[2].data.list[0];
  78 +
  79 + let news = [{
  80 + img: helpers.image(newsList.src, 640, 370),
  81 + url: newsList.url,
  82 + title: newsList.title,
  83 + alt: newsList.alt
  84 + }];
  85 +
  86 + resu.newsList = news;
  87 +
  88 + }
  89 +
  90 + if (result.data.list[3]) {
  91 +
  92 + let downlist = result.data.list[3].data[0];
  93 +
  94 + let down = [{
  95 + img: helpers.image(downlist.src, 640, 275),
  96 + url: downlist.url,
  97 + alt: downlist.alt
  98 + }];
  99 +
  100 + resu.download = down;
  101 +
  102 + }
  103 +
  104 + return resu;
  105 +
  106 + });
  107 +
  108 +};
  109 +
  110 +module.exports = {
  111 + index
  112 +};
@@ -14,6 +14,7 @@ const wechat = require(`${cRoot}/wechat`); @@ -14,6 +14,7 @@ const wechat = require(`${cRoot}/wechat`);
14 const student = require(`${cRoot}/student`); 14 const student = require(`${cRoot}/student`);
15 const live = require(`${cRoot}/live`); 15 const live = require(`${cRoot}/live`);
16 const invite = require(`${cRoot}/invite`); 16 const invite = require(`${cRoot}/invite`);
  17 +const market = require(`${cRoot}/market`);
17 18
18 // routers 19 // routers
19 20
@@ -50,6 +51,8 @@ router.get('/live/:id', live.main); @@ -50,6 +51,8 @@ router.get('/live/:id', live.main);
50 router.get('/invite', invite.index); 51 router.get('/invite', invite.index);
51 router.get('/invite/index', invite.index); 52 router.get('/invite/index', invite.index);
52 53
  54 +router.get('/market', market.index);// 市场推广活动
  55 +
53 router.get(/\/invite\/share_([\d]+)_([\d]+)_([\d]+).html/, invite.share); 56 router.get(/\/invite\/share_([\d]+)_([\d]+)_([\d]+).html/, invite.share);
54 router.get('/invite/sendRegCodeToMobile', invite.sendRegCodeToMobile); 57 router.get('/invite/sendRegCodeToMobile', invite.sendRegCodeToMobile);
55 router.get('/invite/checkOldUserCoupon', invite.checkOldUserCoupon); 58 router.get('/invite/checkOldUserCoupon', invite.checkOldUserCoupon);
  1 +<div class="container">
  2 + <div class="header">
  3 + <div>{{headerTip}}</div>
  4 + </div>
  5 + <div class="tab">
  6 + <div class="swiper-container">
  7 + <div class="swiper-wrapper">
  8 + {{# swiper}}
  9 + <div class="swiper-slide">
  10 + <a href="{{url}}">
  11 + <img class="swiper-lazy" data-src="{{img}}">
  12 + </a>
  13 + </div>
  14 + {{/ swiper}}
  15 + </div>
  16 + <div class="swiper-pagination"></div>
  17 + </div>
  18 + </div>
  19 + {{# floorAdListTitle}}
  20 + <div class="floor-top">
  21 + <img src="{{imgSrc '//cdn.yoho.cn/m-yohobuy-node/assets/img/activity/market/floor-top-1.jpg'}}" />
  22 + </div>
  23 + {{/ floorAdListTitle}}
  24 + <ul class="floor-ul">
  25 + {{# floorAdList}}
  26 + <a href="{{url}}">
  27 + <li>
  28 + <img src="{{img}}" />
  29 + <p>{{title}}</p>
  30 + </li>
  31 + </a>
  32 + {{/ floorAdList}}
  33 + </ul>
  34 + {{# newsList}}
  35 + <div class="floor-top">
  36 + <img src="{{imgSrc '//cdn.yoho.cn/m-yohobuy-node/assets/img/activity/market/floor-top-2.jpg'}}" />
  37 + </div>
  38 + <div class="floor-c">
  39 + <a href="{{url}}">
  40 + <img src="{{img}}" alt="{{alt}}" />
  41 + </a>
  42 + <p>{{title}}</p>
  43 + </div>
  44 + {{/ newsList}}
  45 + {{# download}}
  46 + <a href="{{url}}" class="down">
  47 + <img src="{{img}}" alt="{{alt}}" />
  48 + </a>
  49 + {{/ download}}
  50 +</div>
  1 +/**
  2 + * 逛列表页 controller
  3 + * @author: jing.li@yoho.cn<jing.li@yoho.cn>
  4 + * @date: 2016/09/05
  5 + */
  6 +
  7 +'use strict';
  8 +
  9 +const headerModel = require('../../../doraemon/models/header'); // 头部model
  10 +const indexModel = require('../models/index');
  11 +
  12 +/**
  13 + * 逛列表页
  14 + * @param req
  15 + * @param res
  16 + * @param next
  17 + */
  18 +
  19 +exports.index = (req, res, next) => {
  20 + let headerData = headerModel.setNav({
  21 + navTitle: '逛'
  22 + });
  23 +
  24 + let responseData = {
  25 + pageHeader: headerData,
  26 + module: 'guang',
  27 + page: 'index',
  28 + title: '逛',
  29 + pageFooter: true
  30 + };
  31 +
  32 + let param = {
  33 + uid: req.user.uid || 6228593,
  34 +
  35 + udid: req.user.udid,
  36 +
  37 + type: req.query.type || 0,
  38 +
  39 + gender: req.query.gender || '1,3'
  40 + };
  41 +
  42 + indexModel.getArticle(param).then(result => {
  43 + res.render('index', Object.assign(responseData, result));
  44 + }).catch(next);
  45 +};
@@ -23,7 +23,7 @@ app.engine('.hbs', hbs({ @@ -23,7 +23,7 @@ app.engine('.hbs', hbs({
23 extname: '.hbs', 23 extname: '.hbs',
24 defaultLayout: 'layout', 24 defaultLayout: 'layout',
25 layoutsDir: doraemon, 25 layoutsDir: doraemon,
26 - partialsDir: [path.join(__dirname, 'views/partial'), `${doraemon}/partial`], 26 + partialsDir: [path.join(__dirname, './views/partial'), `${doraemon}/partial`],
27 helpers: global.yoho.helpers 27 helpers: global.yoho.helpers
28 })); 28 }));
29 29
  1 +/**
  2 + * Created by jing.li@yoho.cn.
  3 + * User: jing.li
  4 + * Date: 2016/9/5
  5 + * Time: 17:48
  6 + */
  7 +
  8 +'use strict';
  9 +
  10 +const api = global.yoho.API;
  11 +const serviceAPI = global.yoho.ServiceAPI;
  12 +const singleAPI = global.yoho.SingleAPI;
  13 +const helpers = global.yoho.helpers;
  14 +const camelCase = global.yoho.camelCase;
  15 +const _ = require('lodash');
  16 +
  17 +/**
  18 + * 逛分类
  19 + */
  20 +const _category = () => {
  21 + return serviceAPI.get('/guang/api/v1/category/get', {
  22 +
  23 + }, {
  24 +
  25 + code: 200
  26 + });
  27 +};
  28 +
  29 +/**
  30 + * 逛内容列表
  31 + */
  32 +const _article = (param) => {
  33 + return serviceAPI.get('/guang/api/v2/article/getList', {
  34 + gender: param.gender,
  35 + page: param.page || 1,
  36 + uid: param.uid,
  37 + udid: param.udid,
  38 + sort_id: param.type ? param.type : 1,
  39 + tag: param.tag ? param.tag : null,
  40 + author_id: param.authorId ? param.authorId : null,
  41 + limit: param.limit ? param.limit : null,
  42 + }, {
  43 + code: 200
  44 + }).then(result => {
  45 +
  46 + return result;
  47 +
  48 + });
  49 +};
  50 +
  51 +
  52 +/**
  53 + * 逛
  54 + * @param params
  55 + */
  56 +const getArticle = (param) => {
  57 +
  58 + let page = param.page ? param.page : 1;
  59 +
  60 + Object.assign(param, { page: page });
  61 +
  62 + return api.all([
  63 + _category(),
  64 + _article(param)
  65 + ]).then(result => {
  66 +
  67 + let resu = {
  68 + guang: {
  69 + infos: [{
  70 + show: true,
  71 + info: [{
  72 + 'article_type': '1',
  73 + author: {
  74 + author_id: '8168296',
  75 + avatar: 'http://img10.static.yhbimg.com/author/2016/05/07/15/01bb3ae789c573502830726c3297d0c80a.png',
  76 + name: '雾萌萌',
  77 + url: 'http://guang.m.yohobuy.com/author/index?id=8168296'
  78 + },
  79 + 'author_id': '8168296',
  80 + 'category_id': '1',
  81 + 'category_name': '话题',
  82 + 'conver_image_type': '1',
  83 + 'id': 34380,
  84 + text: '验证逛文章图片压缩测试验证逛文章图片压缩测试验证逛文章图片压缩测试',
  85 + 'isFavor': 'N',
  86 + 'isPraise': 'N',
  87 + 'is_recommended': '1',
  88 + 'praiseStatus': 'true',
  89 + 'praise_num': '0',
  90 + publishTime: '09月02日 19:21',
  91 + 'share': {
  92 + 'url': 'http://guang.m.yohobuy.com/info/index?id=34380'
  93 + },
  94 + img: 'https://img13.static.yhbimg.com/article/2016/09/05/14/02d732942cdd9647465736cb79796b0ddd.jpg?imageView/2/w/640/h/640',
  95 + 'title': '验证逛文章图片压缩测试',
  96 + 'url': 'http://guang.m.yohobuy.com/info/index?id=34380',
  97 + pageView: '50'
  98 + }]
  99 + }],
  100 + navs: [{
  101 + typeId: '0',
  102 + type: '推荐',
  103 + focus: true
  104 + }, {
  105 + typeId: '1',
  106 + type: '话题'
  107 + }, {
  108 + typeId: '2',
  109 + type: '搭配'
  110 + }, {
  111 + typeId: '3',
  112 + type: '潮人'
  113 + }, {
  114 + typeId: '4',
  115 + type: '潮品'
  116 + }, {
  117 + typeId: '19',
  118 + type: '专题'
  119 + }],
  120 + swiper: [{
  121 + img: 'https://img11.static.yhbimg.com/yhb-img01/2016/09/01/10/017b5ce31285f9062469303ba9ca197660.jpg?imageView2/2/w/830/h/327',
  122 + url: 'http://feature.yoho.cn/0418RUNNINGMAN/index.html?title=兄弟在奔跑,潮流在有货&share_id=944'
  123 + }, {
  124 + img: 'https://img11.static.yhbimg.com/yhb-img01/2016/09/01/10/017b5ce31285f9062469303ba9ca197660.jpg?imageView2/2/w/830/h/327',
  125 + url: 'http://feature.yoho.cn/0418RUNNINGMAN/index.html?title=兄弟在奔跑,潮流在有货&share_id=944'
  126 + }]
  127 + }
  128 + };
  129 +
  130 + return resu;
  131 +
  132 + });
  133 +
  134 +};
  135 +
  136 +module.exports = {
  137 + getArticle
  138 +};
@@ -10,7 +10,7 @@ const express = require('express'); @@ -10,7 +10,7 @@ const express = require('express');
10 const cRoot = './controllers'; 10 const cRoot = './controllers';
11 const star = require(cRoot + '/star'); 11 const star = require(cRoot + '/star');
12 const plusstar = require(cRoot + '/plusstar'); 12 const plusstar = require(cRoot + '/plusstar');
13 - 13 +const homeController = require(`${cRoot}/index`);
14 const router = express.Router(); // eslint-disable-line 14 const router = express.Router(); // eslint-disable-line
15 15
16 router.get('/star', star.index); // 星潮教室首页 16 router.get('/star', star.index); // 星潮教室首页
@@ -25,5 +25,6 @@ router.post('/star/setFavorite', star.setFavorite); // 收藏文章 @@ -25,5 +25,6 @@ router.post('/star/setFavorite', star.setFavorite); // 收藏文章
25 25
26 router.get('/plusstar', plusstar.index); // 潮流优选 26 router.get('/plusstar', plusstar.index); // 潮流优选
27 router.get('/plusstar/resources-template', plusstar.resourcesTemplate); // 潮流优选首页-资源位 27 router.get('/plusstar/resources-template', plusstar.resourcesTemplate); // 潮流优选首页-资源位
  28 +router.get('/', homeController.index); // 逛首页
28 29
29 module.exports = router; 30 module.exports = router;
  1 +<div class="guang-list-page guang-page yoho-page">
  2 +
  3 + {{# guang}}
  4 + <ul id="guang-nav" class="guang-nav clearfix">
  5 + {{# navs}}
  6 + <li class="guang-nav-item {{#focus}}focus{{/focus}}" data-type={{typeId}}>
  7 + {{type}}
  8 + </li>
  9 + {{/ navs}}
  10 + </ul>
  11 +
  12 + <div id="info-list" class="info-list-container">
  13 + {{# infos}}
  14 + <div class="info-list{{^show}} hide{{/show}}">
  15 + {{#if show}}
  16 + {{#if ../swiper}}
  17 + <div class="swiper-container swiper-cont-{{typeId}}">
  18 + <div class="swiper-wrapper swiper-wrap-{{typeId}}">
  19 + {{# swiper}}
  20 + <div class="swiper-slide">
  21 + <a href="{{url}}">
  22 + <img class="swiper-lazy" data-src="{{img}}">
  23 + </a>
  24 + <div class="swiper-lazy-preloader"></div>
  25 + </div>
  26 + {{/ swiper}}
  27 + </div>
  28 + <div class="swiper-pagination swiper-pagi-{{typeId}}"></div>
  29 + </div>
  30 + {{/if}}
  31 + {{/if}}
  32 + {{# info}}
  33 + {{> info}}
  34 + {{/ info}}
  35 + </div>
  36 + {{/ infos}}
  37 + </div>
  38 +
  39 + <div id="load-more-info" class="load-more-info">
  40 + <div class="loading status hide">
  41 + 正在加载...
  42 + </div>
  43 + <span class="no-more status">没有更多啦</span>
  44 + </div>
  45 + <input id="gender" type="hidden" value={{gender}}>
  46 + {{/ guang}}
  47 +</div>
  1 +<div class="guang-info" data-id="{{id}}">
  2 + {{# author}}
  3 + <a class="info-author clearfix" href={{url}}>
  4 + <img class="lazy avatar" data-original={{avatar}}>
  5 + <span class="name">{{name}}</span>
  6 + </a>
  7 + {{/ author}}
  8 +
  9 + <div class="info-img">
  10 + {{#if showTags}}
  11 + <a href="javascript:;" class="info-match">
  12 + {{# isTip}}
  13 + 小贴士
  14 + <div class="info-tag tip"></div>
  15 + {{/ isTip}}
  16 + {{# isCollocation}}
  17 + 搭配
  18 + <div class="info-tag collocation"></div>
  19 + {{/ isCollocation}}
  20 + {{# isFashionMan}}
  21 + 潮人
  22 + <div class="info-tag fashion-man"></div>
  23 + {{/ isFashionMan}}
  24 + {{# isFashionGood}}
  25 + 潮品
  26 + <div class="info-tag fashion-good"></div>
  27 + {{/ isFashionGood}}
  28 + {{# isTopic}}
  29 + 话题
  30 + <div class="info-tag topic"></div>
  31 + {{/ isTopic}}
  32 + {{# isSpecialTopic}}
  33 + 专题
  34 + <div class="info-tag special-topic"></div>
  35 + {{/ isSpecialTopic}}
  36 + </a>
  37 + {{/if}}
  38 + <a href="{{url}}">
  39 + <img class="lazy" data-original="{{img}}" alt="{{alt}}">
  40 + </a>
  41 + </div>
  42 +
  43 + <div class="info-deps">
  44 + <a class="info-title-container" href="{{url}}">
  45 + <h2 class="info-title">{{title}}</h2>
  46 + </a>
  47 + <p class="info-text">{{text}}</p>
  48 + {{> guang/tvls}}
  49 + </div>
  50 +</div>
  1 +<div class="guang-list-page guang-page yoho-page">
  2 +{{# guang}}
  3 + {{# authorInfo}}
  4 + <div id="author-infos" class="editor-header clearfix" data-id={{id}}>
  5 + <div class="avatar">
  6 + <img src="{{avatar}}">
  7 + </div>
  8 + <div class="text">
  9 + <p class="name">{{name}}</p>
  10 + <p class="info">{{info}}</p>
  11 + </div>
  12 + </div>
  13 + {{/ authorInfo}}
  14 +
  15 + <div id="info-list" class="info-list">
  16 + {{# infos}}
  17 + {{> guang/info}}
  18 + {{/ infos}}
  19 + </div>
  20 +
  21 + <div id="load-more-info" class="load-more-info">
  22 + <div class="loading status hide">
  23 + 正在加载...
  24 + </div>
  25 + <span class="no-more status">没有更多啦</span>
  26 + </div>
  27 +
  28 + {{#if tag}}
  29 + <input id="tag" type="hidden" value={{tag}}>
  30 + {{/if}}
  31 + {{#if gender}}
  32 + <input id="gender" type="hidden" value={{gender}}>
  33 + {{/if}}
  34 + {{#if isApp}}
  35 + <input id="isApp" type="hidden" value={{isApp}}>
  36 + {{/if}}
  37 +{{/ guang}}
  38 +</div>
  1 +info
  2 +<div class="guang-info" data-id="{{id}}">
  3 + {{# author}}
  4 + <a class="info-author clearfix" href={{url}}>
  5 + <img class="lazy avatar" data-original={{avatar}}>
  6 + <span class="name">{{name}}</span>
  7 + </a>
  8 + {{/ author}}
  9 +
  10 + <div class="info-img">
  11 + {{#if showTags}}
  12 + <a href="javascript:;" class="info-match">
  13 + {{# isTip}}
  14 + 小贴士
  15 + <div class="info-tag tip"></div>
  16 + {{/ isTip}}
  17 + {{# isCollocation}}
  18 + 搭配
  19 + <div class="info-tag collocation"></div>
  20 + {{/ isCollocation}}
  21 + {{# isFashionMan}}
  22 + 潮人
  23 + <div class="info-tag fashion-man"></div>
  24 + {{/ isFashionMan}}
  25 + {{# isFashionGood}}
  26 + 潮品
  27 + <div class="info-tag fashion-good"></div>
  28 + {{/ isFashionGood}}
  29 + {{# isTopic}}
  30 + 话题
  31 + <div class="info-tag topic"></div>
  32 + {{/ isTopic}}
  33 + {{# isSpecialTopic}}
  34 + 专题
  35 + <div class="info-tag special-topic"></div>
  36 + {{/ isSpecialTopic}}
  37 + </a>
  38 + {{/if}}
  39 + <a href="{{url}}">
  40 + <img class="lazy" data-original="{{img}}" alt="{{alt}}">
  41 + </a>
  42 + </div>
  43 +
  44 + <div class="info-deps">
  45 + <a class="info-title-container" href="{{url}}">
  46 + <h2 class="info-title">{{title}}</h2>
  47 + </a>
  48 + <p class="info-text">{{text}}</p>
  49 + {{> tvls}}
  50 + </div>
  51 +</div>
  1 +<div class="time-view-like-share clearfix">
  2 + <i class="iconfont">&#xe603;</i>
  3 + {{publishTime}}&nbsp;&nbsp;&nbsp;&nbsp;
  4 + <i class="iconfont">&#xe602;</i>
  5 + <span class="page-view">{{pageView}}</span>
  6 + <div class="like-share-container">
  7 + {{# like}}
  8 + <i class="iconfont like-btn{{#isLiked}} like{{/isLiked}}">&#xe601;</i>
  9 + <span class="like-count">{{count}}</span>
  10 + {{/ like}}
  11 + {{# collect}}
  12 + <a href={{url}}>
  13 + <i class="iconfont collect-btn{{#isCollected}} collected{{/isCollected}}">&#xe605;</i>
  14 + </a>
  15 + {{/ collect}}
  16 + {{# share}}
  17 + <a href="{{.}}" class="iconfont share-btn">&#xe600;</a>
  18 + {{/ share}}
  19 + </div>
  20 +</div>
@@ -11,8 +11,10 @@ const isTest = process.env.NODE_ENV === 'test'; @@ -11,8 +11,10 @@ const isTest = process.env.NODE_ENV === 'test';
11 11
12 module.exports = { 12 module.exports = {
13 app: 'h5', 13 app: 'h5',
  14 + appVersion: '4.9.2', // 调用api的版本
14 port: 6001, 15 port: 6001,
15 siteUrl: '//m.yohobuy.com', 16 siteUrl: '//m.yohobuy.com',
  17 + assetUrl: '//localhost:5001',
16 domains: { 18 domains: {
17 api: 'http://api-test3.yohops.com:9999/', 19 api: 'http://api-test3.yohops.com:9999/',
18 service: 'http://service-test3.yohops.com:9999/', 20 service: 'http://service-test3.yohops.com:9999/',
@@ -28,12 +30,11 @@ module.exports = { @@ -28,12 +30,11 @@ module.exports = {
28 activity: '//activity.yohobuy.com', 30 activity: '//activity.yohobuy.com',
29 index: '//m.yohobuy.com' 31 index: '//m.yohobuy.com'
30 }, 32 },
31 - useOneapm: false,  
32 useCache: false, 33 useCache: false,
33 memcache: { 34 memcache: {
34 - master: ['192.168.102.205:12111'],  
35 - slave: ['192.168.102.205:12111'],  
36 - session: ['192.168.102.205:12111'], 35 + master: ['192.168.102.168:12111'],
  36 + slave: ['192.168.102.168:12111'],
  37 + session: ['192.168.102.168:12111'],
37 timeout: 1000, 38 timeout: 1000,
38 retries: 0 39 retries: 0
39 }, 40 },
@@ -76,19 +77,19 @@ module.exports = { @@ -76,19 +77,19 @@ module.exports = {
76 if (isProduction) { 77 if (isProduction) {
77 Object.assign(module.exports, { 78 Object.assign(module.exports, {
78 appName: 'm.yohobuy.com', 79 appName: 'm.yohobuy.com',
  80 + assetUrl: '//cdn.yoho.cn/m-yohobuy-node/assets',
79 domains: { 81 domains: {
80 api: 'http://api.yoho.yohoops.org/', 82 api: 'http://api.yoho.yohoops.org/',
81 service: 'http://service.yoho.yohoops.org/', 83 service: 'http://service.yoho.yohoops.org/',
82 - liveApi: 'http://preapi.live.yoho.cn/' // 'http://api.live.yoho.cn/' 84 + liveApi: 'http://api.live.yoho.cn/'
83 }, 85 },
84 memcache: { 86 memcache: {
85 master: ['memcache1.yohoops.org:12111', 'memcache2.yohoops.org:12111', 'memcache3.yohoops.org:12111'], 87 master: ['memcache1.yohoops.org:12111', 'memcache2.yohoops.org:12111', 'memcache3.yohoops.org:12111'],
86 slave: ['memcache1.yohoops.org:12112', 'memcache2.yohoops.org:12112', 'memcache3.yohoops.org:12112'], 88 slave: ['memcache1.yohoops.org:12112', 'memcache2.yohoops.org:12112', 'memcache3.yohoops.org:12112'],
87 session: ['memcache1.yohoops.org:12111', 'memcache2.yohoops.org:12111', 'memcache3.yohoops.org:12111'], 89 session: ['memcache1.yohoops.org:12111', 'memcache2.yohoops.org:12111', 'memcache3.yohoops.org:12111'],
88 - timeout: 1000, 90 + timeout: 100,
89 retries: 0 91 retries: 0
90 }, 92 },
91 - useOneapm: true,  
92 useCache: true, 93 useCache: true,
93 interfaceShunt: { 94 interfaceShunt: {
94 open: false, 95 open: false,
@@ -98,19 +99,19 @@ if (isProduction) { @@ -98,19 +99,19 @@ if (isProduction) {
98 } else if (isTest) { 99 } else if (isTest) {
99 Object.assign(module.exports, { 100 Object.assign(module.exports, {
100 appName: 'm.yohobuy.com for test', 101 appName: 'm.yohobuy.com for test',
  102 + assetUrl: '//cdn.yoho.cn/m-yohobuy-node/assets',
101 domains: { 103 domains: {
102 - api: 'http://api-test3.yohops.com:9999/',  
103 - service: 'http://service-test3.yohops.com:9999/',  
104 - liveApi: 'http://testapi.live.yohops.com:9999/' 104 + api: process.env.TEST_API || 'http://api-test1.yohops.com:9999/',
  105 + service: process.env.TEST_SERVICE || 'http://service-test1.yohops.com:9999/',
  106 + liveApi: process.env.TEST_LIVE || 'http://testapi.live.yohops.com:9999/'
105 }, 107 },
106 memcache: { 108 memcache: {
107 master: ['127.0.0.1:12111'], 109 master: ['127.0.0.1:12111'],
108 slave: ['127.0.0.1:12112'], 110 slave: ['127.0.0.1:12112'],
109 session: ['127.0.0.1:12111'], 111 session: ['127.0.0.1:12111'],
110 - timeout: 1000, 112 + timeout: 100,
111 retries: 0 113 retries: 0
112 }, 114 },
113 - useOneapm: true,  
114 useCache: true 115 useCache: true
115 }); 116 });
116 } 117 }
1 { 1 {
2 "name": "m-yohobuy-node", 2 "name": "m-yohobuy-node",
3 - "version": "4.9.21", 3 + "version": "4.9.22",
4 "private": true, 4 "private": true,
5 "description": "A New Yohobuy Project With Express", 5 "description": "A New Yohobuy Project With Express",
6 "repository": { 6 "repository": {
@@ -44,7 +44,6 @@ @@ -44,7 +44,6 @@
44 "memcached": "^2.2.1", 44 "memcached": "^2.2.1",
45 "moment": "^2.14.1", 45 "moment": "^2.14.1",
46 "morgan": "^1.7.0", 46 "morgan": "^1.7.0",
47 - "oneapm": "^1.2.20",  
48 "passport": "^0.3.2", 47 "passport": "^0.3.2",
49 "passport-local": "^1.0.0", 48 "passport-local": "^1.0.0",
50 "passport-qq": "0.0.3", 49 "passport-qq": "0.0.3",

225 Bytes | W: | H:

22 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
  1 +var $ = require('yoho-jquery'),
  2 + Swiper = require('yoho-swiper'),
  3 + lazyLoad = require('yoho-jquery-lazyload');
  4 +
  5 +var swiper = new Swiper('.tab .swiper-container', {
  6 + pagination: '.swiper-pagination',
  7 + lazyLoading: true,
  8 + lazyLoadingInPrevNext: true,
  9 + paginationClickable: true,
  10 + loop: true,
  11 + autoplay: 3000,
  12 +});
  13 +
  14 +require('lodash/commit');
  15 +
  16 +lazyLoad($('img.lazy'));
  17 +
  18 +// 统计用户点击事件
  19 +$(
  20 + function() {
  21 + $('a').click(
  22 + function() {
  23 + if (window._yas) {
  24 + window._yas.sendCustomInfo({
  25 +
  26 + }, true);
  27 + }
  28 + }
  29 + );
  30 + }
  31 +);
@@ -391,9 +391,19 @@ $(document).on('click', '.s-footer .checkbox', function() { @@ -391,9 +391,19 @@ $(document).on('click', '.s-footer .checkbox', function() {
391 /* 391 /*
392 * 数据提交 392 * 数据提交
393 */ 393 */
  394 +$('.s-submit').data('isClick', true);
394 $(document).on('click', '.s-submit', function() { 395 $(document).on('click', '.s-submit', function() {
395 var obj = changeSuccess(), 396 var obj = changeSuccess(),
396 FAILURE_CAUSE; 397 FAILURE_CAUSE;
  398 + var $that = $(this);
  399 +
  400 + // 存cookie 记录状态
  401 + localStorage.setItem(STUDENTCOOKIES, JSON.stringify(obj.data));
  402 +
  403 + if ($that.data('isClick') === false) {
  404 + return;
  405 + }
  406 + $that.data('isClick', false);
397 407
398 if (!obj.msg) { 408 if (!obj.msg) {
399 $.ajax({ 409 $.ajax({
@@ -412,15 +422,15 @@ $(document).on('click', '.s-submit', function() { @@ -412,15 +422,15 @@ $(document).on('click', '.s-submit', function() {
412 } 422 }
413 }, true); 423 }, true);
414 } 424 }
415 -  
416 location.href = data.data; 425 location.href = data.data;
417 } else { 426 } else {
  427 + $that.data('isClick', true);
418 tip.show(data.message); 428 tip.show(data.message);
419 } 429 }
420 -  
421 }); 430 });
422 } else { 431 } else {
423 tip.show(obj.msg); 432 tip.show(obj.msg);
  433 + $that.data('isClick', true);
424 if (obj.msg.indexOf('字段为空') > -1) { 434 if (obj.msg.indexOf('字段为空') > -1) {
425 FAILURE_CAUSE = 1; 435 FAILURE_CAUSE = 1;
426 } else if (obj.msg.indexOf('认证协议') > -1) { 436 } else if (obj.msg.indexOf('认证协议') > -1) {
  1 +/**
  2 + * 逛首页
  3 + * @author: xuqi<qi.xu@yoho.cn>
  4 + * @date: 2015/10/10
  5 + */
  6 +
  7 +var $ = require('yoho-jquery');
  8 +
  9 +var info = require('./info'),
  10 + loadMore = info.loadMore;
  11 +
  12 +var $loadMoreInfo = $('#load-more-info');
  13 +var $loading = $(''),
  14 + $noMore = $('');
  15 +
  16 +var winH = $(window).height();
  17 +
  18 +var $infoList = $('#info-list'),
  19 + $infos = $infoList.children('.info-list'),
  20 + $nav = $('#guang-nav'),
  21 + $curNav = $nav.children('.focus'),
  22 + curType = $curNav.data('type');
  23 +
  24 +require('../common');
  25 +
  26 +var state = {};
  27 +
  28 +if ($loadMoreInfo.length > 0) {
  29 + $loading = $loadMoreInfo.children('.loading');
  30 + $noMore = $loadMoreInfo.children('.no-more');
  31 +}
  32 +
  33 +info.initSwiper(curType);
  34 +
  35 +info.initInfosEvt($infoList);
  36 +
  37 +// 初始化各Nav下资讯加载的状态
  38 +(function() {
  39 + var gender = $('#gender').val();
  40 +
  41 + $nav.children('.guang-nav-item').each(function() {
  42 + var type = $(this).data('type'),
  43 + focus = $(this).hasClass('focus');
  44 +
  45 + state[type] = {
  46 + page: focus ? 2 : 1,
  47 + gender: gender,
  48 + type: type,
  49 + end: false
  50 + };
  51 + });
  52 +}());
  53 +$nav.bind('contextmenu', function(e) {
  54 + return false;
  55 +});
  56 +$nav.on('touchend touchcancel', function(e) {
  57 +
  58 + var $this = $(e.target).closest('.guang-nav-item'),
  59 + $content,
  60 + index;
  61 +
  62 + if ($this.hasClass('focus')) {
  63 + return;
  64 + }
  65 +
  66 +
  67 + index = $this.index();
  68 +
  69 + $this.addClass('focus');
  70 + $curNav.removeClass('focus');
  71 +
  72 + $content = $infos.eq(index);
  73 +
  74 + $curNav = $this;
  75 + curType = $this.data('type');
  76 +
  77 + // 当未加载数据时去请求数据
  78 + if (state[curType].page === 1) {
  79 +
  80 + // 无数据时隐藏正在加载和没有更多字样
  81 + $loading.addClass('hide');
  82 + $noMore.addClass('hide');
  83 +
  84 + state[curType].isTab = true;
  85 + loadMore($content, state[curType]);
  86 + } else {
  87 +
  88 + // 重置当前Tab的load-more
  89 + if (state[curType].end) {
  90 + $loading.addClass('hide');
  91 + $noMore.removeClass('hide');
  92 + } else {
  93 + $loading.removeClass('hide');
  94 + $noMore.addClass('hide');
  95 + }
  96 + }
  97 +
  98 + $infos.not('.hide').addClass('hide');
  99 + $content.removeClass('hide');
  100 +
  101 + if (state[curType].page === 1) {
  102 + window.rePosFooter();// 进入空内容时重新定位footer位置
  103 + }
  104 +});
  105 +
  106 +function scrollHandler() {
  107 + var $c = $infos.not('.hide');
  108 +
  109 + if ($(window).scrollTop() + winH >= $(document).height() - 0.25 * $c.height()) {
  110 + loadMore($c, state[curType]);
  111 + }
  112 +}
  113 +
  114 +// srcoll to load more
  115 +$(document).scroll(function() {
  116 + window.requestAnimationFrame(scrollHandler);
  117 +});
  118 +
  119 +$nav.on('touchstart', function(e) {
  120 + var target = e.target || e.srcElement;
  121 +
  122 + target.className = 'bytouch ' + target.className;
  123 +}).on('touchend touchcancel', function() {
  124 + $nav.find('li').removeClass('bytouch');
  125 +});
  1 +/**
  2 + * 资讯相关API
  3 + * @author: xuqi<qi.xu@yoho.cn>
  4 + * @date: 2015/10/10
  5 + */
  6 +
  7 +var $ = require('yoho-jquery'),
  8 + Hammer = require('yoho-hammer'),
  9 + ellipsis = require('yoho-mlellipsis'),
  10 + lazyLoad = require('yoho-jquery-lazyload'),
  11 + Swiper = require('yoho-swiper');
  12 +
  13 +var tip = require('../plugin/tip');
  14 +var loading = require('../plugin/loading');
  15 +
  16 +var $loadMoreInfo = $('#load-more-info');
  17 +var $loading = $(''),
  18 + $noMore = $(''),
  19 + $swiper = $('');
  20 +
  21 +require('../common');
  22 +
  23 +var searching = false;
  24 +var mySwiper = {};
  25 +
  26 +var isLoading = false;
  27 +
  28 +ellipsis.init();
  29 +
  30 +if ($loadMoreInfo.length > 0) {
  31 + $loading = $loadMoreInfo.children('.loading');
  32 + $noMore = $loadMoreInfo.children('.no-more');
  33 +}
  34 +
  35 +// 获取url中的参数
  36 +function getUrlParam(name) {
  37 +
  38 + // 构造一个含有目标参数的正则表达式对象
  39 + var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
  40 +
  41 + // 匹配目标参数
  42 + var r = window.location.search.substr(1).match(reg);
  43 +
  44 + // 返回参数值
  45 + if (r != null) {
  46 + return r[2];
  47 + }
  48 +
  49 + return null;
  50 +}
  51 +
  52 +// 初始化swiper
  53 +function initSwiper(typeId) {
  54 + if (typeof typeId === undefined) {
  55 + return;
  56 + }
  57 + mySwiper[typeId] = new Swiper('.swiper-cont-' + typeId, {
  58 + lazyLoading: true,
  59 + wrapperClass: 'swiper-wrap-' + typeId,
  60 + pagination: '.swiper-pagi-' + typeId,
  61 + autoplay: 3000
  62 + });
  63 +}
  64 +
  65 +/**
  66 + * 设置指定资讯项的Lazyload和文字截取
  67 + * @params $infos 资讯项
  68 + */
  69 +function setLazyLoadAndMellipsis($infos) {
  70 + lazyLoad($infos.find('img.lazy'));
  71 +
  72 + $infos.each(function() {
  73 + var $this = $(this),
  74 + $title = $this.find('.info-title'),
  75 + $text = $this.find('.info-text');
  76 +
  77 + $title[0].mlellipsis(2);
  78 + $text[0].mlellipsis(2);
  79 + });
  80 +}
  81 +
  82 +/**
  83 + * 初始化资讯列表事件绑定
  84 + * @params $container 逛资讯列表容器
  85 + */
  86 +function initInfosEvt($container) {
  87 + var cHammer;
  88 +
  89 + if (typeof $container === 'undefined') {
  90 + return;
  91 + }
  92 + if (typeof $container[0] === 'undefined') {
  93 + return;
  94 + }
  95 + cHammer = new Hammer($container[0]);
  96 +
  97 + // 点赞或者收藏事件
  98 + cHammer.on('tap', function(e) {
  99 + var $this = $(e.target),
  100 + opt = 'ok',
  101 + $btn,
  102 + $info,
  103 + yhChannel;
  104 +
  105 + // e.preventDefault();
  106 +
  107 + // 点赞
  108 + $btn = $this.closest('.like-btn');
  109 + if ($btn.length > 0 && !isLoading) {
  110 + e.preventDefault();
  111 + if ($btn.hasClass('like')) {
  112 + opt = 'cancel';
  113 + }
  114 +
  115 + $info = $this.closest('.guang-info');
  116 +
  117 + isLoading = true;
  118 +
  119 + $.ajax({
  120 + type: 'POST',
  121 + url: '/guang/opt/praiseArticle',
  122 + data: {
  123 + id: $info.data('id'),
  124 + opt: opt
  125 + },
  126 + success: function(data) {
  127 + var code = data.code;
  128 +
  129 +
  130 + if (code === 200) {
  131 + $btn.next('.like-count').text(data.data);
  132 +
  133 + // 切换点赞状态
  134 + $btn.toggleClass('like');
  135 + }
  136 + },
  137 + error: function() {
  138 + tip.show('网络断开连接了~');
  139 + },
  140 + complete: function() {
  141 + isLoading = false;
  142 + }
  143 + });
  144 + return;
  145 + }
  146 +
  147 + // APP收藏
  148 + $btn = $this.closest('.collect-btn');
  149 + if ($btn.length > 0) {
  150 + e.preventDefault();
  151 + if ($btn.hasClass('collected')) {
  152 + opt = 'cancel';
  153 + }
  154 +
  155 + $info = $this.closest('.guang-info');
  156 +
  157 + if (getUrlParam('yh_channel')) {
  158 + yhChannel = getUrlParam('yh_channel');
  159 + }
  160 +
  161 + $.ajax({
  162 + type: 'POST',
  163 + url: '/guang/opt/collectArticle',
  164 + data: {
  165 + id: $info.data('id'),
  166 + opt: opt,
  167 + yh_channel: yhChannel,
  168 + uid: getUrlParam('uid')
  169 + },
  170 + success: function(data) {
  171 + if (data.code && data.code === 200) {
  172 +
  173 + // 切换收藏状态
  174 + $btn.toggleClass('collected');
  175 + }
  176 + },
  177 + error: function() {
  178 + tip.show('网络断开连接了~');
  179 + }
  180 + });
  181 + }
  182 + });
  183 +
  184 + setLazyLoadAndMellipsis($container.find('.guang-info'));
  185 +}
  186 +
  187 +/**
  188 + * 资讯LoadMore
  189 + * @param $container 资讯容器 jqyeryObject
  190 + * @param opt 请求参数
  191 + * @param url[可选], 扩展请求的url而不使用默认值
  192 + */
  193 +function loadMore($container, opt, url) {
  194 + var num;
  195 +
  196 + if (searching) {
  197 + return;
  198 + }
  199 +
  200 + if (opt.end) {
  201 + return;
  202 + }
  203 +
  204 + if (opt.page === 1) {
  205 +
  206 + // 显示loading
  207 + loading.showLoadingMask();
  208 + }
  209 +
  210 + num = $container.find('.guang-info').length;
  211 + searching = true;
  212 + $.ajax({
  213 + type: 'GET',
  214 + url: url ? url : '/guang/index/page', // 对于指定url的使用指定url(存在不同的控制器)
  215 + data: opt,
  216 + success: function(data) {
  217 + var $newItems;
  218 +
  219 + if (data === ' ') {
  220 + opt.end = true;
  221 + searching = false;
  222 +
  223 + //
  224 + $loading.addClass('hide');
  225 + $noMore.removeClass('hide');
  226 +
  227 + return;
  228 + }
  229 +
  230 + $container.append(data);
  231 +
  232 + $swiper = $container.find('.swiper-container');
  233 + if ($swiper.length) {
  234 + $swiper.addClass('swiper-cont-' + opt.type);
  235 + $swiper.children('.swiper-wrapper').addClass('swiper-wrap-' + opt.type);
  236 + $swiper.children('.swiper-pagination').addClass('swiper-pagi-' + opt.type);
  237 + initSwiper(opt.type);
  238 + }
  239 +
  240 + if (num > 0) {
  241 + $newItems = $container.find('.guang-info:gt(' + (num - 1) + ')');
  242 + } else {
  243 + $newItems = $container.find('.guang-info');
  244 + }
  245 +
  246 + setLazyLoadAndMellipsis($newItems);
  247 +
  248 + if (opt.page === 1) {
  249 + loading.hideLoadingMask();
  250 +
  251 + $loading.removeClass('hide');// 显示空屏加载时hide的隐藏
  252 +
  253 + window.rePosFooter();// 插入内容后重新计算底部位置
  254 + }
  255 +
  256 + opt.page++;
  257 +
  258 + searching = false;
  259 + delete opt.isTab;
  260 + },
  261 + error: function() {
  262 + tip.show('网络断开连接了~');
  263 + searching = false;
  264 + delete opt.isTab;
  265 + }
  266 + });
  267 +}
  268 +
  269 +
  270 +exports.mySwiper = mySwiper;
  271 +exports.initSwiper = initSwiper;
  272 +exports.initInfosEvt = initInfosEvt;
  273 +exports.setLazyLoadAndMellipsis = setLazyLoadAndMellipsis;
  274 +exports.loadMore = loadMore;
@@ -30,6 +30,9 @@ var debounceFn = debounce(function(cardNo, formModel) { @@ -30,6 +30,9 @@ var debounceFn = debounce(function(cardNo, formModel) {
30 30
31 // 返回1不支持, 孟令阶 31 // 返回1不支持, 孟令阶
32 if (result && result.data && result.data.businessSupport === '1') { 32 if (result && result.data && result.data.businessSupport === '1') {
  33 + formModel.bankCode = '';
  34 + formModel.bankName = '';
  35 +
33 $('#bank-name').text('暂不支持此银行卡'); 36 $('#bank-name').text('暂不支持此银行卡');
34 $('#bank-desc').show(); 37 $('#bank-desc').show();
35 $('#bank-icon').hide(); 38 $('#bank-icon').hide();
@@ -43,18 +46,12 @@ var debounceFn = debounce(function(cardNo, formModel) { @@ -43,18 +46,12 @@ var debounceFn = debounce(function(cardNo, formModel) {
43 46
44 var checkCard = function(formModel) { 47 var checkCard = function(formModel) {
45 // 银行卡格式化 48 // 银行卡格式化
46 - $('#cardNo').keyup(function() { 49 + $('#cardNo').on('input', function() {
47 var value = $(this).val(); 50 var value = $(this).val();
48 var cardNo = $(this).val().replace(/\s/g, ''); 51 var cardNo = $(this).val().replace(/\s/g, '');
49 52
50 $(this).val(value.replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ')).trigger('change'); 53 $(this).val(value.replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ')).trigger('change');
51 54
52 - if (cardNo && cardNo.length < 16) {  
53 - $('#bank-desc').hide();  
54 - }  
55 - }).blur(function() {  
56 - var cardNo = $(this).val().replace(/\s/g, '');  
57 -  
58 if (cardNo && cardNo.length >= 16) { 55 if (cardNo && cardNo.length >= 16) {
59 debounceFn(cardNo, formModel); 56 debounceFn(cardNo, formModel);
60 } else { 57 } else {
@@ -35,14 +35,15 @@ var validateForm = function() { @@ -35,14 +35,15 @@ var validateForm = function() {
35 35
36 checkCard(formData); 36 checkCard(formData);
37 37
38 -// 输入框改变时同时更新模型  
39 -$('input').on('input', function() {  
40 - var name = $(this).attr('name');  
41 -  
42 - formData[name] = $(this).val(); 38 +// 定时更新模型,解决各种浏览器奇葩问题终极办法
  39 +setInterval(function() {
  40 + $('input').each(function() {
  41 + var name = $(this).attr('name');
43 42
  43 + formData[name] = $(this).val();
  44 + });
44 validateForm(); 45 validateForm();
45 -}); 46 +}, 500);
46 47
47 applyButton.on('click', function() { 48 applyButton.on('click', function() {
48 var self = this; 49 var self = this;
1 @import "live/index"; 1 @import "live/index";
2 @import "student"; 2 @import "student";
  3 +@import "market/index";
3 4
4 .receive-coupon-page { 5 .receive-coupon-page {
5 * { 6 * {
  1 +.container {
  2 + width: 100%;
  3 + max-width: 640px;
  4 + margin: 0 auto;
  5 + position: relative;
  6 + background: #222;
  7 + padding-bottom: 10px;
  8 +}
  9 +
  10 +.header {
  11 + width: 100%;
  12 + height: 82px;
  13 + background: resolve("activity/market/header.jpg") no-repeat center center;
  14 + background-size: contain;
  15 +}
  16 +
  17 +.header {
  18 + div {
  19 + width: 375px;
  20 + line-height: 82px;
  21 + font-size: 24px;
  22 + color: #fff;
  23 + float: right;
  24 + text-align: center;
  25 + overflow: hidden;
  26 + white-space: nowrap;
  27 + text-overflow: ellipsis;
  28 + -webkit-text-overflow: ellipsis;
  29 + }
  30 +}
  31 +
  32 +.tab {
  33 + width: 100%;
  34 + height: 310px;
  35 +}
  36 +
  37 +.tab {
  38 + img {
  39 + width: 100%;
  40 + height: 100%;
  41 + }
  42 +}
  43 +
  44 +.swiper-container {
  45 + width: 100%;
  46 + height: 100%;
  47 +}
  48 +
  49 +.swiper-pagination-bullet {
  50 + background: #959799 !important;
  51 + width: 14px !important;
  52 + height: 14px !important;
  53 + margin: 0 9px !important;
  54 +}
  55 +
  56 +.swiper-pagination-bullet-active {
  57 + background: #fff !important;
  58 +}
  59 +
  60 +.floor-top {
  61 + width: 100%;
  62 + height: 68px;
  63 +}
  64 +
  65 +.floor-top {
  66 + img {
  67 + width: 100%;
  68 + height: 100%;
  69 + }
  70 +}
  71 +
  72 +.floor-ul {
  73 + li {
  74 + width: 100%;
  75 + height: 170px;
  76 + position: relative;
  77 + margin-bottom: 17px;
  78 + }
  79 +}
  80 +
  81 +.floor-ul {
  82 + li {
  83 + img {
  84 + width: 100%;
  85 + height: 100%;
  86 + }
  87 + }
  88 +}
  89 +
  90 +.floor-ul {
  91 + li {
  92 + p {
  93 + height: 45px;
  94 + line-height: 45px;
  95 + position: absolute;
  96 + bottom: 0;
  97 + left: 0;
  98 + right: 0;
  99 + color: #fff;
  100 + font-size: 18px;
  101 + overflow: hidden;
  102 + white-space: nowrap;
  103 + text-overflow: ellipsis;
  104 + -webkit-text-overflow: ellipsis;
  105 + padding: 0 25px;
  106 + }
  107 + }
  108 +}
  109 +
  110 +.floor-c {
  111 + background: #fff;
  112 + padding: 25px;
  113 + position: relative;
  114 +}
  115 +
  116 +.floor-c {
  117 + img {
  118 + width: 100%;
  119 + height: 100%;
  120 + }
  121 +}
  122 +
  123 +.floor-c {
  124 + p {
  125 + height: 45px;
  126 + line-height: 45px;
  127 + position: absolute;
  128 + bottom: 0;
  129 + left: 0;
  130 + right: 0;
  131 + color: #fff;
  132 + font-size: 18px;
  133 + overflow: hidden;
  134 + white-space: nowrap;
  135 + text-overflow: ellipsis;
  136 + -webkit-text-overflow: ellipsis;
  137 + margin: 0 40px 25px;
  138 + }
  139 +}
  140 +
  141 +.down {
  142 + width: 100%;
  143 + height: 265px;
  144 + position: relative;
  145 + display: block;
  146 +}
  147 +
  148 +.down {
  149 + img {
  150 + width: 100%;
  151 + position: absolute;
  152 + top: -10px;
  153 + left: 0;
  154 + right: 0;
  155 + }
  156 +}
  1 +@define-mixin relatedTitle {
  2 + margin: 0 29px;
  3 + background: #fff;
  4 + border: 1px solid #e0e0e0;
  5 + border-bottom: none;
  6 + line-height: 72px;
  7 + font-size: 30px;
  8 + color: #b0b0b0;
  9 + text-align: center;
  10 +}
  11 +
  12 +.guang-detail-page {
  13 + #wrapper {
  14 + background: #f0f0f0;
  15 + }
  16 +
  17 + #wrapper.ios {
  18 + position: absolute;
  19 + top: 0;
  20 + bottom: 0;
  21 + left: 0;
  22 + right: 0;
  23 + overflow: hidden;
  24 +
  25 + &.has-head {
  26 + top: 90px;
  27 +
  28 + + .fixed-top {
  29 + top: 90px;
  30 + }
  31 + }
  32 + }
  33 +
  34 + .author {
  35 + border-bottom: 1px solid #e0e0e0;
  36 + background: #fff;
  37 +
  38 + > a {
  39 + display: block;
  40 + height: 100%;
  41 + }
  42 +
  43 + .avatar {
  44 + float: left;
  45 + margin-top: 20px;
  46 + margin-left: 30px;
  47 + width: 50px;
  48 + height: 50px;
  49 + border-radius: 50%;
  50 + }
  51 +
  52 + .name {
  53 + float: left;
  54 + font-size: 28px;
  55 + color: #000;
  56 + padding: 30px 0;
  57 + margin-left: 30px;
  58 + }
  59 +
  60 + .intro {
  61 + float: left;
  62 + font-size: 28px;
  63 + color: #b0b0b0;
  64 + padding: 30px 0;
  65 + margin-left: 30px;
  66 + }
  67 + }
  68 +
  69 + .post-title {
  70 + padding: 16px 0 26px 30px;
  71 + background: #fff;
  72 +
  73 + .title {
  74 + line-height: 60px;
  75 + font-size: 40px;
  76 + color: #000;
  77 + font-weight: bold;
  78 + }
  79 + }
  80 +
  81 + .text-block {
  82 + padding: 20px 30px;
  83 + line-height: 46px;
  84 + font-size: 28px;
  85 + background: #fff;
  86 + color: #444;
  87 + word-break: break-word;
  88 + word-wrap: break-word;
  89 + }
  90 +
  91 + .big-img-block {
  92 + padding-bottom: 5px;
  93 + background: #fff;
  94 +
  95 + img {
  96 + width: 100%;
  97 + }
  98 + }
  99 +
  100 + .small-img-block {
  101 + padding-bottom: 8px;
  102 + background: #fff;
  103 +
  104 + img {
  105 + float: right;
  106 + width: 315px;
  107 + height: 420px;
  108 +
  109 + &:first-child {
  110 + float: left;
  111 + }
  112 + }
  113 + }
  114 +
  115 + .collocation-block {
  116 + background: #fff;
  117 +
  118 + .good-list {
  119 + padding-left:15px;
  120 + }
  121 + }
  122 +
  123 + .thumb-container {
  124 + padding-top: 30px;
  125 + padding-left: 20px;
  126 + background: transparent resolve('guang/thumb-container-bg.png') no-repeat;
  127 + background-size: 200% 100%;
  128 +
  129 + &.fixed-top {
  130 + position: fixed;
  131 + left: 0;
  132 + right: 0;
  133 + top: 0;
  134 + }
  135 +
  136 + &.fixed-bottom {
  137 + position: fixed;
  138 + left: 0;
  139 + right: 0;
  140 + bottom: 0;
  141 + background: rgba(255,255,255,0.9);
  142 + }
  143 +
  144 + &.absolute {
  145 + position: absolute;
  146 + left: 0;
  147 + right: 0;
  148 + }
  149 +
  150 + &.static {
  151 + position: static;
  152 + }
  153 +
  154 + &.hide {
  155 + display: none;
  156 + }
  157 + }
  158 +
  159 + .clothe-type {
  160 + position: absolute;
  161 + right: 6px;
  162 + bottom: 34px;
  163 + width: 20px;
  164 + height: 20px;
  165 + border-radius: 50%;
  166 +
  167 + &.bag {
  168 + background: url("/guang/clothes/bag.png");
  169 + background-color: #fff;
  170 + background-size: 100%;
  171 + }
  172 +
  173 + &.cloth {
  174 + background: url("/guang/clothes/cloth.png");
  175 + background-color: #fff;
  176 + background-size: 100%;
  177 + }
  178 +
  179 + &.dress {
  180 + background: url("/guang/clothes/dress.png");
  181 + background-color: #fff;
  182 + background-size: 100%;
  183 + }
  184 +
  185 + &.headset {
  186 + background: url("/guang/clothes/headset.png");
  187 + background-color: #fff;
  188 + background-size: 100%;
  189 + }
  190 +
  191 + &.lamp {
  192 + background: url("/guang/clothes/lamp.png");
  193 + background-color: #fff;
  194 + background-size: 100%;
  195 + }
  196 +
  197 + &.pants {
  198 + background: url("/guang/clothes/pants.png");
  199 + background-color: #fff;
  200 + background-size: 100%;
  201 + }
  202 +
  203 + &.shoe {
  204 + background: url("/guang/clothes/shoe.png");
  205 + background-color: #fff;
  206 + background-size: 100%;
  207 + }
  208 +
  209 + &.swim-suit {
  210 + background: url("/guang/clothes/swim-suit.png");
  211 + background-color: #fff;
  212 + background-size: 100%;
  213 + }
  214 +
  215 + &.under {
  216 + background: url("/guang/clothes/under.png");
  217 + background-color: #fff;
  218 + background-size: 100%;
  219 + }
  220 +
  221 + &.watch {
  222 + background: url("/guang/clothes/watch.png");
  223 + background-color: #fff;
  224 + background-size: 100%;
  225 + }
  226 + }
  227 +
  228 + .thumb {
  229 + display: inline-block;
  230 + position: relative;
  231 + margin-right: 22px;
  232 + padding-bottom: 30px;
  233 +
  234 + &:last-child {
  235 + margin-right: 0;
  236 + }
  237 +
  238 + &.focus .thumb-img {
  239 + border-color: #000;
  240 + }
  241 + }
  242 +
  243 + .thumb-img {
  244 + height: 134px;
  245 + width: 96px;
  246 + border: 1px solid transparent;
  247 + }
  248 +
  249 + .related-reco-block {
  250 + background: #fff;
  251 + padding-left: 15px;
  252 + border-top: 1px solid #e0e0e0;
  253 +
  254 + h2 {
  255 + margin-left: -15px;
  256 + line-height: 104px;
  257 + font-size: 30px;
  258 + color: #b0b0b0;
  259 + text-align: center;
  260 + }
  261 +
  262 + .one-good {
  263 + padding-left: 15px;
  264 + padding-right: 30px;
  265 + margin-bottom: 20px;
  266 +
  267 + .thumb {
  268 + float: left;
  269 + height: 134px;
  270 + width: 96px;
  271 + }
  272 +
  273 + .content-container {
  274 + padding-left: 120px;
  275 + height: 134px;
  276 + line-height: 1;
  277 + font-size: 24px;
  278 +
  279 + > p {
  280 + height: 50%;
  281 + line-height: 94px;
  282 + }
  283 +
  284 + span {
  285 + display: inline-block;
  286 + line-height: 24px;
  287 + }
  288 +
  289 + .price {
  290 + line-height: 47px;
  291 + }
  292 + }
  293 +
  294 + .sale-price {
  295 + color: #d62927;
  296 + line-height: 1.5;
  297 + }
  298 +
  299 + .sale-price.no-price {
  300 + color: #000;
  301 + }
  302 +
  303 + .market-price {
  304 + margin-left: 5px;
  305 + color: #b0b0b0;
  306 + text-decoration: line-through;
  307 + line-height: 1.5;
  308 + }
  309 +
  310 + .check-detail {
  311 + display: inline-block;
  312 + color: #000;
  313 + border: 1px solid;
  314 + border-radius: 2PX;
  315 + float: right;
  316 + padding: 0 5px;
  317 + line-height: 1.5;
  318 + }
  319 + }
  320 + }
  321 +
  322 + .link-block {
  323 + display: block;
  324 + height: 80px;
  325 + line-height: 80px;
  326 + padding: 0 30px;
  327 + font-size: 28px;
  328 + background: #fff;
  329 + border-top: 1px solid #e0e0e0;
  330 + border-bottom: 1px solid #e0e0e0;
  331 +
  332 + .iconfont {
  333 + float: right;
  334 + color: #ccc;
  335 + }
  336 + }
  337 +
  338 + .related-brand {
  339 + margin-top: 30px;
  340 +
  341 + h2 {
  342 + @mixin relatedTitle;
  343 + }
  344 +
  345 + .brand-list {
  346 + border-top: 1px solid #e0e0e0;
  347 + border-bottom: 1px solid #e0e0e0;
  348 + padding: 30px 0 30px;
  349 + background: #fff;
  350 + }
  351 +
  352 + .brand {
  353 + float: left;
  354 + width: 158px;
  355 + height: 128px;
  356 + border-right: 1px solid #e0e0e0;
  357 + margin-bottom: 10px;
  358 +
  359 + a {
  360 + display: block;
  361 + }
  362 +
  363 + &:nth-child(4n) {
  364 + border-right: none;
  365 + }
  366 + }
  367 +
  368 + .brand-logo {
  369 + display: table-cell;
  370 + width: 158px;
  371 + height: 94px;
  372 + vertical-align: middle;
  373 +
  374 + img {
  375 + display: block;
  376 + max-width: 158px;
  377 + max-height: 94px;
  378 + vertical-align: middle;
  379 + margin: 0 auto;
  380 + }
  381 + }
  382 +
  383 + .brand-name {
  384 + margin: 10px 0 0 0;
  385 + line-height: 24px;
  386 + font-size: 18px;
  387 + color: #babac2;
  388 + text-align: center;
  389 + text-decoration: none;
  390 + border-bottom: none;
  391 + overflow: hidden;
  392 + text-overflow: ellipsis;
  393 + white-space: nowrap;
  394 + }
  395 + }
  396 +
  397 + .related-tag {
  398 + position: relative;
  399 + padding-bottom: 30px;
  400 + border-bottom: 1px solid #e0e0e0;
  401 + background: #fff;
  402 +
  403 + .tag-bg {
  404 + position: absolute;
  405 + height: 40px;
  406 + width: 40px;
  407 + background: resolve('guang/tag.png') no-repeat;
  408 + background-size: 100% 100%;
  409 + top: 35px;
  410 + left: 20px;
  411 + }
  412 +
  413 + .tag-list {
  414 + margin-left: 50px;
  415 + }
  416 +
  417 + li {
  418 + float: left;
  419 + margin-top: 31px;
  420 + margin-left: 31px;
  421 + }
  422 +
  423 + a {
  424 + height: 50px;
  425 + line-height: 50px;
  426 + font-size: 30px;
  427 + color: #000;
  428 + text-decoration: underline;
  429 + white-space: nowrap;
  430 + }
  431 + }
  432 +
  433 + .related-info {
  434 + margin-top: 30px;
  435 +
  436 + h2 {
  437 + @mixin relatedTitle;
  438 + }
  439 +
  440 + .info-list {
  441 + background: #fff;
  442 + padding-bottom: 30px;
  443 + border-top: 1px solid #e0e0e0;
  444 + }
  445 +
  446 + li {
  447 + padding-top: 30px;
  448 + margin-bottom: 10px;
  449 +
  450 + a {
  451 + display: block;
  452 + }
  453 +
  454 + img {
  455 + float: left;
  456 + margin-left: 30px;
  457 + width: 182px;
  458 + height: 114px;
  459 +
  460 + &.square {
  461 + height: 182px;
  462 + }
  463 + }
  464 + }
  465 +
  466 + .title, .publish-time {
  467 + float: left;
  468 + width: 360px;
  469 + margin-left: 30px;
  470 + line-height: 40px;
  471 + color: #444;
  472 + font-size: 28px;
  473 +
  474 + }
  475 +
  476 + .publish-time {
  477 + font-size: 18px;
  478 + margin-top: 0;
  479 + color: #b0b0b0;
  480 +
  481 + .iconfont {
  482 + font-size: 18px;
  483 + }
  484 + }
  485 + }
  486 +}
1 @import "star/index"; 1 @import "star/index";
2 @import "plusstar/index"; 2 @import "plusstar/index";
  3 +@import "tvls";
  4 +@import "info";
  5 +@import "plus-star";
  6 +@import "info-list";
  7 +@import "detail";
  8 +@import "star-classroom";
  1 +.guang-list-page {
  2 + .editor-header {
  3 + margin-bottom: 30px;
  4 + padding-top: 36px;
  5 + padding-bottom: 40px;
  6 + background: #fff;
  7 + border-bottom: 1px solid #e0e0e0;
  8 + }
  9 +
  10 + .avatar {
  11 + float: left;
  12 + margin-left: 30px;
  13 + img {
  14 + width: 100px;
  15 + height: 100px;
  16 + border-radius: 50%;
  17 + }
  18 + }
  19 +
  20 + .text {
  21 + float: left;
  22 + margin-left: 32px;
  23 + width: 475px;
  24 + .name {
  25 + font-size: 32px;
  26 + line-height: 40px;
  27 + }
  28 + .info {
  29 + margin-top: 6px;
  30 + color: #bdbdbf;
  31 + font-size: 24px;
  32 + line-height: 32px;
  33 + }
  34 + }
  35 +
  36 + .swiper-container {
  37 + width: 100%;
  38 + height: 310px;
  39 +
  40 + img {
  41 + height: 100%;
  42 + width: 100%;
  43 + }
  44 +
  45 + .swiper-pagination {
  46 + bottom: 0;
  47 + left: 0;
  48 + width: 100%;
  49 + }
  50 +
  51 + .swiper-pagination-bullet-active {
  52 + background: #fff;
  53 + }
  54 + }
  55 +
  56 + .guang-nav {
  57 + background-color: #fff;
  58 + overflow: hidden;
  59 + height: 80px;
  60 + }
  61 +
  62 +
  63 + .guang-nav-item {
  64 + float: left;
  65 + color: #ccc;
  66 + font-size: 28px;
  67 + padding: 0 22px;
  68 + line-height: 80px;
  69 +
  70 + &.focus {
  71 + color: #000;
  72 + }
  73 + }
  74 +
  75 + .bytouch{
  76 + background:#eee;
  77 + }
  78 +
  79 + .info-list-container {
  80 + overflow-x: hidden;
  81 + background: #f0f0f0;
  82 + }
  83 +
  84 + .info-list.hide {
  85 + display: none;
  86 + }
  87 +}
  1 +.guang-info {
  2 + margin-bottom: 30px;
  3 + padding: 0 0 24px 0;
  4 + border-top: 1px solid #e0e0e0;
  5 + border-bottom: 1px solid #e0e0e0;
  6 + background: #fff;
  7 +
  8 + .info-author {
  9 + display: block;
  10 + width: 100%;
  11 +
  12 + .avatar {
  13 + float: left;
  14 + margin-top: 20px;
  15 + width: 50px;
  16 + height: 50px;
  17 + margin-left: 30px;
  18 + border-radius: 50%;
  19 + }
  20 +
  21 + .name {
  22 + float: left;
  23 + margin-left: 30px;
  24 + padding: 30px 0;
  25 + font-size: 28px;
  26 + color: #000;
  27 + }
  28 + }
  29 +
  30 + &:last-child {
  31 + margin-bottom: 0;
  32 + }
  33 +
  34 + .info-img {
  35 + position: relative;
  36 + width: 100%;
  37 +
  38 + img {
  39 + display: block;
  40 + width: 100%;
  41 + }
  42 + }
  43 +
  44 + .info-match {
  45 + position: absolute;
  46 + top: 0;
  47 + left: 0;
  48 + width: 130px;
  49 + height: 50px;
  50 + line-height: 50px;
  51 + font-size: 28px;
  52 + color: #fff;
  53 + background: #000;
  54 + text-align: center;
  55 + text-decoration: none;
  56 + z-index: 1;
  57 + }
  58 +
  59 + .info-tag {
  60 + position: absolute;
  61 + top: 0;
  62 + left: 105px;
  63 + height: 50px;
  64 + width: 50px;
  65 +
  66 + &.collocation {
  67 + background-image: url('/guang/info/collocation.png');
  68 + }
  69 +
  70 + &.fashion-good {
  71 + background-image: url('/guang/info/fashion-good.png');
  72 + }
  73 +
  74 + &.fashion-man {
  75 + background-image: url('/guang/info/fashion-man.png');
  76 + }
  77 +
  78 + &.tip, &.special-topic {
  79 + background-image: url('/guang/info/tip.png');
  80 + }
  81 +
  82 + &.topic {
  83 + background-image: url('/guang/info/topic.png');
  84 + }
  85 + }
  86 +
  87 + .info-deps {
  88 + margin: 32px 0 0 0;
  89 + padding: 0 40px 0 30px;
  90 +
  91 + .info-title-container {
  92 + text-decoration: none;
  93 + color: #000;
  94 + }
  95 +
  96 + .info-title{
  97 + line-height: 44px;
  98 + color: #000;
  99 + font-size: 40px;
  100 + font-weight:bold;
  101 +
  102 + }
  103 +
  104 + .info-text {
  105 + margin: 16px 0 0 0;
  106 + line-height: 46px;
  107 + font-size: 28px;
  108 + color: #444;
  109 + }
  110 +
  111 + .time-view-like-share {
  112 + margin-top: 16px;
  113 + }
  114 + }
  115 +}
  1 +.ps-list-page {
  2 + background-color: #f0f0f0;
  3 +
  4 + .nav-tab, .ps-content {
  5 + width: 100%;
  6 + }
  7 +
  8 + .nav-tab {
  9 + height: 60px;
  10 + padding: 10px 0;
  11 + background-color: #fff;
  12 + }
  13 +
  14 + .star-nav, .plus-nav {
  15 + box-sizing: border-box;
  16 + float: left;
  17 + width: 50%;
  18 + height: 60px;
  19 + line-height: 60px;
  20 + font-size: 16PX;
  21 + text-align: center;
  22 + color: #ccc;
  23 +
  24 + &.focus {
  25 + color: #000;
  26 + }
  27 + }
  28 + .bytouch{
  29 + background:#eee;
  30 + }
  31 + .star-nav {
  32 + border-right: 1px solid #ccc;
  33 + }
  34 +
  35 + .plus-star-row {
  36 + margin-bottom: 30px;
  37 +
  38 + &:last-child {
  39 + margin-bottom: 0;
  40 + }
  41 +
  42 + > a {
  43 + display: block;
  44 + height: 310px;
  45 + > img {
  46 + width: 100%;
  47 + height: 100%;
  48 + }
  49 + }
  50 + }
  51 +
  52 + .content.hide {
  53 + display: none;
  54 + }
  55 +
  56 + .swiper-container {
  57 + height: 310px;
  58 + }
  59 +
  60 + .swiper-pagination-bullet-active {
  61 + background: #fff;
  62 + }
  63 +
  64 + .brand-deps {
  65 + height: 40PX;
  66 + line-height: 40PX;
  67 + padding-left: 10PX;
  68 + font-size: 14PX;
  69 + background: #fff;
  70 + max-width: 100%;
  71 + overflow: hidden;
  72 + white-space: nowrap;
  73 + text-overflow: ellipsis;
  74 + }
  75 +}
  76 +
  77 +.ps-detail-page {
  78 + background-color: #f0f0f0;
  79 +
  80 + .ps-block {
  81 + margin-bottom: 30px;
  82 + border-bottom: 1px solid #e0e0e0;
  83 + border-top: 1px solid #e0e0e0;
  84 + background-color: #fff;
  85 +
  86 + &.header, &.related-infos {
  87 + border-top: none;
  88 + }
  89 +
  90 + &.related-infos {
  91 + margin-bottom: 0;
  92 + background-color: #f0f0f0;
  93 + }
  94 + }
  95 +
  96 + .header {
  97 + position: relative;
  98 +
  99 + .banner {
  100 + width: 100%;
  101 + height: 310px;
  102 + }
  103 +
  104 + .logo {
  105 + position: absolute;
  106 + border: 1px solid #b5b5b5;
  107 + height: 168px;
  108 + width: 168px;
  109 + top: 226px;
  110 + left: 50px;
  111 + }
  112 +
  113 + .header-content {
  114 + padding: 0 30px;
  115 + }
  116 +
  117 + .name-islike-container {
  118 + padding-left: 248px;
  119 + margin-top: 24px;
  120 + font-size: 34px;
  121 + }
  122 +
  123 + .name {
  124 + color: #000;
  125 + height: 41px;
  126 + width: 295px;
  127 + }
  128 +
  129 + .brand-islike {
  130 + position: relative;
  131 + float: right;
  132 + color: #b0b0b0;
  133 + height: 1.5rem;
  134 + width: 1.5rem;
  135 + line-height: 1.5rem;
  136 + text-align: center;
  137 + top: -0.25rem;
  138 + left: -0.25rem;
  139 +
  140 + &.like {
  141 + color: #f00;
  142 + }
  143 + }
  144 + }
  145 +
  146 + .intro {
  147 + margin-top: 49px;
  148 + font-size: 24px;
  149 + color: #444;
  150 + line-height: 150%;
  151 + }
  152 +
  153 + .more-intro {
  154 + padding: 30px 0;
  155 + font-size: 28px;
  156 + line-height: 104%;
  157 + color: #bbb;
  158 + float: right;
  159 +
  160 + .icon {
  161 + display: inline-block;
  162 + height: 100%;
  163 + width: 40px;
  164 + transition: transform .1s ease-in;
  165 + }
  166 +
  167 + &.spread .icon {
  168 + transform: rotate(-180deg);
  169 + }
  170 + }
  171 +
  172 + .new-arrival {
  173 + padding-left: 0 30px;
  174 +
  175 + .new-arrival-content {
  176 + padding: 0 0 20px 0;
  177 + width: 614px;
  178 + margin: 0 auto;
  179 + }
  180 +
  181 + .more-goods-container {
  182 + height: 90px;
  183 + padding: 0 30px;
  184 + border-top: 1px solid #e0e0e0;
  185 + color: #000;
  186 + }
  187 +
  188 + .floor-header-more {
  189 + border-top: none;
  190 + line-height: 40px;
  191 + height: auto;
  192 +
  193 + a {
  194 + width: 100%;
  195 + text-align: right;
  196 + }
  197 + }
  198 +
  199 + .mg-text {
  200 + height: 100%;
  201 + line-height: 90px;
  202 + color: #000;
  203 + text-decoration: none;
  204 + display: block;
  205 + font-size: 28px;
  206 + }
  207 +
  208 + .more-prods {
  209 + float: right;
  210 + color: #b0b0b0;
  211 + }
  212 +
  213 + .new-arrival-header .more-prods {
  214 + margin-right: 30px;
  215 + margin-top: 10px;
  216 + }
  217 +
  218 + }
  219 +
  220 + .new-arrival-header {
  221 + padding-left: 222px;
  222 + padding-top: 33px;
  223 +
  224 + .header-text {
  225 + font-size: 28px;
  226 + color: #000;
  227 + line-height: 122%;
  228 + font-weight: bold;
  229 + }
  230 + }
  231 +
  232 +
  233 + .related-info-title {
  234 + margin: 0 29px;
  235 + border: 1px solid #e0e0e0;
  236 + border-bottom: none;
  237 + line-height: 72px;
  238 + font-size: 30px;
  239 + color: #b0b0b0;
  240 + text-align: center;
  241 + background-color: #fff;
  242 + }
  243 +
  244 + .related-infos-container .guang-info:first-child {
  245 + margin-top: 0;
  246 + }
  247 +}
  1 +.yoho-header .nav-title {
  2 + font-weight: normal;
  3 +}
  4 +
  5 +.star-class-body {
  6 + background: #333;
  7 + width: 100%;
  8 + font: 12px/1.5 Arial,'黑体';
  9 + float: left;
  10 +}
  11 +
  12 +.star-classroom {
  13 + background: #333;
  14 +
  15 + img {
  16 + max-width: 100%;
  17 + display: block;
  18 + border: 0;
  19 + margin: 0 auto;
  20 + }
  21 +
  22 + a {
  23 + text-decoration: none;
  24 + outline: none;
  25 + color: #000;
  26 +
  27 + &:link,
  28 + &:visited,
  29 + &:hover,
  30 + &:actived {
  31 + color: #000;
  32 + }
  33 + }
  34 +
  35 + *:focus {
  36 + outline: none;
  37 + }
  38 +
  39 + .font-bold {
  40 + font-weight: bold;
  41 + }
  42 +
  43 + .classroom-mask {
  44 + background-color: rgba(0,0,0,.5);
  45 + position: fixed;
  46 + left: 0;
  47 + right: 0;
  48 + top: 0;
  49 + bottom: 0;
  50 + z-index: -1;
  51 + display: none;
  52 + }
  53 +
  54 + .head-tab {
  55 + width: 100%;
  56 + height: 88px;
  57 + background: #000;
  58 +
  59 + li {
  60 + width: 33.3%;
  61 + text-align: center;
  62 + float: left;
  63 + line-height: 88px;
  64 + font-size: 30px;
  65 +
  66 + a {
  67 + color: #b0b0b0;
  68 + display: inline-block;
  69 + }
  70 +
  71 + &.cur a{
  72 + color: #fff;
  73 + }
  74 + }
  75 + }
  76 +
  77 + .banner-top {
  78 + width: 100%;
  79 + height: 310px;
  80 + margin-top: 30px;
  81 + position: relative;
  82 +
  83 + .banner-swiper {
  84 + width: 100%;
  85 + height: 310px;
  86 + overflow: hidden;
  87 + position: relative;
  88 +
  89 + ul {
  90 + position: relative;
  91 + height: 310px;
  92 +
  93 + li {
  94 + float: left;
  95 + width: 100%;
  96 + height: 310px;
  97 + }
  98 +
  99 + img {
  100 + width: 100%;
  101 + height: 100%;
  102 + }
  103 + }
  104 + }
  105 +
  106 + .swiper-pagination {
  107 + position: absolute;
  108 + left: 0;
  109 + right: 0;
  110 + bottom: 20px;
  111 + text-align: center;
  112 + z-index: 1;
  113 +
  114 + .pagination-inner {
  115 + display: inline-block;
  116 + }
  117 +
  118 + span {
  119 + display: inline-block;
  120 + width: 14px;
  121 + height: 14px;
  122 + background: #fff;
  123 + opacity: 0.5;
  124 + margin: 0 10px;
  125 + border-radius: 50%;
  126 + }
  127 +
  128 + .swiper-pagination-bullet-active {
  129 + background: #fff;
  130 + opacity: 1;
  131 + }
  132 + }
  133 + }
  134 +
  135 + .home-floor-sign {
  136 + width: 100%;
  137 + height: 220px;
  138 + margin-top: 30px;
  139 + background: #000;
  140 +
  141 + .nav-left {
  142 + width: 102px;
  143 + margin: 30px 0 0 30px;
  144 + text-align: center;
  145 + float: left;
  146 +
  147 + .user-name {
  148 + font-size: 24px;
  149 + color: #fff;
  150 + margin-top: 30px;
  151 + white-space: nowrap;
  152 + }
  153 + }
  154 +
  155 + .nav-main {
  156 + width: 252px;
  157 + height: 90px;
  158 + float: left;
  159 + background-image: resolve("guang/star-classroom/user_info_bg.png");
  160 + background-repeat: no-repeat;
  161 + background-size: contain;
  162 + margin:36px 0 0 10px;
  163 +
  164 + p {
  165 + color: #fff;
  166 + line-height: 46px;
  167 + font-size: 24px;
  168 + margin-left: 30px;
  169 + white-space: nowrap;
  170 + }
  171 + }
  172 +
  173 + .nav-right {
  174 + width: 195px;
  175 + text-align: center;
  176 + float: right;
  177 +
  178 + .wyf-img {
  179 + width: 119px;
  180 + height: 108px;
  181 + margin-top: 30px;
  182 + background-image: resolve("guang/star-classroom/home-wyf.png");
  183 + background-repeat: no-repeat;
  184 + background-size: contain;
  185 + display: inline-block;
  186 + }
  187 +
  188 + .add-intimacy {
  189 + width: 131px;
  190 + height: 52px;
  191 + background-image: resolve("guang/star-classroom/add_intimacy_bg.png");
  192 + background-repeat: no-repeat;
  193 + background-size: contain;
  194 + color: #fff;
  195 + font-size: 22px;
  196 + display: inline-block;
  197 + white-space: nowrap;
  198 + line-height: 66px;
  199 + margin-left: 12px;
  200 + }
  201 + }
  202 +
  203 + .user-head {
  204 + width: 100px;
  205 + height: 100px;
  206 + border-radius: 50%;
  207 + border: 2px solid #e0e0e0;
  208 + background-image: resolve("me/index/user-avatar.png");
  209 + background-repeat: no-repeat;
  210 + background-size: contain;
  211 + display: block;
  212 + }
  213 + }
  214 +
  215 + .floor-header-more {
  216 + width: 100%;
  217 + height: 88px;
  218 + background: #000;
  219 + position: relative;
  220 + margin-top: 30px;
  221 + border-top: 1px solid #000;
  222 +
  223 + h2 {
  224 + color: #fff;
  225 + font-size: 34px;
  226 + line-height: 88px;
  227 + text-align: center;
  228 + }
  229 +
  230 + .more-btn {
  231 + width: 64px;
  232 + height: 96px;
  233 + line-height: 86px;
  234 + position: absolute;
  235 + right: 20px;
  236 + top: 0;
  237 + color: #b0b0b0;
  238 + font-size: 50px;
  239 + }
  240 + }
  241 +
  242 + .home-floor-subject {
  243 + .subject-banner {
  244 + width: 100%;
  245 + height: 310px;
  246 + }
  247 + }
  248 +
  249 + .subject-video-area {
  250 + width: 100%;
  251 + height: 310px;
  252 + margin-top: 30px;
  253 + background: #000;
  254 +
  255 + #subject-video {
  256 + width: 100%;
  257 + height: 310px;
  258 + }
  259 + }
  260 +
  261 + .home-floor-collocation {
  262 + background: #000;
  263 + padding-bottom: 60px;
  264 +
  265 + .collocation-big-img {
  266 + width: 100%;
  267 + height: 277px;
  268 + padding: 0 14px;
  269 + box-sizing: border-box;
  270 +
  271 + li {
  272 + width: 276px;
  273 + height: 277px;
  274 + margin: 0 15px;
  275 + float: left;
  276 + }
  277 +
  278 + img {
  279 + height: 100%;
  280 + }
  281 + }
  282 +
  283 + .collocation-img {
  284 + width: 100%;
  285 + height: 139px;
  286 + margin-top: 30px;
  287 + position: relative;
  288 +
  289 + .collocation-swiper {
  290 + width: 100%;
  291 + height: 139px;
  292 + overflow: hidden;
  293 + position: relative;
  294 + }
  295 +
  296 + ul {
  297 + position: relative;
  298 + height: 139px;
  299 + }
  300 +
  301 + li {
  302 + float: left;
  303 + width: 229px;
  304 + height: 139px;
  305 + margin-left: 30px;
  306 + }
  307 +
  308 + img {
  309 + width: 100%;
  310 + height: 100%;
  311 + }
  312 + }
  313 + }
  314 +
  315 + .pop-intimacy {
  316 + width: 580px;
  317 + height: 920px;
  318 + background: #fff;
  319 + border-radius: 10px;
  320 + position: fixed;
  321 + top:20px;
  322 + left: 30px;
  323 + z-index: -1;
  324 + display: none;
  325 +
  326 + .intimacy-head {
  327 + text-align: center;
  328 + color: #444;
  329 + height: 140px;
  330 + padding-top: 20px;
  331 + box-sizing: border-box;
  332 + position: relative;
  333 +
  334 + .pop-close {
  335 + width: 25px;
  336 + height: 25px;
  337 + background-image: resolve("guang/star-classroom/pop-close.png");
  338 + background-repeat: no-repeat;
  339 + background-size: contain;
  340 + position: absolute;
  341 + right: 20px;
  342 + top: 24px;
  343 + }
  344 +
  345 + h1 {
  346 + font-size: 56px;
  347 + font-weight: bold;
  348 + line-height: 40px;
  349 + }
  350 +
  351 + h4 {
  352 + font-size: 24px;
  353 + }
  354 + }
  355 +
  356 + .my-intimacy {
  357 + font-size: 24px;
  358 +
  359 + span {
  360 + min-width: 10px;
  361 + height: 30px;
  362 + line-height: 30px;
  363 + border-radius: 30px;
  364 + font-size: 20px;
  365 + color: #fff;
  366 + padding: 0 10px;
  367 + margin-left: 14px;
  368 + background-color: #444;
  369 + }
  370 + }
  371 +
  372 + .increased {
  373 + font-size: 24px;
  374 + display: none;
  375 +
  376 + span {
  377 + color: red;
  378 + }
  379 + }
  380 +
  381 + .calendar {
  382 + width: 100%;
  383 + float: left;
  384 + }
  385 +
  386 + .week {
  387 + width: 100%;
  388 + height: 38px;
  389 + background: #aeaeae;
  390 + padding: 0 23px;
  391 + box-sizing: border-box;
  392 +
  393 + h3 {
  394 + width: 76px;
  395 + text-align: center;
  396 + font-size: 24px;
  397 + color: #fff;
  398 + float: left;
  399 + line-height: 38px;
  400 + }
  401 + }
  402 +
  403 + .day-item {
  404 + float: left;
  405 + width: 100%;
  406 + padding: 5px 23px;
  407 + box-sizing: border-box;
  408 +
  409 + .item {
  410 + width: 76px;
  411 + color: #444;
  412 + float: left;
  413 + text-align: center;
  414 + cursor: pointer;
  415 + margin: 5px 0 0 0;
  416 + height: 56px;
  417 + line-height: 56px;
  418 + font-size: 28px;
  419 + }
  420 +
  421 + .last-item {
  422 + color: #D2D2D2;
  423 + }
  424 +
  425 + .sign-item {
  426 + background-image: resolve("guang/star-classroom/sign-circle.png");
  427 + background-position: center;
  428 + background-repeat: no-repeat;
  429 + background-size: contain;
  430 + }
  431 + }
  432 +
  433 + .fan-charts {
  434 + width: 100%;
  435 + height: 88px;
  436 + border-top: 1px solid #d5d5d5;
  437 + text-align: center;
  438 + position: relative;
  439 + float: left;
  440 +
  441 + h2 {
  442 + font-size: 28px;
  443 + color: #444;
  444 + line-height: 88px;
  445 + }
  446 +
  447 + .arrow {
  448 + width: 88px;
  449 + height: 88px;
  450 + position: absolute;
  451 + top: 0;
  452 + right: 0;
  453 + color: #b0b0b0;
  454 + line-height: 88px;
  455 + }
  456 + }
  457 + }
  458 +
  459 + .fan-charts-cont {
  460 + width: 100%;
  461 + line-height: 88px;
  462 + float: left;
  463 +
  464 + li {
  465 + width: 100%;
  466 + height: 88px;
  467 + border-top: 1px solid #d5d5d5;
  468 + position: relative;
  469 + padding: 0 25px;
  470 + box-sizing: border-box;
  471 + }
  472 +
  473 + .rank-ico {
  474 + width: 52px;
  475 + height: 39px;
  476 + border-radius: 0;
  477 + background-image: resolve("guang/star-classroom/king-ico.png");
  478 + background-color: #fff;
  479 + background-repeat: no-repeat;
  480 + background-size: contain;
  481 + color: #fff;
  482 + font-size: 24px;
  483 + text-align: center;
  484 + line-height: 50px;
  485 + font-weight: bold;
  486 + position: relative;
  487 + top: 25px;
  488 + }
  489 +
  490 + .rank-avatar {
  491 + width: 60px;
  492 + height: 60px;
  493 + border-radius: 50%;
  494 + position: relative;
  495 + top: 15px;
  496 + margin-left: 20px;
  497 + background-image: resolve("me/index/user-avatar.png");
  498 + background-repeat: no-repeat;
  499 + background-size: contain;
  500 + display: block;
  501 + }
  502 +
  503 + .fans-name {
  504 + margin-left: 24px;
  505 + font-size: 24px;
  506 + color: #444;
  507 + width: 180px;
  508 + white-space: nowrap;
  509 + text-overflow: ellipsis;
  510 + overflow: hidden;
  511 + height: 88px;
  512 + }
  513 +
  514 + .fans-intimacy {
  515 + width: 150px;
  516 + float: right;
  517 + font-size: 20px;
  518 + color: #444;
  519 +
  520 + span {
  521 + font-size: 24px;
  522 + color: #d0021b;
  523 + margin-left: 5px;
  524 + }
  525 + }
  526 +
  527 + li > * {
  528 + float: left;
  529 + }
  530 + }
  531 +
  532 + .things-article {
  533 + width: 100%;
  534 + float: left;
  535 + }
  536 +
  537 + .things-article > li {
  538 + width: 100%;
  539 + float: left;
  540 + padding: 0 0 30px 30px;
  541 + box-sizing: border-box;
  542 + background: #000;
  543 +
  544 + .author-info {
  545 + width: 100%;
  546 + padding-top: 30px;
  547 + float: left;
  548 + border-top:1px solid #b0b0b0;
  549 +
  550 + img {
  551 + width: 70px;
  552 + height: 70px;
  553 + border-radius: 50%;
  554 + float: left;
  555 + }
  556 + }
  557 +
  558 + .author-nav {
  559 + float: left;
  560 + margin-left: 20px;
  561 + overflow: hidden;
  562 +
  563 + h2 {
  564 + font-size: 28px;
  565 + color: #fff;
  566 + }
  567 + }
  568 +
  569 + .article-count {
  570 + font-size: 24px;
  571 + color: #b0b0b0;
  572 +
  573 + span {
  574 + margin-right:22px;
  575 + }
  576 +
  577 + .see-ico {
  578 + width: 31px;
  579 + height: 24px;
  580 + padding-left: 40px;
  581 + }
  582 + }
  583 +
  584 + .artice-cont {
  585 + width: 100%;
  586 + margin-top: 30px;
  587 + float: left;
  588 +
  589 + p {
  590 + width: 100%;
  591 + height: 180px;
  592 + font-size: 28px;
  593 + line-height: 46px;
  594 + padding-right: 30px;
  595 + color: #fff;
  596 + box-sizing: border-box;
  597 + overflow: hidden;
  598 + text-overflow: ellipsis;
  599 + display: -webkit-box;
  600 + -webkit-line-clamp: 4;
  601 + -webkit-box-orient: vertical;
  602 + }
  603 + }
  604 +
  605 + .artice-imgs {
  606 + width: 100%;
  607 + margin-top: 30px;
  608 + float: left;
  609 + }
  610 +
  611 + .artice-imgs > li {
  612 + float: left;
  613 + width: 190px;
  614 + height: 190px;
  615 + margin-right: 5px;
  616 +
  617 + img {
  618 + width: 100%;
  619 + height: 100%;
  620 + border-radius: 4px;
  621 + }
  622 + }
  623 + }
  624 +
  625 + .artice-zan {
  626 + width: 100%;
  627 + border-top: 1px solid #b0b0b0;
  628 + margin-top: 27px;
  629 + float: left;
  630 + padding-top: 20px;
  631 +
  632 + .iconfont {
  633 + float: left;
  634 + width: 34px;
  635 + height: 34px;
  636 + line-height: 34px;
  637 + display: inline-block;
  638 + color: #b0b0b0;
  639 + font-size: 34px;
  640 + text-align: center;
  641 + margin: 9px 53px 0 14px;
  642 + outline: none;
  643 + }
  644 +
  645 + .like {
  646 + color: #D62927;
  647 + }
  648 +
  649 + ul {
  650 + float: left;
  651 + width: 420px;
  652 + height: 50px;
  653 + overflow: hidden;
  654 + }
  655 +
  656 + li {
  657 + float: left;
  658 + margin: 0 10px;
  659 + width: 50px;
  660 + height: 50px;
  661 +
  662 + img {
  663 + width: 100%;
  664 + height: 100%;
  665 + border-radius: 50%;
  666 + }
  667 + }
  668 +
  669 + .zan-more {
  670 + float: left;
  671 + width: 50px;
  672 + height: 50px;
  673 + border-radius: 50%;
  674 + margin: 0 10px;
  675 + background: #f0f0f0;
  676 + color: #acb1b7;
  677 + font-size: 24px;
  678 + text-align: center;
  679 + line-height: 50px;
  680 + /*display: none;*/
  681 + }
  682 + }
  683 +
  684 + .subject-list {
  685 + width: 100%;
  686 + height: auto;
  687 + overflow: hidden;
  688 +
  689 + li {
  690 + width: 100%;
  691 + float: left;
  692 + background: #000;
  693 + margin-top: 30px;
  694 +
  695 + img {
  696 + width: 100%;
  697 + }
  698 +
  699 + p {
  700 + width: 100%;
  701 + height: 88px;
  702 + box-sizing: border-box;
  703 + overflow: hidden;
  704 + white-space: nowrap;
  705 + text-overflow: ellipsis;
  706 + padding: 0 34px;
  707 + font-size: 34px;
  708 + line-height: 88px;
  709 + }
  710 +
  711 + a {
  712 + color: #fff;
  713 + }
  714 + }
  715 + }
  716 +
  717 + .collocation-list {
  718 + width: 100%;
  719 + float: left;
  720 +
  721 + li {
  722 + float: left;
  723 + width: 100%;
  724 + margin-top: 30px;
  725 + background: #000;
  726 +
  727 + .cont-area {
  728 + width: 100%;
  729 + box-sizing: border-box;
  730 + padding: 30px;
  731 + }
  732 +
  733 + .cont-txt {
  734 + font-size: 28px;
  735 + line-height: 46px;
  736 + color: #b0b0b0;
  737 + margin-top: 10px;
  738 + }
  739 +
  740 + img {
  741 + width: 100%;
  742 + }
  743 +
  744 + .title {
  745 + font-size: 40px;
  746 + line-height: 48px;
  747 + color: #fff;
  748 + width: 100%;
  749 + }
  750 + }
  751 + }
  752 +
  753 + .count-area {
  754 + position: relative;
  755 + width: 100%;
  756 + height: 32px;
  757 +
  758 + span {
  759 + font-size: 24px;
  760 + color: #b0b0b0;
  761 + height: 32px;
  762 + line-height: 32px;
  763 +
  764 + i {
  765 + display: inline-block;
  766 + margin-right: 5px;
  767 + font-size: 24px;
  768 + }
  769 + }
  770 +
  771 + .time {
  772 + float: left;
  773 + }
  774 +
  775 + .see {
  776 + float: left;
  777 + margin-left: 20px;
  778 + }
  779 +
  780 + .time-ico {
  781 + width: 24px;
  782 + height: 24px;
  783 + }
  784 +
  785 + .see-ico {
  786 + width: 31px;
  787 + height: 24px;
  788 + }
  789 +
  790 + .collection {
  791 + position: absolute;
  792 + right: 122px;
  793 + }
  794 +
  795 + .collected-ico {
  796 + width: 34px;
  797 + height: 32px;
  798 + vertical-align: text-bottom;
  799 + }
  800 +
  801 + .collected {
  802 + color: #D62927;
  803 + }
  804 +
  805 + .forward {
  806 + width: 40px;
  807 + height: 28px;
  808 + position: absolute;
  809 + right: 23px;
  810 + margin-left: 45px;
  811 + font-size: 24px;
  812 + color: #b0b0b0;
  813 + height: 32px;
  814 + line-height: 32px;
  815 + }
  816 + }
  817 +
  818 + .things-list {
  819 + .things-article > li {
  820 + margin-top: 30px;
  821 +
  822 + .author-info {
  823 + border-top: none;
  824 + }
  825 + }
  826 + }
  827 +
  828 + .check-in {
  829 + background: #f0f0f0;
  830 +
  831 + .check-in-header {
  832 + width: 100%;
  833 + height: 283px;
  834 + background-image: resolve("guang/star-classroom/checkIn-bg.jpg");
  835 + background-repeat: no-repeat;
  836 + background-size: contain;
  837 + }
  838 +
  839 + .head-cont {
  840 + text-align: center;
  841 + padding-top: 30px;
  842 + height: 195px;
  843 + box-sizing: border-box;
  844 +
  845 + .user-avatar {
  846 + width: 100px;
  847 + height: 100px;
  848 + border-radius: 50%;
  849 + border:4px solid;
  850 + border-color: rgba(255,255,255,.6);
  851 + background-image: resolve("me/index/user-avatar.png");
  852 + background-repeat: no-repeat;
  853 + background-origin: border-box;
  854 + background-size: contain;
  855 + display: inline-block;
  856 + }
  857 +
  858 + .user-name {
  859 + color: #fff;
  860 + font-size: 24px;
  861 + font-weight: bold;
  862 + margin-top: 7px;
  863 + }
  864 + }
  865 +
  866 + .count-area {
  867 + width: 100%;
  868 + float: left;
  869 + }
  870 +
  871 + .count-nav {
  872 + width: 319px;
  873 + float: left;
  874 + margin-top: 12px;
  875 +
  876 + p {
  877 + width: 100%;
  878 + text-align: center;
  879 + color: #fff;
  880 + line-height: 32px;
  881 + font-size: 22px;
  882 + }
  883 + }
  884 +
  885 + .line {
  886 + width: 2px;
  887 + height: 46px;
  888 + float: left;
  889 + margin-top: 26px;
  890 + box-sizing: border-box;
  891 + border-left: 1px solid #fff;
  892 + }
  893 +
  894 + .ranking-area {
  895 + width: 100%;
  896 + background: #fff;
  897 + border-top: 1px solid #e0e0e0;
  898 + margin-top: 30px;
  899 + padding-left: 30px;
  900 + box-sizing: border-box;
  901 +
  902 + li {
  903 + width: 100%;
  904 + height: 120px;
  905 + padding-top: 20px;
  906 + box-sizing: border-box;
  907 + border-bottom: 1px solid #e0e0e0;
  908 + }
  909 +
  910 + .rank-avatar {
  911 + width: 80px;
  912 + height: 80px;
  913 + border-radius: 50%;
  914 + background-image: resolve("me/index/user-avatar.png");
  915 + background-repeat: no-repeat;
  916 + background-size: contain;
  917 + float: left;
  918 + }
  919 +
  920 + .ranking-mid {
  921 + float: left;
  922 + margin-left: 20px;
  923 + }
  924 +
  925 + .rank-ico {
  926 + min-width: 18px;
  927 + height: 38px;
  928 + border-radius: 38px;
  929 + background: #444;
  930 + display: inline-block;
  931 + text-align: center;
  932 + line-height: 40px;
  933 + color: #fff;
  934 + font-size: 24px;
  935 + font-weight: bold;
  936 + padding: 0 10px;
  937 + }
  938 +
  939 + .rank-name {
  940 + font-size: 24px;
  941 + color: #444;
  942 + margin-top: 5px;
  943 + width: 260px;
  944 + white-space: nowrap;
  945 + text-overflow: ellipsis;
  946 + overflow: hidden;
  947 + height: 38px;
  948 + line-height: 38px;
  949 + }
  950 +
  951 + .ranking-rg {
  952 + font-size: 20px;
  953 + color: #444;
  954 + float: right;
  955 + margin:20px 30px 0 0;
  956 + }
  957 +
  958 + .intimacy {
  959 + margin-left: 10px;
  960 + font-size: 36px;
  961 + color: #b0b0b0;
  962 + }
  963 + }
  964 +
  965 + .high-light {
  966 + .rank-ico {
  967 + width: 52px;
  968 + height: 39px;
  969 + line-height: 50px;
  970 + border-radius: 0;
  971 + background-image: resolve("guang/star-classroom/king-ico.png");
  972 + background-color: #fff;
  973 + background-repeat: no-repeat;
  974 + background-size: contain;
  975 + padding: 0;
  976 + }
  977 +
  978 + .intimacy {
  979 + color: #d0021b;
  980 + }
  981 + }
  982 + }
  983 +}
  984 +
  985 +
  986 +@media screen and (max-height: 480px){
  987 + .star-classroom {
  988 + .pop-intimacy {
  989 + height: 796px;
  990 +
  991 + .day-item .item {
  992 + height: 50px;
  993 + line-height: 50px;
  994 + margin-top: 0;
  995 + }
  996 +
  997 + .fan-charts {
  998 + height: 76px;
  999 +
  1000 + h2 {
  1001 + line-height: 76px;
  1002 + }
  1003 +
  1004 + .arrow {
  1005 + height: 76px;
  1006 + line-height: 76px;
  1007 + }
  1008 + }
  1009 +
  1010 + .intimacy-head h1{
  1011 + font-size: 50px;
  1012 + }
  1013 + }
  1014 +
  1015 + .fan-charts-cont {
  1016 + line-height: 76px;
  1017 +
  1018 + .rank-ico {
  1019 + top: 17px;
  1020 + }
  1021 +
  1022 + .rank-avatar {
  1023 + top: 7px;
  1024 + }
  1025 +
  1026 + .fans-name {
  1027 + height: 76px;
  1028 + }
  1029 +
  1030 + li {
  1031 + height: 76px;
  1032 + }
  1033 + }
  1034 + }
  1035 +}
  1 +.time-view-like-share {
  2 + color: #b0b0b0;
  3 + line-height: 38px;
  4 + height: 38px;
  5 + font-size: 24px;
  6 +
  7 + .iconfont {
  8 + vertical-align: 9%;
  9 + margin-right: 4px;
  10 + font-size: 24px;
  11 + }
  12 +
  13 + .like-share-container {
  14 + display: inline-block;
  15 + float: right;
  16 +
  17 + > * {
  18 + float: left;
  19 + }
  20 +
  21 + .iconfont {
  22 + position: relative;
  23 + height: 60px;
  24 + line-height: 60px;
  25 + display: inline-block;
  26 +
  27 + color: #b0b0b0;
  28 + width: 60px;
  29 + top: -14px;
  30 + font-size: 34px;
  31 + text-align: center;
  32 + margin-right: 0;
  33 + outline: none;
  34 + }
  35 +
  36 + .share-btn {
  37 + margin-left: 20px;
  38 + }
  39 +
  40 + .like-btn.like {
  41 + color: #444;
  42 + }
  43 +
  44 + .collect-btn {
  45 + margin-left: 20px;
  46 + &.collected {
  47 + color: #D62927;
  48 + }
  49 + }
  50 + }
  51 +}
@@ -62,7 +62,7 @@ a { @@ -62,7 +62,7 @@ a {
62 text-decoration: none; 62 text-decoration: none;
63 font-style: normal; 63 font-style: normal;
64 font-size: 24px; 64 font-size: 24px;
65 - font-family: 'iconfont' !important; 65 + font-family: "iconfont" !important;
66 -webkit-font-smoothing: antialiased; 66 -webkit-font-smoothing: antialiased;
67 -webkit-text-stroke-width: 0.4px; 67 -webkit-text-stroke-width: 0.4px;
68 -moz-osx-font-smoothing: grayscale; 68 -moz-osx-font-smoothing: grayscale;
1 -#!/bin/bash  
2 -lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \  
3 -| while read i; do  
4 - sudo rm /usr/local/${i}  
5 -done  
6 -sudo rm -rf /usr/local/lib/node \  
7 - /usr/local/lib/node_modules \  
8 - /var/db/receipts/org.nodejs.*  
9 -  
  1 +const url = require('url');
  2 +const config = require('../config/common');
  3 +const assetUrl = config.assetUrl;
  4 +
  5 +module.exports = {
  6 + imgSrc: function(imgSrc) {
  7 + return url.resolve(assetUrl, imgSrc);
  8 + }
  9 +};