jufubao-food 1.0.15-beta1 → 1.0.15-beta11

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.
@@ -15,139 +15,189 @@
15
15
  </view>
16
16
  </view>
17
17
  <!-- #endif -->
18
- <view v-if="shopInfo" class="jfb-food-product-list__body" :style="[bodyStyleComp]">
19
- <view class="shop_info" :style="{top: layoutInfo.top+'rpx'}" @click="handleSwitchShop">
20
- <view class="flex-center">
21
- <xd-font-icon icon="icona-Buy2" size="36" style="margin-right: 8rpx;"></xd-font-icon>
22
- <view class="shop_name">{{ shopInfo.shop_name }}</view><text style="margin:0 20rpx;">|</text> <text class="_distance">{{ shopInfo.distance }}</text>
23
- </view>
24
- <view>
25
- <xd-font-icon icon="iconxiangyou_xian" color="#666666" size="28"></xd-font-icon>
18
+ <view class="jfb-food-product-list__body" :style="[bodyStyleComp]">
19
+ <view v-if="shopInfo">
20
+ <view class="shop_info" :style="{top: layoutInfo.top+'rpx'}" @click="handleSwitchShop">
21
+ <view class="flex-center">
22
+ <xd-font-icon icon="icona-Buy2" size="36" style="margin-right: 8rpx;"></xd-font-icon>
23
+ <view class="shop_name">{{ shopInfo.shop_name }}</view><text style="margin:0 20rpx;">|</text> <text class="_distance">{{ shopInfo.distance }}</text>
24
+ </view>
25
+ <view>
26
+ <xd-font-icon icon="iconxiangyou_xian" color="#666666" size="28"></xd-font-icon>
27
+ </view>
26
28
  </view>
27
- </view>
28
- <view style="height: 100rpx;"></view>
29
+ <view style="height: 100rpx;"></view>
29
30
 
30
- <view class="section_main" :style="[sectionMainStyleComp]">
31
- <view class="left_nav">
32
- <scroll-view style="height:100%" scroll-y="true" class="nav_scroll">
33
- <view v-for="(item, index) in categoryList" :key="item.category_id"
34
- class="nav_item" :class="{active: index === cateIndex}"
35
- @click="switchCate(index)"
36
- >
37
- {{ item.category_name }}
38
- <view v-if="item.cart_num" class="cate_num">{{ item.cart_num }}</view>
39
- </view>
40
- <view style="height: 80rpx;"></view>
41
- </scroll-view>
42
- </view>
43
- <view class="right_product">
44
- <scroll-view :style="{height:'100%'}" scroll-y="true"
45
- class="product_scroll"
46
- :scroll-into-view="prodScrollIntoView"
47
- :scroll-top="prodScrollTop"
48
- @scroll="handleScroll"
49
- >
50
- <view v-for="(cate, i) in showCategoryList" :key="cate.category_id"
51
- class="product_group"
52
- :id="getID(cate)"
53
- :data-next="cate.nextHeight"
31
+ <view class="section_main" :style="[sectionMainStyleComp]">
32
+ <view class="left_nav" :style="[navStyleComp]">
33
+ <scroll-view style="height:100%" scroll-y="true" class="nav_scroll">
34
+ <view v-for="(item, index) in categoryList" :key="item.category_id"
35
+ class="nav_item" :class="{active: index === cateIndex}"
36
+ :style="[navItemStyleComp, {
37
+ color: index === cateIndex ? titleStyle.actColor : titleStyle.color,
38
+ fontWeight: index === cateIndex ? titleStyle.actFontWeight : titleStyle.fontWeight,
39
+ fontSize: index === cateIndex ? titleStyle.actFontSize : titleStyle.fontSize,
40
+ backgroundColor: index === cateIndex ? titleStyle.actBgColor : titleStyle.bgColor
41
+ }]"
42
+ @click="switchCate(index)"
43
+ >
44
+ {{ item.category_name }}
45
+ <view v-if="item.cart_num" class="cate_num">{{ item.cart_num }}</view>
46
+ <view v-if="index === cateIndex" :style="[navActiveBarStyle]" class="nav_active_bar"></view>
47
+ </view>
48
+ <view style="height: 80rpx;"></view>
49
+ </scroll-view>
50
+ </view>
51
+ <view class="right_product">
52
+ <scroll-view :style="{height:'100%'}" scroll-y="true"
53
+ class="product_scroll"
54
+ :scroll-into-view="prodScrollIntoView"
55
+ :scroll-top="prodScrollTop"
56
+ @scroll="handleScroll"
54
57
  >
