jufubao-base 1.0.243-beta201 → 1.0.243

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 (155) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseAfterOrderList/Attr.js +0 -13
  3. package/src/components/JfbBaseAfterOrderList/JfbBaseAfterOrderList.vue +1 -33
  4. package/src/components/JfbBaseBalance/Api.js +46 -0
  5. package/src/components/JfbBaseBalance/Attr.js +316 -0
  6. package/src/components/JfbBaseBalance/JfbBaseBalance.vue +336 -0
  7. package/src/components/{JfbBaseAfterSales/JfbBaseAfterSalesLess.less → JfbBaseBalance/JfbBaseBalanceLess.less} +2 -2
  8. package/src/components/{JfbBaseAfterSales/JfbBaseAfterSalesMixin.js → JfbBaseBalance/JfbBaseBalanceMixin.js} +1 -1
  9. package/src/components/JfbBaseBalance/Mock.js +9 -0
  10. package/src/components/JfbBaseCodeOpenVip/Api.js +35 -0
  11. package/src/components/JfbBaseCodeOpenVip/Attr.js +281 -0
  12. package/src/components/JfbBaseCodeOpenVip/JfbBaseCodeOpenVip.vue +251 -0
  13. package/src/components/{JfbBaseAfterSalesFast/JfbBaseAfterSalesFastLess.less → JfbBaseCodeOpenVip/JfbBaseCodeOpenVipLess.less} +2 -2
  14. package/src/components/{JfbBaseAfterSalesList/JfbBaseAfterSalesListMixin.js → JfbBaseCodeOpenVip/JfbBaseCodeOpenVipMixin.js} +1 -1
  15. package/src/components/JfbBaseCodeOpenVip/Mock.js +13 -0
  16. package/src/components/JfbBaseConsumpCode/Api.js +133 -0
  17. package/src/components/JfbBaseConsumpCode/Attr.js +74 -0
  18. package/src/components/JfbBaseConsumpCode/JfbBaseConsumpCode.vue +1109 -0
  19. package/src/components/{JfbBaseAfterSalesList/JfbBaseAfterSalesListLess.less → JfbBaseConsumpCode/JfbBaseConsumpCodeLess.less} +2 -2
  20. package/src/components/{JfbBaseAfterSalesFast/JfbBaseAfterSalesFastMixin.js → JfbBaseConsumpCode/JfbBaseConsumpCodeMixin.js} +1 -1
  21. package/src/components/JfbBaseConsumpCode/Mock.js +22 -0
  22. package/src/components/JfbBaseFastLink/Attr.js +12 -1
  23. package/src/components/JfbBaseFastLink/JfbBaseFastLink.vue +66 -0
  24. package/src/components/JfbBaseFooter/Attr.js +12 -0
  25. package/src/components/JfbBaseFooter/JfbBaseFooter.vue +13 -0
  26. package/src/components/JfbBaseHeader/Attr.js +82 -0
  27. package/src/components/JfbBaseHeader/JfbBaseHeader.vue +47 -1
  28. package/src/components/JfbBaseHeaderColumn/Attr.js +82 -0
  29. package/src/components/JfbBaseHeaderColumn/JfbBaseHeaderColumn.vue +48 -2
  30. package/src/components/JfbBaseLogin/JfbBaseLogin.vue +12 -0
  31. package/src/components/JfbBaseNoticeDialog/Api.js +1 -1
  32. package/src/components/JfbBaseNoticeDialog/Attr.js +26 -0
  33. package/src/components/JfbBaseNoticeDialog/JfbBaseNoticeDialog.vue +38 -15
  34. package/src/components/JfbBaseNoticeGroup/Api.js +23 -0
  35. package/src/components/JfbBaseNoticeGroup/Attr.js +237 -0
  36. package/src/components/JfbBaseNoticeGroup/JfbBaseNoticeGroup.vue +174 -0
  37. package/src/components/{JfbBaseAfterSalesDetail/JfbBaseAfterSalesDetailLess.less → JfbBaseNoticeGroup/JfbBaseNoticeGroupLess.less} +2 -2
  38. package/src/components/{JfbBaseAfterSalesDetail/JfbBaseAfterSalesDetailMixin.js → JfbBaseNoticeGroup/JfbBaseNoticeGroupMixin.js} +1 -1
  39. package/src/components/JfbBaseNoticeGroup/Mock.js +13 -0
  40. package/src/components/JfbBaseOpenVip/Api.js +39 -0
  41. package/src/components/JfbBaseOpenVip/Attr.js +331 -0
  42. package/src/components/JfbBaseOpenVip/JfbBaseOpenVip.vue +457 -0
  43. package/src/components/JfbBaseOpenVip/JfbBaseOpenVipLess.less +79 -0
  44. package/src/components/JfbBaseOpenVip/JfbBaseOpenVipMixin.js +30 -0
  45. package/src/components/JfbBaseOpenVip/Mock.js +7 -0
  46. package/src/components/JfbBaseOpenVip/XdVipList.vue +131 -0
  47. package/src/components/JfbBaseOpenVipCard/Api.js +58 -0
  48. package/src/components/JfbBaseOpenVipCard/Attr.js +48 -0
  49. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCard.vue +111 -0
  50. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCardLess.less +79 -0
  51. package/src/components/JfbBaseOpenVipCard/JfbBaseOpenVipCardMixin.js +30 -0
  52. package/src/components/JfbBaseOpenVipCard/Mock.js +13 -0
  53. package/src/components/JfbBaseOpenVipDetail/Api.js +35 -0
  54. package/src/components/JfbBaseOpenVipDetail/Attr.js +37 -0
  55. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetail.vue +234 -0
  56. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetailLess.less +79 -0
  57. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetailMixin.js +30 -0
  58. package/src/components/JfbBaseOpenVipDetail/Mock.js +15 -0
  59. package/src/components/JfbBaseOrderDetail/Attr.js +0 -36
  60. package/src/components/JfbBaseOrderDetail/JfbBaseOrderDetail.vue +178 -39
  61. package/src/components/JfbBaseOrderList/Attr.js +0 -36
  62. package/src/components/JfbBaseOrderList/JfbBaseOrderList.vue +0 -30
  63. package/src/components/JfbBaseOrderList/Mock.js +1 -1
  64. package/src/components/JfbBaseOrderList/XdTfkOrderItem.vue +5 -17
  65. package/src/components/JfbBasePay/Attr.js +52 -0
  66. package/src/components/JfbBasePay/JfbBasePay.vue +23 -6
  67. package/src/components/JfbBasePay/Mock.js +0 -9
  68. package/src/components/JfbBasePersonalData/Api.js +26 -0
  69. package/src/components/JfbBasePersonalData/Attr.js +13 -0
  70. package/src/components/JfbBasePersonalData/JfbBasePersonalData.vue +200 -0
  71. package/src/components/JfbBasePersonalData/JfbBasePersonalDataLess.less +79 -0
  72. package/src/components/JfbBasePersonalData/JfbBasePersonalDataMixin.js +30 -0
  73. package/src/components/JfbBasePersonalData/Mock.js +13 -0
  74. package/src/components/JfbBasePhoneLogin/JfbBasePhoneLogin.vue +11 -1
  75. package/src/components/JfbBasePointsCard/Api.js +18 -0
  76. package/src/components/JfbBasePointsCard/Attr.js +187 -0
  77. package/src/components/JfbBasePointsCard/JfbBasePointsCard.vue +212 -0
  78. package/src/components/JfbBasePointsCard/JfbBasePointsCardLess.less +79 -0
  79. package/src/components/JfbBasePointsCard/JfbBasePointsCardMixin.js +30 -0
  80. package/src/components/JfbBasePointsCard/Mock.js +5 -0
  81. package/src/components/JfbBasePointsDetail/Api.js +48 -0
  82. package/src/components/JfbBasePointsDetail/Attr.js +305 -0
  83. package/src/components/JfbBasePointsDetail/JfbBasePointsDetail.vue +267 -0
  84. package/src/components/JfbBasePointsDetail/JfbBasePointsDetailLess.less +79 -0
  85. package/src/components/JfbBasePointsDetail/JfbBasePointsDetailMixin.js +30 -0
  86. package/src/components/JfbBasePointsDetail/Mock.js +6 -0
  87. package/src/components/JfbBasePoster/Attr.js +1 -1
  88. package/src/components/JfbBasePosterBigSmall/JfbBasePosterBigSmall.vue +2 -2
  89. package/src/components/JfbBasePosterGroup/Api.js +22 -0
  90. package/src/components/JfbBasePosterGroup/Attr.js +156 -0
  91. package/src/components/JfbBasePosterGroup/JfbBasePosterGroup.vue +268 -0
  92. package/src/components/JfbBasePosterGroup/JfbBasePosterGroupLess.less +79 -0
  93. package/src/components/JfbBasePosterGroup/JfbBasePosterGroupMixin.js +30 -0
  94. package/src/components/JfbBasePosterGroup/Mock.js +13 -0
  95. package/src/components/JfbBaseSavingDetail/Api.js +41 -0
  96. package/src/components/JfbBaseSavingDetail/Attr.js +70 -0
  97. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetail.vue +724 -0
  98. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetailLess.less +79 -0
  99. package/src/components/JfbBaseSavingDetail/JfbBaseSavingDetailMixin.js +30 -0
  100. package/src/components/JfbBaseSavingDetail/Mock.js +10 -0
  101. package/src/components/JfbBaseSavingDetail/components/echarts.min.js +26 -0
  102. package/src/components/JfbBaseSavingDetail/components/echarts.vue +254 -0
  103. package/src/components/JfbBaseSavingDetail/components/wx-canvas.js +105 -0
  104. package/src/components/JfbBaseShare/Api.js +20 -0
  105. package/src/components/JfbBaseShare/Attr.js +59 -0
  106. package/src/components/JfbBaseShare/JfbBaseShare.vue +282 -0
  107. package/src/components/JfbBaseShare/JfbBaseShareLess.less +79 -0
  108. package/src/components/JfbBaseShare/JfbBaseShareMixin.js +30 -0
  109. package/src/components/JfbBaseShare/Mock.js +16 -0
  110. package/src/components/JfbBaseSuccess/JfbBaseSuccess.vue +9 -3
  111. package/src/components/JfbBaseTfkSearch/ContentProduct.vue +12 -22
  112. package/src/components/JfbBaseTfkSearch/JfbBaseTfkSearch.vue +12 -1
  113. package/src/components/JfbBaseTfkSearch/Mock.js +51 -3
  114. package/src/components/JfbBaseTfkSearch/listMixins.js +2 -1
  115. package/src/components/JfbBaseUserInfo/Attr.js +175 -11
  116. package/src/components/JfbBaseUserInfo/JfbBaseUserInfo.vue +337 -115
  117. package/src/components/JfbBaseUserOrder/Attr.js +16 -0
  118. package/src/components/JfbBaseUserOrder/JfbBaseUserOrder.vue +11 -2
  119. package/src/components/JfbBaseWithDrawAgain/Api.js +41 -0
  120. package/src/components/JfbBaseWithDrawAgain/Attr.js +92 -0
  121. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgain.vue +354 -0
  122. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainLess.less +79 -0
  123. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainMixin.js +30 -0
  124. package/src/components/JfbBaseWithDrawAgain/Mock.js +10 -0
  125. package/src/components/JfbBaseWithDrawRecord/Api.js +19 -0
  126. package/src/components/JfbBaseWithDrawRecord/Attr.js +79 -0
  127. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecord.vue +233 -0
  128. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordLess.less +79 -0
  129. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordMixin.js +30 -0
  130. package/src/components/JfbBaseWithDrawRecord/Mock.js +7 -0
  131. package/src/components/JfbBaseWithdraw/Api.js +48 -0
  132. package/src/components/JfbBaseWithdraw/Attr.js +328 -0
  133. package/src/components/JfbBaseWithdraw/JfbBaseWithdraw.vue +272 -0
  134. package/src/components/JfbBaseWithdraw/JfbBaseWithdrawLess.less +79 -0
  135. package/src/components/JfbBaseWithdraw/JfbBaseWithdrawMixin.js +30 -0
  136. package/src/components/JfbBaseWithdraw/Mock.js +7 -0
  137. package/src/components/JfbBaseWxAuthorize/JfbBaseWxAuthorize.vue +10 -0
  138. package/src/components/JfbBaseAfterSales/Api.js +0 -58
  139. package/src/components/JfbBaseAfterSales/Attr.js +0 -25
  140. package/src/components/JfbBaseAfterSales/JfbBaseAfterSales.vue +0 -550
  141. package/src/components/JfbBaseAfterSales/Mock.js +0 -13
  142. package/src/components/JfbBaseAfterSales/refundOrderInfo.vue +0 -150
  143. package/src/components/JfbBaseAfterSalesDetail/Api.js +0 -41
  144. package/src/components/JfbBaseAfterSalesDetail/Attr.js +0 -25
  145. package/src/components/JfbBaseAfterSalesDetail/JfbBaseAfterSalesDetail.vue +0 -538
  146. package/src/components/JfbBaseAfterSalesDetail/Mock.js +0 -60
  147. package/src/components/JfbBaseAfterSalesDetail/secProd.vue +0 -58
  148. package/src/components/JfbBaseAfterSalesFast/Api.js +0 -30
  149. package/src/components/JfbBaseAfterSalesFast/Attr.js +0 -32
  150. package/src/components/JfbBaseAfterSalesFast/JfbBaseAfterSalesFast.vue +0 -297
  151. package/src/components/JfbBaseAfterSalesFast/Mock.js +0 -38
  152. package/src/components/JfbBaseAfterSalesList/Api.js +0 -40
  153. package/src/components/JfbBaseAfterSalesList/Attr.js +0 -107
  154. package/src/components/JfbBaseAfterSalesList/JfbBaseAfterSalesList.vue +0 -463
  155. package/src/components/JfbBaseAfterSalesList/Mock.js +0 -362
