jufubao-base 1.0.157-beta2 → 1.0.157-beta4

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.157-beta2",
3
+ "version": "1.0.157-beta4",
4
4
  "private": false,
5
5
  "description": "聚福宝业务组件基础插件包",
6
6
  "main": "index.js",
@@ -66,7 +66,7 @@
66
66
  this.init(this.container);
67
67
  },
68
68
  methods: {
69
-
69
+
70
70
  /**
71
71
  * @description 监听事件变化
72
72
  * @param container {object} 业务组件对象自己
@@ -80,7 +80,7 @@
80
80
  this.shadow = (e.scrollTop > this.height ? this.height : e.scrollTop)/100;
81
81
  this.opacity = opacity < this.minOpacity ? this.minOpacity : opacity;
82
82
  },
83
-
83
+
84
84
  onJfbBack() {
85
85
  this.$xdUniHelper.navigateBack();
86
86
  }
@@ -102,7 +102,7 @@
102
102
  height: unit(90, rpx);
103
103
  padding: 0 unit(10, rpx);
104
104
  position: relative;
105
-
105
+
106
106
  &-icon {
107
107
  width: 1em;
108
108
  height: 1em;
@@ -112,12 +112,13 @@
112
112
  display: flex;
113
113
  justify-content: center;
114
114
  align-content: center;
115
+ align-items: center;
115
116
  flex-shrink: 0;
116
117
  position: relative;
117
118
  z-index: 2;
118
119
  background: #fff;
119
120
  }
120
-
121
+
121
122
  &-text {
122
123
  font-size: unit(54, rpx);
123
124
  padding-right: 1em;
@@ -125,7 +126,7 @@
125
126
  position: relative;
126
127
  z-index: 2;
127
128
  color: #666;
128
-
129
+
129
130
  & > view {
130
131
  width: 100%;
131
132
  text-align: center;
@@ -133,7 +134,7 @@
133
134
  font-size: unit(32, rpx);
134
135
  }
135
136
  }
136
-
137
+
137
138
  &-bg {
138
139
  background: #fff;
139
140
  position: absolute;
@@ -208,7 +208,6 @@
208
208
  const {cardPath, cardSelf} =cardPathObject
209
209
  if(cardPath) cardPathStr = `&card-login=${encodeURIComponent(cardPath)}&cardSelf=${cardSelf}`
210
210
  }
211
-
212
211
  }
213
212
  //#endif
214
213
  item['redirect_data']['path'] = `${jumpUrl}?x-common=${nsp}&vs=${new Date().getTime()}${cardPathStr}`
@@ -15,7 +15,6 @@
15
15
  <!-- #endif -->
16
16
  <view class="jfb-base-poster__body" v-if="noData">
17
17
  <view class="x-line"></view>
18
-
19
18
  <view class="jfb-base-poster-cont" :style="getBodyStyle">
20
19
  <!--一分屏-->
21
20
  <template v-if="posterType === '1'">
@@ -50,6 +49,7 @@
50
49
  }"
51
50
  >
52
51
  <xd-swiper-dot
52
+ :style="{width: getOneWidth + 'rpx', height: getOneHeight + 'rpx'}"
53
53
  v-if="pageSwiperShow"
54
54
  :current="current"
55
55
  :info="info"
@@ -57,6 +57,24 @@
57
57
  :mode="mode"
58
58
  :dots-styles="dotStyleData"
59
59
  >
60
+ <!--#ifdef MP-WEIXIN-->
61
+ <swiper
62
+ class="swiper xd-swiper-content"
63
+ :style="{width: getOneWidth + 'rpx', height: getOneHeight + 'rpx'}"
64
+ :indicator-dots="false"
65
+ :autoplay="carouselTime>0"
66
+ :interval="carouselTime"
67
+ :duration="500"
68
+ :current="current"
69
+ circular
70
+ @animationfinish="handleAnimationfinish"
71
+ >
72
+ <swiper-item v-for="(item,index) in info" :key="index" @click.stop="handleClick(item,index)">
73
+ <image :style="{width: getOneWidth + 'rpx', height: getOneHeight + 'rpx'}" :src="item['image_url']" mode="aspectFill"></image>
74
+ </swiper-item>
75
+ </swiper>
76
+ <!--#endif-->
77
+ <!--#ifdef H5-->
60
78
  <xd-swiper
61
79
  :indicator-dots="false"
62
80
  :list="info"
@@ -71,6 +89,7 @@
71
89
  <image :src="item['image_url']" mode="aspectFill"></image>
72
90
  </template>
73
91
  </xd-swiper>
92
+ <!--#endif-->
74
93
  </xd-swiper-dot>
75
94
  <view v-if="isPreview" class="carousel-mask"></view>
76
95
  </view>
@@ -78,6 +97,7 @@
78
97
  <!--一分屏-->
79
98
  <!--多分屏-->
80
99
  <more-screen
100
+ style="width: 100%; height: 100%"
81
101
  v-if="posterType !== '1'"
82
102
  :config="getConfig"
83
103
  :content="info"
@@ -158,11 +178,11 @@
158
178
  backgroundSize: '100%',
159
179
  backgroundRepeat: 'no-repeat',
160
180
  }
161
- return {
162
- ...image,
181
+ image = Object.assign({},image,{
163
182
  margin: this.margin,
164
183
  padding: this.outPadding
165
- }
184
+ })
185
+ return this.styleObjectToString(image)
166
186
  },
167
187
  getOneWidth(){
168
188
  let margin = this.checkValue(this.mS.left, 0) + this.checkValue(this.mS.right, 0);
@@ -332,9 +352,9 @@
332
352
  },
333
353
  },
334
354
  created() {
335
- this.init(this.container);
336
355
  this.isPreview = this.$configProject.isPreview;
337
356
  this.pageSwiperShow = this.$root.$isShow;
357
+ this.init(this.container);
338
358
  },
339
359
 
340
360
  destroyed() {
@@ -345,6 +365,63 @@
345
365
  },
346
366
 
347
367
  methods: {
368
+ /**
369
+ * @description 过滤不可以用
370
+ * 当前项目未H5时,过滤所有小程序应用
371
+ * 当前项目未小程序时,过滤所有非当前小程序应用
372
+ * 站外地址直接返回
373
+ * 站内地址未选值直接返回
374
+ * 预览模式全过
375
+ */
376
+ filterItem(list){
377
+ let content = list.filter(item=>{
378
+ //预览模式
379
+ if( this.$configProject.isPreview) return true;
380
+
381
+ //非内部应用
382
+ if(item.redirect_type !== 'INN') return true
383
+
384
+ //没有配置链接
385
+ if(!item.redirect_data) return true;
386
+
387
+ //内部应用
388
+ else {
389
+ let redirect_data;
390
+ try {
391
+ redirect_data = JSON.parse(item.redirect_data);
392
+ if(!item['app_type']) item['app_type']= 'h5';
393
+
394
+ //#ifdef H5
395
+ return item['app_type'] !== 'wxmp';
396
+ //#endif
397
+
398
+ //#ifdef MP-WEIXIN
399
+ let actDir = this.$parent.projectAttr.deploy_dir;
400
+ let dir = this.getPathDir(redirect_data.page);
401
+ if(item['app_type'] === 'wxmp'){
402
+ return actDir === dir;
403
+ }
404
+ else if(item['app_type'] === 'h5') return true;
405
+ else return true
406
+ //#endif
407
+ }
408
+ catch (e) {
409
+ return true
410
+ }
411
+ }
412
+ });
413
+ console.warn(`PostersList:${JSON.stringify(content.map(item=>`${item.app_type}:${item.content_name}:${item.redirect_data}`), null,2)}`)
414
+ return content;
415
+
416
+ },
417
+
418
+ getPathDir(pathDir){
419
+ if(pathDir.indexOf('@site_domain@/') === 0) {
420
+ return pathDir.replace('@site_domain@/','').split('/')[0]
421
+ }
422
+ return ''
423
+ },
424
+
348
425
  getTestData(){
349
426
  let temp = [];
350
427
  for (let i = 0; i< this.useNumber; i++) {
@@ -382,18 +459,28 @@
382
459
  this.current = e.detail.current;
383
460
  }
384
461
  },
462
+
385
463
  handleClick(item) {
464
+ if(!item.redirect_data) {
465
+ console.warn(`未配置链接地址: ${item.redirect_data}`);
466
+ console.error(`未配置链接地址: ${item.redirect_data}`);
467
+ return
468
+ }
469
+
386
470
  //内部链接跳转地址
387
471
  if (item.redirect_type === 'INN') {
388
472
  try {
389
473
  let url = JSON.parse(item.redirect_data);
390
474
  let params = '';
391
- if (item['redirect_params']) params = `?${item['redirect_params']}`;
392
- this.$xdUniHelper.navigateTo({
393
- url: url.page + params
394
- })
475
+ if(url.page) {
476
+ if (item['redirect_params']) params = `?${item['redirect_params']}`;
477
+ this.$xdUniHelper.navigateTo({url: url.page + params})
478
+ }
479
+ else {
480
+ console.error(`应用链接配置错误: ${url.page}`)
481
+ }
395
482
  } catch (e) {
396
- console.error(e)
483
+ console.error(`应用链接配置错误: ${item.redirect_data}`)
397
484
  }
398
485
  }
399
486
 
@@ -403,31 +490,38 @@
403
490
  //#ifdef MP-WEIXIN
404
491
  try {
405
492
  let url = JSON.parse(item.redirect_data);
406
- if (reg.test(url.url) && this.$configProject.extras.webview) {
493
+ if (reg.test(url.url)) {
407
494
  console.warn(`广告跳转外站: ${url.url}`)
408
- this.$xdUniHelper.navigateTo({
409
- url: `${this.$configProject.extras.webview}?seatUrl=${Base64.encodeURI(url.url)}`
410
- });
495
+ this.$xdUniHelper.navigateTo(url);
411
496
  } else {
412
- throw Error('地址错误')
497
+ console.error(`广告跳转外站配置错误: ${url.url}`)
413
498
  }
414
499
  } catch (e) {
415
- console.error(e)
500
+ console.error(`广告跳转外站配置错误: ${item.redirect_data}`)
416
501
  }
417
502
  //#endif
418
503
  //#ifdef H5
419
504
  try {
420
505
  let url = JSON.parse(item.redirect_data);
421
506
  console.warn(`广告跳转外站: ${url.url}`);
422
- this.$xdUniHelper.navigateTo(url)
507
+ this.$xdUniHelper.redirectTo(url, false)
423
508
  } catch (e) {
424
- console.error(e)
509
+ console.error(`广告跳转外站配置错误: ${item.redirect_data}`)
425
510
  }
426
511
  //#endif
427
512
 
428
513
  }
514
+
515
+ //无跳转地址
516
+ if(item.redirect_type === 'EMP') {
517
+ console.warn(`无跳转地址`);
518
+ }
429
519
  },
520
+
521
+
430
522
  handleImage(list){
523
+ list = this.filterItem(list);
524
+
431
525
  return list.map((item,index) => {
432
526
  return {
433
527
  ...item,
@@ -463,6 +557,11 @@
463
557
  this.isCarousel = getContainerPropsValue(container, 'content.isCarousel', 1);
464
558
  this.radius = getContainerPropsValue(container, 'content.radius', 0);
465
559
  this.padding = getContainerPropsValue(container, 'content.padding', 0);
560
+
561
+ //静态图,一分屏并且间距为0设置
562
+ if(this.isCarousel === 1 && this.posterType === '1' && this.padding === 0) {
563
+ this.padding = 20;
564
+ }
466
565
  this.rows = getContainerPropsValue(container, 'content.rows', 1);
467
566
  if(this.posterType === '1' && this.isCarousel === 2) this.isSupport = getContainerPropsValue(container, 'content.isSupport', 'Y');
468
567
  this.mS = getContainerPropsValue(container, 'content.margin', {});
@@ -33,8 +33,45 @@
33
33
  field="content_name"
34
34
  :mode="config.mode"
35
35
  :dots-styles="config.dotStyleData"
36
- :style="{height:(getHeight + 46 * $rpxNum) + 'px'}"
36
+ :style="{height:(getHeight + 46 * $rpxNum) + 'px', width:'100%'}"
37
37
  >
38
+ <!--#ifdef MP-WEIXIN-->
39
+ <swiper
40
+ class="swiper xd-swiper-content"
41
+ :style="{width: '100%', height: getHeight + 'px'}"
42
+ :indicator-dots="false"
43
+ :autoplay="config.carouselTime>0"
44
+ :interval="config.carouselTime"
45
+ :duration="500"
46
+ :current="current"
47
+ circular
48
+ @animationfinish="handleAnimationfinish"
49
+ >
50
+ <swiper-item v-for="(item,index) in list" :key="index">
51
+ <view
52
+ class="sreen__box-list"
53
+ :class="{s3:config.cell === 3,s4:config.cell === 4}"
54
+ :style="{ height: getHeight + 'px' }"
55
+ >
56
+ <view
57
+ v-for="(it, indext) in item"
58
+ :key="it['content_id']"
59
+ @click="handleClick(it)"
60
+ :style="{
61
+ borderRadius: config.radius + 'rpx',
62
+ width: config.width + 'px',
63
+ height: config.height + 'px',
64
+ marginRight: (indext+1) % config.cell === 0 ? 0: config.padding + 'rpx',
65
+ marginTop: indext < config.cell ? 0 : config.padding + 'rpx',
66
+ }"
67
+ >
68
+ <image :style="{ width: width + 'px', height: height + 'px'}" :src="it.image_url" mode="widthFix"></image>
69
+ </view>
70
+ </view>
71
+ </swiper-item>
72
+ </swiper>
73
+ <!--#endif-->
74
+ <!--#ifdef H5-->
38
75
  <xd-swiper
39
76
  :indicator-dots="false"
40
77
  :interval="config.carouselTime"
@@ -45,31 +82,32 @@
45
82
  @onClickItem="handleClick"
46
83
  @animationfinish="handleAnimationfinish"
47
84
  >
48
- <template slot-scope="{ item, index}">
49
- <view
50
- class="sreen__box-list"
85
+ <template slot-scope="{ item, index}">
86
+ <view
87
+ class="sreen__box-list"
51
88
  :class="{s3:config.cell === 3,s4:config.cell === 4}"
52
- :style="{
53
- height: getHeight + 'px'
54
- }"
55
- >
56
- <view
57
- v-for="(it, indext) in item"
58
- :key="it['content_id']"
59
- :style="{
60
- borderRadius: config.radius + 'rpx',
61
- width: config.width + 'px',
62
- height: config.height + 'px',
63
- marginRight: (indext+1) % config.cell === 0 ? 0: config.padding + 'rpx',
64
- marginTop: indext < config.cell ? 0 : config.padding + 'rpx',
65
- }"
66
- @click="handleClick(it)"
67
- >
68
- <image :style="{ width: width + 'px', height: height + 'px'}" :src="it.image_url" mode="widthFix"></image>
69
- </view>
70
- </view>
71
- </template>
89
+ :style="{
90
+ height: getHeight + 'px'
91
+ }"
92
+ >
93
+ <view
94
+ v-for="(it, indext) in item"
95
+ :key="it['content_id']"
96
+ :style="{
97
+ borderRadius: config.radius + 'rpx',
98
+ width: config.width + 'px',
99
+ height: config.height + 'px',
100
+ marginRight: (indext+1) % config.cell === 0 ? 0: config.padding + 'rpx',
101
+ marginTop: indext < config.cell ? 0 : config.padding + 'rpx',
102
+ }"
103
+ @click="handleClick(it)"
104
+ >
105
+ <image :style="{ width: width + 'px', height: height + 'px'}" :src="it.image_url" mode="widthFix"></image>
106
+ </view>
107
+ </view>
108
+ </template>
72
109
  </xd-swiper>
