jufubao-base 1.0.169-beta2 → 1.0.169-beta20

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 (42) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseHeader/JfbBaseHeader.vue +2 -2
  3. package/src/components/JfbBaseLogin/Attr.js +54 -16
  4. package/src/components/JfbBaseLogin/JfbBaseLogin.vue +3 -1
  5. package/src/components/JfbBaseMapSearch/MapSearchMp.vue +1 -1
  6. package/src/components/JfbBaseNotice/JfbBaseNotice.vue +2 -2
  7. package/src/components/JfbBaseOrderDetail/Api.js +12 -7
  8. package/src/components/JfbBaseOrderDetail/Attr.js +28 -14
  9. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +68 -18
  10. package/src/components/JfbBaseOrderDetail/Mock.js +3 -1
  11. package/src/components/JfbBaseTfkCardBind/Api.js +49 -30
  12. package/src/components/JfbBaseTfkCardBind/Attr.js +139 -15
  13. package/src/components/JfbBaseTfkCardBind/JfbBaseTfkCardBind.vue +217 -19
  14. package/src/components/JfbBaseTfkCardBind/Mock.js +19 -9
  15. package/src/components/JfbBaseTfkCardDetail/Api.js +11 -0
  16. package/src/components/JfbBaseTfkCardDetail/Attr.js +158 -7
  17. package/src/components/JfbBaseTfkCardDetail/JfbBaseTfkCardDetail.vue +159 -17
  18. package/src/components/JfbBaseTfkCardLogin/Attr.js +490 -4
  19. package/src/components/JfbBaseTfkCardLogin/JfbBaseTfkCardLogin.vue +393 -106
  20. package/src/components/JfbBaseTfkCardLogin/Mock.js +6 -536
  21. package/src/components/JfbBaseTfkCardLogin/XdCouponItem.vue +75 -19
  22. package/src/components/JfbBaseTfkCardLogin/XdNotice.vue +550 -0
  23. package/src/components/JfbBaseTfkSearch/AllList.vue +350 -0
  24. package/src/components/JfbBaseTfkSearch/Api.js +11 -42
  25. package/src/components/JfbBaseTfkSearch/Attr.js +344 -32
  26. package/src/components/JfbBaseTfkSearch/ContentCinema.vue +157 -0
  27. package/src/components/JfbBaseTfkSearch/ContentFilm.vue +218 -0
  28. package/src/components/JfbBaseTfkSearch/ContentProduct.vue +317 -0
  29. package/src/components/JfbBaseTfkSearch/ContentShop.vue +186 -0
  30. package/src/components/JfbBaseTfkSearch/CusAttr.js +213 -0
  31. package/src/components/JfbBaseTfkSearch/CustomList.vue +453 -0
  32. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +286 -35
  33. package/src/components/JfbBaseTfkSearch/Mock.js +242 -11
  34. package/src/components/JfbBaseTfkSearch/SkeletonCinema.vue +45 -0
  35. package/src/components/JfbBaseTfkSearch/SkeletonFilm.vue +109 -0
  36. package/src/components/JfbBaseTfkSearch/SkeletonProduct.vue +246 -0
  37. package/src/components/JfbBaseTfkSearch/SkeletonShop.vue +81 -0
  38. package/src/components/JfbBaseTfkSearch/handleKeyword.js +24 -0
  39. package/src/components/JfbBaseTfkSearch/listMixins.js +187 -0
  40. package/src/mixins/colorCardMixins.js +71 -9
  41. package/src/mixins/componentsMixins.js +376 -23
  42. package/src/mixins/posterMixins.js +122 -0