@@ -0,0 +1,1109 @@
1
+ <template>
2
+ <view class="jfb-base-consump-code" @click="handleEditxSelect" :class="{ editx : isEditx && active }">
3
+ <!--#ifdef H5-->
4
+ <view class="jfb-base-consump-code__edit" :class="{ editx : isEditx && active }" v-if="isEditx && active">
5
+ <view class="jfb-base-consump-code__edit-icon" @click="delEdit">删除</view>
6
+ </view>
7
+ <!-- #endif -->
8
+ <view v-if="!showMask" class="jfb-base-consump-code__body" :style="{
9
+ minHeight: layoutInfo.bodyMinHeightRpx + 'rpx',
10
+ background: 'url(https://img.js.design/assets/img/678f560988986af5661c2876.png#a3be067970d2c78a56d08024581a9ca0)',
11
+ backgroundSize: '100% 100%'
12
+ }">
13
+ <view class="content-box">
14
+ <view class="logo-box">
15
+ <image :src="userInfo['head_url']" class="logo"></image>
16
+ </view>
17
+ <view v-if="isFlow">
18
+ <view @click="handleToShop" class="shop">
19
+ <view>{{shopName}}</view>
20
+ <XdFontIcon size="20" icon="iconxiangyou_xian"></XdFontIcon>
21
+ </view>
22
+ <view class="verification-item">
23
+ <view class="verification-item-label">提货标签</view>
24
+ <view class="verification-item-tags">
25
+ <view :style="{color:tag_id===item.value?mainColor:'',borderColor: tag_id===item.value?mainColor:''}"
26
+ v-for="(item,index) in settle_tag_list" :key="index" @click="handlerTagRadio(item)">{{item.label}}
27
+ </view>
28
+ </view>
29
+ <view class="nodata" v-if="settle_tag_list_status">结算标签为空,请联系店员设置后重试</view>
30
+ </view>
31
+ <view class="verification-item">
32
+ <view class="verification-item-label">提货点数</view>
33
+ <view class="verification-item-input">
34
+ <input v-model="total_price" @input="(value)=>handlerPrice(value)" type="text">
35
+ <xd-number v-if="curTag.is_static_price" class="xd-number" :min="1" :max="999" v-model="num"
36
+ @change="handleNumberChange"></xd-number>
37
+ <view :style="{color:mainColor}" class="tip">*提货点数请咨询店员,提货成功后无法退换</view>
38
+ </view>
39
+ </view>
40
+ <XdButton v-if="btnDisabled" style="margin-top: 200rpx;display:block" width="260rpx" type="primary" disabled>
41
+ 下一步</XdButton>
42
+ <XdButton v-else style="margin-top: 200rpx;display:block" width="260rpx" type="primary" @click="toPayOrder">
43
+ 下一步</XdButton>
44
+ <view v-if="plusDiscount">
45
+ <view class="vip" v-if="is_vip==='N'">
46
+ <view class="vip-title">
47
+ <view class="vip-title-left">PLUS会员专享</view>
48
+ <view class="vip-title-right">
49
+ <text>{{plusDiscount/1000}}</text>折
50
+ </view>
51
+ </view>
52
+ <view class="vip-open" @click="handleToOpen">
53
+ <xd-font-icon color="#FCBF28" size="20" icon="iconPLUShuiyuan"></xd-font-icon>
54
+ <text>立即开通</text>
55
+ <xd-font-icon size="20" icon="iconxiangyou_xian"></xd-font-icon>
56
+ </view>
57
+ </view>
58
+ <view class="is-vip" v-else>
59
+ <text>PLUS</text>会员消费专享 <text>{{plusDiscount/1000}}</text>折
60
+ </view>
61
+ </view>
62
+ </view>
63
+ <view v-else>
64
+ <view>
65
+ <view @click="handleToShop" class="shop">
66
+ <view>{{shopName}}</view>
67
+ <XdFontIcon size="20" icon="iconxiangyou_xian"></XdFontIcon>
68
+ </view>
69
+ <image mode="aspectFit" class="bar-code" :src="barcode_url">
70
+ </image>
71
+ <view class="bar-code-text">{{barCode}}</view>
72
+ <image mode="aspectFit" class="qrcode" :src="code_url">
73
+ </image>
74
+ <view class="code-refresh">{{expiration_sec_str}}后自动更新</view>
75
+ <view v-if="plusDiscount">
76
+ <view class="vip" v-if="is_vip==='N'">
77
+ <view class="vip-title">
78
+ <view class="vip-title-left">PLUS会员专享</view>
79
+ <view class="vip-title-right">
80
+ <text>{{plusDiscount/1000}}</text>折
81
+ </view>
82
+ </view>
83
+ <view class="vip-open" @click="handleToOpen">
84
+ <xd-font-icon color="#FCBF28" size="20" icon="iconPLUShuiyuan"></xd-font-icon>
85
+ <text>立即开通</text>
86
+ <xd-font-icon size="20" icon="iconxiangyou_xian"></xd-font-icon>
87
+ </view>
88
+ </view>
89
+ <view class="is-vip" v-else>
90
+ <text>PLUS</text>会员消费专享 <text>{{plusDiscount/1000}}</text>折
91
+ </view>
92
+ </view>
93
+ </view>
94
+ </view>
95
+
96
+ </view>
97
+ </view>
98
+ <view :style="{
99
+ minHeight: layoutInfo.bodyMinHeightRpx + 'rpx',
100
+ background: 'url(https://img1-b.jufubao.cn/uploads/20250507/1a97fda8cd8804f9bcf984da10e0a666.png?x-oss-process=style/size8)',
101
+ backgroundSize: '100% 100%'
102
+ }" v-else>
103
+ <view
104
+ style="display: flex;justify-content: center;align-items: center;height: 100vh;font-size: 30rpx;color: #333">
105
+ {{tip}}</view>
106
+ </view>
107
+ <XdDialog width="80%" :show.sync="showDialog" :showClose="false" :showTitle="true">
108
+ <view class="dialog-title" slot="title">门店确认</view>
109
+ <view class="dialog-content">
110
+ <view>当前门店:<span :style="{color:mainColor}">{{shopName}}</span></view>
111
+ <view>请确认您是否在当前门店中</view>
112
+ </view>
113
+ <view class="dialog-btns" slot="btn">
114
+ <XdButton @click="handleToShop" bgColor="#EEEEEE" color="#888888" size="small" type="info">更换门店</XdButton>
115
+ <XdButton @click="handleConfirm" size="small" type="primary">确认</XdButton>
116
+ </view>
117
+ </XdDialog>
118
+ <XdDialog class="location-dialog-title" width="80%" :show.sync="showLocationDialog" :showClose="false"
119
+ :showTitle="true">
120
+ <view slot="title">
121
+ <xd-font-icon icon="icondingweixiao" color="#999999" size="60"></xd-font-icon>
122
+ <text style="font-size: 32rpx;color: #333;margin-top: 12rpx;">定位请求</text>
123
+ </view>
124
+ <view class="location-dialog-content">
125
+ <view>为了给您提供更好的服务需要获取您的位置信息</view>
126
+ </view>
127
+ <view class="dialog-btns" slot="btn">
128
+ <XdButton @click="showLocationDialog=false" bgColor="#EEEEEE" color="#888888" size="small" type="info">取消
129
+ </XdButton>
130
+ <XdButton @click="handleToCity" size="small" type="primary">允许</XdButton>
131
+ </view>
132
+ </XdDialog>
133
+ </view>
134
+ </template>
135
+
136
+ <script>
137
+ import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
138
+ import XdDialog from "@/components/XdDailog/XdDailog";
139
+ import XdButton from "@/components/XdButton/XdButton";
140
+ import { jfbRootExec } from "@/utils/xd.event";
141
+ import JfbBaseConsumpCodeMixin from "./JfbBaseConsumpCodeMixin";
142
+ import getServiceUrl from "@/common/getServiceUrl";
143
+ import { getContainerPropsValue, isWechat, isWechatTools } from "@/utils/xd.base";
144
+ import componentsMixins from "@/mixins/componentsMixins";
145
+ import extsMixins from "@/mixins/extsMixins";
146
+ import { mapState } from 'vuex';
147
+
148
+ export default {
149
+ //#ifdef MP-WEIXIN
150
+ options: { styleIsolation: 'shared' },
151
+ //#endif
152
+ name: "JfbBaseConsumpCode",
153
+ components: {
154
+ XdFontIcon,
155
+ XdDialog,
156
+ XdButton
157
+ },
158
+ mixins: [
159
+ componentsMixins, extsMixins, JfbBaseConsumpCodeMixin
160
+ ],
161
+ data() {
162
+ return {
163
+ openPath: "",
164
+ shopPath: "",
165
+ successPath: "",
166
+ cashPayPath: "",
167
+ showDialog: false,
168
+ showMask: true,
169
+ shop_id: '',
170
+ secondTimer: null,
171
+ expiration_sec: '',
172
+ code_url: '',
173
+ barcode_url: '',
174
+ barCode: '',
175
+ statusTimer: null,
176
+ validTimer: null,
177
+ payChannels: [],
178
+ channel_provider_id: "",
179
+ options: {},
180
+ canEdit: true,
181
+ settle_tag_list: [],
182
+ settle_tag_list_status: false,
183
+ tag_id: "",
184
+ price: "",
185
+ total_price: "",
186
+ num: 1,
187
+ tip: '',
188
+ shopName: '',
189
+ isFlow: false,
190
+ xnamespace: '',
191
+ plusDiscount: 0,
192
+ userInfo: {},
193
+ is_vip: 'N',
194
+ isPreview: false,
195
+ jwxSDK: null,
196
+ refresh: true, //onshow是否刷新数据
197
+ showLocationDialog: false,
198
+ cityPath: ''
199
+ }
200
+ },
201
+ watch: {
202
+ container(value, oldValue) {
203
+ if (JSON.stringify(value) === JSON.stringify(oldValue)) return;
204
+ if (this.$configProject['isPreview']) this.init(value)
205
+ },
206
+ stateLocation(n, o) {
207
+ if (JSON.stringify(n) === JSON.stringify(o)) return;
208
+ this.onJfbLoad(this.options)
209
+ }
210
+ },
211
+ computed: {
212
+ ...mapState({
213
+ stateCity: state => state.cityLocation.city,
214
+ stateLocation: state => state.cityLocation.location || {},
215
+ brandInfo: state => state.brandInfo,
216
+ jfbAuthorize: (state) => state.jfbAuthorize,
217
+ }),
218
+ expiration_sec_str() {
219
+ //秒数转 x分x秒
220
+ let second = this.expiration_sec;
221
+ if (second < 60) {
222
+ return second + "秒";
223
+ }
224
+ let min = parseInt(second / 60);
225
+ let sec = second % 60;
226
+ return `${min}分${sec}秒`;
227
+ },
228
+ curTag() {
229
+ return this.settle_tag_list.find(item => item.value === this.tag_id) || {}
230
+ },
231
+ curTagPrice() {
232
+ const curTag = this.curTag;
233
+ if (this.$xdUniHelper.isEmpty(curTag)) return 0;
234
+ if (curTag.is_static_price) {
235
+ return curTag.price_yuan;
236
+ } else {
237
+ return this.total_price;
238
+ }
239
+ },
240
+ btnDisabled() {
241
+ return this.total_price === '' || !this.tag_id;
242
+ }
243
+ },
244
+ created() {
245
+ this.isPreview = this.$configProject['isPreview']
246
+ this.is_vip = this.getTokenForKey('user_level') && this.getTokenForKey('user_level') === 'VIP' ? 'Y' : 'N'
247
+ this.init(this.container);
248
+ // #ifdef H5
249
+ if (!this.$configProject.isPreview && (isWechat() || isWechatTools())) {
250
+ this.getH5WxAuthorize()
251
+ }
252
+ // #endif
253
+ },
254
+ methods: {
255
+ async onJfbLoad(options) {
256
+ this.xnamespace = this.projectAttr.business_code
257
+ this.getUserInfo()
258
+ this.options = options
259
+ if (!this.isPreview) {
260
+ console.log(this.stateLocation, 'this.stateLocation');
261
+
262
+ if (Object.keys(this.stateLocation).length === 0) {
263
+ this.tip = '为了给您提供更好的服务需要获取您的位置信息'
264
+ this.showLocationDialog = true;
265
+ this.showMask = true;
266
+ this.showDialog = false;
267
+ return
268
+ } else{
269
+ this.showLocationDialog = false
270
+ }
271
+ }
272
+ if (!this.options.shop_id) {
273
+ jfbRootExec("getConsumpShopList", {
274
+ vm: this,
275
+ data: {
276
+ city_code: this.stateCity.city_code,
277
+ consume_mode: 'SELL',
278
+ latitude: this.stateLocation.latitude + '',
279
+ longitude: this.stateLocation.longitude + '',
280
+ },
281
+ }).then(res => {
282
+ if (res && res.list.length > 0) {
283
+ this.shop_id = res.list[0].shop_id;
284
+ this.shopName = res.list[0].resource_shop_name;
285
+ this.showMask = true;
286
+ this.showDialog = true;
287
+ } else {
288
+ this.tip = '您的附近暂时没有支持的店铺'
289
+ this.showDialog = false;
290
+ }
291
+ })
292
+ } else {
293
+ this.shop_id = this.options.shop_id;
294
+ this.p_getAsyncStep();
295
+ }
296
+ },
297
+ /**
298
+ * @description 监听事件变化
299
+ * @param container {object} 业务组件对象自己
300
+ */
301
+ init(container) {
302
+ this.openPath = getContainerPropsValue(
303
+ container,
304
+ "content.openPath",
305
+ { value: "" }
306
+ ).value;
307
+ this.shopPath = getContainerPropsValue(
308
+ container,
309
+ "content.shopPath",
310
+ { value: "" }
311
+ ).value;
312
+ this.successPath = getContainerPropsValue(
313
+ container,
314
+ "content.successPath",
315
+ { value: "" }
316
+ ).value;
317
+ this.cashPayPath = getContainerPropsValue(container, 'content.cash_pay_path', { value: "" }
318
+ ).value;
319
+ this.successPath = getContainerPropsValue(
320
+ container,
321
+ "content.successPath",
322
+ { value: "" }
323
+ ).value;
324
+ this.cityPath = getContainerPropsValue(container, 'content.cityPath', { value: "" }
325
+ ).value;
326
+ },
327
+ getUserInfo() {
328
+ jfbRootExec("getConsumpBaseUserInfo", {
329
+ vm: this,
330
+ data: {},
331
+ }).then(res => {
332
+ this.userInfo = res || {};
333
+ })
334
+ },
335
+ async p_getAsyncStep() {
336
+ await this.p_getQuickPayQRCode();
337
+ if (!this.isFlow) {
338
+ this.p_getQRCodeStatus();
339
+ this.p_getListUserPayChannel();
340
+ }
341
+ },
342
+ getH5WxAuthorize() {
343
+ jfbRootExec("getH5WxAuthorize", {
344
+ vm: this,
345
+ data: { jsApiList: ["chooseWXPay"], },
346
+ })
347
+ .then((res) => {
348
+ this.jwxSDK = res.jwxSDK;
349
+ console.log('this.jwxSDK', this.jwxSDK);
350
+ })
351
+ .catch(error => {
352
+ this.$xdAlert({
353
+ content: error,
354
+ });
355
+ });
356
+ },
357
+ p_getListUserPayChannel() {
358
+ const { pay_channels } = this.projectAttr;
359
+ jfbRootExec("getConsumpListUserPayChannel", {
360
+ vm: this,
361
+ data: {
362
+ providers: pay_channels && pay_channels.join(","),
363
+ },
364
+ }).then((res) => {
365
+ console.log("p_getListUserPayChannel", res);
366
+ this.payChannels = res.list;
367
+ this.channel_provider_id = res.list[0].channel_provider_id;
368
+ });
369
+ },
370
+ p_getQuickPayQRCode() {
371
+ return new Promise((resolve, reject) => {
372
+ this.$xdShowLoading({});
373
+ jfbRootExec("getConsumpCode", {
374
+ vm: this,
375
+ data: {
376
+ shop_id: this.shop_id,
377
+ temp_order_id: this.temp_order_id,
378
+ }
379
+ }).then(res => {
380
+ this.$xdHideLoading();
381
+ this.plusDiscount = res.plus_discount
382
+ if (res.is_st_flow === 'Y') {
383
+ //水牌
384
+ this.isFlow = true
385
+ this.showMask = false;
386
+ this.shopName = res.resource_shop_name;
387
+ this.getSettleTagList()
388
+ } else {
389
+ // 消费码
390
+ this.temp_order_id = res.temp_order_id;
391
+ let code_url = this.brandInfo['api_host'] + res.code_url;
392
+ let barcode_url = this.brandInfo['api_host'] + res.barcode_url;
393
+ if (this.isPreview) {
394
+ code_url = 'https://sandbox-apis.jufubao.cn/common/v1/image/qrcode?code_content=h.161.v91654768653746&size=240'
395
+ barcode_url = 'https://sandbox-apis.jufubao.cn/common/v1/image/barcode?code_content=h.161.v91654768653746'
396
+ }
397
+ this.code_url = code_url;
398
+ this.barcode_url = barcode_url;
399
+ this.barCode = res.payment_code
400
+ this.expiration_sec = res.expiration_sec;
401
+ this.showMask = false;
402
+ this.shopName = res.resource_shop_name;
403
+ clearInterval(this.secondTimer);
404
+ this.secondTimer = setInterval(() => {
405
+ this.expiration_sec--;
406
+ if (this.expiration_sec <= 0) {
407
+ clearInterval(this.secondTimer);
408
+ this.p_getQuickPayQRCode();
409
+ }
410
+ }, 1000);
411
+ resolve();
412
+ }
413
+
414
+ }).catch(err => {
415
+ console.error(err);
416
+ reject(err);
417
+ })
418
+ })
419
+ },
420
+ p_getQRCodeStatus() {
421
+ jfbRootExec("getConsumpCodeScanStatus", {
422
+ vm: this,
423
+ data: {
424
+ temp_order_id: this.temp_order_id,
425
+ shop_id: this.shop_id
426
+ }
427
+ }).then(res => {
428
+ //P处理中 Y成功 E 失败
429
+ if (res.status === 'P') {
430
+ if (!this.isPreview) {
431
+ if (this.statusTimer) clearTimeout(this.statusTimer);
432
+ this.statusTimer = setTimeout(() => {
433
+ this.p_getQRCodeStatus();
434
+ }, 2000);
435
+ }
436
+ } else if (res.status === 'Y') {
437
+ //订单下单有效时间 秒
438
+ if (this.statusTimer) clearTimeout(this.statusTimer);
439
+ this.orderSeconds = res.seconds;
440
+ if (this.orderSeconds > 0) {
441
+ this.validTimer = setInterval(() => {
442
+ this.orderSeconds--;
443
+ if (this.orderSeconds <= 0) {
444
+ this.handlerOderFail();
445
+ }
446
+
447
+ }, 1000)
448
+ }
449
+ this.p_createOrder();
450
+ } else if (res.status === 'E') {
451
+ if (this.statusTimer) clearTimeout(this.statusTimer);
452
+ this.$xdAlert({
453
+ content: res.message,
454
+ time: 1500,
455
+ isClose: false,
456
+ zIndex: 5000
457
+ });
458
+ }
459
+ })
460
+ },
461
+ p_createOrder() {
462
+ jfbRootExec("batchConsumpUseCardCreated", {
463
+ vm: this,
464
+ data: {
465
+ temp_order_id: this.temp_order_id,
466
+ business_code: this.xnamespace,
467
+ }
468
+ }).then(res => {
469
+ this.request_order_id = res.request_order_id;
470
+ this.p_getOrderStatus();
471
+ }).catch(err => {
472
+ this.handlerOderFail();
473
+ })
474
+ },
475
+ p_getOrderStatus() {
476
+ jfbRootExec("getConsumpAsyncSubmitStatus", {
477
+ vm: this,
478
+ data: {
479
+ request_order_id: this.request_order_id
480
+ }
481
+ }).then(res => {
482
+ let { hand_status, hand_status_msg, order_id, pay_order_id, need_pay_price } = res;
483
+
484
+ if (hand_status === 'U') {
485
+ this.orderTimer = setTimeout(() => {
486
+ this.p_getOrderStatus();
487
+ }, 2000)
488
+ } else if (hand_status === 'S') { //成功
489
+ if (parseFloat(need_pay_price) > 0) {//补差
490
+ this.handleThirdPay(pay_order_id, order_id);
491
+ } else {//订单成功
492
+ this.refresh = false
493
+ this.$xdUniHelper.redirectTo({
494
+ url: this.successPath + `?order_id=${order_id}`
495
+ })
496
+ }
497
+ } else if (hand_status === 'F') {
498
+ this.handlerOderFail();
499
+ this.$xdAlert({
500
+ content: hand_status_msg || '支付失败',
501
+ time: 3000,
502
+ isClose: false,
503
+ zIndex: 5000
504
+ });
505
+ }
506
+ })
507
+ },
508
+ openTemplatePay(paySignData, cb) {
509
+ console.log('openTemplatePay', paySignData);
510
+
511
+ const { timeStamp, ...otherData } = paySignData;
512
+ otherData["timestamp"] = timeStamp;
513
+ // #ifdef H5
514
+ this.jwxSDK.chooseWXPay({
515
+ ...otherData,
516
+ success: (res) => {
517
+ this.$xdLog.setARMSInfo({ options: this.options, res }, 'pay_success');
518
+ uni.showToast({
519
+ title: "支付成功",
520
+ });
521
+ cb(res);
522
+ },
523
+ cancel: () => {
524
+ this.onRefreshPage();
525
+ this.$xdLog.setARMSInfo(this.options, 'cancel_pay');
526
+ uni.showToast({
527
+ title: "取消支付",
528
+ });
529
+ },
530
+ fail: (error) => {
531
+ this.onRefreshPage();
532
+ if (typeof error === 'string') error = { error: error }
533
+ if (window['jwxJfbSDKParams']) error = Object.assign(error, paySignData, window['jwxJfbSDKParams'])
534
+ this.$xdLog.setARMSError(error)
535
+ uni.showToast({
536
+ title: "支付失败",
537
+ });
538
+ },
539
+ });
540
+ // #endif
541
+ // #ifdef MP
542
+ wx.requestPayment({
543
+ ...paySignData,
544
+ success: (res) => {
545
+ this.$xdLog.setARMSInfo({ options: this.options, res }, 'pay_success');
546
+ uni.showToast({
547
+ title: "支付成功",
548
+ icon: "none",
549
+ });
550
+ cb(res);
551
+ },
552
+ fail: (err) => {
553
+ this.onRefreshPage();
554
+ this.$xdLog.setARMSError({
555
+ options: this.options,
556
+ error: JSON.stringify(err)
557
+ });
558
+ uni.showToast({
559
+ title: "支付失败",
560
+ icon: "none",
561
+ });
562
+ },
563
+ });
564
+ // #endif
565
+ },
566
+ onRefreshPage() {
567
+ this.temp_order_id = "";
568
+ if (this.validTimer) clearInterval(this.validTimer)
569
+ this.p_getAsyncStep();
570
+ },
571
+ getSettleTagList() {
572
+ this.$xdShowLoading({});
573
+
574
+ jfbRootExec("getConsumpSettleMainInfo", {
575
+ vm: this,
576
+ data: {
577
+ shop_id: this.shop_id,
578
+ }
579
+ }).then(res => {
580
+ this.$xdHideLoading();
581
+ const { settle_tag_list } = res;
582
+ this.settle_tag_list = settle_tag_list;
583
+ if (settle_tag_list.length > 0) {
584
+ this.handlerTagRadio(settle_tag_list[0]);
585
+ this.settle_tag_list_status = false;
586
+ }
587
+ else this.settle_tag_list_status = true;
588
+ }).catch(err => {
589
+ this.$xdHideLoading();
590
+ this.$xdLog.catch(error)
591
+ })
592
+ },
593
+ toPayOrder(options = {}) {
594
+ let { tag_id, total_price, curTag, num = 1, shop_id } = this;
595
+ let err_tip = "";
596
+ if (!curTag.is_static_price) this.price = total_price;
597
+ if (curTag.is_static_price) {
598
+ if (total_price > 10000) {
599
+ err_tip = '金额不能超过10000'
600
+ }
601
+ }
602
+ let price = this.price;
603
+ if (!price) err_tip = "请填写正确的提货金额";
604
+ if (!tag_id) err_tip = "请选择结算标签";
605
+ if (err_tip) {
606
+ uni.showToast({
607
+ title: err_tip,
608
+ icon: 'none'
609
+ });
610
+ return false;
611
+ }
612
+ if (this.total_price == 0) {
613
+ uni.showToast(
614
+ {
615
+ title: '核销金额不能为0',
616
+ icon: 'none'
617
+ }
618
+ )
619
+ return
620
+ }
621
+ jfbRootExec("addConsumpCashierTempOrderData", {
622
+ vm: this,
623
+ data: {
624
+ shop_id: this.shop_id,
625
+ settle_tag_id: this.tag_id,
626
+ num: this.num,
627
+ settle_tag_price: this.curTagPrice,
628
+ total_price: this.total_price,
629
+ ...options
630
+ }
631
+ })
632
+ .then(res => {
633
+ if (res.confirm_notice) {
634
+ return this.useCardPop(res).then(data => {
635
+ if (data == 2) {
636
+ this.toPayOrder({
637
+ is_ignore_unique_check: "Y"
638
+ })
639
+ }
640
+ })
641
+ } else {
642
+ this.price = "";
643
+ let params = {
644
+ ...this.options,
645
+ price: price,
646
+ num: num,
647
+ tag: tag_id,
648
+ shop_id: shop_id,
649
+ cart_order_id: res.cart_order_id
650
+ };
651
+ params = this.$xdUniHelper.jsonToParams(params)
652
+ this.$xdUniHelper.navigateTo({
653
+ url: this.cashPayPath + `?${params}`
654
+ })
655
+ }
656
+ })
657
+ .catch(error => {
658
+ console.error(error);
659
+ })
660
+ },
661
+ //选卡弹出项
662
+ useCardPop(data) {
663
+ return new Promise((resolve, reject) => {
664
+ uni.showModal({
665
+ title: '提示',
666
+ content: data.msg,
667
+ // confirmText: data.confirm_text,
668
+ // cancelText: data.cancel_text,
669
+ success: function (res) {
670
+ if (res.confirm) {
671
+ resolve(2);
672
+ } else if (res.cancel) {
673
+ resolve();
674
+ }
675
+ },
676
+ fail: function (res) {
677
+ reject(res);
678
+ }
679
+ });
680
+ })
681
+ },
682
+ handlerPrice(e) {
683
+ this.$nextTick(() => {
684
+ this.total_price = e.detail.value.replace(/^\D*([0-9]\d*\.?\d{0,2})?.*$/, '$1');
685
+ if (this.total_price > 10000) {
686
+ this.total_price = 10000
687
+ uni.showToast(
688
+ {
689
+ title: '核销金额不能超过10000',
690
+ icon: 'none'
691
+ }
692
+ )
693
+ }
694
+ })
695
+ },
696
+ handleThirdPay(pay_order_id, main_order_id) {
697
+ let { login_providers = [] } = this.projectAttr;
698
+ let data = {
699
+ order_id: pay_order_id,
700
+ channel_provider_id: this.channel_provider_id,
701
+ login_providers: login_providers.join(","),
702
+ };
703
+ //设置支付成功页面地址
704
+ if (!this.$configProject.isPreview) {
705
+ data['pay_success_url'] = '';
706
+ // #ifdef H5
707
+ data['pay_success_url'] = `${window.location.protocol}//${window.location.host}/${this.projectAttr.deploy_dir}`;
708
+ // #endif
709
+ data['pay_success_url'] += this.successPath + `?order_id=${main_order_id}`;
710
+ }
711
+
712
+ jfbRootExec("setConsumpThirdPlace", {
713
+ vm: this,
714
+ data,
715
+ })
716
+ .then((res) => {
717
+ this.$xdHideLoading();
718
+ const { channel_data } = res;
719
+ const paySignData = JSON.parse(Base64.decode(channel_data));
720
+ this.openTemplatePay(paySignData, (ps) => {
721
+ jfbRootExec("updateConsumpPay", {
722
+ vm: this,
723
+ data: {
724
+ main_order_id: main_order_id,
725
+ },
726
+ })
727
+ .then((res) => {
728
+ this.refresh = false;
729
+ this.$xdUniHelper.redirectTo({
730
+ url: this.successPath + `?order_id=${main_order_id}`
731
+ });
732
+ })
733
+ .catch(error => {
734
+ this.$xdLog.setARMSCustomError('update_loading_fail', { options: this.options, error });
735
+ });
736
+ })
737
+ });
738
+ },
739
+ //订单失效
740
+ handlerOderFail() {
741
+ console.warn("handlerOderFail");
742
+ this.temp_order_id = "";
743
+ clearInterval(this.validTimer);
744
+ clearTimeout(this.orderTimer);
745
+ clearInterval(this.secondTimer);
746
+ },
747
+ handleToShop() {
748
+ this.$xdUniHelper.navigateTo({
749
+ url: this.shopPath
750
+ });
751
+ },
752
+ handleToOpen() {
753
+ this.$xdUniHelper.navigateTo({
754
+ url: this.openPath
755
+ });
756
+ },
757
+ handleConfirm() {
758
+ this.showDialog = false;
759
+ this.p_getAsyncStep();
760
+ },
761
+ handlerTagRadio(item) {
762
+ this.tag_id = item.value;
763
+ this.canEdit = !item.is_static_price;
764
+ this.num = 1;
765
+ if (item.is_static_price) {
766
+ this.total_price = item.price_yuan
767
+ this.price = item.price_yuan
768
+ } else {
769
+ this.total_price = "";
770
+ this.price = "";
771
+ }
772
+ },
773
+ handleToCity() {
774
+ this.$xdUniHelper.navigateTo({
775
+ url: this.cityPath
776
+ },true);
777
+ },
778
+ handleNumberChange(num) {
779
+ let curTag = this.curTag;
780
+ this.total_price = this.$xdUniHelper.multiplyFloatNumber(curTag.price_yuan, num);
781
+ },
782
+ onJfbUnload(options) {
783
+ console.log('event.onJfbUnload', options)
784
+ if (this.secondTimer) clearInterval(this.secondTimer);
785
+ if (this.statusTimer) clearTimeout(this.statusTimer);
786
+ if (this.orderTimer) clearTimeout(this.orderTimer);
787
+ },
788
+ onJfbBack(options) {
789
+ console.log('event.onJfbBack', options)
790
+ if (this.secondTimer) clearInterval(this.secondTimer);
791
+ if (this.statusTimer) clearTimeout(this.statusTimer);
792
+ if (this.orderTimer) clearTimeout(this.orderTimer);
793
+ },
794
+ onJfbScroll(options) {
795
+ console.log('event.onJfbScroll', options)
796
+ },
797
+ onJfbReachBottom(options) {
798
+ console.log('event.onJfbReachBottom', options)
799
+ },
800
+ onJfbShow(options) {
801
+ console.log('event.onJfbShow', options)
802
+ if (this.refresh) {
803
+ this.onJfbLoad(options);
804
+ }
805
+ },
806
+ onJfbHide(options) {
807
+ console.log('event.onJfbHide', options)
808
+ if (this.secondTimer) clearInterval(this.secondTimer);
809
+ if (this.statusTimer) clearTimeout(this.statusTimer);
810
+ if (this.orderTimer) clearTimeout(this.orderTimer);
811
+ },
812
+ onJfbUpdate(...data) {
813
+ console.log('event.onJfbUpdate', data)
814
+ },
815
+ onJfbCustomEvent(options) {
816
+ console.log('event.onJfbReachBottom', options)
817
+ },
818
+ }
819
+ }
820
+
821
+ </script>
822
+
823
+ <style scoped lang="less">
824
+ @import "./JfbBaseConsumpCodeLess.less";
825
+
826
+ .jfb-base-consump-code {
827
+ &__body {
828
+ .content-box {
829
+ margin: 0 30rpx 0 30rpx;
830
+ background-color: #fff;
831
+ padding: 81rpx 32rpx 32rpx 32rpx;
832
+ border-radius: 24rpx;
833
+ position: relative;
834
+ top: 158rpx;
835
+ display: flex;
836
+ flex-direction: column;
837
+ align-items: center;
838
+ justify-content: center;
839
+
840
+ .logo-box {
841
+ width: 154rpx;
842
+ height: 154rpx;
843
+ background-color: #fff;
844
+ position: absolute;
845
+ top: -100rpx;
846
+ left: 50%;
847
+ transform: translate(-50%, 0);
848
+ display: flex;
849
+ justify-content: center;
850
+ align-items: center;
851
+ border-radius: 50%;
852
+
853
+ .logo {
854
+ width: 144rpx;
855
+ height: 144rpx;
856
+ border-radius: 50%;
857
+ }
858
+ }
859
+
860
+ }
861
+
862
+ .shop {
863
+ border: 2rpx solid #E6E6E6;
864
+ padding: 30rpx 40rpx;
865
+ border-radius: 24rpx;
866
+ color: #fff;
867
+ font-size: 26rpx;
868
+ display: flex;
869
+ justify-content: space-between;
870
+ align-items: center;
871
+ width: 520rpx;
872
+ background: linear-gradient(135deg, #2D2824 0%, #625344 100%);
873
+ ;
874
+ }
875
+
876
+ .bar-code {
877
+ height: 120rpx;
878
+ width: 600rpx;
879
+ margin: 38rpx 0 0 0;
880
+
881
+ &-text {
882
+ color: #999999;
883
+ font-size: 24rpx;
884
+ text-align: center;
885
+ }
886
+ }
887
+
888
+ .qrcode {
889
+ width: 272rpx;
890
+ height: 272rpx;
891
+ margin: 54rpx auto 18rpx auto;
892
+ display: flex;
893
+ justify-content: center;
894
+ align-items: center;
895
+
896
+ }
897
+
898
+ .code-refresh {
899
+ color: #999;
900
+ font-size: 24rpx;
901
+ width: 95%;
902
+ text-align: center;
903
+ }
904
+
905
+ .is-vip {
906
+ font-size: 28rpx;
907
+ color: #333333;
908
+ text-align: center;
909
+ padding-top: 40rpx;
910
+ margin-top: 40rpx;
911
+ border-top: 1px dashed rgba(229, 229, 229, 1);
912
+
913
+ &>text:first-child {
914
+ font-weight: 700;
915
+ }
916
+
917
+ &>text:last-child {
918
+ color: #D10300;
919
+ }
920
+ }
921
+
922
+ .vip {
923
+ display: flex;
924
+ align-items: center;
925
+ justify-content: space-between;
926
+ width: 100%;
927
+ padding-top: 40rpx;
928
+ margin-top: 40rpx;
929
+ border-top: 1px dashed rgba(229, 229, 229, 1);
930
+
931
+ &-title {
932
+ display: flex;
933
+ align-items: center;
934
+ padding-left: 20rpx;
935
+
936
+ &-left {
937
+ background: linear-gradient(90deg, #665646 0%, #473D34 52.05%, #2B2623 100%);
938
+ color: #EFD5C3;
939
+ font-size: 22rpx;
940
+ border-radius: 74rpx 0rpx 0rpx 74rpx;
941
+ padding: 18rpx 18rpx 18rpx 22rpx;
942
+ display: flex;
943
+ align-items: center;
944
+ justify-content: center;
945
+ }
946
+
947
+ &-right {
948
+ background: linear-gradient(270deg, #FCD6B8 0%, #FCEDD7 100%);
949
+ border-radius: 0px 80rpx 80rpx 0px;
950
+ padding: 5rpx 32rpx;
951
+ font-size: 22rpx;
952
+ display: flex;
953
+ align-items: center;
954
+ justify-content: center;
955
+
956
+ &>text {
957
+ color: #D10300;
958
+ font-weight: 700;
959
+ font-size: 43rpx;
960
+ margin-right: 5rpx;
961
+ }
962
+ }
963
+ }
964
+
965
+ &-open {
966
+ display: flex;
967
+ color: #86541E;
968
+ font-size: 28rpx;
969
+ align-items: center;
970
+
971
+ &>text {
972
+ margin: 0 8rpx;
973
+ }
974
+ }
975
+ }
976
+
977
+ .mask-box {
978
+ margin: 0 auto;
979
+
980
+ .mask {
981
+ width: 660rpx;
982
+ height: 640rpx;
983
+ display: flex;
984
+ flex-direction: column;
985
+ align-items: center;
986
+ justify-content: center;
987
+ background: url('https://img1-b.jufubao.cn/uploads/20250507/1a97fda8cd8804f9bcf984da10e0a666.png?x-oss-process=style/size8') no-repeat;
988
+ background-size: 100% 100%;
989
+
990
+ &-title {
991
+ font-size: 26rpx;
992
+ color: #666666;
993
+ margin-bottom: 48rpx;
994
+ width: 300rpx;
995
+ text-align: center;
996
+ }
997
+
998
+ &-open {
999
+ font-size: 28rpx;
1000
+ }
1001
+ }
1002
+ }
1003
+
1004
+ .verification {
1005
+ &-item {
1006
+ display: flex;
1007
+ margin-top: 60rpx;
1008
+ align-items: baseline;
1009
+
1010
+ &-label {
1011
+ color: #999999;
1012
+ font-size: 30rpx;
1013
+ margin-right: 64rpx;
1014
+ flex-shrink: 0;
1015
+ }
1016
+
1017
+ &-tags {
1018
+ display: flex;
1019
+ align-items: flex-start;
1020
+ flex-wrap: wrap;
1021
+
1022
+ &>view {
1023
+ margin-right: 32rpx;
1024
+ font-size: 28rpx;
1025
+ border-radius: 12rpx;
1026
+ padding: 16rpx 24rpx;
1027
+ border: 2rpx solid #EEEEEE;
1028
+ color: #CCCCCC;
1029
+ margin-bottom: 18rpx;
1030
+ }
1031
+
1032
+ &>view:last-child {
1033
+ margin-bottom: 0;
1034
+ }
1035
+
1036
+ }
1037
+
1038
+ &-input {
1039
+ display: flex;
1040
+ flex-direction: column;
1041
+ text-align: center;
1042
+ font-size: 28rpx;
1043
+
1044
+ &>input {
1045
+ border-radius: 10rpx;
1046
+ border: 2rpx solid #EEEEEE;
1047
+ padding: 20rpx 24rpx;
1048
+ }
1049
+
1050
+ .tip {
1051
+ font-size: 18rpx;
1052
+ margin-top: 12rpx;
1053
+ }
1054
+ }
1055
+ }
1056
+ }
1057
+
1058
+ .nodata {
1059
+ color: #f00;
1060
+ line-height: unit(68, rpx);
1061
+ font-size: unit(28, rpx);
1062
+ }
1063
+ }
1064
+
1065
+ .dialog-title {
1066
+ color: #333;
1067
+ font-size: 32rpx;
1068
+ }
1069
+
1070
+ .dialog-content {
1071
+ padding-bottom: 30rpx;
1072
+ border-bottom: 2rpx dashed #E5E5E5;
1073
+ font-size: 26rpx;
1074
+ color: #999999;
1075
+
1076
+ &>view:first-child {
1077
+ margin-bottom: 10rpx;
1078
+ }
1079
+ }
1080
+
1081
+ .dialog-btns {
1082
+ width: 100%;
1083
+ display: flex;
1084
+ justify-content: space-around;
1085
+
1086
+ }
1087
+
1088
+ .location-dialog-content {
1089
+ display: flex;
1090
+ justify-content: center;
1091
+ align-items: center;
1092
+ border-bottom: 2rpx dashed #E5E5E5;
1093
+ padding-bottom: 30rpx;
1094
+
1095
+ &>view:first-child {
1096
+ font-size: 26rpx;
1097
+ color: #999999;
1098
+ width: 60%;
1099
+ }
1100
+ }
1101
+
1102
+ .location-dialog-title ::v-deep .xd-dailog__body-title {
1103
+ padding-top: 40rpx;
1104
+ padding-bottom: 32rpx;
1105
+ height: auto;
1106
+ line-height: inherit;
1107
+ }
1108
+ }
1109
+ </style>