jufubao-takeorder 1.0.1

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