jufubao-base 1.0.395 → 1.0.397

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jufubao-base",
3
- "version": "1.0.395",
3
+ "version": "1.0.397",
4
4
  "private": false,
5
5
  "description": "聚福宝业务组件基础插件包",
6
6
  "main": "index.js",
@@ -55,4 +55,13 @@ module.exports = [
55
55
  },
56
56
  disabled: true,
57
57
  },
58
+ {
59
+ mapFnName: 'getListEntryCardBind',
60
+ isRule: false,
61
+ title: '获得绑定卡',
62
+ prefix: 'list',
63
+ path: '/card/v1/card-bind/list-bind-card',
64
+ params: {},
65
+ disabled: true,
66
+ },
58
67
  ];
@@ -37,6 +37,17 @@ export default {
37
37
  {label: "隐藏", value: "N"},
38
38
  ]
39
39
  },
40
+ {
41
+ label: "详情样式",
42
+ ele: "xd-radio",
43
+ valueKey: "styleType",
44
+ groupKey: "content",
45
+ value: '1',
46
+ list: [
47
+ {label: "样式一", value: '1'},
48
+ {label: "样式二", value: '2'},
49
+ ]
50
+ },
40
51
  {
41
52
  label: '票券解绑成功回跳地址:',
42
53
  ele: 'xd-select-pages-path',
@@ -85,5 +96,17 @@ export default {
85
96
  },
86
97
  inline: false,
87
98
  },
99
+ {
100
+ label: '绑定票券地址:',
101
+ ele: 'xd-select-pages-path',
102
+ valueKey: 'bindCardUrl',
103
+ groupKey:'advanced',
104
+ placeholder: '请选择绑定票券地址',
105
+ value: null,
106
+ setting: {
107
+ router: XdBus.getParentApi('getPagesTree'),
108
+ },
109
+ inline: false,
110
+ },
88
111
  ],
89
112
  };
@@ -45,7 +45,7 @@
45
45
  ></xd-font-icon>
46
46
  </view>
47
47
  </view>
48
- <view class="card_bottom"></view>
48
+ <view class="card_bottom" :style="[cardBottomStyle]"></view>
49
49
  <!-- <view class="refresh_wrap" @click="handleRefresh">
50
50
  <xd-font-icon
51
51
  icon="iconshuaxin"
@@ -54,8 +54,22 @@
54
54
  ></xd-font-icon> 刷新二维码</view> -->
55
55
  </view>
56
56
  <view class="card_info">
57
- <view class="card_type">{{ info['card_type_name'] }}</view>
58
- <view class="card_sec">券号:{{ info.card_number }}</view>
57
+ <template v-if="styleType === '1'">
58
+ <view class="card_type">{{ info['card_type_name'] }}</view>
59
+ <view class="card_sec">券号:{{ info.card_number }}</view>
60
+ </template>
61
+ <view v-else class="card_item" @click="toShowTicketDialog">
62
+ <view class="item_icon">
63
+ <xd-font-icon icon="iconkaquan" size="42" color="#FFCD5F"></xd-font-icon>
64
+ </view>
65
+ <view class="item_cont">
66
+ <view class="item_name">{{ info['card_type_name'] }}</view>
67
+ <view>{{ info.card_number }}</view>
68
+ </view>
69
+ <view class="item_down">
70
+ <xd-font-icon icon="iconxia_down" size="28"></xd-font-icon>
71
+ </view>
72
+ </view>
59
73
  <view class="card_sec">有效期:{{ info.end_time }}</view>
60
74
  <view class="card_sec">
61
75
  <text>{{isShowBuss==='Y'?info.main_business_code_name:''}}剩余:{{ info.card_point }}{{ info.unit }}</text>
@@ -115,6 +129,66 @@
115
129
  </view>
116
130
  </view>
117
131
  </view>