110
+ <!--#endif-->
73
111
  </xd-swiper-dot>
74
112
  </view>
75
113
  <view v-if="isPreview" class="carousel-mask"></view>
@@ -133,6 +171,64 @@
133
171
  handleAnimationfinish(e) {
134
172
  this.current = e.detail.current;
135
173
  },
174
+
175
+ /**
176
+ * @description 过滤不可以用
177
+ * 当前项目未H5时,过滤所有小程序应用
178
+ * 当前项目未小程序时,过滤所有非当前小程序应用
179
+ * 站外地址直接返回
180
+ * 站内地址未选值直接返回
181
+ * 预览模式全过
182
+ */
183
+ filterItem(){
184
+ let content = this.content.filter(item=>{
185
+ //预览模式
186
+ if( this.$configProject.isPreview) return true;
187
+
188
+ //非内部应用
189
+ if(item.redirect_type !== 'INN') return true
190
+
191
+ //没有配置链接
192
+ if(!item.redirect_data) return true;
193
+
194
+ //内部应用
195
+ else {
196
+ let redirect_data;
197
+ try {
198
+ redirect_data = JSON.parse(item.redirect_data);
199
+ if(!item['app_type']) item['app_type']= 'h5';
200
+
201
+ //#ifdef H5
202
+ return item['app_type'] !== 'wxmp';
203
+ //#endif
204
+
205
+ //#ifdef MP-WEIXIN
206
+ let actDir = this.$parent.projectAttr.deploy_dir;
207
+ let dir = this.getPathDir(redirect_data.page);
208
+ if(item['app_type'] === 'wxmp'){
209
+ return actDir === dir;
210
+ }
211
+ else if(item['app_type'] === 'h5') return true;
212
+ else return true
213
+ //#endif
214
+ }
215
+ catch (e) {
216
+ return true
217
+ }
218
+ }
219
+ });
220
+ console.warn(`PostersList:${JSON.stringify(content.map(item=>`${item.app_type}:${item.content_name}:${item.redirect_data}`), null,2)}`)
221
+ return content;
222
+
223
+ },
224
+
225
+ getPathDir(pathDir){
226
+ if(pathDir.indexOf('@site_domain@/') === 0) {
227
+ return pathDir.replace('@site_domain@/','').split('/')[0]
228
+ }
229
+ return ''
230
+ },
231
+
136
232
  init() {
137
233
  if (this.timer) clearTimeout(this.timer);
138
234
  this.timer = setTimeout(() => {
@@ -140,6 +236,9 @@
140
236
  this.height = Number(this.config.height);
141
237
  this.padding = Number(this.config.padding);
142
238
 
239
+ //过滤不可以用
240
+ const content = this.filterItem();
241
+
143
242
  //静态图显示
144
243
  if(this.config.isCarousel === 1) {
145
244
  this.list = this.content
@@ -156,18 +255,28 @@
156
255
  }
157
256
  }, 100)
158
257
  },
