jufubao-mall 2.0.32-beta8 → 2.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/CusCouponChose/CusCouponChose.vue +13 -10
- package/src/components/CusEnter/CusEnter.vue +1 -9
- package/src/components/CusPoster/CusPoster.vue +62 -17
- package/src/components/CusProduct/CusProduct.vue +184 -576
- package/src/components/CusShops/CusShops.vue +209 -409
- package/src/components/CusTab/CusTab.vue +22 -159
- package/src/components/JfbMallProductInfo/cusAttr/content.js +0 -2
- package/src/components/JfbMallProductList/Attr.js +0 -1
- package/src/components/JfbMallProductList/JfbMallProductList.vue +1 -7
- package/src/components/JfbMallProductList/XdCateV1.vue +1 -0
- package/src/components/SkeProduct/SkeProduct.vue +3 -88
- package/src/components/CusListItem/CusListItem.vue +0 -141
- package/src/components/CusPrice/CusPrice.vue +0 -391
- package/src/components/CusVipList/CusVipList.vue +0 -169
- package/src/components/JfbMallNetworkMedia/Api.js +0 -94
- package/src/components/JfbMallNetworkMedia/Attr.js +0 -20
- package/src/components/JfbMallNetworkMedia/JfbMallNetworkMedia.vue +0 -1167
- package/src/components/JfbMallNetworkMedia/JfbMallNetworkMediaLess.less +0 -80
- package/src/components/JfbMallNetworkMedia/JfbMallNetworkMediaMixin.js +0 -30
- package/src/components/JfbMallNetworkMedia/Mock.js +0 -372
- package/src/components/JfbMallNetworkMedia/cusAttr/advanced.js +0 -60
- package/src/components/JfbMallNetworkMedia/cusAttr/content.js +0 -230
- package/src/components/JfbMallNetworkMedia/cusAttr/font.js +0 -123
- package/src/components/JfbMallNetworkMedia/cusAttr/icon.js +0 -257
- package/src/components/JfbMallNetworkMedia/cusAttr/style.js +0 -12
|
@@ -1,135 +1,141 @@
|
|
|
1
1
|
|
|
2
2
|
<template>
|
|
3
|
-
<view :style="[{'--main-color': mainColor,'--sub-main-color': subMainColor}
|
|
4
|
-
<view class="shopping-ske
|
|
5
|
-
<view
|
|
6
|
-
class="shopping-ske-item"
|
|
7
|
-
v-for="item in skeNumComp"
|
|
8
|
-
:key="item"
|
|
9
|
-
:style="[cusStyle['item']||{}]"
|
|
10
|
-
>
|
|
11
|
-
<view class="shopping-ske-image" v-if="image">
|
|
12
|
-
<view></view>
|
|
13
|
-
</view>
|
|
14
|
-
<view class="shopping-ske-cont">
|
|
15
|
-
<view class="shopping-ske-name"></view>
|
|
16
|
-
<view class="shopping-ske-address">
|
|
17
|
-
<view class="address" v-if="address"></view>
|
|
18
|
-
<view class="shopping-ske-v2" v-if="layout === 'v2'">
|
|
19
|
-
<view>
|
|
20
|
-
<view class="ske1"></view>
|
|
21
|
-
<view class="ske2"></view>
|
|
22
|
-
<view class="ske3"></view>
|
|
23
|
-
<view class="ske4"></view>
|
|
24
|
-
</view>
|
|
25
|
-
<view>
|
|
26
|
-
<view class="ske1"></view>
|
|
27
|
-
<view class="ske2"></view>
|
|
28
|
-
<view class="ske3"></view>
|
|
29
|
-
</view>
|
|
30
|
-
</view>
|
|
31
|
-
</view>
|
|
32
|
-
<view class="shopping-ske-v3" v-if="layout === 'v3'">
|
|
33
|
-
<view></view>
|
|
34
|
-
<view>
|
|
35
|
-
<view></view>
|
|
36
|
-
<view></view>
|
|
37
|
-
</view>
|
|
38
|
-
|
|
39
|
-
</view>
|
|
40
|
-
</view>
|
|
41
|
-
</view>
|
|
42
|
-
</view>
|
|
3
|
+
<view :style="[{'--main-color': mainColor,'--sub-main-color': subMainColor}]">
|
|
4
|
+
<view class="shopping-ske" v-if="dataList ===null">null</view>
|
|
43
5
|
<view
|
|
44
6
|
class="shopping"
|
|
45
|
-
v-else-if="
|
|
7
|
+
v-else-if="dataList.length > 0"
|
|
46
8
|
:style="[cusStyle['box']||{}]"
|
|
47
9
|
>
|
|
48
10
|
<view
|
|
49
11
|
class="shopping-list"
|
|
50
|
-
v-for="
|
|
12
|
+
v-for="item in dataList"
|
|
51
13
|
:key="item[compMK.id]"
|
|
52
|
-
:id="`shop_item_${item[compMK.id]}`"
|
|
53
|
-
:class="{active: [
|
|
54
|
-
item[compMK.id].toString(),
|
|
55
|
-
item[compMK.shop_id].toString()
|
|
56
|
-
].includes(selectId)}"
|
|
57
14
|
:style="[cusStyle['item']||{}]"
|
|
58
|
-
@click="handleClick(item, 'DL')"
|
|
15
|
+
@click="handleClick(item, 'handleToDetail', 'DL')"
|
|
59
16
|
>
|
|
60
17
|
<!--图片区域-->
|
|
61
18
|
<view class="shopping-img" v-if="image" :style="[cusStyle['image']||{}]">
|
|
62
|
-
<image v-if="!item.errorStatus" :src="item[compMK.image]" :alt="item[compMK.name]" mode="aspectFit" @error="handleError(item)"></image>
|
|
63
19
|
<image v-if="item.errorStatus" :src="errorImage" :alt="item[compMK.name]"></image>
|
|
20
|
+
<image v-else :src="item[compMK.image]" :alt="item[compMK.name]" mode="aspectFit" @error="handleError(item)"></image>
|
|
64
21
|
</view>
|
|
65
22
|
<!--图片区域-->
|
|
66
23
|
<!--信息区域-->
|
|
67
24
|
<view class="shopping-cont" :class="{noImage: !image}">
|
|
68
25
|
<view class="shopping-cont-nameInfo">
|
|
69
26
|
<view class="shopping-name">
|
|
70
|
-
<view class="name" :style="[cusStyle['name']||{}]"
|
|
71
|
-
<view
|
|
27
|
+
<view class="name" :style="[cusStyle['name']||{}]" v-html="item[compMK.name]"></view>
|
|
28
|
+
<view
|
|
29
|
+
class="distance"
|
|
30
|
+
v-if="distance && distanceStyle === 'title' && item[compMK.distance]"
|
|
31
|
+
v-html="item[compMK.distance]"
|
|
32
|
+
:style="[cusStyle['distance']||{}]"
|
|
33
|
+
></view>
|
|
34
|
+
<view class="priceAndDiscount" v-if="distanceStyle === 'button'">
|
|
35
|
+
<view class="price" v-if="price && item[compMK.price]">
|
|
36
|
+
<text>{{item[compMK.price]|filterPrice}}</text>
|
|
37
|
+
<text>起</text>
|
|
38
|
+
</view>
|
|
39
|
+
<view class="discount" v-if="discount && item[compMK.discount]">
|
|
40
|
+
<text>{{item[compMK.discount]|filterDiscount}}</text>
|
|
41
|
+
<text>折</text>
|
|
42
|
+
</view>
|
|
43
|
+
</view>
|
|
72
44
|
</view>
|
|
73
45
|
<view class="shopping-info">
|
|
74
46
|
<view
|
|
75
|
-
:class="{'shopping-address-v2': layout === 'v2'}"
|
|
76
47
|
class="shopping-address"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
v-for="btn in item[compMK.options]"
|
|
86
|
-
:key="btn['consume_mode']"
|
|
87
|
-
>
|
|
88
|
-
<view class="tags-info-icon"><xd-font-icon :icon="btn.icon" size="32" :color="iconThemeStyle[btn.icon]"></xd-font-icon></view>
|
|
89
|
-
<view class="tags-info-price" v-if="price && btn.show_prices && btn.show_prices.length > 0">
|
|
90
|
-
<cus-price
|
|
91
|
-
type="normal"
|
|
92
|
-
:isPlus="isPlus"
|
|
93
|
-
:icon-size=".20"
|
|
94
|
-
text-font-size="22"
|
|
95
|
-
:showPrice="btn.show_prices"
|
|
96
|
-
></cus-price>
|
|
97
|
-
</view>
|
|
98
|
-
<view class="tags-info-desc">{{btn.desc}}</view>
|
|
99
|
-
<view
|
|
100
|
-
class="tags-info-btn"
|
|
101
|
-
v-if="btn['consume_mode'] !== 'CODE'"
|
|
102
|
-
@click.stop="handleClick(item, btn['consume_mode'])"
|
|
103
|
-
><view>{{btn['consume_mode']|filterName}}</view></view>
|
|
48
|
+
:class="{one: tagPos === 'info'}"
|
|
49
|
+
v-if="address"
|
|
50
|
+
v-html="item[compMK.address]"
|
|
51
|
+
></view>
|
|
52
|
+
<view class="tags-info" v-if="tagPos === 'info'">
|
|
53
|
+
<view class="tags-info-tag">
|
|
54
|
+
<xd-font-icon icon="iconduihuan" color="#43CF7C" size="28" style="margin-right: 8rpx;"></xd-font-icon>
|
|
55
|
+
<text>支持到店使用</text>
|
|
104
56
|
</view>
|
|
105
57
|
</view>
|
|
106
58
|
</view>
|
|
107
59
|
</view>
|
|
108
|
-
<view class="shopping-btn"
|
|
60
|
+
<view class="shopping-btn">
|
|
109
61
|
<!--v3-->
|
|
110
|
-
<view class="distance" v-
|
|
62
|
+
<view class="distance" v-if="distanceStyle === 'button' && item[compMK.distance]" >
|
|
111
63
|
<xd-font-icon :style="[cusStyle['distance']||{}]" icon="icondizhi" size="26"></xd-font-icon>
|
|
112
|
-
<text :style="[cusStyle['distance']||{}]" style="margin-left: 10rpx"
|
|
64
|
+
<text :style="[cusStyle['distance']||{}]" style="margin-left: 10rpx" v-html="item[compMK.distance]"></text>
|
|
113
65
|
</view>
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
class="
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
66
|
+
<!--v3-->
|
|
67
|
+
<!--v2-->
|
|
68
|
+
<view v-if="tagPos === 'info'">
|
|
69
|
+
<view class="priceAndDiscount">
|
|
70
|
+
<view class="price" v-if="price && item[compMK.price]">
|
|
71
|
+
<text>{{item[compMK.price]|filterPrice}}</text>
|
|
72
|
+
<text>起</text>
|
|
73
|
+
</view>
|
|
74
|
+
<view class="discount" v-if="discount && item[compMK.discount]">
|
|
75
|
+
<text>{{item[compMK.discount]|filterDiscount}}</text>
|
|
76
|
+
<text>折</text>
|
|
77
|
+
</view>
|
|
122
78
|
</view>
|
|
123
79
|
</view>
|
|
124
|
-
<!--
|
|
80
|
+
<!--v2-->
|
|
81
|
+
<!--v1-->
|
|
82
|
+
<template v-if="tagPos === 'btn'">
|
|
83
|
+
<view v-if="!isShowBtn" class="tags">
|
|
84
|
+
<view :style="[compTagsStyle]" v-if="item[compMK.mode].includes('SELL')">支持核销</view>
|
|
85
|
+
<view :style="[compTagsStyle]" v-if="item[compMK.mode].includes('SEAT')">在线选座</view>
|
|
86
|
+
</view>
|
|
87
|
+
<view class="priceAndDiscount">
|
|
88
|
+
<view class="price" v-if="price && item[compMK.price]">
|
|
89
|
+
<text>{{item[compMK.price]|filterPrice}}</text>
|
|
90
|
+
<text>起</text>
|
|
91
|
+
</view>
|
|
92
|
+
<view class="discount" v-if="discount && item[compMK.discount]">
|
|
93
|
+
<text>{{item[compMK.discount]|filterDiscount}}</text>
|
|
94
|
+
<text>折</text>
|
|
95
|
+
</view>
|
|
96
|
+
</view>
|
|
97
|
+
</template>
|
|
98
|
+
<!--v1-->
|
|
99
|
+
<!--按钮-->
|
|
100
|
+
<view class="buttons" v-if="isShowBtn && isBtn">
|
|
101
|
+
<!-- CV:店员核销(小蜜蜂);WB:用户扫水牌;CR:收银机;POS:POS机;JHD:聚好兑; QP:快捷支付;MC电影去购买-->
|
|
102
|
+
<template v-if="item[compMK.mode].includes('SELL')">
|
|
103
|
+
<view
|
|
104
|
+
v-if="item[compMK.defType] === 'WB' && compEntry.scan === true"
|
|
105
|
+
class="change_btn"
|
|
106
|
+
@click.stop="handleClick(item, 'handleToScan', item[compMK.defType])"
|
|
107
|
+
>{{ compNames.scan }}</view>
|
|
108
|
+
<view
|
|
109
|
+
v-else-if="item[compMK.defType] === 'QP' && compEntry.takeGoods === true"
|
|
110
|
+
class="change_btn"
|
|
111
|
+
@click.stop="handleClick(item,'handleToEasyPay',item[compMK.defType])"
|
|
112
|
+
>{{ compNames.takeGoods }}</view>
|
|
113
|
+
<view
|
|
114
|
+
v-else-if="item[compMK.defType] === 'JHD' && compEntry.jhd === true"
|
|
115
|
+
class="change_btn"
|
|
116
|
+
@click.stop="handleClick(item,'handleToExchange',item[compMK.defType])"
|
|
117
|
+
>{{ compNames.jhd }}</view>
|
|
118
|
+
</template>
|
|
119
|
+
<template v-if="item[compMK.mode].includes('SEAT') && compEntry.buyTicket === true">
|
|
120
|
+
<view
|
|
121
|
+
class="change_btn"
|
|
122
|
+
@click.stop="handleClick(item,'toSchedulePath','SEAT')"
|
|
123
|
+
>{{ compNames.buyTicket}}</view>
|
|
124
|
+
</template>
|
|
125
|
+
<template v-if="item[compMK.mode].includes('CODE') && compEntry.code === true">
|
|
126
|
+
<view
|
|
127
|
+
class="change_btn code"
|
|
128
|
+
@click.stop="handleClick(item,'toCodePath','CODE')"
|
|
129
|
+
>{{ compNames.code}}</view>
|
|
130
|
+
</template>
|
|
131
|
+
</view>
|
|
132
|
+
<!--按钮-->
|
|
125
133
|
</view>
|
|
126
134
|
</view>
|
|
127
135
|
<!--信息区域-->
|
|
128
136
|
</view>
|
|
129
137
|
</view>
|
|
130
|
-
<view class="shopping-empty" v-else-if="
|
|
131
|
-
<xd-no-data :scale-size="2" icon-type="shop">暂无门店信息</xd-no-data>
|
|
132
|
-
</view>
|
|
138
|
+
<view class="shopping-empty" v-else-if="dataList.length === 0"></view>
|
|
133
139
|
</view>
|
|
134
140
|
|
|
135
141
|
</template>
|
|
@@ -137,17 +143,12 @@
|
|
|
137
143
|
<script>
|
|
138
144
|
import XdFontIcon from "@/components/XdFontIcon/XdFontIcon.vue";
|
|
139
145
|
import Color from "color";
|
|
140
|
-
import CusPrice from "@/components/CusPrice/CusPrice.vue";
|
|
141
|
-
import XdNoData from "@/components/XdNoData/XdNoData.vue";
|
|
142
|
-
import getServiceUrl from "@/common/getServiceUrl";
|
|
143
146
|
let $vm = null;
|
|
144
147
|
|
|
145
148
|
export default {
|
|
146
149
|
name:'CusShops',
|
|
147
150
|
components:{
|
|
148
|
-
|
|
149
|
-
XdFontIcon,
|
|
150
|
-
XdNoData
|
|
151
|
+
XdFontIcon
|
|
151
152
|
},
|
|
152
153
|
props:{
|
|
153
154
|
list: {
|
|
@@ -170,7 +171,7 @@ export default {
|
|
|
170
171
|
content:{
|
|
171
172
|
type: Array|null,
|
|
172
173
|
default(){
|
|
173
|
-
return ['image', 'address', 'distance','price']
|
|
174
|
+
return ['image', 'address', 'distance', 'discount','price']
|
|
174
175
|
}
|
|
175
176
|
},
|
|
176
177
|
isShowBtn:{
|
|
@@ -187,7 +188,7 @@ export default {
|
|
|
187
188
|
},
|
|
188
189
|
names:{
|
|
189
190
|
type: Object,
|
|
190
|
-
//jhd,
|
|
191
|
+
//jhd,scan,takeGoods,buyTicket,code
|
|
191
192
|
default(){
|
|
192
193
|
return {}
|
|
193
194
|
}
|
|
@@ -198,41 +199,29 @@ export default {
|
|
|
198
199
|
return {}
|
|
199
200
|
}
|
|
200
201
|
},
|
|
201
|
-
//jhd,wb,qp,seat,code,hdself,travel
|
|
202
202
|
entry:{
|
|
203
203
|
type:Object,
|
|
204
204
|
default(){
|
|
205
205
|
return {}
|
|
206
206
|
}
|
|
207
|
-
}
|
|
208
|
-
selectId:{
|
|
209
|
-
type:String,
|
|
210
|
-
default:''
|
|
211
|
-
},
|
|
212
|
-
//是否智能识别一个按钮模式
|
|
213
|
-
isAutoJump:{
|
|
214
|
-
type:Array,
|
|
215
|
-
default(){
|
|
216
|
-
return []
|
|
217
|
-
},
|
|
218
|
-
},
|
|
207
|
+
}
|
|
219
208
|
},
|
|
220
209
|
data(){
|
|
221
210
|
return {
|
|
211
|
+
distanceStyle:'title',//title:标题后面 button: 操作按钮左侧
|
|
212
|
+
tagPos: 'info', //info=>信息下方 btn: 操作按钮左侧
|
|
222
213
|
errorImage:'https://img0.jufubao.cn/common/empty/shop.png?v1=1',
|
|
223
214
|
|
|
224
215
|
//内容区状态
|
|
225
216
|
image: false,
|
|
226
|
-
address:
|
|
217
|
+
address:true,
|
|
227
218
|
distance: false,
|
|
228
219
|
price: false,
|
|
229
|
-
|
|
220
|
+
discount: false,
|
|
230
221
|
|
|
231
222
|
//数据键值map关系
|
|
232
223
|
defMapKeys:{
|
|
233
224
|
id: 'resource_shop_id',
|
|
234
|
-
brand_id: 'brand_id',//品牌ID
|
|
235
|
-
shop_id:'shop_id',//整理前的门店ID
|
|
236
225
|
name: 'resource_shop_name', //店铺名字
|
|
237
226
|
distance: 'distance', //距离
|
|
238
227
|
address:'address', //店铺地址
|
|
@@ -240,164 +229,129 @@ export default {
|
|
|
240
229
|
discount : 'discount_ratio', //折扣
|
|
241
230
|
price:'price', //价格
|
|
242
231
|
mode:'consume_mode',//标签类型[]
|
|
243
|
-
|
|
232
|
+
defType:'default_consume_type',
|
|
244
233
|
},
|
|
245
234
|
|
|
246
235
|
//自定义名称
|
|
247
236
|
defName:{
|
|
248
|
-
jhd:
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
code:'电子码'
|
|
253
|
-
hdself:'去下单', //到店自取名字
|
|
254
|
-
travel: '去订票 ', //旅游订票
|
|
237
|
+
jhd: "聚好兑", //聚好兑名称
|
|
238
|
+
scan: "扫一扫", //扫一扫名称
|
|
239
|
+
takeGoods: "展快捷码", //展快捷码名称
|
|
240
|
+
buyTicket: "去购票", //去购票名称
|
|
241
|
+
code:'电子码' //电子码名字
|
|
255
242
|
},
|
|
256
243
|
|
|
257
244
|
defEntry:{
|
|
258
|
-
jhd:false,
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
code:false
|
|
263
|
-
hdself:false, //到店自取
|
|
264
|
-
travel: false, //旅游订票
|
|
245
|
+
jhd: false, //聚好兑名称
|
|
246
|
+
scan: false, //扫一扫名称
|
|
247
|
+
takeGoods: false, //展快捷码名称
|
|
248
|
+
buyTicket: false, //去购票名称
|
|
249
|
+
code:false //电子码名字
|
|
265
250
|
},
|
|
266
251
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
iconThemeStyle:{}
|
|
252
|
+
//按钮功能
|
|
253
|
+
buttons:[],
|
|
271
254
|
}
|
|
272
255
|
},
|
|
273
256
|
computed:{
|
|
274
|
-
|
|
275
|
-
|
|
257
|
+
dataList(){
|
|
258
|
+
if(this.list === null) return null;
|
|
259
|
+
else if(this.$xdUniHelper.checkVarType(this.list) === 'array'){
|
|
260
|
+
return this.$xdUniHelper.cloneDeep(this.list);
|
|
261
|
+
}
|
|
262
|
+
return []
|
|
276
263
|
},
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
let
|
|
264
|
+
|
|
265
|
+
compTagsStyle(){
|
|
266
|
+
let textColor = `rgba(${Color(this.mainColor).alpha(0.1).array().join(',')})`;
|
|
280
267
|
return {
|
|
281
|
-
|
|
282
|
-
|
|
268
|
+
backgroundColor: textColor,
|
|
269
|
+
color: this.mainColor,
|
|
283
270
|
}
|
|
284
271
|
},
|
|
285
272
|
|
|
286
273
|
compNames(){
|
|
287
|
-
return Object.assign({},this.defName,this.$xdUniHelper.cloneDeep(this.names))
|
|
274
|
+
return Object.assign({}, this.defName,this.$xdUniHelper.cloneDeep(this.names) )
|
|
288
275
|
},
|
|
289
|
-
|
|
290
276
|
compMK(){
|
|
291
277
|
return Object.assign({},this.defMapKeys,this.$xdUniHelper.cloneDeep(this.mapKeys))
|
|
292
278
|
},
|
|
293
279
|
compEntry(){
|
|
294
280
|
return Object.assign({},this.defEntry,this.$xdUniHelper.cloneDeep(this.entry))
|
|
295
281
|
},
|
|
296
|
-
|
|
297
282
|
isBtn(){
|
|
298
283
|
let flag = false;
|
|
299
284
|
Object.keys(this.compEntry).map(key=>{
|
|
300
285
|
if(this.compEntry[key] === true) flag = true;
|
|
301
286
|
});
|
|
302
|
-
return flag
|
|
287
|
+
return flag
|
|
303
288
|
}
|
|
304
289
|
},
|
|
305
290
|
filters:{
|
|
306
|
-
|
|
307
|
-
|
|
291
|
+
filterPrice(val){
|
|
292
|
+
if(typeof val === 'string') val = Number(val)
|
|
293
|
+
return $vm.$xdUniHelper.divisionFloatNumber(val,100);
|
|
294
|
+
},
|
|
295
|
+
filterDiscount(val){
|
|
296
|
+
if(typeof val === 'string') val = Number(val)
|
|
297
|
+
return $vm.$xdUniHelper.divisionFloatNumber(val,1000);
|
|
308
298
|
},
|
|
309
299
|
},
|
|
310
300
|
watch:{
|
|
301
|
+
layout(val){
|
|
302
|
+
this.layoutParse(val)
|
|
303
|
+
},
|
|
311
304
|
content(val){
|
|
312
305
|
this.contentParse(val)
|
|
313
306
|
},
|
|
314
|
-
list(){
|
|
315
|
-
this.initData();
|
|
316
|
-
},
|
|
317
|
-
compMK(){
|
|
318
|
-
this.initData();
|
|
319
|
-
},
|
|
320
|
-
compEntry(){
|
|
321
|
-
this.initData();
|
|
322
|
-
}
|
|
323
307
|
},
|
|
324
308
|
created() {
|
|
325
309
|
$vm = this;
|
|
310
|
+
this.layoutParse(this.layout);
|
|
326
311
|
this.contentParse(this.content);
|
|
327
|
-
this.initData();
|
|
328
|
-
this.iconThemeStyle = {
|
|
329
|
-
iconduihuan: '#43CF7C',
|
|
330
|
-
iconquan: '#FF8D1A',
|
|
331
|
-
icongou: '#FF5733',
|
|
332
|
-
iconzuo: '#3091FF',
|
|
333
|
-
iconpiao1: '#3091FF'
|
|
334
|
-
}
|
|
335
312
|
},
|
|
336
313
|
methods:{
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
return options.filter(it=>{
|
|
340
|
-
return supportCode.includes(it.consume_mode.toLocaleLowerCase()); //过滤不支持的按钮
|
|
341
|
-
}).filter(it=>{
|
|
342
|
-
return this.entry[it.consume_mode.toLocaleLowerCase()] //过滤未开启按钮设置
|
|
343
|
-
});
|
|
344
|
-
},
|
|
345
|
-
checkOneCodeDetailJumpCode(item){
|
|
346
|
-
//未开启智能识别功能并且没有返回options字段
|
|
347
|
-
if(this.isAutoJump.length === 0 ||
|
|
348
|
-
item[this.compMK['options']] === undefined ||
|
|
349
|
-
item[this.compMK['options']].length === 0
|
|
350
|
-
) return false
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
//按钮数量大于1一条不处理
|
|
354
|
-
let options = item[this.compMK['options']];
|
|
355
|
-
if(options.length > 1) return false;
|
|
356
|
-
|
|
357
|
-
//智能识别
|
|
358
|
-
let filterCode = ['seat','hdself','travel'];
|
|
359
|
-
return filterCode.includes(options[0].consume_mode.toLocaleLowerCase())
|
|
314
|
+
handleError(item){
|
|
315
|
+
item.errorStatus = true;
|
|
360
316
|
},
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
this.dataShopList = this.$xdUniHelper.cloneDeep(this.list).map((item,index)=>{
|
|
317
|
+
layoutParse(value){
|
|
318
|
+
let distanceStyle = 'title';
|
|
319
|
+
let tagPos = '';
|
|
365
320
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
else item[this.compMK['options']] = [];
|
|
321
|
+
//布局1
|
|
322
|
+
if(['v1'].includes(value)) {
|
|
323
|
+
tagPos = 'btn'
|
|
324
|
+
}
|
|
371
325
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
326
|
+
//布局2
|
|
327
|
+
if(['v2'].includes(value)) {
|
|
328
|
+
tagPos = 'info'
|
|
329
|
+
}
|
|
375
330
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
331
|
+
//电影模式
|
|
332
|
+
if(['v3'].includes(value)) {
|
|
333
|
+
distanceStyle = 'button';
|
|
379
334
|
}
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
handleError(item){
|
|
383
|
-
item.errorStatus = true;
|
|
335
|
+
this.tagPos = tagPos;
|
|
336
|
+
this.distanceStyle = distanceStyle;
|
|
384
337
|
},
|
|
385
338
|
contentParse(value){
|
|
386
339
|
this.image = value.includes('image')
|
|
387
340
|
this.address = value.includes('address')
|
|
388
341
|
this.distance = value.includes('distance')
|
|
342
|
+
//价格和折扣只有在v1,v2线上
|
|
389
343
|
this.price = value.includes('price')
|
|
344
|
+
this.discount = value.includes('discount')
|
|
390
345
|
},
|
|
391
346
|
|
|
392
347
|
/**
|
|
393
348
|
* @description 事件操作
|
|
394
349
|
* @param item {Object} 数据对象
|
|
350
|
+
* @param funcName {string} 操作方法名字
|
|
395
351
|
* @param type {string} 类型
|
|
396
352
|
*/
|
|
397
|
-
handleClick(item, type) {
|
|
398
|
-
|
|
399
|
-
if(item['isOneCodeDetailJumpCode'] === true) type = item[this.compMK['mode']][0]
|
|
400
|
-
this.$emit('on-event', {item,type});
|
|
353
|
+
handleClick(item, funcName, type) {
|
|
354
|
+
this.$emit('on-event', {item,funcName,type});
|
|
401
355
|
}
|
|
402
356
|
}
|
|
403
357
|
}
|
|
@@ -405,8 +359,10 @@ export default {
|
|
|
405
359
|
</script>
|
|
406
360
|
<style scoped lang="less">
|
|
407
361
|
.shopping {
|
|
408
|
-
&-list
|
|
362
|
+
&-list {
|
|
409
363
|
background-color: #fff;
|
|
364
|
+
padding: 20rpx;
|
|
365
|
+
margin-top: 20rpx;
|
|
410
366
|
display: flex;
|
|
411
367
|
justify-content: space-between;
|
|
412
368
|
align-items: flex-start;
|
|
@@ -414,60 +370,32 @@ export default {
|
|
|
414
370
|
&:first-child {
|
|
415
371
|
margin-top: 0;
|
|
416
372
|
}
|
|
417
|
-
|
|
418
|
-
&:last-child {
|
|
419
|
-
margin-bottom: 0!important;
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
&.active {
|
|
423
|
-
background-color: var(--xd-bgColor)!important;
|
|
424
|
-
border: var(--xd-border)!important;
|
|
425
|
-
}
|
|
426
373
|
}
|
|
427
|
-
&-img
|
|
428
|
-
width:
|
|
429
|
-
height:
|
|
430
|
-
margin-right:
|
|
374
|
+
&-img {
|
|
375
|
+
width: 200rpx;
|
|
376
|
+
height: 200rpx;
|
|
377
|
+
margin-right: 20rpx;
|
|
431
378
|
flex-shrink: 0;
|
|
432
|
-
overflow: hidden;
|
|
433
379
|
|
|
434
380
|
& > image {
|
|
435
|
-
width:
|
|
436
|
-
height:
|
|
381
|
+
width: 200rpx;
|
|
382
|
+
height: 200rpx;
|
|
437
383
|
}
|
|
438
384
|
}
|
|
439
385
|
|
|
440
|
-
&-
|
|
441
|
-
.skeleton-item(160rpx, 160rpx)
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
&-cont,&-ske-cont {
|
|
386
|
+
&-cont {
|
|
445
387
|
flex: 1;
|
|
446
388
|
display: flex;
|
|
447
389
|
flex-wrap: wrap;
|
|
448
390
|
align-content: space-between;
|
|
449
|
-
min-height:
|
|
391
|
+
min-height: 200rpx;
|
|
450
392
|
justify-items: flex-end;
|
|
451
393
|
|
|
452
|
-
|
|
453
|
-
// #ifdef MP-WEIXIN
|
|
454
|
-
&-nameInfo {
|
|
455
|
-
width: 100%;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
& > .shopping-btn {
|
|
459
|
-
width: 100%;
|
|
460
|
-
}
|
|
461
|
-
// #endif
|
|
462
|
-
|
|
463
|
-
|
|
464
394
|
&.noImage {
|
|
465
395
|
min-height: 0;
|
|
466
|
-
align-content: normal;
|
|
467
|
-
display: block;
|
|
468
396
|
|
|
469
397
|
& .shopping-btn {
|
|
470
|
-
margin-top:
|
|
398
|
+
margin-top: 32rpx;
|
|
471
399
|
}
|
|
472
400
|
}
|
|
473
401
|
|
|
@@ -477,19 +405,17 @@ export default {
|
|
|
477
405
|
}
|
|
478
406
|
}
|
|
479
407
|
|
|
480
|
-
&-name
|
|
408
|
+
&-name {
|
|
481
409
|
display: flex;
|
|
482
410
|
justify-content: flex-start;
|
|
483
411
|
align-items: center;
|
|
484
412
|
& .name {
|
|
485
413
|
font-size: 32rpx;
|
|
486
414
|
font-weight: 400;
|
|
487
|
-
line-height:
|
|
488
|
-
.uni-cut(1,
|
|
415
|
+
line-height: 40rpx;
|
|
416
|
+
.uni-cut(1,40);
|
|
489
417
|
flex: 1;
|
|
490
418
|
color: #333;
|
|
491
|
-
word-wrap: break-word;
|
|
492
|
-
word-break: break-all;
|
|
493
419
|
}
|
|
494
420
|
|
|
495
421
|
& .distance {
|
|
@@ -499,151 +425,36 @@ export default {
|
|
|
499
425
|
}
|
|
500
426
|
}
|
|
501
427
|
|
|
502
|
-
&-ske-name {
|
|
503
|
-
.skeleton-item(80%, 50rpx)
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
&-ske-address {
|
|
507
|
-
margin-top: 10rpx;
|
|
508
|
-
& .address {
|
|
509
|
-
.skeleton-item(100%, 36rpx)
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
&-ske-v2 {
|
|
514
|
-
& > view {
|
|
515
|
-
display: flex;
|
|
516
|
-
justify-content: flex-start;
|
|
517
|
-
align-items: center;
|
|
518
|
-
& > view {
|
|
519
|
-
margin-top: 10rpx;
|
|
520
|
-
margin-right: 10rpx;
|
|
521
|
-
&:last-child {
|
|
522
|
-
margin-right: 0;
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
& > .ske1 {
|
|
527
|
-
.skeleton-item(36rpx, 36rpx);
|
|
528
|
-
flex-shrink: 0;
|
|
529
|
-
}
|
|
530
|
-
& > .ske2 {
|
|
531
|
-
.skeleton-item(80rpx, 36rpx);
|
|
532
|
-
flex-shrink: 0;
|
|
533
|
-
}
|
|
534
|
-
& > .ske3 {
|
|
535
|
-
.skeleton-item(60%, 36rpx);
|
|
536
|
-
flex: 1;
|
|
537
|
-
}
|
|
538
|
-
& > .ske4 {
|
|
539
|
-
.skeleton-item(80rpx, 36rpx);
|
|
540
|
-
flex-shrink: 0;
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
&-ske-v3 {
|
|
546
|
-
display: flex;
|
|
547
|
-
justify-content: space-between;
|
|
548
|
-
align-items: flex-end;
|
|
549
|
-
margin-top: 10rpx;
|
|
550
|
-
|
|
551
|
-
& > view:first-child {
|
|
552
|
-
.skeleton-item(100rpx, 26rpx);
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
& > view {
|
|
556
|
-
display: flex;
|
|
557
|
-
justify-content: flex-end;
|
|
558
|
-
align-items: center;
|
|
559
|
-
view {
|
|
560
|
-
.skeleton-item(120rpx, 50rpx);
|
|
561
|
-
margin-left: 10rpx;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
|
|
567
428
|
&-info {
|
|
568
429
|
& .tags-info {
|
|
569
|
-
margin-top:
|
|
570
|
-
|
|
571
|
-
&-item {
|
|
430
|
+
margin-top: 16rpx;
|
|
431
|
+
&-tag {
|
|
572
432
|
display: flex;
|
|
573
433
|
justify-content: flex-start;
|
|
574
434
|
align-items: center;
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
& > view {
|
|
578
|
-
margin-right: 10rpx;
|
|
579
|
-
font-size: 24rpx;
|
|
580
|
-
flex-shrink: 0;
|
|
581
|
-
|
|
582
|
-
&.tags-info-desc {
|
|
583
|
-
color: #999;
|
|
584
|
-
flex: 1;
|
|
585
|
-
.uni-cut(1,32);
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
&-btn {
|
|
591
|
-
height: 64rpx;
|
|
592
|
-
display: flex;
|
|
593
|
-
justify-content: center;
|
|
594
|
-
align-items: center;
|
|
595
|
-
padding-left: 40rpx;
|
|
596
|
-
margin-right: 0!important;
|
|
597
|
-
& > view {
|
|
598
|
-
height: 48rpx;
|
|
599
|
-
padding: 0 16rpx;
|
|
600
|
-
line-height: 48rpx;
|
|
601
|
-
background-color: var(--g-theme-mainColor);
|
|
602
|
-
color: #fff;
|
|
603
|
-
border-radius: 24rpx;
|
|
604
|
-
}
|
|
605
|
-
|
|
435
|
+
font-size: 24rpx;
|
|
436
|
+
color: #999;
|
|
606
437
|
}
|
|
607
438
|
}
|
|
608
439
|
}
|
|
609
440
|
|
|
610
441
|
&-address {
|
|
611
442
|
margin-top: 16rpx;
|
|
443
|
+
font-size: 24rpx;
|
|
444
|
+
color: #999;
|
|
445
|
+
line-height: 32rpx;
|
|
446
|
+
.uni-max-cut(2,64);
|
|
612
447
|
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
justify-content: flex-start;
|
|
616
|
-
align-items: center;
|
|
617
|
-
|
|
618
|
-
& > view.distance {
|
|
619
|
-
flex-shrink: 0;
|
|
620
|
-
margin-left: 20rpx;
|
|
621
|
-
font-size: 24rpx;
|
|
622
|
-
color: #999;
|
|
623
|
-
}
|
|
448
|
+
&.one {
|
|
449
|
+
.uni-max-cut(1,32);
|
|
624
450
|
}
|
|
625
|
-
& > view.address {
|
|
626
|
-
font-size: 24rpx;
|
|
627
|
-
color: #999;
|
|
628
|
-
line-height: 1.5em;
|
|
629
|
-
word-wrap: break-word;
|
|
630
|
-
word-break: break-all;
|
|
631
|
-
.uni-max-cut(2,72);
|
|
632
|
-
flex: 1;
|
|
633
|
-
|
|
634
|
-
&.one {
|
|
635
|
-
.uni-max-cut(1,36);
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
|
|
639
451
|
}
|
|
640
452
|
|
|
641
453
|
&-btn {
|
|
642
454
|
display: flex;
|
|
643
|
-
justify-content:
|
|
644
|
-
align-items:
|
|
645
|
-
|
|
646
|
-
margin-top: 10rpx;
|
|
455
|
+
justify-content: space-between;
|
|
456
|
+
align-items: center;
|
|
457
|
+
margin-top: 16rpx;
|
|
647
458
|
|
|
648
459
|
& .distance {
|
|
649
460
|
display: flex;
|
|
@@ -651,23 +462,15 @@ export default {
|
|
|
651
462
|
flex-shrink: 0;
|
|
652
463
|
font-size: 24rpx;
|
|
653
464
|
color: #999;
|
|
654
|
-
margin-bottom: 12rpx;
|
|
655
465
|
}
|
|
656
466
|
|
|
657
467
|
& .tags {
|
|
658
|
-
display: flex;
|
|
659
|
-
justify-content: flex-start;
|
|
660
|
-
align-items: center;
|
|
661
468
|
& > view {
|
|
662
469
|
font-size: 24rpx;
|
|
663
470
|
height: 42rpx;
|
|
664
471
|
line-height: 42rpx;
|
|
665
472
|
border-radius: 12rpx;
|
|
666
473
|
padding: 0 16rpx;
|
|
667
|
-
margin-right: 16rpx;
|
|
668
|
-
&:last-child {
|
|
669
|
-
margin-right: 0;
|
|
670
|
-
}
|
|
671
474
|
}
|
|
672
475
|
|
|
673
476
|
}
|
|
@@ -676,24 +479,21 @@ export default {
|
|
|
676
479
|
display: flex;
|
|
677
480
|
justify-content: flex-end;
|
|
678
481
|
align-items: center;
|
|
679
|
-
flex: 1;
|
|
680
|
-
height: 64rpx;
|
|
681
|
-
|
|
682
482
|
& .change_btn{
|
|
483
|
+
padding: 0 16rpx;
|
|
683
484
|
height: 48rpx;
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
color: #fff;
|
|
485
|
+
line-height: 48rpx;
|
|
486
|
+
border-radius: 24rpx;
|
|
487
|
+
background-color: var(--main-color);
|
|
488
|
+
font-size: 24rpx;
|
|
489
|
+
flex-shrink: 0;
|
|
490
|
+
color: #fff;
|
|
491
|
+
& + .change_btn{
|
|
492
|
+
margin-left: 10rpx;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
&.code {
|
|
496
|
+
background-color: var(--sub-main-color);
|
|
697
497
|
}
|
|
698
498
|
}
|
|
699
499
|
}
|