132
+ <xd-down-drawer :show.sync="showTicketDialog" height="50vh">
133
+ <view class="drawer_title">使用票券</view>
134
+ <view class="drawer_content">
135
+ <view class="tab_header">
136
+ <view class="tab_menu">
137
+ <view class="tab_item" :class="{active: show_type === 'normal'}" @click="switchCardType('normal')">我的票券</view>
138
+ <view class="tab_item" :class="{active: show_type === 'coupon'}" @click="switchCardType('coupon')">优惠券</view>
139
+ </view>
140
+ <view>
141
+ <xd-button width="210rpx" type="primary" size="small" @click="handleBindNewTicket">绑定票券</xd-button>
142
+ </view>
143
+ </view>
144
+ <view class="ticket_list">
145
+ <view
146
+ class="ticket_item"
147
+ v-for="ticket in ticketList"
148
+ :key="ticket.card_number"
149
+ @click="handleTicketSelect(ticket)"
150
+ >
151
+ <view class="_header">
152
+ <view class="flex align-center">
153
+ <xd-font-icon icon="iconkaquan" color="#ffc65d" size="32" style="margin-right: 8rpx;"></xd-font-icon>
154
+ <text>{{ticket.card_type_name}}</text>
155
+ </view>
156
+ <xd-radio
157
+ size="mini"
158
+ :isClickEvent="false"
159
+ :value="selectedTicket && selectedTicket.card_number === ticket.card_number"
160
+ :disabled="ticket.is_valid === 'N' || ticket.card_point == 0"
161
+ ></xd-radio>
162
+ </view>
163
+ <view class="_cont">
164
+ <view style="margin-right: 30rpx;">ID:{{ticket.show_card_number || ticket.card_number}}</view>
165
+ <view>有效期至:{{formatTime(ticket.end_time)}}</view>
166
+ </view>
167
+ <view class="_footer">
168
+ <view class="_item">
169
+ <text>剩余:</text>
170
+ <xd-unit
171
+ :price="ticket.card_point"
172
+ :isOld="false"
173
+ :font-size="28"
174
+ :icon-size="0.3"
175
+ :unit="ticket.unit || ''"
176
+ ></xd-unit>
177
+ </view>
178
+ </view>
179
+ <view v-if="ticket.is_show_other_card_point === 'Y'" class="orther_pay">
180
+ 购买其他物品可抵:{{ticket.other_card_point}} {{ticket.unit}}
181
+ </view>
182
+ </view>
183
+ <view class="ticket_empty" v-if="!ticketList || ticketList.length === 0">
184
+ <xd-no-data :scaleSize="2.5" height="100%"></xd-no-data>
185
+ </view>
186
+ </view>
187
+ </view>
188
+ <view class="drawer_footer">
189
+ <xd-button width="300rpx" type="primary" @click="handleTicket">确定</xd-button>
190
+ </view>
191
+ </xd-down-drawer>
118
192
  <xd-down-drawer
119
193
  :show.sync="showDialog"
120
194
  height="50vh"
@@ -177,6 +251,8 @@ import XdEditPwd from "./XdEditPwd";
177
251
  import XdUnit from "@/components/XdUnit/XdUnit";
178
252
  import XdButton from '@/components/XdButton/XdButton'
179
253
  import XdDownDrawer from "@/components/XdDownDrawer/XdDownDrawer"
254
+ import XdRadio from "@/components/XdRadio/XdRadio"
255
+ import XdNoData from "@/components/XdNoData/XdNoData";
180
256
  import {parsePath} from "@/utils/linkUrl";
