Authored by 毕凯

Merge remote-tracking branch 'origin/master' into release/6.1

Showing 38 changed files with 1268 additions and 2 deletions
'use strict';
const headerModel = require('../../../doraemon/models/header');
const storeHomeModel = require('../models/store-home');
exports.photography = (req, res, next) => {
let responseData = {
module: 'activity',
page: 'store-photography',
pageHeader: headerModel.setNav({
navTitle: '个人中心'
}),
width750: true,
localCss: true,
};
let params = {
uid: req.user.uid,
shopType: 3
};
req.ctx(storeHomeModel).baseInfo(params).then(result => {
res.render('store-home/photography', Object.assign(responseData, result));
}).catch(next);
};
exports.coffee = (req, res, next) => {
let responseData = {
module: 'activity',
page: 'store-coffee',
pageHeader: headerModel.setNav({
navTitle: '个人中心'
}),
width750: true,
localCss: true,
};
let params = {
uid: req.user.uid,
shopType: 1
};
req.ctx(storeHomeModel).baseInfo(params).then(result => {
res.render('store-home/coffee', Object.assign(responseData, result));
}).catch(next);
};
exports.green = (req, res, next) => {
let responseData = {
module: 'activity',
page: 'store-green',
pageHeader: headerModel.setNav({
navTitle: '个人中心'
}),
width750: true,
localCss: true,
};
let params = {
uid: req.user.uid,
shopType: 2
};
req.ctx(storeHomeModel).baseInfo(params).then(result => {
res.render('store-home/green', Object.assign(responseData, result));
}).catch(next);
};
exports.history = (req, res, next) => {
let responseData = {
module: 'activity',
page: 'store-history',
pageHeader: headerModel.setNav({
navTitle: '消费明细'
}),
width750: true,
localCss: true,
};
let params = {
uid: req.user.uid,
shopType: req.query.shopType
};
req.ctx(storeHomeModel).history(params).then(result => {
res.render('store-home/history', Object.assign(responseData, result));
}).catch(next);
};
exports.moreHistory = (req, res, next) => {
let params = {
uid: req.user.uid,
page: req.query.page,
shopType: req.query.shopType,
};
req.ctx(storeHomeModel).history(params).then(result => {
res.json(result);
}).catch(next);
};
exports.ewm = (req, res) => {
let responseData = {
module: 'activity',
page: 'store-ewm',
pageHeader: headerModel.setNav({
navTitle: '我的二维码'
}),
width750: true,
localCss: true,
};
res.render('store-home/ewm', responseData);
};
exports.coupon = (req, res, next) => {
let responseData = {
module: 'activity',
page: 'store-coupon',
pageHeader: headerModel.setNav({
navTitle: '我的优惠卷'
}),
width750: true,
localCss: true,
};
let params = {
uid: req.user.uid,
shopType: req.query.shopType
};
req.ctx(storeHomeModel).baseInfo(params).then(result => {
res.render('store-home/coupon', Object.assign(responseData, result));
}).catch(next);
};
exports.modify = (req, res, next) => {
let params = {
uid: req.user.uid,
nickName: req.query.nickName,
gender: req.query.gender,
birthday: req.query.birthday
};
req.ctx(storeHomeModel).modify(params).then((result) => {
res.json(result);
}).catch(next);
};
... ...
'use strict';
const camelCase = global.yoho.camelCase;
const _ = require('lodash');
class storeHome extends global.yoho.BaseModel {
constructor(ctx) {
super(ctx);
}
_userInfo(params) {
let options = {
data: {
method: 'extend.trade.userinfo',
uid: params.uid,
shop_type: params.shopType
},
param: {
code: 200
}
};
return this.get(options).then(result => {
return result;
});
}
baseInfo(params) {
return Promise.all([
this._userInfo(params)
]).then(result => {
if (_.get(result, '[0].data')) {
let coffee = result[0].data.vip_type === 1;
let green = result[0].data.vip_type === 2;
let photography = result[0].data.vip_type === 3;
Object.assign(result[0].data, {
photography: photography,
coffee: coffee,
green: green,
process: this.getProcess(result[0].data.cousume_amount, result[0].data.vip_type)
});
result[0].data.gender = result[0].data.gender === '1' ? '男' : '女';
if (result[0].data.babyInfo) {
let thisGender = result[0].data.babyInfo.gender;
result[0].data.gender = (thisGender === '1' ? '男' : '女');
result[0].data.otherGender = (thisGender === '1' ? '女' : '男');
if (result[0].data.gender === '男') {
result[0].data.genderId = 1;
result[0].data.otherGenderId = 2;
} else {
result[0].data.genderId = 2;
result[0].data.otherGenderId = 1;
}
}
result = camelCase(result[0].data);
}
return result;
});
}
history(params) {
let options = {
data: {
method: 'extend.trade.consumelist',
uid: params.uid,
shop_type: params.shopType,
page: params.page || 1,
limit: 20
},
param: {
code: 200
}
};
return this.get(options).then(result => {
let resu = {
list: []
};
if (_.get(result, 'data.consume_list')) {
let build = [];
_.forEach(result.data.consume_list, val => {
build.push({
amount: val.trade_amount,
date: val.trade_date,
title: val.trade_title
});
});
resu.list = build;
}
return resu;
});
}
modify(params) {
let options = {
data: {
method: 'extend.trade.editBabyInfo',
uid: params.uid,
nick_name: params.nickName,
gender: params.gender,
birthday: params.birthday
},
param: {
code: 200
}
};
return this.get(options).then(result => {
return result;
});
}
getProcess(amount, type) {
let process = 0;
switch (type) {
case 1:
if (amount < 0) {
amount = 0;
}
if (amount > 2000) {
amount = 2000;
}
process = (amount / 2000) * 100;
return process;
case 2:
amount -= 1000;
if (amount < 0) {
amount = 0;
}
if (amount > 4000) {
amount = 4000;
}
process = (amount / 4000) * 100;
return process;
case 3:
if (amount < 0) {
amount = 0;
}
if (amount > 10000) {
amount = 10000;
}
process = (amount / 10000) * 100;
return process;
default:
return process;
}
}
}
module.exports = storeHome;
... ...
... ... @@ -55,6 +55,8 @@ const expand = require(`${cRoot}/expand-new`);
const freeMail = require(`${cRoot}/free-mail`);
const storeHome = require(`${cRoot}/store-home`);
// routers
router.get('/demo', demo.index);
... ... @@ -281,4 +283,13 @@ router.get('/free-mail/list', auth, freeMail.freeMailList); // 免邮券列表
router.get('/free-mail/verify', auth, freeMail.receiveVerify); // 免邮券领取验证
router.get('/free-mail/verifyCoupon', auth, freeMail.receiveCoupon); // 免邮券领取
router.get('/store-home/photography', auth, storeHome.photography); // 线下店个人中心-摄影
router.get('/store-home/coffee', auth, storeHome.coffee); // 线下店个人中心-咖啡
router.get('/store-home/green', auth, storeHome.green); // 线下店个人中心-绿植
router.get('/store-home/history', auth, storeHome.history); // 线下店个人中心-消费明细
router.get('/store-home/ewm', auth, storeHome.ewm); // 线下店个人中心-二维码
router.get('/store-home/coupon', auth, storeHome.coupon); // 线下店个人中心-优惠卷
router.get('/store-home/moreHistory', auth, storeHome.moreHistory); // 线下店个人中心-更多记录
router.get('/store-home/modify', auth, storeHome.modify); // 线下店个人中心-修改宝宝信息
module.exports = router;
... ...
<div class="store-home">
{{> store-home/user-info}}
{{> store-home/yoho-family}}
</div>
\ No newline at end of file
... ...
<div class="store-home">
<div class="coupon-list">
{{# coupons}}
<div class="coupon-item">
<div class="coupon-title eps">{{couponName}}</div>
<div class="coupon-main">
<div class="left">
<p class="price">{{couponAmount}}</p>
<p class="limit">{{useLimit}}</p>
</div>
<div class="right">
<p class="date">{{validateDate}}</p>
<p class="detail-btn">详细信息
<span class="iconfont up">&#xe615;</span>
<span class="iconfont down">&#xe616;</span>
</p>
</div>
</div>
<div class="coupon-foot">
<div class="dot-line">
<div class="left-dot"></div>
<div class="right-dot"></div>
<p></p>
</div>
<p>{{explains}}</p>
</div>
</div>
{{/ coupons}}
</div>
</div>
\ No newline at end of file
... ...
<div class="store-home">
<div class="ewm-bg">
<div class="ewm-main">
<img class="user-pic" src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3996494032,1106789965&fm=117&gp=0.jpg" />
<p>KRIS WU</p>
<div class="ewm-pic"></div>
</div>
</div>
</div>
\ No newline at end of file
... ...
<div class="store-home">
{{> store-home/user-info}}
{{> store-home/yoho-family}}
</div>
\ No newline at end of file
... ...
<div class="store-home">
<ul class="his-ul">
{{# list}}
<li class="item">
<div class="tip">
<p class="name">{{title}}</p>
<p class="time">{{date}}</p>
</div>
<div class="price">¥{{amount}}</div>
</li>
{{/ list}}
</ul>
</div>
\ No newline at end of file
... ...
<div class="store-home">
{{> store-home/user-info}}
<div class="edit-title">编辑宝宝资料</div>
<ul class="list">
<li class="list-item">
<span class="title">宝宝昵称</span>
<span class="iconfont">&#xe604;</span>
<input class="s-title baby-name modify" type="text" value="{{babyInfo/nickName}}" />
</li>
<li class="list-item">
<span class="title">宝宝生日</span>
<span class="iconfont">&#xe604;</span>
<span class="date-c">
<input class="s-title baby-birthday modify" type="date" value="{{babyInfo/birthDay}}" />
</span>
</li>
<li class="list-item">
<span class="title">宝宝性别</span>
<span class="iconfont">&#xe604;</span>
<div class="select-c">
<select class="s-title baby-gender modify">
<option value="{{genderId}}">{{gender}}</option>
<option value="{{otherGenderId}}">{{otherGender}}</option>
</select>
</div>
</li>
</ul>
{{> store-home/yoho-family}}
</div>
\ No newline at end of file
... ...
<div class="bg-pic">
<div class="pic {{#if coffee}}coffee{{/if}} {{#if photography}}photography{{/if}} {{#if green}}green{{/if}}">
<div class="cover"></div>
</div>
<div class="base-info">
<div class="left">
<div class="user">
<span class="name">{{nickName}}</span>
<span class="vip vip-{{vipLevel}}"></span>
</div>
<div class="tel">{{mobile}}</div>
</div>
<div class="right">
<div class="ewm-c">
<a class="ewm" href="//m.yohobuy.com/home/newQrcode"></a>
</div>
<div class="id hide">ID:475247198</div>
</div>
</div>
</div>
<div class="user-info">
<div class="logo {{#if coffee}}coffee{{/if}} {{#if photography}}photography{{/if}} {{#if green}}green{{/if}}"></div>
<ul class="info-list">
<li>
<div class="left">消费金额</div>
<a class="right"{{#if cousumeAmount}} href="//m.yohobuy.com/activity/store-home/history?shopType={{vipType}}"{{/if}}>¥{{cousumeAmount}}
{{#if cousumeAmount}}
<span class="iconfont">&#xe604;</span>
{{/if}}
</a>
</li>
<li>
<div class="left">消费次数</div>
<div class="right">{{cousumeNum}}</div>
</li>
<li>
<div class="left">我的积分</div>
<div class="right">{{creditPoints}}</div>
</li>
</ul>
<div class="process-c">
<div class="process-line">
<div style="width: {{process}}%;"></div>
</div>
<ul class="level-c" data-vip="{{vipLevel}}">
<li class="disable">
<div class="dot"></div>
<span class="vip vip-1"></span>
<div class="price">¥{{#if coffee}}0{{/if}}{{#if photography}}0{{/if}}{{#if green}}1000{{/if}}</div>
</li>
<li class="disable">
<div class="dot"></div>
<span class="vip vip-2"></span>
<div class="price">¥{{#if coffee}}800{{/if}}{{#if photography}}5000{{/if}}{{#if green}}3000{{/if}}</div>
</li>
<li class="disable">
<div class="dot"></div>
<span class="vip vip-3"></span>
<div class="price">¥{{#if coffee}}2000{{/if}}{{#if photography}}10000{{/if}}{{#if green}}5000{{/if}}</div>
</li>
</ul>
</div>
<ul class="list coupon">
<a href="//m.yohobuy.com/activity/store-home/coupon?shopType={{vipType}}">
<li class="list-item">
<span class="title">我的优惠券</span>
<span class="iconfont">&#xe604;</span>
<span class="s-title">{{couponsNum}}</span>
</li>
</a>
</ul>
</div>
<div class="edit-title hide">编辑资料</div>
<ul class="list hide">
<li class="list-item">
<span class="title">昵称</span>
<span class="iconfont">&#xe604;</span>
<span class="s-title">{{nickName}}</span>
</li>
<li class="list-item">
<span class="title">生日</span>
<span class="iconfont">&#xe604;</span>
<span class="s-title">{{birthDay}}</span>
</li>
<li class="list-item">
<span class="title">性别</span>
<span class="iconfont">&#xe604;</span>
<span class="s-title">{{gender}}</span>
</select>
</li>
</ul>
\ No newline at end of file
... ...
<ul class="list hide">
<li class="list-item">
<span class="title">YOHO!FAMILY</span>
<span class="iconfont">&#xe604;</span>
<span class="s-title"></span>
</li>
</ul>
\ No newline at end of file
... ...
... ... @@ -8,6 +8,7 @@
<div class="user-info">
<div class="name eps">{{nickname}}</div>
<div class="passcode">
{{#if trendWord}}
<div class="dot">#&nbsp;</div>
<div class="auto-scroll">
<div class="scroll-words go-scroll">
... ... @@ -19,6 +20,7 @@
</div>
</div>
<div class="dot">&nbsp;#</div>
{{/if}}
</div>
</div>
</div>
... ...
{
"name": "m-yohobuy-node",
"version": "6.0.22",
"version": "6.0.23",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ...
{{# list}}
<li class="item">
<div class="tip">
<p class="name">{{title}}</p>
<p class="time">{{date}}</p>
</div>
<div class="price">¥{{amount}}</div>
</li>
{{/ list}}
\ No newline at end of file
... ...
require('activity/store-home.page.css');
const Photography = require('./store-home/index');
new Photography();
... ...
require('activity/store-home.page.css');
import $ from 'yoho-jquery';
import Page from 'yoho-page';
class StoreCoupon extends Page {
constructor() {
super();
this.selector = {
$toggleBtn: $('.detail-btn'),
};
this.init();
}
init() {
this.bindEvents();
}
bindEvents() {
this.selector.$toggleBtn.on('click', this.toggle.bind(this));
}
toggle(e) {
let $this = $(e.currentTarget);
$this.parents('.coupon-item').find('.coupon-foot').toggle().find('.up').toggle().find('.down').toggle();
}
}
$(() => {
new StoreCoupon();
});
... ...
require('activity/store-home.page.css');
import Page from 'yoho-page';
import $ from 'yoho-jquery';
import 'yoho-jquery-qrcode';
class PersonDetail extends Page {
constructor() {
super();
this.selector = {
$ewm: $('.ewm-pic')
};
this.init();
}
init() {
this.selector.$ewm.qrcode({
render: 'canvas', // 显示方式,canvas,image和div
text: '20364534', // 二维码的内容
size: parseInt(420, 10), // 大小
ecLevel: 'H', // 纠错级别
});
}
}
$(() => {
new PersonDetail();
});
... ...
require('activity/store-home.page.css');
const Photography = require('./store-home/index');
new Photography();
... ...
require('activity/store-home.page.css');
import $ from 'yoho-jquery';
import Page from 'yoho-page';
import historyRender from 'activity/store-home/history.hbs';
class History extends Page {
constructor() {
super();
this.page = 1;
this.loading = false;
this.selector = {
$hisUl: $('.his-ul')
};
this.view = {
historyRender
};
this.init();
}
init() {
$(window).scroll(() => {
window.requestAnimationFrame(this.scrollHandler.bind(this));
});
}
scrollHandler() {
if (($(window).scrollTop() + $(window).height() >= $(document).height() * 0.8)) {
this.doMore();
}
}
doMore() {
if (!this.end && !this.loading) {
this.page++;
this.moreList(this.page);
}
}
moreList() {
this.loading = true;
this.ajax({
url: '/activity/store-home/moreHistory',
data: {
page: this.page,
shopType: window.queryString.shopType
},
}).then(result => {
if (result && result.list.length > 0) {
this.selector.$hisUl.append(this.view.historyRender(result));
this.loading = false;
} else {
this.end = true;
}
}).catch(error => {
console.error(error);
});
}
}
$(() => {
new History();
});
... ...
import $ from 'yoho-jquery';
import Page from 'yoho-page';
import tip from 'plugin/tip';
import yoho from 'yoho-app';
class Photography extends Page {
constructor() {
super();
this.selector = {
$levelC: $('.level-c'),
$modifyInp: $('.s-title.modify'),
$nickName: $('.s-title.baby-name'),
$gender: $('.s-title.baby-gender'),
$birthday: $('.s-title.baby-birthday'),
$noDate: $('.s-title.modify[type!=date]'),
};
this.init();
}
init() {
this.bindEvents();
let vipLevel = this.selector.$levelC.data('vip');
this.selector.$levelC.find(`li:lt(${vipLevel})`).removeClass('disable');
}
bindEvents() {
if (yoho.isWechat) {
this.selector.$modifyInp.on('change', this.modifyInp.bind(this));
} else {
this.selector.$noDate.on('change', this.modifyInp.bind(this));
this.selector.$birthday.on('blur', this.modifyInp.bind(this));
}
}
modifyInp() {
this.ajax({
url: '/activity/store-home/modify',
data: {
nickName: this.selector.$nickName.val(),
gender: this.selector.$gender.val(),
birthday: this.selector.$birthday.val()
},
}).then(result => {
if (result && result.code === 200) {
location.href = location.href;
} else {
tip.show(result.message);
}
}).catch(error => {
tip.show(error);
});
}
}
module.exports = Photography;
... ...
require('activity/store-home.page.css');
const Photography = require('./store-home/index');
new Photography();
... ...
... ... @@ -72,7 +72,7 @@ let functions = {
if (!yoho.isLogin()) {
let preInfo = `${sku}_${skn}_${buyNum}`;
let actCkOpthn = {
path: '/',
path: '/product',
expires: 1
};
... ...
... ... @@ -43,6 +43,7 @@ yoho = {
qs && qs.app_version || cookie.get('app_version'),
isiOS: /\(i[^;]+;( U;)? CPU.+Mac OS X/i.test(navigator.userAgent || ''),
isAndroid: /Android/i.test(navigator.userAgent || ''),
isWechat: /micromessenger/i.test(navigator.userAgent || ''),
/**
* JS 与 APP 共享的对象
... ...
body,
html {
background-color: #f0f0f0;
}
input {
padding: 0;
}
input::-webkit-clear-button {
width: 0;
}
input::-webkit-calendar-picker-indicator {
width: 0;
}
::-webkit-input-placeholder {
color: #b0b0b0;
}
:-moz-placeholder {
color: #b0b0b0;
}
::-moz-placeholder {
color: #b0b0b0;
}
:-ms-input-placeholder {
color: #b0b0b0;
}
.store-home {
position: relative;
.eps {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.edit-title {
font-size: 24px;
color: #b0b0b0;
padding: 0 30px;
margin: 15px 0;
}
.vip {
width: 70px;
height: 30px;
display: inline-block;
}
.vip-1 {
background-image: url("/activity/store-home/vip1.png");
}
.vip-2 {
background-image: url("/activity/store-home/vip2.png");
}
.vip-3 {
background-image: url("/activity/store-home/vip3.png");
}
.list {
clear: both;
padding: 0 30px;
background-color: #fff;
margin-bottom: 20px;
.list-item {
line-height: 88px;
height: 88px;
background-color: #fff;
border-bottom: solid 1px #e0e0e0;
position: relative;
.name {
font-size: 30px;
}
.s-title {
float: right;
font-size: 28px;
height: 60px;
line-height: 60px;
margin: 14px 15px 14px 0;
text-align: right;
color: #b0b0b0;
border: 0;
background: none;
option {
text-align: right;
}
&.change {
color: #000;
}
}
select.s-title {
direction: rtl;
}
.iconfont {
float: right;
font-size: 28px;
color: #b0b0b0;
width: 30px;
}
.date-c {
direction: ltr;
position: absolute;
top: 0;
right: 30px;
height: 88px;
width: 220px;
overflow: hidden;
input {
direction: rtl;
position: absolute;
top: 0;
left: -57px;
width: 300px;
}
}
.select-c {
position: absolute;
top: 0;
right: 30px;
white-space: nowrap;
overflow: hidden;
direction: ltr;
width: 60px;
height: 88px;
select {
position: absolute;
top: 0;
right: -5px;
}
}
&:last-child {
border-bottom: 0;
}
}
}
.bg-pic {
position: relative;
.pic {
width: 100%;
height: 355px;
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
.cover {
width: 100%;
height: 100%;
background-color: #000;
opacity: 0.6;
}
&.photography {
background-image: resolve("activity/store-home/photography-bg.jpg");
}
&.green {
background-image: resolve("activity/store-home/green-bg.jpg");
}
&.coffee {
background-image: resolve("activity/store-home/coffee-bg.jpg");
}
}
.base-info {
padding: 0 30px;
position: absolute;
top: 0;
left: 0;
color: #fff;
width: 100%;
padding-top: 70px;
line-height: 60px;
.left {
width: 50%;
float: left;
.user {
font-size: 38px;
}
.tel {
font-size: 24px;
}
}
.right {
width: 50%;
float: right;
text-align: right;
.ewm {
width: 35px;
height: 35px;
background-image: url("/activity/store-home/ewm.png");
display: inline-block;
vertical-align: middle;
}
.id {
font-size: 24px;
}
}
.name {
margin-right: 10px;
}
}
}
.user-info {
width: 690px;
background-color: #fff;
margin: -130px auto 0;
position: relative;
padding-top: 40px;
.logo {
&.coffee {
width: 120px;
height: 120px;
background-image: url("/activity/store-home/coffee.png");
margin: 0 auto;
}
&.photography {
width: 120px;
height: 120px;
background-image: url("/activity/store-home/photography.png");
margin: 0 auto;
}
&.green {
width: 120px;
height: 120px;
background-image: url("/activity/store-home/green.png");
margin: 0 auto;
}
}
.info-list {
margin-top: 15px;
font-size: 24px;
line-height: 60px;
.left {
width: 50%;
float: left;
text-align: right;
padding: 0 25px;
}
.right {
width: 50%;
float: right;
padding: 0 25px;
.iconfont {
color: #b0b0b0;
font-size: 18px;
}
}
}
.process-c {
position: relative;
padding-top: 30px;
clear: both;
.process-line {
width: 578px;
height: 2px;
background-color: #e0e0e0;
margin: 0 auto;
div {
background-color: #000;
height: 100%;
}
}
.level-c {
width: 598px;
margin: -9px auto 0;
li {
float: left;
width: 289px;
margin-bottom: 20px;
}
li:last-child {
width: 20px;
}
.dot {
width: 20px;
height: 20px;
background-color: #000;
border-radius: 50%;
margin-bottom: 17px;
}
.vip {
margin-left: -25px;
}
.price {
width: 100px;
margin-left: -40px;
text-align: center;
font-size: 23px;
line-height: 45px;
}
}
}
.coupon {
border-top: solid 1px #e0e0e0;
margin: 0 22px;
padding: 0;
.list-item {
padding: 0;
}
}
}
.disable {
.vip-1 {
background-image: url("/activity/store-home/vip1-1.png");
}
.vip-2 {
background-image: url("/activity/store-home/vip2-1.png");
}
.vip-3 {
background-image: url("/activity/store-home/vip3-1.png");
}
.dot {
background-color: #e0e0e0 !important;
}
.price {
color: #b0b0b0;
}
}
.his-ul {
padding: 0 25px;
background-color: #fff;
.item {
height: 100px;
border-bottom: solid 1px #e0e0e0;
background-color: #fff;
padding: 5px 0;
&:last-child {
border: 0;
}
.tip {
width: 500px;
float: left;
.name {
font-size: 26px;
line-height: 50px;
height: 50px;
}
.time {
font-size: 22px;
color: #b0b0b0;
line-height: 40px;
}
}
.price {
width: 200px;
float: left;
line-height: 90px;
text-align: right;
font-size: 30px;
}
}
}
.ewm-bg {
background-color: #333;
padding: 132px 0 350px;
.ewm-main {
width: 600px;
height: 785px;
background-color: #fff;
margin: 0 auto;
padding-top: 50px;
.user-pic {
width: 100px;
height: 100px;
border-radius: 50%;
margin: 0 auto;
}
p {
line-height: 95px;
font-size: 34px;
text-align: center;
}
.ewm-pic {
width: 420px;
height: 420px;
margin: 40px auto 0;
canvas {
width: 100%;
}
}
}
}
.coupon-list {
.coupon-item {
margin: 18px auto 33px;
width: 690px;
.coupon-title {
width: 690px;
height: 91px;
background-image: url("/activity/store-home/coupon-title.png");
background-color: #fff;
font-size: 30px;
color: #fff;
line-height: 91px;
padding: 0 30px;
}
.coupon-main {
height: 180px;
background-color: #fff;
padding: 25px 0;
}
.left {
width: 219px;
float: left;
border-right: solid 1px #e0e0e0;
}
.price {
font-size: 80px;
line-height: 80px;
text-align: center;
}
.limit {
font-size: 22px;
color: #b0b0b0;
text-align: center;
line-height: 22px;
margin-top: 20px;
}
.right {
width: 470px;
float: left;
padding-left: 25px;
font-size: 24px;
line-height: 24px;
}
.date {
font-size: 24px;
margin-bottom: 75px;
}
.iconfont {
color: #b0b0b0;
}
.iconfont.up {
display: none;
}
.coupon-foot {
display: none;
position: relative;
padding: 8px 25px;
line-height: 50px;
font-size: 24px;
background-color: #fff;
}
.dot-line {
div {
width: 20px;
height: 20px;
background-color: #f0f0f0;
border-radius: 50%;
position: absolute;
top: -20px;
}
p {
width: 630px;
border-bottom: dashed 1px #b4b4b4;
position: absolute;
top: -10px;
}
.left-dot {
left: -10px;
}
.right-dot {
right: -10px;
}
}
}
}
}
... ...