Authored by 陈轩

Merge remote-tracking branch 'origin/develop' into develop

1 -| | | |  
2 -|---|---|---|  
3 -|Name | Path| Note|  
4 -|首页| /|  
5 -|侧边栏| /sidebar| 只有 app 使用|  
6 -|品牌列表| /brands| |  
7 -|品类| /cate| |  
8 -|全部分类| /cate-all| |  
9 -|品牌店铺| /product/shop?domain=sctest1| |  
10 -|品牌店铺分享页面| /product/brand-share?domain=colormad| |  
11 -|商品详情| /product/{productId}| |  
12 -|资讯列表| /news| | 1 +Name | Path | Note
  2 +-------- | ------------------------------------ | ---------
  3 +首页 | / |
  4 +侧边栏 | /sidebar | 只有 app 使用
  5 +品牌列表 | /brands |
  6 +品类 | /cate |
  7 +全部分类 | /cate-all |
  8 +品牌店铺 | /product/shop?domain=sctest1 |
  9 +品牌店铺分享页面 | /product/brand-share?domain=colormad |
  10 +商品详情 | /product/{productId} |
  11 +资讯列表 | /news |
@@ -30,8 +30,8 @@ const component = { @@ -30,8 +30,8 @@ const component = {
30 module: 'home', 30 module: 'home',
31 page: 'index', 31 page: 'index',
32 head_ico: proData && proData.head_ico ? helpers.image(proData.head_ico, 200, 200) : '', 32 head_ico: proData && proData.head_ico ? helpers.image(proData.head_ico, 200, 200) : '',
33 - profile_name: uid && proData ? proData.profile_name : '登录/注册',  
34 - userinfourl: uid ? '/home/mydetails' : helpers.urlFormat('/signin.html', { 33 + profile_name: proData ? proData.profile_name : '登录/注册',
  34 + userinfourl: proData ? '/home/mydetails' : helpers.urlFormat('/signin.html', {
35 refer: req.originalUrl 35 refer: req.originalUrl
36 }), 36 }),
37 }; 37 };
@@ -40,10 +40,20 @@ const component = { @@ -40,10 +40,20 @@ const component = {
40 }).catch(next); 40 }).catch(next);
41 }, 41 },
42 mydetails: (req, res) => { 42 mydetails: (req, res) => {
  43 + let uid = req.user.uid;
  44 +
  45 + uid = 14459668; // 测试uid
  46 +
  47 + homeModel.getUserProfileData(uid).then(data => {
43 res.render('mydetails', { 48 res.render('mydetails', {
44 module: 'home', 49 module: 'home',
45 - page: 'mydetails' 50 + page: 'mydetails',
  51 + head_ico: data && data.head_ico ? helpers.image(data.head_ico, 92, 92) : '',
  52 + nickname: '',
  53 + gender: data.gender === '1' ? 'men' : 'women',
  54 + birthday: data.birthday
46 }); 55 });
  56 + })
47 }, 57 },
48 help: (req, res, next) => { 58 help: (req, res, next) => {
49 homeModel.getHelpInfo().then(helpList => { 59 homeModel.getHelpInfo().then(helpList => {
@@ -119,10 +119,43 @@ const order = { @@ -119,10 +119,43 @@ const order = {
119 return res.json(result); 119 return res.json(result);
120 }); 120 });
121 }, 121 },
122 - coin: (req, res) => { 122 + coin: (req, res, next) => {
  123 + let uid = req.user.id;
  124 +
  125 + orderModel.getCoins(uid).then(result => {
123 res.render('coin', { 126 res.render('coin', {
124 module: 'home', 127 module: 'home',
125 - page: 'order' 128 + page: 'coin',
  129 + coin: result
  130 + });
  131 + }).catch(next);
  132 + },
  133 +
  134 + /**
  135 + * 获取yoho币明细
  136 + * @param req
  137 + * @param res
  138 + * @returns {*|{read, write}}
  139 + */
  140 + getCoinDetail: (req, res) => {
  141 + let uid = req.user.id;
  142 + let page = req.query.page;
  143 + let limit = req.query.limit;
  144 + let isend = true;
  145 +
  146 + uid = testUid;
  147 + if (!uid && req.xhr) {
  148 + return res.json({
  149 + code: notLoginCode,
  150 + message: notLoginTip
  151 + });
  152 + }
  153 +
  154 + orderModel.getCoinDetail(uid, page, limit).then(result => {
  155 + if (result && page < result.page_total) {
  156 + isend = false;
  157 + }
  158 + return res.json(Object.assign({isEnd: isend}, result));
126 }); 159 });
127 }, 160 },
128 161
@@ -4,6 +4,10 @@ @@ -4,6 +4,10 @@
4 */ 4 */
5 'use strict'; 5 'use strict';
6 const refundModel = require('../models/refund'); 6 const refundModel = require('../models/refund');
  7 +const notLoginCode = 400;
  8 +const notLoginTip = '抱歉,您暂未登录!';
  9 +const testUid = 8050378;// 测试uid
  10 +const isBLK = 1;
7 11
8 const refund = { 12 const refund = {
9 refund(req, res) { 13 refund(req, res) {
@@ -45,6 +49,51 @@ const refund = { @@ -45,6 +49,51 @@ const refund = {
45 res.json({ 49 res.json({
46 code: 200 50 code: 200
47 }); 51 });
  52 + },
  53 + exchangeGoods(req, res) {
  54 + // let orderCode = req.query.orderCode;
  55 +
  56 + res.render('exchange-status');
  57 + },
  58 + refundOrders(req, res) {
  59 + res.render('refund-order', {
  60 + module: 'home',
  61 + page: 'refund-order'
  62 + });
  63 + },
  64 +
  65 + /**
  66 + * 获取退换货订单
  67 + * @param req
  68 + * @param res
  69 + * @returns {*|{read, write}}
  70 + */
  71 + getRefundOrders(req, res) {
  72 + let uid = req.query.id;
  73 + let page = req.query.page;
  74 + let limit = req.query.limit;
  75 + let isend = true;
  76 +
  77 + uid = testUid;
  78 + if (!uid && req.xhr) {
  79 + return res.json({
  80 + code: notLoginCode,
  81 + message: notLoginTip
  82 + });
  83 + }
  84 + let param = {
  85 + uid: uid,
  86 + page: page,
  87 + limit: limit,
  88 + app_type: isBLK
  89 + };
  90 +
  91 + refundModel.getRefundOrders(param).then(result => {
  92 + if (result && page < result.page_total) {
  93 + isend = false;
  94 + }
  95 + return res.json(Object.assign({isend: isend}, result));
  96 + });
48 } 97 }
49 }; 98 };
50 99
@@ -11,7 +11,7 @@ const helpers = global.yoho.helpers; @@ -11,7 +11,7 @@ const helpers = global.yoho.helpers;
11 * @param int uid 用户ID 11 * @param int uid 用户ID
12 * @return Object 个人详情数据 12 * @return Object 个人详情数据
13 */ 13 */
14 -const _getUserProfileData = (uid) => { 14 +const _getUserProfileData = exports.getUserProfileData = (uid) => {
15 return api.get('', { 15 return api.get('', {
16 uid: uid, 16 uid: uid,
17 method: 'app.passport.profile' 17 method: 'app.passport.profile'
@@ -120,3 +120,31 @@ exports.getOrderLogisticdate = (params) => { @@ -120,3 +120,31 @@ exports.getOrderLogisticdate = (params) => {
120 return []; 120 return [];
121 }); 121 });
122 }; 122 };
  123 +
  124 +/**
  125 + * 获取yoho币数量
  126 + * @param uid
  127 + * @returns {*|Promise.<T>}
  128 + */
  129 +exports.getCoins = (uid) => {
  130 + return api.get('978c6bad6c379086.json', {
  131 + uid: uid,
  132 + app_type: 'app.yohocoin.total'
  133 + }).then(camelCase);
  134 +};
  135 +
  136 +/**
  137 + * 获取yoho币明细
  138 + * @param uid
  139 + * @param page
  140 + * @param limit
  141 + * @returns {*|Promise.<T>}
  142 + */
  143 +exports.getCoinDetail = (uid, page, limit) => {
  144 + return api.get('26573a88a2958702.json', {
  145 + uid: uid,
  146 + page: page,
  147 + limit: limit,
  148 + method: 'app.yohocoin.lists'
  149 + }).then(camelCase);
  150 +};
@@ -29,6 +29,25 @@ const refund = { @@ -29,6 +29,25 @@ const refund = {
29 return api.get('', { 29 return api.get('', {
30 method: 'app.express.getExpressCompany' 30 method: 'app.express.getExpressCompany'
31 }); 31 });
  32 + },
  33 +
  34 + /**
  35 + * 获取退换货列表
  36 + * @param param
  37 + * method
  38 + * uid
  39 + * page
  40 + * limit
  41 + * app_type
  42 + * @returns {Promise.<T>|*}
  43 + */
  44 + getRefundOrders(param) {
  45 + param = Object.assign({method: 'app.refund.getList'}, param);
  46 +
  47 + return api.get('16303b76a9aa7b9b.json', param, {
  48 + cache: true,
  49 + code: 200
  50 + }).then(global.yoho.camelCase);
32 } 51 }
33 }; 52 };
34 53
@@ -21,6 +21,7 @@ const router = expressRouter(); @@ -21,6 +21,7 @@ const router = expressRouter();
21 router.get('/', home.index); // 个人中心主页 21 router.get('/', home.index); // 个人中心主页
22 router.get('/orders', order.orders); // 订单 22 router.get('/orders', order.orders); // 订单
23 router.get('/mycurrency', order.coin); // yoho币 23 router.get('/mycurrency', order.coin); // yoho币
  24 +router.get('/coin-detail', order.getCoinDetail); // yoho币明细
24 router.get('/order-detail', order.orderDetail); // 订单详情 25 router.get('/order-detail', order.orderDetail); // 订单详情
25 router.get('/get-orders', order.getOrderData); // 获取订单数据 26 router.get('/get-orders', order.getOrderData); // 获取订单数据
26 router.get('/get-order', order.getOrderDetailData); // 获取订单详情数据 27 router.get('/get-order', order.getOrderDetailData); // 获取订单详情数据
@@ -44,6 +45,9 @@ router.get('/refund/order', refund.order); // 查询订单数据 @@ -44,6 +45,9 @@ router.get('/refund/order', refund.order); // 查询订单数据
44 router.post('/refund/submit', refund.submit); // 提交信息 45 router.post('/refund/submit', refund.submit); // 提交信息
45 router.get('/refund/logistics', refund.logistics); // 退换货 - 商品寄回信息 46 router.get('/refund/logistics', refund.logistics); // 退换货 - 商品寄回信息
46 router.post('/save-logistics', refund.saveLogistics); // 退换货 - 添加寄回物流信息 47 router.post('/save-logistics', refund.saveLogistics); // 退换货 - 添加寄回物流信息
  48 +router.get('/exchange-status', refund.exchangeGoods); // 退换货 - 换货状态
  49 +router.get('/refund/orders', refund.refundOrders); // 退换货 - 订单列表
  50 +router.get('/refund/get-orders', refund.getRefundOrders); // 退换货 - 获取订单列表数据
47 51
48 // 换货 52 // 换货
49 router.get('/exchange', exchange.exchange); 53 router.get('/exchange', exchange.exchange);
1 -<div class="yoho-coin"> 1 +<div class="yoho-coin" id="coin-detail-list">
2 <div class="coin-total"> 2 <div class="coin-total">
3 <p>您目前拥有</p> 3 <p>您目前拥有</p>
4 - <p><b>123</b></p> 4 + <p><b>{{coin.data.total}}</b></p>
5 <p>个有货币</p> 5 <p>个有货币</p>
6 </div> 6 </div>
7 - <div class="coin-detail">  
8 - <p>明细列表</p>  
9 - <ul class="coin-detail-list">  
10 - <li>  
11 - <div class="coin-source">  
12 - <p>签到奖励</p>  
13 - <time>2016.1.23 12:31:00</time>  
14 - </div>  
15 - <div class="coin-num">+5</div>  
16 - </li>  
17 - <li>  
18 - <div class="coin-source">  
19 - <p>签到奖励</p>  
20 - <time>2016.1.23 12:31:00</time>  
21 - </div>  
22 - <div class="coin-num">+118</div>  
23 - </li>  
24 - </ul>  
25 - </div> 7 + <coin-detail></coin-detail>
26 </div> 8 </div>
  1 +<section class="exchange-status" id="exchange-goods-status">
  2 + <div class="status-desc">
  3 + <p>审核通过</p>
  4 + <p>申请时间: 2016.1.23 23:00:00</p>
  5 + </div>
  6 + <div class="exchange-progress">
  7 + <ul>
  8 + <li class="passed">
  9 + <div class="progress-desc">
  10 + <p>提交申请</p>
  11 + <time>2016-1-23 23:00:00</time>
  12 + </div>
  13 + </li>
  14 + <li>
  15 + <div class="progress-desc">
  16 + <p>审核通过</p>
  17 + </div>
  18 + </li>
  19 + <li>
  20 + <div class="progress-desc">
  21 + <p>商品寄回</p>
  22 + </div>
  23 + </li>
  24 + <li>
  25 + <div class="progress-desc">
  26 + <p>商品入库</p>
  27 + </div>
  28 + </li>
  29 + <li>
  30 + <div class="progress-desc">
  31 + <p>换货完成</p>
  32 + </div>
  33 + </li>
  34 + </ul>
  35 + <div class="progress-todo">
  36 + <p>您的换货申请已<b>成功提交</b>!</p>
  37 + <p class="phone">请您耐心等待审核,审核过后我们会将换货信息发送至您的手机<br>客服电话:400-889-9646</p>
  38 + </div>
  39 + </div>
  40 + <div class="exchange-details">
  41 + <h2>换货详情 <i>EXCHANGE DETAILS</i></h2>
  42 + <div class="exchange-product-wrapper">
  43 + <div class="exchange-product">
  44 + <div class="goods-info" v-for="goods in order.orderGoods">
  45 + <div class="img-box">
  46 + <img v-bind:src="goods.goodsImage | resize 49 65" alt="{{goods.productName}}">
  47 + </div>
  48 + <div class="goods-detail">
  49 + <p class="name">{{goods.productName}}</p>
  50 + <p class="size">
  51 + <span>颜色:{{goods.colorName}}</span>
  52 + <span>尺码:{{goods.sizeName}}</span>
  53 + </p>
  54 + </div>
  55 + <div class="goods-price">
  56 + <p>&yen; {{goods.goodsPrice}}</p>
  57 + <p>×{{goods.buyNumber}}</p>
  58 + </div>
  59 + </div>
  60 + <div class="exchange-reason">
  61 + <p>换货颜色尺码: 黄色 M码</p>
  62 + <p>换货原因: 质量瑕疵</p>
  63 + <blockquote>收到货品后发现不是自己想要的,不是非常的喜欢, 而且存在一低昂的质量问题的呢,少了一个扣子的, 颜色与实际的有点不太符合的哈。</blockquote>
  64 + <ul class="exchange-img">
  65 + <li>
  66 + <img src="" alt="">
  67 + </li>
  68 + <li>
  69 + <img src="" alt="">
  70 + </li>
  71 + <li>
  72 + <img src="" alt="">
  73 + </li>
  74 + </ul>
  75 + </div>
  76 + </div>
  77 + <div class="exchange-product">
  78 + <div class="goods-info" v-for="goods in order.orderGoods">
  79 + <div class="img-box">
  80 + <img v-bind:src="goods.goodsImage | resize 49 65" alt="{{goods.productName}}">
  81 + </div>
  82 + <div class="goods-detail">
  83 + <p class="name">{{goods.productName}}</p>
  84 + <p class="size">
  85 + <span>颜色:{{goods.colorName}}</span>
  86 + <span>尺码:{{goods.sizeName}}</span>
  87 + </p>
  88 + </div>
  89 + <div class="goods-price">
  90 + <p>&yen; {{goods.goodsPrice}}</p>
  91 + <p>×{{goods.buyNumber}}</p>
  92 + </div>
  93 + </div>
  94 + </div>
  95 + <div class="exchange-product">
  96 + <div class="goods-info" v-for="goods in order.orderGoods">
  97 + <div class="img-box">
  98 + <img v-bind:src="goods.goodsImage | resize 49 65" alt="{{goods.productName}}">
  99 + </div>
  100 + <div class="goods-detail">
  101 + <p class="name">{{goods.productName}}</p>
  102 + <p class="size">
  103 + <span>颜色:{{goods.colorName}}</span>
  104 + <span>尺码:{{goods.sizeName}}</span>
  105 + </p>
  106 + </div>
  107 + <div class="goods-price">
  108 + <p>&yen; {{goods.goodsPrice}}</p>
  109 + <p>×{{goods.buyNumber}}</p>
  110 + </div>
  111 + </div>
  112 + <div class="exchange-reason">
  113 + <p>换货原因: 尺寸不合适</p>
  114 + </div>
  115 + </div>
  116 + </div>
  117 + </div>
  118 +
  119 + <div class="exchange-express">
  120 + <div class="exchange-address">
  121 + <p><span>{{order.userName}}</span><span>{{order.phone}}</span></p>
  122 + <p>{{order.area}} <br>{{order.address}}</p>
  123 + </div>
  124 + <div class="exchange-type">
  125 + <a href="">
  126 + <div class="primary">换货方式:</div>
  127 + <div class="cell-ft">寄回换货</div>
  128 + </a>
  129 + </div>
  130 + </div>
  131 + <div class="exchange-order">
  132 + <a href="">
  133 + <div class="primary">原订单详情</div>
  134 + <div class="cell-ft"></div>
  135 + </a>
  136 + </div>
  137 + <div class="exchange-options">
  138 + <button>取消申请</button>
  139 + </div>
  140 +</section>
1 <div class="yoho-favorite-brand-page"> 1 <div class="yoho-favorite-brand-page">
2 <div class="fav-content" id="fav-content"> 2 <div class="fav-content" id="fav-content">
3 - <fav-brand-list brand-url={{brandUrl}}></fav-brand-list> 3 + <fav-brand-list brand-url='{{brandUrl}}'></fav-brand-list>
4 </div> 4 </div>
5 </div> 5 </div>
1 <div class="yoho-favorite-page"> 1 <div class="yoho-favorite-page">
2 <div class="fav-content" id="fav-content"> 2 <div class="fav-content" id="fav-content">
3 - <fav-product-list product-url={{productUrl}}></fav-product-list> 3 + <fav-product-list product-url='{{productUrl}}'></fav-product-list>
4 </div> 4 </div>
5 </div> 5 </div>
1 <div class="logistics-page" id="logistics"> 1 <div class="logistics-page" id="logistics">
2 - <components :is="currentView" :company_id="company_id" :company_name="company_name" company_list={{company_list}} keep-alive></components> 2 + <components :is="currentView" :company_id="company_id" :company_name="company_name" company_list='{{company_list}}' keep-alive></components>
3 </div> 3 </div>
1 <div class="personal-details" id="details"> 1 <div class="personal-details" id="details">
2 - <mydetails gender="women" birthday="1990.07.17"></mydetails> 2 + <mydetails head_ico='{{head_ico}}' nickname='{{nickname}}' gender='{{gender}}' birthday='{{birthday}}'></mydetails>
3 </div> 3 </div>
1 -<div class="order-wrapper return-goods">  
2 - <ul>  
3 - <li class="order-item">  
4 - <div class="order-detail">  
5 - <div class="order-code">  
6 - <div class="code-time">  
7 - <p>订单号:523243435</p>  
8 - <p>申请时间:2016.1.23 12:31:00</p>  
9 - </div>  
10 - <p>通过审核</p>  
11 - </div>  
12 - <div class="order-goods">  
13 - <div class="goods-info">  
14 - <div class="img-box">  
15 - <img src="//img01.static.yohobuy.com/cms/2016/05/30/15/019bb70cdee6e05ee51eb062c009d49796.jpg" alt="">  
16 - </div>  
17 - <div class="goods-detail">  
18 - <p class="name">Supreme Mendini work jacket 2016年新品黑色手枪图案短2016年新品黑色手枪图案短</p>  
19 - <p class="size">  
20 - <span>颜色:黑色</span>  
21 - <span>尺码:XL</span>  
22 - </p>  
23 - </div>  
24 - <div class="goods-price">  
25 - <p>&yen;6289.00</p>  
26 - <p>×1</p>  
27 - </div>  
28 - </div>  
29 - <div class="goods-info">  
30 - <div class="img-box">  
31 - <img src="//img01.static.yohobuy.com/cms/2016/05/30/15/019bb70cdee6e05ee51eb062c009d49796.jpg" alt="">  
32 - </div>  
33 - <div class="goods-detail">  
34 - <p class="name">Supreme Mendini work jacket 2016年新品黑色手枪图案短2016年新品黑色手枪图案短</p>  
35 - <p class="size">  
36 - <span>颜色:黑色</span>  
37 - <span>尺码:XL</span>  
38 - </p>  
39 - </div>  
40 - <div class="goods-price">  
41 - <p>&yen;6289.00</p>  
42 - <p>×1</p>  
43 - </div>  
44 - </div>  
45 - </div>  
46 - <div class="order-option">  
47 - <div class="goods-total"></div>  
48 - <div class="options">  
49 - <button class="normal">取消申请</button>  
50 - </div>  
51 - </div>  
52 - </div>  
53 - </li>  
54 - <li class="order-item">  
55 - <div class="order-detail">  
56 - <div class="order-code">  
57 - <div class="code-time">  
58 - <p>订单号:523243435</p>  
59 - <p>申请时间:2016.1.23 12:31:00</p>  
60 - </div>  
61 - <p>商品寄回</p>  
62 - </div>  
63 - <div class="order-goods">  
64 - <div class="goods-info">  
65 - <div class="img-box">  
66 - <img src="//img01.static.yohobuy.com/cms/2016/05/30/15/019bb70cdee6e05ee51eb062c009d49796.jpg" alt="">  
67 - </div>  
68 - <div class="goods-detail">  
69 - <p class="name">Supreme Mendini work jacket 2016年新品黑色手枪图案短2016年新品黑色手枪图案短</p>  
70 - <p class="size">  
71 - <span>颜色:黑色</span>  
72 - <span>尺码:XL</span>  
73 - </p>  
74 - </div>  
75 - <div class="goods-price">  
76 - <p>&yen;6289.00</p>  
77 - <p>×1</p>  
78 - </div>  
79 - </div>  
80 - </div>  
81 - </div>  
82 - </li>  
83 - </ul>  
84 -</div>  
  1 +<div class="order-wrapper return-goods" id="refund-order-list">
  2 + <refund-order></refund-order>
  3 +</div>
  1 +<div class="select">
  2 + <ul>
  3 + {{#each items}}
  4 + <li class="item-li">{{this}}</li>
  5 + {{/each}}
  6 + <li class="item-del">
  7 + <span>取消</span>
  8 + </li>
  9 + </ul>
  10 +</div>
This diff could not be displayed because it is too large.
  1 +/**
  2 + * 拦截跳转, 在这里给将要打开的页面设置一下 header 样式
  3 + * @return {[type]}
  4 + */
  5 +const yoho = require('yoho');
  6 +
  7 +module.exports = (url) => {
  8 + console.log(url);
  9 + if (yoho.isApp) {
  10 + yoho.goNewPage({
  11 + url: url
  12 + });
  13 + } else {
  14 + location.href = url;
  15 + }
  16 +};
  1 +/**
  2 + * 选择框组件
  3 + *
  4 + * @author: shenzm<zhimin.shen@yoho.cn>
  5 + * @date: 2016/07/26
  6 + */
  7 +
  8 +'use strict';
  9 +
  10 +const $ = require('yoho-jquery');
  11 +const template = require('components/select.hbs');
  12 +const Overlay = require('./overlay');
  13 +
  14 +function Select(items) {
  15 + if (!$.isArray(items) || items.length === 0) {
  16 + return;
  17 + }
  18 +
  19 + // 初始化参数
  20 + const tpl = template({
  21 + items: items
  22 + });
  23 +
  24 + // 生成模版
  25 + const elem = $(tpl);
  26 + const del = elem.find('.item-del');
  27 + $(del).click(function() {
  28 + overlay.hide();
  29 + elem.hide();
  30 + });
  31 +
  32 + // 覆盖层
  33 + const overlay = new Overlay({
  34 + onClose: function() {
  35 + elem.hide();
  36 + }
  37 + });
  38 +
  39 + return {
  40 + show: function(cb) {
  41 + if (elem.parent().length === 0) {
  42 + const lis = elem.find('.item-li');
  43 + lis.each(function(index) {
  44 + $(this).click(function(e) {
  45 + cb(e.target.innerHTML);
  46 + overlay.hide();
  47 + elem.hide();
  48 + });
  49 + });
  50 + elem.appendTo('body').addClass('animation-target');
  51 + }
  52 +
  53 + overlay.show();
  54 + elem.show();
  55 + },
  56 + hide: function() {
  57 + overlay.hide();
  58 + elem.hide();
  59 + }
  60 + }
  61 +}
  62 +
  63 +module.exports = Select;
  1 +/**
  2 + * coin.page.js.
  3 + * @author hgwang
  4 + * @date 2016-07-27
  5 + */
  6 +'use strict';
  7 +
  8 +
  9 +const Vue = require('yoho-vue');
  10 +const coin = require('home/coin-detail.vue');
  11 +const infiniteScroll = require('yoho-vue-infinite-scroll');
  12 +
  13 +Vue.use(infiniteScroll);
  14 +
  15 +require('common/vue-filter');
  16 +
  17 +new Vue({
  18 + el: '#coin-detail-list',
  19 + components: {
  20 + 'coin-detail': coin
  21 + }
  22 +});
  1 +/**
  2 + * exchange-status.page.js.
  3 + * @author hgwang
  4 + * @date 2016-07-25
  5 + */
  6 +'use strict';
  7 +
  1 +/**
  2 + * refund-order.page.
  3 + * @author hgwang
  4 + * @date 2016-07-26
  5 + */
  6 +'use strict';
  7 +
  8 +const Vue = require('yoho-vue');
  9 +const refundOrder = require('home/refund-order.vue');
  10 +const infiniteScroll = require('yoho-vue-infinite-scroll');
  11 +
  12 +Vue.use(infiniteScroll);
  13 +
  14 +require('common/vue-filter');
  15 +
  16 +new Vue({
  17 + el: '#refund-order-list',
  18 + data: {},
  19 + components: {
  20 + refundOrder
  21 + }
  22 +});
  1 +/* -----------------------------------------------------------------------------
  2 +
  3 + AnyPicker - Customizable Picker for Mobile OS
  4 + Version 2.0.5
  5 + Copyright (c)2016 Curious Solutions LLP
  6 + https://curioussolutions.in/libraries/anypicker/content/license.htm
  7 + See License Information in LICENSE file.
  8 +
  9 + ----------------------------------------------------------------------------- */
  10 +
  11 +.ap-theme-ios.ap-layout-popup .ap-cont,
  12 +.ap-theme-ios.ap-layout-popover .ap-cont
  13 +{
  14 + border: 1px solid #e0e0e0;
  15 +}
  16 +
  17 +.ap-theme-ios.ap-layout-popup,
  18 +.ap-theme-ios.ap-layout-fixed,
  19 +.ap-theme-ios.ap-layout-popover
  20 +{
  21 + background: rgba(0, 0, 0, 0.4);
  22 +}
  23 +
  24 +.ap-theme-ios .ap-tooltip,
  25 +.ap-theme-ios .ap-tooltip:after
  26 +{
  27 + display: inline-block;
  28 + width: 0;
  29 + height: 0;
  30 +
  31 + position: absolute;
  32 +
  33 + border-width: 11px;
  34 + border-style: solid;
  35 + z-index: 6;
  36 +}
  37 +
  38 +.ap-theme-ios .ap-tooltip:after
  39 +{
  40 + content: " ";
  41 + border-width: 10px;
  42 +}
  43 +
  44 +.ap-theme-ios .ap-tooltip-bottom
  45 +{
  46 + top: -22px;
  47 + left: 10px;
  48 + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #D7D7D7 rgba(0, 0, 0, 0);
  49 +}
  50 +
  51 +.ap-dir-rtl.ap-theme-ios .ap-tooltip-bottom
  52 +{
  53 + right: 10px;
  54 +}
  55 +
  56 +.ap-theme-ios .ap-tooltip-bottom:after
  57 +{
  58 + top: -8px;
  59 + left: -10px;
  60 + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #FFFFFF rgba(0, 0, 0, 0);
  61 +}
  62 +
  63 +.ap-theme-ios .ap-tooltip-top
  64 +{
  65 + bottom: -21px;
  66 + left: 16px;
  67 + border-color: #e0e0e0 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0);
  68 +}
  69 +
  70 +.ap-dir-rtl.ap-theme-ios .ap-tooltip-top
  71 +{
  72 + right: 16px;
  73 +}
  74 +
  75 +.ap-theme-ios .ap-tooltip-top:after
  76 +{
  77 + bottom: -8px;
  78 + left: -10px;
  79 + border-color: #FFFFFF rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0);
  80 +}
  81 +
  82 +.ap-theme-ios .ap-tooltip-left
  83 +{
  84 + top: 50%;
  85 + left: -22px;
  86 + border-color: rgba(0, 0, 0, 0) #e0e0e0 rgba(0, 0, 0, 0) rgba(0, 0, 0, 0);
  87 +
  88 + -webkit-transform: translateY(-50%);
  89 + -moz-transform: translateY(-50%);
  90 + -o-transform: translateY(-50%);
  91 + -ms-transform: translateY(-50%);
  92 + transform: translateY(-50%);
  93 +}
  94 +
  95 +.ap-theme-ios .ap-tooltip-left:after
  96 +{
  97 + top: -10px;
  98 + left: -9px;
  99 + border-color: rgba(0, 0, 0, 0) #FFFFFF rgba(0, 0, 0, 0) rgba(0, 0, 0, 0);
  100 +}
  101 +
  102 +.ap-theme-ios .ap-tooltip-right
  103 +{
  104 + top: 50%;
  105 + right: -22px;
  106 + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #e0e0e0;
  107 +
  108 + -webkit-transform: translateY(-50%);
  109 + -moz-transform: translateY(-50%);
  110 + -o-transform: translateY(-50%);
  111 + -ms-transform: translateY(-50%);
  112 + transform: translateY(-50%);
  113 +}
  114 +
  115 +.ap-theme-ios .ap-tooltip-right:after
  116 +{
  117 + top: -10px;
  118 + left: -11px;
  119 + border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) #FFFFFF;
  120 +}
  121 +
  122 +.ap-theme-ios .ap-bg
  123 +{
  124 + font-size: 18px;
  125 +}
  126 +
  127 +.ap-theme-ios .ap-header
  128 +{
  129 + height: 85px;
  130 + line-height: 85px;
  131 + text-align: center;
  132 + border-bottom: 1px solid #e0e0e0;
  133 +}
  134 +
  135 +.ap-theme-ios .ap-header__title
  136 +{
  137 + font-size: 30px;
  138 +}
  139 +
  140 +.ap-theme-ios .ap-button
  141 +{
  142 + display: inline-block;
  143 + cursor: pointer;
  144 +
  145 + letter-spacing: 0;
  146 + text-align: center;
  147 + font-size: 30px;
  148 +
  149 + height: 43px;
  150 + background: rgba(255, 255, 255, 1);
  151 +}
  152 +
  153 +.ap-theme-ios .ap-content-top,
  154 +.ap-theme-ios .ap-content-bottom
  155 +{
  156 + font-size: 0.9em;
  157 +}
  158 +
  159 +.ap-theme-ios .ap-footer
  160 +{
  161 + padding: 0 16px;
  162 +}
  163 +
  164 +.ap-theme-ios .ap-footer-top .ap-button
  165 +{
  166 + display: inline-block;
  167 +}
  168 +
  169 +.ap-theme-ios .ap-button:last-child
  170 +{
  171 + float: right;
  172 + padding: 0 0 0 16px;
  173 +
  174 + color: #4a90e2;
  175 +}
  176 +
  177 +.ap-dir-rtl.ap-theme-ios .ap-button:last-child
  178 +{
  179 + float: left;
  180 + padding: 0 16px 0 0;
  181 +}
  182 +
  183 +.ap-theme-ios .ap-button:not(:last-child)
  184 +{
  185 + float: left;
  186 + padding: 0 16px 0 0;
  187 +
  188 + color: #4a90e2;
  189 +}
  190 +
  191 +.ap-dir-rtl.ap-theme-ios .ap-button:not(:last-child)
  192 +{
  193 + float: right;
  194 + padding: 0 0 0 16px;
  195 +}
  196 +
  197 +.ap-theme-ios .ap-component-gradient
  198 +{
  199 + /*
  200 + http://www.cssmatic.com/gradient-generator#'\-moz\-linear\-gradient\%28top\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.7\%29\%200\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.7\%29\%2040\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\%29\%2045\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\%29\%2055\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.7\%29\%2060\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.7\%29\%20100\%25\%29\%3B'
  201 + */
  202 +
  203 + background: rgba(255,255,255,0.7);
  204 + background: -moz-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0.7) 40%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0.7) 100%);
  205 + background: -webkit-gradient(left top, left bottom, color-stop(0%, rgba(255,255,255,0.7)), color-stop(40%, rgba(255,255,255,0.7)), color-stop(45%, rgba(255,255,255,0)), color-stop(55%, rgba(255,255,255,0)), color-stop(60%, rgba(255,255,255,0.7)), color-stop(100%, rgba(255,255,255,0.7)));
  206 + background: -webkit-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0.7) 40%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0.7) 100%);
  207 + background: -o-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0.7) 40%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0.7) 100%);
  208 + background: -ms-linear-gradient(top, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0.7) 40%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0.7) 100%);
  209 + background: linear-gradient(to bottom, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0.7) 40%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.7) 60%, rgba(255,255,255,0.7) 100%);
  210 + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff', GradientType=0 );
  211 +}
  212 +
  213 +.ap-theme-ios .ap-content-middle
  214 +{
  215 + padding: 10px 0;
  216 +}
  217 +
  218 +.ap-theme-ios .ap-content-switch-tab
  219 +{
  220 + border: 1px solid #007AFF;
  221 + font-size: 0.7em;
  222 + color: #007AFF;
  223 +}
  224 +
  225 +.ap-dir-ltr.ap-theme-ios .ap-content-switch-date
  226 +{
  227 + border-top-left-radius: 5px;
  228 + border-bottom-left-radius: 5px;
  229 +}
  230 +
  231 +.ap-dir-rtl.ap-theme-ios .ap-content-switch-date
  232 +{
  233 + border-top-right-radius: 5px;
  234 + border-bottom-right-radius: 5px;
  235 + margin-left: -1px;
  236 +}
  237 +
  238 +.ap-dir-ltr.ap-theme-ios .ap-content-switch-time
  239 +{
  240 + border-top-right-radius: 5px;
  241 + border-bottom-right-radius: 5px;
  242 + margin-left: -1px;
  243 +}
  244 +
  245 +.ap-dir-rtl.ap-theme-ios .ap-content-switch-time
  246 +{
  247 + border-top-left-radius: 5px;
  248 + border-bottom-left-radius: 5px;
  249 +}
  250 +
  251 +.ap-theme-ios .ap-content-switch-selected
  252 +{
  253 + background: #007AFF;
  254 + color: #FFFFFF;
  255 +}
  256 +
  257 +.ap-theme-ios .ap-component-plus,
  258 +.ap-theme-ios .ap-component-minus
  259 +{
  260 + color: #BDBDBD;
  261 +}
  262 +
  263 +.ap-theme-ios .ap-component-label
  264 +{
  265 + color: #007AFF;
  266 +}
  267 +
  268 +.ap-theme-ios .ap-row
  269 +{
  270 + color: #000000;
  271 + font-size: 40px;
  272 + height: 60px;
  273 + line-height: 60px;
  274 +}
  275 +
  276 +.ap-theme-ios .ap-row-disabled
  277 +{
  278 + color: #9E9E9E;
  279 +}
  280 +
  281 +.ap-theme-ios .ap-component-selector
  282 +{
  283 + left: 0;
  284 + width: 100%;
  285 + border-top: 1px solid #e0e0e0;
  286 + border-bottom: 1px solid #e0e0e0;
  287 +}
  1 +/* -----------------------------------------------------------------------------
  2 +
  3 + AnyPicker - Customizable Picker for Mobile OS
  4 + Version 2.0.5
  5 + Copyright (c)2016 Curious Solutions LLP
  6 + https://curioussolutions.in/libraries/anypicker/content/license.htm
  7 + See License Information in LICENSE file.
  8 +
  9 + ----------------------------------------------------------------------------- */
  10 +
  11 +/* ------------------------- Basic Layout Start ---------------------------------- */
  12 +
  13 +body.noscroll
  14 +{
  15 + overflow: hidden;
  16 +}
  17 +
  18 +.ap-overlay
  19 +{
  20 + display: none;
  21 + z-index: 2000;
  22 + min-width: 250px;
  23 +
  24 + -webkit-touch-callout: none;
  25 + -webkit-user-select: none;
  26 + -khtml-user-select: none;
  27 + -moz-user-select: none;
  28 + -ms-user-select: none;
  29 + user-select: none;
  30 +
  31 + -webkit-backface-visibility: hidden;
  32 + -moz-backface-visibility: hidden;
  33 + backface-visibility: hidden;
  34 +
  35 + -webkit-transform-style: preserve-3d;
  36 + -moz-transform-style: preserve-3d;
  37 + transform-style: preserve-3d;
  38 +
  39 + -webkit-perspective: 1000px;
  40 + -moz-perspective: 1000px;
  41 + perspective: 1000px;
  42 +}
  43 +
  44 +.ap-layout-popup
  45 +{
  46 + position: fixed;
  47 + top: 0;
  48 + left: 0;
  49 +
  50 + width: 100%;
  51 + height: 100%;
  52 +
  53 + background: rgba(0, 0, 0, 0.5);
  54 +}
  55 +
  56 +.ap-layout-fixed,
  57 +.ap-layout-popover
  58 +{
  59 + position: fixed;
  60 + top: 0;
  61 + left: 0;
  62 +
  63 + width: 100%;
  64 + height: 100%;
  65 +
  66 + background: rgba(0, 0, 0, 0.5);
  67 +}
  68 +/*
  69 +.ap-layout-relative, .ap-layout-inline
  70 +{
  71 + height: auto;
  72 +}
  73 +*/
  74 +
  75 +.ap-layout-relative, .ap-layout-inline
  76 +{
  77 + position: fixed;
  78 + top: 0;
  79 + left: 0;
  80 +
  81 + width: 100%;
  82 + height: 100%;
  83 +}
  84 +
  85 +.ap-overlay *
  86 +{
  87 + -webkit-box-sizing: border-box;
  88 + -moz-box-sizing: border-box;
  89 + -ms-box-sizing: border-box;
  90 + box-sizing: border-box;
  91 +
  92 + -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  93 +}
  94 +
  95 +.ap-bg
  96 +{
  97 + width: 100%;
  98 + height: 100%;
  99 +
  100 + font-size: 22px;
  101 +}
  102 +
  103 +.ap-cont
  104 +{
  105 + background: #FFFFFF;
  106 +}
  107 +
  108 +.ap-theme-default:not(.ap-layout-inline):not(.ap-layout-relative) .ap-cont
  109 +{
  110 + -webkit-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
  111 + -moz-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
  112 + box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
  113 +}
  114 +
  115 +.ap-layout-popup .ap-cont
  116 +{
  117 + position: fixed;
  118 + bottom: 0px;
  119 + width: 100%;
  120 +}
  121 +
  122 +.ap-layout-relative .ap-cont
  123 +{
  124 + max-width: 500px;
  125 + width: 97%;
  126 + border: 1px solid #ECF0F1;
  127 +}
  128 +
  129 +.ap-layout-inline .ap-cont
  130 +{
  131 + border: 1px solid #ECF0F1;
  132 +}
  133 +
  134 +.ap-layout-fixed .ap-cont
  135 +{
  136 + width: 100%;
  137 + position: fixed;
  138 +}
  139 +
  140 +/* ------------------------- Basic Layout End ---------------------------------- */
  141 +
  142 +/* ------------------------- View Sections Start ---------------------------------- */
  143 +
  144 +.ap-header
  145 +{
  146 + height: 50px;
  147 + line-height: 50px;
  148 +
  149 + text-align: left;
  150 + font-size: 0.9em;
  151 +
  152 + padding: 0 16px;
  153 +}
  154 +
  155 +.ap-dir-rtl .ap-header
  156 +{
  157 + text-align: right;
  158 +}
  159 +
  160 +.ap-theme-default .ap-header
  161 +{
  162 + height: 60px;
  163 + line-height: 60px;
  164 +}
  165 +
  166 +.ap-content
  167 +{
  168 + max-width: 480px;
  169 + margin: 0 auto;
  170 + font-size: 40px;
  171 +}
  172 +
  173 +.ap-content-top
  174 +{
  175 + height: 50px;
  176 + padding: 8px 16px;
  177 + color:#555;
  178 + text-align:center;
  179 +}
  180 +
  181 +.ap-content-switch
  182 +{
  183 + margin-top: 8px;
  184 + margin-bottom: 8px;
  185 +
  186 + text-align: center;
  187 +}
  188 +
  189 +.ap-content-switch-tab
  190 +{
  191 + border: 1px solid #009688;
  192 + padding: 5px 16px;
  193 +
  194 + cursor: pointer;
  195 + font-size: 0.6em;
  196 + color: #009688;
  197 +}
  198 +
  199 +.ap-dir-ltr .ap-content-switch-date
  200 +{
  201 + border-top-left-radius: 2px;
  202 + border-bottom-left-radius: 2px;
  203 +}
  204 +
  205 +.ap-dir-rtl .ap-content-switch-date
  206 +{
  207 + border-top-right-radius: 2px;
  208 + border-bottom-right-radius: 2px;
  209 + margin-left: -1px;
  210 +}
  211 +
  212 +.ap-dir-ltr .ap-content-switch-time
  213 +{
  214 + border-top-right-radius: 2px;
  215 + border-bottom-right-radius: 2px;
  216 + margin-left: -1px;
  217 +}
  218 +
  219 +.ap-dir-rtl .ap-content-switch-time
  220 +{
  221 + border-top-left-radius: 2px;
  222 + border-bottom-left-radius: 2px;
  223 +}
  224 +
  225 +.ap-content-switch-selected
  226 +{
  227 + background: #009688;
  228 + color: #FFFFFF;
  229 +}
  230 +
  231 +.ap-content-middle
  232 +{
  233 + min-height: 120px;
  234 +
  235 + padding-top: 20px;
  236 + padding-bottom: 20px;
  237 +}
  238 +
  239 +.ap-content-bottom
  240 +{
  241 + height: 50px;
  242 + padding: 8px 16px;
  243 + color:#555;
  244 + text-align:center;
  245 +}
  246 +
  247 +.ap-theme-default .ap-content-top,
  248 +.ap-theme-default .ap-content-bottom
  249 +{
  250 + font-size: 0.7em;
  251 +}
  252 +
  253 +.ap-footer
  254 +{
  255 + display: table;
  256 + table-layout: fixed;
  257 + width: 100%;
  258 +
  259 + height: 50px;
  260 +}
  261 +
  262 +.ap-theme-default .ap-footer
  263 +{
  264 + padding: 0 16px;
  265 +}
  266 +
  267 +.ap-theme-default .ap-footer-top
  268 +{
  269 + line-height: 55px;
  270 +}
  271 +
  272 +.ap-theme-default .ap-footer-bottom
  273 +{
  274 + line-height: 45px;
  275 +}
  276 +
  277 + .ap-header__title
  278 +{
  279 + color: #000000;
  280 + font-size: 1.2em;
  281 +}
  282 +
  283 + /* ------------------------- Buttons Start ---------------------------------- */
  284 +
  285 +.ap-theme-default .ap-button
  286 +{
  287 + cursor: pointer;
  288 +
  289 + letter-spacing: 0;
  290 + text-align: center;
  291 + font-size: 0.8em;
  292 +
  293 + padding: 8px 12px;
  294 + margin: 8px;
  295 +
  296 + color: #009688;
  297 + background: rgba(255, 255, 255, 1);
  298 +
  299 + text-transform: uppercase;
  300 +}
  301 +
  302 +.ap-theme-default .ap-button-cont
  303 +{
  304 + float: right;
  305 +}
  306 +
  307 +.ap-theme-default.ap-dir-rtl .ap-button-cont
  308 +{
  309 + float: left;
  310 +}
  311 +
  312 + /* ------------------------- Buttons End ---------------------------------- */
  313 +
  314 +/* ------------------------- View Sections End ---------------------------------- */
  315 +
  316 +
  317 +/* ------------------------- Animations Start ---------------------------------- */
  318 +
  319 +/* ------------------------------------------------------------------------------ */
  320 +
  321 +.ap-show
  322 +{
  323 + opacity: 0;
  324 +
  325 + animation: ap-anim-show ease 0.5s;
  326 + animation-iteration-count: 1;
  327 +
  328 + -webkit-animation: ap-anim-show ease 0.5s;
  329 + -webkit-animation-iteration-count: 1;
  330 +
  331 + -moz-animation: ap-anim-show ease 0.5s;
  332 + -moz-animation-iteration-count: 1;
  333 +
  334 + -o-animation: ap-anim-show ease 0.5s;
  335 + -o-animation-iteration-count: 1;
  336 +
  337 + -ms-animation: ap-anim-show ease 0.5s;
  338 + -ms-animation-iteration-count: 1;
  339 +
  340 + -moz-animation-fill-mode: forwards;
  341 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  342 + animation-fill-mode: forwards;
  343 +}
  344 +
  345 +@keyframes ap-anim-show
  346 +{
  347 + 0% { opacity:0; }
  348 + 100% { opacity:1; }
  349 +}
  350 +
  351 +@-moz-keyframes ap-anim-show
  352 +{
  353 + 0% { opacity:0; }
  354 + 100% { opacity:1; }
  355 +}
  356 +
  357 +@-webkit-keyframes ap-anim-show
  358 +{
  359 + 0% { opacity:0; }
  360 + 100% { opacity:1; }
  361 +}
  362 +
  363 +@-o-keyframes ap-anim-show
  364 +{
  365 + 0% { opacity:0; }
  366 + 100% { opacity:1; }
  367 +}
  368 +
  369 +/* ------------------------------------------------------------------------------ */
  370 +
  371 +.ap-hide
  372 +{
  373 + animation: ap-anim-hide ease 0.5s;
  374 + animation-iteration-count: 1;
  375 +
  376 + -moz-animation-fill-mode: forwards;
  377 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  378 + animation-fill-mode: forwards;
  379 +
  380 + -webkit-animation: ap-anim-hide ease 0.5s;
  381 + -webkit-animation-iteration-count: 1;
  382 +
  383 + -moz-animation: ap-anim-hide ease 0.5s;
  384 + -moz-animation-iteration-count: 1;
  385 +
  386 + -o-animation: ap-anim-hide ease 0.5s;
  387 + -o-animation-iteration-count: 1;
  388 +
  389 + -ms-animation: ap-anim-hide ease 0.5s;
  390 + -ms-animation-iteration-count: 1;
  391 +}
  392 +
  393 +@keyframes ap-anim-hide
  394 +{
  395 + 0% { opacity:1; }
  396 + 100% { opacity:0; }
  397 +}
  398 +
  399 +@-moz-keyframes ap-anim-hide
  400 +{
  401 + 0% { opacity:1; }
  402 + 100% { opacity:0; }
  403 +}
  404 +
  405 +@-webkit-keyframes ap-anim-hide
  406 +{
  407 + 0% { opacity:1; }
  408 + 100% { opacity:0; }
  409 +}
  410 +
  411 +@-o-keyframes ap-anim-hide
  412 +{
  413 + 0% { opacity:1; }
  414 + 100% { opacity:0; }
  415 +}
  416 +
  417 +/* ------------------------------------------------------------------------------ */
  418 +
  419 +.ap-bottom-slide-up
  420 +{
  421 + opacity: 0;
  422 +
  423 + animation: ap-anim-bottom-slide-up ease 0.5s;
  424 + animation-iteration-count: 1;
  425 +
  426 + -webkit-animation: ap-anim-bottom-slide-up ease 0.5s;
  427 + -webkit-animation-iteration-count: 1;
  428 +
  429 + -moz-animation: ap-anim-bottom-slide-up ease 0.5s;
  430 + -moz-animation-iteration-count: 1;
  431 +
  432 + -o-animation: ap-anim-bottom-slide-up ease 0.5s;
  433 + -o-animation-iteration-count: 1;
  434 +
  435 + -ms-animation: ap-anim-bottom-slide-up ease 0.5s;
  436 + -ms-animation-iteration-count: 1;
  437 +
  438 + -moz-animation-fill-mode: forwards;
  439 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  440 + animation-fill-mode: forwards;
  441 +}
  442 +
  443 +@keyframes ap-anim-bottom-slide-up
  444 +{
  445 + 100% { opacity: 1; bottom: 0; }
  446 +}
  447 +
  448 +@-moz-keyframes ap-anim-bottom-slide-up
  449 +{
  450 + 100% { opacity: 1; bottom: 0; }
  451 +}
  452 +
  453 +@-webkit-keyframes ap-anim-bottom-slide-up
  454 +{
  455 + 100% { opacity: 1; bottom: 0; }
  456 +}
  457 +
  458 +@-o-keyframes ap-anim-bottom-slide-up
  459 +{
  460 + 100% { opacity: 1; bottom: 0; }
  461 +}
  462 +
  463 +/* ------------------------------------------------------------------------------ */
  464 +
  465 +.ap-bottom-slide-down
  466 +{
  467 + opacity: 1;
  468 +
  469 + animation: ap-anim-bottom-slide-down ease 0.5s;
  470 + animation-iteration-count: 1;
  471 +
  472 + -webkit-animation: ap-anim-bottom-slide-down ease 0.5s;
  473 + -webkit-animation-iteration-count: 1;
  474 +
  475 + -moz-animation: ap-anim-bottom-slide-down ease 0.5s;
  476 + -moz-animation-iteration-count: 1;
  477 +
  478 + -o-animation: ap-anim-bottom-slide-down ease 0.5s;
  479 + -o-animation-iteration-count: 1;
  480 +
  481 + -ms-animation: ap-anim-bottom-slide-down ease 0.5s;
  482 + -ms-animation-iteration-count: 1;
  483 +
  484 + -moz-animation-fill-mode: forwards;
  485 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  486 + animation-fill-mode: forwards;
  487 +}
  488 +
  489 +@keyframes ap-anim-bottom-slide-down
  490 +{
  491 + 100% { opacity: 0; bottom: -1000px; }
  492 +}
  493 +
  494 +@-moz-keyframes ap-anim-bottom-slide-down
  495 +{
  496 + 100% { opacity: 0; bottom: -1000px; }
  497 +}
  498 +
  499 +@-webkit-keyframes ap-anim-bottom-slide-down
  500 +{
  501 + 100% { opacity: 0; bottom: -1000px; }
  502 +}
  503 +
  504 +@-o-keyframes ap-anim-bottom-slide-down
  505 +{
  506 + 100% { opacity: 0; bottom: -1000px; }
  507 +}
  508 +
  509 +/* ------------------------------------------------------------------------------ */
  510 +
  511 +.ap-top-slide-down
  512 +{
  513 + opacity: 0;
  514 +
  515 + animation: ap-anim-top-slide-down ease 0.5s;
  516 + animation-iteration-count: 1;
  517 +
  518 + -webkit-animation: ap-anim-top-slide-down ease 0.5s;
  519 + -webkit-animation-iteration-count: 1;
  520 +
  521 + -moz-animation: ap-anim-top-slide-down ease 0.5s;
  522 + -moz-animation-iteration-count: 1;
  523 +
  524 + -o-animation: ap-anim-top-slide-down ease 0.5s;
  525 + -o-animation-iteration-count: 1;
  526 +
  527 + -ms-animation: ap-anim-top-slide-down ease 0.5s;
  528 + -ms-animation-iteration-count: 1;
  529 +
  530 + -moz-animation-fill-mode: forwards;
  531 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  532 + animation-fill-mode: forwards;
  533 +}
  534 +
  535 +@keyframes ap-anim-top-slide-down
  536 +{
  537 + 100% { opacity: 1; top: 0; }
  538 +}
  539 +
  540 +@-moz-keyframes ap-anim-top-slide-down
  541 +{
  542 + 100% { opacity: 1; top: 0; }
  543 +}
  544 +
  545 +@-webkit-keyframes ap-anim-top-slide-down
  546 +{
  547 + 100% { opacity: 1; top: 0; }
  548 +}
  549 +
  550 +@-o-keyframes ap-anim-top-slide-down
  551 +{
  552 + 100% { opacity: 1; top: 0; }
  553 +}
  554 +
  555 +/* ------------------------------------------------------------------------------ */
  556 +
  557 +.ap-top-slide-up
  558 +{
  559 + opacity: 1;
  560 +
  561 + animation: ap-anim-top-slide-up ease 0.5s;
  562 + animation-iteration-count: 1;
  563 +
  564 + -webkit-animation: ap-anim-top-slide-up ease 0.5s;
  565 + -webkit-animation-iteration-count: 1;
  566 +
  567 + -moz-animation: ap-anim-top-slide-up ease 0.5s;
  568 + -moz-animation-iteration-count: 1;
  569 +
  570 + -o-animation: ap-anim-top-slide-up ease 0.5s;
  571 + -o-animation-iteration-count: 1;
  572 +
  573 + -ms-animation: ap-anim-top-slide-up ease 0.5s;
  574 + -ms-animation-iteration-count: 1;
  575 +
  576 + -moz-animation-fill-mode: forwards;
  577 + -webkit-animation-fill-mode: forwards; /* Chrome, Safari, Opera */
  578 + animation-fill-mode: forwards;
  579 +}
  580 +
  581 +@keyframes ap-anim-top-slide-up
  582 +{
  583 + 100% { opacity: 0; top: -1000px; }
  584 +}
  585 +
  586 +@-moz-keyframes ap-anim-top-slide-up
  587 +{
  588 + 100% { opacity: 0; top: -1000px; }
  589 +}
  590 +
  591 +@-webkit-keyframes ap-anim-top-slide-up
  592 +{
  593 + 100% { opacity: 0; top: -1000px; }
  594 +}
  595 +
  596 +@-o-keyframes ap-anim-top-slide-up
  597 +{
  598 + 100% { opacity: 0; top: -1000px; }
  599 +}
  600 +
  601 +/* ------------------------------------------------------------------------------ */
  602 +
  603 +.ap-theme-default .ap-button-active
  604 +{
  605 + animation: ap-anim-default-button-active ease 0.5s;
  606 + animation-iteration-count: 1;
  607 + animation-fill-mode:forwards;
  608 +
  609 + -webkit-animation: ap-anim-default-button-active ease 0.5s;
  610 + -webkit-animation-iteration-count: 1;
  611 + -webkit-animation-fill-mode:forwards;
  612 +
  613 + -moz-animation: ap-anim-default-button-active ease 0.5s;
  614 + -moz-animation-iteration-count: 1;
  615 + -moz-animation-fill-mode:forwards;
  616 +
  617 + -o-animation: ap-anim-default-button-active ease 0.5s;
  618 + -o-animation-iteration-count: 1;
  619 + -o-animation-fill-mode:forwards;
  620 +
  621 + -ms-animation: ap-anim-default-button-active ease 0.5s;
  622 + -ms-animation-iteration-count: 1;
  623 + -ms-animation-fill-mode:forwards;
  624 +}
  625 +
  626 +@keyframes ap-anim-default-button-active
  627 +{
  628 + 100% { background: #E0F2F1; }
  629 +}
  630 +
  631 +@-moz-keyframes ap-anim-default-button-active
  632 +{
  633 + 100% { background: #E0F2F1; }
  634 +}
  635 +
  636 +@-webkit-keyframes ap-anim-default-button-active
  637 +{
  638 + 100% { background: #E0F2F1; }
  639 +}
  640 +
  641 +@-o-keyframes ap-anim-default-button-active
  642 +{
  643 + 100% { background: #E0F2F1; }
  644 +}
  645 +
  646 +/* ------------------------------------------------------------------------------ */
  647 +
  648 +
  649 +
  650 +/* ------------------------- Animations End ---------------------------------- */
  651 +
  652 +
  653 +
  654 +
  655 +/* ------------------------- Picker Component Start ---------------------------------- */
  656 +
  657 +.ap-component-section
  658 +{
  659 + display: table;
  660 + table-layout: fixed;
  661 + width: 100%;
  662 +
  663 + background: #FFFFFF;
  664 +}
  665 +
  666 +.ap-loading
  667 +{
  668 + width: 100%;
  669 + height: 100%;
  670 +
  671 + z-index: 2;
  672 + background: #FFFFFF;
  673 +}
  674 +
  675 +.ap-component-section, ap-component-section *
  676 +{
  677 + -webkit-box-sizing: border-box;
  678 + -moz-box-sizing: border-box;
  679 + box-sizing: border-box;
  680 +
  681 + -webkit-touch-callout: none;
  682 + -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  683 +
  684 + -webkit-user-select: none;
  685 + -khtml-user-select: none;
  686 + -moz-user-select: none;
  687 + -ms-user-select: none;
  688 + user-select: none;
  689 +
  690 + -ms-touch-select: none;
  691 + -ms-touch-action: none;
  692 + touch-action: none;
  693 +}
  694 +
  695 +.ap-component
  696 +{
  697 + display: table-cell;
  698 +}
  699 +
  700 +.ap-component-label
  701 +{
  702 + text-align: center;
  703 + font-size: 0.7em;
  704 +}
  705 +
  706 +.ap-theme-default
  707 +{
  708 + color: #009688;
  709 +}
  710 +
  711 +.ap-component-plus, .ap-component-minus
  712 +{
  713 + background: #FFFFFF;
  714 + color: #BDBDBD;
  715 +
  716 + width: 100%;
  717 + height: 40px;
  718 + line-height: 40px;
  719 +
  720 + text-align: center;
  721 + font-size: 15px;
  722 +
  723 + cursor: pointer;
  724 +}
  725 +
  726 +.ap-component-cont
  727 +{
  728 + position: relative;
  729 + /*height: 200px;*/
  730 + overflow: hidden;
  731 +}
  732 +
  733 +.ap-component-data
  734 +{
  735 + position: absolute;
  736 + left: 0;
  737 + top: 0;
  738 + width: 100%;
  739 +
  740 + -webkit-backface-visibility: hidden;
  741 + -moz-backface-visibility: hidden;
  742 + backface-visibility: hidden;
  743 +
  744 + -webkit-transform-style: preserve-3d;
  745 + -moz-transform-style: preserve-3d;
  746 + transform-style: preserve-3d;
  747 +
  748 + -webkit-transform: translate3d(0, 0, 0);
  749 + -moz-transform: translate3d(0, 0, 0);
  750 + -o-transform: translate3d(0, 0, 0);
  751 + -ms-transform: translate3d(0, 0, 0);
  752 + transform: translate3d(0, 0, 0);
  753 +
  754 + -webkit-perspective: 1000px;
  755 + -moz-perspective: 1000px;
  756 + perspective: 1000px;
  757 +}
  758 +
  759 +.ap-row
  760 +{
  761 + height: 40px;
  762 + line-height: 40px;
  763 +
  764 + text-align: center;
  765 +
  766 + overflow: hidden;
  767 + text-overflow: clip;
  768 + white-space:nowrap;
  769 +
  770 + cursor: pointer;
  771 +
  772 + color: #000000;
  773 +}
  774 +
  775 +.ap-row-invalid
  776 +{
  777 + color: #FFCDD2;
  778 +}
  779 +
  780 +.ap-row-hidden
  781 +{
  782 + opacity: 0;
  783 +}
  784 +
  785 +.ap-component-selector
  786 +{
  787 + position: absolute;
  788 + left: 0;
  789 + top: 50%;
  790 + -webkit-transform: translateY(-50%);
  791 + -moz-transform: translateY(-50%);
  792 + -o-transform: translateY(-50%);
  793 + -ms-transform: translateY(-50%);
  794 + transform: translateY(-50%);
  795 +
  796 + width: 100%;
  797 + height: 40px;
  798 +
  799 + border-top: 1px solid #009688;
  800 + border-bottom: 1px solid #009688;
  801 +}
  802 +
  803 +.ap-theme-default .ap-component-selector
  804 +{
  805 + left: 10%;
  806 + width: 80%;
  807 +}
  808 +
  809 +.ap-component-gradient
  810 +{
  811 + position: absolute;
  812 + top: -1px;
  813 + left: 0;
  814 +
  815 + width: 100%;
  816 + height: 102%;
  817 +
  818 + cursor: pointer;
  819 +
  820 + /*
  821 + http://www.cssmatic.com/gradient-generator#'\-moz\-linear\-gradient\%28top\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.8\%29\%200\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.8\%29\%2030\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\%29\%2045\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\%29\%2055\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.8\%29\%2070\%25\%2C\%20rgba\%28255\%2C255\%2C255\%2C0\.8\%29\%20100\%25\%29\%3B'
  822 + */
  823 +
  824 + background: rgba(255,255,255,0.8);
  825 + background: -moz-linear-gradient(top, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.8) 30%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.8) 70%, rgba(255,255,255,0.8) 100%);
  826 + background: -webkit-gradient(left top, left bottom, color-stop(0%, rgba(255,255,255,0.8)), color-stop(30%, rgba(255,255,255,0.8)), color-stop(45%, rgba(255,255,255,0)), color-stop(55%, rgba(255,255,255,0)), color-stop(70%, rgba(255,255,255,0.8)), color-stop(100%, rgba(255,255,255,0.8)));
  827 + background: -webkit-linear-gradient(top, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.8) 30%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.8) 70%, rgba(255,255,255,0.8) 100%);
  828 + background: -o-linear-gradient(top, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.8) 30%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.8) 70%, rgba(255,255,255,0.8) 100%);
  829 + background: -ms-linear-gradient(top, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.8) 30%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.8) 70%, rgba(255,255,255,0.8) 100%);
  830 + background: linear-gradient(to bottom, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.8) 30%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 55%, rgba(255,255,255,0.8) 70%, rgba(255,255,255,0.8) 100%);
  831 + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff', GradientType=0 );
  832 +}
  833 +
  834 +/* ------------------------- Picker Component End ---------------------------------- */
  835 +
