jufubao-base 1.0.232-beta3 → 1.0.232-beta4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/package.json +1 -1
  2. package/src/components/JfbBaseBalance/Api.js +58 -0
  3. package/src/components/JfbBaseBalance/Attr.js +48 -0
  4. package/src/components/JfbBaseBalance/JfbBaseBalance.vue +111 -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 +13 -0
  8. package/src/components/JfbBaseCardDelay/JfbBaseCardDelay.vue +30 -29
  9. package/src/components/JfbBaseCodeOpenVip/Attr.js +229 -27
  10. package/src/components/JfbBaseCodeOpenVip/JfbBaseCodeOpenVip.vue +111 -9
  11. package/src/components/JfbBaseConsumpCode/Attr.js +22 -22
  12. package/src/components/JfbBaseConsumpCode/JfbBaseConsumpCode.vue +580 -34
  13. package/src/components/JfbBaseLogin/JfbBaseLogin.vue +16 -7
  14. package/src/components/JfbBaseOpenVip/Attr.js +229 -27
  15. package/src/components/JfbBaseOpenVip/JfbBaseOpenVip.vue +259 -7
  16. package/src/components/JfbBaseOpenVip/XdVipList.vue +81 -0
  17. package/src/components/JfbBaseOpenVipDetail/JfbBaseOpenVipDetail.vue +33 -4
  18. package/src/components/JfbBasePointsCard/Attr.js +199 -24
  19. package/src/components/JfbBasePointsCard/JfbBasePointsCard.vue +209 -29
  20. package/src/components/JfbBasePointsDetail/Api.js +8 -43
  21. package/src/components/JfbBasePointsDetail/Attr.js +282 -26
  22. package/src/components/JfbBasePointsDetail/JfbBasePointsDetail.vue +139 -29
  23. package/src/components/JfbBaseRechargeOrder/Api.js +3 -13
  24. package/src/components/JfbBaseRechargeOrder/JfbBaseRechargeOrder.vue +16 -34
  25. package/src/components/JfbBaseShare/JfbBaseShare.vue +108 -2
  26. package/src/components/JfbBaseTfkSearch/Attr.js +8 -82
  27. package/src/components/JfbBaseUserInfo/Attr.js +102 -10
  28. package/src/components/JfbBaseUserInfo/JfbBaseUserInfo.vue +301 -114
  29. package/src/components/JfbBaseWithDrawAgain/Api.js +58 -0
  30. package/src/components/JfbBaseWithDrawAgain/Attr.js +48 -0
  31. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgain.vue +111 -0
  32. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainLess.less +79 -0
  33. package/src/components/JfbBaseWithDrawAgain/JfbBaseWithDrawAgainMixin.js +30 -0
  34. package/src/components/JfbBaseWithDrawAgain/Mock.js +13 -0
  35. package/src/components/JfbBaseWithDrawRecord/Api.js +58 -0
  36. package/src/components/JfbBaseWithDrawRecord/Attr.js +48 -0
  37. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecord.vue +111 -0
  38. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordLess.less +79 -0
  39. package/src/components/JfbBaseWithDrawRecord/JfbBaseWithDrawRecordMixin.js +30 -0
  40. package/src/components/JfbBaseWithDrawRecord/Mock.js +13 -0
@@ -1,43 +1,108 @@
1
1
  <template>
2
- <view
3
- class="jfb-base-consump-code"
4
- @click="handleEditxSelect"
5
- :class="{ editx : isEditx && active }"
6
- >
2
+ <view class="jfb-base-consump-code" @click="handleEditxSelect" :class="{ editx : isEditx && active }">
7
3
  <!--#ifdef H5-->
8
- <view
9
- class="jfb-base-consump-code__edit"
10
- :class="{ editx : isEditx && active }"
11
- v-if="isEditx && active"
12
- >
4
+ <view class="jfb-base-consump-code__edit" :class="{ editx : isEditx && active }" v-if="isEditx && active">
13
5
  <view class="jfb-base-consump-code__edit-icon" @click="delEdit">删除</view>
