Authored by 陈峰

add cube ui

<template>
<button class="btn" :class="classes" type="button" @touchstart="onTouchstart" @touchend="onTouchend">
<button class="btn" :class="classes" type="button" @touchstart="onTouchstart" @touchend.prevent.stop="onTouchend">
<span>
<slot></slot>
</span>
... ...
import Button from './button';
export default {
Button
};
<template>
<div ref="wrapper" class="list-wrapper">
<div class="scroll-content">
<div ref="listWrapper">
<slot></slot>
</div>
<slot name="pullup"
:pullUpLoad="pullUpLoad"
:isPullUpLoad="isPullUpLoad"
>
<div class="pullup-wrapper" v-if="pullUpLoad">
<div class="before-trigger" v-if="!isPullUpLoad">
<span>{{pullUpTxt}}</span>
</div>
<div class="after-trigger" v-else>
<span>...</span>
</div>
</div>
</slot>
</div>
<slot name="pulldown"
:pullDownRefresh="pullDownRefresh"
:pullDownStyle="pullDownStyle"
:beforePullDown="beforePullDown"
:isPullingDown="isPullingDown"
:bubbleY="bubbleY"
>
<div ref="pulldown" class="pulldown-wrapper" :style="pullDownStyle" v-if="pullDownRefresh">
<div class="before-trigger" v-if="beforePullDown">
<span :y="bubbleY">bubbleY</span>
</div>
<div class="after-trigger" v-else>
<div v-if="isPullingDown" class="loading">
<span>...</span>
</div>
<div v-else><span>{{refreshTxt}}</span></div>
</div>
</div>
</slot>
</div>
</template>
<script>
import {BetterScroll} from 'cube-ui';
function getRect(el) {
if (el instanceof window.SVGElement) {
let rect = el.getBoundingClientRect();
return {
top: rect.top,
left: rect.left,
width: rect.width,
height: rect.height
};
} else {
return {
top: el.offsetTop,
left: el.offsetLeft,
width: el.offsetWidth,
height: el.offsetHeight
};
}
}
const DIRECTION_H = 'horizontal';
const DIRECTION_V = 'vertical';
export default {
name: 'ScrollView',
props: {
data: {
type: Array,
default: function() {
return [];
}
},
probeType: {
type: Number,
default: 1
},
click: {
type: Boolean,
default: true
},
listenScroll: {
type: Boolean,
default: false
},
listenBeforeScroll: {
type: Boolean,
default: false
},
listenScrollEnd: {
type: Boolean,
default: false
},
direction: {
type: String,
default: DIRECTION_V
},
scrollbar: {
type: null,
default: false
},
pullDownRefresh: {
type: null,
default: false
},
pullUpLoad: {
type: null,
default: false
},
startY: {
type: Number,
default: 0
},
refreshDelay: {
type: Number,
default: 20
},
freeScroll: {
type: Boolean,
default: false
},
mouseWheel: {
type: Boolean,
default: false
},
bounce: {
default: true
},
zoom: {
default: false
}
},
data() {
return {
beforePullDown: true,
isRebounding: false,
isPullingDown: false,
isPullUpLoad: false,
pullUpDirty: true,
pullDownStyle: '',
bubbleY: 0
};
},
computed: {
pullUpTxt() {
const moreTxt = (this.pullUpLoad && this.pullUpLoad.txt && this.pullUpLoad.txt.more) || '加载完成';
const noMoreTxt = (this.pullUpLoad && this.pullUpLoad.txt && this.pullUpLoad.txt.noMore) || '没有更多了';
return this.pullUpDirty ? moreTxt : noMoreTxt;
},
refreshTxt() {
return (this.pullDownRefresh && this.pullDownRefresh.txt) || '加载完成';
}
},
created() {
this.pullDownInitTop = -50;
},
mounted() {
setTimeout(() => {
this.initScroll();
}, 20);
},
methods: {
initScroll() {
if (!this.$refs.wrapper) {
return;
}
if (this.$refs.listWrapper && (this.pullDownRefresh || this.pullUpLoad)) {
this.$refs.listWrapper.style.minHeight = `${getRect(this.$refs.wrapper).height + 1}px`;
}
let options = {
probeType: this.probeType,
click: this.click,
scrollY: this.freeScroll || this.direction === DIRECTION_V,
scrollX: this.freeScroll || this.direction === DIRECTION_H,
scrollbar: this.scrollbar,
pullDownRefresh: this.pullDownRefresh,
pullUpLoad: this.pullUpLoad,
startY: this.startY,
freeScroll: this.freeScroll,
mouseWheel: this.mouseWheel,
bounce: this.bounce,
zoom: this.zoom
};
this.scroll = new BetterScroll(this.$refs.wrapper, options);
if (this.listenScrollEnd) {
this.scroll.on('scrollEnd', (pos) => {
this.$emit('scroll-end', pos);
});
}
if (this.listenBeforeScroll) {
this.scroll.on('beforeScrollStart', () => {
this.$emit('beforeScrollStart');
});
this.scroll.on('scrollStart', () => {
this.$emit('scroll-start');
});
}
if (this.pullDownRefresh) {
this._initPullDownRefresh();
}
if (this.pullUpLoad) {
this._initPullUpLoad();
}
},
disable() {
this.scroll && this.scroll.disable();
},
enable() {
this.scroll && this.scroll.enable();
},
refresh() {
this.scroll && this.scroll.refresh();
},
scrollTo() {
this.scroll && this.scroll.scrollTo.apply(this.scroll, arguments);
},
scrollToElement() {
this.scroll && this.scroll.scrollToElement.apply(this.scroll, arguments);
},
destroy() {
this.scroll.destroy();
},
forceUpdate(dirty) {
if (this.pullDownRefresh && this.isPullingDown) {
this.isPullingDown = false;
this._reboundPullDown().then(() => {
this._afterPullDown();
});
} else if (this.pullUpLoad && this.isPullUpLoad) {
this.isPullUpLoad = false;
this.scroll.finishPullUp();
this.pullUpDirty = dirty;
this.refresh();
} else {
this.refresh();
}
},
_initPullDownRefresh() {
this.scroll.on('pullingDown', () => {
this.beforePullDown = false;
this.isPullingDown = true;
this.$emit('pullingDown');
});
this.scroll.on('scroll', (pos) => {
if (!this.pullDownRefresh) {
return;
}
if (this.beforePullDown) {
this.bubbleY = Math.max(0, pos.y + this.pullDownInitTop);
this.pullDownStyle = `top:${Math.min(pos.y + this.pullDownInitTop, 10)}px`;
} else {
this.bubbleY = 0;
}
if (this.isRebounding) {
this.pullDownStyle = `top:${10 - (this.pullDownRefresh.stop || 40 - pos.y)}px`;
}
});
},
_initPullUpLoad() {
this.scroll.on('pullingUp', () => {
this.isPullUpLoad = true;
this.$emit('pullingUp');
});
},
_reboundPullDown() {
const {stopTime = 600} = this.pullDownRefresh;
return new Promise((resolve) => {
setTimeout(() => {
this.isRebounding = true;
this.scroll.finishPullDown();
resolve();
}, stopTime);
});
},
_afterPullDown() {
setTimeout(() => {
this.pullDownStyle = `top:${this.pullDownInitTop}px`;
this.beforePullDown = true;
this.isRebounding = false;
this.refresh();
}, this.scroll.options.bounceTime);
}
},
watch: {
data() {
setTimeout(() => {
this.refresh();
}, this.refreshDelay);
}
}
};
</script>
<style lang="scss" scoped>
.list-wrapper {
position: relative;
height: 100%;
overflow: hidden;
background: #fff;
.scroll-content {
position: relative;
z-index: 1;
}
.list-content {
position: relative;
z-index: 10;
background: #fff;
.list-item {
height: 60px;
line-height: 60px;
font-size: 18px;
padding-left: 20px;
border-bottom: 1px solid #e5e5e5;
}
}
.pulldown-wrapper {
position: absolute;
width: 100%;
left: 0;
display: flex;
justify-content: center;
align-items: center;
transition: all;
.after-trigger {
margin-top: 10px;
}
}
.pullup-wrapper {
width: 100%;
justify-content: center;
align-items: center;
display: flex;
padding: 16px 0;
}
}
</style>
... ...
... ... @@ -2,6 +2,8 @@ import Vue from 'vue';
import focus from './focus';
import TransferDom from './transfer-dom';
import Tap from './tap';
Vue.directive('focus', focus);
Vue.directive('TransferDom', TransferDom);
Vue.directive('Tap', Tap);
... ...
const bingFn = (fn) => {
return function(evt) {
fn(evt);
evt.preventDefault();
evt.stopPropagation();
};
};
export default {
bind(el, binding) {
el.addEventListener('e-click', bingFn(binding.value));
},
unbind(el, binding) {
el.removeEventListener('e-click', bingFn(binding.value));
}
};
... ...
... ... @@ -4,9 +4,10 @@
<meta charset="utf-8">
<title>{{title}}</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<script type="text/javascript">
... ...
... ... @@ -6,12 +6,19 @@
<script>
export default {
name: 'LayoutApp'
name: 'LayoutApp',
methods: {
}
};
</script>
<style lang="scss">
.layout {
width: 100%;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
</style>
... ...
<template>
<div class="ufo-font" v-show="value" v-transfer-dom :data-transfer="transfer">
<div v-show="value" v-transfer-dom :data-transfer="transfer">
<div class="modal-mask"></div>
<div class="modal-wrap" @touchmove.prevent.stop="onTouchmove">
<div class="modal modal-content">
... ...
... ... @@ -3,8 +3,8 @@
<div class="change-price-modal">
<p class="modal-title">选择你要下架的数量</p>
<Inputx v-model="stockNum" :maxlength="8" :readonly="true" class="input-number">
<i slot="prefix" class="iconfont icon-plus-minus" @click.prevent="onChangeNum(-1)"></i>
<i slot="suffix" class="iconfont icon-i-add" @click.prevent="onChangeNum(1)"></i>
<i slot="prefix" class="iconfont icon-plus-minus" @touchend="onChangeNum(-1)"></i>
<i slot="suffix" class="iconfont icon-i-add" @touchend="onChangeNum(1)"></i>
</Inputx>
<p class="stock-txt">
目前还有 6 个库存
... ...
<template>
<LayoutApp class="ufo-font">
<div class="order-page">
<div class="title">出售中</div>
<div class="product">
<img class="pro-img" src="//img11.static.yhbimg.com/goodsimg/2018/11/23/12/017e70f47d95b3e2f93f7946e0574a291a.jpg?imageMogr2/thumbnail/200x200/background/d2hpdGU=/position/center/quality/80" alt="">
<div class="pro-info">
<p class="pro-name">Air Jordan 11 Concord 康扣 2018年版康扣 2018年版</p>
<p class="stock-info">5个尺码,39个商品库存</p>
</div>
</div>
<p class="arrival-time">最新上架时间:2018.10.27 00:16:41</p>
<div class="product-group">
<div class="pro-skc" v-for="(skc, i) in orderDetail.skcs" :key="i">
<p class="size">{{skc.size}}&nbsp;&nbsp;&nbsp;&nbsp;X{{skc.num}}</p>
<p class="price">¥{{skc.price}}</p>
<div class="btns">
<Button class="btn-op no-sale" @click="onNoSale">不卖了</Button>
<Button class="btn-op chg-price" @click="onChgPrice">调价</Button>
<LayoutApp class="ufo-font" :class="classes">
<ScrollView ref="scroll" :pull-up-load="true" :pull-down-refresh="true" @pullingUp="onPullingUp" @pullingDown="onPullingDown">
<div class="order-page">
<div class="title">出售中</div>
<div class="product">
<img class="pro-img" src="//img11.static.yhbimg.com/goodsimg/2018/11/23/12/017e70f47d95b3e2f93f7946e0574a291a.jpg?imageMogr2/thumbnail/200x200/background/d2hpdGU=/position/center/quality/80" alt="">
<div class="pro-info">
<p class="pro-name">Air Jordan 11 Con版康扣Con版康扣 2018年版2018年版</p>
<p class="stock-info">5个尺码,39个商品库存</p>
</div>
</div>
<p class="arrival-time"><i class="iconfont icon-info"></i>最新上架时间:2018.10.27 00:16:41</p>
<div class="product-group">
<div class="product-item" :class="{['has-tip']: skc.tip}" v-for="(skc, i) in orderDetail.skcs" :key="i" @click="onClick">
<div class="tip" v-if="skc.tip">超出建议售价将被限制超出建议售价将被限制展示</div>
<div class="info">
<div class="left">
<span class="size">{{skc.size}}</span>
<span class="l-size">1/3</span>
<span class="unit">码</span>
</div>
<div class="middle">
<p class="size-store">¥{{skc.price}},12个库存</p>
<p class="low-price">当前最低价¥{{skc.price}}</p>
</div>
<div class="right">
<Button class="chg-price" @click="onChgPrice">调价</Button>
</div>
</div>
</div>
</div>
</div>
</div>
</ScrollView>
<ModalPrice
v-if="modalLoad"
ref="modalPrice"
... ... @@ -37,17 +48,21 @@
</template>
<script>
import Button from 'components/button.vue';
import {Button} from 'cube-ui';
import ModalPrice from './components/modal-price';
import ModalUnstock from './components/modal-unstock';
import ScrollView from 'components/scroll-view.vue';
import {createNamespacedHelpers} from 'vuex';
const {mapState, mapActions} = createNamespacedHelpers('ufo/order');
export default {
name: 'OrderPage',
data() {
return {
tick: 1,
classes: {},
modalLoad: false,
showModalPrice: false,
showModalUnstock: false,
... ... @@ -67,6 +82,19 @@ export default {
},
methods: {
...mapActions(['fetchOrderDetail']),
onPullingUp() {
setTimeout(() => {
this.$refs.scroll.forceUpdate();
}, 500);
},
onPullingDown() {
setTimeout(() => {
this.$refs.scroll.forceUpdate();
}, 500);
},
onClick() {
this.showModalUnstock = true;
},
onPriceSure() {
this.showTips = !this.showTips;
},
... ... @@ -80,95 +108,137 @@ export default {
this.showModalPrice = true;
}
},
components: {ModalPrice, ModalUnstock, Button}
components: {ModalPrice, ModalUnstock, Button, ScrollView}
};
</script>
<style lang="scss" scoped>
.order-page {
padding-left: 40px;
padding-right: 40px;
padding: 24px 40px;
& > .title {
text-align: center;
font-size: 60px;
font-size: 82px;
font-weight: bold;
line-height: 200px;
}
.product {
width: 100%;
height: 200px;
height: 192px;
display: flex;
border-radius: 6px;
background-color: #f5f5f5;
.pro-img {
width: 200px;
margin: 4px;
border-radius: 6px;
width: 192px;
}
.pro-info {
overflow: hidden;
flex: 1;
padding: 20px;
padding-left: 40px;
padding-top: 62px;
}
.pro-name {
width: 100%;
font-weight: bold;
font-size: 28px;
height: 100px;
color: #999;
font-size: 24px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.stock-info {
color: #666;
color: #000;
margin-top: 24px;
}
}
.arrival-time {
margin-top: 20px;
margin-bottom: 20px;
width: 100%;
height: 56px;
line-height: 56px;
color: #999;
font-size: 24px;
line-height: 80px;
padding-left: 14px;
padding-right: 14px;
background-color: #f0f0f0;
display: flex;
i {
font-size: 30px;
margin-right: 10px;
align-items: center;
}
}
.product-group {
.pro-skc {
.product-item {
width: 100%;
display: flex;
line-height: 120px;
border-bottom: 1px solid #eee;
padding-top: 20px;
padding-bottom: 40px;
}
.size {
flex: 1;
.tip {
color: #d0021b;
}
.price {
width: 140px;
font-weight: bold;
font-size: 30px;
text-align: center;
.info {
width: 100%;
display: flex;
padding-top: 20px;
}
.btns {
width: 300px;
text-align: right;
.left {
width: 160px;
display: flex;
height: 56px;
align-items: flex-end;
.size {
font-size: 56px;
line-height: 56px;
margin-right: 6px;
}
.l-size {
align-self: flex-end;
margin-right: 6px;
}
.unit {
align-self: flex-start;
margin-right: 6px;
}
}
}
.btn-op {
height: 60px;
border-radius: 10px;
font-size: 24px;
.middle {
flex: 1;
&.no-sale {
background-color: #f5f5f5;
color: #999;
.size-store {
font-size: 28px;
}
.low-price {
color: #999;
margin-top: 6px;
}
}
&.chg-price {
background-color: #f7d836;
.right {
width: 130px;
text-align: right;
.chg-price {
width: 130px;
height: 60px;
line-height: 60px;
padding-top: 0;
padding-bottom: 0;
background-color: #002b47;
font-size: 28px;
}
}
}
}
... ...
... ... @@ -2,20 +2,9 @@
* 插件
*/
import store from 'yoho-store';
import components from '../components';
import cookie from 'yoho-cookie';
import each from 'lodash/each';
export default {
loadGlobalComponents(Vue) {
each(components, component => {
if (component.length) {
Vue.component(component[0], component[1]);
} else {
Vue.component(component.name, component);
}
});
},
defineVueProp(Vue) {
Vue.prop = (key, value) => {
Vue[`$${key}`] = Vue.prototype[`$${key}`] = value;
... ... @@ -28,8 +17,5 @@ export default {
// 附加Vue原型属性
Vue.prop('store', store);
Vue.prop('cookie', cookie);
// 加载核心组件
// this.loadGlobalComponents(Vue);
}
};
... ...
@font-face {font-family: "iconfont";
src: url('iconfont.eot?t=1544757997719'); /* IE9*/
src: url('iconfont.eot?t=1544757997719#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAAUMAAsAAAAAB3wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8gUkaY21hcAAAAYAAAABgAAABnLSNHghnbHlmAAAB4AAAASMAAAE4gRtPhmhlYWQAAAMEAAAALwAAADYTkcvlaGhlYQAAAzQAAAAcAAAAJAfeA4VobXR4AAADUAAAAA4AAAAQEAAAAGxvY2EAAANgAAAACgAAAAoAzABMbWF4cAAAA2wAAAAfAAAAIAEPADtuYW1lAAADjAAAAUUAAAJtPlT+fXBvc3QAAATUAAAANQAAAEYaB1SDeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByecT/XYG7438AQw9zA0AAUZgTJAQDhGAwXeJztkMENgCAMRV8BDVEHYAQOHo0DeXJyGANL8eAQ/uY17c9PDwUmwCu7EkBuhK5LXTHfs5gfOHWPWg7KWlLNrX0nk1gi2lXpSZn5tVk/3s33rw1sToP+75oHuAcOJxJaeJxjYGRg+H+XeTGzMoM0AwOjoqAeoxIbu6AiH6OImLiioByjkZm5oKIdo4kac/+/VkZuIW7Gf+0cPDwcjJVgDmM1kMM4jbESJPavHaKgFaygGsRhAJrPwMB8gHEWAz/IfD1GU0MTM3NFOUZRQxE25mV/tnDz83Mz+wBJxjRGPm5uPkYwCdL3fw/zLuYgBj0GBlYlNXU9JjNzMxVxOUZxMT5GIJdRXY2FnY8RxFcxNzO3A7LY2YAC7GxMDB4dNh6RUtpmZYxJc+xChZl5pcWYBTzNWv9dTNVXFfO1a2XUTzUSYhaT4mMStTKfHqngrKtjPn3zKo9pRnn6jT68Ymy8vI75GnHaDXaTZjbpx+k0OAfw8bKK8cb7eUTxsgB9BACy2zdKAHicY2BkYGAAYp6lvMfi+W2+MnCzMIDADUvntwj6/x4WBuYgIJeDgQkkCgATaQnVAHicY2BkYGBu+N/AEMPCAAJAkpEBFbAAAEcKAm14nGNhYGBgQcIAALAAEQAAAAAAAAAwAEwAnAAAeJxjYGRgYGBh0GcA0QwMTEDMBYQMDP/BfAYADWQBSwB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICFkYmRmZGFkZWBNVM3MSWFqyCntFg3NzOvtJg9Jz8xJTMvnYEBAIIsCPMAAAA=') format('woff'),
url('iconfont.ttf?t=1544757997719') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1544757997719#iconfont') format('svg'); /* iOS 4.1- */
src: url('iconfont.eot?t=1545207692216'); /* IE9*/
src: url('iconfont.eot?t=1545207692216#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAATkAAsAAAAAB3QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFY8jkkaY21hcAAAAYAAAABiAAABnLVnIJZnbHlmAAAB5AAAAPkAAAE0LcfffWhlYWQAAALgAAAALwAAADYTn4UVaGhlYQAAAxAAAAAcAAAAJAfeA4VobXR4AAADLAAAAA4AAAAQEAAAAGxvY2EAAAM8AAAACgAAAAoA6AB+bWF4cAAAA0gAAAAfAAAAIAETADtuYW1lAAADaAAAAUUAAAJtPlT+fXBvc3QAAASwAAAAMgAAAEMiMoHseJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGByeSTzXYG7438AQw9zA0AAUZgTJAQDiKQwkeJztkMENgCAQBOcADTEWYAk8fBoL8mXjQBl4HD4swr3MZW9DeCwwAV7ZlQByI3RdmorlnsXywKl31HFQtpJrau3rTGIvojqnXn+WmV+r7eO9fG9tYF3mQe+7pgH+AX05FcIAAHicPY6xSsNQFIbP722Swi033GuaCJHgTSE6RRvSZIuLo8/hO5TOpaObg2MEB2fXoL5FFqEPEqI3CRQOP+c7fPwcsoj+ftgXuydOAV2QppTISnFdoYwQCDABxywGUzirCpnv2XFyHicbmReZv5SefUZNZ1ldM2XdzmZtPeUdwpvQzK1Q6lKp6iQ1HStPVt1+eIMV9g9K4Mq4oj8KRTC//bI3tqKQCFqmiG1HagHPD7SMkBWl1BXyhD33e3DF0R/mi8Uc2xGwM4AXbIdbf5iE/SjsBhj6idg3Xskd+lNs1nlR6gjLtWez9+6Tuy5njybxBMG5wJj/j8VAJAAAAHicY2BkYGAA4gVnpD3j+W2+MnCzMIDADQeFHgT9/yALA7M9kMvBwAQSBQALHwkZAHicY2BkYGBu+N/AEMPCAAJAkpEBFbAAAEcKAm14nGNhYGBgQcIAALAAEQAAAAAAAABOAH4AmgAAeJxjYGRgYGBh0GdgZQABJiDmAkIGhv9gPgMADcABTwB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxjYGKAAC4G7ICFkYmRmZGFkZWBJTMvLZ81UzcxJYWrIKe0WDc3M6+0mIEBAGU1B74AAA==') format('woff'),
url('iconfont.ttf?t=1545207692216') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
url('iconfont.svg?t=1545207692216#iconfont') format('svg'); /* iOS 4.1- */
}
.iconfont {
... ... @@ -15,9 +15,9 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-info:before { content: "\e6e5"; }
.icon-i-add:before { content: "\e618"; }
.icon-plus-minus:before { content: "\e728"; }
.icon-loading:before { content: "\e60b"; }
... ...
... ... @@ -20,13 +20,13 @@ Created by iconfont
/>
<missing-glyph />
<glyph glyph-name="i-add" unicode="&#58904;" d="M910.509 405.585h-378.843v376.925c0 11.2-9.427 20.281-20.626 20.281s-20.626-9.080-20.626-20.281v-376.925h-376.925c-11.2 0-20.281-9.426-20.281-20.626s9.080-20.626 20.281-20.626h376.925v-378.844c0-11.199 9.427-20.281 20.626-20.281s20.626 9.081 20.626 20.281v378.844h378.843c11.199 0 20.281 9.426 20.281 20.626s-9.081 20.626-20.281 20.626z" horiz-adv-x="1024" />
<glyph glyph-name="info" unicode="&#59109;" d="M512-62.016C266.08-62.016 65.984 138.048 65.984 384 65.984 629.92 266.08 830.016 512 830.016c245.952 0 446.016-200.064 446.016-446.016C958.016 138.048 757.952-62.016 512-62.016zM512 766.016C301.344 766.016 129.984 594.656 129.984 384c0-210.624 171.36-382.016 382.016-382.016 210.624 0 382.016 171.36 382.016 382.016C894.016 594.656 722.624 766.016 512 766.016zM512 592m-48 0a1.5 1.5 0 1 0 96 0 1.5 1.5 0 1 0-96 0ZM512 128c-17.664 0-32 14.304-32 32l0 288c0 17.664 14.336 32 32 32s32-14.336 32-32l0-288C544 142.304 529.664 128 512 128z" horiz-adv-x="1024" />
<glyph glyph-name="plus-minus" unicode="&#59176;" d="M934.4 358.4h-844.8c-14.080 0-25.6 11.52-25.6 25.6v0c0 14.080 11.52 25.6 25.6 25.6h844.8c14.080 0 25.6-11.52 25.6-25.6v0c0-14.080-11.52-25.6-25.6-25.6z" horiz-adv-x="1024" />
<glyph glyph-name="i-add" unicode="&#58904;" d="M910.509 405.585h-378.843v376.925c0 11.2-9.427 20.281-20.626 20.281s-20.626-9.080-20.626-20.281v-376.925h-376.925c-11.2 0-20.281-9.426-20.281-20.626s9.080-20.626 20.281-20.626h376.925v-378.844c0-11.199 9.427-20.281 20.626-20.281s20.626 9.081 20.626 20.281v378.844h378.843c11.199 0 20.281 9.426 20.281 20.626s-9.081 20.626-20.281 20.626z" horiz-adv-x="1024" />
<glyph glyph-name="loading" unicode="&#58891;" d="M512.064-67.296c-96.16 0-189.344 30.816-267.68 89.472-95.744 71.712-157.856 176.48-174.848 294.912C52.544 435.552 82.688 553.536 154.4 649.312c148.096 197.76 429.44 238.08 627.136 90.08 82.88-62.08 142.016-151.584 166.56-252 4.192-17.184-6.336-34.496-23.488-38.688-17.152-4.064-34.496 6.304-38.688 23.488-20.992 86.048-71.68 162.752-142.752 215.968-169.376 126.88-410.56 92.288-537.536-77.216-61.472-82.08-87.296-183.2-72.704-284.736 14.56-101.536 67.808-191.296 149.888-252.736 169.536-127.04 410.688-92.384 537.6 77.12 33.216 44.384 56 94.112 67.648 147.84 3.776 17.28 20.896 28.256 38.048 24.512 17.28-3.744 28.256-20.8 24.512-38.048-13.664-62.784-40.224-120.832-78.976-172.672-71.712-95.744-176.48-157.888-294.976-174.848a449.402 449.402 0 0 0-64.608-4.672z" horiz-adv-x="1024" />
<glyph glyph-name="plus-minus" unicode="&#59176;" d="M934.4 358.4h-844.8c-14.080 0-25.6 11.52-25.6 25.6v0c0 14.080 11.52 25.6 25.6 25.6h844.8c14.080 0 25.6-11.52 25.6-25.6v0c0-14.080-11.52-25.6-25.6-25.6z" horiz-adv-x="1024" />
... ...
... ... @@ -18,6 +18,7 @@ html {
/* 2 */
-webkit-text-size-adjust: 100%;
/* 2 */
user-select:none;
}
/**
... ... @@ -520,9 +521,10 @@ textarea {
html,
body {
font-size: 28px;
font-family: "HiraginoSansGB-W3", "SanFranciscoText-Regular", "PingFang SC", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
font-size: 24px;
font-family: "PingFang SC", "HiraginoSansGB-W3", "SanFranciscoText-Regular", Helvetica, Roboto, "Heiti SC", "黑体", Arial;
line-height: 1.4;
scroll-behavior: smooth;
}
body {
... ... @@ -659,3 +661,7 @@ img[lazy=loaded] {
text-transform: none;
line-height: 1;
}
.pointer-events {
pointer-events: none;
}
\ No newline at end of file
... ...
import Vue from 'vue';
import Vuex from 'vuex';
import {createApi} from 'create-api';
import storeYoho from './yoho';
import storeUfo from './ufo';
import plugin from './plugin';
Vue.use(Vuex);
... ... @@ -15,6 +14,7 @@ export function createStore(context) {
yoho: storeYoho(),
ufo: storeUfo()
},
plugins: [plugin],
strict: process.env.NODE_ENV !== 'production'
});
... ...
const dispatchTap = (evt) => {
const clickEvent = document.createEvent('MouseEvents');
const touch = evt.changedTouches[0] || {};
clickEvent.initMouseEvent('e-click', true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
clickEvent.forwardedTouchEvent = true;
evt.target.dispatchEvent(clickEvent);
};
const onTouchstart = function() {
setTimeout(() => { // ios webview中scroll和touchmove事件在滚动时会被阻塞,判断滑动状态放入下一次Event loop
if (this.state.yoho.touchStatus !== 'scrolling' || // 额外判断滚动状态中止100ms后可以触发tap事件
Date.now() - this.state.yoho.scrollTime > 100) {
this.commit('SET_TOUCH_STATUS', {touchStatus: 'touchstart'});
}
}, 0);
};
const onTouchend = function(evt) {
setTimeout(() => { // 同样放入下一次Event loop否则会导致touchend优先于touchstart事件触发
if (this.state.yoho.touchStatus === 'touchstart') {
dispatchTap(evt); // 触发自定义e-click事件
this.commit('SET_TOUCH_STATUS', {touchStatus: ''});
}
}, 0);
if (evt.cancelable) { // ios webview中如果不阻止默认事件会导致:点击后迅速滑动不能及时响应
evt.preventDefault();
}
};
const onTouchmove = function() {
this.commit('SET_TOUCH_STATUS', {touchStatus: 'scrolling', time: Date.now()});
};
const onScroll = function() {
console.log('onScroll')
this.commit('SET_TOUCH_STATUS', {touchStatus: 'scrolling', time: Date.now()});
};
export default store => {
// if (process.env.VUE_ENV === 'client') {
// // 自定义点击事件,解决ioswebview中点击延迟和滑动中误点击响应的问题。
// let supportsPassive = false;
// try {
// const opts = Object.defineProperty({}, 'passive', {
// get: function() {
// supportsPassive = true;
// return false;
// }
// });
// window.addEventListener('test', null, opts);
// } catch (e) {} //eslint-disable-line
// store.commit('SET_SUPPORTS_PASSIVE', supportsPassive);
// document.addEventListener('touchstart', onTouchstart.bind(store));
// document.addEventListener('touchend', onTouchend.bind(store));
// document.addEventListener('scroll', onScroll.bind(store), supportsPassive ? { passive: true } : false);
// document.addEventListener('touchmove', onTouchmove.bind(store), supportsPassive ? { passive: true } : false);
// }
};
... ...
... ... @@ -25,177 +25,23 @@ export default {
commit(Types.FETCH_ORDERDETAIL_REQUEST);
// const result = await this.$api.get('/getproductxxx', {orderId});
const skcs = [];
for (let i = 0; i < 40; i++) {
skcs.push({
id: 1,
size: '39',
num: 10,
price: 1089,
tip: !(i % 3)
})
}
const result = await Promise.resolve({
code: 200,
data: {
name: '测试订单',
image: 'xxx',
skcs: [{
id: 1,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 2,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 3,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 4,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 5,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 6,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 7,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 8,
size: '39 1/3码',
num: 10,
price: 1089,
}, {
id: 9,
size: '39 1/3码',
num: 10,
price: 1089,
}]
skcs: skcs
}
});
... ...
... ... @@ -10,25 +10,37 @@ export default function() {
isAndroid: false,
isYohoBuy: false,
channel: 'men',
fs: true
fs: true,
supportsPassive: false
},
scrolling: false,
visible: true,
pageVisible: false,
history: [],
touchStatus: '',
scrollTime: 0,
direction: 'forword'
},
mutations: {
[Types.SET_ENV]() {
},
[Types.INIT_ROUTE_CHANGE]() {
},
[Types.ROUTE_CHANGE]() {
},
[Types.REPORT_YAS]() {
},
setScroll(state, isScroll) {
state.scrolling = isScroll;
},
SET_SUPPORTS_PASSIVE(state, supportsPassive) {
state.supportsPassive = supportsPassive;
},
SET_TOUCH_STATUS(state, {touchStatus, time}) {
console.log(touchStatus)
if (time) {
state.scrollTime = time;
}
state.touchStatus = touchStatus;
}
},
actions: {
... ...
... ... @@ -29,18 +29,18 @@ rm(path.join(clientConfig.output.path), err => {
if (err) {
throw rmerr;
}
// webpack(serverConfig, (serverErr, serverStats) => {
// if (serverErr) {
// throw serverErr;
// }
// process.stdout.write(serverStats.toString({
// colors: true,
// modules: false,
// children: false,
// chunks: false,
// chunkModules: false
// }) + '\n\n');
// });
webpack(serverConfig, (serverErr, serverStats) => {
if (serverErr) {
throw serverErr;
}
process.stdout.write(serverStats.toString({
colors: true,
modules: false,
children: false,
chunks: false,
chunkModules: false
}) + '\n\n');
});
});
});
});
... ...
... ... @@ -2,6 +2,8 @@ const webpack = require('webpack');
const path = require('path');
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
var PostCompilePlugin = require('webpack-post-compile-plugin')
var TransformModulesPlugin = require('webpack-transform-modules-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const pkg = require('../package.json');
const isProd = process.env.NODE_ENV === 'production';
... ... @@ -58,6 +60,19 @@ const webpackConfig = {
}
}]
}, {
test: /\.styl(us)?$/,
use: [
isProd ? MiniCssExtractPlugin.loader : 'vue-style-loader',
'css-loader',
'postcss-loader',
{
loader: 'stylus-loader',
options: {
sourceMap: isProd,
'resolve url': true
}
}]
}, {
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'file-loader',
... ... @@ -79,7 +94,9 @@ const webpackConfig = {
plugins: [
new VueLoaderPlugin(),
new webpack.HashedModuleIdsPlugin(),
new FriendlyErrorsPlugin()
new FriendlyErrorsPlugin(),
new PostCompilePlugin(),
new TransformModulesPlugin()
]
};
... ...
const webpack = require('webpack');
const merge = require('webpack-merge');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const VueSSRClientPlugin = require('vue-server-renderer/client-plugin');
... ... @@ -50,6 +51,9 @@ const webpackConfig = merge(baseConfig, {
plugins: [
new VueSSRClientPlugin({
filename: `yoho-ssr-client-${pkg.version}.json`
}),
new webpack.DefinePlugin({
'process.env.VUE_ENV': '"client"'
})
]
});
... ...
const webpack = require('webpack');
const merge = require('webpack-merge');
const nodeExternals = require('webpack-node-externals');
const VueSSRServerPlugin = require('vue-server-renderer/server-plugin');
... ... @@ -21,12 +22,15 @@ let webpackConfig = merge(baseConfig, {
libraryTarget: 'commonjs2',
},
externals: nodeExternals({
whitelist: [/\.css$/, /\.scss$/, /vue-touch/, /hammerjs/, /lang=scss/]
whitelist: [/cube-ui/]
}),
plugins: [
new VueSSRServerPlugin({
filename: `yoho-ssr-server-${pkg.version}.json`
}),
new webpack.DefinePlugin({
'process.env.VUE_ENV': '"server"'
})
]
});
... ...
... ... @@ -12,14 +12,18 @@
"dev": "node app-dev.js",
"client": "NODE_ENV=production webpack --config ./build/webpack.client.conf.js",
"server": "NODE_ENV=production webpack --config ./build/webpack.server.conf.js",
"static": "webpack-dev-server --config ./public/build/webpack.dev.config.js",
"build": "NODE_ENV=production node ./build/build.js",
"lint-js": "eslint -c .eslintrc --cache --fix .",
"lint-css": "stylelint --syntax scss --config .stylelintrc public/scss/**/*.css",
"lint-vue": "eslint -c .eslintrc --cache --fix public/vue/**/*.vue || stylelint --syntax scss --extract --config .stylelintrc public/vue/**/*.vue",
"precommit": "node lint.js"
"lint-vue": "eslint -c .eslintrc --cache --fix public/vue/**/*.vue || stylelint --syntax scss --extract --config .stylelintrc public/vue/**/*.vue"
},
"license": "MIT",
"transformModules": {
"cube-ui": {
"transform": "cube-ui/src/modules/${member}",
"kebabCase": true
}
},
"dependencies": {
"body-parser": "^1.18.3",
"client-sessions": "^0.8.0",
... ... @@ -34,11 +38,26 @@
"uuid": "^3.3.2",
"winston": "^3.1.0",
"yoho-cookie": "^1.2.0",
"yoho-express-session": "^2.0.0",
"yoho-md5": "^2.1.0",
"yoho-node-lib": "=0.6.41",
"yoho-qs": "^1.0.1",
"yoho-store": "^1.3.20",
"yoho-express-session": "^2.0.0"
"vue": "^2.5.20",
"vue-awesome-swiper": "^3.1.3",
"vue-infinite-scroll": "^2.0.2",
"vue-lazyload": "^1.2.6",
"vue-loader": "^15.4.2",
"vue-router": "^3.0.2",
"vue-server-renderer": "^2.5.20",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.5.20",
"vue-touch": "^1.1.0",
"vue-virtual-scroll-list": "^1.2.8",
"cube-ui": "^1.12.6",
"axios": "^0.18.0",
"fastclick": "^1.0.6",
"vuex": "^3.0.1"
},
"devDependencies": {
"@babel/core": "^7.2.0",
... ... @@ -49,7 +68,6 @@
"@babel/runtime": "^7.2.0",
"@babel/runtime-corejs2": "^7.2.0",
"autoprefixer": "^9.4.2",
"axios": "^0.18.0",
"babel-eslint": "^10.0.1",
"babel-loader": "^8.0.4",
"babel-plugin-syntax-jsx": "^6.18.0",
... ... @@ -59,7 +77,6 @@
"eslint-config-yoho": "^1.1.0",
"eslint-plugin-html": "^5.0.0",
"eslint-plugin-vue": "^5.0.0",
"fastclick": "^1.0.6",
"file-loader": "^2.0.0",
"friendly-errors-webpack-plugin": "^1.7.0",
"husky": "^1.2.0",
... ... @@ -75,25 +92,19 @@
"style-loader": "^0.23.1",
"stylelint": "^9.9.0",
"stylelint-config-yoho": "^1.4.0",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.2",
"uglifyjs-webpack-plugin": "^2.0.1",
"url-loader": "^1.1.2",
"vue": "^2.5.20",
"vue-awesome-swiper": "^3.1.3",
"vue-infinite-scroll": "^2.0.2",
"vue-lazyload": "^1.2.6",
"vue-loader": "^15.4.2",
"vue-router": "^3.0.2",
"vue-server-renderer": "^2.5.20",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.5.20",
"vue-touch": "^1.1.0",
"vuex": "^3.0.1",
"webpack": "4.16.5",
"webpack-bundle-analyzer": "^3.0.3",
"webpack-cli": "^3.1.2",
"webpack-dev-middleware": "^3.4.0",
"webpack-dev-server": "^3.1.10",
"webpack-hot-middleware": "^2.24.3",
"webpack-merge": "^4.1.5",
"webpack-node-externals": "^1.7.2"
"webpack-node-externals": "^1.7.2",
"webpack-post-compile-plugin": "^1.0.0",
"webpack-transform-modules-plugin": "^0.4.3"
}
}
... ...
... ... @@ -980,12 +980,27 @@ babel-plugin-syntax-jsx@^6.18.0:
version "6.18.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
babel-plugin-transform-modules@^0.1.1:
version "0.1.1"
resolved "http://npm.yohops.com/babel-plugin-transform-modules/-/babel-plugin-transform-modules-0.1.1.tgz#2a72ced69d85613d953196ae9a86d39f19fd7933"
dependencies:
lodash.camelcase "^4.3.0"
lodash.kebabcase "^4.1.1"
lodash.snakecase "^4.1.1"
babel-plugin-transform-vue-jsx@^3.7.0:
version "3.7.0"
resolved "http://npm.yohops.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-3.7.0.tgz#d40492e6692a36b594f7e9a1928f43e969740960"
dependencies:
esutils "^2.0.2"
babel-runtime@^6.0.0:
version "6.26.0"
resolved "http://npm.yohops.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
bail@^1.0.0:
version "1.0.3"
resolved "http://npm.yohops.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3"
... ... @@ -1020,6 +1035,12 @@ bcrypt-pbkdf@^1.0.0:
dependencies:
tweetnacl "^0.14.3"
better-scroll@^1.12.6:
version "1.13.2"
resolved "http://npm.yohops.com/better-scroll/-/better-scroll-1.13.2.tgz#31e6e088cf2d23ce48e52fad6cc59134ffeb2f56"
dependencies:
babel-runtime "^6.0.0"
bfj@^6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48"
... ... @@ -1318,6 +1339,10 @@ camelcase@^4.0.0, camelcase@^4.1.0:
version "4.1.0"
resolved "http://npm.yohops.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
camelcase@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42"
caniuse-lite@^1.0.30000912, caniuse-lite@^1.0.30000914:
version "1.0.30000918"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz#6288f79da3c5c8b45e502f47ad8f3eb91f1379a9"
... ... @@ -1721,6 +1746,10 @@ copy-descriptor@^0.1.0:
version "0.1.1"
resolved "http://npm.yohops.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
core-js@^2.4.0:
version "2.6.1"
resolved "http://npm.yohops.com/core-js/-/core-js-2.6.1.tgz#87416ae817de957a3f249b3b5ca475d4aaed6042"
core-js@^2.5.7:
version "2.6.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.0.tgz#1e30793e9ee5782b307e37ffa22da0eacddd84d4"
... ... @@ -1853,6 +1882,10 @@ css-loader@^2.0.0:
postcss-value-parser "^3.3.0"
schema-utils "^1.0.0"
css-parse@1.7.x:
version "1.7.0"
resolved "http://npm.yohops.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b"
css-selector-tokenizer@^0.7.0:
version "0.7.1"
resolved "http://npm.yohops.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
... ... @@ -1873,6 +1906,13 @@ cssesc@^2.0.0:
version "2.0.0"
resolved "http://npm.yohops.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703"
cube-ui@^1.12.6:
version "1.12.6"
resolved "http://npm.yohops.com/cube-ui/-/cube-ui-1.12.6.tgz#3beb6b2b628c4f3c1eb5d5ad69b85c61e0ef95c4"
dependencies:
better-scroll "^1.12.6"
vue-create-api "^0.2.0"
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "http://npm.yohops.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
... ... @@ -1901,6 +1941,12 @@ de-indent@^1.0.2:
version "1.0.2"
resolved "http://npm.yohops.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
debug@*, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
dependencies:
ms "^2.1.1"
debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
version "2.6.9"
resolved "http://npm.yohops.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
... ... @@ -1919,12 +1965,6 @@ debug@^3.0.1, debug@^3.2.5:
dependencies:
ms "^2.1.1"
debug@^4.0.0, debug@^4.0.1, debug@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
dependencies:
ms "^2.1.1"
debug@~2.2.0:
version "2.2.0"
resolved "http://npm.yohops.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
... ... @@ -1938,7 +1978,7 @@ decamelize-keys@^1.0.0:
decamelize "^1.1.0"
map-obj "^1.0.0"
decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2:
decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
version "1.2.0"
resolved "http://npm.yohops.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
... ... @@ -2902,6 +2942,17 @@ glob-to-regexp@^0.3.0:
version "0.3.0"
resolved "http://npm.yohops.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
glob@7.0.x:
version "7.0.6"
resolved "http://npm.yohops.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a"
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.2"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@~7.1.1:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
... ... @@ -2930,6 +2981,10 @@ global-dirs@^0.1.0:
dependencies:
ini "^1.3.4"
global-modules-path@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.1.tgz#e541f4c800a1a8514a990477b267ac67525b9931"
global-modules@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
... ... @@ -3410,6 +3465,10 @@ internal-ip@^3.0.1:
default-gateway "^2.6.0"
ipaddr.js "^1.5.2"
interpret@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
invariant@^2.2.2:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
... ... @@ -3892,6 +3951,12 @@ load-json-file@^4.0.0:
pify "^3.0.0"
strip-bom "^3.0.0"
load-pkg-config@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/load-pkg-config/-/load-pkg-config-1.0.1.tgz#1a7d78c21bf257e67935e8faa603f4fe519c49a8"
dependencies:
resolve-pkg "^1.0.0"
loader-runner@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979"
... ... @@ -3930,13 +3995,17 @@ lodash.assign@^4.2.0:
version "4.2.0"
resolved "http://npm.yohops.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "http://npm.yohops.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
lodash.clone@~4.3.2:
version "4.3.2"
resolved "http://npm.yohops.com/lodash.clone/-/lodash.clone-4.3.2.tgz#e56b176b6823a7dde38f7f2bf58de7d5971200e9"
dependencies:
lodash._baseclone "~4.5.0"
lodash.clonedeep@^4.3.2:
lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "http://npm.yohops.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
... ... @@ -3944,10 +4013,18 @@ lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "http://npm.yohops.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
lodash.mergewith@^4.6.0:
version "4.6.1"
resolved "http://npm.yohops.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
lodash.snakecase@^4.1.1:
version "4.1.1"
resolved "http://npm.yohops.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
lodash.tail@^4.1.1:
version "4.1.1"
resolved "http://npm.yohops.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664"
... ... @@ -5468,6 +5545,10 @@ regenerate@^1.2.1, regenerate@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
regenerator-runtime@^0.11.0:
version "0.11.1"
resolved "http://npm.yohops.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
regenerator-runtime@^0.12.0:
version "0.12.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
... ... @@ -5690,6 +5771,10 @@ resolve-from@^1.0.0:
version "1.0.1"
resolved "http://npm.yohops.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
resolve-from@^2.0.0:
version "2.0.0"
resolved "http://npm.yohops.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
... ... @@ -5698,6 +5783,12 @@ resolve-from@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
resolve-pkg@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/resolve-pkg/-/resolve-pkg-1.0.0.tgz#e19a15e78aca2e124461dc92b2e3943ef93494d9"
dependencies:
resolve-from "^2.0.0"
resolve-url@^0.2.1:
version "0.2.1"
resolved "http://npm.yohops.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
... ... @@ -5792,6 +5883,10 @@ sass-loader@^7.1.0:
pify "^3.0.0"
semver "^5.5.0"
sax@0.5.x:
version "0.5.8"
resolved "http://npm.yohops.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
... ... @@ -6057,6 +6152,12 @@ source-map-url@^0.4.0:
version "0.4.0"
resolved "http://npm.yohops.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
source-map@0.1.x:
version "0.1.43"
resolved "http://npm.yohops.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
dependencies:
amdefine ">=0.0.4"
source-map@0.5.6:
version "0.5.6"
resolved "http://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
... ... @@ -6398,6 +6499,25 @@ stylelint@^9.2.0, stylelint@^9.9.0:
svg-tags "^1.0.0"
table "^5.0.0"
stylus-loader@^3.0.2:
version "3.0.2"
resolved "http://npm.yohops.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6"
dependencies:
loader-utils "^1.0.2"
lodash.clonedeep "^4.5.0"
when "~3.6.x"
stylus@^0.54.5:
version "0.54.5"
resolved "http://npm.yohops.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79"
dependencies:
css-parse "1.7.x"
debug "*"
glob "7.0.x"
mkdirp "0.5.x"
sax "0.5.x"
source-map "0.1.x"
sugarss@^2.0.0:
version "2.0.0"
resolved "http://npm.yohops.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d"
... ... @@ -6909,6 +7029,10 @@ uuid@^3.0.1, uuid@^3.3.2:
version "3.3.2"
resolved "http://npm.yohops.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
v8-compile-cache@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c"
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "http://npm.yohops.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
... ... @@ -6960,6 +7084,10 @@ vue-awesome-swiper@^3.1.3:
object-assign "^4.1.1"
swiper "^4.0.7"
vue-create-api@^0.2.0:
version "0.2.0"
resolved "http://npm.yohops.com/vue-create-api/-/vue-create-api-0.2.0.tgz#abeb70ff1af2fa3881f024754d49034a7951c6ef"
vue-eslint-parser@^4.0.2:
version "4.0.3"
resolved "http://npm.yohops.com/vue-eslint-parser/-/vue-eslint-parser-4.0.3.tgz#80cf162e484387b2640371ad21ba1f86e0c10a61"
... ... @@ -7034,6 +7162,10 @@ vue-touch@^1.1.0:
dependencies:
hammerjs "^2.0.6"
vue-virtual-scroll-list@^1.2.8:
version "1.2.8"
resolved "http://npm.yohops.com/vue-virtual-scroll-list/-/vue-virtual-scroll-list-1.2.8.tgz#893fba84a982bc06c9c7a2c7f71e4d437c2e82f4"
vue@^2.5.20:
version "2.5.20"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.20.tgz#79fff9ccaa10cc37e7a7239b4c7adfac94df81ba"
... ... @@ -7079,6 +7211,21 @@ webpack-bundle-analyzer@^3.0.3:
opener "^1.5.1"
ws "^6.0.0"
webpack-cli@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.2.tgz#17d7e01b77f89f884a2bbf9db545f0f6a648e746"
dependencies:
chalk "^2.4.1"
cross-spawn "^6.0.5"
enhanced-resolve "^4.1.0"
global-modules-path "^2.3.0"
import-local "^2.0.0"
interpret "^1.1.0"
loader-utils "^1.1.0"
supports-color "^5.5.0"
v8-compile-cache "^2.0.2"
yargs "^12.0.2"
webpack-dev-middleware@3.4.0, webpack-dev-middleware@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890"
... ... @@ -7147,6 +7294,12 @@ webpack-node-externals@^1.7.2:
version "1.7.2"
resolved "http://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz#6e1ee79ac67c070402ba700ef033a9b8d52ac4e3"
webpack-post-compile-plugin@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/webpack-post-compile-plugin/-/webpack-post-compile-plugin-1.0.0.tgz#a1bae348d4bb6ebcf2bd173cbc695ae8cc825278"
dependencies:
micromatch "^3.1.10"
webpack-sources@^1.0.1, webpack-sources@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
... ... @@ -7154,6 +7307,13 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0:
source-list-map "^2.0.0"
source-map "~0.6.1"
webpack-transform-modules-plugin@^0.4.3:
version "0.4.3"
resolved "http://npm.yohops.com/webpack-transform-modules-plugin/-/webpack-transform-modules-plugin-0.4.3.tgz#fbe3484708fb3270137d454817fe36d2d7d36969"
dependencies:
babel-plugin-transform-modules "^0.1.1"
load-pkg-config "^1.0.1"
webpack@4.16.5:
version "4.16.5"
resolved "http://npm.yohops.com/webpack/-/webpack-4.16.5.tgz#29fb39462823d7eb8aefcab8b45f7f241db0d092"
... ... @@ -7195,6 +7355,10 @@ websocket-extensions@>=0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
when@~3.6.x:
version "3.6.4"
resolved "http://npm.yohops.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e"
which-module@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
... ... @@ -7346,6 +7510,13 @@ yargs-parser@^10.0.0, yargs-parser@^10.1.0:
dependencies:
camelcase "^4.1.0"
yargs-parser@^11.1.1:
version "11.1.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
dependencies:
camelcase "^5.0.0"
decamelize "^1.2.0"
yargs-parser@^5.0.0:
version "5.0.0"
resolved "http://npm.yohops.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
... ... @@ -7369,6 +7540,23 @@ yargs@12.0.2:
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^10.1.0"
yargs@^12.0.2:
version "12.0.5"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
dependencies:
cliui "^4.0.0"
decamelize "^1.2.0"
find-up "^3.0.0"
get-caller-file "^1.0.1"
os-locale "^3.0.0"
require-directory "^2.1.1"
require-main-filename "^1.0.1"
set-blocking "^2.0.0"
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1 || ^4.0.0"
yargs-parser "^11.1.1"
yargs@^7.0.0:
version "7.1.0"
resolved "http://npm.yohops.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
... ...