55
- <view class="group_title" :style="[contGroupTitleStyle]">{{ cate.category_name }}</view>
56
- <view class="product_list" v-if="cate.productList.length">
57
- <view v-for="item in cate.productList" :key="item.key" :style="[contProductStyles]">
58
- <view class="product_item">
59
- <view class="prod_img">
60
- <image :src="item.thumb"/>
61
- </view>
62
- <view class="prod_info">
63
- <view class="prod_tit"
64
- :class="{
65
- prod_tit_one:item.product_sku_name
66
- }">{{item.product_name}}</view>
67
- <!-- <view class="prod_brand" :style="{color:brandTextColor}" v-if="prod.brand_name">{{prod.brand_name}}</view> -->
68
- <view class="prod_specs" v-if="item.sub_name">{{item.sub_name}}</view>
69
- <view class="prod_price">
70
- <view style="display:flex;align-items:center">
71
- <CusPrice :isPlus="is_plus_site" :isShowIcon="false" salePriceFontSize="32" :showPrice="item.show_prices"></CusPrice>
58
+ <view class="product_scroll_inner">
59
+ <view style="height: 16rpx;"></view>
60
+ <view v-for="(cate, i) in showCategoryList" :key="cate.category_id"
61
+ class="product_group"
62
+ :id="getID(cate)"
63
+ :data-next="cate.nextHeight"
64
+ >
65
+ <view class="group_title" :style="[contGroupTitleStyle]">{{ cate.category_name }}</view>
66
+ <view class="product_list" v-if="cate.productList.length">
67
+ <view v-for="item in cate.productList" :key="item.key" :style="[contProductStyles]">
68
+ <view class="product_item" @click="toProductDetail(item)">
69
+ <view class="prod_img" :style="[contProductImageStyle]">
70
+ <image :src="item.thumb"/>
72
71
  </view>
73
- <view class="p_r" style="font-size: 28rpx;color:#999">
74
- <view v-if="item.has_choose" class="chose_spu" @click="toProductDetail(item)">
75
- 选规格
76
- <view v-if="item.num" class="cart_edg">{{ item.num }}</view>
77
- </view>
78
- <view v-else>
79
- <xd-number v-if="item.num" v-model="item.num" circle @change="val => handleCartNumChange(val, item)"></xd-number>
80
- <!-- <xd-font-icon v-else icon="iconaddcart" :color="mainColor" size="46"></xd-font-icon> -->
81
- <view class="icon_add_cart" v-else @click="toProductDetail(item)">+</view>
72
+ <view class="prod_info">
73
+ <view class="prod_tit"
74
+ :style="[contProductTitleStyle]"
75
+ :class="{
76
+ prod_tit_one:item.product_sku_name
77
+ }">{{item.product_name}}</view>
78
+ <!-- <view class="prod_brand" :style="{color:brandTextColor}" v-if="prod.brand_name">{{prod.brand_name}}</view> -->
79
+ <view class="prod_specs" v-if="item.sub_name">{{item.sub_name}}</view>
80
+ <view class="prod_price">
81
+ <view style="display:flex;align-items:center">
82
+ <CusPrice :isPlus="is_plus_site" :isShowIcon="false" salePriceFontSize="32" :showPrice="item.show_prices"></CusPrice>
83
+ </view>
84
+ <view v-if="isAddCart==='Y'" class="p_r" style="font-size: 28rpx;color:#999" @click.stop>
85
+ <view v-if="item.has_choose" class="chose_spu" :style="[choseSpuStyleComp]" @click="handleChoseProduct(item)">
86
+ <!-- 选规格 -->
87
+ {{ cartName }}
88
+ <view v-if="item.num" class="cart_edg">{{ item.num }}</view>
89
+ </view>
90
+ <view v-else>
91
+ <xd-number v-if="item.num" v-model="item.num" circle :pointCusStyle="pointCusStyle" @change="val => handleCartNumChange(val, item)"></xd-number>
92
+ <!-- <xd-font-icon v-else icon="iconaddcart" :color="mainColor" size="46"></xd-font-icon> -->
93
+ <view class="icon_add_cart" :style="[choseSpuStyleComp]" v-else @click="handleChoseProduct(item)">+</view>
94
+ </view>
95
+ </view>
82
96
  </view>
83
97
  </view>
84
98
  </view>
85
99
  </view>
86
100
  </view>
101
+ <view class="product_list" v-else>
102
+ <view class="product_loading" :style="{height: scrollBoxHeight + 'px'}">
103
+ 商品加载中...
104
+ </view>
105
+ </view>
87
106
  </view>
107
+ <view style="height: 80rpx;"></view>
88
108
  </view>
89
- <view class="product_list" v-else>
90
- <view class="product_loading" :style="{height: scrollBoxHeight + 'px'}">
91
- 商品加载中...
92
- </view>
93
- </view>
94
- </view>
95
- <view style="height: 80rpx;"></view>
96
- </scroll-view>
109
+ </scroll-view>
110
+ </view>
97
111
  </view>
98
- </view>
99
112
 
100
- <view style="height: 120rpx;"></view>
101
- <view class="fixed_bottom" :style="fixed_bottom">
102
- <view class="btm_l">
103
- <view class="card_edg" @click="cartProductShow=true">
104
- <xd-font-icon icon="icona-Buy21" color="#FF5A39" size="50"></xd-font-icon>
105
- <view v-if="cartCount" class="card_num">{{ cartCount }}</view>
113
+ <view style="height: 120rpx;"></view>
114
+ <view class="fixed_bottom" :style="fixed_bottom">
115
+ <view class="btm_l">
116
+ <view class="card_edg" @click="cartProductShow=true">
117
+ <xd-font-icon icon="icona-Buy21" color="#FF5A39" size="50"></xd-font-icon>
118
+ <view v-if="cartCount" class="card_num">{{ cartCount }}</view>
119
+ </view>
120
+ <xd-unit :price="cartPrice" :isOld="false"></xd-unit>
106
121
  </view>
