@alu008/test_yuanqikaixiang 1.0.0

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 (110) hide show
  1. package/App.vue +294 -0
  2. package/Local/en.json +3 -0
  3. package/Local/indian.json +3 -0
  4. package/Local/zh-Hans.json +3 -0
  5. package/Local/zh-Hant.json +3 -0
  6. package/README.md +1 -0
  7. package/androidPrivacy.json +28 -0
  8. package/components/ball/ball.vue +230 -0
  9. package/components/cardDetails/cardDetails.vue +273 -0
  10. package/components/confirmModal/confirmModal.vue +125 -0
  11. package/components/fillInfo/fillInfo.vue +255 -0
  12. package/components/header/header.vue +92 -0
  13. package/components/selectAddress/selectAddress.vue +156 -0
  14. package/components/signDetail/signDetail.vue +33 -0
  15. package/components/skeleton/skeleton.vue +62 -0
  16. package/index.html +20 -0
  17. package/index.template.html +35 -0
  18. package/jsconfig.json +9 -0
  19. package/main.js +48 -0
  20. package/manifest.json +159 -0
  21. package/package.json +14 -0
  22. package/pages/index/index.vue +5421 -0
  23. package/pages.json +173 -0
  24. package/project.config.json +25 -0
  25. package/project.private.config.json +14 -0
  26. package/static/fonts/Alibaba-PuHuiTi-Bold.ttf +0 -0
  27. package/static/fonts/Alibaba-PuHuiTi-Medium.ttf +0 -0
  28. package/static/fonts/Alibaba-PuHuiTi-Regular.ttf +0 -0
  29. package/static/fonts/fxlh.ttf +0 -0
  30. package/static/img/R.png +0 -0
  31. package/static/img/SR.png +0 -0
  32. package/static/img/SSR.png +0 -0
  33. package/static/img/bottomBgc1.png +0 -0
  34. package/static/img/centerBgc.png +0 -0
  35. package/static/img/goldBgc.png +0 -0
  36. package/static/img/goldText.png +0 -0
  37. package/static/img/home/calendar/bgc0.png +0 -0
  38. package/static/img/home/calendar/bgc1.png +0 -0
  39. package/static/img/home/calendar/bgc2.png +0 -0
  40. package/static/img/home/calendar/bgc3.png +0 -0
  41. package/static/img/home/calendar/progress0.png +0 -0
  42. package/static/img/home/calendar/progress1.png +0 -0
  43. package/static/img/home/calendar/progress2.png +0 -0
  44. package/static/img/home/calendar/progress3.png +0 -0
  45. package/static/img/kuang.gif +0 -0
  46. package/static/img/luckyBgc.png +0 -0
  47. package/static/img/lucyText.png +0 -0
  48. package/static/img/top_Bgc.png +0 -0
  49. package/subpackages/article/article.vue +64 -0
  50. package/subpackages/confirmSendLogistics/confirmSendLogistics.vue +1035 -0
  51. package/subpackages/coupon/coupon.vue +276 -0
  52. package/subpackages/fragment/fragment.vue +1592 -0
  53. package/subpackages/myAddress/myAddress.vue +656 -0
  54. package/subpackages/myCards/myCards.vue +1250 -0
  55. package/subpackages/myOrder/myOrder.vue +779 -0
  56. package/subpackages/myOrderDetail/myOrderDetail.vue +659 -0
  57. package/subpackages/poster/poster.vue +130 -0
  58. package/subpackages/selectCoupon/selectCoupon.vue +251 -0
  59. package/subpackages/sendLogistics/sendLogistics.vue +1097 -0
  60. package/subpackages/vote/vote.vue +877 -0
  61. package/uni.promisify.adaptor.js +10 -0
  62. package/uni.scss +114 -0
  63. package/uni_modules/qf-image-cropper/changelog.md +72 -0
  64. package/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.render.js +855 -0
  65. package/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue +749 -0
  66. package/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.wxs +727 -0
  67. package/uni_modules/qf-image-cropper/package.json +81 -0
  68. package/uni_modules/qf-image-cropper/readme.md +97 -0
  69. package/uni_modules/uni-data-select/changelog.md +51 -0
  70. package/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue +837 -0
  71. package/uni_modules/uni-data-select/package.json +106 -0
  72. package/uni_modules/uni-data-select/readme.md +8 -0
  73. package/uni_modules/uni-icons/changelog.md +44 -0
  74. package/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue +91 -0
  75. package/uni_modules/uni-icons/components/uni-icons/uni-icons.vue +110 -0
  76. package/uni_modules/uni-icons/components/uni-icons/uniicons.css +664 -0
  77. package/uni_modules/uni-icons/components/uni-icons/uniicons.ttf +0 -0
  78. package/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts +664 -0
  79. package/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js +649 -0
  80. package/uni_modules/uni-icons/package.json +111 -0
  81. package/uni_modules/uni-icons/readme.md +8 -0
  82. package/uni_modules/uni-load-more/changelog.md +23 -0
  83. package/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json +5 -0
  84. package/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js +8 -0
  85. package/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json +5 -0
  86. package/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json +5 -0
  87. package/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue +404 -0
  88. package/uni_modules/uni-load-more/package.json +105 -0
  89. package/uni_modules/uni-load-more/readme.md +14 -0
  90. package/uni_modules/uni-scss/changelog.md +8 -0
  91. package/uni_modules/uni-scss/index.scss +1 -0
  92. package/uni_modules/uni-scss/package.json +82 -0
  93. package/uni_modules/uni-scss/readme.md +4 -0
  94. package/uni_modules/uni-scss/styles/index.scss +7 -0
  95. package/uni_modules/uni-scss/styles/setting/_border.scss +3 -0
  96. package/uni_modules/uni-scss/styles/setting/_color.scss +66 -0
  97. package/uni_modules/uni-scss/styles/setting/_radius.scss +55 -0
  98. package/uni_modules/uni-scss/styles/setting/_space.scss +56 -0
  99. package/uni_modules/uni-scss/styles/setting/_styles.scss +167 -0
  100. package/uni_modules/uni-scss/styles/setting/_text.scss +24 -0
  101. package/uni_modules/uni-scss/styles/setting/_variables.scss +146 -0
  102. package/uni_modules/uni-scss/styles/tools/functions.scss +19 -0
  103. package/uni_modules/uni-scss/theme.scss +31 -0
  104. package/uni_modules/uni-scss/variables.scss +62 -0
  105. package/utils/addressData.js +6042 -0
  106. package/utils/api.js +160 -0
  107. package/utils/fetch.js +548 -0
  108. package/utils/index.js +994 -0
  109. package/utils/navigator.js +17 -0
  110. package/utils/request.js +162 -0