258
+
159
259
  handleClick(item) {
260
+ if(!item.redirect_data) {
261
+ console.warn(`未配置链接地址: ${item.redirect_data}`);
262
+ console.error(`未配置链接地址: ${item.redirect_data}`);
263
+ return
264
+ }
265
+
160
266
  //内部链接跳转地址
161
267
  if (item.redirect_type === 'INN') {
162
268
  try {
163
269
  let url = JSON.parse(item.redirect_data);
164
270
  let params = '';
165
- if (item['redirect_params']) params = `?${item['redirect_params']}`;
166
- this.$xdUniHelper.navigateTo({
167
- url: url.page + params
168
- })
271
+ if(url.page) {
272
+ if (item['redirect_params']) params = `?${item['redirect_params']}`;
273
+ this.$xdUniHelper.navigateTo({url: url.page + params})
274
+ }
275
+ else {
276
+ console.error(`应用链接配置错误: ${url.page}`)
277
+ }
169
278
  } catch (e) {
170
- console.error(e)
279
+ console.error(`应用链接配置错误: ${item.redirect_data}`)
171
280
  }
172
281
  }
173
282
 
@@ -177,29 +286,32 @@
177
286
  //#ifdef MP-WEIXIN
178
287
  try {
179
288
  let url = JSON.parse(item.redirect_data);
180
- if (reg.test(url.url) && this.$configProject.extras.webview) {
289
+ if (reg.test(url.url)) {
181
290
  console.warn(`广告跳转外站: ${url.url}`)
182
- this.$xdUniHelper.navigateTo({
183
- url: `${this.$configProject.extras.webview}?seatUrl=${Base64.encodeURI(url.url)}`
184
- });
291
+ this.$xdUniHelper.navigateTo(url);
185
292
  } else {
186
- throw Error('地址错误')
293
+ console.error(`广告跳转外站配置错误: ${url.url}`)
187
294
  }
188
295
  } catch (e) {
189
- console.error(e)
296
+ console.error(`广告跳转外站配置错误: ${item.redirect_data}`)
190
297
  }
191
298
  //#endif
192
299
  //#ifdef H5
193
300
  try {
194
301
  let url = JSON.parse(item.redirect_data);
195
302
  console.warn(`广告跳转外站: ${url.url}`);
196
- this.$xdUniHelper.navigateTo(url)
303
+ this.$xdUniHelper.redirectTo(url, false)
197
304
  } catch (e) {
198
- console.error(e)
305
+ console.error(`广告跳转外站配置错误: ${item.redirect_data}`)
199
306
  }
200
307
  //#endif
201
308
 
202
309
  }
310
+
311
+ //无跳转地址
312
+ if(item.redirect_type === 'EMP') {
313
+ console.warn(`无跳转地址`);
314
+ }
203
315
  },