107
- <xd-unit :price="cartPrice" :isOld="false"></xd-unit>
108
- </view>
109
- <view>
110
- <xd-button v-if="cartProductList.length" width="170rpx" size="small" type="primary" @click="handleSubmitCart">选好了</xd-button>
111
- <xd-button v-else width="170rpx" size="small" type="primary" :disabled="true">选好了</xd-button>
112
- </view>
113
- </view>
114
- <view class="cart_product_modal" v-if="cartProductShow">
115
- <view class="modal" @click="cartProductShow=false"></view>
116
- <view class="modal_cont">
117
- <view class="modal_head">
118
- <view>已选商品</view>
119
- <view class="clear_cart" @click="handleClearCart">
120
- <xd-font-icon icon="iconshanchu-01" color="#999999" size="26" style="margin-right: 8rpx;"></xd-font-icon>
121
- 清空
122
- </view>
122
+ <view>
123
+ <xd-button v-if="cartProductList.length"
124
+ :cusStyle="{fontSize: '28rpx'}"
125
+ width="170rpx" size="small" type="primary"
126
+ @click="handleSubmitCart"
127
+ >选好了</xd-button>
128
+ <xd-button v-else
129
+ :cusStyle="{fontSize: '28rpx'}"
130
+ width="170rpx" size="small" type="primary" :disabled="true"
131
+ >选好了</xd-button>
123
132
  </view>
124
- <view v-if="cartProductList.length" class="prod_list">
125
- <view class="prod_item" v-for="prod in cartProductList" :key="prod.product_id">
126
- <view class="prod_img">
127
- <image :src="prod.thumb"/>
128
- </view>
129
- <view class="prod_info">
130
- <view class="prod_tit"
131
- :class="{
132
- prod_tit_one:prod.sub_name
133
- }">{{prod.product_name}}</view>
134
- <!-- <view class="prod_brand" :style="{color:brandTextColor}" v-if="prod.brand_name">{{prod.brand_name}}</view> -->
135
- <view class="prod_specs" v-if="prod.sub_name">{{prod.sub_name}}</view>
136
- <view class="prod_price">
137
- <view style="display:flex;align-items:center">
138
- <CusPrice :isPlus="is_plus_site" type="order" :showPrice="prod.show_prices"></CusPrice>
139
- </view>
140
- <view style="font-size: 28rpx;color:#999">
141
- <xd-number circle v-model="prod.num" @change="val => handleCartNumChange(val, prod)"></xd-number>
133
+ </view>
134
+ <view class="cart_product_modal" v-if="cartProductShow">
135
+ <view class="modal" @click="cartProductShow=false"></view>
136
+ <view class="modal_cont">
137
+ <view class="modal_head">
138
+ <view>已选商品</view>
139
+ <view class="clear_cart" @click="handleClearCart">
140
+ <xd-font-icon icon="iconshanchu-01" color="#999999" size="26" style="margin-right: 8rpx;"></xd-font-icon>
141
+ 清空
142
+ </view>
143
+ </view>
144
+ <view v-if="cartProductList.length" class="prod_list">
145
+ <view class="prod_item" v-for="prod in cartProductList" :key="prod.product_id">
146
+ <view class="prod_img">
147
+ <image :src="prod.thumb"/>
148
+ </view>
149
+ <view class="prod_info">
150
+ <view class="prod_tit"
151
+ :class="{
152
+ prod_tit_one:prod.sub_name
153
+ }">{{prod.product_name}}</view>
154
+ <!-- <view class="prod_brand" :style="{color:brandTextColor}" v-if="prod.brand_name">{{prod.brand_name}}</view> -->
155
+ <view class="prod_specs" v-if="prod.sub_name">{{prod.sub_name}}</view>
156
+ <view class="prod_price">
157
+ <view style="display:flex;align-items:center">
158
+ <CusPrice :isPlus="is_plus_site" type="order" :showPrice="prod.show_prices"></CusPrice>
159
+ </view>
160
+ <view style="font-size: 28rpx;color:#999">
161
+ <xd-number circle v-model="prod.num" @change="val => handleCartNumChange(val, prod)"></xd-number>
162
+ </view>
142
163
  </view>
143
164
  </view>
144
165
  </view>
145
166
  </view>
167
+ <view v-else class="prod_list">
168
+ <xd-no-data height="250rpx" :scaleSize="0.8">购物车暂无商品</xd-no-data>
169
+ </view>
146
170
  </view>
147
- <view v-else class="prod_list">
148
- <xd-no-data height="250rpx" :scaleSize="0.8">购物车暂无商品</xd-no-data>
171
+ </view>
172
+ </view>
173
+ <xd-down-drawer :show.sync="showTakeoutShop" height="625rpx" :isClose="false">
174
+ <view class="take_shop_wrap" >
175
+ <view class="take_title">附近门店较多,请确认自取门店</view>
176
+ <view class="take_shop_list">
177
+ <view class="take_shop_item" :class="{active:i===curShopIndex}"
178
+ v-for="(item,i) in shopList" :key="i"
179
+ @click="setCurShop(i)"
180
+ >
181
+ <view class="shop_name_bar">
182
+ <view class="shop_name">
183
+ <text style="margin-right: 16rpx;">{{item.resource_shop_name}}</text>
184
+ <view class="curr_active">正在预览</view>
185
+ </view>
186
+ <view class="more_r">详情 <xd-font-icon icon="iconxiangyou_xian" :size="24"></xd-font-icon></view>
187
+ </view>
188
+ <view class="shop_addr_bar">
189
+ <view>{{item.address}}</view>
190
+ <view>{{item.distance}}</view>
191
+ </view>
192
+ <view class="shop_time" v-if="item.business_time_name">营业时间:{{ item.business_time_name }}</view>
193
+ </view>
149
194
  </view>