14
6
  </view>
15
7
  <!-- #endif -->
16
- <view class="jfb-base-consump-code__body">
17
- <view>测试插件( {{containerId}} )</view>
8
+ <view 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="https://img.js.design/assets/img/67e9ea4307c4c2e467435b30.jpeg#d0969ce63b2aef1069a03e984e9acd13"
16
+ class="logo"></image>
17
+ </view>
18
+ <view v-if="!showMask&&showDialog">
19
+ <view @click="handleToShop" class="shop">
20
+ <view>门店名称</view>
21
+ <XdFontIcon size="20" icon="iconxiangyou_xian"></XdFontIcon>
22
+ </view>
23
+ <image mode="aspectFit" class="bar-code"
24
+ src="http://www.expba.com/cgi-bin/GInfo.dll?MfcISAPICommand=BarCode&ccode=464564655&ih=60&ntype=10"></image>
25
+ <view class="bar-code-text">N328490214783094723</view>
26
+ <image mode="aspectFit" class="qrcode"
27
+ src="">
28
+ </image>
29
+ <view class="code-refresh">{{expiration_sec_str}}后自动更新</view>
30
+ <view class="vip">
31
+ <view class="vip-title">
32
+ <view class="vip-title-left">PLUS会员专享</view>
33
+ <view class="vip-title-right">
34
+ <span>8</span>折
35
+ </view>
36
+ </view>
37
+ <view class="vip-open" @click="handleToOpen">
38
+ <xd-font-icon color="#FCBF28" size="20" icon="iconjinhangzhong"></xd-font-icon>
39
+ <span>立即开通</span>
40
+ <xd-font-icon size="20" icon="iconxiangyou_xian"></xd-font-icon>
41
+ </view>
42
+ </view>
43
+ </view>
44
+ <view class="mask-box" v-else>
45
+ <view class="mask">
46
+ <view class="mask-title">为了给您提供更好的服务需要获取您的位置信息</view>
47
+ <view class="mask-open">
48
+ PLUS会员专享 <span :style="{color:mainColor,marginLeft:'8rpx'}">8</span>折 <span @click="handleToOpen"
49
+ :style="{color:mainColor,marginLeft:'15rpx'}">立即开通</span>
50
+ </view>
51
+ </view>
52
+ </view>
53
+ </view>
18
54
  </view>
55
+ <XdDialog :show.sync="showDialog" :showClose="false" :showTitle="false">
56
+ <view class="dialog-title" slot="title">门店确认</view>
57
+ <view class="dialog-content">
58
+ <view>当前门店:<span :style="{color:mainColor}">xxxxxxx门店</span></view>
59
+ <view>请确认您是否在当前门店中</view>
60
+ </view>
61
+ <view class="dialog-btns" slot="btn">
62
+ <XdButton @click="handleToShop" bgColor="#EEEEEE" color="#888888" size="small" type="info">更换门店</XdButton>
63
+ <XdButton @click="handleConfirm" size="small" type="primary">确认</XdButton>
64
+ </view>
65
+ </XdDialog>
19
66
  </view>
20
67
  </template>
21
68
 
22
69
  <script>
23
70
  import XdFontIcon from "@/components/XdFontIcon/XdFontIcon";
71
+ import XdDialog from "@/components/XdDailog/XdDailog";
72
+ import XdButton from "@/components/XdButton/XdButton";
24
73
  import { jfbRootExec } from "@/utils/xd.event";
25
74
  import JfbBaseConsumpCodeMixin from "./JfbBaseConsumpCodeMixin";
26
75
  import { getContainerPropsValue } from "@/utils/xd.base";
27
76
  import componentsMixins from "@/mixins/componentsMixins";
28
77
  import extsMixins from "@/mixins/extsMixins";