204
316
  }
205
317
  }
@@ -209,6 +321,7 @@
209
321
  .sreen {
210
322
  width: calc(100% + 4px); /**防止宽度不够问**/
211
323
  position: relative;
324
+ height: 100%;
212
325
 
213
326
  & .carousel-mask {
214
327
  position: absolute;
@@ -226,6 +339,7 @@
226
339
  flex-wrap: wrap;
227
340
  overflow: hidden;
228
341
  width: calc(100% + 20px); /**防止宽度不够问**/
342
+ height: 100%;
229
343
 
230
344
  & > view {
231
345
  display: flex;
@@ -238,6 +352,8 @@
238
352
  }
239
353
 
240
354
  &__box.carousel {
355
+ width: 100%;
356
+ height: 100%;
241
357
  display: flex;
242
358
  justify-content: flex-start;
243
359
  align-items: flex-start;
@@ -247,6 +363,7 @@
247
363
 
248
364
  & .sreen__box-list {
249
365
  width: calc(100% + 20px); /**防止宽度不够问**/
366
+ height: 100%;
250
367
  display: flex;
251
368
  justify-content: flex-start;
252
369
  align-items: flex-start;
@@ -50,7 +50,6 @@ export default {
50
50
  value: params.height || 500,
51
51
  className: 'input40',
52
52
  placeholder: '请广告位内容间距设置',
53
- disabled:xiugai,
54
53
  notice: '广告位选取内容后,将无法修改,单位:像素,默认: <span style="color:red">500</span>像素',
55
54
  inline: false,
56
55
  },
@@ -60,7 +59,6 @@ export default {
60
59
  groupKey:'style',
61
60
  valueKey: 'margin',
62
61
  value: params.margin || null,
63
- disabled: xiugai,
64
62
  setting: { type: 'margin'},
65
63
  placeholder: '请设置广告位边距设置',
66
64
  notice: '广告位选取内容后,将无法修改,单位:像素',
@@ -72,10 +70,9 @@ export default {
72
70
  type: 'number',
73
71
  valueKey: 'msMargin',
74
72
  groupKey:'style',
75
- value: params.msMargin || 10,
73
+ value: params.msMargin,
76
74
  className: 'input40',
77
75
  placeholder: '请广告位内容间距设置',
78
- disabled: xiugai,
79
76
  notice: '广告位选取内容后,将无法修改,单位:像素,默认: <span style="color:red">10</span>像素',
80
77
  inline: false,
81
78
  },