195
+ <view class="chose_other" @click="handleSwitchShop">选择其他门店 <xd-font-icon icon="iconxiangyou_xian" :size="24"></xd-font-icon></view>
150
196
  </view>
197
+ </xd-down-drawer>
198
+ <view v-if="showEmptyShop" class="empty_shop">
199
+ <xd-no-data :scaleSize="2" iconType="shop">附近暂无门店</xd-no-data>
200
+ <view class="empty_chose_btn" @click="handleSwitchShop">选择其他门店 <xd-font-icon icon="iconxiangyou_xian" :size="24"></xd-font-icon></view>
151
201
  </view>
152
202
  </view>
153
203
  </view>
@@ -160,11 +210,11 @@
160
210
  import XdButton from "@/components/XdButton/XdButton"
161
211
  import XdUnit from "@/components/XdUnit/XdUnit"
162
212
  import XdNoData from "@/components/XdNoData/XdNoData"
163
- // import XdDownDrawer from "@/components/XdDownDrawer/XdDownDrawer"
213
+ import XdDownDrawer from "@/components/XdDownDrawer/XdDownDrawer"
164
214
  import XdNumber from "@/components/XdNumber/XdNumber"
165
215
  import { jfbRootExec } from "@/utils/xd.event";
166
216
  import JfbFoodProductListMixin from "./JfbFoodProductListMixin";
167
- import { getContainerPropsValue } from "@/utils/xd.base";
217
+ import { getContainerPropsValue, gCPVal } from "@/utils/xd.base";
168
218
  import componentsMixins from "@/mixins/componentsMixins";
169
219
  import extsMixins from "@/mixins/extsMixins";
170
220
  import { mapState } from "vuex";
@@ -175,7 +225,7 @@
175
225
  CusProduct,
176
226
  XdButton,
177
227
  XdUnit,
178
- // XdDownDrawer,
228
+ XdDownDrawer,
179
229
  CusPrice,
180
230
  XdNumber,
181
231
  XdNoData
