jufubao-base 1.0.243-beta1 → 1.0.243-beta1002

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 (130) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseBalance/Api.js +46 -0
  3. package/src/components/JfbBaseBalance/Attr.js +316 -0
  4. package/src/components/JfbBaseBalance/JfbBaseBalance.vue +336 -0
  5. package/src/components/JfbBaseBalance/JfbBaseBalanceLess.less +79 -0
  6. package/src/components/JfbBaseBalance/JfbBaseBalanceMixin.js +30 -0
  7. package/src/components/JfbBaseBalance/Mock.js +9 -0
  8. package/src/components/JfbBaseCodeOpenVip/Api.js +35 -0
  9. package/src/components/JfbBaseCodeOpenVip/Attr.js +281 -0
  10. package/src/components/JfbBaseCodeOpenVip/JfbBaseCodeOpenVip.vue +251 -0
  11. package/src/components/JfbBaseCodeOpenVip/JfbBaseCodeOpenVipLess.less +79 -0
  12. package/src/components/JfbBaseCodeOpenVip/JfbBaseCodeOpenVipMixin.js +30 -0
  13. package/src/components/JfbBaseCodeOpenVip/Mock.js +13 -0
  14. package/src/components/JfbBaseConsumpCode/Api.js +133 -0
  15. package/src/components/JfbBaseConsumpCode/Attr.js +74 -0
  16. package/src/components/JfbBaseConsumpCode/JfbBaseConsumpCode.vue +1111 -0
  17. package/src/components/JfbBaseConsumpCode/JfbBaseConsumpCodeLess.less +79 -0
  18. package/src/components/JfbBaseConsumpCode/JfbBaseConsumpCodeMixin.js +30 -0
  19. package/src/components/JfbBaseConsumpCode/Mock.js +22 -0
  20. package/src/components/JfbBaseFastLink/Attr.js +12 -1
  21. package/src/components/JfbBaseFastLink/JfbBaseFastLink.vue +66 -0
  22. package/src/components/JfbBaseFooter/Attr.js +12 -0
  23. package/src/components/JfbBaseFooter/JfbBaseFooter.vue +13 -0
  24. package/src/components/JfbBaseHeader/Attr.js +82 -0
  25. package/src/components/JfbBaseHeader/JfbBaseHeader.vue +47 -1
  26. package/src/components/JfbBaseHeaderColumn/Attr.js +82 -0
  27. package/src/components/JfbBaseHeaderColumn/JfbBaseHeaderColumn.vue +48 -2
  28. package/src/components/JfbBaseLogin/JfbBaseLogin.vue +17 -3
  29. package/src/components/JfbBaseNoticeDialog/Api.js +1 -1
  30. package/src/components/JfbBaseNoticeDialog/Attr.js +26 -0
  31. package/src/components/JfbBaseNoticeDialog/JfbBaseNoticeDialog.vue +38 -15
  32. package/src/components/JfbBaseNoticeGroup/Api.js +23 -0
  33. package/src/components/JfbBaseNoticeGroup/Attr.js +237 -0
  34. package/src/components/JfbBaseNoticeGroup/JfbBaseNoticeGroup.vue +174 -0
  35. package/src/components/JfbBaseNoticeGroup/JfbBaseNoticeGroupLess.less +79 -0
  36. package/src/components/JfbBaseNoticeGroup/JfbBaseNoticeGroupMixin.js +30 -0
  37. package/src/components/JfbBaseNoticeGroup/Mock.js +13 -0
  38. package/src/components/JfbBaseOpenVip/Api.js +39 -0
  39. package/src/components/JfbBaseOpenVip/Attr.js +331 -0
  40. package/src/components/JfbBaseOpenVip/JfbBaseOpenVip.vue +459 -0
  41. package/src/components/JfbBaseOpenVip/JfbBaseOpenVipLess.less +79 -0
  42. package/src/components/JfbBaseOpenVip/JfbBaseOpenVipMixin.js +30 -0
  43. package/src/components/JfbBaseOpenVip/Mock.js +7 -0
  44. package/src/components/JfbBaseOpenVip/XdVipList.vue +130 -0
  45. package/src/components/JfbBaseOpenVipCard/Api.js +58 -0
  46. package/src/components/JfbBaseOpenVipCard/Attr.js +48 -0
  47. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCard.vue +111 -0
  48. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCardLess.less +79 -0
  49. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCardMixin.js +30 -0
  50. package/src/components/JfbBaseOpenVipCard/Mock.js +13 -0
  51. package/src/components/JfbBaseOpenVipDetail/Api.js +35 -0
  52. package/src/components/JfbBaseOpenVipDetail/Attr.js +37 -0
  53. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetail.vue +234 -0
  54. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetailLess.less +79 -0
  55. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetailMixin.js +30 -0
  56. package/src/components/JfbBaseOpenVipDetail/Mock.js +15 -0
  57. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +177 -18
  58. package/src/components/JfbBasePay/Attr.js +52 -0
  59. package/src/components/JfbBasePay/JfbBasePay.vue +23 -6
  60. package/src/components/JfbBasePay/Mock.js +0 -9
  61. package/src/components/JfbBasePersonalData/Api.js +26 -0
  62. package/src/components/JfbBasePersonalData/Attr.js +13 -0
  63. package/src/components/JfbBasePersonalData/JfbBasePersonalData.vue +278 -0
  64. package/src/components/JfbBasePersonalData/JfbBasePersonalDataLess.less +79 -0
  65. package/src/components/JfbBasePersonalData/JfbBasePersonalDataMixin.js +30 -0
  66. package/src/components/JfbBasePersonalData/Mock.js +13 -0
  67. package/src/components/JfbBasePhoneLogin/JfbBasePhoneLogin.vue +35 -14
  68. package/src/components/JfbBasePointsCard/Api.js +18 -0
  69. package/src/components/JfbBasePointsCard/Attr.js +187 -0
  70. package/src/components/JfbBasePointsCard/JfbBasePointsCard.vue +212 -0
  71. package/src/components/JfbBasePointsCard/JfbBasePointsCardLess.less +79 -0
  72. package/src/components/JfbBasePointsCard/JfbBasePointsCardMixin.js +30 -0
  73. package/src/components/JfbBasePointsCard/Mock.js +5 -0
  74. package/src/components/JfbBasePointsDetail/Api.js +48 -0
  75. package/src/components/JfbBasePointsDetail/Attr.js +305 -0
  76. package/src/components/JfbBasePointsDetail/JfbBasePointsDetail.vue +267 -0
  77. package/src/components/JfbBasePointsDetail/JfbBasePointsDetailLess.less +79 -0
  78. package/src/components/JfbBasePointsDetail/JfbBasePointsDetailMixin.js +30 -0
  79. package/src/components/JfbBasePointsDetail/Mock.js +6 -0
  80. package/src/components/JfbBasePoster/Attr.js +1 -1
  81. package/src/components/JfbBasePosterBigSmall/JfbBasePosterBigSmall.vue +2 -2
  82. package/src/components/JfbBasePosterGroup/Api.js +22 -0
  83. package/src/components/JfbBasePosterGroup/Attr.js +156 -0
  84. package/src/components/JfbBasePosterGroup/JfbBasePosterGroup.vue +268 -0
  85. package/src/components/JfbBasePosterGroup/JfbBasePosterGroupLess.less +79 -0
  86. package/src/components/JfbBasePosterGroup/JfbBasePosterGroupMixin.js +30 -0
  87. package/src/components/JfbBasePosterGroup/Mock.js +13 -0
  88. package/src/components/JfbBaseSavingDetail/Api.js +41 -0
  89. package/src/components/JfbBaseSavingDetail/Attr.js +70 -0
  90. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetail.vue +724 -0
  91. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetailLess.less +79 -0
  92. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetailMixin.js +30 -0
  93. package/src/components/JfbBaseSavingDetail/Mock.js +10 -0
  94. package/src/components/JfbBaseSavingDetail/components/echarts.min.js +26 -0
  95. package/src/components/JfbBaseSavingDetail/components/echarts.vue +254 -0
  96. package/src/components/JfbBaseSavingDetail/components/wx-canvas.js +105 -0
  97. package/src/components/JfbBaseShare/Api.js +20 -0
  98. package/src/components/JfbBaseShare/Attr.js +59 -0
  99. package/src/components/JfbBaseShare/JfbBaseShare.vue +282 -0
  100. package/src/components/JfbBaseShare/JfbBaseShareLess.less +79 -0
  101. package/src/components/JfbBaseShare/JfbBaseShareMixin.js +30 -0
  102. package/src/components/JfbBaseShare/Mock.js +16 -0
  103. package/src/components/JfbBaseSuccess/JfbBaseSuccess.vue +9 -3
  104. package/src/components/JfbBaseTfkSearch/ContentProduct.vue +12 -22
  105. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +12 -1
  106. package/src/components/JfbBaseTfkSearch/Mock.js +51 -3
  107. package/src/components/JfbBaseTfkSearch/listMixins.js +2 -1
  108. package/src/components/JfbBaseUserInfo/Attr.js +175 -11
  109. package/src/components/JfbBaseUserInfo/JfbBaseUserInfo.vue +341 -118
  110. package/src/components/JfbBaseUserOrder/Attr.js +16 -0
  111. package/src/components/JfbBaseUserOrder/JfbBaseUserOrder.vue +11 -2
  112. package/src/components/JfbBaseWithDrawAgain/Api.js +41 -0
  113. package/src/components/JfbBaseWithDrawAgain/Attr.js +92 -0
  114. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgain.vue +354 -0
  115. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainLess.less +79 -0
  116. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainMixin.js +30 -0
  117. package/src/components/JfbBaseWithDrawAgain/Mock.js +10 -0
  118. package/src/components/JfbBaseWithDrawRecord/Api.js +19 -0
  119. package/src/components/JfbBaseWithDrawRecord/Attr.js +79 -0
  120. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecord.vue +233 -0
  121. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordLess.less +79 -0
  122. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordMixin.js +30 -0
  123. package/src/components/JfbBaseWithDrawRecord/Mock.js +7 -0
  124. package/src/components/JfbBaseWithdraw/Api.js +48 -0
  125. package/src/components/JfbBaseWithdraw/Attr.js +328 -0
  126. package/src/components/JfbBaseWithdraw/JfbBaseWithdraw.vue +272 -0
  127. package/src/components/JfbBaseWithdraw/JfbBaseWithdrawLess.less +79 -0
  128. package/src/components/JfbBaseWithdraw/JfbBaseWithdrawMixin.js +30 -0
  129. package/src/components/JfbBaseWithdraw/Mock.js +7 -0
  130. package/src/components/JfbBaseWxAuthorize/JfbBaseWxAuthorize.vue +10 -0
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @desc 获取绝对路径完整地址
3
+ * @param @path
4
+ **/
5
+ //例如:https://image.jufubao.cn/20220501010108/image/bg/default_gonghui_bg.png
6
+ @basePath: 'business/';
7
+ @doMain: '//sandbox-img.jufubao.cn/';
8
+
9
+ .getBusinessImageUrl(@path, @size: 'size8') {
10
+ @url: "@{doMain}@{basePath}@{path}?x-oss-process=style/@{size}";
11
+ background-image: url(@url);
12
+ }
13
+
14
+ //start
15
+ .jfb-base-consump-code {
16
+ box-sizing: border-box;
17
+
18
+ &__body{
19
+ position: relative;
20
+ overflow: hidden;
21
+ z-index: 2
22
+ }
23
+
24
+ &.editx,&.editx:hover {
25
+ position: relative;
26
+ min-height: unit(100, rpx);
27
+ z-index: 3;
28
+ &::after {
29
+ border: 2rpx dashed blue;
30
+ content: " ";
31
+ position: absolute;
32
+ top:0;
33
+ left:0;
34
+ bottom:0;
35
+ right:0;
36
+ z-index: 4;
37
+ cursor: pointer;
38
+ }
39
+
40
+ }
41
+
42
+
43
+ &__edit {
44
+ cursor: pointer;
45
+ position: absolute;
46
+ right: unit(0, rpx);
47
+ top: unit(-52, rpx);
48
+ height: unit(50, rpx);
49
+ line-height: unit(50, rpx);
50
+ display: flex;
51
+ justify-content: center;
52
+ align-items: center;
53
+ background: rgba(0, 0, 0, .6);
54
+ border-radius: unit(10, rpx);
55
+ box-shadow: 0 0 10px rbga(0, 0, 0, 0.3);
56
+ color: #fff;
57
+ font-size: unit(22, rpx);
58
+
59
+ &-icon{
60
+ padding: 0 unit(20, rpx);
61
+ }
62
+
63
+ &.editx {
64
+ box-sizing: border-box;
65
+
66
+ }
67
+ }
68
+ }
69
+ //end
70
+
71
+
72
+ /**notPreview**/
73
+ .jfb-base-consump-code {
74
+ //&:before {
75
+ //content: " ";
76
+ //display: table;
77
+ //}
78
+ }
79
+ /**endNotPreview**/
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+
4
+ //@AttrImport
5
+ import Attr from "./Attr";
6
+ //@EndAttrImport
7
+
8
+
9
+ export default {
10
+ data() {
11
+ return {
12
+ //#ifdef H5
13
+
14
+ //@AttrData
15
+ Attr:{}, //对外开发编辑属性
16
+ //@EndAttrData
17
+
18
+ // #endif
19
+ cssRoot: 'jfb-base-consump-code'
20
+ }
21
+ },
22
+ created() {
23
+
24
+ //@AttrDataCreated
25
+ this.Attr = this.$xdUniHelper.customClone(Attr);
26
+ //@EndAttrDataCreated
27
+
28
+
29
+ },
30
+ }
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+
5
+ getConsumpCode: { "payment_code": "h.161.v71913434717194", "expiration_time": 1744971193, "expiration_sec": 60, "temp_order_id": "quickpay-5000358-DBeMnvrvInuINYeTqbCXw", "confirm_notice": false, "notice": "", "cash_order_id": "", "code_url": "\/common\/v1\/image\/qrcode?code_content=h.161.v71913434717194&size=240", "plus_discount": 0, "is_st_flow": "张三", "barcode_url": "\/common\/v1\/image\/barcode?code_content=h.161.v71913434717194", "shop_name": "六九豆浆饺子(石门市场店)", "request_id": "52ebf80c255ebcb5" },
6
+
7
+ getConsumpCodeScanStatus: { "status": "P", "message": "", "order_data": "{\"total_amount\":\"0\",\"pay_expire_time\":\"0\",\"message\":\"\",\"status\":\"P\",\"cash_order_id\":\"\",\"user_id\":\"5000358\",\"channel_order_id\":\"\",\"cart_order_id\":\"\"}", "seconds": 0, "request_id": "a54ac53ad31312d6" },
8
+
9
+ getConsumpListUserPayChannel: { "list": [{ "channel_provider_id": "1rRq74ACKJj5nIx5CgLpb", "channel_provider_name": "微信", "channel_code": "wxpay", "channel_logo": "https:\/\/jfb-public-images.oss-cn-qingdao.aliyuncs.com\/system-paychannel-logo-wxpay.png?x-oss-process=style\/200_200" }], "request_id": "e142d26c3d24c060" },
10
+
11
+ batchConsumpUseCardCreated: { "request_order_id": "quickpay-5000358-DBeMnvrvInuINYeTqbCXw", "request_id": "e17499843ece44b1" },
12
+
13
+ getConsumpAsyncSubmitStatus: { "hand_status": "U", "hand_status_msg": "异步下单中", "order_id": "", "pay_order_id": "", "need_pay_price": "0", "request_id": "fddff0af4216825d" },
14
+
15
+ getConsumpShopList: { "namespaces": [{ "label": "蛋糕(勿改)", "value": "cake" }], "brands": [{ "label": "测试1111", "value": 14, "icon": "\/uploads\/20230324\/3265afeb6a1f2a94f25c968a09275574.png" }, { "label": "品牌jls0519", "value": 100003, "icon": "\/uploads\/20230710\/44f645b06fe4da358f7b0ee06259afcd.jpg" }], "list": [{ "brand_id": 14, "brand_name": "测试1111", "brand_type": "MA", "business_status": "CLOSED", "consume_mode": ["SELL"], "consume_mode_name": "", "distance": "42km", "distance_conversion": "41.9km", "default_consume_type": "CV", "consume_type": ["CV"], "is_support_jhd": true, "address": "顺义区东六环与顺于路交叉口东150米", "province_name": "", "city_name": "", "area_name": "", "street_name": "", "phone": "(010)89430806", "resource_shop_id": 8003489, "exts_params": "eyJyZXNvdXJjZV9zaG9wX2lkIjo4MDAzNDg5LCJzaG9wX2lkIjoxMTUzNTIwLCJ2ZXJzaW9uIjoyfQ", "resource_shop_name": "六九豆浆饺子(石门市场店)", "shop_icon": "\/uploads\/20230324\/3265afeb6a1f2a94f25c968a09275574.png", "shop_id": 1153520, "shop_tags": [], "stars": 0, "time_slot_name": "-", "business_code": "", "longitude": "116.630756", "latitude": "40.134773" }, { "brand_id": 100003, "brand_name": "品牌jls0519", "brand_type": "MA", "business_status": "OPEN_BUSINESS", "consume_mode": ["SELL"], "consume_mode_name": "", "distance": "55km", "distance_conversion": "54.8km", "default_consume_type": "", "consume_type": [""], "is_support_jhd": false, "address": "东城区东直门街道东城区东直门内南大街4号(东直门内第一个十字路口东南角)", "province_name": "", "city_name": "", "area_name": "", "street_name": "", "phone": "64034959", "resource_shop_id": 8000077, "exts_params": "eyJyZXNvdXJjZV9zaG9wX2lkIjo4MDAwMDc3LCJzaG9wX2lkIjoxMDIzNTMwLCJ2ZXJzaW9uIjoyfQ", "resource_shop_name": "东直门[2]", "shop_icon": "\/uploads\/20230710\/44f645b06fe4da358f7b0ee06259afcd.jpg", "shop_id": 1023530, "shop_tags": [], "stars": 0, "time_slot_name": "09:00-18:00", "business_code": "", "longitude": "116.44373384708321", "latitude": "39.94636369444035" }, { "brand_id": 100003, "brand_name": "品牌jls0519", "brand_type": "MA", "business_status": "OPEN_BUSINESS", "consume_mode": ["SELL"], "consume_mode_name": "", "distance": "56km", "distance_conversion": "55.5km", "default_consume_type": "JHD", "consume_type": ["JHD"], "is_support_jhd": true, "address": "东城区建国门街道北京inn", "province_name": "", "city_name": "", "area_name": "", "street_name": "", "phone": "18843854566", "resource_shop_id": 8000078, "exts_params": "eyJyZXNvdXJjZV9zaG9wX2lkIjo4MDAwMDc4LCJzaG9wX2lkIjoxMDM3MjY2LCJ2ZXJzaW9uIjoyfQ", "resource_shop_name": "a加盟商-185", "shop_icon": "\/uploads\/20230710\/44f645b06fe4da358f7b0ee06259afcd.jpg", "shop_id": 1037266, "shop_tags": [], "stars": 0, "time_slot_name": "-", "business_code": "", "longitude": "116.43814998003319", "latitude": "39.9280800962547" }], "total_size": 3, "next_page_token": "", "request_id": "fa91f05cff4b280b" },
16
+
17
+ getConsumpSettleMainInfo: { "shop_id": 1037266, "shop_logo": "\/uploads\/20230710\/44f645b06fe4da358f7b0ee06259afcd.jpg", "shop_name": "a加盟商-185", "shop_brand": 100003, "shop_partner_name": "A加盟商-余额测试", "settle_tag_list": [{ "label": "幸福西饼、goodlike品牌", "value": 262, "price": 0, "price_yuan": "0.00", "is_static_price": false, "icon_url": "https:\/\/sandbox-img.jufubao.cn\/uploads\/20230728\/70f4dd90cdf2681e71ccf41d332d71a0.jpeg" }], "request_id": "a4a6cfe9db905597" },
18
+
19
+ getConsumpBaseUserInfo: { "user_name": "", "user_code": "WuE5Wotf08", "nickname": "张三", "real_name": "", "head_url": "https:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/AOqEDeiaxss8GR4jD1GicIgyqWSOZV8xN23Iw3DOzFjVBzTFbdv21X7u9ZASQJYsTNm07XSq6ebzp4K4qu1JT26qGZ0qYFMe1nHdQjFZib83Fg\/132", "province_code": "", "city_code": "", "province_name": "", "city_name": "", "sex": "1", "sex_name": "男", "birthday_date": "2025-04-16", "phone_number": "177****7945", "show_user_name": "张三", "user_level": "VIP", "vip_expire_time": 1776157293, "request_id": "f1dbb1c0bb8da893" },
20
+
21
+ addConsumpCashierTempOrderData: { "cart_order_id": "c08f38347ec8bc5b", "request_id": "779bf62e988587ce" }
22
+ }
@@ -24,7 +24,8 @@ export default {
24
24
  multiple: false,
25
25
  className: 'input80',
26
26
  list: [
27
- {label: '平铺', value: 'noraml'},
27
+ {label: '垂直', value: 'noraml'},
28
+ {label: '水平', value: 'horizontal'},
28
29
  {label: '悬浮', value: 'fixed'},
29
30
  ],
30
31
  inline: false,
@@ -53,6 +54,16 @@ export default {
53
54
  placeholder: '请输入自定义名称',
54
55
  className: 'input80',
55
56
  },
57
+ {
58
+ label: '自定义服务名称:',
59
+ ele: 'el-input',
60
+ type: 'text',
61
+ groupKey:'content',
62
+ valueKey: 'customName',
63
+ value: data['customName']? data['customName']: '我的服务',
64
+ placeholder: '请输入自定义服务名称',
65
+ className: 'input80',
66
+ },
56
67
  {
57
68
  label: '背景颜色:',
58
69
  ele: 'xd-color',
@@ -56,6 +56,22 @@
56
56
  :layoutInfo="layoutInfo"
57
57
  ></xd-fast-nav>
58
58
  </template>
59
+ <template v-if="is_layout === 'horizontal'">
60
+ <view :style="[horizontalStyle]">
61
+ <view class="x-line"></view>
62
+ <view class="fast-link__horizontal-title">{{customName}}</view>
63
+ <view class="fast-link__horizontal" v-if="list.length > 0">
64
+ <view :style="[horizontalItemStyle]" class="fast-link__horizontal-item" v-for="item in list" :key="item.key" @click="handleClick(item)">
65
+ <view class="fast-link__horizontal-item-icon" v-if="item.icon">
66
+ <xd-font-icon :color="iconColor" :size="item.size" :icon="item.icon"></xd-font-icon>
67
+ </view>
68
+ <view class="fast-link__horizontal-item-text" :style="{color: color, fontSize: fontSize + 'rpx'}">
69
+ <view>{{item.name}}</view>
70
+ </view>
71
+ </view>
72
+ </view>
73
+ </view>
74
+ </template>
59
75
  </view>
60
76
  </view>
61
77
  </template>
@@ -107,6 +123,8 @@
107
123
  margin: {},
108
124
  padding:{},
109
125
  rowSpacing: 20, //间距
126
+
127
+ customName: '我的服务'
110
128
  }
111
129
  },
