Merge remote-tracking branch 'origin/feature/product-detail' into feature/product-detail
Showing
10 changed files
with
828 additions
and
125 deletions
@@ -246,7 +246,7 @@ const component = { | @@ -246,7 +246,7 @@ const component = { | ||
246 | page: req.query.page || 1, | 246 | page: req.query.page || 1, |
247 | limit: 20, | 247 | limit: 20, |
248 | gender: GENDER[CHANNEL_MAP[channel]], | 248 | gender: GENDER[CHANNEL_MAP[channel]], |
249 | - udid: req.sessionID , | 249 | + udid: req.sessionID, |
250 | rec_pos: req.query.rec_pos || 100001, | 250 | rec_pos: req.query.rec_pos || 100001, |
251 | yh_channel: CHANNEL_MAP[channel] || 1, | 251 | yh_channel: CHANNEL_MAP[channel] || 1, |
252 | client_id: req.cookies._yasvd || '1' | 252 | client_id: req.cookies._yasvd || '1' |
@@ -97,6 +97,7 @@ | @@ -97,6 +97,7 @@ | ||
97 | "postcss-sprites": "^4.2.1", | 97 | "postcss-sprites": "^4.2.1", |
98 | "postcss-use": "^2.2.0", | 98 | "postcss-use": "^2.2.0", |
99 | "precss": "^1.4.0", | 99 | "precss": "^1.4.0", |
100 | + "sass-loader": "^6.0.6", | ||
100 | "shelljs": "^0.7.3", | 101 | "shelljs": "^0.7.3", |
101 | "style-loader": "^0.17.0", | 102 | "style-loader": "^0.17.0", |
102 | "stylelint": "^7.1.0", | 103 | "stylelint": "^7.1.0", |
public/build/postcss.config.js
0 → 100644
1 | +const postImport = require('postcss-import'); | ||
2 | +const precss = require('precss'); | ||
3 | +const autoprefixer = require('autoprefixer'); | ||
4 | +const cssnano = require('cssnano'); | ||
5 | + | ||
6 | +module.exports = () => { | ||
7 | + return [ | ||
8 | + postImport({}), | ||
9 | + precss(), | ||
10 | + autoprefixer(), | ||
11 | + cssnano() | ||
12 | + ]; | ||
13 | +}; |
@@ -2,12 +2,14 @@ const Vue = require('vue'); | @@ -2,12 +2,14 @@ const Vue = require('vue'); | ||
2 | const lazyload = require('vue-lazyload'); | 2 | const lazyload = require('vue-lazyload'); |
3 | const directive = require('common/vue-directive'); | 3 | const directive = require('common/vue-directive'); |
4 | const app = require('product/detail/index.vue'); | 4 | const app = require('product/detail/index.vue'); |
5 | +const VueTouch = require('vue-touch'); | ||
5 | const yoho = require('yoho'); | 6 | const yoho = require('yoho'); |
6 | 7 | ||
7 | require('common/vue-filter')(Vue); | 8 | require('common/vue-filter')(Vue); |
8 | Vue.use(lazyload, { | 9 | Vue.use(lazyload, { |
9 | preLoad: 3 | 10 | preLoad: 3 |
10 | }); | 11 | }); |
12 | +Vue.use(VueTouch); | ||
11 | Vue.use(directive); | 13 | Vue.use(directive); |
12 | 14 | ||
13 | yoho.ready(() => { | 15 | yoho.ready(() => { |
1 | +<template> | ||
2 | +<div class="add-cart" :class="cartClass"> | ||
3 | + <ul class="cart-detail"> | ||
4 | + <li v-touch:tap="pickColor"> | ||
5 | + <span class="color">{{colorName || '颜色'}}</span> | ||
6 | + <i class="icon color" :class="sortClass('color')"></i> | ||
7 | + </li> | ||
8 | + <li v-touch:tap="pickSize"> | ||
9 | + <span class="size">{{sizeName || '尺码'}}</span> | ||
10 | + <i class="icon size" :class="sortClass('size')"></i | ||
11 | + </li> | ||
12 | + </ul> | ||
13 | + <a class="add-btn" v-touch:tap="toCart">{{buttonText}}</a> | ||
14 | + <slide-select v-ref:slideSelect | ||
15 | + :slides="slideList" | ||
16 | + :model="slideId" | ||
17 | + :title="slideTitle" | ||
18 | + :tag="slideTag" | ||
19 | + @selected="slideSelect" | ||
20 | + @hide="slideHide"></slide-select> | ||
21 | +</div> | ||
22 | +</template> | ||
23 | + | ||
24 | +<script> | ||
25 | +const slideSelect = require('./slide-select.vue'); | ||
26 | +const tip = require('common/tip'); | ||
27 | + | ||
28 | +module.exports = { | ||
29 | + name: 'add-to-cart', | ||
30 | + props: { | ||
31 | + value: { | ||
32 | + type: Object, | ||
33 | + default() { | ||
34 | + return {}; | ||
35 | + } | ||
36 | + } | ||
37 | + }, | ||
38 | + data() { | ||
39 | + return { | ||
40 | + skuList: [], | ||
41 | + slideList: [], | ||
42 | + slideTitle: '', | ||
43 | + slideId: 0, | ||
44 | + slideTag: '', | ||
45 | + colorName: '', | ||
46 | + sizeName: '', | ||
47 | + colorId: 0, | ||
48 | + sizeId: 0, | ||
49 | + sku: 0, | ||
50 | + }; | ||
51 | + }, | ||
52 | + computed: { | ||
53 | + cartClass() { | ||
54 | + if (this.value.storage_sum <= 0) { | ||
55 | + return {'no-storage': true}; | ||
56 | + } | ||
57 | + return {}; | ||
58 | + }, | ||
59 | + buttonText() { | ||
60 | + if (this.value.storage_sum <= 0) { | ||
61 | + return '已售罄'; | ||
62 | + } | ||
63 | + return '加入购物车'; | ||
64 | + } | ||
65 | + }, | ||
66 | + methods: { | ||
67 | + sortClass(tag) { | ||
68 | + if (this.slideTag === tag) { | ||
69 | + return {'icon-sort-up': true}; | ||
70 | + } | ||
71 | + if (this.slideTag === tag) { | ||
72 | + return {'icon-sort-up': true}; | ||
73 | + } | ||
74 | + return {'icon-sort-down': true}; | ||
75 | + }, | ||
76 | + pickColor() { | ||
77 | + if (this.skuList.length && this.value.storage_sum > 0) { | ||
78 | + let slides = []; | ||
79 | + | ||
80 | + this.skuList.filter(sku => sku.storage).forEach(sku => { | ||
81 | + if (!slides.some(slide => slide.id === sku.colorId)) { | ||
82 | + slides.push({ | ||
83 | + text: sku.colorName, | ||
84 | + id: sku.colorId | ||
85 | + }); | ||
86 | + } | ||
87 | + }); | ||
88 | + this.slideList = slides; | ||
89 | + this.slideId = this.colorId; | ||
90 | + this.slideTitle = '颜色'; | ||
91 | + this.slideTag = 'color'; | ||
92 | + this.$refs.slideselect.show(); | ||
93 | + } | ||
94 | + }, | ||
95 | + pickSize() { | ||
96 | + if (this.skuList.length && this.value.storage_sum > 0) { | ||
97 | + let slides = []; | ||
98 | + | ||
99 | + this.skuList.filter(sku => sku.storage).forEach(sku => { | ||
100 | + if (!slides.some(slide => slide.id === sku.sizeId) && | ||
101 | + (!this.colorId || sku.colorId === this.colorId)) { | ||
102 | + slides.push({ | ||
103 | + text: sku.sizeName, | ||
104 | + id: sku.sizeId | ||
105 | + }); | ||
106 | + } | ||
107 | + }); | ||
108 | + this.slideList = slides; | ||
109 | + this.slideId = this.sizeId; | ||
110 | + this.slideTitle = '尺码'; | ||
111 | + this.slideTag = 'size'; | ||
112 | + this.$refs.slideselect.show(); | ||
113 | + } | ||
114 | + }, | ||
115 | + slideSelect(params) { | ||
116 | + if (params.tag === 'color') { | ||
117 | + this.colorId = params.slide.id; | ||
118 | + this.colorName = params.slide.text; | ||
119 | + this.sizeId = 0; | ||
120 | + this.sizeName = ''; | ||
121 | + } else { | ||
122 | + this.sizeId = params.slide.id; | ||
123 | + this.sizeName = params.slide.text; | ||
124 | + } | ||
125 | + }, | ||
126 | + processSku(goodsList) { | ||
127 | + let skus = []; | ||
128 | + | ||
129 | + goodsList.filter(color => color.status).forEach(color => { | ||
130 | + color.size_list.filter(size => size.status).forEach(size => { | ||
131 | + if (!skus.some(sku => sku.colorId === color.color_id && sku.sizeId === size.size_id)) { | ||
132 | + skus.push({ | ||
133 | + colorId: color.color_id, | ||
134 | + colorName: color.factory_goods_name, | ||
135 | + sizeId: size.size_id, | ||
136 | + sizeName: size.size_name, | ||
137 | + sku: size.product_sku, | ||
138 | + storage: size.storage_number, | ||
139 | + }); | ||
140 | + } | ||
141 | + }); | ||
142 | + }); | ||
143 | + return skus; | ||
144 | + }, | ||
145 | + toCart() { | ||
146 | + if (this.value.storage_sum <= 0) { | ||
147 | + return; | ||
148 | + } | ||
149 | + if (!this.colorId) { | ||
150 | + return tip('请选择颜色'); | ||
151 | + } | ||
152 | + if (!this.sizeId) { | ||
153 | + return tip('请选择尺码'); | ||
154 | + } | ||
155 | + let sku = this.skuList.find(s => s.colorId === this.colorId && s.sizeId === this.sizeId); | ||
156 | + | ||
157 | + if (sku) { | ||
158 | + this.reset(); | ||
159 | + this.$emit('add-cart', sku); | ||
160 | + } | ||
161 | + }, | ||
162 | + slideHide() { | ||
163 | + this.slideTag = ''; | ||
164 | + }, | ||
165 | + reset() { | ||
166 | + this.colorName = ''; | ||
167 | + this.sizeName = ''; | ||
168 | + this.colorId = 0; | ||
169 | + this.sizeId = 0; | ||
170 | + }, | ||
171 | + }, | ||
172 | + watch: { | ||
173 | + value(val) { | ||
174 | + if (val) { | ||
175 | + this.skuList = this.processSku(val.goods_list); | ||
176 | + } | ||
177 | + } | ||
178 | + }, | ||
179 | + components: {slideSelect} | ||
180 | +}; | ||
181 | +</script> | ||
182 | + | ||
183 | +<style> | ||
184 | +.add-cart { | ||
185 | + &.no-storage { | ||
186 | + .cart-detail { | ||
187 | + color: #b0b0b0; | ||
188 | + | ||
189 | + .icon { | ||
190 | + display: none; | ||
191 | + } | ||
192 | + } | ||
193 | + | ||
194 | + .add-btn { | ||
195 | + background-color: #b0b0b0; | ||
196 | + border-color: #b0b0b0; | ||
197 | + } | ||
198 | + } | ||
199 | + | ||
200 | + .cart-detail { | ||
201 | + font-size: 0; | ||
202 | + height: 100px; | ||
203 | + margin-bottom: 40px; | ||
204 | + border-top: 1px solid #eee; | ||
205 | + border-bottom: 1px solid #eee; | ||
206 | + display: flex; | ||
207 | + | ||
208 | + li { | ||
209 | + position: relative; | ||
210 | + display: flex; | ||
211 | + line-height: 100px; | ||
212 | + height: 100px; | ||
213 | + overflow: hidden; | ||
214 | + font-size: 32px; | ||
215 | + flex: 1 1 100%; | ||
216 | + align-items: center; | ||
217 | + justify-content: space-between; | ||
218 | + | ||
219 | + .icon { | ||
220 | + float: right; | ||
221 | + font-weight: bold; | ||
222 | + font-size: 40px; | ||
223 | + | ||
224 | + &.icon-sort-down { | ||
225 | + margin-top: -15px; | ||
226 | + } | ||
227 | + } | ||
228 | + | ||
229 | + span { | ||
230 | + display: block; | ||
231 | + height: 40px; | ||
232 | + line-height: 40px; | ||
233 | + } | ||
234 | + | ||
235 | + &:first-child { | ||
236 | + padding-right: 30px; | ||
237 | + } | ||
238 | + | ||
239 | + &:last-child { | ||
240 | + span { | ||
241 | + padding-left: 30px; | ||
242 | + border-left: solid 1px #e0e0e0; | ||
243 | + } | ||
244 | + } | ||
245 | + } | ||
246 | + } | ||
247 | + | ||
248 | + .add-btn { | ||
249 | + display: inline-block; | ||
250 | + width: 100%; | ||
251 | + height: 85px; | ||
252 | + color: #fff; | ||
253 | + font-size: 32px; | ||
254 | + text-align: center; | ||
255 | + line-height: 82px; | ||
256 | + background-color: #000; | ||
257 | + border: 1px solid #7a7a7a; | ||
258 | + } | ||
259 | +} | ||
260 | +</style> |
1 | +<template> | ||
2 | + <div class="select-header"> | ||
3 | + <div class="title">{{title}}</div> | ||
4 | + <a href="javascript:;" class="btn-sure" @click="selected">确定</a> | ||
5 | + </div> | ||
6 | +</template> | ||
7 | + | ||
8 | +<script> | ||
9 | +module.exports = { | ||
10 | + name: 'slide-select-header', | ||
11 | + props: ['title'], | ||
12 | + methods: { | ||
13 | + selected() { | ||
14 | + this.$emit('selected'); | ||
15 | + } | ||
16 | + } | ||
17 | +}; | ||
18 | +</script> | ||
19 | + | ||
20 | +<style> | ||
21 | +.select-header { | ||
22 | + width: 100%; | ||
23 | + height: 80px; | ||
24 | + line-height: 80px; | ||
25 | + border-bottom: 1px solid #e0e0e0; | ||
26 | + font-size: 32px; | ||
27 | + background-color: #000; | ||
28 | + | ||
29 | + .title { | ||
30 | + float: left; | ||
31 | + padding-left: 25px; | ||
32 | + color: #fff; | ||
33 | + } | ||
34 | + | ||
35 | + .btn-sure { | ||
36 | + float: right; | ||
37 | + display: block; | ||
38 | + width: 100px; | ||
39 | + color: #4a90e2; | ||
40 | + text-align: center; | ||
41 | + } | ||
42 | +} | ||
43 | +</style> |
1 | +<template> | ||
2 | + <div class="select-swipe" | ||
3 | + v-touch:panmove="panmove" | ||
4 | + v-touch:panstart="panstart" | ||
5 | + v-touch:panend="panend"> | ||
6 | + <div class="select-foucs"></div> | ||
7 | + <ul class="select-ul" | ||
8 | + :style="selectStyle"> | ||
9 | + <li class="item" :class="itemClass(size)" v-for="size in slides" :key="size.id"> | ||
10 | + <p>{{size.text}}</p> | ||
11 | + </li> | ||
12 | + </ul> | ||
13 | +</div> | ||
14 | +</template> | ||
15 | + | ||
16 | +<script> | ||
17 | +module.exports = { | ||
18 | + name: 'slide-select-swipe', | ||
19 | + props: { | ||
20 | + slides: { | ||
21 | + type: Array, | ||
22 | + default() { | ||
23 | + return []; | ||
24 | + } | ||
25 | + }, | ||
26 | + model: { | ||
27 | + type: Number, | ||
28 | + default: 0 | ||
29 | + } | ||
30 | + }, | ||
31 | + data() { | ||
32 | + return { | ||
33 | + selectStyle: { | ||
34 | + transform: 'translate(0, 0)', | ||
35 | + }, | ||
36 | + transitionStyle: '', | ||
37 | + translateY: 0, | ||
38 | + currentIndex: 2, | ||
39 | + itemHeight: 0, | ||
40 | + }; | ||
41 | + }, | ||
42 | + methods: { | ||
43 | + renderModel() { | ||
44 | + if (this.model > 0) { | ||
45 | + this.currentIndex = this.slides.findIndex(slide => slide.id === this.model); | ||
46 | + } else { | ||
47 | + if (this.slides.length > 3) { | ||
48 | + this.currentIndex = 2; | ||
49 | + } else { | ||
50 | + this.currentIndex = 0; | ||
51 | + } | ||
52 | + } | ||
53 | + this.$emit('change', this.slides[this.currentIndex].id); | ||
54 | + this.$nextTick(() => { | ||
55 | + this.itemHeight = document.querySelector('.select-ul .item').clientHeight; | ||
56 | + this.translateY = 0 - this.currentIndex * this.itemHeight; | ||
57 | + this.transform(); | ||
58 | + }); | ||
59 | + }, | ||
60 | + transform() { | ||
61 | + this.selectStyle.transform = `translate(0px, ${this.translateY + this.itemHeight * 2}px)`; | ||
62 | + this.selectStyle.transition = this.transitionStyle; | ||
63 | + }, | ||
64 | + itemClass(slide) { | ||
65 | + let cls = {}; | ||
66 | + let slideIndex = this.slides.findIndex(s => s === slide); | ||
67 | + | ||
68 | + if (this.currentIndex === slideIndex) { | ||
69 | + cls.current = true; | ||
70 | + } else if (this.currentIndex - slideIndex === 1) { | ||
71 | + cls['current-prev'] = true; | ||
72 | + } else if (this.currentIndex - slideIndex === -1) { | ||
73 | + cls['current-next'] = true; | ||
74 | + } else if (this.currentIndex > slideIndex) { | ||
75 | + cls.prev = true; | ||
76 | + } else { | ||
77 | + cls.next = true; | ||
78 | + } | ||
79 | + return cls; | ||
80 | + }, | ||
81 | + panstart() { | ||
82 | + this.originY = 0 - this.currentIndex * this.itemHeight; | ||
83 | + this.transitionStyle = ''; | ||
84 | + this.selectStyle['will-change'] = 'transform'; | ||
85 | + this.transform(); | ||
86 | + }, | ||
87 | + panmove(e) { | ||
88 | + this.translateY = e.deltaY / 1.5 + this.originY; | ||
89 | + if (this.translateY > 0) { | ||
90 | + this.currentIndex = 0; | ||
91 | + } else { | ||
92 | + this.currentIndex = Math.abs(Math.round(this.translateY / this.itemHeight)); | ||
93 | + if (this.currentIndex >= this.slides.length) { | ||
94 | + this.currentIndex = this.slides.length - 1; | ||
95 | + } | ||
96 | + } | ||
97 | + this.transform(); | ||
98 | + }, | ||
99 | + panend() { | ||
100 | + this.translateY = 0 - this.currentIndex * this.itemHeight; | ||
101 | + this.transitionStyle = 'transform 0.5s cubic-bezier(0.4, 0, 0.2, 1)'; | ||
102 | + delete this.selectStyle['will-change']; | ||
103 | + this.$emit('change', this.slides[this.currentIndex].id); | ||
104 | + this.transform(); | ||
105 | + }, | ||
106 | + }, | ||
107 | + watch: { | ||
108 | + slides(val) { | ||
109 | + this.slides = val; | ||
110 | + this.renderModel(); | ||
111 | + } | ||
112 | + }, | ||
113 | +}; | ||
114 | +</script> | ||
115 | + | ||
116 | +<style> | ||
117 | +$item-height: 68px; | ||
118 | + | ||
119 | +.select-swipe { | ||
120 | + width: 100%; | ||
121 | + height: 340px; | ||
122 | + margin-top: 46px; | ||
123 | + position: relative; | ||
124 | + overflow: hidden; | ||
125 | + | ||
126 | + .select-foucs { | ||
127 | + width: 100%; | ||
128 | + height: $item-height; | ||
129 | + margin-top: calc(2 * $item-height); | ||
130 | + border-top: 1px solid #e0e0e0; | ||
131 | + border-bottom: 1px solid #e0e0e0; | ||
132 | + } | ||
133 | + | ||
134 | + .select-ul { | ||
135 | + position: absolute; | ||
136 | + top: 0; | ||
137 | + left: 0; | ||
138 | + right: 0; | ||
139 | + bottom: 0; | ||
140 | + | ||
141 | + .item { | ||
142 | + width: 100%; | ||
143 | + float: left; | ||
144 | + height: $item-height; | ||
145 | + text-align: center; | ||
146 | + | ||
147 | + p { | ||
148 | + transition: transform 0.1s linear; | ||
149 | + line-height: $item-height; | ||
150 | + font-size: 32px; | ||
151 | + } | ||
152 | + | ||
153 | + &.current p { | ||
154 | + transform: rotateX(0deg); | ||
155 | + color: #000; | ||
156 | + } | ||
157 | + | ||
158 | + &.current-prev p { | ||
159 | + transform: rotateX(10deg) translate(0, -5px); | ||
160 | + color: #b0b0b0; | ||
161 | + } | ||
162 | + | ||
163 | + &.current-next p { | ||
164 | + transform: rotateX(-10deg) translate(0, 5px); | ||
165 | + color: #b0b0b0; | ||
166 | + } | ||
167 | + | ||
168 | + &.prev p { | ||
169 | + transform: rotateX(25deg); | ||
170 | + color: #d9d9d9; | ||
171 | + } | ||
172 | + | ||
173 | + &.next p { | ||
174 | + transform: rotateX(-25deg); | ||
175 | + color: #d9d9d9; | ||
176 | + } | ||
177 | + } | ||
178 | + } | ||
179 | +} | ||
180 | +</style> |
1 | +<template> | ||
2 | +<div class="slide-select" :class="{active: active, 'slide-in': slideIn}"> | ||
3 | + <div class="shadow" v-touch:tap="hide"></div> | ||
4 | + <div class="select-box"> | ||
5 | + <slide-select-header :title="title" @selected="selected"></slide-select-header> | ||
6 | + <slide-select-swipe v-if="active" | ||
7 | + :model="model" | ||
8 | + :slides="currentSlides" | ||
9 | + @change="slideChange"></slide-select-swipe> | ||
10 | + </div> | ||
11 | +</div> | ||
12 | +</template> | ||
13 | + | ||
14 | +<script> | ||
15 | +const slideSelectHeader = require('./slide-select-header.vue'); | ||
16 | +const slideSelectSwipe = require('./slide-select-swipe.vue'); | ||
17 | + | ||
18 | +module.exports = { | ||
19 | + name: 'slide-select', | ||
20 | + props: { | ||
21 | + slides: { | ||
22 | + type: Array, | ||
23 | + default() { | ||
24 | + return []; | ||
25 | + } | ||
26 | + }, | ||
27 | + model: { | ||
28 | + type: Number, | ||
29 | + default: 0 | ||
30 | + }, | ||
31 | + title: { | ||
32 | + type: String, | ||
33 | + }, | ||
34 | + tag: { | ||
35 | + type: String, | ||
36 | + } | ||
37 | + }, | ||
38 | + data() { | ||
39 | + return { | ||
40 | + active: false, | ||
41 | + slideIn: false, | ||
42 | + currentSlides: this.slides, | ||
43 | + currentModel: this.model | ||
44 | + }; | ||
45 | + }, | ||
46 | + methods: { | ||
47 | + show() { | ||
48 | + this.active = true; | ||
49 | + setTimeout(() => { | ||
50 | + this.slideIn = true; | ||
51 | + }, 0); | ||
52 | + this.bodyElStyle = document.querySelector('body').style; | ||
53 | + this.bodyElStyle.position = 'absolute'; | ||
54 | + this.bodyElStyle.top = 0; | ||
55 | + this.bodyElStyle.left = 0; | ||
56 | + this.bodyElStyle.right = 0; | ||
57 | + this.bodyElStyle.bottom = 0; | ||
58 | + this.bodyElStyle.overflow = 'hidden'; | ||
59 | + this.$emit('show', this.tag); | ||
60 | + }, | ||
61 | + hide() { | ||
62 | + this.slideIn = false; | ||
63 | + setTimeout(() => { | ||
64 | + this.active = false; | ||
65 | + }, 200); | ||
66 | + this.bodyElStyle.position = 'static'; | ||
67 | + this.bodyElStyle.overflow = 'auto'; | ||
68 | + this.$emit('hide', this.tag); | ||
69 | + }, | ||
70 | + slideChange(model) { | ||
71 | + this.currentModel = model; | ||
72 | + }, | ||
73 | + selected() { | ||
74 | + let currentSlide = this.currentSlides.find(slide => slide.id === this.currentModel); | ||
75 | + | ||
76 | + this.hide(); | ||
77 | + this.$emit('selected', {slide: currentSlide, tag: this.tag }); | ||
78 | + } | ||
79 | + }, | ||
80 | + beforeDestroy() { | ||
81 | + this.bodyElStyle.position = 'static'; | ||
82 | + this.bodyElStyle.overflow = 'auto'; | ||
83 | + }, | ||
84 | + watch: { | ||
85 | + slides(val) { | ||
86 | + this.currentSlides = val; | ||
87 | + }, | ||
88 | + model(val) { | ||
89 | + this.model = val; | ||
90 | + } | ||
91 | + }, | ||
92 | + components: { | ||
93 | + slideSelectHeader, | ||
94 | + slideSelectSwipe, | ||
95 | + } | ||
96 | +}; | ||
97 | + | ||
98 | +</script> | ||
99 | + | ||
100 | +<style> | ||
101 | +$show-speed: 0.2s; | ||
102 | + | ||
103 | +.slide-select { | ||
104 | + position: fixed; | ||
105 | + top: 0; | ||
106 | + left: 0; | ||
107 | + right: 0; | ||
108 | + bottom: 0; | ||
109 | + z-index: 211; | ||
110 | + display: none; | ||
111 | + | ||
112 | + &.active { | ||
113 | + display: block; | ||
114 | + } | ||
115 | + | ||
116 | + &.slide-in { | ||
117 | + .shadow { | ||
118 | + background-color: rgba(0, 0, 0, 0.2); | ||
119 | + } | ||
120 | + | ||
121 | + .select-box { | ||
122 | + transform: translate(0, 0); | ||
123 | + } | ||
124 | + } | ||
125 | +} | ||
126 | + | ||
127 | +.shadow { | ||
128 | + position: absolute; | ||
129 | + top: 0; | ||
130 | + left: 0; | ||
131 | + right: 0; | ||
132 | + bottom: 0; | ||
133 | + z-index: 1; | ||
134 | + background-color: rgba(0, 0, 0, 0); | ||
135 | + transition: background-color $show-speed ease-in-out; | ||
136 | +} | ||
137 | + | ||
138 | +.select-box { | ||
139 | + position: absolute; | ||
140 | + left: 0; | ||
141 | + right: 0; | ||
142 | + bottom: 0; | ||
143 | + height: 511px; | ||
144 | + background-color: #fff; | ||
145 | + z-index: 2; | ||
146 | + transform: translate(0, 100%); | ||
147 | + transition: transform $show-speed ease-in-out; | ||
148 | +} | ||
149 | + | ||
150 | +</style> |
1 | <template> | 1 | <template> |
2 | +<div> | ||
2 | <top-nav v-if="isApp"></top-nav> | 3 | <top-nav v-if="isApp"></top-nav> |
3 | <show-box :is-first="true"> | 4 | <show-box :is-first="true"> |
4 | <image-swiper :goods="entity.goods_list"></image-swiper> | 5 | <image-swiper :goods="entity.goods_list"></image-swiper> |
@@ -23,29 +24,16 @@ | @@ -23,29 +24,16 @@ | ||
23 | </li> | 24 | </li> |
24 | </ul> | 25 | </ul> |
25 | </div> | 26 | </div> |
26 | - <hr> | ||
27 | - <div> | ||
28 | - <ul class="service"> | 27 | + <div class="service"> |
28 | + <ul> | ||
29 | <li><i class="icon icon-real"></i>100%品牌正品</li> | 29 | <li><i class="icon icon-real"></i>100%品牌正品</li> |
30 | <li class="return" v-if="intro.supportRefundExchange === 'N'"> | 30 | <li class="return" v-if="intro.supportRefundExchange === 'N'"> |
31 | <i class="icon icon-unsupport-seven"></i>不支持7天无理由退换货</li> | 31 | <i class="icon icon-unsupport-seven"></i>不支持7天无理由退换货</li> |
32 | - <li class="return" v-else><i class="icon icon-seven"></i>支持7天无理由退换货</li> | 32 | + <li class="return" v-else><i class="icon icon-seven"></i>7天无理由退换货</li> |
33 | <li><i class="icon icon-onlineservice"></i>便捷在线客服</li> | 33 | <li><i class="icon icon-onlineservice"></i>便捷在线客服</li> |
34 | </ul> | 34 | </ul> |
35 | </div> | 35 | </div> |
36 | - <hr> | ||
37 | - <div class="add-cart"> | ||
38 | - <ul class="cart-detail"> | ||
39 | - <li> | ||
40 | - <span class="color">颜色 <i class="icon icon-sort-up color" @click="pickColor"></i></span> | ||
41 | - </li> | ||
42 | - <li> | ||
43 | - <span class="size">尺码 <i class="icon icon-sort-down size"></i></span> | ||
44 | - </li> | ||
45 | - </ul> | ||
46 | - <hr> | ||
47 | - <a class="add-btn">加入购物车</a> | ||
48 | - </div> | 36 | + <add-to-cart :value="entity" @add-cart="addCart"></add-to-cart> |
49 | </show-box> | 37 | </show-box> |
50 | <show-box :is-last="preferList.length <= 0"> | 38 | <show-box :is-last="preferList.length <= 0"> |
51 | <div v-if="intro.productDescBo"> | 39 | <div v-if="intro.productDescBo"> |
@@ -269,9 +257,7 @@ | @@ -269,9 +257,7 @@ | ||
269 | <div v-if="!isApp"> | 257 | <div v-if="!isApp"> |
270 | <share-bottom></share-bottom> | 258 | <share-bottom></share-bottom> |
271 | </div> | 259 | </div> |
272 | - | ||
273 | - <feature-selector :is-visible="showFeatureSelector" :entity="entity" | ||
274 | - :on-add-to-cart="onAddToCart"></feature-selector> | 260 | +</div> |
275 | </template> | 261 | </template> |
276 | <script> | 262 | <script> |
277 | /** | 263 | /** |
@@ -300,36 +286,7 @@ | @@ -300,36 +286,7 @@ | ||
300 | entity: {}, | 286 | entity: {}, |
301 | showFeatureSelector: false, | 287 | showFeatureSelector: false, |
302 | cartCount: 0, | 288 | cartCount: 0, |
303 | - | ||
304 | - /** | ||
305 | - * 加入购物车回调 | ||
306 | - * | ||
307 | - * @param result | ||
308 | - */ | ||
309 | - onAddToCart: (selection, selector)=> { | ||
310 | - $.post('/product/cart.json', { | ||
311 | - productSku: selection.size.value, | ||
312 | - buyNumber: 1 | ||
313 | - }).then((result)=> { | ||
314 | - if (yoho.goShopingKey && result.data && result.data.shopping_key) { | ||
315 | - yoho.goShopingKey({shoppingKey: result.data.shopping_key}); | ||
316 | - } | ||
317 | - | ||
318 | - // TODO: 库存不足 后台暂未实现 | ||
319 | - // TODO: 商品已下架 后台暂未实现 | ||
320 | - if (result.code === 200) { | ||
321 | - this.cartCount = result.data.goods_count; | ||
322 | - | ||
323 | - selector.playAnimation(); | ||
324 | - } else { | ||
325 | - result.message = '添加购物车失败 >_<'; | ||
326 | - } | ||
327 | - | ||
328 | - this.showFeatureSelector = false; | ||
329 | - tip(result.message); | ||
330 | - }); | ||
331 | - }, | ||
332 | - isApp: yoho.isApp, | 289 | + isApp: true, // TODO yoho.isApp, |
333 | isSoldOut: false, | 290 | isSoldOut: false, |
334 | isReady: false, | 291 | isReady: false, |
335 | preferTitle: 'You Might Also Like', | 292 | preferTitle: 'You Might Also Like', |
@@ -348,6 +305,7 @@ | @@ -348,6 +305,7 @@ | ||
348 | components: { | 305 | components: { |
349 | imageSwiper: require('./image-swiper.vue'), | 306 | imageSwiper: require('./image-swiper.vue'), |
350 | featureSelector: require('component/product/feature-selector.vue'), | 307 | featureSelector: require('component/product/feature-selector.vue'), |
308 | + addToCart: require('component/product/cart/add-to-cart.vue'), | ||
351 | showBox: require('./show-box.vue'), | 309 | showBox: require('./show-box.vue'), |
352 | topNav: require('./top-nav.vue'), | 310 | topNav: require('./top-nav.vue'), |
353 | shareBottom: require('component/tool/share-bottom.vue'), | 311 | shareBottom: require('component/tool/share-bottom.vue'), |
@@ -356,9 +314,30 @@ | @@ -356,9 +314,30 @@ | ||
356 | operationBar: require('./operation-bar.vue') | 314 | operationBar: require('./operation-bar.vue') |
357 | }, | 315 | }, |
358 | methods: { | 316 | methods: { |
359 | - extendSwitch: function (module) { | 317 | + extendSwitch: function(module) { |
360 | this.extSwitch[module] = !this.extSwitch[module]; | 318 | this.extSwitch[module] = !this.extSwitch[module]; |
361 | }, | 319 | }, |
320 | + addCart(sku) { | ||
321 | + $.post('/product/cart.json', { | ||
322 | + productSku: sku.sku, | ||
323 | + buyNumber: 1 | ||
324 | + }).then((result)=> { | ||
325 | + if (yoho.goShopingKey && result.data && result.data.shopping_key) { | ||
326 | + yoho.goShopingKey({shoppingKey: result.data.shopping_key}); | ||
327 | + } | ||
328 | + | ||
329 | + // TODO: 库存不足 后台暂未实现 | ||
330 | + // TODO: 商品已下架 后台暂未实现 | ||
331 | + if (result.code === 200) { | ||
332 | + this.cartCount = result.data.goods_count; | ||
333 | + } else { | ||
334 | + result.message = '添加购物车失败 >_<'; | ||
335 | + } | ||
336 | + | ||
337 | + this.showFeatureSelector = false; | ||
338 | + tip(result.message); | ||
339 | + }); | ||
340 | + }, | ||
362 | 341 | ||
363 | /** | 342 | /** |
364 | * 添加到购物车 | 343 | * 添加到购物车 |
@@ -392,10 +371,6 @@ | @@ -392,10 +371,6 @@ | ||
392 | }); | 371 | }); |
393 | }, | 372 | }, |
394 | 373 | ||
395 | - pickColor(){ | ||
396 | - this.$refs.picker.show(); | ||
397 | - }, | ||
398 | - | ||
399 | share() { | 374 | share() { |
400 | yoho.goShare({ | 375 | yoho.goShare({ |
401 | title: this.title || '', | 376 | title: this.title || '', |
@@ -469,7 +444,7 @@ | @@ -469,7 +444,7 @@ | ||
469 | 444 | ||
470 | // 是否支持7天无理由退换货 | 445 | // 是否支持7天无理由退换货 |
471 | $.get(`/product/refundExchange/${data.product_skn}`).then(sd => { | 446 | $.get(`/product/refundExchange/${data.product_skn}`).then(sd => { |
472 | - let support = sd.data[data.product_skn] === "N" ? "Y" : "N"; | 447 | + let support = sd.data[data.product_skn] === 'N' ? 'Y' : 'N'; |
473 | 448 | ||
474 | this.$set('intro.supportRefundExchange', support); | 449 | this.$set('intro.supportRefundExchange', support); |
475 | }); | 450 | }); |
@@ -536,81 +511,42 @@ | @@ -536,81 +511,42 @@ | ||
536 | } | 511 | } |
537 | } | 512 | } |
538 | 513 | ||
539 | - ul.service { | ||
540 | - font-size: 0; | 514 | + .service { |
515 | + border-top: 1px solid #eee; | ||
516 | + | ||
517 | + ul { | ||
518 | + font-size: 0; | ||
519 | + height: 108px; | ||
520 | + width: 700px; | ||
521 | + transform-origin: left; | ||
522 | + transform: scale(0.985); | ||
523 | + } | ||
541 | 524 | ||
542 | li { | 525 | li { |
543 | - font-size: 24px; | ||
544 | - width: 195px; | ||
545 | - line-height: 22px; | 526 | + font-size: 20px; |
527 | + width: 200px; | ||
546 | text-align: center; | 528 | text-align: center; |
529 | + line-height: 108px; | ||
530 | + height: 108px; | ||
531 | + overflow: hidden; | ||
547 | display: inline-block; | 532 | display: inline-block; |
533 | + color: #b0b0b0; | ||
548 | 534 | ||
549 | i.icon { | 535 | i.icon { |
550 | margin-right: 6px; | 536 | margin-right: 6px; |
551 | } | 537 | } |
552 | 538 | ||
553 | - &.return { | ||
554 | - width: 300px; | ||
555 | - border-left: 1px solid #eee; | ||
556 | - border-right: 1px solid #eee; | 539 | + &:first-child { |
540 | + text-align: left; | ||
557 | } | 541 | } |
558 | - } | ||
559 | - } | ||
560 | - | ||
561 | - .add-cart { | ||
562 | - .cart-detail { | ||
563 | - font-size: 0; | ||
564 | - | ||
565 | - li { | ||
566 | - position: relative; | ||
567 | - display: inline-block; | ||
568 | - width: 50%; | ||
569 | - font-size: 32px; | ||
570 | - | ||
571 | - .icon { | ||
572 | - position: absolute; | ||
573 | - font-size: 40px; | ||
574 | - | ||
575 | - &.color { | ||
576 | - right: 25px; | ||
577 | - } | ||
578 | - | ||
579 | - &.size { | ||
580 | - right: 0; | ||
581 | - } | ||
582 | - } | ||
583 | - | ||
584 | - .icon-sort-up { | ||
585 | - top: 14px; | ||
586 | - } | ||
587 | - | ||
588 | - .icon-sort-down { | ||
589 | - top: -10px; | ||
590 | - } | ||
591 | - | ||
592 | - &:first-child { | ||
593 | - padding-right: 25px; | ||
594 | - border-right: 1px solid #e0e0e0; | ||
595 | - } | ||
596 | - | ||
597 | - &:last-child { | ||
598 | - padding-left: 30px; | ||
599 | - } | ||
600 | 542 | ||
543 | + &:last-child { | ||
544 | + text-align: right; | ||
601 | } | 545 | } |
602 | - } | ||
603 | 546 | ||
604 | - .add-btn { | ||
605 | - display: inline-block; | ||
606 | - width: 100%; | ||
607 | - height: 85px; | ||
608 | - color: #fff; | ||
609 | - font-size: 32px; | ||
610 | - text-align: center; | ||
611 | - line-height: 82px; | ||
612 | - background-color: #000; | ||
613 | - border: 1px solid #7a7a7a; | 547 | + &.return { |
548 | + width: 300px; | ||
549 | + } | ||
614 | } | 550 | } |
615 | } | 551 | } |
616 | 552 |
@@ -152,7 +152,7 @@ array-differ@^1.0.0: | @@ -152,7 +152,7 @@ array-differ@^1.0.0: | ||
152 | version "1.0.0" | 152 | version "1.0.0" |
153 | resolved "http://npm.yoho.cn/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" | 153 | resolved "http://npm.yoho.cn/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" |
154 | 154 | ||
155 | -array-find-index@^1.0.1: | 155 | +array-find-index@^1.0.1, array-find-index@^1.0.2: |
156 | version "1.0.2" | 156 | version "1.0.2" |
157 | resolved "http://npm.yoho.cn/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" | 157 | resolved "http://npm.yoho.cn/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" |
158 | 158 | ||
@@ -263,7 +263,7 @@ async@^1.5.2: | @@ -263,7 +263,7 @@ async@^1.5.2: | ||
263 | version "1.5.2" | 263 | version "1.5.2" |
264 | resolved "http://npm.yoho.cn/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" | 264 | resolved "http://npm.yoho.cn/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" |
265 | 265 | ||
266 | -async@^2.1.2, async@^2.4.1: | 266 | +async@^2.1.2, async@^2.1.5, async@^2.4.1: |
267 | version "2.5.0" | 267 | version "2.5.0" |
268 | resolved "http://npm.yoho.cn/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" | 268 | resolved "http://npm.yoho.cn/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" |
269 | dependencies: | 269 | dependencies: |
@@ -1310,6 +1310,15 @@ clone-buffer@^1.0.0: | @@ -1310,6 +1310,15 @@ clone-buffer@^1.0.0: | ||
1310 | version "1.0.0" | 1310 | version "1.0.0" |
1311 | resolved "http://npm.yoho.cn/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" | 1311 | resolved "http://npm.yoho.cn/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" |
1312 | 1312 | ||
1313 | +clone-deep@^0.3.0: | ||
1314 | + version "0.3.0" | ||
1315 | + resolved "http://npm.yoho.cn/clone-deep/-/clone-deep-0.3.0.tgz#348c61ae9cdbe0edfe053d91ff4cc521d790ede8" | ||
1316 | + dependencies: | ||
1317 | + for-own "^1.0.0" | ||
1318 | + is-plain-object "^2.0.1" | ||
1319 | + kind-of "^3.2.2" | ||
1320 | + shallow-clone "^0.1.2" | ||
1321 | + | ||
1313 | clone-function@>=1.0.1: | 1322 | clone-function@>=1.0.1: |
1314 | version "1.0.6" | 1323 | version "1.0.6" |
1315 | resolved "http://npm.yoho.cn/clone-function/-/clone-function-1.0.6.tgz#428471937750bca9c48ecbfbc16f6e232f74a03d" | 1324 | resolved "http://npm.yoho.cn/clone-function/-/clone-function-1.0.6.tgz#428471937750bca9c48ecbfbc16f6e232f74a03d" |
@@ -2806,6 +2815,10 @@ flatten@^1.0.2: | @@ -2806,6 +2815,10 @@ flatten@^1.0.2: | ||
2806 | version "1.0.2" | 2815 | version "1.0.2" |
2807 | resolved "http://npm.yoho.cn/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" | 2816 | resolved "http://npm.yoho.cn/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" |
2808 | 2817 | ||
2818 | +for-in@^0.1.3: | ||
2819 | + version "0.1.8" | ||
2820 | + resolved "http://npm.yoho.cn/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" | ||
2821 | + | ||
2809 | for-in@^1.0.1: | 2822 | for-in@^1.0.1: |
2810 | version "1.0.2" | 2823 | version "1.0.2" |
2811 | resolved "http://npm.yoho.cn/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" | 2824 | resolved "http://npm.yoho.cn/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" |
@@ -2816,6 +2829,12 @@ for-own@^0.1.4: | @@ -2816,6 +2829,12 @@ for-own@^0.1.4: | ||
2816 | dependencies: | 2829 | dependencies: |
2817 | for-in "^1.0.1" | 2830 | for-in "^1.0.1" |
2818 | 2831 | ||
2832 | +for-own@^1.0.0: | ||
2833 | + version "1.0.0" | ||
2834 | + resolved "http://npm.yoho.cn/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" | ||
2835 | + dependencies: | ||
2836 | + for-in "^1.0.1" | ||
2837 | + | ||
2819 | foreach@^2.0.5: | 2838 | foreach@^2.0.5: |
2820 | version "2.0.5" | 2839 | version "2.0.5" |
2821 | resolved "http://npm.yoho.cn/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" | 2840 | resolved "http://npm.yoho.cn/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" |
@@ -3686,6 +3705,12 @@ is-plain-obj@^1.0.0: | @@ -3686,6 +3705,12 @@ is-plain-obj@^1.0.0: | ||
3686 | version "1.1.0" | 3705 | version "1.1.0" |
3687 | resolved "http://npm.yoho.cn/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" | 3706 | resolved "http://npm.yoho.cn/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" |
3688 | 3707 | ||
3708 | +is-plain-object@^2.0.1: | ||
3709 | + version "2.0.4" | ||
3710 | + resolved "http://npm.yoho.cn/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" | ||
3711 | + dependencies: | ||
3712 | + isobject "^3.0.1" | ||
3713 | + | ||
3689 | is-posix-bracket@^0.1.0: | 3714 | is-posix-bracket@^0.1.0: |
3690 | version "0.1.1" | 3715 | version "0.1.1" |
3691 | resolved "http://npm.yoho.cn/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" | 3716 | resolved "http://npm.yoho.cn/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" |
@@ -3758,6 +3783,10 @@ isobject@^2.0.0: | @@ -3758,6 +3783,10 @@ isobject@^2.0.0: | ||
3758 | dependencies: | 3783 | dependencies: |
3759 | isarray "1.0.0" | 3784 | isarray "1.0.0" |
3760 | 3785 | ||
3786 | +isobject@^3.0.1: | ||
3787 | + version "3.0.1" | ||
3788 | + resolved "http://npm.yoho.cn/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" | ||
3789 | + | ||
3761 | isstream@0.1.x, isstream@~0.1.2: | 3790 | isstream@0.1.x, isstream@~0.1.2: |
3762 | version "0.1.2" | 3791 | version "0.1.2" |
3763 | resolved "http://npm.yoho.cn/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" | 3792 | resolved "http://npm.yoho.cn/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" |
@@ -3894,7 +3923,13 @@ kew@~0.7.0: | @@ -3894,7 +3923,13 @@ kew@~0.7.0: | ||
3894 | version "0.7.0" | 3923 | version "0.7.0" |
3895 | resolved "http://npm.yoho.cn/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" | 3924 | resolved "http://npm.yoho.cn/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" |
3896 | 3925 | ||
3897 | -kind-of@^3.0.2: | 3926 | +kind-of@^2.0.1: |
3927 | + version "2.0.1" | ||
3928 | + resolved "http://npm.yoho.cn/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" | ||
3929 | + dependencies: | ||
3930 | + is-buffer "^1.0.2" | ||
3931 | + | ||
3932 | +kind-of@^3.0.2, kind-of@^3.2.2: | ||
3898 | version "3.2.2" | 3933 | version "3.2.2" |
3899 | resolved "http://npm.yoho.cn/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" | 3934 | resolved "http://npm.yoho.cn/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" |
3900 | dependencies: | 3935 | dependencies: |
@@ -3928,6 +3963,10 @@ layout@~2.2.0: | @@ -3928,6 +3963,10 @@ layout@~2.2.0: | ||
3928 | dependencies: | 3963 | dependencies: |
3929 | bin-pack "~1.0.1" | 3964 | bin-pack "~1.0.1" |
3930 | 3965 | ||
3966 | +lazy-cache@^0.2.3: | ||
3967 | + version "0.2.7" | ||
3968 | + resolved "http://npm.yoho.cn/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" | ||
3969 | + | ||
3931 | lazy-cache@^1.0.3: | 3970 | lazy-cache@^1.0.3: |
3932 | version "1.0.4" | 3971 | version "1.0.4" |
3933 | resolved "http://npm.yoho.cn/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" | 3972 | resolved "http://npm.yoho.cn/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" |
@@ -3992,7 +4031,7 @@ loader-utils@1.0.x, loader-utils@^1.0.2: | @@ -3992,7 +4031,7 @@ loader-utils@1.0.x, loader-utils@^1.0.2: | ||
3992 | emojis-list "^2.0.0" | 4031 | emojis-list "^2.0.0" |
3993 | json5 "^0.5.0" | 4032 | json5 "^0.5.0" |
3994 | 4033 | ||
3995 | -loader-utils@^1.1.0: | 4034 | +loader-utils@^1.0.1, loader-utils@^1.1.0: |
3996 | version "1.1.0" | 4035 | version "1.1.0" |
3997 | resolved "http://npm.yoho.cn/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" | 4036 | resolved "http://npm.yoho.cn/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" |
3998 | dependencies: | 4037 | dependencies: |
@@ -4201,6 +4240,10 @@ lodash.some@^4.2.2: | @@ -4201,6 +4240,10 @@ lodash.some@^4.2.2: | ||
4201 | version "4.6.0" | 4240 | version "4.6.0" |
4202 | resolved "http://npm.yoho.cn/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" | 4241 | resolved "http://npm.yoho.cn/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" |
4203 | 4242 | ||
4243 | +lodash.tail@^4.1.1: | ||
4244 | + version "4.1.1" | ||
4245 | + resolved "http://npm.yoho.cn/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" | ||
4246 | + | ||
4204 | lodash.template@^3.0.0: | 4247 | lodash.template@^3.0.0: |
4205 | version "3.6.2" | 4248 | version "3.6.2" |
4206 | resolved "http://npm.yoho.cn/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" | 4249 | resolved "http://npm.yoho.cn/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" |
@@ -4443,6 +4486,28 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: | @@ -4443,6 +4486,28 @@ minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: | ||
4443 | version "1.2.0" | 4486 | version "1.2.0" |
4444 | resolved "http://npm.yoho.cn/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" | 4487 | resolved "http://npm.yoho.cn/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" |
4445 | 4488 | ||
4489 | +mint-ui@^1.0.2: | ||
4490 | + version "1.0.2" | ||
4491 | + resolved "http://npm.yoho.cn/mint-ui/-/mint-ui-1.0.2.tgz#168318925c59a7da4c3f8ec6d9960e138e55fefc" | ||
4492 | + dependencies: | ||
4493 | + array-find-index "^1.0.2" | ||
4494 | + raf.js "0.0.4" | ||
4495 | + vue-clickoutside "^0.2.0" | ||
4496 | + vue-infinite-scroll "^0.2.3" | ||
4497 | + vue-lazyload "^0.7.1" | ||
4498 | + vue-msgbox "^0.2.14" | ||
4499 | + vue-popup "0.1.13" | ||
4500 | + vue-swipe "^0.2.7" | ||
4501 | + vue-toast-mobile "^0.1.3" | ||
4502 | + wind-dom "0.0.3" | ||
4503 | + | ||
4504 | +mixin-object@^2.0.1: | ||
4505 | + version "2.0.1" | ||
4506 | + resolved "http://npm.yoho.cn/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" | ||
4507 | + dependencies: | ||
4508 | + for-in "^0.1.3" | ||
4509 | + is-extendable "^0.1.1" | ||
4510 | + | ||
4446 | mkdirp@0.5.0: | 4511 | mkdirp@0.5.0: |
4447 | version "0.5.0" | 4512 | version "0.5.0" |
4448 | resolved "http://npm.yoho.cn/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" | 4513 | resolved "http://npm.yoho.cn/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" |
@@ -6469,6 +6534,16 @@ sass-graph@^2.1.1: | @@ -6469,6 +6534,16 @@ sass-graph@^2.1.1: | ||
6469 | scss-tokenizer "^0.2.3" | 6534 | scss-tokenizer "^0.2.3" |
6470 | yargs "^7.0.0" | 6535 | yargs "^7.0.0" |
6471 | 6536 | ||
6537 | +sass-loader@^6.0.6: | ||
6538 | + version "6.0.6" | ||
6539 | + resolved "http://npm.yoho.cn/sass-loader/-/sass-loader-6.0.6.tgz#e9d5e6c1f155faa32a4b26d7a9b7107c225e40f9" | ||
6540 | + dependencies: | ||
6541 | + async "^2.1.5" | ||
6542 | + clone-deep "^0.3.0" | ||
6543 | + loader-utils "^1.0.1" | ||
6544 | + lodash.tail "^4.1.1" | ||
6545 | + pify "^3.0.0" | ||
6546 | + | ||
6472 | save-pixels@~2.3.0: | 6547 | save-pixels@~2.3.0: |
6473 | version "2.3.4" | 6548 | version "2.3.4" |
6474 | resolved "http://npm.yoho.cn/save-pixels/-/save-pixels-2.3.4.tgz#49d349c06b8d7c0127dbf0da24b44aca5afb59fe" | 6549 | resolved "http://npm.yoho.cn/save-pixels/-/save-pixels-2.3.4.tgz#49d349c06b8d7c0127dbf0da24b44aca5afb59fe" |
@@ -6616,6 +6691,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: | @@ -6616,6 +6691,15 @@ sha.js@^2.4.0, sha.js@^2.4.8: | ||
6616 | dependencies: | 6691 | dependencies: |
6617 | inherits "^2.0.1" | 6692 | inherits "^2.0.1" |
6618 | 6693 | ||
6694 | +shallow-clone@^0.1.2: | ||
6695 | + version "0.1.2" | ||
6696 | + resolved "http://npm.yoho.cn/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" | ||
6697 | + dependencies: | ||
6698 | + is-extendable "^0.1.1" | ||
6699 | + kind-of "^2.0.1" | ||
6700 | + lazy-cache "^0.2.3" | ||
6701 | + mixin-object "^2.0.1" | ||
6702 | + | ||
6619 | shallow-copy@~0.0.1: | 6703 | shallow-copy@~0.0.1: |
6620 | version "0.0.1" | 6704 | version "0.0.1" |
6621 | resolved "http://npm.yoho.cn/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" | 6705 | resolved "http://npm.yoho.cn/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" |
@@ -7163,6 +7247,10 @@ swap-case@^1.1.0: | @@ -7163,6 +7247,10 @@ swap-case@^1.1.0: | ||
7163 | lower-case "^1.1.1" | 7247 | lower-case "^1.1.1" |
7164 | upper-case "^1.1.1" | 7248 | upper-case "^1.1.1" |
7165 | 7249 | ||
7250 | +swiper@^3.4.2: | ||
7251 | + version "3.4.2" | ||
7252 | + resolved "http://npm.yoho.cn/swiper/-/swiper-3.4.2.tgz#39d6b410b1a39833e1f72d3b72999df5f5e38392" | ||
7253 | + | ||
7166 | synesthesia@^1.0.1: | 7254 | synesthesia@^1.0.1: |
7167 | version "1.0.1" | 7255 | version "1.0.1" |
7168 | resolved "http://npm.yoho.cn/synesthesia/-/synesthesia-1.0.1.tgz#5ef95ea548c0d5c6e6f9bb4b0d0731dff864a777" | 7256 | resolved "http://npm.yoho.cn/synesthesia/-/synesthesia-1.0.1.tgz#5ef95ea548c0d5c6e6f9bb4b0d0731dff864a777" |
@@ -7562,6 +7650,16 @@ vm-browserify@0.0.4: | @@ -7562,6 +7650,16 @@ vm-browserify@0.0.4: | ||
7562 | dependencies: | 7650 | dependencies: |
7563 | indexof "0.0.1" | 7651 | indexof "0.0.1" |
7564 | 7652 | ||
7653 | +vue-awesome-swiper@^2.5.4: | ||
7654 | + version "2.5.4" | ||
7655 | + resolved "http://npm.yoho.cn/vue-awesome-swiper/-/vue-awesome-swiper-2.5.4.tgz#265a2a3ec2f9830d6b0175ea06784c36a261c54a" | ||
7656 | + dependencies: | ||
7657 | + swiper "^3.4.2" | ||
7658 | + | ||
7659 | +vue-clickoutside@^0.2.0: | ||
7660 | + version "0.2.0" | ||
7661 | + resolved "http://npm.yoho.cn/vue-clickoutside/-/vue-clickoutside-0.2.0.tgz#a0f16840dd4f29f019bd09d07247c99a581e48e3" | ||
7662 | + | ||
7565 | vue-hot-reload-api@^1.2.0: | 7663 | vue-hot-reload-api@^1.2.0: |
7566 | version "1.3.3" | 7664 | version "1.3.3" |
7567 | resolved "http://npm.yoho.cn/vue-hot-reload-api/-/vue-hot-reload-api-1.3.3.tgz#54d22d83786a878493f639cc76bca7992a23be46" | 7665 | resolved "http://npm.yoho.cn/vue-hot-reload-api/-/vue-hot-reload-api-1.3.3.tgz#54d22d83786a878493f639cc76bca7992a23be46" |
@@ -7576,11 +7674,11 @@ vue-html-loader@^1.0.0: | @@ -7576,11 +7674,11 @@ vue-html-loader@^1.0.0: | ||
7576 | loader-utils "^1.0.2" | 7674 | loader-utils "^1.0.2" |
7577 | object-assign "^4.1.0" | 7675 | object-assign "^4.1.0" |
7578 | 7676 | ||
7579 | -vue-infinite-scroll@0.2.3: | 7677 | +vue-infinite-scroll@0.2.3, vue-infinite-scroll@^0.2.3: |
7580 | version "0.2.3" | 7678 | version "0.2.3" |
7581 | resolved "http://npm.yoho.cn/vue-infinite-scroll/-/vue-infinite-scroll-0.2.3.tgz#9eb9fa1972e363e69a572edb66a7a06f5ff8dc42" | 7679 | resolved "http://npm.yoho.cn/vue-infinite-scroll/-/vue-infinite-scroll-0.2.3.tgz#9eb9fa1972e363e69a572edb66a7a06f5ff8dc42" |
7582 | 7680 | ||
7583 | -vue-lazyload@^0.7.0: | 7681 | +vue-lazyload@^0.7.0, vue-lazyload@^0.7.1: |
7584 | version "0.7.5" | 7682 | version "0.7.5" |
7585 | resolved "http://npm.yoho.cn/vue-lazyload/-/vue-lazyload-0.7.5.tgz#585787eeaf256e764620ad47d2a3eac4301d2da3" | 7683 | resolved "http://npm.yoho.cn/vue-lazyload/-/vue-lazyload-0.7.5.tgz#585787eeaf256e764620ad47d2a3eac4301d2da3" |
7586 | dependencies: | 7684 | dependencies: |
@@ -7603,12 +7701,22 @@ vue-loader@^8.3.0: | @@ -7603,12 +7701,22 @@ vue-loader@^8.3.0: | ||
7603 | source-map "^0.5.3" | 7701 | source-map "^0.5.3" |
7604 | vue-template-validator "^1.0.0" | 7702 | vue-template-validator "^1.0.0" |
7605 | 7703 | ||
7704 | +vue-msgbox@^0.2.14: | ||
7705 | + version "0.2.14" | ||
7706 | + resolved "http://npm.yoho.cn/vue-msgbox/-/vue-msgbox-0.2.14.tgz#daf027faf2eeca798de3248e85ae802c87c38540" | ||
7707 | + dependencies: | ||
7708 | + vue-popup "^0.1.13" | ||
7709 | + | ||
7606 | vue-picker@0.0.4: | 7710 | vue-picker@0.0.4: |
7607 | version "0.0.4" | 7711 | version "0.0.4" |
7608 | resolved "http://npm.yoho.cn/vue-picker/-/vue-picker-0.0.4.tgz#cd4c4b824cdb3bd9060964b73391b9eb4f7eaa2e" | 7712 | resolved "http://npm.yoho.cn/vue-picker/-/vue-picker-0.0.4.tgz#cd4c4b824cdb3bd9060964b73391b9eb4f7eaa2e" |
7609 | dependencies: | 7713 | dependencies: |
7610 | raf.js "0.0.4" | 7714 | raf.js "0.0.4" |
7611 | 7715 | ||
7716 | +vue-popup@0.1.13, vue-popup@^0.1.13: | ||
7717 | + version "0.1.13" | ||
7718 | + resolved "http://npm.yoho.cn/vue-popup/-/vue-popup-0.1.13.tgz#fc03251ec17751b520c79c41ad4c69f8889833db" | ||
7719 | + | ||
7612 | vue-style-loader@^1.0.0: | 7720 | vue-style-loader@^1.0.0: |
7613 | version "1.0.0" | 7721 | version "1.0.0" |
7614 | resolved "http://npm.yoho.cn/vue-style-loader/-/vue-style-loader-1.0.0.tgz#abeb7bd0f46313083741244d3079d4f14449e049" | 7722 | resolved "http://npm.yoho.cn/vue-style-loader/-/vue-style-loader-1.0.0.tgz#abeb7bd0f46313083741244d3079d4f14449e049" |
@@ -7621,6 +7729,12 @@ vue-swipe@0.2.6: | @@ -7621,6 +7729,12 @@ vue-swipe@0.2.6: | ||
7621 | dependencies: | 7729 | dependencies: |
7622 | wind-dom "0.0.3" | 7730 | wind-dom "0.0.3" |
7623 | 7731 | ||
7732 | +vue-swipe@^0.2.7: | ||
7733 | + version "0.2.7" | ||
7734 | + resolved "http://npm.yoho.cn/vue-swipe/-/vue-swipe-0.2.7.tgz#4c23ee982953a2c7e96dace55b1fafde518ab719" | ||
7735 | + dependencies: | ||
7736 | + wind-dom "0.0.3" | ||
7737 | + | ||
7624 | vue-template-compiler@^2.3.3: | 7738 | vue-template-compiler@^2.3.3: |
7625 | version "2.4.1" | 7739 | version "2.4.1" |
7626 | resolved "http://npm.yoho.cn/vue-template-compiler/-/vue-template-compiler-2.4.1.tgz#20115cf8714f222f9be4111ec75b079a1c9b8197" | 7740 | resolved "http://npm.yoho.cn/vue-template-compiler/-/vue-template-compiler-2.4.1.tgz#20115cf8714f222f9be4111ec75b079a1c9b8197" |
@@ -7634,6 +7748,10 @@ vue-template-validator@^1.0.0: | @@ -7634,6 +7748,10 @@ vue-template-validator@^1.0.0: | ||
7634 | dependencies: | 7748 | dependencies: |
7635 | chalk "^1.1.1" | 7749 | chalk "^1.1.1" |
7636 | 7750 | ||
7751 | +vue-toast-mobile@^0.1.3: | ||
7752 | + version "0.1.3" | ||
7753 | + resolved "http://npm.yoho.cn/vue-toast-mobile/-/vue-toast-mobile-0.1.3.tgz#ab683c3ac5af69da8f399b048f692a0f78b03a6f" | ||
7754 | + | ||
7637 | vue-touch@1.1.0: | 7755 | vue-touch@1.1.0: |
7638 | version "1.1.0" | 7756 | version "1.1.0" |
7639 | resolved "http://npm.yoho.cn/vue-touch/-/vue-touch-1.1.0.tgz#f69da3b4bf033f3f7bcf5864011a6b4d4bb596b9" | 7757 | resolved "http://npm.yoho.cn/vue-touch/-/vue-touch-1.1.0.tgz#f69da3b4bf033f3f7bcf5864011a6b4d4bb596b9" |
-
Please register or login to post a comment