@@ -0,0 +1,1592 @@
1
+ <template>
2
+ <view class="fragmentContent">
3
+ <!-- <image class="bgc" src="https://img.shinemang.com/static/rednote/exchangeRed.png" mode="scaleToFill" /> -->
4
+ <u-sticky bgColor="#f6f6f6">
5
+ <headers :title="current == 1?'兑换':'分解'"></headers>
6
+ <view class="stickyHeader">
7
+ <u-tabs
8
+ :current="current"
9
+ :list="tabsList"
10
+ :activeStyle="{
11
+ color: '#000000',
12
+ fontWeight: 'bold',
13
+ fontSize: '32rpx',
14
+ }"
15
+ :inactiveStyle="{
16
+ color: '#505050',
17
+ fontWeight: 'bold',
18
+ fontSize: '28rpx',
19
+ }"
20
+ @change="changeStatus"
21
+ lineColor="linear-gradient( 90deg, #0BD690 0%, #00B0E0 100%);"
22
+ ></u-tabs>
23
+
24
+ <!-- <view class="rules"> 活动规则</view> -->
25
+ </view>
26
+
27
+ <!-- :current="current" -->
28
+ </u-sticky>
29
+ <!-- :style="{
30
+ height: `calc(100vh - ${statusBarHeight + 100}px)`,
31
+ }" -->
32
+ <view
33
+ v-if="current == 1"
34
+ class="exchange"
35
+ >
36
+ <view class="title">
37
+ <image src="https://img.shinemang.com/static/img/fuqi.png" mode="scaleToFill" />
38
+ 我的好运值:
39
+ <text style="color: #EB6E2A">&nbsp;&nbsp;&nbsp;{{ myPoint }}</text>
40
+ </view>
41
+ <view v-if="composeList.length > 0 && !IsComposeLoading" class="list">
42
+ <view v-for="value in composeList" :key="value.id" class="item">
43
+ <view class="image">
44
+ <!-- <view></view> -->
45
+ <image :src="formateUrl(value.thumb)" mode="scaleToFill" />
46
+ </view>
47
+ <view class="content">
48
+ <view class="title over">{{ value.name }}</view>
49
+ <view class="msg over"
50
+ >兑换需要:
51
+ <text style="color: #EB6E2A">{{ value.point }} </text>好运值</view
52
+ >
53
+ <view class="amount"
54
+ >库存:{{ value.stock == -1 ? "不限" : value.stock }}</view
55
+ >
56
+ </view>
57
+
58
+ <view class="rightContent">
59
+ <view v-if="myPoint < value.point || value.item[0].item.itemType == 'ItemType_ThirdParty_Ticket'">
60
+ <image
61
+ src="https://img.shinemang.com/static/img/one.png"
62
+ mode="scaleToFill"
63
+ style="width: 48rpx; height: 48rpx; margin-bottom: 24rpx"
64
+ />
65
+ </view>
66
+ <view v-else class="editCount">
67
+ <view @click="exchangeReduce(value)" class="reduce">
68
+ <image
69
+ v-if="value.selectCount == 1 || value.stock == 0"
70
+ src="https://img.shinemang.com/static/img/exchangeReduce.png"
71
+ mode="scaleToFill"
72
+ style="width: 48rpx; height: 48rpx"
73
+ />
74
+ <image
75
+ v-else
76
+ src="https://img.shinemang.com/static/img/exchangeReduce1.png"
77
+ mode="scaleToFill"
78
+ style="width: 48rpx; height: 48rpx"
79
+ />
80
+ </view>
81
+ <view
82
+ ><input
83
+ @input="
84
+ exchangeCountChange(value, $event.detail.value, 'input')
85
+ "
86
+ @blur="exchangeCountChange(value, $event.detail.value)"
87
+ type="number"
88
+ v-model="value.selectCount"
89
+ /></view>
90
+
91
+ <view @click="exchangeAdd(value)" class="add">
92
+ <image
93
+ v-if="
94
+ (value.stock != -1 && value.selectCount < value.stock) ||
95
+ value.selectCount < Math.floor(myPoint / value.point)
96
+ "
97
+ src="https://img.shinemang.com/static/img/exchangeAdd1.png"
98
+ mode="scaleToFill"
99
+ style="width: 48rpx; height: 48rpx"
100
+ />
101
+ <image
102
+ v-else
103
+ src="https://img.shinemang.com/static/img/exchangeAdd.png"
104
+ mode="scaleToFill"
105
+ style="width: 48rpx; height: 48rpx"
106
+ />
107
+ </view>
108
+ </view>
109
+
110
+ <view
111
+ @click="confirmExchange(value)"
112
+ :class="['btn', myPoint < value.point ? 'disabled' : '']"
113
+ >去兑换</view
114
+ >
115
+ </view>
116
+ </view>
117
+
118
+ </view>
119
+
120
+ <view v-if="composeList.length == 0 && !IsComposeLoading" class="noData">
121
+ <image src="https://img.shinemang.com/static/noData.png" mode="scaleToFill" />
122
+ <view>敬请期待</view>
123
+ </view>
124
+ </view>
125
+
126
+ <!-- :style="{
127
+ height: `calc(100vh - ${statusBarHeight + 100}px)`,
128
+ }" -->
129
+ <view
130
+
131
+ v-else
132
+ class="decompose"
133
+ >
134
+ <view v-if="list.length > 0 && !isFirstLoading">
135
+ <view class="list">
136
+ <view
137
+ @click="check(value, !value.isChecked)"
138
+ v-for="(value,index) in list"
139
+ :key="index"
140
+ class="item"
141
+ >
142
+ <view
143
+ :style="{
144
+ backgroundImage:
145
+ 'url(' + formateUrl(value.item.itemCoverThumb) + ')',
146
+ }"
147
+ class="boxImg bgcCenter"
148
+ >
149
+ <view class="count">x{{ value.num }}</view>
150
+ </view>
151
+
152
+ <view class="name over">{{ value.item.itemName }}</view>
153
+
154
+ <image
155
+ v-if="value.isChecked"
156
+ class="check"
157
+ src="https://img.shinemang.com/static/rednote/check.png"
158
+ mode="scaleToFill"
159
+ />
160
+ <image
161
+ v-else
162
+ class="check"
163
+ src="https://img.shinemang.com/static/rednote/notCheck.png"
164
+ mode="scaleToFill"
165
+ />
166
+ <view v-if="value.isChecked" class="chooseCount">
167
+ <view @click.stop class="actions">
168
+ <view @click="reduce(value)" class="reduce">
169
+ <image
170
+ v-if="value.selectCount == 1"
171
+ style="width: 40rpx; height: 40rpx"
172
+ src="https://img.shinemang.com/static/img/reduce.png"
173
+ mode="scaleToFill"
174
+ />
175
+ <image
176
+ v-else
177
+ style="width: 40rpx; height: 40rpx"
178
+ src="https://img.shinemang.com/static/img/reduce1.png"
179
+ mode="scaleToFill"
180
+ />
181
+ </view>
182
+ <!-- disabled -->
183
+ <!-- @input="1" -->
184
+ <view class="amount"
185
+ ><input
186
+ type="number"
187
+ style="text-align: center; color: #fff; font-size: 24rpx"
188
+ v-model="value.selectCount"
189
+ @input="countChange(value, $event.detail.value, 'input')"
190
+ @blur="countChange(value, $event.detail.value)"
191
+ /></view>
192
+ <view @click="add(value)" class="add">
193
+ <image
194
+ v-if="value.selectCount < value.num"
195
+ style="width: 40rpx; height: 40rpx"
196
+ src="https://img.shinemang.com/static/img/add1.png"
197
+ mode="scaleToFill" />
198
+ <image
199
+ v-else
200
+ style="width: 40rpx; height: 40rpx"
201
+ src="https://img.shinemang.com/static/img/add.png"
202
+ mode="scaleToFill"
203
+ /></view>
204
+ </view>
205
+ </view>
206
+ </view>
207
+ </view>
208
+
209
+ <view class="confirmBtn">
210
+ <view @click="cancelDecompose">取消</view>
211
+ <view @click="confirmDecompose" hover-class="hoverActive"
212
+ >分解({{ decomposeCount }})</view
213
+ >
214
+ </view>
215
+ </view>
216
+ <view v-if="list.length == 0 && !isFirstLoading" class="noData">
217
+ <image src="https://img.shinemang.com/static/noData.png" mode="scaleToFill" />
218
+ <view>暂无可分解物品</view>
219
+ </view>
220
+ </view>
221
+
222
+ <view class="fixedRight">
223
+ <view v-if="current == 1">
224
+ <view @click="getRecords(1)" class="rule">兑换记录</view>
225
+ <view @click="toArticel('system:PointExchange')" class="record"
226
+ >兑换规则</view
227
+ >
228
+ </view>
229
+ <view v-else>
230
+ <view @click="getRecords(0)" class="rule">分解记录</view>
231
+ <view @click="toArticel('backpack:Decompose')" class="record"
232
+ >分解规则</view
233
+ >
234
+ </view>
235
+ </view>
236
+
237
+ <view v-if="sureExchange" @touchmove.stop.prevent class="sureExchangeModal">
238
+ <view class="contentBox">
239
+ <view class="title"> {{ composeItem.name }}兑换</view>
240
+ <view style="text-align: center; padding: 0 32rpx" class="des"
241
+ >消耗{{
242
+ composeItem &&
243
+ getTimesBigNumer(composeItem.point, composeItem.selectCount)
244
+ }}好运值,兑换{{ composeItem && composeItem.selectCount }}张{{
245
+ composeItem && composeItem.name
246
+ }}
247
+ </view>
248
+ <view class="desTips">(温馨提示:确认兑换后无法取消)</view>
249
+
250
+ <view class="actionsBtn">
251
+ <view @click="sureExchange = false">取消</view>
252
+ <view @click="sureExchangeCards"> 确认兑换</view>
253
+ </view>
254
+ </view>
255
+ </view>
256
+ <view
257
+ v-if="sureDecompose"
258
+ @touchmove.stop.prevent
259
+ class="sureExchangeModal sureDecomposeModal"
260
+ >
261
+ <view class="contentBox">
262
+ <view class="title">物品分解二次确认</view>
263
+ <view class="des"
264
+ >本次将分解{{ chooseCount }}个物品,共获得{{ decomposeCount }}好运值;
265
+ </view>
266
+ <view class="desBox">
267
+ <view
268
+ v-for="value in decompseList"
269
+ :key="value.item.itemId"
270
+ class="des"
271
+ >
272
+ 已选择{{ value.selectCount }}张 {{ value.item.itemName }},获得
273
+ {{
274
+ getTimesBigNumer(
275
+ value.selectCount,
276
+ value.item.goodsDecomposePoint,
277
+ )
278
+ }}好运值;
279
+ </view>
280
+ </view>
281
+ <view class="desTips"> 温馨提示:分解后将无法恢复,请谨慎操作~</view>
282
+ <view class="actionsBtn">
283
+ <view @click="sureDecompose = false">取消</view>
284
+ <view @click="sureDecomposeCards"> 确认分解</view>
285
+ </view>
286
+ </view>
287
+ </view>
288
+
289
+ <u-popup
290
+ @close="show = false"
291
+ :show="show"
292
+ mode="bottom"
293
+ :round="32"
294
+ :safeAreaInsetBottom="false"
295
+ >
296
+ <view v-if="show" @touchmove.stop.prevent class="records">
297
+ <view class="title">
298
+ <view>分解记录</view>
299
+ <image
300
+ @click="show = false"
301
+ src="https://img.shinemang.com/static/img/closeIcon.png"
302
+ mode="scaleToFill"
303
+ />
304
+ </view>
305
+
306
+ <scroll-view class="details" scroll-y>
307
+ <view class="list">
308
+ <view v-for="value in recordList" :key="value.id" class="item">
309
+ <view class="top">{{ value.createAt }}</view>
310
+ <view class="shops">
311
+ <view
312
+ v-for="(item, index) in value.item"
313
+ :key="index"
314
+ class="shop"
315
+ >
316
+ <view
317
+ :style="{
318
+ backgroundImage: 'url(' + formateUrl(item.goods.coverThumb) + ')',
319
+ }"
320
+ class="image bgcCenter"
321
+ ></view>
322
+ <view class="detail">
323
+ <view class="title">
324
+ <view>{{ item.goods.name }}</view>
325
+ <view class="count">x{{ item.stockId.length }}</view>
326
+ </view>
327
+ <view class="des">
328
+ 获得好运值: &nbsp;&nbsp;{{
329
+ getTimesBigNumer(
330
+ item.stockId.length,
331
+ item.goods.decomposePoint,
332
+ )
333
+ }}
334
+ </view>
335
+ </view>
336
+ </view>
337
+ </view>
338
+ </view>
339
+ <view v-if="recordList.length == 0">
340
+ <view class="noData">
341
+ <image src="https://img.shinemang.com/static/noData.png" mode="scaleToFill" />
342
+ <view>暂无记录</view>
343
+ </view>
344
+ </view>
345
+ </view>
346
+ </scroll-view>
347
+ </view>
348
+ </u-popup>
349
+ <u-popup
350
+ @close="showExchangeRecord = false"
351
+ :show="showExchangeRecord"
352
+ mode="bottom"
353
+ :round="32"
354
+ :safeAreaInsetBottom="false"
355
+ >
356
+ <view v-if="showExchangeRecord" @touchmove.stop.prevent class="records">
357
+ <view class="title">
358
+ <view>兑换记录</view>
359
+ <image
360
+ @click="showExchangeRecord = false"
361
+ src="https://img.shinemang.com/static/img/closeIcon.png"
362
+ mode="scaleToFill"
363
+ />
364
+ </view>
365
+
366
+ <scroll-view class="details" scroll-y>
367
+ <view class="list">
368
+ <view v-for="value in recordList" :key="value.id" class="item">
369
+ <view class="top">{{ value.createdAt }}</view>
370
+ <view class="shops">
371
+ <view class="shop">
372
+ <view
373
+ :style="{
374
+ backgroundImage: 'url(' + value.config.thumb + ')',
375
+ }"
376
+ class="image bgcCenter"
377
+ ></view>
378
+ <view class="detail">
379
+ <view class="title">
380
+ <view>{{ value.config.name }}</view>
381
+ <view class="count">x{{ value.num }}</view>
382
+ </view>
383
+ <view class="des">
384
+ 消耗好运值: &nbsp;&nbsp;{{
385
+ getTimesBigNumer(value.num, value.config.point)
386
+ }}
387
+ </view>
388
+ </view>
389
+ </view>
390
+ </view>
391
+ </view>
392
+ <view v-if="recordList.length == 0">
393
+ <view class="noData">
394
+ <image src="https://img.shinemang.com/static/noData.png" mode="scaleToFill" />
395
+ <view>暂无记录</view>
396
+ </view>
397
+ </view>
398
+ </view>
399
+ </scroll-view>
400
+ </view>
401
+ </u-popup>
402
+
403
+ <view @touchmove.stop.prevent v-if="showFillTicketInfo" class="surePayment">
404
+ <view class="contentBox">
405
+ <view class="title"> 兑换成功</view>
406
+ <view style="text-align: center; padding: 0 32rpx; display: flex;flex-direction: column;justify-content: center;align-items: center;" class="des"
407
+ ><text>您需要填写信息,请前往</text> <text style="color:#e73e3d">我的奖品-虚拟奖品-未领取-点击物品</text> <text>进行填写</text>
408
+ </view>
409
+
410
+ <view class="actionsBtn">
411
+ <view @click="showFillTicketInfo=false">取消</view>
412
+ <view @click="toFillTicketInfo"> 去填写</view>
413
+ </view>
414
+ </view>
415
+ </view>
416
+
417
+ <fillInfo :showTips="false" :rewardDetail="composeItemDetail" :showExchangePeitunPoupon="showExchangePeitunPoupon" @closePoupon="closePoupon" @exchangePeitunPoupon="exchangePeitunPoupon"></fillInfo>
418
+ </view>
419
+ </template>
420
+
421
+ <script>
422
+ import {
423
+ fetchDecomposed,
424
+ fetchBanlance,
425
+ fetchExchangeConfigList,
426
+ fetchExchange,
427
+ fetchExchangeRecordList,
428
+ fetchDecomposedRecord,
429
+ fetchMyBackPack,
430
+ } from "@/utils/fetch";
431
+ import {
432
+ formateServerUrl,
433
+ isPositiveInteger,
434
+ navigateTo,
435
+ reportMessage,
436
+ timesBigNumer,
437
+ } from "@/utils";
438
+ import { getDecomposedRecordUrl } from "@/utils/api";
439
+ import headers from "@/components/header/header.vue";
440
+ import fillInfo from "@/components/fillInfo/fillInfo.vue";
441
+ export default {
442
+ data() {
443
+ return {
444
+ tabsList: [
445
+ {
446
+ name: "物品分解",
447
+ status: "OrderState_UnDeliver",
448
+ },
449
+ {
450
+ name: "物品兑换",
451
+ status: "OrderState_Nil",
452
+ },
453
+ ],
454
+ scrollTop: 0,
455
+ current: 0,
456
+ list: [],
457
+ composeList: [], // 合成
458
+ isFirstLoading: true,
459
+ IsComposeLoading: true,
460
+ sureDecompose: false,
461
+ sureExchange: false,
462
+ composeItem: '',
463
+ decompseList: [],
464
+ showExchangeRecord: false,
465
+ show: false,
466
+ myPoint: 0,
467
+ recordList: [],
468
+ pageNo: 1,
469
+ pageSize: 10,
470
+ hasMore: true,
471
+ statusBarHeight: 0,
472
+ showFillTicketInfo:false,
473
+ showExchangePeitunPoupon:false,
474
+ composeItemDetail:{}
475
+ };
476
+ },
477
+ components: {
478
+ headers,
479
+ fillInfo
480
+ // login,
481
+ },
482
+ onReady(options) {
483
+ console.log(options);
484
+ },
485
+ onLoad(options) {
486
+ this.current = Number(options.current) || 0;
487
+ },
488
+ computed: {
489
+ decomposeCount() {
490
+ const data = this.list.filter((item) => item.isChecked);
491
+ return data.reduce(
492
+ (total, item) =>
493
+ (timesBigNumer(total,1).plus((isPositiveInteger(item.selectCount)
494
+ ? timesBigNumer(
495
+ item.selectCount,
496
+ item.item.goodsDecomposePoint,
497
+ )
498
+ : 0))).toFixed(2)
499
+ ,
500
+ 0,
501
+ );
502
+ },
503
+ chooseCount() {
504
+ const data = this.list.filter((item) => item.isChecked);
505
+ return data.reduce(
506
+ (total, item) =>
507
+ Number(total) +
508
+ (isPositiveInteger(item.selectCount) ? Number(item.selectCount) : 0),
509
+ 0,
510
+ );
511
+ },
512
+ },
513
+ methods: {
514
+ exchangePeitunPoupon(data) {
515
+ fetchExchange({
516
+ config_id: this.composeItem.id,
517
+ num: this.composeItem.selectCount,
518
+ exchange_info:{
519
+ phone: data.phone.trim(),
520
+ real_name:data.realName,
521
+ id_card_no:data.cardNum.trim(),
522
+ id_card_type:data.cardType,
523
+ other:{
524
+ address:data.fromAddress,
525
+ sex:data.sex
526
+ }
527
+ }
528
+ }).then((res) => {
529
+ this.showExchangePeitunPoupon = false;
530
+ uni.showToast({
531
+ title: "兑换成功",
532
+ icon: "none",
533
+ });
534
+ uni.setStorageSync("phone", data.phone);
535
+ uni.setStorageSync("realName", data.realName);
536
+ uni.setStorageSync("fromAddress", data.fromAddress);
537
+ this.getBalance();
538
+ this.getExchangeConfigList();
539
+ });
540
+ },
541
+ closePoupon(state){
542
+ this.showExchangePeitunPoupon=false
543
+ },
544
+ toFillTicketInfo() {
545
+ this.showFillTicketInfo =false;
546
+ navigateTo("/subpackages/myCards/myCards?current=1");
547
+ },
548
+ // 获取我的背包可分解的
549
+ toArticel(key) {
550
+ navigateTo("/subpackages/article/article?key=" + key);
551
+ },
552
+ getCanDecomposedList() {
553
+ fetchMyBackPack({
554
+ page: 1,
555
+ page_size: 10000,
556
+ can_decomposed: true,
557
+ }).then((res) => {
558
+ res.list.forEach((item) => {
559
+ item.isChecked = false;
560
+ item.selectCount = item.stock == 0 ? 0 : 1;
561
+ });
562
+ this.list = res.list;
563
+ this.isFirstLoading = false;
564
+ });
565
+ },
566
+ // 获取记录
567
+
568
+ getRecords(type) {
569
+ // 分解
570
+ this.pageNo = 1;
571
+ if (type == 1) {
572
+ this.getExchangeRecord();
573
+ } else {
574
+ this.getDecomposedRecord();
575
+ }
576
+ },
577
+
578
+ getExchangeRecord() {
579
+ fetchExchangeRecordList({
580
+ page_size: 10000,
581
+ page: this.pageNo,
582
+ }).then((res) => {
583
+ this.recordList =
584
+ this.pageNo == 1 ? res.list : this.recordList.concat(res.list);
585
+ if (res.list && res.list.length < this.pageSize) {
586
+ this.hasMore = false;
587
+ } else {
588
+ this.hasMore = true;
589
+ }
590
+ this.showExchangeRecord = true;
591
+ });
592
+ },
593
+ getDecomposedRecord() {
594
+ fetchDecomposedRecord({
595
+ page_size: 10000,
596
+ page: this.pageNo,
597
+ }).then((res) => {
598
+ this.recordList =
599
+ this.pageNo == 1 ? res.list : this.recordList.concat(res.list);
600
+ if (res.list && res.list.length < this.pageSize) {
601
+ this.hasMore = false;
602
+ } else {
603
+ this.hasMore = true;
604
+ }
605
+ this.show = true;
606
+ });
607
+ },
608
+
609
+ // 确认兑换
610
+ exchange() {},
611
+ // 兑换输入框
612
+ exchangeCountChange(value, count, type) {
613
+ const index = this.composeList.findIndex((item) => item.id === value.id);
614
+ if (type) {
615
+ if (!count || !isPositiveInteger(count)) {
616
+ } else {
617
+ if (value.stock == -1) {
618
+ if (Number(count) >= Math.floor(this.myPoint / value.point)) {
619
+ this.$nextTick(() => {
620
+ this.composeList[index].selectCount = Math.floor(
621
+ this.myPoint / value.point,
622
+ );
623
+ });
624
+ } else {
625
+ this.composeList[index].selectCount = Number(count);
626
+ }
627
+ } else {
628
+ if (Number(count) > Number(value.stock)) {
629
+ this.$nextTick(() => {
630
+ this.composeList[index].selectCount = Number(value.stock);
631
+ });
632
+ }else{
633
+ this.composeList[index].selectCount = Number(count);
634
+ }
635
+ }
636
+ }
637
+
638
+ return;
639
+ }
640
+
641
+ if (!count || !isPositiveInteger(count)) {
642
+ this.$nextTick(() => {
643
+ this.composeList[index].selectCount = 1;
644
+ });
645
+ } else {
646
+ if (value.stock != -1 && Number(count) > Number(value.stock)) {
647
+ this.$nextTick(() => {
648
+ this.composeList[index].selectCount = Number(value.stock);
649
+ });
650
+ } else if (Number(count) < 1) {
651
+ this.$nextTick(() => {
652
+ this.composeList[index].selectCount = 1;
653
+ });
654
+ } else {
655
+ this.$nextTick(() => {
656
+ this.composeList[index].selectCount = Number(count);
657
+ });
658
+ }
659
+ }
660
+ },
661
+ // 兑换的减
662
+ exchangeReduce(value) {
663
+ const index = this.composeList.findIndex((item) => item.id === value.id);
664
+ if (this.composeList[index].selectCount > 1) {
665
+ this.composeList[index].selectCount--;
666
+ }
667
+ },
668
+ // 兑换的加
669
+ exchangeAdd(value) {
670
+ const index = this.composeList.findIndex((item) => item.id === value.id);
671
+ console.log(value.stock, index);
672
+ if (value.stock == 0) return;
673
+ if (value.stock == -1) {
674
+ this.composeList[index].selectCount++;
675
+ if (
676
+ this.composeList[index].selectCount >=
677
+ Math.floor(this.myPoint / value.point)
678
+ ) {
679
+ this.composeList[index].selectCount = Math.floor(
680
+ this.myPoint / value.point,
681
+ );
682
+ }
683
+ } else {
684
+ if (
685
+ this.composeList[index].selectCount <
686
+ Number(this.composeList[index].stock)
687
+ ) {
688
+ this.composeList[index].selectCount++;
689
+ } else {
690
+ this.composeList[index].selectCount = stock;
691
+ }
692
+ }
693
+ console.log(this.composeList);
694
+ },
695
+ // 获取兑换配置
696
+ getExchangeConfigList() {
697
+ fetchExchangeConfigList({
698
+ page_size: 10000,
699
+ page: 1,
700
+ point_type: "BalanceType_Point",
701
+ }).then((res) => {
702
+ res.list.forEach((item) => {
703
+ item.selectCount = 1;
704
+ });
705
+ this.composeList = res.list;
706
+ this.IsComposeLoading = false;
707
+ });
708
+ },
709
+ // 获取我的好运值
710
+ getBalance() {
711
+ fetchBanlance({
712
+ //好运值 现金 积分
713
+ type: ["BalanceType_Point"],
714
+ }).then((res) => {
715
+ console.log(res);
716
+ this.myPoint = res.dict["2"];
717
+ // this.myBalance = res.dict;
718
+ });
719
+ },
720
+ getTimesBigNumer(value1, value2) {
721
+ return timesBigNumer(value1, value2).toNumber();
722
+ },
723
+
724
+ mergeByLevel(list) {
725
+ const merged = Object.values(
726
+ list.reduce((acc, item) => {
727
+ if (!acc[item.level]) {
728
+ acc[item.level] = { level: item.level, selectCount: 0 };
729
+ }
730
+ acc[item.level].selectCount += item.selectCount;
731
+ return acc;
732
+ }, {}),
733
+ );
734
+
735
+ // 按 level 升序排序
736
+ return merged.sort((a, b) => a.level - b.level);
737
+ },
738
+ // 确认兑换
739
+ confirmExchange(value) {
740
+ reportMessage("集好运-点击兑换界面-去兑换");
741
+ if (value.stock == 0) {
742
+ uni.showToast({
743
+ title: "库存不足",
744
+ icon: "none",
745
+ });
746
+ return;
747
+ }
748
+ if (
749
+ this.myPoint < timesBigNumer(value.point, value.selectCount).toNumber()
750
+ ) {
751
+ uni.showToast({
752
+ title: "好运值不足",
753
+ icon: "none",
754
+ });
755
+ return;
756
+ }
757
+ this.composeItem = value;
758
+ this.composeItemDetail = value.item[0];
759
+ this.sureExchange = true;
760
+ },
761
+ // 确认兑换
762
+ sureExchangeCards() {
763
+ reportMessage("集好运-点击兑换界面-确认兑换");
764
+ this.sureExchange = false;
765
+ if(this.composeItem.item[0].item.itemType == 'ItemType_ThirdParty_Ticket'){
766
+ this.showExchangePeitunPoupon = true;
767
+ return;
768
+ }
769
+ fetchExchange({
770
+ config_id: this.composeItem.id,
771
+ num: this.composeItem.selectCount,
772
+ }).then((res) => {
773
+ uni.showToast({
774
+ title: "兑换成功",
775
+ icon: "none",
776
+ });
777
+
778
+ this.getBalance();
779
+ this.getExchangeConfigList();
780
+ });
781
+ },
782
+
783
+ // 确认分解
784
+ sureDecomposeCards() {
785
+ reportMessage("集好运-点击分解界面-分解");
786
+ this.sureDecompose = false;
787
+ let data = {};
788
+ this.decompseList.forEach((item) => {
789
+ data[item.item.itemId] = item.selectCount;
790
+ });
791
+ console.log(data);
792
+ fetchDecomposed({
793
+ dict: data,
794
+ }).then((res) => {
795
+ uni.showToast({
796
+ title: "分解成功",
797
+ icon: "none",
798
+ });
799
+ this.getCanDecomposedList();
800
+ this.getBalance();
801
+ });
802
+ },
803
+ //分解
804
+ confirmDecompose() {
805
+ reportMessage("集好运-点击分解界面-确认分解");
806
+ if (this.chooseCount == 0) {
807
+ uni.showToast({
808
+ title: "请选择要分解的物品",
809
+ icon: "none",
810
+ });
811
+ return;
812
+ }
813
+
814
+ this.sureDecompose = true;
815
+ // 选中的卡片和数量
816
+ const data = this.list.filter((item) => item.isChecked);
817
+
818
+ console.log(data);
819
+ this.decompseList = data;
820
+
821
+ // const merged = this.mergeByLevel(data);
822
+ // console.log(merged);
823
+ },
824
+ //取消
825
+ cancelDecompose() {
826
+ this.list.forEach((item) => {
827
+ item.isChecked = false;
828
+ item.selectCount = 1;
829
+ });
830
+ },
831
+ countChange(value, count, type) {
832
+ const index = this.list.findIndex(
833
+ (item) => item.item.itemId === value.item.itemId,
834
+ );
835
+
836
+ if (type) {
837
+ if (!count || !isPositiveInteger(count)) {
838
+ } else {
839
+ if (Number(count) > Number(value.num)) {
840
+ this.$nextTick(() => {
841
+ this.list[index].selectCount = Number(value.num);
842
+ });
843
+ }
844
+ }
845
+
846
+ return;
847
+ }
848
+
849
+ if (!count || !isPositiveInteger(count)) {
850
+ this.$nextTick(() => {
851
+ this.list[index].selectCount = 1;
852
+ });
853
+ } else {
854
+ if (Number(count) > Number(value.num)) {
855
+ this.$nextTick(() => {
856
+ this.list[index].selectCount = Number(value.num);
857
+ });
858
+ } else if (Number(count) < 1) {
859
+ this.$nextTick(() => {
860
+ this.list[index].selectCount = 1;
861
+ });
862
+ } else {
863
+ this.$nextTick(() => {
864
+ this.list[index].selectCount = Number(count);
865
+ });
866
+ }
867
+ }
868
+ },
869
+ check(value, isChecked) {
870
+ console.log(value, isChecked);
871
+ const index = this.list.findIndex(
872
+ (item) => item.item.itemId === value.item.itemId,
873
+ );
874
+
875
+ this.list[index].isChecked = isChecked;
876
+ },
877
+ add(value) {
878
+ const index = this.list.findIndex(
879
+ (item) => item.item.itemId === value.item.itemId,
880
+ );
881
+
882
+ if (this.list[index].selectCount < Number(this.list[index].num)) {
883
+ this.list[index].selectCount++;
884
+ }
885
+ },
886
+ reduce(value) {
887
+ const index = this.list.findIndex(
888
+ (item) => item.item.itemId === value.item.itemId,
889
+ );
890
+
891
+ if (this.list[index].selectCount > 1) {
892
+ this.list[index].selectCount--;
893
+ }
894
+ },
895
+
896
+ formateUrl(url) {
897
+ return formateServerUrl(url);
898
+ },
899
+
900
+ changeStatus(e) {
901
+ this.current = e.index;
902
+
903
+ if (this.current == 0) {
904
+ this.isFirstLoading = true;
905
+ this.getCanDecomposedList();
906
+ } else {
907
+ this.IsComposeLoading = true;
908
+ this.getExchangeConfigList();
909
+ }
910
+ },
911
+ },
912
+
913
+ onShow(e) {
914
+ const systemInfo = uni.getSystemInfoSync();
915
+ const safeTop = uni.getStorageSync("safeTop");
916
+ this.statusBarHeight = safeTop
917
+ this.getBalance();
918
+ this.getExchangeConfigList();
919
+ this.getCanDecomposedList();
920
+ },
921
+
922
+ onShareAppMessage() {},
923
+ onShareTimeline() {},
924
+ };
925
+ </script>
926
+
927
+ <style lang="less" scoped>
928
+ page {
929
+ // height: 100%;
930
+ min-height: 100vh;
931
+ background-color: #f6f6f6 !important;
932
+ }
933
+ .fragmentContent {
934
+ height: 100%;
935
+ background-position: top center !important;
936
+ > .bgc {
937
+ width: 750rpx;
938
+ position: fixed;
939
+ top: 0;
940
+ left: 50%;
941
+ transform: translateX(-50%);
942
+ height: 496rpx;
943
+ @media (min-width: 500px) {
944
+ max-width: 375px !important;
945
+ }
946
+
947
+ }
948
+ .stickyHeader {
949
+ display: flex;
950
+ justify-content: space-between;
951
+ align-items: center;
952
+ padding-right: 32rpx;
953
+ padding: 6px;
954
+
955
+ // .rules {
956
+ // width: 136rpx;
957
+ // height: 44rpx;
958
+ // border-radius: 152rpx 152rpx 152rpx 152rpx;
959
+ // border: 1px solid #666666;
960
+ // color: #666666;
961
+ // display: flex;
962
+ // align-items: center;
963
+ // justify-content: center;
964
+ // }
965
+ // /deep/ .u-tabs {
966
+ // width: 60%;
967
+ // }
968
+ }
969
+
970
+ .exchange {
971
+ // background: #f6f6f6;
972
+ padding: 0 32rpx;
973
+ padding-bottom: 12rpx;
974
+ z-index: 99;
975
+ position: relative;
976
+ z-index: 33;
977
+
978
+ // height: calc(100% - 56px);
979
+ overflow-y: auto;
980
+ // position: absolute;
981
+
982
+ width: 100%;
983
+
984
+ > .title {
985
+ padding: 26rpx 0;
986
+ display: flex;
987
+ font-size: 28rpx;
988
+ color: #505050;
989
+ // justify-content: center;
990
+ align-items: center;
991
+ image {
992
+ width: 48rpx;
993
+ height: 48rpx;
994
+ margin-right: 12rpx;
995
+ }
996
+ }
997
+ .list {
998
+ .item {
999
+ width: 686rpx;
1000
+ height: 200rpx;
1001
+ background: #fff;
1002
+ border-radius: 24rpx 24rpx 24rpx 24rpx;
1003
+ // border: 2rpx solid #e73e3d;
1004
+ display: flex;
1005
+
1006
+ align-items: center;
1007
+ padding: 40rpx 24rpx;
1008
+ border-radius: 16rpx;
1009
+ // grid-template-columns: 114rpx 350rpx 152rpx;
1010
+ margin-bottom: 24rpx;
1011
+
1012
+ .image {
1013
+ width: 120rpx;
1014
+ height: 120rpx;
1015
+ // margin-right: 20rpx;
1016
+ border-radius: 16rpx;
1017
+ position: relative;
1018
+ view {
1019
+ position: absolute;
1020
+ width: 100%;
1021
+ height: 100%;
1022
+ border-radius: 16rpx;
1023
+ background: rgba(0, 0, 0, 0.32);
1024
+ background-color: rgba(216, 216, 216, 0.6);
1025
+ backdrop-filter: blur(6rpx);
1026
+ z-index: 99;
1027
+ }
1028
+ image {
1029
+ width: 114rpx;
1030
+ height: 114rpx;
1031
+ border-radius: 16rpx;
1032
+ }
1033
+ }
1034
+
1035
+ .btn {
1036
+ width: 144rpx;
1037
+ height: 60rpx;
1038
+ background: linear-gradient( 90deg, #0BD690 0%, #00B0E0 100%);;
1039
+ border-radius: 30rpx 30rpx 30rpx 30rpx;
1040
+ color: #fff;
1041
+ display: flex;
1042
+ font-size: 24rpx;
1043
+ font-weight: bold;
1044
+ align-items: center;
1045
+ justify-content: center;
1046
+ line-height: 60rpx;
1047
+ &.disabled {
1048
+ opacity: 0.5;
1049
+ }
1050
+ }
1051
+ .rightContent {
1052
+ display: flex;
1053
+ flex: 1;
1054
+ flex-direction: column;
1055
+ align-items: flex-end;
1056
+ justify-content: flex-end;
1057
+ .editCount {
1058
+ display: flex;
1059
+ align-items: center;
1060
+ justify-content: center;
1061
+ margin-bottom: 28rpx;
1062
+ view {
1063
+ background-color: #f4f6f8;
1064
+ width: 48rpx;
1065
+ height: 48rpx;
1066
+ }
1067
+ input {
1068
+ width: 48rpx;
1069
+ height: 48rpx;
1070
+
1071
+ margin: 0 2rpx;
1072
+ font-size: 24rpx;
1073
+ text-align: center;
1074
+ }
1075
+ }
1076
+ }
1077
+ .content {
1078
+ width: 300rpx;
1079
+ margin-left: 24rpx;
1080
+ // margin-right: 32rpx;
1081
+ font-size: 24rpx;
1082
+ color: #505050;
1083
+ > .title {
1084
+ // font-size: 28rpx;
1085
+ font-weight: bold;
1086
+ color: #000;
1087
+ }
1088
+ .msg {
1089
+ // line-height: 36rpx;
1090
+ // margin-top: 4rpx;
1091
+ margin: 12rpx 0;
1092
+ display: flex;
1093
+ align-items: center;
1094
+ }
1095
+ .amount {
1096
+ }
1097
+ }
1098
+ }
1099
+ }
1100
+ }
1101
+ .decompose {
1102
+ padding: 0 32rpx;
1103
+ // position: absolute;
1104
+ padding-right: 0;
1105
+ padding-top: 10rpx;
1106
+ padding-bottom: 150rpx;
1107
+ z-index: 99;
1108
+ // height: calc(100% - 56px);
1109
+ overflow-y: auto;
1110
+
1111
+ left: 0;
1112
+ width: 100%;
1113
+
1114
+ > view {
1115
+ .title {
1116
+ padding: 26rpx 0;
1117
+ line-height: 40rpx;
1118
+ padding-right: 32rpx;
1119
+ }
1120
+ }
1121
+
1122
+ .list {
1123
+ display: flex;
1124
+ // gap: 24rpx;
1125
+ flex-wrap: wrap;
1126
+ .item {
1127
+ width: 218rpx;
1128
+ height: 278rpx;
1129
+ position: relative;
1130
+ background: #ffffff;
1131
+ border-radius: 24rpx;
1132
+ // border: 2rpx solid #e73e3d;
1133
+ margin-bottom: 16rpx;
1134
+ margin-right: 16rpx;
1135
+ &:nth-child(3n) {
1136
+ margin-right: 0;
1137
+ }
1138
+ .name {
1139
+ font-size: 24rpx;
1140
+ color: #000;
1141
+ padding-left: 16rpx;
1142
+ margin-top: 14rpx;
1143
+ }
1144
+ .boxImg {
1145
+ width: 214rpx;
1146
+ height: 214rpx;
1147
+ border-radius: 24rpx 24rpx 0rpx 0rpx;
1148
+ position: relative;
1149
+ }
1150
+ .level {
1151
+ width: 213rpx;
1152
+ height: 281rpx;
1153
+ border-radius: 16rpx;
1154
+ border-radius: 24rpx 24rpx 0rpx 0rpx;
1155
+ }
1156
+ .count {
1157
+ position: absolute;
1158
+ right: 8rpx;
1159
+ bottom: 8rpx;
1160
+ background: rgba(0, 0, 0, 0.5);
1161
+ border-radius: 16rpx;
1162
+ // padding: 0 14rpx;
1163
+ width: 48rpx;
1164
+ height: 32rpx;
1165
+ color: #fff;
1166
+ font-size: 24rpx;
1167
+ line-height: 32rpx;
1168
+ display: flex;
1169
+ align-items: center;
1170
+ justify-content: center;
1171
+ }
1172
+ image.check {
1173
+ position: absolute;
1174
+ top: 8rpx;
1175
+ left: 8rpx;
1176
+ width: 40rpx;
1177
+ height: 40rpx;
1178
+ z-index: 88;
1179
+ }
1180
+ .chooseCount {
1181
+ z-index: 85;
1182
+ position: absolute;
1183
+ width: 100%;
1184
+ height: 100%;
1185
+ background: rgba(0, 0, 0, 0.5);
1186
+ border-radius: 16rpx;
1187
+ top: 0;
1188
+ left: 0;
1189
+
1190
+ .actions {
1191
+ display: flex;
1192
+ align-items: center;
1193
+ width: 146rpx;
1194
+ height: 48rpx;
1195
+ position: absolute;
1196
+ justify-content: center;
1197
+ top: 50%;
1198
+ left: 50%;
1199
+ overflow: hidden;
1200
+ transform: translate(-50%, -50%);
1201
+ background-color: rgba(0, 0, 0, 0.3);
1202
+ border: 1px solid #fff;
1203
+ border-radius: 8rpx;
1204
+ > view {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ justify-content: center;
1208
+ font-size: 32rpx;
1209
+ width: 48rpx;
1210
+ height: 48rpx;
1211
+ // border-top: 1px solid #fff;
1212
+ // border-bottom: 1px solid #fff;
1213
+ // border-left: 1px solid #fff;
1214
+ // border-right: 1px solid #fff;
1215
+ // box-sizing: border-box;
1216
+ }
1217
+ .reduce {
1218
+ font-size: 50rpx;
1219
+ color: #fff;
1220
+ display: flex;
1221
+ align-items: center;
1222
+ justify-content: center;
1223
+ border-right: 0;
1224
+ // border-radius: 12rpx 0 0 12rpx;
1225
+ line-height: 48rpx;
1226
+ border-right: 1px solid #fff;
1227
+ view {
1228
+ width: 20rpx;
1229
+ height: 4rpx;
1230
+ background: #b6b6b6;
1231
+ }
1232
+ }
1233
+ .add {
1234
+ // font-size: 43rpx;
1235
+ // color: #b6b6b6;
1236
+ line-height: 48rpx;
1237
+ border-left: 1px solid #fff;
1238
+ // border-radius: 0 12rpx 12rpx 0;
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ }
1244
+ }
1245
+ .confirmBtn {
1246
+ position: fixed;
1247
+ bottom: 0;
1248
+ left: 50%;
1249
+ transform: translateX(-50%);
1250
+ width: 100%;
1251
+ height: 140rpx;
1252
+ background: transparent;
1253
+ padding-left: 32rpx;
1254
+ padding-right: 32rpx;
1255
+ display: flex;
1256
+ justify-content: space-between;
1257
+ background-color: #EDEDED;
1258
+ // border-top: 1px solid rgba(0, 0, 0, 0.1);
1259
+ padding-top: 16rpx;
1260
+ z-index: 9999;
1261
+ view {
1262
+ width: 328rpx;
1263
+ height: 80rpx;
1264
+ border-radius: 40rpx;
1265
+ display: flex;
1266
+ justify-content: center;
1267
+ align-items: center;
1268
+ font-size: 28rpx;
1269
+ line-height: 80rpx;
1270
+ &:first-child {
1271
+ color: #13B77F;
1272
+ border: 2rpx solid #13B77F;
1273
+ // background-color: #fff;
1274
+ }
1275
+ &:last-child {
1276
+ color: #fff;
1277
+
1278
+ background: linear-gradient( 90deg, #0BD690 0%, #00B0E0 100%);;
1279
+ }
1280
+ }
1281
+ }
1282
+
1283
+ .sureExchangeModal {
1284
+ width: 100%;
1285
+ height: 100%;
1286
+ background: rgba(0, 0, 0, 0.5);
1287
+ position: fixed;
1288
+ top: 0;
1289
+ left: 50%;
1290
+ transform: translateX(-50%);
1291
+ z-index: 99999;
1292
+ display: flex;
1293
+ align-items: center;
1294
+ justify-content: center;
1295
+ .contentBox {
1296
+ width: 654rpx;
1297
+
1298
+ background: #ffffff;
1299
+ border-radius: 32rpx;
1300
+ padding-top: 64rpx;
1301
+ padding-bottom: 64rpx;
1302
+ padding-left: 16rpx;
1303
+ padding-right: 16rpx;
1304
+
1305
+ .title {
1306
+ font-size: 36rpx;
1307
+ margin-bottom: 64rpx;
1308
+ font-weight: 600;
1309
+ text-align: center;
1310
+ }
1311
+ > .des {
1312
+ font-size: 28rpx;
1313
+ margin-bottom: 32rpx;
1314
+ text-align: center;
1315
+ }
1316
+ .desTips {
1317
+ font-size: 24rpx;
1318
+ color: #e73e3d;
1319
+ text-align: center;
1320
+ margin-top: 48rpx;
1321
+ }
1322
+
1323
+ .actionsBtn {
1324
+ display: flex;
1325
+ align-items: center;
1326
+ justify-content: center;
1327
+ margin-top: 32rpx;
1328
+ // gap: 30rpx;
1329
+
1330
+ view {
1331
+ width: 264rpx;
1332
+ height: 80rpx;
1333
+ border-radius: 40rpx;
1334
+ font-size: 32rpx;
1335
+ display: flex;
1336
+ align-items: center;
1337
+ line-height: 80rpx;
1338
+ justify-content: center;
1339
+ &:first-child {
1340
+ background: #e9e9e9;
1341
+ margin-right: 30rpx;
1342
+ }
1343
+
1344
+ &:last-child {
1345
+ background: linear-gradient( 90deg, #0BD690 0%, #00B0E0 100%);;
1346
+ color: #fff;
1347
+ }
1348
+ }
1349
+ }
1350
+ }
1351
+ }
1352
+ .sureDecomposeModal {
1353
+ .contentBox {
1354
+ .desBox {
1355
+ max-height: 600rpx;
1356
+ overflow-y: auto;
1357
+ margin-left: 48rpx;
1358
+ width: 558rpx;
1359
+ // height: 168rpx;
1360
+ padding: 32rpx 24rpx;
1361
+ background: #f6f6f6;
1362
+ border-radius: 16rpx;
1363
+ color: #505050;
1364
+ font-size: 28rpx;
1365
+ .des {
1366
+ text-align: left;
1367
+ margin-bottom: 24rpx;
1368
+ &:last-child {
1369
+ margin-bottom: 0;
1370
+ }
1371
+ }
1372
+ }
1373
+ }
1374
+ }
1375
+
1376
+ .noData {
1377
+ text-align: center;
1378
+ padding-top: 166rpx;
1379
+ color: #999999;
1380
+ font-size: 28rpx;
1381
+ image {
1382
+ width: 370rpx;
1383
+ height: 368rpx;
1384
+ }
1385
+ view {
1386
+ margin-top: -10rpx;
1387
+ }
1388
+
1389
+ .toShop {
1390
+ width: 322rpx;
1391
+ height: 80rpx;
1392
+ background: #7c66ff;
1393
+ border-radius: 864rpx 864rpx 864rpx 864rpx;
1394
+ display: flex;
1395
+ align-items: center;
1396
+ justify-content: center;
1397
+ line-height: 80rpx;
1398
+ color: #fff;
1399
+ font-size: 32rpx;
1400
+ margin: auto;
1401
+ margin-top: 40rpx;
1402
+ }
1403
+ }
1404
+ }
1405
+
1406
+ .records {
1407
+ background: #f6f6f6;
1408
+ border-radius: 32rpx 32rpx 0 0;
1409
+ height: 1296rpx;
1410
+ > .title {
1411
+ width: 100%;
1412
+ height: 100rpx;
1413
+ background: #ffffff;
1414
+ display: flex;
1415
+ align-items: center;
1416
+ position: relative;
1417
+ justify-content: center;
1418
+ border-radius: 32rpx 32rpx 0 0;
1419
+ font-size: 36rpx;
1420
+ font-weight: 600;
1421
+
1422
+ image {
1423
+ width: 48rpx;
1424
+ height: 48rpx;
1425
+ position: absolute;
1426
+ top: 26rpx;
1427
+ left: 32rpx;
1428
+ }
1429
+ }
1430
+ .details {
1431
+ margin-top: 16rpx;
1432
+ height: calc(100% - 116rpx);
1433
+ .list {
1434
+ .item {
1435
+ padding: 0 32rpx;
1436
+
1437
+ width: 100%;
1438
+ background-color: #fff;
1439
+ margin-bottom: 16rpx;
1440
+
1441
+ .top {
1442
+ height: 80rpx;
1443
+ display: flex;
1444
+ align-items: center;
1445
+ // justify-content: center;
1446
+ line-height: 78rpx;
1447
+ color: #505050;
1448
+ font-size: 24rpx;
1449
+ border-bottom: 2rpx solid #f6f6f6;
1450
+ }
1451
+ .shops {
1452
+ padding: 32rpx 0;
1453
+ .shop {
1454
+ display: flex;
1455
+ align-items: center;
1456
+ justify-content: space-between;
1457
+ width: 100%;
1458
+ margin-bottom: 16rpx;
1459
+ &:last-child {
1460
+ margin-bottom: 0;
1461
+ }
1462
+ .image {
1463
+ width: 128rpx;
1464
+ height: 128rpx;
1465
+ border-radius: 16rpx;
1466
+ margin-right: 24rpx;
1467
+ }
1468
+
1469
+ .detail {
1470
+ width: 530rpx;
1471
+ > .title {
1472
+ font-size: 28rpx;
1473
+ font-weight: bold;
1474
+ display: flex;
1475
+ align-items: center;
1476
+ justify-content: space-between;
1477
+ .count {
1478
+ color: #505050;
1479
+ font-size: 24rpx;
1480
+ font-weight: normal;
1481
+ }
1482
+ }
1483
+ .des {
1484
+ color: #505050;
1485
+ font-size: 24rpx;
1486
+ margin-top: 16rpx;
1487
+ }
1488
+ }
1489
+ }
1490
+ }
1491
+ }
1492
+ }
1493
+ }
1494
+ }
1495
+
1496
+ .fixedRight {
1497
+ position: fixed;
1498
+ right: 0;
1499
+ z-index: 888;
1500
+ top: 50%;
1501
+ transform: translateY(-50%);
1502
+ > view {
1503
+ > view {
1504
+ width: 44rpx;
1505
+ height: 128rpx;
1506
+ background: rgba(0, 0, 0, 0.5);
1507
+ box-shadow: 0rpx 2rpx 8rpx 0rpx rgba(195, 102, 33, 0.5);
1508
+ font-size: 20rpx;
1509
+ color: #fff;
1510
+ padding: 0 8rpx;
1511
+ font-weight: bold;
1512
+ display: flex;
1513
+ align-items: center;
1514
+ justify-content: center;
1515
+ text-align: center;
1516
+ border-radius: 16rpx 0 0 16rpx;
1517
+
1518
+ &:last-child {
1519
+ margin-top: 20rpx;
1520
+ }
1521
+ }
1522
+ }
1523
+ }
1524
+ .surePayment {
1525
+ width: 100%;
1526
+ height: 100%;
1527
+ background: rgba(0, 0, 0, 0.5);
1528
+ position: fixed;
1529
+ top: 0;
1530
+ left: 50%;
1531
+ transform: translateX(-50%);
1532
+ z-index: 99999;
1533
+ display: flex;
1534
+ align-items: center;
1535
+ justify-content: center;
1536
+ .contentBox {
1537
+ width: 654rpx;
1538
+
1539
+ background: #ffffff;
1540
+ border-radius: 32rpx;
1541
+ padding-top: 64rpx;
1542
+ padding-bottom: 64rpx;
1543
+ padding-left: 16rpx;
1544
+ padding-right: 16rpx;
1545
+
1546
+ .title {
1547
+ font-size: 36rpx;
1548
+ margin-bottom: 44rpx;
1549
+ text-align: center;
1550
+ }
1551
+ > .des {
1552
+ font-size: 28rpx;
1553
+ margin-bottom: 62rpx;
1554
+ text-align: center;
1555
+ }
1556
+ .desTips {
1557
+ font-size: 24rpx;
1558
+ color: #e73e3d;
1559
+ text-align: center;
1560
+ margin-top: 48rpx;
1561
+ }
1562
+
1563
+ .actionsBtn {
1564
+ display: flex;
1565
+ align-items: center;
1566
+ justify-content: center;
1567
+ margin-top: 32rpx;
1568
+ // gap: 30rpx;
1569
+
1570
+ view {
1571
+ width: 264rpx;
1572
+ height: 80rpx;
1573
+ border-radius: 40rpx;
1574
+ font-size: 32rpx;
1575
+ display: flex;
1576
+ align-items: center;
1577
+ line-height: 80rpx;
1578
+ justify-content: center;
1579
+ &:first-child {
1580
+ background: #e9e9e9;
1581
+ margin-right: 30rpx;
1582
+ }
1583
+
1584
+ &:last-child {
1585
+ background: linear-gradient(90deg, #0bd690 0%, #00b0e0 100%);
1586
+ color: #fff;
1587
+ }
1588
+ }
1589
+ }
1590
+ }
1591
+ }
1592
+ </style>