jufubao-base 1.0.61-beta1001 → 1.0.61-beta1003

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.
@@ -34,7 +34,7 @@
34
34
  size="45"
35
35
  icon="iconsaoma"
36
36
  ></xd-font-icon>
37
-
37
+
38
38
  </view>
39
39
  <view
40
40
  class="jfb-base-card-entry__body-cut-item"
@@ -51,7 +51,7 @@
51
51
  size="45"
52
52
  icon="iconyuechi"
53
53
  ></xd-font-icon>
54
-
54
+
55
55
  </view>
56
56
  </template>
57
57
  <template v-else>
@@ -107,7 +107,7 @@
107
107
  }"
108
108
  >已绑定票券</view>
109
109
  <view
110
- v-if="changeList.length > 0"
110
+ v-if="hasChangeStatus"
111
111
  @click="tabIndex = 2"
112
112
  :style="{
113
113
  color: tabIndex === 2 ? '#fff' : '#B8B7BE',
@@ -120,16 +120,142 @@
120
120
  :style="{ color: warningColor }"
121
121
  v-if="tabIndex === 2"
122
122
  >* 目前仅支持电影票兑换券进行转换</view>
123
- <view v-if="showList.length>0">
123
+ <view class="card-content">
124
124
  <view
125
- v-if="tabIndex === 2 || tabIndex === 1"
126
- class="jfb-base-card-entry__body-card"
127
- >
125
+ v-if="tabIndex === 2 || tabIndex === 1 && cardList.length > 0"
126
+ class="jfb-base-card-entry__body-card"
127
+ >
128
+ <view
129
+ v-for="(item,index) in cardList"
130
+ :data-index="item.card_number"
131
+ :data-idx="index"
132
+ class="card-list"
133
+ :key="item.card_number"
134
+ @click="toDetail(item)"
135
+ v-if="setCardItemShow(item)"
136
+ :style="{
137
+ background: item['theme']['color'],
138
+ backgroundSize: '100%',
139
+ height: item.height + 'px'
140
+ }"
141
+ >
142
+ <view class="card-list-warp" :style="{backgroundImage: 'url('+ item['theme']['image'] +')'}">
143
+ <view class="card-list__title"><view>{{item['card_type_name']}}</view></view>
144
+ <view class="card-list__content">
145
+ <view>
146
+ <text>券号:</text>
147
+ <text>{{item.card_number}}</text>
148
+ </view>
149
+ <view @click.stop="toDetail(item)" v-if="0">
150
+ <view>
151
+ <xd-font-icon icon="iconerweima" width="56" height="56" size="50" color="#fff"></xd-font-icon>
152
+ </view>
153
+ <view>点击查看</view>
154
+ </view>
155
+ </view>
156
+ <view class="card-list__date">
157
+ <text>有效期:</text>
158
+ <text>{{item.end_time}}</text>
159
+ </view>
160
+ <view class="card-list__yue">
161
+ <text>余额:</text>
162
+ <text>{{item.card_point}} {{ item.unit }}</text>
163
+ </view>
164
+ <view class="card-list__other" v-if="item.other_card_point && item.card_point_type === 2">
165
+ <view><text>购买其他物品可抵:</text><text>{{item.other_card_point}} {{ item.unit }}</text></view>
166
+ </view>
167
+ <template v-if="tabIndex === 1">
168
+ <view class="card-list__entry" v-if="item.entries.length === 1">
169
+ <view
170
+ @click.stop="handleBindLogin(item,item['entries'][0])"
171
+ :style="{color: item['theme']['color']}"
172
+ >进入{{item['entries'][0]['entry_name']}}</view>
173
+ </view>
174
+ <view class="card-list__nodata" v-if="item.entries.length === 0">暂无支持服务列表</view>
175
+ <view class="card-list__entrys" v-if="item.entries.length > 1">
176
+ <view class="card-list__entrys-title">
177
+ <view>可兑换权益</view>
178
+ <view @click.stop="toDetail(item, false)">
179
+ <text>查看详情</text>
180
+ <xd-font-icon icon="iconxiangyou_xian" color="#999" size="20"></xd-font-icon>
181
+ </view>
182
+ </view>
183
+ <view class="card-list__entrys-list">
184
+ <scroll-view scroll-x class="card-list__entrys-scroll">
185
+ <view class="card-list__entrys-item">
186
+ <view
187
+ v-for="(entry,idx) in item.entries"
188
+ :key="idx"
189
+ @click.stop="handleBindLogin(item, entry)"
190
+ >
191
+ <view><image :src="entry.image_url"></image></view>
192
+ <view>{{entry|cutstr}}</view>
193
+ <view>
194
+ <text>去兑换</text>
195
+ <xd-font-icon icon="iconxiangyou_xian" color="#999" size="20"></xd-font-icon>
196
+ </view>
197
+ </view>
198
+ </view>
199
+ </scroll-view>
200
+ </view>
201
+ </view>
202
+ </template>
203
+ <view class="card-list__entry" v-else>
204
+ <view
205
+ @click.stop="handleBindLogin(item,item['entries'][0])"
206
+ :style="{color: item['theme']['color']}"
207
+ >票券转换</view>
208
+ </view>
209
+ </view>
210
+ </view>
211
+ <view
212
+ class="card-content-empty"
213
+ v-else
214
+ :style="{
215
+ height: item.height + 'px',
216
+ backgroundImage: 'url('+ (item.entries.length > 1 ? cardItemBg2: cardItemBg1) +')'
217
+ }"
218
+ ></view>
219
+ </view>
220
+ <view v-else-if="cardList === null && cardList.length === 0">
221
+ <view class="jfb-base-card-entry__body-empty">
222
+ <view class="jfb-base-card-entry__body-empty-wrap">
223
+ <image :src="emptyBg"></image>
224
+ 暂无票券
225
+ </view>
226
+ </view>
227
+ </view>
128
228
  <view