@@ -11,3 +11,6 @@ @@ -11,3 +11,6 @@
11 @import "form"; 11 @import "form";
12 @import "modal"; 12 @import "modal";
13 @import "loading"; 13 @import "loading";
  14 +@import "select";
  15 +@import "anypicker";
  16 +@import "anypicker-ios";
  1 +.select {
  2 + position: fixed;
  3 + bottom: 0px;
  4 + width: 100%;
  5 + background: #fff;
  6 + z-index: 1001;
  7 +
  8 + ul {
  9 + font-size: 34px;
  10 + text-align: center;
  11 +
  12 + li {
  13 + height: 100px;
  14 + line-height: 100px;
  15 + border-bottom: 1px solid #e0e0e0;
  16 + }
  17 +
  18 + .item-del {
  19 + margin-top: 10px;
  20 + border-top: 1px solid #e0e0e0;
  21 + color: #5c99e4
  22 + }
  23 + }
  24 +}
@@ -10,11 +10,13 @@ @@ -10,11 +10,13 @@
10 p:first-child { 10 p:first-child {
11 font-size: 34px; 11 font-size: 34px;
12 } 12 }
  13 +
13 p:nth-child(2) { 14 p:nth-child(2) {
14 font-size: 78px; 15 font-size: 78px;
15 color: #4a90e2; 16 color: #4a90e2;
16 line-height: 80px; 17 line-height: 80px;
17 } 18 }
  19 +