181
257
  export default {
182
258
  name: "JfbBaseCardDetailEntry",
@@ -187,6 +263,8 @@ export default {
187
263
  XdUnit,
188
264
  XdButton,
189
265
  XdDownDrawer,
266
+ XdRadio,
267
+ XdNoData
190
268
  },
191
269
  mixins: [
192
270
  componentsMixins,extsMixins,JfbBaseCardDetailEntryMixin,colorCardMixins,
@@ -217,6 +295,7 @@ export default {
217
295
  qrcode: "",
218
296
  backUrl: "",
219
297
  shift_url: "",
298
+ showTicketDialog: false,
220
299
 
221
300
  //品牌logo
222
301
  //#ifdef H5
@@ -230,11 +309,18 @@ export default {
230
309
  headerBg: {},
231
310
  give_url: "",
232
311
  collect_phone_url: "",//收集手机号地址
312
+ bindCardUrl: "",
233
313
  showDialog:false,
234
314
  sign_url:'',
235
315
  share_code:'',
236
316
  sign_url_qrcode:'',
237
317
  toCollectPhoneUrl:'',
318
+ styleType: '1',
319
+ show_type: 'normal', //normal:已绑定卡券 coupon: 优惠券
320
+ ticketList: [], //票券列表
321
+ selectedTicket: null, //当前选中的票券对象
322
+ renderChecked: 'renderChecked', //刷新key
323
+ currentTab: 'my', //当前tab: my/my_coupon
238
324
  };
239
325
  },
240
326
  watch: {
@@ -249,6 +335,13 @@ export default {
249
335
  prod_bottom() {
250
336
  return this.fixedStyle({height: 0, zIndex: 111});
251
337
  },
338
+ cardBottomStyle(){
339
+ let style = {};
340
+ if(this.styleType === '2'){
341
+ style.borderRadius = '16rpx'
342
+ }
343
+ return style;
344
+ }
252
345
  },
253
346
  created() {
254
347
  // ifDef小程序拼接问题
@@ -273,7 +366,6 @@ export default {
273
366
  console.warn(options["x-params"]);
274
367
  }
275
368
  }
276
-
277
369
  this.card_number = options.card_number;
278
370
  this.dataInit();
279
371
  },
@@ -296,9 +388,15 @@ export default {
296
388
  this.shift_url = getContainerPropsValue(container, "content.shift_url", { value: "" }).value;
297
389
  this.give_url = getContainerPropsValue(container, "content.give_url", { value: "" }).value;
298
390
  this.collect_phone_url = getContainerPropsValue(container, "content.collect_phone_url", { value: "" }).value;
391
+ this.bindCardUrl = getContainerPropsValue(container, "content.bindCardUrl", { value: "" }).value;
299
392
  console.log(this.collect_phone_url,'collect_phone_url')
300
393
  //'wechat_mini_program|default'
301
394
  this.entryGroupId = getContainerPropsValue(container,"content.entryGroupId","default");
395
+ this.styleType = getContainerPropsValue(container,"content.styleType","1");
396
+ },
397
+ toShowTicketDialog(){
398
+ this.showTicketDialog = true;
399
+ this.fetchTicketList();
302
400
  },
303
401
  /**
304
402
  * @description 获取卡详情
@@ -608,6 +706,94 @@ export default {
608
706
  url: `${this.shift_url}?card_number=${this.info["card_number"]}`,
609
707
  });
610
708
  },
709
+ /**
710
+ * @description 获取票券列表(mock数据)
711
+ */
712
+ fetchTicketList() {
713
+
714
+ let params = {is_all: 'Y', is_show_entry_settings: 'N', show_type: this.show_type};
715
+
716
+ jfbRootExec('getListEntryCardBind', {
717
+ vm: this,
718
+ data: params,
719
+ }).then(res => {
720
+ this.ticketList = res.list.map((item) => {
721
+ return {
722
+ ...item,
723
+ other_card_point: this.$xdUniHelper.divisionFloatNumber(
724
+ item.other_card_point,
725
+ 100
726
+ ),
727
+ };
728
+ });
729
+ this.selectedTicket = null;
730
+ // 重新打开时自动选中当前正在使用的票券
731
+ const curTicket = this.ticketList.find(item => item.card_number === this.card_number);
732
+ if (curTicket) {
733
+ this.selectedTicket = curTicket;
734
+ }
735
+ });
736
+ },
737
+ /**
738
+ * @description 选择/取消票券(单选)- 点相同取消,点其他切换
739
+ * @param ticket {object} 票券
740
+ */
741
+ handleTicketSelect(ticket) {
742
+ if (ticket.is_valid === 'N' || ticket.card_point == 0) return;
743
+ this.selectedTicket = this.selectedTicket && this.selectedTicket.card_number === ticket.card_number ? null : ticket;
744
+ this.renderChecked = Date.now();
745
+ },
746
+ switchCardType(type){
747
+ this.show_type = type;
748
+ this.fetchTicketList();
749
+ },
750
+ /**
751
+ * @description 使用新票券(绑定)
752
+ */
753
+ handleBindNewTicket() {
754
+ // TODO: 打开绑定新票券弹窗或跳转绑定页
755
+ // this.$xdAlert({ content: '请通过绑定功能添加票券' });
756
+ let inCallback = encodeURIComponent(this.toCollectPhoneUrl)
757
+ this.$xdUniHelper.navigateTo({
758
+ url: `${this.bindCardUrl}`,
759
+ });
760
+ },
761
+ /**
762
+ * @description 确定-提交所选票券
763
+ */
764
+ handleTicket() {
765
+ if (!this.selectedTicket) {
766
+ this.$xdAlert({ content: '请先选择票券' });
767
+ return;
768
+ }
769
+ // 切换卡券前清除旧定时器,避免定时器叠加
770
+ this.timeStr = '';
771
+ if (this.timeer) {
772
+ clearInterval(this.timeer);
773
+ this.timeer = null;
774
+ }
775
+ if (this.refrushTimeer) {
776
+ clearTimeout(this.refrushTimeer);
777
+ this.refrushTimeer = null;
778
+ }
779
+ this.card_number = this.selectedTicket.card_number;
780
+ this.dataInit();
781
+ this.showTicketDialog = false;
782
+ },
783
+ /**
784
+ * @description 格式化时间
785
+ * @param time {string|number}
786
+ */
787
+ formatTime(time) {
788
+ if (!time) return '';
789
+ let date = null;
790
+ if (time == +time) {
791
+ if ((time + '').length <= 10) date = new Date(+time * 1000);
792
+ else date = new Date(+time);
793
+ return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
794
+ }
795
+ return time;
796
+ },
611
797
  onJfbBack(options) {
612
798
  if (this.timeer) {
613
799
  clearTimeout(this.timeer);
@@ -684,14 +870,33 @@ export default {
684
870
  .card_info{
685
871
  color: #FFFFFF;
686
872
  font-size: 28rpx;
687
- padding-left: 40rpx;
873
+ margin-top: 60rpx;
874
+ .card_item{
875
+ background-color: #FFFFFF;
876
+ border-radius: 16rpx;
877
+ color: #666666;
878
+ display: flex;
879
+ align-items: center;
880
+ padding: 16rpx 40rpx;
881
+ font-size: 24rpx;
882
+ .item_cont{
883
+ flex: 1;
884
+ padding-left: 20rpx;
885
+ }
886
+ .item_name{
887
+ color: #333333;
888
+ font-size: 28rpx;
889
+ margin-bottom: 10rpx;
890
+ }
891
+ }
688
892
  .card_type{
689
893
  font-size: 40rpx;
690
894
  font-weight: 600;
691
- margin-top: 60rpx;
895
+ padding-left: 40rpx;
692
896
  }
693
897
  .card_sec{
694
898
  margin: 10rpx 0;
899
+ padding-left: 40rpx;
695
900
  &:last-child{
696
901
  margin-bottom: 0rpx;
697
902
  }
@@ -1121,6 +1326,135 @@ export default {
1121
1326
 
1122
1327
  }
1123
1328
  }
1329
+ .drawer_title{
1330
+ line-height: 100rpx;
1331
+ text-align: center;
1332
+ font-size: 32rpx;
1333
+ }
1334
+ .drawer_content{
1335
+ padding: 20rpx;
1336
+ .tab_header{
1337
+ display: flex;
1338
+ }
1339
+ .tab_menu{
1340
+ flex: 1;
1341
+ display: flex;
1342
+ .tab_item{
1343
+ color: #333;
1344
+ font-size: 32rpx;
1345
+ height: 72rpx;
1346
+ line-height: 72rpx;
1347
+ margin: 0 20rpx;
1348
+ &.active{
1349
+ color: var(--g-theme-mainColor);
1350
+ border-bottom: 4rpx solid var(--g-theme-mainColor);
1351
+ }
1352
+ }
1353
+ }
1354
+ }
1355
+ .drawer_footer{
1356
+ padding: 24rpx;
1357
+ background: #fff;
1358
+ border-top: 1px solid #EEEEEE;
1359
+ }
1360
+ .ticket_list{
1361
+ margin-top: 20rpx;
1362
+ height: 800rpx;
1363
+ overflow: auto;
1364
+ .flex{
1365
+ display: flex;
1366
+ }
1367
+ .align_center{
1368
+ display: flex;
1369
+ align-items: center;
1370
+ }
1371
+ .ticket_item{
1372
+ width: 100%;
1373
+ border-radius: 10rpx;
1374
+ background: rgba(255, 255, 255, 1);
1375
+ box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.1);
1376
+ margin: 20rpx auto;
1377
+ padding: 30rpx 0 20rpx;
1378
+
1379
+ ._header{
1380
+ display: flex;
1381
+ justify-content: space-between;
1382
+ align-items: center;
1383
+ padding: 0rpx 30rpx;
1384
+ font-size: 28rpx;
1385
+ color: #333333;
1386
+ font-weight: 500;
1387
+ .login_card{
1388
+ padding: 8rpx 20rpx;
1389
+ border-radius: 8px;
1390
+ font-size: 28rpx;
1391
+ }
1392
+ }
1393
+ ._cont{
1394
+ display: flex;
1395
+ font-size: 28rpx;
1396
+ padding: 24rpx 30rpx;
1397
+ border-bottom: 1px solid rgba(242, 242, 242, 1);
1398
+ color: #666666;
1399
+ font-weight: 400;
1400
+ }
1401
+ ._footer{
1402
+ display: flex;
1403
+ justify-content: space-between;
1404
+ padding: 24rpx 30rpx 12rpx;
1405
+ font-size: 28rpx;
1406
+ color: #333333;
1407
+ ._item{
1408
+ display: flex;
1409
+ align-items: center;
1410
+ }
1411
+ }
1412
+ .orther_pay{
1413
+ display: inline-block;
1414
+ background: #F5F5F5;
1415
+ font-size: 24rpx;
1416
+ font-weight: 400;
1417
+ border-radius: 8rpx;
1418
+ color: #999999;
1419
+ padding: 8rpx 20rpx;
1420
+ margin: 16rpx 0 0 30rpx;
1421
+ }
1422
+ }
1423
+ .ticket_add_new{
1424
+ width: 100%;
1425
+ height: 88rpx;
1426
+ border-radius: 10rpx;
1427
+ background: rgba(255, 255, 255, 1);
1428
+ box-shadow: 0px 0px 6px 0px rgba(0, 0, 0, 0.1);
1429
+ margin: 20rpx auto;
1430
+ display: flex;
1431
+ align-items: center;
1432
+ justify-content: center;
1433
+ font-size: 28rpx;
1434
+ color: #CCCCCC;
1435
+ .plus_icon{
1436
+ background-color: #CCCCCC;
1437
+ color: #FFFFFF;
1438
+ border-radius: 8rpx;
1439
+ display: flex;
1440
+ align-items: center;
1441
+ justify-content: center;
1442
+ font-size: 24rpx;
1443
+ width: 40rpx;
1444
+ height: 40rpx;
1445
+ margin-right: 24rpx;
1446
+ }
1447
+ }
1448
+ .ticket_empty{
1449
+ display: flex;
1450
+ flex-direction: column;
1451
+ align-items: center;
1452
+ justify-content: center;
1453
+ padding: 80rpx 0;
1454
+ color: #CCCCCC;
1455
+ font-size: 28rpx;
1456
+ }
1457
+ }
1124
1458
  .method_item{
1125
1459
  padding: unit(32, rpx) 0;
1126
1460
  margin: 0 unit(32, rpx);
@@ -58,7 +58,7 @@ export default {
58
58
  ]
59
59
  },
60
60
  {
61
- label: "配置套餐描述是否默认展开:",
61
+ label: "配置套餐描述是否默认展开",
62
62
  ele: "xd-radio",
63
63
  valueKey: "isExpandDesc",
64
64
  value: "Y",
@@ -79,6 +79,17 @@ export default {
79
79
  {label: "隐藏", value: "N"},
80
80
  ]
81
81
  },
82
+ {
83
+ label: "绑定后跳转路径",
84
+ ele: "xd-radio",
85
+ valueKey: "jumpType",
86
+ groupKey: "content",
87
+ value: "list",
88
+ list: [
89
+ { label: "卡列表", value: "list" },
90
+ { label: "卡详情", value: "info" },
91
+ ]
92
+ },
82
93
  {
83
94
  label: '票券绑定成功回跳票券列表地址:',
84
95
  ele: 'xd-select-pages-path',
@@ -262,6 +262,8 @@ export default {
262
262
  multiple_scene: '', // 多场景场景
263
263
  isExpandDesc: "Y", // 配置套餐描述是否默认展开
264
264
  isItemExpanded: null, // 当前展开的项目ID
265
+
266
+ jumpType: "list", // 绑定后跳转路径
265
267
  };
266
268
  },
267
269
  watch: {
@@ -366,8 +368,9 @@ export default {
366
368
  if(this.qrcode&&this.info.card_number){
367
369
  card_number = this.info.card_number;
368
370
  }
371
+ //res.jump_page==='detail'优先级最高
369
372
  let path = this.getUrlCallback(this.my_card_url || this.backUrl);
370
- if(res.jump_page==='detail'){
373
+ if(this.jumpType === 'info' || res.jump_page==='detail'){
371
374
  path = this.getUrlCallback(this.back_detail_url)+`?card_number=${card_number}`;
372
375
  }
373
376
  if(this.hasCon){
@@ -422,6 +425,7 @@ export default {
422
425
  this.isExpandDesc = getContainerPropsValue(container, 'content.isExpandDesc', "Y");
423
426
  //'wechat_mini_program|default'
424
427
  this.entryGroupId = getContainerPropsValue(container,"content.entryGroupId","default");
428
+ this.jumpType = getContainerPropsValue(container, 'content.jumpType', "list");
425
429
  },
426
430
  onJfbLoad(options) {
427
431
  this.qrcode = options.qrcode || options.pa;
@@ -276,10 +276,12 @@
276
276
  if (isShowTitle === 'Y') router['name'] = item.name ? item.name.slice(0, 5) : '';
277
277
  if (iconType === 'icon') {
278
278
  router['icon'] = item.icon;
279
+ if(item.size) router['size'] = item.size;
279
280
  router['image'] = '';
280
281
  router['actImage'] = '';
281
282
  }
282
283
  if (iconType === 'image') {
284
+ if(item.size) router['size'] = item.size;
283
285
  router['icon'] = '';
284
286
  router['image'] = image;
285
287
  router['actImage'] = actImage;