@@ -186,6 +236,7 @@
186
236
  data() {
187
237
  return {
188
238
  closeMask: true,
239
+ isPreview: false,
189
240
  resource_shop_id: "",
190
241
  xnamespace: "",
191
242
  consume_mode: "",
@@ -196,6 +247,8 @@
196
247
  page_size: 10,
197
248
  page_token: 1,
198
249
  productList: [],
250
+ showTakeoutShop: false,
251
+ showEmptyShop: false,
199
252
 
200
253
  lastScrollTop: 0,
201
254
  pointerScroll: true,
@@ -214,24 +267,37 @@
214
267
  cartCount: 0,
215
268
  cartProductShow: false,
216
269
  scrollTopTimer: null,
270
+ brand_id: "",
271
+ shopList: [],
272
+ curShopIndex: -1,
217
273
 
218
274
  //商品列表
219
275
  column_num: 1,
220
276
  skeNumber:10,
221
277
  rowSpacing: 16,
222
- columnSpacing:20,
278
+ columnSpacing: 16,
223
279
  listPadding:{},
224
280
  productConfig:{},
225
281
  itemPadding:{},
226
- itemSpacing:20,
227
- imageRadius:'16',
282
+ itemSpacing: 20,
283
+ imageRadius:'0',
228
284
  brandColor:'',
229
285
  itemFontStyle:{},
230
286
  itemBgcColor: '#FFFFFF',
231
287
  is_plus_site: false,
288
+ radius: '0',
289
+ contShadow:'0 0 0 rgba(0,0,0,0)',
290
+
291
+ //导航
292
+ titleBgcColor: '#FFFFFF',
293
+ titleStyle: {},
294
+ navStyle: "",
295
+ isAddCart: "Y",
296
+ cartStyle: "",
297
+ cartName: "",
232
298
 
233
299
  //面板
234
- isShowDiscount: "Y", //是否展示划线价
300
+ showDiscount: "Y", //是否展示划线价
235
301
  differ: 1, //原价与现价的差值
236
302
  foodDetailPath: "",
237
303
  confirmPath: "",
@@ -240,7 +306,8 @@
240
306
  },
241
307
  computed: {
242
308
  ...mapState({
243
- stateLocation: state => state.cityLocation.location || {}
309
+ stateLocation: state => state.cityLocation.location || {},
310
+ stateCity: state => state.cityLocation.city || {},
244
311
  }),
245
312
  curCategory() {
246
313
  return this.categoryList[this.cateIndex] || {};
@@ -248,19 +315,30 @@
248
315
  contProductStyles(){
249
316
  return {
250
317
  backgroundColor: this.itemBgcColor,
251
- marginBottom: this.rowSpacing + 'rpx',
252
- padding: '16rpx 32rpx',
253
- borderRadius: '16rpx',
318
+ marginBottom: this.columnSpacing + 'rpx',
319
+ padding: this.getMarginAndPadding(this.itemPadding, 0),
320
+ borderRadius: this.radius + 'rpx',
321
+ border: this.contBorder,
322
+ boxShadow: this.contShadow
254
323
  }
255
324
  },
256
325
  contGroupTitleStyle(){
326
+ return {}
327
+ },
328
+ contProductTitleStyle(){
329
+ return {
330
+ ...this.itemFontStyle,
331
+ }
332
+ },
333
+ contProductImageStyle(){
257
334
  return {
258
- paddingLeft: '32rpx',
335
+ borderRadius: this.imageRadius + 'rpx',
259
336
  }
260
337
  },
261
338
  bodyStyleComp(){
262
339
  return {
263
- '--main-color': this.mainColor
340
+ '--main-color': this.mainColor,
341
+ minHeight: this.layoutInfo.bodyMinHeightRpx + 'rpx',
264
342
  }
265
343
  },
266
344
  sectionMainStyleComp(){
@@ -269,6 +347,64 @@
269
347
  height: (this.layoutInfo.bodyMinHeightRpx - 220) + 'rpx',
270
348
  }
271
349
  },
350
+ navStyleComp(){
351
+ return {
352
+ backgroundColor: this.titleBgcColor,
353
+ }
354
+ },
355
+ navItemStyleComp(){
356
+ return {
357
+
358
+ }
359
+ },
360
+ navActiveBarStyle(){
361
+ if(this.navStyle === 'long'){
362
+ return {
363
+ top: 0,
364
+ bottom: 0
365
+ }
366
+ }else if(this.navStyle === 'no'){
367
+ return {
368
+ display: 'none'
369
+ }
370
+ }
371
+ },
372
+ choseSpuStyleComp(){
373
+ if(this.cartStyle === 'btn_cartCFull'){}
374
+ else if(this.cartStyle === 'btn_cartCPlain'){
375
+ return {
376
+ border: '1px solid ' + this.mainColor,
377
+ color: this.mainColor,
378
+ backgroundColor: 'transparent'
379
+ }
380
+ }
381
+ else if(this.cartStyle === 'btn_cartFFull'){
382
+ return {
383
+ borderRadius: 0,
384
+ }
385
+ }else if(this.cartStyle === 'btn_cartFPlain'){
386
+ return {
387
+ border: '1px solid ' + this.mainColor,
388
+ color: this.mainColor,
389
+ backgroundColor: 'transparent',
390
+ borderRadius: 0,
391
+ }
392
+ }
393
+ },
394
+ pointCusStyle(){
395
+ if(this.cartStyle === 'btn_cartFFull'){
396
+ return {
397
+ borderRadius: 0,
398
+ }
399
+ }else if(this.cartStyle === 'btn_cartFPlain'){
400
+ return {
401
+ // border: '1px solid ' + this.mainColor,
402
+ // color: this.mainColor,
403
+ // backgroundColor: 'transparent',
404
+ borderRadius: 0,
405
+ }
406
+ }
407
+ },
272
408
  fixed_bottom() {
273
409
  return this.fixedStyle({height: 30, zIndex: 111});
274
410
  },
@@ -291,6 +427,7 @@
291
427
  },
292
428
  created() {
293
429
  this.init(this.container);
430
+ this.isPreview = this.$configProject['isPreview'];
294
431
  this.is_plus_site = this.projectAttr.headers['X-Site-Group']==="vip";
295
432
  //todo
296
433
  },
@@ -299,19 +436,79 @@
299
436
  this.setNameSpace(options);
300
437
  this.resource_shop_id = options.resource_shop_id;
301
438
  this.consume_mode = options.consume_mode || 'HDSELF';
302
-
303
- this.p_getFoodShopDetail();
439
+ this.brand_id = options.brand_id;
440
+ if(this.resource_shop_id){
441
+ this.p_getFoodShopDetail(this.resource_shop_id);
442
+ }else if(this.brand_id || this.$configProject['isPreview']){
443
+ this.p_getFoodShopList();
444
+ }else{
445
+ this.$xdAlert({
446
+ content: '请配置品牌ID',
447
+ })
448
+ }
304
449
  },
305
450
  /**
306
451
  * @description 监听事件变化
307
452
  * @param container {object} 业务组件对象自己
308
453
  */
