jufubao-movie 1.0.39-beta9 → 1.0.40

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-movie",
3
- "version": "1.0.39-beta9",
3
+ "version": "1.0.40",
4
4
  "private": false,
5
5
  "description": "聚福宝在线选座业务组件插件包",
6
6
  "main": "index.js",
@@ -12,7 +12,7 @@
12
12
  */
13
13
  module.exports = [
14
14
  {
15
- mapFnName: 'getCinemaList', //自定义方法名字(必选)
15
+ mapFnName: 'getCinemaChooseList', //自定义方法名字(必选)
16
16
  title: '获取影院列表',
17
17
  path: '/movie/v1/cinema/list',
18
18
  isRule: false,
@@ -25,7 +25,7 @@ module.exports = [
25
25
  disabled: true,
26
26
  },
27
27
  {
28
- mapFnName: 'getFilmInfo',
28
+ mapFnName: 'getFilmChooseInfo',
29
29
  title: '获取影片详情',
30
30
  path: '/movie/v1/film/get',
31
31
  isRule: false,
@@ -37,7 +37,7 @@ module.exports = [
37
37
  disabled: true,
38
38
  },
39
39
  {
40
- mapFnName: "getCitySub",
40
+ mapFnName: "getCityChooseSub",
41
41
  title: "获取城市的区位列表",
42
42
  path: "/common/v1/region/city/getsub-lv",
43
43
  isRule: false,
@@ -13,22 +13,20 @@
13
13
  :class="{ editx: isEditx && active }"
14
14
  v-if="isEditx && active && !noBorder"
15
15
  >
16
- <view class="jfb-movie-line-cinema-choose__edit-icon" @click="delEdit"
17
- >删除</view
18
- >
16
+ <view class="jfb-movie-line-cinema-choose__edit-icon" @click="delEdit">删除</view>
19
17
  </view>
20
18
  <!-- #endif -->
21
19
  <view class="jfb-movie-line-cinema-choose__body">
22
20
  <view class="film_base_wrap-top"></view>
23
21
  <view class="film_base_wrap">
24
- <view class="film_info">
22
+ <view class="film_info" v-if="film.show_name">
25
23
  <view class="film_post">
26
24
  <image :src="film.poster" />
27
25
  </view>
28
26
  <view class="film_other">
29
27
  <view class="film_name_score">
30
28
  <view class="film_name">{{ film.show_name }}</view>
31
- <view class="film_score">{{ film.remark }}</view>
29
+ <view class="film_score" v-if="film.remark">{{ film.remark }}</view>
32
30
  </view>
33
31
  <view class="film_type">{{ film.type }}</view>
34
32
  <view class="film_sub">导演:{{ film.director }}</view>
@@ -206,7 +204,7 @@ export default {
206
204
  const { film_id } = options;
207
205
  this.film_id = film_id;
208
206
  const { stateCity } = this;
209
- jfbRootExec("getFilmInfo", {
207
+ jfbRootExec("getFilmChooseInfo", {
210
208
  vm: this,
211
209
  data: {
212
210
  film_id,
@@ -246,7 +244,7 @@ export default {
246
244
  });
247
245
  },
248
246
  handleGetCitySub(city_code) {
249
- jfbRootExec("getCitySub", {
247
+ jfbRootExec("getCityChooseSub", {
250
248
  vm: this,
251
249
  data: {
252
250
  city_code,
@@ -260,7 +258,7 @@ export default {
260
258
  // let region = citySubs[subIndex] || {};
261
259
  console.log(stateCity, stateLocation, "p_getCinemaList");
262
260
  this.$xdShowLoading({});
263
- jfbRootExec("getCinemaList", {
261
+ jfbRootExec("getCinemaChooseList", {
264
262
  vm: this,
265
263
  data: {
266
264
  city_code: stateCity.city_code,
@@ -356,14 +354,20 @@ view {
356
354
  .film_name_score {
357
355
  display: flex;
358
356
  justify-content: space-between;
359
- align-items: center;
357
+ align-items: flex-start;
360
358
  font-size: 36rpx;
361
359
  font-weight: 700;
362
360
  .film_name {
363
361
  color: #000;
362
+ flex: 1;
363
+ line-height: 46rpx;
364
364
  }
365
365
  .film_score {
366
366
  color: #ff5733;
367
+ flex-shrink: 0;
368
+ margin-left: 6rpx;
369
+ font-size: 32rpx;
370
+ line-height: 46rpx;
367
371
  }
368
372
  }
369
373
  .film_type {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  module.exports = {
4
- getFilmInfo: {
4
+ getFilmChooseInfo: {
5
5
  "id": 155,
6
6
  "city_code": "",
7
7
  "show_name_en": "我的遗憾和你有关",
@@ -27,7 +27,7 @@ module.exports = {
27
27
  "deleted_time": 0,
28
28
  "request_id": "9aefdeb726bc8644"
29
29
  },
30
- getCinemaList: {
30
+ getCinemaChooseList: {
31
31
  list: [
32
32
  {
33
33
  cinema_id: 6780394,
@@ -43,7 +43,6 @@
43
43
  }"
44
44
  >即将上映</view>
45
45
  </view>
46
-
47
46
  <view v-if="loadingList" class="switch_section skeleton-wrap">
48
47
  <view class="film_item" v-for="i in 6" :key="i">
49
48
  <view class="film_post"></view>
@@ -134,8 +133,6 @@
134
133
  </view>
135
134
  </view>
136
135
  </template>
137
-
138
-
139
136
  </view>
140
137
  </view>
141
138
  </template>
@@ -211,6 +208,22 @@
211
208
  }
212
209
  },
213
210
  created() {
211
+ let mapType = {
212
+ hot:0,
213
+ rightnow: 1,
214
+ }
215
+ let tab_id = '';
216
+ // #ifdef H5
217
+ tab_id = this.$xdUniHelper.getParmater('tab_id') ? this.$xdUniHelper.getParmater('tab_id'):'';
218
+ // #endif
219
+ // #ifdef MP-WEIXIN
220
+ let pages = this.$xdUniHelper.parseURL(this.$root.$scope.$page.fullPath);
221
+ tab_id = (pages.params && pages.params['tab_id']) ? pages.params['tab_id'] :'';
222
+ // #endif
223
+ if(['hot', 'rightnow'].includes(tab_id)) {
224
+ this.activeIndex = mapType[tab_id];
225
+ }
226
+
214
227
  this.init(this.container);
215
228
  this.getList();
216
229
  },
@@ -13,15 +13,13 @@
13
13
  :class="{ editx: isEditx && active }"
14
14
  v-if="isEditx && active && !noBorder"
15
15
  >
16
- <view class="jfb-movie-line-film-info__edit-icon" @click="delEdit"
17
- >删除</view
18
- >
16
+ <view class="jfb-movie-line-film-info__edit-icon" @click="delEdit">删除</view>
19
17
  </view>
20
18
  <!-- #endif -->
21
19
  <view class="jfb-movie-line-film-info__body">
22
20
  <view class="film_base_wrap-top"></view>
23
21
  <view class="film_base_wrap">
24
- <view class="film_info">
22
+ <view class="film_info" v-if="film.poster">
25
23
  <view class="film_post">
26
24
  <image :src="film.poster"></image>
27
25
  </view>
@@ -5,7 +5,7 @@ module.exports = {
5
5
  "id": 3671,
6
6
  "city_code": "",
7
7
  "show_name_en": "",
8
- "remark": "",
8
+ "remark": "9.7分",
9
9
  "highlight": "",
10
10
  "country": "",
11
11
  "show_name": "八角笼中",
@@ -44,10 +44,9 @@
44
44
  <view class="seat_btn"></view>
45
45
  </view>
46
46
  <xd-online-seat
47
- v-if="filmId"
47
+ v-if="isReload && filmId"
48
48
  ref="xdOnlineSeat"
49
49
  :is-show-title="isShowTitle"
50
- :key="cinemaSeatKey"
51
50
  :is-old="false"
52
51
  :film-id="filmId"
53
52
  :cinema-id="cinemaId"
@@ -56,6 +55,7 @@
56
55
  :is_not_show_price="is_not_show_price"
57
56
  @onGetFilm="handleGetFilm"
58
57
  @onGetSeatList="handleGetSeatList"
58
+ @onGetFilmPaiqi="handleGetFilmPaiqi"
59
59
  @onBuy="handleBuy"></xd-online-seat>
60
60
  </view>
61
61
  </view>
@@ -99,6 +99,8 @@
99
99
  time: 0,
100
100
  xItem: 10,
101
101
  yItem: 7,
102
+
103
+ isReload: true,//控制重新加载(onJfbShow)
102
104
  }
103
105
  },
104
106
  watch: {
@@ -125,6 +127,37 @@
125
127
  }
126
128
  },
127
129
 
130
+ /**
131
+ * @description 获取排期数据
132
+ * @param resolve
133
+ */
134
+ handleGetFilmPaiqi(resolve){
135
+ const {filmId, cinemaId} = this;
136
+ this.$xdShowLoading({});
137
+ jfbRootExec("getCinemaSchedule", {
138
+ vm: this,
139
+ data: {cinema_id: cinemaId, film_id: filmId}
140
+ }).then(res=>{
141
+ this.paiQiData = res.schedule_data.map(item => {
142
+ item['name'] = item['date_name'];
143
+ item['paiqi_data'] = item['paiqi'].map(pp => {
144
+ pp['price'] = pp['sale_price'];
145
+ pp['jfb_film_id'] = pp['film_id'];
146
+ pp['jfb_cinema_id'] = pp['cinema_id'];
147
+ pp['data_id'] = pp['schedule_id'];
148
+ return pp;
149
+ });
150
+ return item;
151
+ });
152
+ resolve(this.paiQiData);
153
+ this.$xdHideLoading();
154
+ })
155
+ .catch(err=>{
156
+ console.error(err);
157
+ this.$xdHideLoading();
158
+ })
159
+ },
160
+
128
161
  getSeatStatus(request_seat_id) {
129
162
  this.$xdShowLoading({});
130
163
  jfbRootExec("getCinemaSeatsStatus", {
@@ -133,6 +166,10 @@
133
166
  request_seat_id: request_seat_id
134
167
  }
135
168
  }).then(res => {
169
+ // res['seat_code'] = 'P0007';
170
+ // res['seat_message'] = '当前场次有误,请您重新选择影片';
171
+ // res['seat_status'] = 'N'
172
+
136
173
  if (res.seat_status === 'Y') {
137
174
  this.$xdHideLoading()
138
175
  clearTimeout(this.timer)
@@ -140,17 +177,21 @@
140
177
  url: this.moviePayPath + `?order_id=${res.temp_order_id}`
141
178
  },true);
142
179
  return
143
- } else if (res.seat_status === 'N') {
180
+ }
181
+
182
+ //有错处理res.seat_status
183
+ else if (res.seat_status === 'N') {
144
184
  clearTimeout(this.timer)
145
185
  this.$xdHideLoading();
146
- this.$xdAlert({
147
- content: res.seat_message,
148
- time: 2500,
149
- isClose: false,
150
- zIndex: 5000
151
- })
152
- return
153
- }else{
186
+
187
+ if(res['seat_message']) res['error_msg'] = res['error_msg'] || res['seat_message'];
188
+ if(res['seat_code']) res['error_code'] = res['error_code'] || res['seat_code']
189
+
190
+ //检查是否报错
191
+ this.handleCheckStatusIsError(res);
192
+ return;
193
+ }
194
+ else{
154
195
  this.timer = setTimeout(() => {
155
196
  this.getSeatStatus(request_seat_id);
156
197
  }, ++this.time > 5 ? (Math.pow(2, (this.time - 4)) * 1000) : 3000)
@@ -160,6 +201,7 @@
160
201
  this.$xdHideLoading()
161
202
  })
162
203
  },
204
+
163
205
  /**
164
206
  * @description 监听事件变化
165
207
  * @param container {object} 业务组件对象自己
@@ -171,8 +213,12 @@
171
213
  if(this.isShowTitle === 'Y') this.yItem = 7;
172
214
  else this.yItem = 10;
173
215
  },
216
+
217
+ /**
218
+ * @description 获取排期与影片基础信息数据
219
+ * @param resolve
220
+ */
174
221
  handleGetFilm(resolve) {
175
- // console.log('11111', paiqi.result);
176
222
  const {filmId, cinemaId} = this;
177
223
  this.$xdShowLoading({});
178
224
  Promise.all([
@@ -182,6 +228,15 @@
182
228
  ]).then(([res, res1]) => {
183
229
  this.loadingList = false;
184
230
  this.$xdHideLoading();
231
+
232
+ //错误异常
233
+ if(res1['error_code']) {
234
+ this.handleCheckStatusIsError(res1, ()=>{
235
+ this.handleGetFilm(resolve)
236
+ });
237
+ return
238
+ }
239
+
185
240
  this.is_not_show_price = res.is_not_show_price;
186
241
  let paiqi_data = res.schedule_data.map(item => {
187
242
  item['name'] = item['date_name'];
@@ -195,7 +250,6 @@
195
250
  return item;
196
251
  });
197
252
  this.paiQiData = paiqi_data;
198
- // const {cinema_data, film_data} = res1;
199
253
  resolve({
200
254
  paiqi_data: paiqi_data,
201
255
  film_data: [{
@@ -225,6 +279,10 @@
225
279
  request_ident: this.request_ident
226
280
  }
227
281
  }).then(res => {
282
+ // res['error_code'] = 'P0002';
283
+ // res['error_msg'] = '当前场次有更新 <br/> 请您手动切换或由系统自动切换到下一场次。';
284
+ // res['status'] = 'E'
285
+
228
286
  if(res.status === "P"){
229
287
  if(!this.$root.$isShow) return;
230
288
  this.request_ident = res.request_ident;
@@ -234,32 +292,36 @@
234
292
  }, ++this.seatTime > 5 ? (Math.pow(2, (this.seatTime - 4)) * 1000) : 2000)
235
293
  return;
236
294
  }
295
+
237
296
  if(res.status === "E"){
238
- uni.showToast({
239
- title: res.error_message,
240
- icon: "none"
241
- })
297
+ this.handleCheckStatusIsError(res, ()=>{
298
+ resolve(null);
299
+ });
242
300
  this.$xdHideLoading();
243
301
  return;
244
302
  }
303
+
245
304
  let seatData = Object.assign({}, res, {
246
305
  seat: res.seat_data.map(item => {
247
306
  return item.seat_columns;
248
307
  })
249
- })
308
+ });
309
+
250
310
  resolve(seatData);
251
311
  this.$xdHideLoading();
252
312
  })
253
313
  },
314
+
254
315
  //去支付未完成订单
255
316
  handleToPay(res){
256
317
  const { temp_order_id, oms_order_id, pay_order_id } = res;
257
318
  this.$xdConfirm({
258
319
  styles: this.styles,
259
320
  width: '90%',
260
- content: '有未完成的订单',
261
- confirmText: '去支付',
262
- cancelText: '继续选座',
321
+ content: '您当前有一笔未付款订单,<br/>请先处理!',
322
+ confirmText: '立即付款',
323
+ isHtml: true,
324
+ cancelText: '取消订单',
263
325
  showClose: false,
264
326
  success: (res) => {
265
327
  if (res.confirm) {
@@ -288,6 +350,60 @@
288
350
  })
289
351
  },
290
352
 
353
+ handleCheckStatusIsError({error_msg,error_message,error_code}, cb=null){
354
+ let msg = error_message || error_msg;
355
+ if(!msg) return false;
356
+
357
+ //是否切换场次
358
+ if(error_code === 'P0002') {
359
+ this.$xdConfirm({
360
+ content: msg,
361
+ zIndex: 5000,
362
+ isHtml: true,
363
+ isTitle:false,
364
+ cancelText:'手动切换',
365
+ confirmText:'自动切换',
366
+ msgIcon:'iconinformation',
367
+ success:(res)=>{
368
+ if(res.confirm) {
369
+ if(typeof cb === 'function') cb();
370
+ }
371
+ }
372
+ })
373
+ return true
374
+ }
375
+
376
+ //当前场次有误,请您重新选择影片
377
+ if(error_code === 'P0007') {
378
+ this.$xdConfirm({
379
+ content: msg,
380
+ zIndex: 5000,
381
+ cancel:false,
382
+ isHtml: true,
383
+ isTitle:false,
384
+ confirmText:'返回首页',
385
+ msgIcon:'iconinformation',
386
+ success:(res)=>{
387
+ if(res.confirm) {
388
+ this.$xdUniHelper.redirectTo({
389
+ url: this.$settings.index
390
+ })
391
+ }
392
+ }
393
+ })
394
+ return true
395
+ }
396
+
397
+ this.$xdAlert({
398
+ content: msg,
399
+ type: 'error',
400
+ time: 3000,
401
+ zIndex: 5000
402
+ })
403
+ this.$xdHideLoading({})
404
+ return true;
405
+ },
406
+
291
407
  handleBuy(item) {
292
408
  let postData = {
293
409
  schedule_id: this.scheduleId,
@@ -301,16 +417,28 @@
301
417
  vm: this,
302
418
  data: postData
303
419
  }).then(res => {
304
- console.log("锁座成功", res);
420
+ //检查是否有错误信息并且弹层
421
+ if(this.handleCheckStatusIsError(res)){
422
+ this.$xdHideLoading()
423
+ return;
424
+ }
425
+
426
+ //未获取到锁座ID
427
+ if(!res.request_seat_id) {
428
+ this.$xdHideLoading();
429
+ this.$xdAlert({
430
+ content: '未获取到锁座ID',
431
+ type: 'error',
432
+ time: 3000
433
+ })
434
+ return;
435
+ }
436
+
305
437
  this.timer = setTimeout(() => {
306
438
  this.getSeatStatus(res.request_seat_id);
307
439
  }, 2000)
308
440
  }).catch(error=>{
309
441
  console.error(error);
310
- uni.showToast({
311
- title: '锁座失败!',
312
- icon: "none"
313
- })
314
442
  this.$xdHideLoading()
315
443
  })
316
444
  },
@@ -318,17 +446,23 @@
318
446
  onJfbBack(options){
319
447
  this.$xdUniHelper.navigateBack();
320
448
  },
449
+
321
450
  onJfbShow(options) {
322
- console.log('onJfbShow', options)
323
- this.onJfbLoad(options);
324
- this.cinemaSeatKey = Date.now()
451
+ this.isReload = false;
452
+ setTimeout(()=>{
453
+ this.isReload = true;
454
+ this.onJfbLoad(options);
455
+ },100)
325
456
  },
457
+
326
458
  onJfbUnload(){
327
459
  this.unmount();
328
460
  },
461
+
329
462
  onJfbHide(){
330
463
  this.unmount();
331
464
  },
465
+
332
466
  unmount(){
333
467
  if(this.seatTimer) clearTimeout(this.seatTimer);
334
468
  if(this.timer) clearTimeout(this.timer);
@@ -37,6 +37,7 @@
37
37
  >{{ item }}</view>
38
38
  </xd-notice-bar>
39
39
  </view>
40
+ <view class="xd-seat__footer-name">{{filmInfo.film_name}}</view>
40
41
  <view class="xd-seat__footer-paiqi">
41
42
  <view class="xd-seat__footer-paiqi-tab">
42
43
  <view>
@@ -256,6 +257,7 @@ export default {
256
257
  mainColorToArray: null,
257
258
  paiqiStatus: false, //影院信息与排期信息状态
258
259
  cinemaInfo: null, //影院信息
260
+ paiqiData:null, //排期数据
259
261
  filmInfo: null, //电影信息
260
262
  height: null, //内容区域高度
261
263
  show: false, //是否显示返回
@@ -453,6 +455,21 @@ export default {
453
455
  */
454
456
  getSeat(item) {
455
457
  this.$emit("onGetSeatList", item, (seat) => {
458
+
459
+ //排期有更新自动选中下一场
460
+ if(seat === null) {
461
+ this.$emit('onGetFilmPaiqi',(paiqiData)=>{
462
+ let list = [];
463
+ paiqiData.map(item => {
464
+ list.push(item["paiqi_data"]);
465
+ });
466
+ this.replaceParams(this.getFirst(list));
467
+ });
468
+ return;
469
+ }
470
+
471
+ //正常数据
472
+ this.selectedSeatInfo = seat;
456
473
  this.selectedSeatList = seat["seat"];
457
474
  this.areaPrices = (seat['area_price'] || []).map(item=>{
458
475
  return {
@@ -466,13 +483,13 @@ export default {
466
483
  },
467
484
 
468
485
  /**
469
- * @description 获取排期数据
486
+ * @description 获取排期与影院信息数据
470
487
  */
471
488
  getFilm() {
472
489
  this.$emit("onGetFilm", (film) => {
473
490
  this.cinemaInfo = film["cinema_data"];
491
+ this.paiqiData = film["paiqi_data"];
474
492
  this.filmInfo = this.getFilmInfo(film["film_data"]);
475
- debugger
476
493
  this.getScheduleList(film["paiqi_data"]);
477
494
  console.log("getFilm", film);
478
495
  this.paiqiStatus = true;
@@ -558,9 +575,13 @@ export default {
558
575
  console.warn(`params.seatId:${this.seatId}`);
559
576
  console.warn(`all.seatId:${JSON.stringify(allPaiqiId)}`);
560
577
  this.$xdConfirm({
561
- content:'当前排期已过期,请您手动切换或由系统自动切换到下一排期。',
578
+ content:'当前场次有更新<br/>请您手动切换或由系统自动切换到下一场次。',
562
579
  confirmText:'自动切换',
563
580
  cancelText:'手动切换',
581
+ msgIcon:'iconinformation',
582
+ zIndex:5000,
583
+ isHtml: true,
584
+ isTitle:false,
564
585
  styles: this.$parent.$parent.$parent.styles,
565
586
  success:(status)=>{
566
587
  if(status.confirm) {
@@ -584,9 +605,16 @@ export default {
584
605
  this.scheduleListIndex
585
606
  );
586
607
  },
608
+
587
609
  replaceParams(selectPaiqi) {
588
- let parseUrl = this.$xdUniHelper.parseURL();
589
- let { params, path } = parseUrl;
610
+ let { params, path } = this.$xdUniHelper.parseURL();
611
+
612
+ //#ifdef H5
613
+ let pathArr = path.split("/");
614
+ pathArr.splice(0,2)
615
+ path = `/${pathArr.join('/')}`
616
+ //#endif
617
+
590
618
  params["scheduleId"] = selectPaiqi["data_id"];
591
619
  let searchParams = this.$xdUniHelper.jsonToParams(params);
592
620
  this.$xdUniHelper.redirectTo({
@@ -755,6 +783,15 @@ export default {
755
783
  z-index: 101;
756
784
  background: #fff;
757
785
 
786
+ &-name {
787
+ line-height: 40rpx;
788
+ font-size: 36rpx;
789
+ .uni-cut(1,40);
790
+ padding: 0 20rpx;
791
+ font-weight: 600;
792
+ color: #333;
793
+ }
794
+
758
795
  &-paiqi {
759
796
  &-content {
760
797
  height: unit(134, rpx);
@@ -925,6 +962,7 @@ export default {
925
962
 
926
963
  & .tab-show {
927
964
  font-size: @xd-font-size-base;
965
+ color:#999
928
966
  }
929
967
 
930
968
  & > view {