18 p:last-child { 20 p:last-child {
19 color: #b0b0b0; 21 color: #b0b0b0;
20 font-size: 28px; 22 font-size: 28px;
@@ -28,6 +30,7 @@ @@ -28,6 +30,7 @@
28 font-size: 28px; 30 font-size: 28px;
29 color: #b0b0b0; 31 color: #b0b0b0;
30 } 32 }
  33 +
31 .coin-detail-list { 34 .coin-detail-list {
32 padding: 0 30px; 35 padding: 0 30px;
33 background: $white; 36 background: $white;
@@ -69,6 +72,10 @@ @@ -69,6 +72,10 @@
69 .coin-num { 72 .coin-num {
70 font-size: 34px; 73 font-size: 34px;
71 line-height: 92px; 74 line-height: 92px;
  75 +
  76 + i {
  77 + font-style: normal;
  78 + }
72 } 79 }
73 } 80 }
74 } 81 }
@@ -13,16 +13,16 @@ @@ -13,16 +13,16 @@
13 13
14 li { 14 li {
15 &:first-of-type { 15 &:first-of-type {
16 - height: 100px;  
17 - line-height: 100px; 16 + height: 130px;
  17 + line-height: 130px;
18 } 18 }
19 19
20 - height: 80px; 20 + height: 90px;
21 border-bottom: 1px solid #e0e0e0; 21 border-bottom: 1px solid #e0e0e0;
22 22
23 .details-icon { 23 .details-icon {
24 float: right; 24 float: right;
25 - height: 90px; 25 + height: 100%;
26 margin-right: 15px; 26 margin-right: 15px;
27 27
28 .icon { 28 .icon {
@@ -40,8 +40,8 @@ @@ -40,8 +40,8 @@
40 } 40 }
41 41
42 .head-portrait { 42 .head-portrait {
43 - width: 90px;  
44 - height: 90px; 43 + width: 92px;
  44 + height: 92px;
45 overflow: hidden; 45 overflow: hidden;
46 border-radius: 50%; 46 border-radius: 50%;
47 border: 1px solid #eee; 47 border: 1px solid #eee;
@@ -51,8 +51,8 @@ @@ -51,8 +51,8 @@
51 > label { 51 > label {
52 width: 100%; 52 width: 100%;
53 height: 100%; 53 height: 100%;
54 - line-height: 80px;  
55 - font-size: 32px; 54 + line-height: 90px;
  55 + font-size: 34px;
56 margin-right: 8%; 56 margin-right: 8%;
57 text-overflow: ellipsis; 57 text-overflow: ellipsis;
58 white-space: nowrap; 58 white-space: nowrap;
  1 +.exchange-status {
  2 + background: #f6f6f6;
  3 + padding-bottom: 170px;
  4 +
  5 + > div {
  6 + padding: 0 30px;
  7 + background: #fff;
  8 + }
  9 + .status-desc {
  10 + display: flex;
  11 + height: 80px;
  12 + line-height: 80px;
  13 + color: $white;
  14 + background: $black;
  15 + p:first-of-type {
  16 + flex: 1;
  17 + font-size: 34px;
  18 + }
  19 + }
  20 + .exchange-progress {
  21 + border-bottom: 1px solid #eee;
  22 +
  23 + li {
  24 + position: relative;
  25 + padding-left: 55px;
  26 +
  27 + .progress-desc {
  28 + padding: 30px 0;
  29 + border-bottom: 1px solid #eee;
  30 + }
  31 +
  32 + &:before {
  33 + content: "";
  34 + position: absolute;
  35 + left: 0;
  36 + top: 50%;
  37 + width: 17px;
  38 + height: 17px;
  39 + margin-top: -8px;
  40 + background: #b0b0b0;
  41 + border-radius: 50%;
  42 + z-index: 1;
  43 + }
  44 +
  45 + &:after {
  46 + content: "";
  47 + position: absolute;
  48 + left: 8px;
  49 + top: 0;
  50 + width: 1px;
  51 + height: 100%;
  52 + background: #eee;
  53 + }
  54 +
  55 + &.passed {
  56 + &:before {
  57 + background: #000;
  58 + }
  59 + }
  60 +
  61 + p:first-of-type {
  62 + flex: 1;
  63 + font-size: 34px;
  64 + }
  65 +
  66 + time {
  67 + color: #b0b0b0;
  68 + }
  69 + }
  70 + .progress-todo {
  71 + padding: 25px 0;
  72 + text-align: center;
  73 + p:first-of-type {
  74 + font-size: 34px;
  75 +
  76 + b {
  77 + color: #4a90e2;
  78 + }
  79 + }
  80 +
  81 + .phone {
  82 + color: #b0b0b0;
  83 + }
  84 + }
  85 + }
  86 + .exchange-details {
  87 + margin-top: 20px;
  88 + border-top: 1px solid #eee;
  89 + border-bottom: 1px solid #eee;
  90 +
  91 + h2 {
  92 + height: 88px;
  93 + font-size: 32px;
  94 + line-height: 88px;
  95 +
  96 + i {
  97 + display: inline-block;
  98 + font-size: 16px;
  99 + font-style: normal;
  100 + font-weight: normal;
  101 + color: #b0b0b0;
  102 + }
  103 + }
  104 +
  105 + }
  106 + .exchange-product {
  107 + border-top: 1px solid #eee;
  108 + border-bottom: 1px solid #eee;
  109 +
  110 + .goods-info {
  111 + display: flex;
  112 + padding: 20px 0;
  113 + border-bottom: 1px solid #eee;
  114 +
  115 + &:last-child {
  116 + border-bottom: 0 none;
  117 + }
  118 + }
  119 + .img-box {
  120 + position: relative;
  121 + width: 98px;
  122 + height: 130px;
  123 + overflow: hidden;
  124 +
  125 + label {
  126 + position: absolute;
  127 + left: 0;
  128 + bottom: 0;
  129 + width: 100%;
  130 + height: 30px;
  131 + line-height: 30px;
  132 + background: rgba(0, 0, 0, 0.2);
  133 + color: $white;
  134 + text-align: center;
  135 + }
  136 + img {
  137 + width: 100%;
  138 + height: 100%;
  139 + }
  140 + }
  141 + .goods-detail {
  142 + flex: 1;
  143 + margin: 0 20px;
  144 + font-size: 24px;
  145 +
  146 + span {
  147 + margin-right: 40px;
  148 + }
  149 + .name {
  150 + display: -webkit-box;
  151 + -webkit-line-clamp: 2;
  152 + -webkit-box-orient: vertical;
  153 + text-overflow: ellipsis;
  154 + height: 2.4em;
  155 + line-height: 1.25;
  156 + overflow: hidden;
  157 + font-size: 28px;
  158 + }
  159 + .size {
  160 + color: #b0b0b0;
  161 + }
  162 + }
  163 + .goods-price {
  164 + text-align: right;
  165 +
  166 + p:first-of-type {
  167 + font-size: 28px;
  168 + }
  169 + p:last-of-type {
  170 + font-size: 30px;
  171 + color: #b0b0b0;
  172 + }
  173 + }
  174 + }
  175 + .exchange-reason {
  176 + padding: 20px 0;
  177 + font-size: 28px;
  178 + blockquote {
  179 + margin-top: 20px;
  180 + color: #b0b0b0;
  181 + }
  182 + }
  183 + .exchange-img {
  184 + display: flex;
  185 + margin-top: 25px;
  186 + margin-bottom: 10px;
  187 +
  188 + li {
  189 + width: 154px;
  190 + height: 154px;
  191 + margin-right: 25px;
  192 +
  193 + img {
  194 + width: 154px;
  195 + height: 154px;
  196 + }
  197 + }
  198 + }
  199 + .exchange-address {
  200 + position: relative;
  201 + padding: 20px 30px 27px;
  202 + margin-bottom: 20px;
  203 + border-top: 1px solid #eee;
  204 + word-wrap: break-word;
  205 +
  206 + p:first-of-type {
  207 + font-size: 32px;
  208 + font-weight: 700;
  209 +
  210 + span {
  211 + margin-right: 40px;
  212 + }
  213 + }
  214 + p:last-of-type {
  215 + font-size: 28px;
  216 + color: #b0b0b0;
  217 + }
  218 + }
  219 + .exchange-express {
  220 + margin-top: 20px;
  221 + }
  222 + .exchange-order,
  223 + .exchange-type {
  224 + display: flex;
  225 + position: relative;
  226 + height: 88px;
  227 + margin-top: 20px;
  228 + line-height: 88px;
  229 + font-size: 34px;
  230 + border-top: 1px solid #eee;
  231 + border-bottom: 1px solid #eee;
  232 +
  233 + .primary {
  234 + flex: 1;
  235 + }
  236 + .cell-ft {
  237 + color: #b0b0b0;
  238 + &:after {
  239 + content: "\e607";
  240 + display: inline-block;
  241 + font-size: 15px;
  242 + margin-left: 5px;
  243 + font-family: iconfont;
  244 + -webkit-transform: rotate(-90deg);
  245 + transform: rotate(-90deg);
  246 + margin-right: -5px;
  247 + color: #999;
  248 + }
  249 + }
  250 + }
  251 + .exchange-options {
  252 + position: fixed;
  253 + left: 0;
  254 + right: 0;
  255 + bottom: 0;
  256 + z-index: 10;
  257 + padding: 30px 20px;
  258 + border-top: 1px solid #eee;
  259 + text-align: right;
  260 + background: #fff;
  261 +
  262 + button {
  263 + padding: 0 20px;
  264 + height: 68px;
  265 + line-height: 68px;
  266 + color: $black;
  267 + text-align: center;
  268 + -webkit-appearance: none;
  269 + border: 0 none;
  270 + background: $white;
  271 + font-size: 28px;
  272 +
  273 + &.black {
  274 + width: 192px;
  275 + color: $white;
  276 + background: $black;
  277 + }
  278 + &.countdown {
  279 + color: $white;
  280 + background: $black;
  281 + }
  282 + &.normal {
  283 + width: 188px;
  284 + padding: 0;
  285 + border: 1px solid $black;
  286 + color: $black;
  287 + }
  288 + &:focus {
  289 + outline: none;
  290 + }
  291 + }
  292 + }
  293 +}
@@ -6,3 +6,4 @@ @@ -6,3 +6,4 @@
6 @import "about-us"; 6 @import "about-us";
7 @import "coin"; 7 @import "coin";
8 @import "logistics"; 8 @import "logistics";
  9 +@import "exchange-status";
@@ -59,10 +59,23 @@ $white: #fff; @@ -59,10 +59,23 @@ $white: #fff;
59 } 59 }
60 } 60 }
61 .img-box { 61 .img-box {
  62 + position: relative;
62 width: 98px; 63 width: 98px;
63 height: 130px; 64 height: 130px;
64 overflow: hidden; 65 overflow: hidden;
65 66
  67 + label {
  68 + position: absolute;
  69 + left: 0;
  70 + bottom: 0;
  71 + width: 100%;
  72 + height: 30px;
  73 + line-height: 30px;
  74 + background: rgba(0, 0, 0, 0.2);
  75 + color: $white;
  76 + text-align: center;
  77 + }
  78 +
66 img { 79 img {
67 width: 100%; 80 width: 100%;
68 height: 100%; 81 height: 100%;
@@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
27 const $ = require('yoho-jquery'); 27 const $ = require('yoho-jquery');
28 const tip = require('common/tip'); 28 const tip = require('common/tip');
29 const bus = require('common/vue-bus'); 29 const bus = require('common/vue-bus');
  30 + const interceptClick = require('common/intercept-click');
30 const contentCode = require('content-code'); 31 const contentCode = require('content-code');
31 32
32 const focus = require('./focus.vue'); 33 const focus = require('./focus.vue');
@@ -98,6 +99,12 @@ @@ -98,6 +99,12 @@
98 bus.$on('channel.change', (page, channel) => { 99 bus.$on('channel.change', (page, channel) => {
99 this.contentCode = contentCode[page][channel]; 100 this.contentCode = contentCode[page][channel];
100 }); 101 });
  102 + },
  103 + attached() {
  104 + $('.resources').on('click', 'a', function() {
  105 + interceptClick($(this).attr('href'));
  106 + return false;
  107 + });
101 } 108 }
102 }; 109 };
103 </script> 110 </script>
  1 +<template>
  2 + <div class="coin-detail">
  3 + <p>明细列表</p>
  4 + <ul class="coin-detail-list">
  5 + <li v-for="coin in coinList">
  6 + <div class="coin-source">
  7 + <p>{{coin.message}}</p>
  8 + <time>{{coin.date}}</time>
  9 + </div>
  10 + <div class="coin-num"><i v-if="coin.num>0">+</i>{{coin.num}}</div>
  11 + </li>
  12 + </ul>
  13 + </div>
  14 +</template>
  15 +<script>
  16 + 'use strict';
  17 +
  18 + const $ = require('yoho-jquery');
  19 + const tip = require('common/tip');
  20 +
  21 + // const Modal = require('common/modal');
  22 +
  23 + module.exports = {
  24 + data() {
  25 + return {
  26 + page: 0,
  27 + limit: 15,
  28 + coinList: [],
  29 + busy: false,
  30 + };
  31 + },
  32 +
  33 + ready() {
  34 + this.getCoinData();
  35 + },
  36 +
  37 + methods: {
  38 + getCoinData() {
  39 + let _that = this;
  40 +
  41 + this.busy = true;
  42 + $.ajax({
  43 + url: '/home/coin-detail',
  44 + data: {
  45 + page: ++this.page,
  46 + limit: this.limit
  47 + }
  48 + }).then(result => {
  49 + if (result.code === 200) {
  50 + if (result.isend) {
  51 + _that.busy = true;
  52 + } else {
  53 + _that.busy = false;
  54 + }
  55 + if (result.data.coinlist.length > 0) {
  56 + this.$set('coinList', result.data.coinlist);
  57 + }
  58 + }
  59 + }).fail(() => {
  60 + tip('网络错误');
  61 + });
  62 + }
  63 + }
  64 + };
  65 +</script>
1 <template> 1 <template>
2 <ul> 2 <ul>
3 <li> 3 <li>
4 - <label>头像 4 + <label @click="selicon">头像
5 <span class="details-icon"> 5 <span class="details-icon">
6 - <span class="head-portrait user-avatar" data-avatar="{{head_ico}}"></span> 6 + <span class="head-portrait user-avatar" :style='icoStyle'></span>
7 <span class="icon icon-right"></span> 7 <span class="icon icon-right"></span>
8 </span> 8 </span>
9 </label> 9 </label>
@@ -12,20 +12,55 @@ @@ -12,20 +12,55 @@
12 <label>昵称<input class="details-nickname" v-model='nickname'></label> 12 <label>昵称<input class="details-nickname" v-model='nickname'></label>
13 </li> 13 </li>
14 <li> 14 <li>
15 - <label>性别<span class="details-gender">{{ gender }}</span></label> 15 + <label @click="selgender">性别<span class="details-gender">{{ gender }}</span></label>
16 </li> 16 </li>
17 <li> 17 <li>
18 - <label>生日<span class="details-birthday">{{ birthday }}</span></label> 18 + <label>生日<input id="birthday" class="details-birthday" type="text" v-model='birthday' readonly></input>
19 </li> 19 </li>
20 </ul> 20 </ul>
21 </template> 21 </template>
22 22
23 <script> 23 <script>
  24 + const $ = require('yoho-jquery');
  25 + const dtpicker = require('common/anypicker');
  26 + const Select = require('common/select');
  27 + const iconSel = Select(['拍照','从相册选择']);
  28 + const genderSel = Select(['MEN', 'WOMEN']);
  29 +
24 module.exports = { 30 module.exports = {
25 props: ['head_ico', 'nickname', 'gender', 'birthday'], 31 props: ['head_ico', 'nickname', 'gender', 'birthday'],
26 data() { 32 data() {
27 return { 33 return {
  34 + icoStyle: this.head_ico ? 'background-image:url(' + this.head_ico + ');' : ''
28 }; 35 };
  36 + },
  37 + methods: {
  38 + selicon: function(){
  39 + iconSel.show(function(item) {
  40 + if (item === '拍照') {
  41 + console.log('拍照');
  42 + }
  43 +
  44 + if (item === '从相册选择') {
  45 + console.log('从相册选择');
29 } 46 }
  47 + });
  48 + },
  49 + selgender: function(){
  50 + let _this = this;
  51 +
  52 + genderSel.show(function(item) {
  53 + _this.gender = item.toLowerCase();
  54 + })
  55 + }
  56 + },
  57 + ready: function(){
  58 + $("#birthday").AnyPicker({
  59 + mode: "datetime",
  60 + dateTimeFormat: "yyyy. MM. dd",
  61 + theme: "iOS"
  62 + });
  63 + }
  64 +
30 }; 65 };
31 </script> 66 </script>
  1 +<template>
  2 + <ul v-infinite-scroll="getOrderData()" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
  3 + <li class="order-item" v-for="(index, order) in orderList">
  4 + <div class="order-detail">
  5 + <div class="order-code">
  6 + <div class="code-time">
  7 + <p>订单号:{{order.orderCode}}</p>
  8 + <p>申请时间:{{order.orderCreateTime}}</p>
  9 + </div>
  10 + <p>{{order.statusName}}</p>
  11 + </div>
  12 + <div class="order-goods">
  13 + <div class="goods-info" v-for="product in order.goods">
  14 + <div class="img-box">
  15 + <img v-bind:src="product.goodsImage | resize 49 65" alt="{{product.productName}}">
  16 + <label v-if="product.goodsType == 'gift'">赠品</label>
  17 + </div>
  18 + <div class="goods-detail">
  19 + <p class="name">{{product.productName}}</p>
  20 + <p class="size">
  21 + <span>颜色: {{product.colorName}}</span>
  22 + <span>尺码: {{product.sizeName}}</span>
  23 + </p>
  24 + </div>
  25 + <div class="goods-price">
  26 + <p>&yen;{{product.salesPrice}}</p>
  27 + <p>×1</p>
  28 + </div>
  29 + </div>
  30 + </div>
  31 + <div class="order-option">
  32 + <div class="goods-total"></div>
  33 + <div class="options" v-show="order.canCancel == 'Y'">
  34 + <button v-if="order.canCancel == 'Y'" class="normal">取消申请</button>
  35 + </div>
  36 + </div>
  37 + </div>
  38 + </li>
  39 + </ul>
  40 +</template>
  41 +<script>
  42 + 'use strict';
  43 +
  44 + const $ = require('yoho-jquery');
  45 + const tip = require('common/tip');
  46 +
  47 + //const Modal = require('common/modal');
  48 +
  49 + module.exports = {
  50 + data() {
  51 + return {
  52 + page: 0,
  53 + limit: 10,
  54 + orderList: [],
  55 + busy: false,
  56 + };
  57 + },
  58 +
  59 + ready() {
  60 + this.getOrderData();
  61 + },
  62 +
  63 + methods: {
  64 + getOrderData() {
  65 + let _that = this;
  66 +
  67 + this.busy = true;
  68 + $.ajax({
  69 + url: '/home/refund/get-orders',
  70 + data: {
  71 + page: ++this.page,
  72 + limit: this.limit
  73 + }
  74 + }).then(result => {
  75 + if (result.isend) {
  76 + _that.busy = true;
  77 + } else {
  78 + _that.busy = false;
  79 + }
  80 + if (result.data.list.length > 0) {
  81 + this.$set('orderList', result.data.list);
  82 + }
  83 + }).fail(() => {
  84 + tip('网络错误');
  85 + });
  86 + },
  87 + cancelApply(code) {
  88 + $.ajax({
  89 + url: '/home/cancel-apply',
  90 + type: 'post',
  91 + data: {
  92 + orderCode: code
  93 + }
  94 + }).then(result => {
  95 + if (result.code === 200) {
  96 + location.reload();
  97 + } else {
  98 + tip(result.message);
  99 + }
  100 + }).fail(() => {
  101 + tip('操作失敗');
  102 + });
  103 + }
  104 + }
  105 + };
  106 +</script>
  107 +<style>
  108 + html,
  109 + body {
  110 + height: 100%;
  111 + }
  112 +
  113 + @import "../../scss/home/_order.css";
  114 +
  115 + .order-wrapper {
  116 + height: 100%;
  117 +
  118 + ul {
  119 + height: 100%;
  120 + overflow-y: auto;
  121 + -webkit-overflow-scrolling: touch;
  122 + }
  123 + }
  124 +</style>