129
- v-for="(item) in showList"
130
- class="card-list"
229
+ v-if="showDisabled==='Y'"
230
+ @click="handleToDisabled"
231
+ class="jfb-base-card-entry__body-disabled"
232
+ >已失效票券>>></view>
233
+ </view>
234
+ <view class="jfb-base-card-entry__body-dialog" v-if="dialogEvent">
235
+ <view class="jfb-base-card-entry__body-dialog-content">
236
+ <image
237
+ class="jfb-base-card-entry__body-dialog-content-img"
238
+ alt=""
239
+ :src="popup"
240
+ ></image>
241
+ <xd-font-icon
242
+ icon="icondanchuangguanbi_xian"
243
+ width="52"
244
+ height="52"
245
+ size="26"
246
+ color="#fff"
247
+ class="jfb-base-card-entry-entry__body-dialog-content-close"
248
+ @click="dialogEvent = false"
249
+ ></xd-font-icon>
250
+ </view>
251
+ </view>
252
+ <view class="computed-height" >
253
+ <view
254
+ v-for="(item,index) in cardComputedList"
255
+ :data-card="item.card_number"
256
+ class="card-list computed-box"
131
257
  :key="item.card_number"
132
- @click="toDetail(item)"
258
+ v-if="index < 20"
133
259
  :style="{
134
260
  background: item['theme']['color'],
135
261
  backgroundSize: '100%'
@@ -205,40 +331,8 @@
205
331
  </view>
206
332
  </view>
207
333
  </view>