309
454
  init(container) {
310
- this.foodDetailPath = getContainerPropsValue(container, 'content.foodDetailPath', {value: "/Smallline/food/pinfo"}).value;
311
- this.confirmPath = getContainerPropsValue(container, 'content.confirmPath', {value: "/Smallline/food/confirmv2"}).value;
455
+ this.foodDetailPath = getContainerPropsValue(container, 'content.foodDetailPath', {value: ""}).value;
456
+ this.confirmPath = getContainerPropsValue(container, 'content.confirmPath', {value: ""}).value;
312
457
  this.switchStorePath = getContainerPropsValue(container, 'content.switchStorePath', { value: ''}).value;
313
- // this.productConfig = this.getProductConfig(container);
314
- this.productConfig = this.getProductConfig(container,{cartStyle:'iconaddcart'});
458
+ this.showDiscount = gCPVal(container, 'showDiscount', "Y");
459
+ this.differ = gCPVal(container, 'differ', 1);
460
+
461
+ //商品样式关联属性
462
+ const sValue = "{\"border\":0,\"backgroundColor\":\"#fff\"}";
463
+ let itemBgcColoStyle = this.getRelationStatus(container,'productStyle',{ itemBgcColorStatus:['itemBgcColor'],bgBorder:['contBorder', 'bs']},sValue);
464
+ this.itemBgcColor = gCPVal(container, 'itemBgcColor', ['#fff'], {sKey: 'itemBgcColorStatus', cusFields: ['productStyle','backgroundColor',itemBgcColoStyle]});
465
+ this.contBorder = gCPVal(container, 'contBorder', [{color: '#eee',width: '2',style: 'solid'}], {isBorder: true, bsOld:['is_border','is_border_w','is_border_c'], cusFields: ['productStyle','border',itemBgcColoStyle]});
466
+ this.contStyleBorder = gCPVal(container, 'contBorder', [{color: '#eee',width: '2',style: 'solid'}], {isBorder: true, isBsWidth: true, bsOld:['is_border','is_border_w','is_border_c'], cusFields: ['productStyle','border',itemBgcColoStyle]});
467
+
468
+ console.log("this.z itemBgcColor", this.itemBgcColor)
469
+ console.log("this.z contBorder", this.contBorder)
470
+ console.log("this.z contStyleBorder", this.contStyleBorder)
471
+
472
+ this.itemPadding = gCPVal(container, 'itemPadding', [0], {sKey: "itemPaddingStatus", isPMR: true});
473
+ this.itemSpacing = gCPVal(container,'itemSpacing', [16,20], {sKey:'contStyleStatus',fields:['itemSpacing','contStyle']});
474
+ this.itemFontStyle = this.getFontAndBgcStyle(
475
+ gCPVal(container,'contStyle', {}, {sKey:'contStyleStatus',fields:['itemSpacing','contStyle']}),
476
+ {fontSize: '28rpx', color: '#333', fontWeight: 'normal'},
477
+ )
478
+ this.radius = gCPVal(container,'radius', [this.gStyleValue.radius,'0'], {sKey:'radiusStatus',fields:['radius']})||0;
479
+ this.imageRadius = gCPVal(container,'imageRadius', [this.gStyleValue.radius/2,'0'], {sKey:'imageRadiusStatus',fields:['imageRadius']})||0;
480
+ this.contShadow = gCPVal(container, 'contShadow', [this.gStyleValue.shadow,'none'], {isShadow:true});
481
+ this.columnSpacing = gCPVal(container,'columnSpacing', [16,20], {sKey:'columnRowStatus',fields:['columnSpacing']});
482
+
483
+ //导航
484
+ this.titleBgcColor = gCPVal(container,'titleBgcColor', '#f8f8f8', {sKey:'titleBgcColorStatus',fields:['titleBgcColor']});
485
+ this.titleStyle = gCPVal(
486
+ container,
487
+ "titleStyle",
488
+ [{
489
+ color: '#333333',
490
+ actColor: '#333333',
491
+ fontSize: '24',
492
+ actFontSize: '24', //'', 20 , 26 ,28,30, 36 默认值:''=>24
493
+ fontWeight: '400',
494
+ actFontWeight: '500',
495
+ actBgColor: "#FFFFFF",
496
+ bgColor: ""
497
+ }],
498
+ {sKey:'titleStyleStatus',fields:['titleStyle'],isMerge: true}
499
+ );
500
+ this.navStyle = gCPVal(container, 'navStyle', 'short');
501
+ this.isAddCart = gCPVal(container, 'isAddCart', 'Y');
502
+ this.cartStyle = gCPVal(container, 'cartStyle', 'btn_cartCFull')
503
+ this.cartName = gCPVal(container, 'cartName', '选规格');
504
+ console.log("this.z cartStyle", this.cartStyle)
505
+
506
+ //预览mock数据
507
+ if (this.$configProject['isPreview']) {
508
+ this.categoryList = [];
509
+ this.p_getFoodShopDetail();
510
+ }
511
+
315
512
  },
316
513
  handleCartNumChange(val, prod){
317
514
  console.log("handleCartNumChange", val, prod)
@@ -348,17 +545,69 @@
348
545
  this.p_getFoodCartList();
349
546
  })
350
547
  },
