jufubao-base 1.0.287 → 1.0.289-beta1

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 (56) hide show
  1. package/get.package.path.js +2 -2
  2. package/package.json +1 -1
  3. package/src/components/CusCouponChose/CusCouponChose.vue +1027 -0
  4. package/src/components/CusCouponItem/CusCouponItem.vue +298 -0
  5. package/src/components/CusEnter/CusEnter.vue +360 -0
  6. package/src/components/CusPoster/CusPoster.vue +212 -0
  7. package/src/components/CusPoster/CusSwiperDot.vue +234 -0
  8. package/src/components/CusProduct/CusProduct.vue +372 -0
  9. package/src/components/CusShops/CusShops.vue +518 -0
  10. package/src/components/CusSwiperDot/CusSwiperDot.vue +234 -0
  11. package/src/components/CusTab/CusTab.vue +411 -0
  12. package/src/components/CusVideo/CusVideo.vue +170 -0
  13. package/src/components/JfbBaseCard/JfbBaseCard.vue +6 -0
  14. package/src/components/JfbBaseCardEntry/JfbBaseCardEntry.vue +6 -0
  15. package/src/components/JfbBaseCardV2/JfbBaseCardV2.vue +6 -0
  16. package/src/components/JfbBaseCardV3/JfbBaseCardV3.vue +6 -0
  17. package/src/components/JfbBaseChangeCompany/Api.js +18 -0
  18. package/src/components/JfbBaseChangeCompany/Attr.js +18 -0
  19. package/src/components/JfbBaseChangeCompany/JfbBaseChangeCompany.vue +201 -0
  20. package/src/components/JfbBaseChangeCompany/JfbBaseChangeCompanyLess.less +79 -0
  21. package/src/components/JfbBaseChangeCompany/JfbBaseChangeCompanyMixin.js +30 -0
  22. package/src/components/JfbBaseChangeCompany/Mock.js +7 -0
  23. package/src/components/JfbBaseChangeCompany/cusAttr/advanced.js +24 -0
  24. package/src/components/JfbBaseChangeCompany/cusAttr/content.js +27 -0
  25. package/src/components/JfbBaseChangeCompany/cusAttr/style.js +127 -0
  26. package/src/components/JfbBaseChoseCompany/Api.js +33 -0
  27. package/src/components/JfbBaseChoseCompany/Attr.js +18 -0
  28. package/src/components/JfbBaseChoseCompany/JfbBaseChoseCompany.vue +350 -0
  29. package/src/components/JfbBaseChoseCompany/JfbBaseChoseCompanyLess.less +79 -0
  30. package/src/components/JfbBaseChoseCompany/JfbBaseChoseCompanyMixin.js +30 -0
  31. package/src/components/JfbBaseChoseCompany/Mock.js +9 -0
  32. package/src/components/JfbBaseChoseCompany/cusAttr/advanced.js +24 -0
  33. package/src/components/JfbBaseChoseCompany/cusAttr/content.js +69 -0
  34. package/src/components/JfbBaseChoseCompany/cusAttr/style.js +327 -0
  35. package/src/components/JfbBaseFooter/Attr.js +10 -155
  36. package/src/components/JfbBaseFooter/JfbBaseFooter.vue +96 -43
  37. package/src/components/JfbBaseFooter/cusAttr/advanced.js +12 -0
  38. package/src/components/JfbBaseFooter/cusAttr/content.js +446 -0
  39. package/src/components/JfbBaseFooter/cusAttr/style.js +7 -0
  40. package/src/components/JfbBaseFooter/cusAttr/tools.js +17 -0
  41. package/src/components/JfbBaseNotice/JfbBaseNotice.vue +2 -3
  42. package/src/components/JfbBaseOrderList/Mock.js +1 -1
  43. package/src/components/JfbBaseTfkSearch/Api.js +15 -0
  44. package/src/components/JfbBaseTfkSearch/CustomList.vue +10 -0
  45. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +247 -7
  46. package/src/components/JfbBaseTfkSearch/XdQueryFilter.vue +354 -0
  47. package/src/components/JfbBaseTfkSearch/XdQuerySort.vue +192 -0
  48. package/src/components/JfbBaseUserInfo/Attr.js +12 -0
  49. package/src/components/JfbBaseUserInfo/JfbBaseUserInfo.vue +8 -2
  50. package/src/components/JfbBaseWalletDetail/JfbBaseWalletDetail.vue +3 -0
  51. package/src/components/JfbBaseWalletEffective/JfbBaseWalletEffective.vue +3 -0
  52. package/src/components/JfbBaseWalletIndex/JfbBaseWalletIndex.vue +17 -7
  53. package/src/components/JfbBaseWalletItem/JfbBaseWalletItem.vue +6 -2
  54. package/src/mixins/componentsMixins.js +363 -55
  55. package/src/mixins/posterMixins.js +27 -199
  56. package/src/mixins/productCompMixins.js +252 -0