208
- </view>
209
- <view v-else>
210
- <view class="jfb-base-card-entry__body-empty">
211
- <view class="jfb-base-card-entry__body-empty-wrap">
212
- <image :src="emptyBg"></image>
213
- 暂无票券
214
- </view>
215
- </view>
216
- </view>
217
- <view
218
- v-if="showDisabled==='Y'"
219
- @click="handleToDisabled"
220
- class="jfb-base-card-entry__body-disabled"
221
- >已失效票券>>></view>
222
- </view>
223
- <view class="jfb-base-card-entry__body-dialog" v-if="dialogEvent">
224
- <view class="jfb-base-card-entry__body-dialog-content">
225
- <image
226
- class="jfb-base-card-entry__body-dialog-content-img"
227
- alt=""
228
- :src="popup"
229
- ></image>
230
- <xd-font-icon
231
- icon="icondanchuangguanbi_xian"
232
- width="52"
233
- height="52"
234
- size="26"
235
- color="#fff"
236
- class="jfb-base-card-entry-entry__body-dialog-content-close"
237
- @click="dialogEvent = false"
238
- ></xd-font-icon>
239
- </view>
240
- </view>
241
334
  </view>
335
+ </view>
242
336
  </template>
243
337
 
244
338
  <script>
@@ -250,6 +344,7 @@ import JfbBaseCardEntryMixin from "./JfbBaseCardEntryMixin";
250
344
  import componentsMixins from "@/mixins/componentsMixins";
251
345
  import extsMixins from "@/mixins/extsMixins";
252
346
  import colorCardMixins from "@/mixins/colorCardMixins";
347
+ import cardListMixins from "@/mixins/cardListMixins";
253
348
  import { mapState, mapActions } from "vuex";
254
349
  import { getContainerPropsValue, isWechat } from "@/utils/xd.base";
255
350
  import XdNoticeBar from "@/components/XdNoticeBar/XdNoticeBar";
@@ -264,15 +359,12 @@ export default {
264
359
  XdNoticeBar,
265
360
  XdCardV2
266
361
  },
