Authored by 陈轩

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

... ... @@ -54,13 +54,15 @@ module.exports = {
infoFile: {
name: 'info',
level: 'info',
filename: 'logs/info.log'
filename: 'logs/info.log',
maxFiles: 7
},
errorFile: {
name: 'error',
level: 'error',
filename: 'logs/error.log',
handleExceptions: true
handleExceptions: true,
maxFiles: 7
},
udp: { // send by udp
level: 'debug', // logger level
... ... @@ -99,7 +101,7 @@ if (isProduction) {
useOneapm: true,
useCache: true,
interfaceShunt: {
useInterfaceShunt: true,
useInterfaceShunt: false,
tencentServers: {
api: ['123.206.1.98', '123.206.2.80'],
service: ['123.206.1.98', '123.206.2.80']
... ...
/**
* 内容码配置文件
* @author: 赵彪<bill.zhao@yoho.cn>
* @date: 2016/06/23
*/
'use strict';
const channel = {
men: '9ee58aadd9559d07207fe4a98843eaac',
women: '3ad8826fc89fb0d023a4cd06a6991219',
lifestyle: 'aa8d34c85934c2ccc16e2babd3eb5e47'
};
const brand = {
men: '9ee58aadd9559d07207fe4a98843eaac',
women: 'aa8d34c85934c2ccc16e2babd3eb5e47',
lifestyle: '3ad8826fc89fb0d023a4cd06a6991219'
};
const cate = {
men: '9ee58aadd9559d07207fe4a98843eaac',
women: 'aa8d34c85934c2ccc16e2babd3eb5e47',
lifestyle: '3ad8826fc89fb0d023a4cd06a6991219'
};
module.exports = {
channel,
brand,
cate
};
# blk-wap项目中的一些注意点
## 框架结构
首先,我们先说一下blk-wap项目的架构,这样便于后面的人能够快速上手
1. 服务端:node的express框架
2. ui端:vue + gulp + webpack
## 目录结构
apps: node服务端业务代码
config: 配置信息
doraemon:express中全局的一些中间件,以及views目录下的一些模版文件
public: 前段ui代码(css,js,vue等)以及打包工具(gulp,webpack)
utils:辅助工具方法
app.js: node服务入口文件
dispatch.js :路由分发文件
## vue
关于vue部分,如果不熟悉的话,大家可以查看一下官方文档
http://cn.vuejs.org/guide/
这里面主要是组件方面知识,用的比较多。
## 与app端的交互
混合模式下,比较麻烦的地方是与app原生端的交互。因为有些业务处理需要app端配合处理。
1.
涉及到与app端跳转相关的逻辑可参看:public/js/common/intercept-click.js文件
具体规则可参看:http://git.yoho.cn/mobile/AppJSBridge/tree/master
2.
监听app端事件参看:public/js/common/vue-bus.js文件,是通过一个全局的vue实例的on及emit来处理的。
## h5页面刷新
目前页面跳转时。有些场合下需要刷新页面,由于刷新的逻辑在每个页面都不同,所以app端很难来处理。没办法,只能由h5这边来做了。
那h5这边是怎么拿到前一个页面的状态,来判定本页面是否需要刷新呢?
我们目前的做法是通过localstroage来处理的,也就是yoho.js中的 store属性。
如果,你有更好的想法,欢迎提出来。
... ...
... ... @@ -6,8 +6,8 @@
const channel = {
men: '9ee58aadd9559d07207fe4a98843eaac',
women: 'aa8d34c85934c2ccc16e2babd3eb5e47',
lifestyle: '3ad8826fc89fb0d023a4cd06a6991219'
women: '3ad8826fc89fb0d023a4cd06a6991219',
lifestyle: 'aa8d34c85934c2ccc16e2babd3eb5e47'
};
/* 品牌一览资源位 */
... ...
... ... @@ -13,23 +13,15 @@
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html {
height: 100%;
width: 100%;
overflow: hidden;
body {
width: 100%;
height: 100%;
overflow-y: scroll;
html,
body {
font-size: 24px;
font-family: "PingFang SC", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
line-height: 1.4;
}
}
/* stylelint-disable */
.app::-webkit-scrollbar {
::-webkit-scrollbar {
display: none;
}
/* stylelint-enable */
... ... @@ -97,7 +89,7 @@ ul {
}
img[lazy] {
transition: all 200ms;
transition: all 100ms;
}
img[lazy=loading] {
... ...
... ... @@ -17,6 +17,10 @@
.resources {
margin-top: 100px;
.recommend-content-five a {
height: 186px;
}
}
</style>
<script>
... ...
... ... @@ -7,7 +7,8 @@
</div>
</template>
<a class="item ellipsis" href="{{item.sortUrl}}">
{{(item.sortNameEn || '').trim()}}{{item.sortName}}
<span class="en">{{(item.sortNameEn || '').trim()}}</span>
<span class="cn">{{item.sortName}}</span>
</a>
</template>
</div>
... ... @@ -54,6 +55,7 @@
left: 0;
overflow-x: hidden;
overflow-y: auto;
background: #f6f6f6;
}
.sidebar {
... ... @@ -65,11 +67,20 @@
padding: 0 30px;
height: 124px;
line-height: 124px;
font-size: 36px;
font-size: 30px;
font-weight: bold;
font-family: "BrownStd-Bold", "PingFang SC", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
.en {
font-size: 36px;
}
.cn {
margin-left: -6px;
}
&:first-child {
font-size: 36px;
height: 142px;
line-height: 142px;
font-family: "PingFang SC", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
... ... @@ -85,10 +96,14 @@
border-bottom: 1px solid #eee;
}
&:last-child:after {
&:last-child {
border-bottom: 1px solid #eee;
&:after {
content: none;
}
}
}
.sep {
margin-top: -1px;
... ... @@ -99,6 +114,7 @@
border-bottom: 1px solid #eee;
& + .item {
font-size: 36px;
height: 142px;
line-height: 142px;
font-family: "PingFang SC", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
... ...
... ... @@ -140,16 +140,14 @@
let ghost2 = false;
let ghost3 = false;
let myHeaderTop = $('.my-header').offset().top;
if (myHeaderTop < -40) {
if (window.scrollY > 40) {
ghost = false;
ghost2 = false;
ghost3 = false;
} else if (myHeaderTop < -25) {
} else if (window.scrollY > 25) {
ghost = false;
ghost3 = true;
} else if (myHeaderTop < -10) {
} else if (window.scrollY > 10) {
ghost = false;
ghost2 = true;
}
... ... @@ -167,17 +165,15 @@
return false;
});
let body = $('body');
body.on('touchmove', () => {
window.addEventListener('touchmove', () => {
this.toggle();
});
body.on('scroll', () => {
window.addEventListener('scroll', () => {
this.toggle();
});
body.on('visibilitychange', () => {
document.addEventListener('visibilitychange', () => {
if (!document.hidden) {
this.reload();
}
... ...
... ... @@ -19,7 +19,6 @@
<script>
const yoho = require('yoho');
const cheader = require('component/header.vue');
const $ = require('jquery');
module.exports = {
data() {
... ... @@ -46,15 +45,15 @@
},
created() {
$('body').on('scroll', () => {
window.onscroll = () => {
let transparent = true;
if ($('.image-carousel').offset().top < -20) {
if (window.scrollY > 20) {
transparent = false;
}
this.$refs.header.$el.classList.toggle('ghost', transparent);
});
};
}
};
</script>
... ...
... ... @@ -86,9 +86,9 @@
},
changeTopStatus() {
let topChange = true;
let topHeight = $('.brand-top-box').offset().top;
let topHeight = document.body.scrollTop;
if (topHeight < -200) {
if (topHeight > 100) {
topChange = false;
}
... ... @@ -99,7 +99,7 @@
this.domain = this.shareData.domain;
if (this.shareData.isBlkShop) {
$('body').on('scroll', this.changeTopStatus);
window.onscroll = this.changeTopStatus;
}
}
};
... ...