78
+ import { mapState } from 'vuex';
79
+
29
80
  export default {
30
81
  name: "JfbBaseConsumpCode",
31
82
  components: {
32
- XdFontIcon
83
+ XdFontIcon,
84
+ XdDialog,
85
+ XdButton
33
86
  },
34
87
  mixins: [
35
88
  componentsMixins, extsMixins, JfbBaseConsumpCodeMixin
36
89
  ],
37
90
  data() {
38
91
  return {
39
-
40
- //todo
92
+ openPath: "",
93
+ shopPath: "",
94
+ successPath: "",
95
+ showDialog: false,
96
+ showMask: false,
97
+ shop_id: '',
98
+ secondTimer: null,
99
+ expiration_sec: '',
100
+ code_url: '',
101
+ statusTimer: null,
102
+ validTimer: null,
103
+ payChannels: [],
104
+ channel_provider_id: "",
105
+ options: {}
41
106
  }
42
107
  },
43
108
  watch: {
@@ -45,34 +110,343 @@
45
110
  if (JSON.stringify(value) === JSON.stringify(oldValue)) return;
46
111
  if (this.$configProject['isPreview']) this.init(value)
47
112
  },
113
+ stateLocation(n, o) {
114
+ if (JSON.stringify(n) === JSON.stringify(o)) return;
115
+ this.onJfbLoad(this.options)
116
+ }
117
+ },
118
+ computed: {
119
+ ...mapState({
120
+ stateCity: state => state.cityLocation.city,
121
+ stateLocation: state => state.cityLocation.location || {},
122
+ brandInfo: state => state.brandInfo,
123
+ }),
124
+ expiration_sec_str() {
125
+ //秒数转 x分x秒
126
+ let second = this.expiration_sec;
127
+ if (second < 60) {
128
+ return second + "秒";
129
+ }
130
+ let min = parseInt(second / 60);
131
+ let sec = second % 60;
132
+ return `${min}分${sec}秒`;
133
+ },
48
134
  },
49
135
  created() {
50
136
  this.init(this.container);
51
-
52
- //todo
53
137
  },