112
130
  watch: {
@@ -117,6 +135,22 @@
117
135
  },
118
136
 
119
137
  computed: {
138
+ horizontalStyle(){
139
+ let border = 0;
140
+ if (this.is_border === 'Y') border = `${this.is_border_w}rpx solid ${this.is_border_c}`;
141
+ return {
142
+ margin: this.getMarginAndPadding(this.margin, 20),
143
+ padding:this.getMarginAndPadding(this.padding, 20),
144
+ border,
145
+ background: this.backgroundColor,
146
+ borderRadius: this.radius + 'rpx',
147
+ }
148
+ },
149
+ horizontalItemStyle(){
150
+ return {
151
+ marginBottom: this.rowSpacing + 'rpx',
152
+ }
153
+ },
120
154
  bodyStyle(){
121
155
  let margin = `${this.checkValue(this.margin.top, 20)}rpx`;
122
156
  margin = `${margin} ${this.checkValue(this.margin.right, 20)}rpx`;
@@ -199,6 +233,7 @@
199
233
  this.subColor = getContainerPropsValue(container, 'content.textSubColor', '#000');
200
234
  this.fontSubSize = getContainerPropsValue(container, 'content.fontSubSize', 24);
201
235
  this.isNotExpand = getContainerPropsValue(container, 'content.isNotExpand', 'Y');
236
+ this.customName = getContainerPropsValue(container, 'content.customName', '我的服务');
202
237
  if(this.is_layout === 'fixed') {
203
238
  this.listNave = this.list.map(item=>{
204
239
  let {appValue,path} = item.path
@@ -228,6 +263,14 @@
228
263
  return index < 3
229
264
  });
230
265
 
266
+ } else if(this.is_layout === 'horizontal'){
267
+ const remainder = this.list.length % 4;
268
+ if (remainder !== 0) {
269
+ const needed = 4 - remainder;
270
+ for (let i = 0; i < needed; i++) {
271
+ this.list.push({}); // 或者你可以插入其他默认值
272
+ }
273
+ }
231
274
  }
232
275
  },
233
276
  }