@@ -0,0 +1,550 @@
1
+ <template>
2
+ <view class="jfb-notice__body">
3
+ <view class="jfb-notice__body-line"></view>
4
+ <view>
5
+ <template v-if="style === '3' && isPreview">
6
+ <!-- <view class="jfb-notice__body-pop" :style="{backgroundColor:backgroundColor, color:warningColor}">弹窗模式方便编辑(占位),在线上此模块不显</view> -->
7
+ </template>
8
+ <template v-if="style === '2'">
9
+ <template v-if="contentList.length === 0 && isPreview">
10
+ <view class="jfb-notice__body-pop" :style="{backgroundColor:backgroundColor, color:warningColor}">接口无数返回,请检查是否配置成功!</view>
11
+ </template>
12
+ <view v-else class="jfb-notice__body-scroll">
13
+ <view
14
+ class="upAndDown"
15
+ :style="{
16
+ backgroundColor:bgc,
17
+ color: textColor,
18
+ margin: marginUi,
19
+ padding: paddingUi,
20
+ borderRadius: contRadius,
21
+ fontSize: fontSize + 'rpx',
22
+ }"
23
+ >
24
+ <view class="icon_wrap">
25
+ <xd-font-icon icon="icontongzhi" :size="fontSize"></xd-font-icon>
26
+ </view>
27
+ <view class="notice_main" :class="[{one:!getScrollType }]">
28
+ <swiper
29
+ v-if="getScrollType"
30
+ class="upAndDown-swiper"
31
+ circular
32
+ vertical
33
+ :interval="2500"
34
+ autoplay
35
+ >
36
+ <swiper-item v-for="(item, i) in contentList" :key="item.content_id">
37
+ <view class="content-list" :style="{
38
+ fontSize: fontSize + 'rpx',
39
+ }">
40
+ {{item.title}}
41
+ </view>
42
+ </swiper-item>
43
+ </swiper>
44
+ <xd-notice-bar
45
+ :class="{isMp:isMp}"
46
+ v-else
47
+ :key="speedKey"
48
+ :color="textColor"
49
+ scrollable
50
+ :fontSize="fontSize"
51
+ :speed="speed"
52
+ background-color="rgba(0,0,0,0)"
53
+ :is-no-bgc="false"
54
+ >
55
+ <xd-content-xss
56
+ v-for="(item, i) in contentList"
57
+ :key="item.content_id"
58
+ :html="item.content"
59
+ :font-sizes="fontSize"
60
+ style="display: flex;align-items: center;"
61
+ ></xd-content-xss>
62
+ </xd-notice-bar>
63
+ </view>
64
+ <view class="more_wrap"
65
+ style="display: flex;"
66
+ :style="{
67
+ fontSize: moreFontSize + 'rpx',
68
+ color: moreTextColor,
69
+ }"
70
+ @click="handleShow(true)"
71
+ >
72
+ 更多
73
+ <xd-font-icon icon="iconxiangyou_xian" :size="20"></xd-font-icon>
74
+ </view>
75
+ </view>
76
+
77
+ </view>
78
+ </template>
79
+ <template v-if="style === '1'">
80
+ <template v-if="!content && isPreview">
81
+ <view
82
+ class="jfb-notice__body-pop"
83
+ :style="{backgroundColor:backgroundColor, color:warningColor}"
84
+ >接口无数返回,请检查是否配置成功!</view>
85
+ </template>
86
+ <template v-else>
87
+ <view :style="{margin:marginUi}">
88
+ <view
89
+ class="jfb-notice__body-title"
90
+ :style="{
91
+ fontSize: titleFontSize + 'rpx',
92
+ background: bgc,
93
+ color:textColor,
94
+ borderRadius: titleRadius,
95
+ padding: titlePadding,
96
+ borderBottomColor: borderTitleColor,
97
+ textAlign: textAlign,
98
+ }"
99
+ v-if="isTitle"
100
+ >{{title}}</view>
101
+ <view
102
+ class="jfb-notice__body-content"
103
+ :style="{
104
+ background: bgc,
105
+ color:textColor,
106
+ borderRadius: contRadius,
107
+ padding: paddingUi,
108
+ lineHeight: '50rpx',
109
+ display: 'flex',
110
+ alignItem: 'center',
111
+ }"
112
+ v-if="content"
113
+ >
114
+ <view class="xd-xss_wrap">
115
+ <xd-content-xss
116
+ :key="contentKey"
117
+ :html="content"
118
+ :font-sizes="fontSize"
119
+ style="display: flex;align-items: center;"
120
+ ></xd-content-xss>
121
+ </view>
122
+ <view style="display: flex;"
123
+ :style="{
124
+ fontSize: moreFontSize + 'rpx',
125
+ color: moreTextColor,
126
+ }"
127
+ @click="handleShow(true)"
128
+ >
129
+ 更多
130
+ <xd-font-icon icon="iconxiangyou_xian" :size="moreFontSize"></xd-font-icon>
131
+ </view>
132
+ </view>
133
+ </view>
134
+ </template>
135
+ </template>
136
+ </view>
137
+ <xd-down-drawer
138
+ v-if="showUp"
139
+ :show.sync="showUp"
140
+ :z-index="9999"
141
+ :is-close="true"
142
+ :is-body-close="false"
143
+ :fullscreen="true"
144
+ height="20vh"
145
+ >
146
+ <view class="upAndDown-swiper-all">
147
+ <view>
148
+ <view
149
+ class="upAndDown-swiper-all-list"
150
+ v-for="(item) in contentList"
151
+ :key="item.content_id"
152
+ >
153
+ <view :style="{color:warningColor}">{{item.title}}</view>
154
+ <view v-html="item.content"></view>
155
+ </view>
156
+ </view>
157
+ <view>
158
+ <xd-button
159
+ size="small"
160
+ type="primary"
161
+ radius="50rpx"
162
+ @click="handleShow(false)"
163
+ >我知道了</xd-button>
164
+ </view>
165
+ </view>
166
+ </xd-down-drawer>
167
+ <xd-dialog :show.sync="showDialog" :title="title" :is-close="true">
168
+ <xd-content-xss
169
+ :key="content"
170
+ :html="content"
171
+ :font-sizes="fontSize"
172
+ style="display: flex;align-items: center;"
173
+ ></xd-content-xss>
174
+ <view slot="btn">
175
+ </view>
176
+ </xd-dialog>
177
+ </view>
178
+ </template>
179
+
180
+ <script>
181
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
182
+ import XdDialog from "@/components/XdDailog/XdDailog"
183
+ import XdContentXss from '@/components/XdContentXss/XdContentXss';
184
+ import XdNoticeBar from "@/components/XdNoticeBar/XdNoticeBar";
185
+ import XdButton from "@/components/XdButton/XdButton.vue";
186
+ import XdDownDrawer from "@/components/XdDownDrawer/XdDownDrawer.vue";
187
+ import storage from "@/common/storage";
188
+
189
+ export default{
190
+ name: "XdNotice",
191
+ components: {
192
+ XdFontIcon,
193
+ XdContentXss,
194
+ XdNoticeBar,
195
+ XdButton,
196
+ XdDownDrawer,
197
+ XdDialog
198
+ },
199
+ props: {
200
+ panelSetting: {
201
+ type: Object,
202
+ },
203
+ apiGetContent: {
204
+ type: Function
205
+ }
206
+ },
207
+ data(){
208
+ return {
209
+ showUp: false,
210
+ showDialog: false,
211
+ isTitle: '', //是否显示标题
212
+ title: '', //标题
213
+ textAlign: 'left', //标题对其方式
214
+ noData: false,
215
+ style: '1', //显示内容(静态/弹窗/滚动)
216
+
217
+ bgc: '', //背景颜色
218
+ textColor: '', //文字颜色
219
+ content : '', //内容
220
+ contentKey: 'contentKey',
221
+ borderTitleColor: '#fff',
222
+ warningColor: "",
223
+ containerId: '',
224
+
225
+ moreTextColor: '',
226
+ moreFontSize: "",
227
+
228
+ margin: {
229
+ top: 0,
230
+ left: 0,
231
+ bottom: 0,
232
+ right: 0
233
+ },
234
+ padding: {
235
+ top: 8,
236
+ left: 10,
237
+ bottom: 8,
238
+ right: 10
239
+ },
240
+ radius: 0, //圆角
241
+ fontSize: 20,
242
+ titleFontSize: 26,
243
+ time: 3, //小时
244
+ isPreview: false,
245
+
246
+ interval: null,
247
+
248
+ //滚动
249
+ speed: 30, //滚动速度
250
+ speedKey: 'speedKey',
251
+ num: 1, //滚动记录数量
252
+ timer: false,
253
+ contentList: [],
254
+ scrollMargin:{},
255
+
256
+ backgroundColor: '',
257
+ is_hide_dailog:'N',
258
+ isMp:false,
259
+ }
260
+ },
261
+ watch: {
262
+ panelSetting: {
263
+ handler(n, o){
264
+ console.log("watch 面板设置", n, o);
265
+ this.setDataBySetting();
266
+ this.onJfbLoad();
267
+ if(this.style == 3 && n.is_hide_dailog === 'N'){
268
+ this.showDialog = true;
269
+ }else{
270
+ this.showDialog = false;
271
+ }
272
+ },
273
+ deep: true
274
+ },
275
+ num(){
276
+ if (this.isPreview) this.onJfbLoad()
277
+ },
278
+ style() {
279
+ if(this.isPreview) this.onJfbLoad()
280
+ },
281
+ speed(){
282
+ if(this.timer) {
283
+ clearTimeout(this.timer);
284
+ this.timer = null
285
+ }
286
+ setTimeout(()=>{
287
+ this.speedKey = Date.now()
288
+ }, 400)
289
+
290
+ },
291
+ is_hide_dailog(value){
292
+ if(value === 'N') {
293
+ storage.remove(this.containerId);
294
+ this.onJfbLoad();
295
+ }
296
+ },
297
+ },
298
+ computed: {
299
+ marginUi() {
300
+ let str = `${this.checkValue(this.margin.top, 20)}rpx`;
301
+ str = `${str} ${this.checkValue(this.margin.right, 20)}rpx`;
302
+ str = `${str} ${this.checkValue(this.margin.bottom, 20)}rpx`;
303
+ str = `${str} ${this.checkValue(this.margin.left, 20)}rpx`;
304
+ return str
305
+ },
306
+ paddingUi() {
307
+ let str = `${this.checkValue(this.padding.top, 20)}rpx`;
308
+ str = `${str} ${this.checkValue(this.padding.right, 20)}rpx`;
309
+ str = `${str} ${this.checkValue(this.padding.bottom, 20)}rpx`;
310
+ str = `${str} ${this.checkValue(this.padding.left, 20)}rpx`;
311
+ return str
312
+ },
313
+
314
+ scrollMarginUi(){
315
+ let str = `${this.checkValue(this.scrollMargin.top, 0)}rpx`;
316
+ str = `${str} ${this.checkValue(this.scrollMargin.right, 0)}rpx`;
317
+ str = `${str} ${this.checkValue(this.scrollMargin.bottom, 0)}rpx`;
318
+ str = `${str} ${this.checkValue(this.scrollMargin.left, 0)}rpx`;
319
+ return str
320
+ },
321
+
322
+
323
+ titlePadding() {
324
+ let str = `${this.checkValue(this.padding.top, 20)}rpx`;
325
+ str = `${str} ${this.checkValue(this.padding.right, 20)}rpx`;
326
+ str = `${str} ${this.checkValue(this.padding.bottom, 20)}rpx`;
327
+ str = `${str} ${this.checkValue(this.padding.left, 20)}rpx`;
328
+ return str
329
+ },
330
+ contRadius(){
331
+ if(this.isTitle) return `0rpx 0rpx ${this.radius}rpx ${this.radius}rpx`;
332
+ else return `${this.radius}rpx`;
333
+ },
334
+ titleRadius() {
335
+ return `${this.radius}rpx ${this.radius}rpx 0rpx 0rpx `
336
+ },
337
+
338
+ getScrollType(){
339
+ return this.num > 1
340
+ },
341
+ },
342
+ created(){
343
+ this.setDataBySetting();
344
+ this.isPreview = this.$configProject['isPreview'];
345
+ this.onJfbLoad();
346
+ //#ifdef MP-WEIXIN
347
+ this.isMp = true;
348
+ //#endif
349
+ },
350
+ methods: {
351
+ onJfbLoad() {
352
+ if(this.timer){
353
+ clearTimeout(this.timer);
354
+ this.timer = null
355
+ }
356
+
357
+ //弹窗模式
358
+ if(this.style === '3') {
359
+ if(this.isPreview) {
360
+ if(this.is_hide_dailog === 'N') this.getContent();
361
+ }
362
+ else {
363
+ if(!storage.get(this.containerId)) this.getContent()
364
+ }
365
+ }
366
+
367
+ //非弹窗模式
368
+ else {
369
+ this.getContent()
370
+ }
371
+ },
372
+ handlePop(){
373
+ console.log('this.time', this.time * 60 + '分钟');
374
+ storage.set(this.containerId, 1, this.time);
375
+ this.showDialog = true;
376
+ },
377
+ getContent(){
378
+ if(this.interval) clearTimeout(this.interval);
379
+
380
+ this.interval = setTimeout(() => {
381
+ this.apiGetContent({page_size: this.num}).then(res => {
382
+ console.log("getContent", res)
383
+ this.contentList = res.list;
384
+
385
+ //弹窗显示
386
+ if (this.style === '3') {
387
+ if (res.list.length > 0) {
388
+ this.content = res.list[0].content;
389
+ this.title = res.list[0].title;
390
+ this.handlePop()
391
+ }
392
+ }
393
+
394
+ else if(this.style === '2') {
395
+ if(res.list.length > 0) {
396
+ this.speedKey = Date.now()
397
+ }
398
+
399
+ }
400
+
401
+ //静态显示
402
+ else {
403
+ if (res.list.length > 0) {
404
+ this.content = res.list[0].content;
405
+ this.contentKey = Date.now();
406
+ this.title = res.list[0].title;
407
+ }
408
+ this.noData = res.list.length > 0;
409
+ }
410
+ })
411
+ }, 50)
412
+ },
413
+ handleShow(type){
414
+ this.showUp = type;
415
+ },
416
+ setDataBySetting(){
417
+ for(let key in this.panelSetting){
418
+ if(this.panelSetting[key] !== undefined){
419
+ this.$set(this, key, this.panelSetting[key])
420
+ }
421
+ }
422
+ },
423
+ checkValue(value, dValue = 0){
424
+ if(value === undefined || value === '' || value === null) return dValue;
425
+ return Number(value || 0);
426
+ },
427
+ }
428
+ }
429
+ </script>
430
+ <style scoped lang="less">
431
+
432
+ .jfb-notice {
433
+ &__body{
434
+ .xd-xss_wrap{
435
+ display:flex;
436
+ flex:1;
437
+ align-items: center;
438
+ width: 500rpx;
439
+ overflow: hidden;
440
+ white-space: nowrap;
441
+ padding-right: 20rpx;
442
+ ::v-deep .xd-content-xss{
443
+ width: 100%;
444
+ & > p{
445
+ overflow: hidden;
446
+ text-overflow: ellipsis;
447
+ }
448
+ }
449
+ }
450
+ .content-list {
451
+ display: flex;
452
+ justify-content: space-between;
453
+ align-items: center;
454
+ }
455
+ &-line {
456
+ height: 1px;
457
+ overflow: hidden;
458
+ width: 100%;
459
+ }
460
+ &-scroll {
461
+ &-content {
462
+ font-size: unit(20, rpx);
463
+ }
464
+
465
+ & .upAndDown {
466
+ display: flex;
467
+ height: unit(70, rpx);
468
+ line-height: unit(70, rpx);
469
+ justify-content: space-between;
470
+
471
+ .more_wrap{
472
+ height: unit(70, rpx);
473
+ flex-shrink: 0;
474
+ }
475
+ .icon_wrap{
476
+ width: unit(70, rpx);
477
+ height: unit(70, rpx);
478
+ flex-shrink: 0;
479
+ }
480
+ .notice_main{
481
+ flex: 1;
482
+ padding: 0 unit(10, rpx);
483
+ height: 100%;
484
+
485
+ &.one {
486
+ display: flex;
487
+ align-items: center;
488
+ }
489
+ }
490
+
491
+ &-swiper {
492
+ height: 100%;
493
+ width: 100%;
494
+ font-size: unit(26, rpx);
495
+
496
+ }
497
+ }
498
+ }
499
+ &-pop {
500
+ min-height: 60rpx;
501
+ text-align: center;
502
+ line-height: 60rpx;
503
+ color: #666;
504
+ font-size: unit(24, rpx);
505
+ padding:unit(20, rpx);
506
+ }
507
+ &-title {
508
+ border-bottom: 1px solid #fff;
509
+ line-height: 1.5rem;
510
+ }
511
+
512
+ &-content {
513
+ padding: unit(8, rpx) unit(10, rpx);
514
+ }
515
+ }
516
+ }
517
+ .upAndDown-swiper-all {
518
+ padding: unit(40, rpx) unit(30, rpx) unit(40, rpx);
519
+
520
+ &-list{
521
+ padding-bottom: unit(40, rpx);
522
+ &:last-child {
523
+ padding-bottom: 0;
524
+ }
525
+
526
+ & >view:first-child {
527
+ font-size: unit(32, rpx);
528
+ font-weight: 700;
529
+ padding-bottom: 0.5rem;
530
+ }
531
+
532
+ &>view:nth-child(2) {
533
+ font-size: unit(26, rpx);
534
+ line-height: unit(36, rpx);
535
+ color: #666;
536
+ }
537
+ }
538
+
539
+ & > view:first-child {
540
+ padding-bottom: unit(30, rpx);
541
+ max-height: 50vh;
542
+ overflow-y: auto;
543
+ margin: unit(40, rpx) unit(10, rpx) unit(20, rpx);
544
+ }
545
+
546
+ }
547
+ .isMp {
548
+ width: 100%;
549
+ }
550
+ </style>