548
+ toSwitchShopPage(){
549
+ if(this.shopList.length===0){
550
+ this.p_getFoodShopList(false);
551
+ }
552
+ this.showTakeoutShop = true;
553
+ },
351
554
  handleSwitchShop(){
352
- this.$xdUniHelper.navigateTo({
353
- url: this.switchStorePath + "?brand_id=" + this.shopInfo.brand_id + "&resource_shop_id=" + this.resource_shop_id,
555
+ //切换门店
556
+ let curPage = this.$xdUniHelper.getCurrentPages();
557
+ let query = {...curPage.query};
558
+ let callback= Base64.encode(curPage.path + '?' + this.$xdUniHelper.jsonToParams(query));
559
+ this.$xdUniHelper.redirectTo({
560
+ url: this.switchStorePath + '?brand_id=' + this.brand_id + '&callback=' + callback
561
+ })
562
+ // this.$xdUniHelper.navigateTo({
563
+ // url: this.switchStorePath + "?brand_id=" + this.brand_id + "&resource_shop_id=" + this.resource_shop_id,
564
+ // })
565
+ },
566
+ setCurShop(index){
567
+ if(this.curShopIndex !== index){
568
+ this.curShopIndex = index;
569
+ this.p_getFoodShopDetail();
570
+ }
571
+ this.showTakeoutShop = false;
572
+ },
573
+ p_getFoodShopList(loadFirstShop=true){
574
+ jfbRootExec("getFoodShopList", {
575
+ vm: this,
576
+ data: {
577
+ brand_id: this.brand_id,
578
+ latitude: this.stateLocation.latitude,
579
+ longitude: this.stateLocation.longitude,
580
+ city_code: this.stateCity.city_code,
581
+ page_token: 1,
582
+ page_size: 3,
583
+ consume_mode: this.consume_mode,
584
+ xnamespace: this.xnamespace
585
+ }
586
+ }).then(res => {
587
+ if(res.list && res.list.length > 0){
588
+ this.shopList = res.list;
589
+ if(loadFirstShop){
590
+ this.curShopIndex = 0;
591
+ this.p_getFoodShopDetail();
592
+ }else{
593
+ let findShopIndex = this.shopList.findIndex(item => item.resource_shop_id == this.resource_shop_id);
594
+ this.curShopIndex = findShopIndex;
595
+ }
596
+ if(!this.$configProject['isPreview']){
597
+ this.showTakeoutShop = true;
598
+ }
599
+ }else{
600
+ this.showEmptyShop = true;
601
+ }
354
602
  })
355
603
  },
356
- p_getFoodShopDetail(){
604
+ p_getFoodShopDetail(resource_shop_id){
605
+ let curShop = this.shopList[this.curShopIndex]||{};
357
606
  jfbRootExec("getFoodShopDetail", {
358
607
  vm: this,
359
608
  data: {
360
609
  xnamespace: this.xnamespace,
361
- resource_shop_id: this.resource_shop_id,
610
+ resource_shop_id: resource_shop_id || curShop.resource_shop_id,
362
611
  consume_mode: this.consume_mode,
363
612
  latitude: this.stateLocation.latitude,
364
613
  longitude: this.stateLocation.longitude,
@@ -428,11 +677,28 @@
428
677
  page_token: options.page_token || 1,
429
678
  page_size: this.page_size,
430
679
  category_id: options.category_id,
431
- is_show_uprice: this.isShowDiscount !== 'Y' ? 0 : this.multiply(this.differ),
680
+ is_show_uprice: this.showDiscount !== 'Y' ? 0 : this.multiply(this.differ),
432
681
  ...options,
433
682
  }
434
683
  }).then(res => {
435
- let productList = res.lists;
684
+ let productList = res.lists.map(item => {
685
+ if(this.$configProject['isPreview']){
686
+ if(this.showDiscount !== "Y"){
687
+ item.show_prices = item.show_prices.filter(p=>p.t!=='U')
688
+ }else{
689
+ //展示划线价
690
+ let sP = item.show_prices.find(p => p.t === 'S');
691
+ let uP = item.show_prices.find(p => p.t === 'U');
692
+ if(!uP) return item;
693
+ if(uP.p - sP.p >= this.multiply(this.differ)){
694
+ item.show_prices = [sP, uP];
695
+ }else{
696
+ item.show_prices = [sP];
697
+ }
698
+ }
699
+ }
700
+ return item;
701
+ });
436
702
  this.categoryList = this.categoryList.map((item, index) => {
437
703
  if(item.category_id === options.category_id){
438
704
  let prodList = [];
@@ -690,15 +956,19 @@
690
956
  return Promise.resolve();
691
957
  },
692
958
 
693
- toProductDetail(product){
959
+ handleChoseProduct(product){
694
960
  if(product.has_choose){
695
- this.$xdUniHelper.navigateTo({
696
- url: this.foodDetailPath + `?product_id=${product.product_id}&shop_id=${this.shopInfo.shop_id}&category_id=${product.category_id}`
697
- })
961
+ this.toProductDetail(product);
698
962
  }else{
699
963
  this.addProductCart(product);
700
964
  }
701
965
  },
966
+ toProductDetail(product){
967
+ if(this.$configProject['isPreview']) return;
968
+ this.$xdUniHelper.navigateTo({
969
+ url: this.foodDetailPath + `?product_id=${product.product_id}&shop_id=${this.shopInfo.shop_id}&category_id=${product.category_id}`
970
+ })
971
+ },
702
972
 
703
973
  //加入购入车
704
974
  addProductCart(product){
@@ -784,6 +1054,26 @@
784
1054
  .jfb-food-product-list {
785
1055
  &__body{
786
1056
  background-color: #FFFFFF;
1057
+ ::v-deep .xd-up-drawer__warper{
1058
+ border-radius: 24rpx 24rpx 0 0 !important;
1059
+ overflow: hidden;
1060
+ }
1061
+ .empty_shop{
1062
+ background-color: #FFFFFF;
1063
+ height: 100%;
1064
+ .empty_chose_btn{
1065
+ display: flex;
1066
+ justify-content: center;
1067
+ align-items: center;
1068
+ width: 250rpx;
1069
+ height: 64rpx;
1070
+ margin: 0 auto;
1071
+ font-size: 24rpx;
1072
+ color: #E5010E;
1073
+ border: 1px solid #E5010E;
1074
+ border-radius: 100px;
1075
+ }
1076
+ }
787
1077
 
788
1078
  .cart_edg{
789
1079
  position: absolute;
@@ -842,6 +1132,15 @@
842
1132
  padding: 24rpx;
843
1133
  text-align: center;
844
1134
  position: relative;
1135
+ .nav_active_bar{
1136
+ position: absolute;
1137
+ left: 0;
1138
+ top: 28rpx;
1139
+ bottom: 28rpx;
1140
+ width: 12rpx;
1141
+ background-color: var(--main-color);
1142
+ border-radius: 0 4rpx 4rpx 0;
1143
+ }
845
1144
 
846
1145
  .cate_num{
847
1146
  position: absolute;
@@ -858,21 +1157,27 @@
858
1157
  &.active{
859
1158
  // color: var(--main-color);
860
1159
  font-weight: 500;
861
- &::after{
862
- content: '';
863
- position: absolute;
864
- left: 0;
865
- top: 28rpx;
866
- bottom: 28rpx;
867
- width: 12rpx;
868
- background-color: var(--main-color);
869
- }
1160
+ background-color: #FFFFFF;
1161
+ // &::after{
1162
+ // content: '';
1163
+ // position: absolute;
1164
+ // left: 0;
1165
+ // top: 28rpx;
1166
+ // bottom: 28rpx;
1167
+ // width: 12rpx;
1168
+ // background-color: var(--main-color);
1169
+ // border-radius: 0 4rpx 4rpx 0;
1170
+ // }
870
1171
  }
871
1172
  }
872
1173
  }
873
1174
  .right_product{
874
1175
  flex: 1;
875
- margin: 0;
1176
+ margin: 0 0rpx;
1177
+ .product_scroll_inner{
1178
+ padding: 0 32rpx;
1179
+ box-sizing: border-box;
1180
+ }
876
1181
 
877
1182
  .product_group{
878
1183
  .group_title{
@@ -884,7 +1189,6 @@
884
1189
  height: 64rpx;
885
1190
  line-height: 64rpx;
886
1191
  border-radius: 16rpx;
887
- padding-left: 32rpx;
888
1192
  }
889
1193
  .product_list{
890
1194
  .product_loading{
@@ -898,7 +1202,6 @@
898
1202
  .product_item{
899
1203
  box-sizing: border-box;
900
1204
  height: auto;
901
- background: #FFFFFF;
902
1205
  display: flex;
903
1206
 
904
1207
  .chose_spu{
@@ -1063,7 +1366,7 @@
1063
1366
  .prod_specs{
1064
1367
  padding-top: unit(10, rpx);
1065
1368
  display: block;
1066
- font-size: 28rpx;
1369
+ font-size: 24rpx;
1067
1370
  color: #999999;
1068
1371
  line-height: unit(32, rpx);
1069
1372
  }
@@ -1107,5 +1410,85 @@
1107
1410
  }
1108
1411
  }
1109
1412
  }
1413
+ .take_shop_wrap{
1414
+ background-color: #f8f8f8;
1415
+ .take_title{
1416
+ background-color: #FFFFFF;
1417
+ padding: 24rpx 32rpx;
1418
+ font-size: 32rpx;
1419
+ color: #333333;
1420
+ font-weight: 500;
1421
+ }
1422
+ .chose_other{
1423
+ display: flex;
1424
+ align-items: center;
1425
+ justify-content: center;
1426
+ font-size: 24rpx;
1427
+ line-height: 48rpx;
1428
+ color: #666666;
1429
+ padding: 16rpx 0;
1430
+ }
1431
+ .take_shop_item{
1432
+ background-color: #FFFFFF;
1433
+ margin: 16rpx;
1434
+ padding: 32rpx;
1435
+ border-radius: 16rpx;
1436
+ border: 1px solid transparent;
1437
+
1438
+ &.active{
1439
+ border: 1px solid rgba(229, 1, 14, 0.1);
1440
+ background-color: rgba(229, 1, 14, 0.03);
1441
+ .shop_name_bar{
1442
+ .curr_active{
1443
+ display: inline-flex;
1444
+ }
1445
+ }
1446
+ }
1447
+ .shop_name_bar{
1448
+ display: flex;
1449
+ align-items: flex-start;
1450
+ justify-content: space-between;
1451
+ font-size: 32rpx;
1452
+ color: #333333;
1453
+ .shop_name{
1454
+ align-items: center;
1455
+ flex: 1;
1456
+ padding-right: 40rpx;
1457
+ }
1458
+ .curr_active{
1459
+ border: 1px solid rgba(229, 1, 14, 0.2);
1460
+ border-radius: 6rpx;
1461
+ color: #D11528;
1462
+ height: 42rpx;
1463
+ width: 128rpx;
1464
+ align-items: center;
1465
+ justify-content: center;
1466
+ font-size: 24rpx;
1467
+ // margin-left: 16rpx;
1468
+ display: none;
1469
+ }
1470
+ .more_r{
1471
+ display: flex;
1472
+ align-items: center;
1473
+ color: #999999;
1474
+ font-size: 24rpx;
1475
+ padding-top: 8rpx;
1476
+ }
1477
+ }
1478
+ .shop_addr_bar{
1479
+ display: flex;
1480
+ align-items: center;
1481
+ justify-content: space-between;
1482
+ margin-top: 16rpx;
1483
+ font-size: 24rpx;
1484
+ color: #999999;
1485
+ }
1486
+ .shop_time{
1487
+ font-size: 24rpx;
1488
+ color: #999999;
1489
+ margin-top: 16rpx;
1490
+ }
1491
+ }
1492
+ }
1110
1493
  }
1111
1494
  </style>