@@ -182,7 +182,6 @@
182
182
  import getServiceUrl from "@/common/getServiceUrl";
183
183
  import storage from "@/common/storage";
184
184
  import Color from "color";
185
- const color = require('color');
186
185
  export default {
187
186
  name: "JfbBaseNotice",
188
187
  components: {
@@ -346,13 +345,13 @@
346
345
  * @param container {object} 业务组件对象自己
347
346
  */
348
347
  init(container) {
349
- let colorBg = color(this.warningColor).alpha(0.1).array();
348
+ let colorBg = Color(this.warningColor).alpha(0.1).array();
350
349
  this.style = getContainerPropsValue(container, 'content.style', '1');
351
350
  this.time = Number(getContainerPropsValue(container, 'content.time', 3));
352
351
  this.textColor = getContainerPropsValue(container, 'content.textColor', this.warningColor);
353
352
  this.textAlign = getContainerPropsValue(container, 'content.textAlign', 'left');
354
353
  this.bgc = getContainerPropsValue(container, 'content.bgc', `rgba(${colorBg.join(',')})`);
355
- this.borderTitleColor = color(this.bgc).lighten(.15).hex();
354
+ this.borderTitleColor = Color(this.bgc).lighten(.15).hex();
356
355
  this.margin = getContainerPropsValue(container, 'content.margin', {top: 0, left: 0, bottom: 0, right: 0});
357
356
  this.padding = getContainerPropsValue(container, 'content.padding', {top: 8, left: 10, bottom: 8, right: 10});
358
357
  this.scrollMargin = getContainerPropsValue(container, 'content.scrollMargin', {});
@@ -25,7 +25,7 @@ module.exports = {
25
25
  "product_thumb": "\/\/sandbox-img.jufubao.cn\/uploads\/20230506\/40018e35f8d9b3bcc2f180cfe073ce28.png",
26
26
  "sale_price": 2678
27
27
  }],
28
- "buttons": [{"text": "支付", "action": "pay"}, {"text": "取消订单", "action": "cancel_unpaid"}, { "text": "申请退款", "action": "apply_refund"}]
28
+ "buttons": [{"text": "支付", "action": "pay"}, {"text": "取消订单", "action": "cancel_unpaid"}, { "text": "申请售后", "action": "apply_refund"}]
29
29
  },
30
30
  {
31
31
  "main_order_id": "m513033785675509760",
@@ -24,4 +24,19 @@ module.exports = [
24
24
  isConsole: true,
25
25
  disabled: true,
26
26
  },
27
+ {
28
+ //设置方法名字当别忘记加上【模块名字】:Tfk
29
+ mapFnName: 'getTfkSearchFilterItems',
30
+ title: '获取搜索筛选条件',
31
+ path: '/mall/v1/msearch/search-filter',
32
+ isRule: false,
33
+ data: {
34
+ type: ['类型', 'String', '必选'],
35
+ namespace: ['业务线', 'Number', '非必选'],
36
+ city_code: ['城市编码', 'Number', '非必选'],
37
+ filter_item: ['纬度', 'Number', '非必选'],
38
+ },
39
+ isConsole: true,
40
+ disabled: true,
41
+ },
27
42
  ];
@@ -177,6 +177,10 @@ export default {
177
177
  tabId:{
178
178
  type:String,
179
179
  required:true
180
+ },
181
+ refresh: {
182
+ type: String | Number,
183
+ default: '',
180
184
  }
181
185
  },
182
186
 
@@ -282,6 +286,12 @@ export default {
282
286
  this.onCusReloadList();
283
287
  },
284
288
 
289
+ refresh() {
290
+ this.handleClear();
291
+ this.parseTab()
292
+ this.onCusReloadList();
293
+ },
294
+
285
295
  stateCity(n, o){
286
296
  if(n && JSON.stringify(n) !== JSON.stringify(o)){
287
297
  this.onCusReloadList()
@@ -34,7 +34,41 @@
34
34
  >{{ item.label }}</view>
35
35
  </view>
36
36
  </view>
37
+ <view class="menu_filter" v-if="(tabId!=='all'&&filterTab.length)||(tabId!=='all'&&showComprehensive)||(tabId!=='all'&&showSort)">
38
+ <view @click="handleGetFilterItem({value:'comprehensive'})" v-if="showComprehensive" class="menu_filter_item" >
39
+ <view>{{sortData.label || '综合'}}</view>
40
+ <xd-font-icon size="24" icon="iconxia_down" color="#333"></xd-font-icon>
41
+ </view>
42
+ <view @click="handleGetFilterItem({value:'sort'})" v-if="showSort" class="menu_filter_item" >
43
+ <view>{{sortData.label || '排序'}}</view>
44
+ <xd-font-icon size="24" icon="iconxia_down" color="#333"></xd-font-icon>
45
+ </view>
46
+ <view class="menu_filter_item" @click="handleGetFilterItem(item)" v-for="(item,index) in filterTab" :key="index">
47
+ <view>
48
+ {{ item.label }}
49
+ </view>
50
+ <xd-font-icon v-if="item.icon" :size="item.size" :icon="item.icon" color="#333"></xd-font-icon>
51
+ </view>
52
+ </view>
53
+ <view class="query_modal">
54
+ <xd-query-filter
55
+ v-if="showMoreFilterType.includes(curQueryTab)&&searchFilterList.length"
56
+ :key="curQueryTab"
57
+ :list="searchFilterList"
58
+ :filter-type="curQueryTab"
59
+ :collapse-num="6"
60
+ :filter-selected="selectFilterParams"
61
+ @onConfirm="handleQueryFilter"></xd-query-filter>
62
+ <xd-query-sort
63
+ v-if="(curQueryTab === 'comprehensive' || curQueryTab === 'sort')"
64
+ :list="sortList"
65
+ :filter-style="filterStyle"
66
+ :sort="sort"
67
+ @onConfirm="handleQuerySort"
68
+ ></xd-query-sort>
69
+ </view>
37
70
  </view>
71
+
38
72
  <view v-if="!isPreview" :style="{height: menuHeight}"></view>
39
73
  <view class="tfk-search" :style="{padding: outSpacing + 'rpx'}">
40
74
  <all-list v-if="tabId === 'all'"
@@ -50,6 +84,7 @@
50
84
  v-else
51
85
  :tab-id="tabId"
52
86
  :keyword="keyword"
87
+ :refresh="refresh"
53
88
  :list-item-style="listItemStyle"
54
89
  :product-config="productConfig"
55
90
  ref="customList"
@@ -74,6 +109,8 @@
74
109
  import CustomList from "./CustomList.vue";
75
110
  import AllList from "./AllList.vue";
76
111
  import { mapState } from 'vuex';
112
+ import XdQueryFilter from "./XdQueryFilter"
113
+ import XdQuerySort from "./XdQuerySort"
77
114
 
78
115
  class EmitParent {
79
116
  constructor(options) {
@@ -88,6 +125,8 @@
88
125
  XdFontIcon,
89
126
  AllList,
90
127
  XdSearchHistory,
128
+ XdQueryFilter,
129
+ XdQuerySort
91
130
  },
92
131
  mixins: [
93
132
  componentsMixins, extsMixins, JfbBaseTfkSearchMixin,listMixins
@@ -128,15 +167,42 @@
128
167
  allModuleItemContRadius: 16,
129
168
  allModuleItemContBgColor: "#FFFFFF",
130
169
  emitParent:{},
131
- is_plus_site: false
170
+ is_plus_site: false,
171
+ closeMask: true,
172
+ filterTab: [],
173
+ filterTabIcon: [
174
+ { value: 'area', label: '区域',icon: 'icondizhitubiao', size: 24 },
175
+ { value: 'brand', label: '品牌',icon: 'iconxia_down', size: 18 },
176
+ { value: 'shop', label: '门店分类',icon: 'iconxia_down', size: 18 },
177
+ { value: 'filter', label: '筛选', icon: 'iconshaixuanbiaoji_mian', size: 24 },
178
+ { value: 'comprehensive', label: '综合', icon: 'iconxia_down', size: 18 },
179
+ { value: 'sort', label: '排序', icon: 'iconxia_down', size: 18 },
180
+ { value: 'business_line', label: '业务线', icon: 'iconxia_down', size: 18 },
181
+ ],
182
+ curQueryTab: "",//刷新KEY(切换标签)
183
+ searchFilterList: [],
184
+ searchFilterParams: {},
185
+ selectFilterParams: {},
186
+ filterType: '',
187
+ sort: "",
188
+ sortData: {},
189
+ filterStyle: {},
190
+ showMoreFilterType: ['filter', 'shop', 'brand', 'area', 'delivery_method', 'shop_category', 'business_line','namespace'],
191
+ refresh: new Date().getTime(),
192
+ showComprehensive: false,
193
+ showSort:false,
194
+ brands: [],
195
+ namespace: '',
196
+ sortList: []
132
197
  }
133
198
  },
134
199
  computed: {
135
200
  ...mapState({
136
201
  siteInfo: state => state.siteInfo,
202
+ stateCity: state => state.cityLocation.city,
137
203
  }),
138
204
  showMenuList(){
139
- return [{label: "全部", value: "all"}, ...this.menuList]
205
+ return [{ label: "全部", value: "all" }, ...this.menuList]
140
206
  },
141
207
  menuWrapBoxStyle(){
142
208
  let padding = `${this.checkValue(this.menuMargin.top, 20)}rpx`;
@@ -186,6 +252,9 @@
186
252
  let height = this.checkValue(menuMargin.top, 20) + this.checkValue(menuMargin.bottom, 20) +
187
253
  this.checkValue(menuPadding.top, 20) + this.checkValue(menuPadding.bottom, 20) +
188
254
  this.checkValue(menuItemPadding.top, 20) + this.checkValue(menuItemPadding.bottom, 20);
255
+ if (this.filterTab.length > 0) {
256
+ height += 90
257
+ }
189
258
  return (height + 40) + 'rpx';
190
259
  },
191
260
  menuItemActiveStyle(){
@@ -229,8 +298,7 @@
229
298
  }
230
299
  },
231
300
  },
232
- created() {
233
-
301
+ created() {
234
302
  this.emitParent = new EmitParent({
235
303
  getParent: ()=>{
236
304
  return this;
@@ -248,8 +316,8 @@
248
316
  * @param cb {Function}
249
317
  */
250
318
  handleList({params, cb}){
251
- let data = {...params};
252
- if(this.tabId === 'all'){
319
+ let data = { ...params, sort: this.sort, ...this.searchFilterParams };
320
+ if(this.tabId === 'all'){
253
321
  data['search_range'] = this.searchScope.map(item => item.value.split("@")[0]).join(',');
254
322
  }
255
323
  if(this.productConfig.isShowDiscount==='Y'){
@@ -313,19 +381,170 @@
313
381
  this.allModuleItemContPadding = getContainerPropsValue(container, 'content.allModuleItemContPadding', {});
314
382
  this.allModuleItemContRadius = getContainerPropsValue(container, 'content.allModuleItemContRadius', 16);
315
383
  this.allModuleItemContBgColor = getContainerPropsValue(container, 'content.allModuleItemContBgColor', '#FFFFFF');
316
-
317
384
  if(this.$configProject['isPreview']){
318
385
  this.menuList = this.searchScope;
319
386
  this.isPreview = true;
320
387
  }
388
+ this.filterStyle = {
389
+ filterPadding: this.getMarginAndPadding({},20),
390
+ filterRowSpacing:20,
391
+ filterListColor:'#f9f9f9',
392
+ filterFontStyle: this.getFontAndBgcStyle({},{
393
+ fontSize: '26px',
394
+ color: '#333',
395
+ fontWeight: 'normal',
396
+ bgColor: 'rgba(0,0,0,0)'
397
+ }),
398
+ filterActFontStyle: this.getFontAndBgcStyle({},{
399
+ fontSize: '26px',
400
+ color: this.mainColor,
401
+ fontWeight: 'normal',
402
+ bgColor: 'rgba(0,0,0,0)'
403
+ },'act')
404
+ };
321
405
  },
322
406
  handleSwitchMenu(item){
323
407
  this.tabId = item.value;
408
+ this.namespace = item.namespace;
409
+ this.filterType = item.type
410
+ this.curQueryTab = '';
411
+ this.searchFilterParams = {};
412
+ this.sortData = {};
413
+ this.sort = '';
414
+ if (item.filter_item && item.filter_item.tab_filter) {
415
+ // 综合和排序的显示状态,当选中综合或排序时,下拉菜单取本地数据
416
+ this.showComprehensive = item.filter_item.tab_filter.find(item => item.value === 'comprehensive')
417
+ this.showSort = item.filter_item.tab_filter.find(item => item.value === 'sort')
418
+ let filter_item = item.filter_item.tab_filter.filter(item => {
419
+ return (item.value !== 'comprehensive'&&item.value !== 'sort')
420
+ })
421
+ this.filterTab = filter_item.map(item => {
422
+ let temp = this.filterTabIcon.find(Sitem => item.value === Sitem.value);
423
+ return {
424
+ ...item,
425
+ icon: temp ? temp.icon : '',
426
+ size: temp ? temp.size : ''
427
+ }
428
+ })
429
+ } else {
430
+ this.filterTab = []
431
+ }
324
432
  uni.pageScrollTo({
325
433
  scrollTop: 0,
326
434
  duration: 0
327
435
  });
328
436
  },
437
+ handleGetFilterItem(item) {
438
+ //设置城市
439
+ let city_code = ''
440
+ if(this.stateCity && this.stateCity.city_code) {
441
+ city_code = this.stateCity.city_code;
442
+ }
443
+ let data = {
444
+ type: this.filterType,
445
+ namespace: this.namespace,
446
+ filter_item: item.value,
447
+ city_code
448
+ }
449
+ if(item.value === this.curQueryTab){
450
+ this.curQueryTab = '';
451
+ return
452
+ }
453
+ else {
454
+ this.curQueryTab = item.value;
455
+ }
456
+ if (this.curQueryTab === 'sort') {
457
+ this.sortList = [{
458
+ label: "排序",
459
+ key: "default",
460
+ value: "default"
461
+ }]
462
+ } else if (this.curQueryTab === 'comprehensive') {
463
+ this.sortList = [
464
+ {
465
+ label: "综合",
466
+ key: "default",
467
+ value: "default"
468
+ },
469
+ {
470
+ label: "销量",
471
+ key: "sale_num",
472
+ children: [
473
+ {label: "由高到低", value: 'sale_num_desc'},
474
+ {label: "由低到高", value: 'sale_num_asc'}
475
+ ]
476
+ },
477
+ {
478
+ label: "价格",
479
+ key: "price",
480
+ children: [
481
+ {label: "由高到低", value: 'price_desc'},
482
+ {label: "由低到高", value: 'price_asc'}
483
+ ]
484
+ }
485
+ ]
486
+ }
487
+ const sortMap = {
488
+ 'sales_volume': 'sale_num_desc',
489
+ 'price': 'price_desc',
490
+ default: 'default'
491
+ };
492
+
493
+ if (sortMap[item.value]) {
494
+ this.sort = sortMap[item.value];
495
+ this.refresh = new Date().getTime();
496
+ return;
497
+ }
498
+
499
+ jfbRootExec("getTfkSearchFilterItems", {
500
+ vm: this,
501
+ data: data
502
+ }).then(res => {
503
+ this.searchFilterList = res.items || [];
504
+ }).catch(err => {
505
+ this.$xdLog.catch(err);
506
+ })
507
+ },
508
+ handleQueryFilter({ items, ids, labels }) {
509
+ const maps = {
510
+ 'brand': 'brands',
511
+ 'area': 'area_codes',
512
+ 'delivery_method': 'delivery_methods',
513
+ 'shop_category': 'category_ids',
514
+ 'business_line': 'business_lines'
515
+ };
516
+ Object.keys(items).map(key => {
517
+ let keys = Object.keys(maps);
518
+ if (keys.indexOf(key) > -1) {
519
+ this.searchFilterParams[maps[key]] = ids[key]
520
+ }
521
+ // if (key === 'brand') {
522
+ // this.searchFilterParams.brands = ids[key]
523
+ // }
524
+ // if (key === 'area') {
525
+ // this.searchFilterParams.area_codes = ids[key]
526
+ // }
527
+ // if (key === 'delivery_method') {
528
+ // this.searchFilterParams.delivery_methods = ids[key]
529
+ // }
530
+ // if (key === 'shop_category') {
531
+ // this.searchFilterParams.category_ids = ids[key]
532
+ // }
533
+ // if (key === 'business_line') {
534
+ // this.searchFilterParams.business_lines = ids[key]
535
+ // }
536
+ this.selectFilterParams[key] = ids[key]
537
+ })
538
+ this.curQueryTab = '';
539
+ this.refresh = new Date().getTime();
540
+ },
541
+ handleQuerySort(sortData){
542
+ if(this.sort === sortData.value) return false;
543
+ this.sortData = sortData;
544
+ this.sort = sortData.value;
545
+ this.curQueryTab = '';
546
+ this.refresh = new Date().getTime();
547
+ },
329
548
  handleToSearch(item){
330
549
  this.keyword = item;
331
550
  jfbRootFnExec(this, 'onCustomEvent')("baseTfkSearch@keyword", item);
@@ -380,6 +599,27 @@
380
599
  }
381
600
  }
382
601
  }
602
+ .menu_filter {
603
+ background:#fff;
604
+ display: flex;
605
+ justify-content: space-around;
606
+ align-items: center;
607
+ padding: 26rpx 0;
608
+ border-top: 1px solid #f8f8f8;
609
+ &_item {
610
+ color: #333;
611
+ font-size: 28rpx;
612
+ display: flex;
613
+ align-items: center;
614
+ justify-content: center;
615
+ & > view:first-child{
616
+ margin-right: 14rpx;
617
+ }
618
+ }
619
+ }
620
+ .query_modal {
621
+ background-color: #fff;
622
+ }
383
623
  }
384
624
  }
385
625
  </style>