267
- mixins: [componentsMixins, extsMixins, JfbBaseCardEntryMixin, colorCardMixins],
362
+ mixins: [componentsMixins, extsMixins, JfbBaseCardEntryMixin, colorCardMixins, cardListMixins],
268
363
  computed: {
269
364
  ...mapState({
270
365
  jwxSDK: (state) => state.jwxSDK,
271
366
  jfbAuthorize: (state) => state.jfbAuthorize,
272
367
  }),
273
- showList(){
274
- return this.tabIndex === 1 ? this.cardList: this.changeList
275
- },
276
368
  emptyBg() {
277
369
  return this.getNoData();
278
370
  },
@@ -286,6 +378,10 @@ export default {
286
378
  watch: {
287
379
  container(value) {
288
380
  this.init(value)
381
+ },
382
+ tabIndex(){
383
+ this.clearDefault();
384
+ this.handleCardInit(this.ajaxCardList, this.tabIndex === 1);
289
385
  }
290
386
  },
291
387
  data() {
@@ -300,11 +396,9 @@ export default {
300
396
  cutIndex: 1,
301
397
  tabIndex: 1,
302
398
  isBack: null, //是否使用返回键
303
- cardList: [],
304
- changeList: [],
305
- disableList: [],
306
399
  inCallback: null, //内部跳转地址
307
400
 
401
+
308
402
  //页面跳转地址
309
403
  login_name:'',//登陆文案
310
404
  changeUrl: "",
@@ -325,7 +419,6 @@ export default {
325
419
  this.init(this.container);
326
420
  this.noticeBackgroundColor = Color(this.warningColor).alpha(0.2).toString();
327
421
  this.isPreview = this.$configProject.isPreview;
328
-
329
422
 
330
423
  //#ifdef H5
331
424
  this.isWx = this.isPreview || isWechat();
@@ -345,7 +438,7 @@ export default {
345
438
 
346
439
  },
347
440
  methods: {
348
-
441
+
349
442
  init(container){
350
443
  //设置
351
444
  this.cardLayout = getContainerPropsValue(container,"content.cardLayout","1");
@@ -357,7 +450,7 @@ export default {
357
450
  //this.allEntryPath = getContainerPropsValue(container,"content.allEntryPath",{value: ""}).value;
358
451
  this.login_name = getContainerPropsValue(container, "content.login_name", "登录");
359
452
  },
360
-
453
+
361
454
  handleToLink(path) {
362
455
  this.$xdUniHelper.navigateTo({
363
456
  url: path,
@@ -443,7 +536,7 @@ export default {
443
536
  if (item["is_valid"] !== "Y") {
444
537
  return;
445
538
  }
446
-
539
+
447
540
  this.$xdShowLoading({});
448
541
  jfbRootExec("loginEntryCardBind", {
449
542
  vm: this,
@@ -462,7 +555,7 @@ export default {
462
555
  if (this.$configProject.isPreview) {
463
556
  console.log("handleBindLogin", "预览模式不跳转", this.inCallback);
464
557
  }
465
-
558
+
466
559
  else {
467
560
  this.handleToApp(entry);
468
561
  }
@@ -471,7 +564,7 @@ export default {
471
564
  this.$xdHideLoading();
472
565
  });
473
566
  }
474
-
567
+
475
568
  //转换卡跳转
476
569
  else {
477
570
  this.$xdUniHelper.navigateTo({
@@ -493,7 +586,7 @@ export default {
493
586
  }
494
587
  const {dir, path, host} = item;
495
588
  let nsp = Base64.encodeURI(JSON.stringify({business_code: entry['business_code']}));
496
-
589
+
497
590
  //外站配置地址
498
591
  if (entry.redirect_type === 'URL') {
499
592
  if (item['path'].indexOf('?') === -1) {
@@ -502,13 +595,13 @@ export default {
502
595
  this.toApp(redirectUrl);
503
596
  return;
504
597
  }
505
-
598
+
506
599
  //站内转换
507
600
  let jumpUrl = item.path;
508
601
  //#ifdef H5
509
602
  jumpUrl = `//${host}/${dir}${path}`;
510
603
  //#endif
511
-
604
+
512
605
  if (item['fixed_business_code'] === '') {
513
606
  redirectUrl = `${jumpUrl}?x-common=${nsp}&vs=${new Date().getTime()}`
514
607
  }
@@ -517,7 +610,7 @@ export default {
517
610
  }
518
611
  this.toApp(redirectUrl);
519
612
  },
520
-
613
+
521
614
  toDetail(item, out=true) {
522
615
  if(out) {
523
616
  if(item.entries.length === 1) {
@@ -531,7 +624,7 @@ export default {
531
624
  url: `${this.detailUrl}?card_number=${item["card_number"]}`,
532
625
  }, false);
533
626
  }
534
-
627
+
535
628
  },
536
629
 
537
630
  onJfbLoad(options) {
@@ -565,7 +658,7 @@ export default {
565
658
  })
566
659
  .then((res) => {
567
660
  this.showDisabled = res.is_show_invalid_card_entrance;
568
- res.list = res.list.map((item) => {
661
+ res.list.map((item) => {
569
662
  return {
570
663
  ...item,
571
664
  card_point: this.$xdUniHelper.divisionFloatNumber(
@@ -578,15 +671,13 @@ export default {
578
671
  ),
579
672
  };
580
673
  });
581
-
582
- this.cardList = this.getCardGroupItem(res.list.filter((item) => {
583
- return item["is_valid"] === "Y";
584
- }), res['site_entry_settings']);
585
-
586
- this.changeList = this.getCardGroupItem(this.cardList.filter((item) => {
674
+ this.ajaxCardList = res;
675
+ this.handleCardInit(this.ajaxCardList, this.tabIndex === 1);
676
+
677
+
678
+ this.hasChangeStatus = this.getCardGroupItem(this.ajaxCardList.list.filter((item) => {
587
679
  return item["is_exchange"] === "Y";
588
- }), res['site_entry_settings']);
589
-
680
+ }), res['site_entry_settings']).length > 0;
590
681
  this.$xdHideLoading();
591
682
  })
592
683
  .catch(() => this.$xdHideLoading());
@@ -674,7 +765,7 @@ export default {
674
765
  }
675
766
  }
676
767
  }
677
-
768
+
678
769
  &-line {
679
770
  height: 1px;
680
771
  background: #eee;
@@ -686,7 +777,7 @@ export default {
686
777
  display: flex;
687
778
  align-items: center;
688
779
  justify-content: space-between;
689
-
780
+
690
781
 
691
782
  &-item {
692
783
  border: unit(6, rpx) solid;
@@ -699,13 +790,13 @@ export default {
699
790
  align-items: center;
700
791
  justify-content: center;
701
792
  box-sizing: border-box;
702
-
793
+
703
794
  }
704
795
  }
705
796
 
706
797
  &-notice {
707
798
  margin: unit(30, rpx) unit(-35, rpx) 0 unit(-35, rpx);
708
-
799
+
709
800
  padding: unit(22, rpx) unit(35, rpx);
710
801
  line-height: unit(70, rpx);
711
802
  }
@@ -746,18 +837,18 @@ export default {
746
837
  overflow: hidden;
747
838
  border-radius: unit(16, rpx);
748
839
  margin-bottom: unit(30, rpx);
749
-
840
+
750
841
  &:last-child {
751
842
  margin-bottom: 0;
752
843
  }
753
-
754
-
844
+
845
+
755
846
  &__title {
756
847
  height: unit(56, rpx);
757
848
  display: flex;
758
849
  justify-content: flex-start;
759
850
  align-items: center;
760
-
851
+
761
852
  & > view {
762
853
  padding: 0 unit(80, rpx);
763
854
  font-size: unit(24, rpx);
@@ -766,23 +857,23 @@ export default {
766
857
  color: #fff;
767
858
  border-radius: 0 0 unit(16, rpx) 0;
768
859
  }
769
-
860
+
770
861
  }
771
-
862
+
772
863
  &__content {
773
864
  padding: unit(10, rpx) unit(40, rpx) 0;
774
865
  height: unit(86, rpx);
775
866
  display: flex;
776
867
  justify-content: space-between;
777
868
  align-items: center;
778
-
869
+
779
870
  & > view:first-child {
780
871
  font-size: unit(36, rpx);
781
872
  line-height: unit(86, rpx);
782
873
  color: #fff;
783
874
  font-weight: 700;
784
875
  }
785
-
876
+
786
877
  & > view:nth-child(2) {
787
878
  font-size: unit(24, rpx);
788
879
  display: flex;
@@ -793,32 +884,32 @@ export default {
793
884
  color: #fff;
794
885
  }
795
886
  }
796
-
887
+
797
888
  &__date {
798
889
  padding: 0 unit(40, rpx);
799
890
  font-size: unit(28, rpx);
800
891
  line-height: unit(32, rpx);
801
892
  color: #fff;
802
893
  }
803
-
894
+
804
895
  &__yue {
805
896
  padding: unit(10, rpx) unit(40, rpx) 0;
806
897
  font-size: unit(28, rpx);
807
898
  line-height: unit(32, rpx);
808
899
  color: #fff;
809
-
900
+
810
901
  & > text:nth-child(2) {
811
902
  font-weight: 700;
812
903
  }
813
904
  }
814
-
905
+
815
906
  &__other {
816
907
  display: flex;
817
908
  justify-content: flex-start;
818
909
  align-items: center;
819
910
  padding: unit(20, rpx) unit(40, rpx) 0;
820
911
  margin-top: unit(0, rpx);
821
-
912
+
822
913
  & > view {
823
914
  border-radius:unit(8, rpx);
824
915
  background: rgba(255, 255, 255, 0.2);
@@ -832,17 +923,17 @@ export default {
832
923
  padding: 0 unit(20, rpx);
833
924
  color: #fff;
834
925
  }
835
-
836
-
926
+
927
+
837
928
  }
838
-
929
+
839
930
  &__nodata {
840
931
  padding: unit(20, rpx) unit(40, rpx) 0;
841
932
  margin-top: unit(0, rpx);
842
933
  color: #fff;
843
934
  font-size: unit(28, rpx);
844
935
  }
845
-
936
+
846
937
  &__entry {
847
938
  padding: unit(20, rpx) unit(40, rpx) 0;
848
939
  & > view {
@@ -855,26 +946,26 @@ export default {
855
946
  font-weight: 500;
856
947
  }
857
948
  }
858
-
949
+
859
950
  &__entrys {
860
951
  margin: unit(20, rpx) unit(20, rpx) 0;
861
952
  padding: unit(30, rpx);
862
953
  border-radius: unit(16, rpx);
863
954
  background: rgba(255, 255, 255, 1);
864
955
  box-shadow: 0 unit(4, rpx) unit(8, rpx) rgba(156, 62, 0, 0.11);
865
-
956
+
866
957
  &-title {
867
958
  display: flex;
868
959
  justify-content: space-between;
869
960
  align-items: center;
870
-
871
-
961
+
962
+
872
963
  & > view:first-child {
873
964
  font-size: unit(28, rpx);
874
965
  font-weight: 500;
875
966
  flex: 1;
876
967
  }
877
-
968
+
878
969
  & > view:nth-child(2) {
879
970
  display: flex;
880
971
  justify-content: flex-start;
@@ -884,11 +975,11 @@ export default {
884
975
  color: #999;
885
976
  }
886
977
  }
887
-
978
+
888
979
  &-scroll {
889
-
980
+
890
981
  }
891
-
982
+
892
983
  &-item {
893
984
  display: flex;
894
985
  justify-content: flex-start;
@@ -896,7 +987,7 @@ export default {
896
987
  flex-flow: nowrap;
897
988
  margin-left: unit(-14, rpx);
898
989
  padding-top: unit(20, rpx);
899
-
990
+
900
991
  & > view {
901
992
  width: unit(120, rpx);
902
993
  margin-right: unit(10, rpx);
@@ -905,25 +996,25 @@ export default {
905
996
  justify-content: center;
906
997
  flex-direction: column;
907
998
  align-items: center;
908
-
999
+
909
1000
  & > view:first-child {
910
1001
  width: unit(76, rpx);
911
1002
  height: unit(76, rpx);
912
1003
  overflow: hidden;
913
-
1004
+
914
1005
  & > image {
915
1006
  height: 100%;
916
1007
  width: 100%;
917
1008
  }
918
1009
  }
919
-
1010
+
920
1011
  & > view:nth-child(2) {
921
1012
  margin-top: unit(10, rpx);
922
1013
  font-size: unit(24, rpx);
923
1014
  line-height: unit(36, rpx);
924
1015
  margin-bottom: unit(10, rpx);
925
1016
  }
926
-
1017
+
927
1018
  & > view:nth-child(3) {
928
1019
  display: flex;
929
1020
  justify-content: flex-start;
@@ -932,18 +1023,18 @@ export default {
932
1023
  font-size: unit(20, rpx);
933
1024
  color: #999;
934
1025
  }
935
-
1026
+
936
1027
  &:last-child {
937
1028
  margin-right: 0;
938
1029
  }
939
-
1030
+
940
1031
  }
941
-
942
-
1032
+
1033
+
943
1034
  }
944
1035
  }
945
-
946
-
1036
+
1037
+
947
1038
  &-warp {
948
1039
  width: unit(700, rpx);
949
1040
  min-height: unit(310, rpx);
@@ -953,4 +1044,17 @@ export default {
953
1044
  padding-bottom: unit(20, rpx);
954
1045
  }
955
1046
  }
1047
+
1048
+ .computed-height {
1049
+ position: fixed;
1050
+ top:-999999px;
1051
+ width: 100%;
1052
+ z-index: 99999;
1053
+ }
1054
+
1055
+ .card-content-empty {
1056
+ background-size: 100%;
1057
+ background-repeat: no-repeat;
1058
+ background-position: top center;
1059
+ }
956
1060
  </style>