54
138
  methods: {
55
139
  onJfbLoad(options) {
56
-
57
- // jfbRootExec('baiduUserLogin', {
58
-
59
- // vm: this,// data: {
60
-
61
- // account: 'gaoshiyong',// password: '123456789',// type: 3,// ...options
62
-
63
- // }
64
-
65
- // }).then().catch()
140
+ this.options = options
141
+ if (!this.isPreview) {
142
+ if (Object.keys(this.stateLocation).length === 0) {
143
+ this.showMask = true;
144
+ this.showDialog = false;
145
+ return
146
+ }
147
+ }
148
+ this.shop_id = options.shop_id;
149
+ if (this.shop_id) {
150
+ this.showDialog = false;
151
+ //todo 通过shop_id获取数据
152
+ this.p_getAsyncStep();
153
+ this.p_getListUserPayChannel();
154
+ } else {
155
+ this.showDialog = true;
156
+ }
66
157
  },
67
158
  /**
68
159
  * @description 监听事件变化
69
160
  * @param container {object} 业务组件对象自己
70
161
  */
71
162
  init(container) {
163
+ this.openPath = getContainerPropsValue(
164
+ container,
165
+ "content.openPath",
166
+ { value: "" }
167
+ ).value;
168
+ this.shopPath = getContainerPropsValue(
169
+ container,
170
+ "content.shopPath",
171
+ { value: "" }
172
+ ).value;
173
+ this.successPath = getContainerPropsValue(
174
+ container,
175
+ "content.successPath",
176
+ { value: "" }
177
+ ).value;
178
+ },
179
+ async p_getAsyncStep() {
180
+ await this.p_getQuickPayQRCode();
181
+ this.p_getQRCodeStatus();
182
+ },
183
+ p_getListUserPayChannel() {
184
+ const { pay_channels } = this.projectAttr;
185
+ jfbRootExec("getListUserPayChannel", {
186
+ vm: this,
187
+ data: {
188
+ providers: pay_channels && pay_channels.join(","),
189
+ },
190
+ }).then((res) => {
191
+ console.log("p_getListUserPayChannel", res);
192
+ this.payChannels = res.list;
193
+ this.channel_provider_id = res.list[0].channel_provider_id;
194
+ });
195
+ },
196
+ p_getQuickPayQRCode() {
197
+ return new Promise((resolve, reject) => {
198
+ // this.$xdShowLoading({});
199
+ jfbRootExec("getQuickPayQRCode", {
200
+ vm: this,
201
+ data: {
202
+ shop_id: this.shop_id,
203
+ temp_order_id: this.temp_order_id
204
+ }
205
+ }).then(res => {
206
+ // this.$xdHideLoading();
207
+ this.temp_order_id = res.temp_order_id;
208
+
209
+ let code_url = this.brandInfo['api_host'] + res.code_url;
210
+ if (this.isPreview) code_url = res.code_url;
211
+ this.code_url = code_url;
212
+ this.expiration_sec = res.expiration_sec;
213
+ clearInterval(this.secondTimer);
214
+ this.secondTimer = setInterval(() => {
215
+ this.expiration_sec--;
216
+ if (this.expiration_sec <= 0) {
217
+ clearInterval(this.secondTimer);
218
+ this.p_getQuickPayQRCode();
219
+ }
220
+ }, 1000);
221
+ resolve();
222
+ }).catch(err => {
223
+ console.error(err);
224
+ reject(err);
225
+ })
226
+ })
227
+ },
228
+ p_getQRCodeStatus() {
229
+ jfbRootExec("getQRCodeStatus", {
230
+ vm: this,
231
+ data: {
232
+ temp_order_id: this.temp_order_id,
233
+ shop_id: this.shop_id
234
+ }
235
+ }).then(res => {
236
+ //P处理中 Y成功 E 失败
237
+ if (res.status === 'P') {
238
+ if (!this.isPreview) {
239
+ if (this.statusTimer) clearTimeout(this.statusTimer);
240
+ this.statusTimer = setTimeout(() => {
241
+ this.p_getQRCodeStatus();
242
+ }, 2000);
243
+ }
244
+ } else if (res.status === 'Y') {
245
+ //订单下单有效时间 秒
246
+ this.orderSeconds = res.seconds;
247
+ if (this.orderSeconds > 0) {
248
+ this.validTimer = setInterval(() => {
249
+ this.orderSeconds--;
250
+ if (this.orderSeconds <= 0) {
251
+ this.handlerOderFail();
252
+ }
253
+
254
+ }, 1000)
255
+ }
256
+ this.p_createOrder();
257
+ } else if (res.status === 'E') {
258
+ this.$xdAlert({
259
+ content: res.message,
260
+ time: 1500,
261
+ isClose: false,
262
+ zIndex: 5000
263
+ });
264
+ }
265
+ })
266
+ },
267
+ p_createOrder() {
268
+ jfbRootExec("batchUseCardCreated", {
269
+ vm: this,
270
+ data: {
271
+ temp_order_id: this.temp_order_id,
272
+ business_code: this.xnamespace,
273
+ }
274
+ }).then(res => {
275
+ this.request_order_id = res.request_order_id;
276
+ this.p_getOrderStatus();
277
+ }).catch(err => {
278
+ this.handlerOderFail();
279
+ })
280
+ },
281
+ p_getOrderStatus() {
282
+ jfbRootExec("getAsyncSubmitStatus", {
283
+ vm: this,
284
+ data: {
285
+ request_order_id: this.request_order_id
286
+ }
287
+ }).then(res => {
288
+ let { hand_status, hand_status_msg, order_id, pay_order_id, need_pay_price } = res;
72
289
 
73
- //this.bgcolor = getContainerPropsValue(container, 'content.bgcolor', '#fff');
290
+ if (hand_status === 'U') {
291
+ this.orderTimer = setTimeout(() => {
292
+ this.p_getOrderStatus();
293
+ }, 2000)
294
+ } else if (hand_status === 'S') { //成功
295
+ if (parseFloat(need_pay_price) > 0) {//补差
296
+ this.handleThirdPay(pay_order_id, order_id);
297
+ } else {//订单成功
298
+ this.$xdUniHelper.redirectTo({
299
+ url: this.successPath + `?order_id=${order_id}`
300
+ })
301
+ }
302
+ } else if (hand_status === 'F') {
303
+ this.handlerOderFail();
304
+ this.$xdAlert({
305
+ content: hand_status_msg || '支付失败',
306
+ time: 3000,
307
+ isClose: false,
308
+ zIndex: 5000
309
+ });
310
+ }
311
+ })
312
+ },
313
+ openTemplatePay(paySignData, cb) {
314
+ const { timeStamp, ...otherData } = paySignData;
315
+ otherData["timestamp"] = timeStamp;
316
+ // #ifdef H5
317
+ this.jwxSDK.chooseWXPay({
318
+ ...otherData,
319
+ success: (res) => {
320
+ this.$xdLog.setARMSInfo({ options: this.options, res }, 'pay_success');
321
+ uni.showToast({
322
+ title: "支付成功",
323
+ });
324
+ cb(res);
325
+ },
326
+ cancel: () => {
327
+ this.onRefreshPage();
328
+ this.$xdLog.setARMSInfo(this.options, 'cancel_pay');
329
+ uni.showToast({
330
+ title: "取消支付",
331
+ });
332
+ },
333
+ fail: (error) => {
334
+ this.onRefreshPage();
335
+ if (typeof error === 'string') error = { error: error }
336
+ if (window['jwxJfbSDKParams']) error = Object.assign(error, paySignData, window['jwxJfbSDKParams'])
337
+ this.$xdLog.setARMSError(error)
338
+ uni.showToast({
339
+ title: "支付失败",
340
+ });
341
+ },
342
+ });
343
+ // #endif
344
+ // #ifdef MP
345
+ wx.requestPayment({
346
+ ...paySignData,
347
+ success: (res) => {
348
+ this.$xdLog.setARMSInfo({ options: this.options, res }, 'pay_success');
349
+ uni.showToast({
350
+ title: "支付成功",
351
+ icon: "none",
352
+ });
353
+ cb(res);
354
+ },
355
+ fail: (err) => {
356
+ this.onRefreshPage();
357
+ this.$xdLog.setARMSError({
358
+ options: this.options,
359
+ error: JSON.stringify(err)
360
+ });
361
+ uni.showToast({
362
+ title: "支付失败",
363
+ icon: "none",
364
+ });
365
+ },
366
+ });
367
+ // #endif
368
+ },
369
+ onRefreshPage() {
370
+ this.temp_order_id = "";
371
+ if (this.validTimer) clearInterval(this.validTimer)
372
+ this.p_getAsyncStep();
373
+ },
374
+ handleThirdPay(pay_order_id, main_order_id) {
375
+ let { login_providers = [] } = this.projectAttr;
376
+ let data = {
377
+ order_id: pay_order_id,
378
+ channel_provider_id: this.channel_provider_id,
379
+ login_providers: login_providers.join(","),
380
+ };
381
+ //设置支付成功页面地址
382
+ if (!this.$configProject.isPreview) {
383
+ data['pay_success_url'] = '';
384
+ // #ifdef H5
385
+ data['pay_success_url'] = `${window.location.protocol}//${window.location.host}/${this.projectAttr.deploy_dir}`;
386
+ // #endif
387
+ data['pay_success_url'] += this.successPath + `?order_id=${main_order_id}`;
388
+ }
74
389
 
75
- //this.height = getContainerPropsValue(container, 'content.height', 10);
390
+ jfbRootExec("setThirdPlace", {
391
+ vm: this,
392
+ data,
393
+ })
394
+ .then((res) => {
395
+ this.$xdHideLoading();
396
+ const { channel_data } = res;
397
+ const paySignData = JSON.parse(Base64.decode(channel_data));
398
+ this.openTemplatePay(paySignData, (ps) => {
399
+ jfbRootExec("updatePay", {
400
+ vm: this,
401
+ data: {
402
+ main_order_id: main_order_id,
403
+ },
404
+ })
405
+ .then((res) => {
406
+ this.$xdUniHelper.redirectTo({
407
+ url: this.successPath + `?order_id=${main_order_id}`
408
+ });
409
+ })
410
+ .catch(error => {
411
+ this.$xdLog.setARMSCustomError('update_loading_fail', { options: this.options, error });
412
+ });
413
+ })
414
+ });
415
+ },
416
+ //订单失效
417
+ handlerOderFail() {
418
+ console.warn("handlerOderFail");
419
+ this.temp_order_id = "";
420
+ clearInterval(this.validTimer);
421
+ clearTimeout(this.orderTimer);
422
+ clearInterval(this.secondTimer);
423
+ },
424
+ handleToShop() {
425
+ this.$xdUniHelper.navigateTo({
426
+ url: this.shopPath
427
+ });
428
+ },
429
+ handleToOpen() {
430
+ this.$xdUniHelper.navigateTo({
431
+ url: this.openPath
432
+ });
433
+ },
434
+ handleConfirm() {
435
+ //todo 经纬度获取第一个门店
436
+ this.showDialog = false;
437
+ this.p_getAsyncStep();
438
+ },
439
+ onJfbUnload(options) {
440
+ console.log('event.onJfbUnload', options)
441
+ if(this.secondTimer) clearInterval(this.secondTimer);
442
+ if(this.statusTimer) clearTimeout(this.statusTimer);
443
+ if(this.orderTimer) clearTimeout(this.orderTimer);
444
+ },
445
+ onJfbBack(options) {
446
+ console.log('event.onJfbBack', options)
447
+ if(this.secondTimer) clearInterval(this.secondTimer);
448
+ if(this.statusTimer) clearTimeout(this.statusTimer);
449
+ if(this.orderTimer) clearTimeout(this.orderTimer);
76
450
  },
77
451
  onJfbScroll(options) {
78
452
  console.log('event.onJfbScroll', options)
@@ -86,9 +460,6 @@
86
460
  onJfbHide(options) {
87
461
  console.log('event.onJfbHide', options)
88
462
  },
89
- onJfbBack(options) {
90
- console.log('event.onJfbBack', options)
91
- },
92
463
  onJfbUpdate(...data) {
93
464
  console.log('event.onJfbUpdate', data)
94
465
  },
@@ -104,8 +475,183 @@
104
475
  @import "./JfbBaseConsumpCodeLess.less";
105
476
 
106
477
  .jfb-base-consump-code {
107
- &__body{
478
+ &__body {
479
+ .content-box {
480
+ margin: 180rpx 30rpx 0 30rpx;
481
+ background-color: #fff;
482
+ padding: 90rpx 40rpx 60rpx 40rpx;
483
+ border-radius: 24rpx;
484
+ position: relative;
485
+ display: flex;
486
+ flex-direction: column;
487
+ align-items: center;
488
+ justify-content: center;
489
+
490
+ .logo-box {
491
+ width: 130rpx;
492
+ height: 130rpx;
493
+ background-color: #fff;
494
+ position: absolute;
495
+ top: -65rpx;
496
+ left: 50%;
497
+ transform: translate(-50%, 0);
498
+ display: flex;
499
+ justify-content: center;
500
+ align-items: center;
501
+ border-radius: 50%;
502
+
503
+ .logo {
504
+ width: 120rpx;
505
+ height: 120rpx;
506
+ border-radius: 50%;
507
+ }
508
+ }
509
+
510
+ }
511
+
512
+ .shop {
513
+ border: 2rpx solid #E6E6E6;
514
+ padding: 32rpx 40rpx;
515
+ border-radius: 24rpx;
516
+ color: #fff;
517
+ font-size: 28rpx;
518
+ display: flex;
519
+ justify-content: space-between;
520
+ align-items: center;
521
+ width: 520rpx;
522
+ background: linear-gradient(135deg, #2D2824 0%, #625344 100%);
523
+ ;
524
+ }
525
+
526
+ .bar-code {
527
+ height: 120rpx;
528
+ width: 600rpx;
529
+ margin: 40rpx 0 16rpx 0;
530
+
531
+ &-text {
532
+ color: #999999;
533
+ font-size: 24rpx;
534
+ text-align: center;
535
+ }
536
+ }
537
+
538
+ .qrcode {
539
+ width: 300rpx;
540
+ height: 300rpx;
541
+ margin: 50rpx 0 20rpx 0;
542
+ }
543
+
544
+ .code-refresh {
545
+ color: #999;
546
+ font-size: 24rpx;
547
+ margin-bottom: 40rpx;
548
+ border-bottom: 2rpx dashed #E5E5E5;
549
+ width: 95%;
550
+ text-align: center;
551
+ padding-bottom: 40rpx;
552
+ }
553
+
554
+ .vip {
555
+ display: flex;
556
+ align-items: center;
557
+ justify-content: space-between;
558
+ width: 100%;
559
+
560
+ &-title {
561
+ display: flex;
562
+ align-items: center;
563
+ padding-left: 20rpx;
564
+
565
+ &-left {
566
+ background: linear-gradient(90deg, #665646 0%, #473D34 52.05%, #2B2623 100%);
567
+ color: #EFD5C3;
568
+ font-size: 24rpx;
569
+ border-radius: 74rpx 0rpx 0rpx 74rpx;
570
+ padding: 20rpx 20rpx 20rpx 24rpx;
571
+ display: flex;
572
+ align-items: center;
573
+ justify-content: center;
574
+ }
575
+
576
+ &-right {
577
+ background: linear-gradient(270deg, #FCD6B8 0%, #FCEDD7 100%);
578
+ border-radius: 0px 80rpx 80rpx 0px;
579
+ padding: 6rpx 36rpx;
580
+ font-size: 24rpx;
581
+ display: flex;
582
+ align-items: center;
583
+ justify-content: center;
584
+
585
+ &>span {
586
+ color: #D10300;
587
+ font-weight: 700;
588
+ font-size: 48rpx;
589
+ margin-right: 5rpx;
590
+ }
591
+ }
592
+ }
593
+
594
+ &-open {
595
+ display: flex;
596
+ color: #86541E;
597
+ font-size: 28rpx;
598
+ align-items: center;
599
+
600
+ &>span {
601
+ margin: 0 8rpx;
602
+ }
603
+ }
604
+ }
605
+
606
+ .mask-box {
607
+ margin: 0 auto;
608
+
609
+ .mask {
610
+ width: 660rpx;
611
+ height: 640rpx;
612
+ display: flex;
613
+ flex-direction: column;
614
+ align-items: center;
615
+ justify-content: center;
616
+ background: url('https://img-b.jufubao.cn/uploads/20250407/11e6e600ab4395c44d42489bc7b25034.jpg') no-repeat;
617
+ background-size: contain;
618
+
619
+ &-title {
620
+ font-size: 26rpx;
621
+ color: #666666;
622
+ margin-bottom: 48rpx;
623
+ width: 300rpx;
624
+ text-align: center;
625
+ }
626
+
627
+ &-open {
628
+ font-size: 28rpx;
629
+ }
630
+ }
631
+ }
632
+ }
633
+
634
+ .dialog-title {
635
+ color: #333;
636
+ font-size: 32rpx;
637
+ }
638
+
639
+ .dialog-content {
640
+ padding-bottom: 30rpx;
641
+ border-bottom: 2rpx dashed #E5E5E5;
642
+ font-size: 26rpx;
643
+ color: #999999;
644
+
645
+ &>view:first-child {
646
+ margin-bottom: 10rpx;
647
+ }
648
+ }
649
+
650
+ .dialog-btns {
651
+ width: 100%;
652
+ display: flex;
653
+ justify-content: space-between;
108
654
 
109
655
  }
110
656
  }
111
- </style>
657
+ </style>