@@ -285,6 +328,29 @@
285
328
  align-items: center;
286
329
  }
287
330
  }
331
+ &__horizontal {
332
+ display: flex;
333
+ justify-content: space-around;
334
+ flex-wrap: wrap;
335
+ &-title {
336
+ color: #000000;
337
+ font-size: 26rpx;
338
+ font-weight: 500;
339
+ margin-bottom: 43rpx;
340
+ padding-left: 36rpx;
341
+ }
342
+ &-item {
343
+ display: flex;
344
+ flex-direction: column;
345
+ justify-content: center;
346
+ align-items: center;
347
+ box-sizing: border-box;
348
+ width: 25%;
349
+ &-icon {
350
+ margin-bottom: 22rpx;
351
+ }
352
+ }
353
+ }
288
354
  }
289
355
 
290
356
  </style>
@@ -56,6 +56,18 @@ export default {
56
56
  },
57
57
  classNmae: 'input80',
58
58
  },
59
+ {
60
+ label: '边框颜色:',
61
+ ele: 'xd-color',
62
+ valueKey: 'borderColor',
63
+ groupKey:'content',
64
+ value: data['borderColor'] || '',
65
+ placeholder: '请选择边框颜色',
66
+ setting: {
67
+ isAlpha: false
68
+ },
69
+ classNmae: 'input80',
70
+ },
59
71
  {
60
72
  label: '菜单文字颜色:',
61
73
  ele: 'xd-color',
@@ -19,6 +19,7 @@
19
19
  <view class="jfb-base-footer__body">
20
20
  <view :style="[bodyStyle]">
21
21
  <xd-footer-bar
22
+ class="footer-bar-deep"
22
23
  style="height:100%"
23
24
  v-if="list !== null"
24
25
  :height="height"
@@ -48,6 +49,9 @@
48
49
  import getServiceUrl from "@/common/getServiceUrl";
49
50
 
50
51
  export default {
52
+ //#ifdef MP-WEIXIN
53
+ options: { styleIsolation: 'shared' },
54
+ //#endif
51
55
  name: "JfbBaseFooter",
52
56
  components: {
53
57
  XdFontIcon,
@@ -61,6 +65,7 @@
61
65
  backgroundSize: '100% 100%',
62
66
  backgroundRepeat: 'no-repeat',
63
67
  backgroundPosition: 'top center',
68
+ '--border-color': this.borderColor
64
69
  }
65
70
 
66
71
  if(this.backgroundImage && this.backgroundImage.url) {
@@ -78,6 +83,7 @@
78
83
  footerBarKey: 'footerBarKey', //刷新
79
84
  baseUrl: '',
80
85
  backgroundImage: '',
86
+ borderColor: ''
81
87
  }
82
88
  },
83
89
  watch: {
@@ -197,6 +203,7 @@
197
203
  let bar = getContainerPropsValue(value, 'content.footer-setting', []);
198
204
  let imageIcons = getContainerPropsValue(value, 'content.footerSettingImage', []);
199
205
  this.backgroundImage = getContainerPropsValue(value, 'content.backgroundImage', '');
206
+ this.borderColor = getContainerPropsValue(value, 'content.borderColor', '#eee');
200
207
  this.list = {
201
208
  bgColor: getContainerPropsValue(value, 'content.bgColor', '#fff'),
202
209
  bodyStyle: this.bodyStyle,
@@ -222,6 +229,12 @@
222
229
 
223
230
  <style scoped lang="less">
224
231
  @import "./JfbBaseFooterLess.less";
232
+ .footer-bar-deep {
233
+ ::v-deep .xd-footer-tabbar__border {
234
+ border-color: var(--border-color);
235
+ }
236
+ }
237
+
225
238
 
226
239
  .jfb-base-footer {
227
240
 
@@ -300,6 +300,28 @@ export default {
300
300
  groupKey:'style',
301
301
  hidden: true,
302
302
  },
303
+ {
304
+ label: "是否展示二维码",
305
+ ele: "xd-radio",
306
+ valueKey: "showQrcode",
307
+ value: data.showQrcode || "N",
308
+ list: [
309
+ {label: "不显示", value: "N"},
310
+ {label: "显示", value: "Y"}
311
+ ],
312
+ groupKey:'content',
313
+ },
314
+ {
315
+ label: "是否展示扫一扫",
316
+ ele: "xd-radio",
317
+ valueKey: "showScan",
318
+ value: data.showScan || "N",
319
+ list: [
320
+ {label: "不显示", value: "N"},
321
+ {label: "显示", value: "Y"}
322
+ ],
323
+ groupKey:'content',
324
+ },
303
325
  {
304
326
  label: "是否展示快捷入口",
305
327
  ele: "xd-radio",
@@ -356,6 +378,40 @@ export default {
356
378
  placeholder: '请选择快捷入口背景颜色',
357
379
  classNmae: 'input80',
358
380
  },
381
+ data.showQrcode === 'Y' && {
382
+ ele: 'title',
383
+ label: '二维码样式设置',
384
+ size: 'small',
385
+ groupKey:'style',
386
+ },
387
+ data.showQrcode === 'Y' && {
388
+ label: "二维码大小:",
389
+ ele: "el-input",
390
+ valueKey: "qrcodeSize",
391
+ value: data.qrcodeSize || 32,
392
+ type: "number",
393
+ groupKey: "style",
394
+ },
395
+ data.showQrcode === 'Y' && {
396
+ label: "二维码图标颜色:",
397
+ ele: 'xd-color',
398
+ valueKey: "qrCodeColor",
399
+ groupKey:'style',
400
+ value: data.qrCodeColor || '',
401
+ },
402
+ data.showScan === 'Y' && {
403
+ ele: "title",
404
+ label: "扫一扫样式设置",
405
+ size: "small",
406
+ groupKey: "style",
407
+ },
408
+ data.showScan === 'Y' && {
409
+ label: "扫一扫图标颜色:",
410
+ ele: 'xd-color',
411
+ valueKey: "scanIconColor",
412
+ value: data.scanIconColor || '',
413
+ groupKey:'style',
414
+ },
359
415
  {
360
416
  label: '是否有边框:',
361
417
  ele: 'xd-radio',
@@ -429,6 +485,32 @@ export default {
429
485
  notice:'<div><span style="color:red">客服类型</span>不需要配置</div>',
430
486
  inline: false,
431
487
  },
488
+ {
489
+ label: '二维码跳转链接:',
490
+ ele: 'xd-select-pages-path',
491
+ valueKey: 'qrcodePath',
492
+ groupKey:'advanced',
493
+ placeholder: '选择二维码跳转链接',
494
+ value: data['qrcodePath'] || null,
495
+ setting: {
496
+ router: XdBus.getParentApi('getPagesTree'),
497
+ },
498
+ inline: false,
499
+ hidden: data.showQrcode === 'N'
500
+ },
501
+ {
502
+ label: "扫一扫跳转链接:",
503
+ ele: 'xd-select-pages-path',
504
+ valueKey: "scanPath",
505
+ groupKey:'advanced',
506
+ placeholder: '选择扫一扫跳转链接',
507
+ value: data['scanPath'] || null,
508
+ setting: {
509
+ router: XdBus.getParentApi('getPagesTree'),
510
+ },
511
+ inline: false,
512
+ hidden: data.showScan === 'N'
513
+ },
432
514
  {
433
515
  label: '',
434
516
  ele: 'slot',
@@ -60,6 +60,9 @@
60
60
  :key="showLocationKey"
61
61
  ></xd-city-show-api>
62
62
  </view>
63
+ <view v-if="showScan==='Y'" class="scan_in" @click.stop="handleScanClick">
64
+ <xd-font-icon :size="32" :color="scanIconColor" icon="iconsaoma1"></xd-font-icon>
65
+ </view>
63
66
  <xd-font-icon v-if="searchIconPosition==='left'" :icon="icon" :color="iconColor" size="32"/>
64
67
  <input
65
68
  v-if="useSearch==='Y'"
@@ -78,6 +81,9 @@
78
81
  @click.stop="doSearch"
79
82
  >{{searchBtnText || '搜索'}}</view>
80
83
  </view>
84
+ <view v-if="showQrcode==='Y'" class="qr_code" @click.stop="handleQrCodeClick">
85
+ <xd-font-icon :size="qrcodeSize" icon="iconerweima" :color="qrCodeColor"></xd-font-icon>
86
+ </view>
81
87
  <view v-if="showSearchBtn==='Y' && searchBtnPosition==='out'"
82
88
  class="search_btn_out"
83
89
  :style="[searchBtnStyle]"
@@ -196,6 +202,13 @@
196
202
  searchBoxRadius: 30,
197
203
  bottomBorder: "",
198
204
  inputBorder: "",
205
+ showQrcode: "",
206
+ qrcodeSize: 32,
207
+ qrcodePath: "",
208
+ qrCodeColor: "",
209
+ showScan: "",
210
+ scanIconColor: "",
211
+ scanPath: "",
199
212
  }
200
213
  },
201
214
  watch: {
@@ -226,7 +239,11 @@
226
239
  this.useSearch = getContainerPropsValue(container, "content.useSearch", "Y");
227
240
  this.searchPagePath = getContainerPropsValue(container, "content.searchPagePath", {value:""}).value;
228
241
  this.choseCityPath = getContainerPropsValue(container, "content.choseCityPath", {value:""}).value;
229
-
242
+ this.showQrcode = getContainerPropsValue(container, "content.showQrcode", "");
243
+ this.qrcodeSize = getContainerPropsValue(container, "content.qrcodeSize", 32);
244
+ this.qrCodeColor = getContainerPropsValue(container, "content.qrCodeColor", "#333");
245
+ this.showScan = getContainerPropsValue(container, "content.showScan", "");
246
+ this.scanIconColor = getContainerPropsValue(container, "content.scanIconColor", "#333");
230
247
 
231
248
  //基础
232
249
  this.backgroundColor = getContainerPropsValue(container, "content.backgroundColor", '#fff');
@@ -263,6 +280,8 @@
263
280
  this.showQuickEntry = getContainerPropsValue(container, 'content.showQuickEntry', "N");
264
281
  this.quickEntryType = getContainerPropsValue(container, 'content.quickEntryType', "");
265
282
  this.quickEntryPath = getContainerPropsValue(container, 'content.quickEntryPath', {value:""}).value;
283
+ this.qrcodePath = getContainerPropsValue(container, 'content.qrcodePath', {value:""}).value;
284
+ this.scanPath = getContainerPropsValue(container, 'content.scanPath', {value:""}).value;
266
285
 
267
286
  let name , logo, platform_logo;
268
287
  if (this.projectAttr['site_name']) name = this.projectAttr['site_name'];
@@ -301,6 +320,16 @@
301
320
  })
302
321
  }
303
322
  },
323
+ handleQrCodeClick(){
324
+ this.$xdUniHelper.navigateTo({
325
+ url: this.qrcodePath
326
+ })
327
+ },
328
+ handleScanClick(){
329
+ this.$xdUniHelper.navigateTo({
330
+ url: this.scanPath
331
+ })
332
+ },
304
333
 
305
334
  /***
306
335
  * @description 定位完成事件
@@ -446,6 +475,20 @@
446
475
  padding: 0;
447
476
  }
448
477
  }
478
+ .scan_in{
479
+ position: relative;
480
+ padding-right: 28rpx;
481
+ margin-right: 20rpx;
482
+ &::before{
483
+ content: " ";
484
+ position: absolute;
485
+ width: 2rpx;
486
+ height: 100%;
487
+ background-color: #CCCCCC;
488
+ right: -0rpx;
489
+ top: 0rpx;
490
+ }
491
+ }
449
492
  .search_input{
450
493
  flex: 1;
451
494
  text-align: left;
@@ -479,6 +522,9 @@
479
522
  align-items: center;
480
523
  justify-content: center;
481
524
  }
525
+ .qr_code{
526
+ margin-left: 16rpx;
527
+ }
482
528
  }
483
529
  }
484
530
  }
@@ -312,6 +312,28 @@ export default {
312
312
  groupKey:'style',
313
313
  hidden: true,
314
314
  },
315
+ {
316
+ label: "是否展示二维码",
317
+ ele: "xd-radio",
318
+ valueKey: "showQrcode",
319
+ value: data.showQrcode || "N",
320
+ list: [
321
+ {label: "不显示", value: "N"},
322
+ {label: "显示", value: "Y"}
323
+ ],
324
+ groupKey:'content',
325
+ },
326
+ {
327
+ label: "是否展示扫一扫",
328
+ ele: "xd-radio",
329
+ valueKey: "showScan",
330
+ value: data.showScan || "N",
331
+ list: [
332
+ {label: "不显示", value: "N"},
333
+ {label: "显示", value: "Y"}
334
+ ],
335
+ groupKey:'content',
336
+ },
315
337
  {
316
338
  label: "是否展示快捷入口",
317
339
  ele: "xd-radio",
@@ -368,6 +390,40 @@ export default {
368
390
  placeholder: '请选择快捷入口背景颜色',
369
391
  classNmae: 'input80',
370
392
  },
393
+ data.showQrcode === 'Y' && {
394
+ ele: 'title',
395
+ label: '二维码样式设置',
396
+ size: 'small',
397
+ groupKey:'style',
398
+ },
399
+ data.showQrcode === 'Y' && {
400
+ label: "二维码大小:",
401
+ ele: "el-input",
402
+ valueKey: "qrcodeSize",
403
+ value: data.qrcodeSize || 32,
404
+ type: "number",
405
+ groupKey: "style",
406
+ },
407
+ data.showQrcode === 'Y' && {
408
+ label: "二维码图标颜色:",
409
+ ele: 'xd-color',
410
+ valueKey: "qrCodeColor",
411
+ groupKey:'style',
412
+ value: data.qrCodeColor || '',
413
+ },
414
+ data.showScan === 'Y' && {
415
+ ele: "title",
416
+ label: "扫一扫样式设置",
417
+ size: "small",
418
+ groupKey: "style",
419
+ },
420
+ data.showScan === 'Y' && {
421
+ label: "扫一扫图标颜色:",
422
+ ele: 'xd-color',
423
+ valueKey: "scanIconColor",
424
+ value: data.scanIconColor || '',
425
+ groupKey:'style',
426
+ },
371
427
  {
372
428
  label: '是否有边框:',
373
429
  ele: 'xd-radio',
@@ -441,6 +497,32 @@ export default {
441
497
  notice:'<div><span style="color:red">客服类型</span>不需要配置</div>',
442
498
  inline: false,
443
499
  },
500
+ {
501
+ label: '二维码跳转链接:',
502
+ ele: 'xd-select-pages-path',
503
+ valueKey: 'qrcodePath',
504
+ groupKey:'advanced',
505
+ placeholder: '选择二维码跳转链接',
506
+ value: data['qrcodePath'] || null,
507
+ setting: {
508
+ router: XdBus.getParentApi('getPagesTree'),
509
+ },
510
+ inline: false,
511
+ hidden: data.showQrcode === 'N'
512
+ },
513
+ {
514
+ label: "扫一扫跳转链接:",
515
+ ele: 'xd-select-pages-path',
516
+ valueKey: "scanPath",
517
+ groupKey:'advanced',
518
+ placeholder: '选择扫一扫跳转链接',
519
+ value: data['scanPath'] || null,
520
+ setting: {
521
+ router: XdBus.getParentApi('getPagesTree'),
522
+ },
523
+ inline: false,
524
+ hidden: data.showScan === 'N'
525
+ },
444
526
  {
445
527
  label: '',
446
528
  ele: 'slot',