@uxda/appkit 1.0.66 → 1.0.72
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.
- package/dist/appkit.css +155 -110
- package/dist/index.js +665 -443
- package/package.json +2 -1
- package/src/balance/api/endpoints.ts +50 -33
- package/src/balance/api/index.ts +62 -10
- package/src/balance/components/AccountView.vue +295 -211
- package/src/balance/components/BalanceCard.vue +3 -3
- package/src/balance/components/ConsumptionFilter.vue +49 -26
- package/src/balance/components/DateFilter.vue +11 -4
- package/src/balance/components/SecondBalance.vue +74 -0
- package/src/balance/types.ts +20 -15
- package/src/index.ts +0 -4
- package/src/payment/api/endpoints.ts +8 -4
- package/src/payment/api/index.ts +53 -14
- package/src/payment/components/RechargeView.vue +3 -3
- package/src/payment/services/request-payment.ts +3 -3
- package/src/shared/components/EmptyView.vue +34 -0
- package/src/shared/components/PageHeader.vue +23 -15
- package/src/shared/composables/index.ts +1 -5
- package/src/shared/composables/useSafeArea.ts +42 -0
- package/src/shared/http/Http.ts +76 -83
- package/src/shared/http/types.ts +106 -48
- package/src/shared/index.ts +1 -0
|
@@ -1,51 +1,34 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<div class="pay" @click="gotoRecharge">云豆充值</div>
|
|
18
|
-
</div>
|
|
19
|
-
</div>
|
|
20
|
-
<div class="line"></div>
|
|
21
|
-
<div
|
|
22
|
-
class="small-clound-bean clound-bean"
|
|
23
|
-
v-if="balance.privileges.length > 0">
|
|
24
|
-
<div class="bean-box spa-between">
|
|
25
|
-
<div class="bean-img">
|
|
26
|
-
<div class="bean-tag">小云豆</div>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="bean-list">
|
|
30
|
-
<template v-for="item in balance.privileges" :key="item">
|
|
31
|
-
<div class="bean-list-item">
|
|
32
|
-
<div class="counts number">
|
|
33
|
-
{{ item.amount }}
|
|
34
|
-
</div>
|
|
35
|
-
<div class="title">
|
|
36
|
-
{{ item.title }}
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
</template>
|
|
40
|
-
</div>
|
|
2
|
+
<div class="account-view" :class="{ popupOpen }">
|
|
3
|
+
<page-header color-mode="dark" title="我的账户"
|
|
4
|
+
:class="{'with-background': scrollY > 0}" />
|
|
5
|
+
<div class="row jusify-right">
|
|
6
|
+
<div class="small-bean-button" @click="onSecondBalanceButtonClick">
|
|
7
|
+
<label>小云豆余额</label>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="balance">
|
|
11
|
+
<div class="bean-box spa-between">
|
|
12
|
+
<div class="bean-img">
|
|
13
|
+
<img
|
|
14
|
+
class="bean-icon"
|
|
15
|
+
src="https://cdn.ddjf.com/static/images/bpms-workBench/gold-bean.png" />
|
|
16
|
+
<div class="bean-tag tag">云豆</div>
|
|
41
17
|
</div>
|
|
18
|
+
<div class="rule" @click="rulesPopupOpen = true">规则说明</div>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="bean-counts spa-between">
|
|
21
|
+
<div class="counts number">{{ balance.total || 0 }}</div>
|
|
22
|
+
<div class="pay" @click="gotoRecharge">云豆充值</div>
|
|
42
23
|
</div>
|
|
43
24
|
</div>
|
|
44
|
-
<div class="operation-title spa-between"
|
|
25
|
+
<div class="operation-title spa-between"
|
|
26
|
+
:class="{'with-shadow': scrollY > 0}"
|
|
27
|
+
:style="{top: `${safeArea.status + safeArea.nav}px`}">
|
|
45
28
|
<div class="search-time">
|
|
46
29
|
<div class="title">收支明细</div>
|
|
47
30
|
<div class="time" @click="openDateFilter" v-show="filtering.dateFrom">
|
|
48
|
-
<div class="text">{{
|
|
31
|
+
<div class="text number">{{ dateRangeDisplay }}</div>
|
|
49
32
|
<img
|
|
50
33
|
style="margin-top: -2px"
|
|
51
34
|
class="time-icon"
|
|
@@ -60,40 +43,35 @@
|
|
|
60
43
|
</div>
|
|
61
44
|
</div>
|
|
62
45
|
<div class="operation-list">
|
|
63
|
-
<div class="box" v-if="consumptionGroups.
|
|
64
|
-
<div class="box-detail" v-for="(item, index) in consumptionGroups
|
|
65
|
-
<div class="title">{{ item.date }}</div>
|
|
46
|
+
<div class="box" v-if="consumptionGroups.length > 0">
|
|
47
|
+
<div class="box-detail" v-for="(item, index) in consumptionGroups" :key="index">
|
|
48
|
+
<div class="title number">{{ item.date }}</div>
|
|
66
49
|
<div
|
|
67
50
|
class="item"
|
|
68
51
|
v-for="(it, i) in item.consumptions"
|
|
69
52
|
:key="i">
|
|
70
53
|
<div class="item-type">
|
|
71
|
-
{{ it
|
|
54
|
+
{{ it.交易类型 }}
|
|
72
55
|
</div>
|
|
73
56
|
<div class="item-detail">
|
|
74
57
|
<div class="item-info spa-between">
|
|
75
58
|
<div>
|
|
76
59
|
<div class="item-info-type">
|
|
77
|
-
{{ it
|
|
60
|
+
{{ it.账户类型 }}
|
|
78
61
|
</div>
|
|
79
62
|
<div class="item-info-title">{{ it.title }}</div>
|
|
80
63
|
</div>
|
|
81
64
|
<div class="item-info-amount number">
|
|
82
|
-
{{ it
|
|
65
|
+
{{ it.收入还是支出 == '支出' ? '-' : '+' }}{{ it.amount }}
|
|
83
66
|
</div>
|
|
84
67
|
</div>
|
|
85
68
|
<div class="item-detail-remark">{{ it.description }}</div>
|
|
86
69
|
</div>
|
|
87
70
|
</div>
|
|
88
71
|
</div>
|
|
89
|
-
<div class="box-not-text">没有更多了</div>
|
|
90
|
-
</div>
|
|
91
|
-
<div v-else class="operations-empty">
|
|
92
|
-
<img
|
|
93
|
-
class="operations-empty-img"
|
|
94
|
-
src="https://cdn.ddjf.com/static/images/fnfundkit/bean-no-thing.png" />
|
|
95
|
-
<div class="operations-empty-text">暂无数据</div>
|
|
72
|
+
<div class="box-not-text" v-if="reachedLastPage">没有更多了</div>
|
|
96
73
|
</div>
|
|
74
|
+
<empty-view v-else></empty-view>
|
|
97
75
|
</div>
|
|
98
76
|
</div>
|
|
99
77
|
<nut-popup
|
|
@@ -112,30 +90,49 @@
|
|
|
112
90
|
v-if="datePickerOpen"
|
|
113
91
|
:from="filtering.dateFrom"
|
|
114
92
|
:to="filtering.dateTo"
|
|
93
|
+
@reset="onDateReset"
|
|
115
94
|
@complete="onDateFilterComplete"/>
|
|
116
95
|
</nut-popup>
|
|
117
96
|
<nut-popup
|
|
118
97
|
position="bottom"
|
|
119
|
-
:style="{ height: '
|
|
98
|
+
:style="{ height: '75%' }"
|
|
120
99
|
round
|
|
121
100
|
:close-on-click-overlay="true"
|
|
122
101
|
v-model:visible="filterOpen">
|
|
123
102
|
<consumption-filter :modelValue="[
|
|
124
|
-
filtering
|
|
125
|
-
filtering
|
|
126
|
-
filtering
|
|
103
|
+
filtering.账户类型,
|
|
104
|
+
filtering.收入还是支出,
|
|
105
|
+
filtering.交易类型,
|
|
106
|
+
filtering.权益类目
|
|
127
107
|
]" @complete="onFilterComplete" />
|
|
128
108
|
</nut-popup>
|
|
109
|
+
<app-drawer
|
|
110
|
+
v-model="secondBalanceOpen"
|
|
111
|
+
title="小云豆余额">
|
|
112
|
+
<second-balance :data="balance.privileges" />
|
|
113
|
+
</app-drawer>
|
|
129
114
|
</template>
|
|
130
115
|
|
|
131
116
|
<script lang="ts" setup>
|
|
132
|
-
import Taro, { useDidShow, usePageScroll, usePullDownRefresh } from '@tarojs/taro'
|
|
133
|
-
import { computed, reactive, ref } from 'vue'
|
|
134
|
-
import { endpoints,
|
|
135
|
-
import {
|
|
117
|
+
import Taro, { useDidShow, usePageScroll, usePullDownRefresh, useReachBottom } from '@tarojs/taro'
|
|
118
|
+
import { computed, onMounted, reactive, ref, watch } from 'vue'
|
|
119
|
+
import { endpoints, useHttp } from '../api'
|
|
120
|
+
import { 账户流水筛选项, Balance, ConsumptionGroup, 账户流水 } from '../types'
|
|
136
121
|
import ConsumptionFilter from './ConsumptionFilter.vue'
|
|
137
122
|
import DateFilter from './DateFilter.vue'
|
|
138
123
|
import ConsumptionRules from './ConsumptionRules.vue'
|
|
124
|
+
import { AppDrawer, PageHeader, WithPaging } from '../../shared'
|
|
125
|
+
import SecondBalance from './SecondBalance.vue'
|
|
126
|
+
import dayjs from 'dayjs'
|
|
127
|
+
import EmptyView from '../../shared/components/EmptyView.vue'
|
|
128
|
+
import { useSafeArea } from '../../shared'
|
|
129
|
+
|
|
130
|
+
const safeArea = useSafeArea()
|
|
131
|
+
|
|
132
|
+
type AccountViewProps = {
|
|
133
|
+
app: string
|
|
134
|
+
}
|
|
135
|
+
const props = defineProps<AccountViewProps>()
|
|
139
136
|
|
|
140
137
|
const emit = defineEmits(['recharge'])
|
|
141
138
|
|
|
@@ -144,14 +141,30 @@ const filterOpen = ref<boolean>(false)
|
|
|
144
141
|
// 规则说明弹窗
|
|
145
142
|
const rulesPopupOpen = ref<boolean>(false)
|
|
146
143
|
|
|
147
|
-
const filtering = reactive
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
144
|
+
const filtering = reactive<账户流水筛选项>({
|
|
145
|
+
账户类型: '全部',
|
|
146
|
+
收入还是支出: '全部',
|
|
147
|
+
交易类型: '全部',
|
|
148
|
+
权益类目: '',
|
|
151
149
|
dateFrom: '',
|
|
152
|
-
dateTo: ''
|
|
150
|
+
dateTo: '',
|
|
151
|
+
page: 1,
|
|
152
|
+
pageSize: 20,
|
|
153
153
|
})
|
|
154
154
|
|
|
155
|
+
const reachedLastPage = ref<boolean>(false)
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* 全新搜索
|
|
159
|
+
* 重置某些查询条件
|
|
160
|
+
*/
|
|
161
|
+
function restartSearch () {
|
|
162
|
+
// 从第一页开始
|
|
163
|
+
filtering.page = 1
|
|
164
|
+
consumptionGroups.value = []
|
|
165
|
+
loadConsumptions()
|
|
166
|
+
}
|
|
167
|
+
|
|
155
168
|
// 时间筛选
|
|
156
169
|
const datePickerOpen = ref<boolean>(false)
|
|
157
170
|
|
|
@@ -159,18 +172,17 @@ function openDateFilter () {
|
|
|
159
172
|
datePickerOpen.value = true
|
|
160
173
|
}
|
|
161
174
|
|
|
162
|
-
const
|
|
175
|
+
const dateRangeDisplay = computed(() => {
|
|
163
176
|
let startTime = filtering.dateFrom?.replace(/-/g, '.').substring(2)
|
|
164
177
|
let endTime = filtering.dateTo?.replace(/-/g, '.').substring(2)
|
|
165
178
|
return startTime + ' - ' + endTime
|
|
166
179
|
})
|
|
167
180
|
|
|
168
|
-
const consumptionGroups = ref<
|
|
169
|
-
from: '',
|
|
170
|
-
to: '',
|
|
171
|
-
list: []
|
|
172
|
-
})
|
|
181
|
+
const consumptionGroups = ref<ConsumptionGroup[]>([])
|
|
173
182
|
|
|
183
|
+
/**
|
|
184
|
+
* 余额数据
|
|
185
|
+
*/
|
|
174
186
|
const balance = ref<Balance>({
|
|
175
187
|
total: 0,
|
|
176
188
|
privileges: []
|
|
@@ -180,53 +192,99 @@ useDidShow(() => {
|
|
|
180
192
|
Taro.setNavigationBarTitle({
|
|
181
193
|
title: '我的账户',
|
|
182
194
|
})
|
|
183
|
-
loadConsumptions(
|
|
195
|
+
loadConsumptions()
|
|
184
196
|
loadBalance()
|
|
185
197
|
})
|
|
186
198
|
|
|
187
|
-
|
|
188
|
-
|
|
199
|
+
function groupDataByDate (data: 账户流水[]): ConsumptionGroup[] {
|
|
200
|
+
// 按照日期分组
|
|
201
|
+
const groups: ConsumptionGroup[] = consumptionGroups.value || []
|
|
202
|
+
// [
|
|
203
|
+
// date: '2023-10-1',
|
|
204
|
+
// consumptions: []
|
|
205
|
+
// ]
|
|
206
|
+
// 组装成按日期分组
|
|
207
|
+
data.forEach(d => {
|
|
208
|
+
const date = dayjs(d.time).format('YYYY-MM-DD')
|
|
209
|
+
let group: ConsumptionGroup | undefined = groups.find(g => g.date === date)
|
|
210
|
+
if (!group) {
|
|
211
|
+
group = {
|
|
212
|
+
date,
|
|
213
|
+
consumptions: []
|
|
214
|
+
}
|
|
215
|
+
groups.push(group)
|
|
216
|
+
}
|
|
217
|
+
group.consumptions.push(d)
|
|
218
|
+
})
|
|
219
|
+
groups.sort((a, b) => a.date > b.date ? -1 : 1)
|
|
220
|
+
return groups
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* 请求账户流水
|
|
225
|
+
* @param append 搜索结果累加 上拉分页时
|
|
226
|
+
*/
|
|
227
|
+
async function loadConsumptions (append: boolean = false) {
|
|
228
|
+
if (!append) {
|
|
229
|
+
consumptionGroups.value = []
|
|
230
|
+
}
|
|
231
|
+
const $http = useHttp()
|
|
189
232
|
Taro.showLoading({
|
|
190
233
|
title: `加载中...`,
|
|
191
234
|
mask: true,
|
|
192
235
|
})
|
|
193
|
-
$http.get<
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
236
|
+
$http.get<WithPaging<账户流水[]>>(endpoints.获取账户流水, {
|
|
237
|
+
app: props.app,
|
|
238
|
+
...filtering
|
|
239
|
+
}).then(response => {
|
|
240
|
+
consumptionGroups.value = groupDataByDate(response.data)
|
|
241
|
+
if (filtering.page >= response.totalPages) {
|
|
242
|
+
filtering.page = response.totalPages
|
|
243
|
+
reachedLastPage.value = true
|
|
244
|
+
} else {
|
|
245
|
+
reachedLastPage.value = false
|
|
198
246
|
}
|
|
247
|
+
Taro.hideLoading()
|
|
199
248
|
})
|
|
200
|
-
Taro.hideLoading()
|
|
201
249
|
}
|
|
202
250
|
|
|
251
|
+
/**
|
|
252
|
+
* 获取账户余额明细
|
|
253
|
+
*/
|
|
203
254
|
async function loadBalance() {
|
|
204
|
-
const $http =
|
|
205
|
-
$http.get<Balance>(endpoints
|
|
255
|
+
const $http = useHttp()
|
|
256
|
+
$http.get<Balance>(endpoints.获取余额明细, {
|
|
257
|
+
app: props.app,
|
|
206
258
|
}).then(data => {
|
|
207
259
|
balance.value = data
|
|
208
260
|
})
|
|
209
261
|
}
|
|
210
262
|
|
|
211
263
|
const onFilterComplete = (value) => {
|
|
212
|
-
filtering
|
|
213
|
-
filtering
|
|
214
|
-
filtering
|
|
264
|
+
filtering.账户类型 = value[0]
|
|
265
|
+
filtering.收入还是支出 = value[1]
|
|
266
|
+
filtering.交易类型 = value[2]
|
|
267
|
+
filtering.权益类目 = value[3]
|
|
215
268
|
filterOpen.value = false
|
|
216
|
-
|
|
269
|
+
restartSearch()
|
|
217
270
|
}
|
|
218
271
|
|
|
219
272
|
const onDateFilterComplete = (value) => {
|
|
220
273
|
filtering.dateFrom = value.from
|
|
221
274
|
filtering.dateTo = value.to
|
|
222
275
|
datePickerOpen.value = false
|
|
223
|
-
|
|
276
|
+
restartSearch()
|
|
224
277
|
}
|
|
225
278
|
|
|
226
279
|
function gotoRecharge () {
|
|
227
280
|
emit('recharge')
|
|
228
281
|
}
|
|
229
282
|
|
|
283
|
+
function loadNextPage () {
|
|
284
|
+
filtering.page ++
|
|
285
|
+
loadConsumptions(true)
|
|
286
|
+
}
|
|
287
|
+
|
|
230
288
|
|
|
231
289
|
const scrollY = ref<number>(0)
|
|
232
290
|
usePageScroll((e) => {
|
|
@@ -247,132 +305,175 @@ usePullDownRefresh(() => {
|
|
|
247
305
|
}, 500);
|
|
248
306
|
})
|
|
249
307
|
|
|
308
|
+
/**
|
|
309
|
+
* 滑动到底部请求下一页并合并查询结果
|
|
310
|
+
*/
|
|
311
|
+
useReachBottom(() => {
|
|
312
|
+
if (reachedLastPage.value) {
|
|
313
|
+
return false
|
|
314
|
+
}
|
|
315
|
+
loadNextPage()
|
|
316
|
+
})
|
|
317
|
+
|
|
250
318
|
const popupOpen = computed(() => {
|
|
251
319
|
return rulesPopupOpen.value || datePickerOpen.value || filterOpen.value
|
|
252
320
|
})
|
|
321
|
+
|
|
322
|
+
const secondBalanceOpen = ref<boolean>(false)
|
|
323
|
+
|
|
324
|
+
function onSecondBalanceButtonClick () {
|
|
325
|
+
secondBalanceOpen.value = true
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
watch(secondBalanceOpen, () => {
|
|
329
|
+
Taro.setNavigationBarColor({
|
|
330
|
+
frontColor: secondBalanceOpen.value ? '#000000' : '#ffffff',
|
|
331
|
+
backgroundColor: '#ffffff',
|
|
332
|
+
animation: {
|
|
333
|
+
duration: 400,
|
|
334
|
+
timingFunc: 'easeIn'
|
|
335
|
+
}
|
|
336
|
+
})
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
function onDateReset () {
|
|
340
|
+
resetDateRange()
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* 充值筛选的起止时间
|
|
345
|
+
*/
|
|
346
|
+
function resetDateRange () {
|
|
347
|
+
// 筛选的起止时间
|
|
348
|
+
filtering.dateTo = dayjs().format('YYYY-MM-DD')
|
|
349
|
+
filtering.dateFrom = dayjs().add(-3, 'M').format('YYYY-MM-DD')
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
onMounted(() => {
|
|
353
|
+
resetDateRange()
|
|
354
|
+
})
|
|
253
355
|
</script>
|
|
254
356
|
|
|
255
357
|
<style lang="scss">
|
|
256
|
-
.
|
|
358
|
+
.account-view {
|
|
359
|
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNzUwIiBoZWlnaHQ9IjQwNiIgdmlld0JveD0iMCAwIDc1MCA0MDYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0zODIuNSA0MDcuNUM1NzcuMzU3IDQwNy41IDc1My43ODggMzgxLjI0OCA4ODEuNTIxIDMzOC43OTFDOTQ1LjM4NiAzMTcuNTYzIDk5Ny4xMDQgMjkyLjI3NiAxMDMyLjg3IDI2NC4xNzFDMTA2OC42MiAyMzYuMDcxIDEwODguNSAyMDUuMDk3IDEwODguNSAxNzIuNUMxMDg4LjUgMTM5LjkwMyAxMDY4LjYyIDEwOC45MjkgMTAzMi44NyA4MC44Mjg5Qzk5Ny4xMDQgNTIuNzI0NSA5NDUuMzg2IDI3LjQzNjcgODgxLjUyMSA2LjIwODk4Qzc1My43ODggLTM2LjI0ODIgNTc3LjM1NyAtNjIuNSAzODIuNSAtNjIuNUMxODcuNjQzIC02Mi41IDExLjIxMjIgLTM2LjI0ODIgLTExNi41MjIgNi4yMDg5OEMtMTgwLjM4NiAyNy40MzY3IC0yMzIuMTA0IDUyLjcyNDUgLTI2Ny44NjcgODAuODI4OUMtMzAzLjYyNCAxMDguOTI5IC0zMjMuNSAxMzkuOTAzIC0zMjMuNSAxNzIuNUMtMzIzLjUgMjA1LjA5NyAtMzAzLjYyNCAyMzYuMDcxIC0yNjcuODY3IDI2NC4xNzFDLTIzMi4xMDQgMjkyLjI3NiAtMTgwLjM4NiAzMTcuNTYzIC0xMTYuNTIyIDMzOC43OTFDMTEuMjEyMiAzODEuMjQ4IDE4Ny42NDMgNDA3LjUgMzgyLjUgNDA3LjVaIiBmaWxsPSIjM0IzOTNDIiBzdHJva2U9ImJsYWNrIi8+Cjwvc3ZnPgo=");
|
|
360
|
+
background-position: center -200px;
|
|
361
|
+
background-repeat: no-repeat;
|
|
362
|
+
.page-header {
|
|
363
|
+
background-color: #3B393C;
|
|
364
|
+
position: sticky;
|
|
365
|
+
top: 0;
|
|
366
|
+
z-index: 1;
|
|
367
|
+
transition: background-color .3s;
|
|
368
|
+
&.with-background {
|
|
369
|
+
background-color: #3B393C;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
257
372
|
&.popupOpen {
|
|
258
373
|
height: 100vh;
|
|
259
374
|
overflow: hidden;
|
|
260
375
|
}
|
|
261
376
|
.spa-between {
|
|
262
|
-
padding: 0 0 0 10px;
|
|
263
377
|
display: flex;
|
|
264
378
|
justify-content: space-between;
|
|
265
379
|
align-items: center;
|
|
266
380
|
}
|
|
267
|
-
.
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
margin-top: 5px;
|
|
313
|
-
.counts {
|
|
314
|
-
color: #3d3835;
|
|
315
|
-
font-size: 32px;
|
|
316
|
-
font-weight: 700;
|
|
317
|
-
}
|
|
318
|
-
.pay {
|
|
319
|
-
padding: 0 20px;
|
|
320
|
-
height: 32px;
|
|
321
|
-
line-height: 32px;
|
|
322
|
-
background: linear-gradient(
|
|
323
|
-
187.18deg,
|
|
324
|
-
#353535 10.04%,
|
|
325
|
-
#433f46 90.21%
|
|
326
|
-
);
|
|
327
|
-
border-radius: 16px;
|
|
328
|
-
color: #e7caad;
|
|
329
|
-
font-size: 15px;
|
|
330
|
-
font-weight: 500;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
381
|
+
.row {
|
|
382
|
+
display: flex;
|
|
383
|
+
flex-direction: row;
|
|
384
|
+
margin: 10px 15px;
|
|
385
|
+
}
|
|
386
|
+
.jusify-right {
|
|
387
|
+
justify-content: flex-end;
|
|
388
|
+
}
|
|
389
|
+
.small-bean-button {
|
|
390
|
+
height: 22px;
|
|
391
|
+
border-radius: 11px;
|
|
392
|
+
border: 1px solid #ffffff10;
|
|
393
|
+
background-color: #ffffff18;
|
|
394
|
+
display: inline-block;
|
|
395
|
+
padding: 0 10px;
|
|
396
|
+
line-height: 22px;
|
|
397
|
+
color: #E7CAAD;
|
|
398
|
+
font-size: 12px;
|
|
399
|
+
label {
|
|
400
|
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDZMMTYgMTJMMTAgMThWNloiIGZpbGw9IiNFN0NBQUQiIHN0cm9rZT0iI0U3Q0FBRCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+Cjwvc3ZnPgo=");
|
|
401
|
+
padding-right: 18px;
|
|
402
|
+
background-repeat: no-repeat;
|
|
403
|
+
background-position: right center;
|
|
404
|
+
background-size: 16px;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
.balance {
|
|
408
|
+
border-radius: 15px;
|
|
409
|
+
background: linear-gradient(105deg, #F4E2CE 1.88%, #DEBB9B 98.18%);
|
|
410
|
+
box-shadow: 0px -10px 9px -3px rgba(0, 0, 0, 0.33);
|
|
411
|
+
height: 112px;
|
|
412
|
+
padding: 20px;
|
|
413
|
+
margin: 0 15px;
|
|
414
|
+
box-sizing: border-box;
|
|
415
|
+
font-size: 10px;
|
|
416
|
+
.bean-img {
|
|
417
|
+
display: flex;
|
|
418
|
+
justify-content: flex-start;
|
|
419
|
+
align-items: center;
|
|
420
|
+
.bean-icon {
|
|
421
|
+
display: block;
|
|
422
|
+
font-size: 0;
|
|
423
|
+
width: 20px;
|
|
424
|
+
height: 20px;
|
|
425
|
+
margin-right: 4px;
|
|
333
426
|
}
|
|
334
|
-
.
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
427
|
+
.bean-tag {
|
|
428
|
+
color: #353535;
|
|
429
|
+
height: 15px;
|
|
430
|
+
line-height: 15px;
|
|
431
|
+
border-radius: 30px 50px 50px 0px;
|
|
432
|
+
background: rgba(#ff8320, 0.3);
|
|
433
|
+
padding-left: 5px;
|
|
434
|
+
padding-right: 10px;
|
|
339
435
|
}
|
|
340
|
-
.
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
margin-top: 8px;
|
|
344
|
-
display: flex;
|
|
345
|
-
flex-wrap: wrap;
|
|
346
|
-
&-item {
|
|
347
|
-
width: 50%;
|
|
348
|
-
line-height: 23px;
|
|
349
|
-
padding-left: 10px;
|
|
350
|
-
box-sizing: border-box;
|
|
351
|
-
margin-bottom: 10px;
|
|
352
|
-
.counts {
|
|
353
|
-
color: #353535;
|
|
354
|
-
font-size: 20px;
|
|
355
|
-
font-weight: 700;
|
|
356
|
-
}
|
|
357
|
-
.title {
|
|
358
|
-
color: #987356;
|
|
359
|
-
font-weight: 400;
|
|
360
|
-
font-size: 11px;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
&-item:nth-child(2n) {
|
|
364
|
-
padding-left: 30px;
|
|
365
|
-
}
|
|
366
|
-
}
|
|
436
|
+
.tag {
|
|
437
|
+
background: #ff8320;
|
|
438
|
+
color: #fff;
|
|
367
439
|
}
|
|
368
440
|
}
|
|
441
|
+
.rule {
|
|
442
|
+
color: #353535;
|
|
443
|
+
opacity: 0.5;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
.bean-counts {
|
|
447
|
+
margin-top: 12px;
|
|
448
|
+
.counts {
|
|
449
|
+
color: #3d3835;
|
|
450
|
+
font-size: 32px;
|
|
451
|
+
font-weight: 700;
|
|
452
|
+
}
|
|
453
|
+
.pay {
|
|
454
|
+
padding: 0 20px;
|
|
455
|
+
height: 32px;
|
|
456
|
+
line-height: 32px;
|
|
457
|
+
background: linear-gradient(
|
|
458
|
+
187.18deg,
|
|
459
|
+
#353535 10.04%,
|
|
460
|
+
#433f46 90.21%
|
|
461
|
+
);
|
|
462
|
+
border-radius: 16px;
|
|
463
|
+
color: #e7caad;
|
|
464
|
+
font-size: 15px;
|
|
465
|
+
font-weight: 500;
|
|
466
|
+
}
|
|
369
467
|
}
|
|
370
468
|
.operation-title {
|
|
371
469
|
padding: 10px 15px;
|
|
372
470
|
background: #fff;
|
|
373
471
|
position: sticky;
|
|
374
472
|
z-index: 10;
|
|
375
|
-
|
|
473
|
+
transition: box-shadow .3s;
|
|
474
|
+
&.with-shadow {
|
|
475
|
+
box-shadow: 0px 1px 10px 0px #99999933
|
|
476
|
+
}
|
|
376
477
|
.text {
|
|
377
478
|
color: #353535;
|
|
378
479
|
font-size: 12px;
|
|
@@ -411,6 +512,7 @@ const popupOpen = computed(() => {
|
|
|
411
512
|
}
|
|
412
513
|
.operation-list {
|
|
413
514
|
margin: 0 15px;
|
|
515
|
+
padding-bottom: 15px;
|
|
414
516
|
.box {
|
|
415
517
|
&-detail {
|
|
416
518
|
.title {
|
|
@@ -422,7 +524,9 @@ const popupOpen = computed(() => {
|
|
|
422
524
|
margin-bottom: 10px;
|
|
423
525
|
}
|
|
424
526
|
.item {
|
|
425
|
-
|
|
527
|
+
border-radius: 5px;
|
|
528
|
+
background: rgba(255, 255, 255, 0.50);
|
|
529
|
+
box-shadow: 0px 2.5px 9.5px 2px rgba(0, 0, 0, 0.05);
|
|
426
530
|
border-radius: 5px;
|
|
427
531
|
padding: 12px 10px;
|
|
428
532
|
display: flex;
|
|
@@ -479,28 +583,8 @@ const popupOpen = computed(() => {
|
|
|
479
583
|
text-align: center;
|
|
480
584
|
}
|
|
481
585
|
}
|
|
482
|
-
.operations-empty {
|
|
483
|
-
display: flex;
|
|
484
|
-
flex-direction: column;
|
|
485
|
-
justify-content: center;
|
|
486
|
-
align-items: center;
|
|
487
|
-
margin-top: 80px;
|
|
488
|
-
&-img {
|
|
489
|
-
display: block;
|
|
490
|
-
font-size: 0;
|
|
491
|
-
width: 144px;
|
|
492
|
-
height: 80px;
|
|
493
|
-
}
|
|
494
|
-
&-text {
|
|
495
|
-
opacity: 0.4;
|
|
496
|
-
color: #353535;
|
|
497
|
-
font-size: 12px;
|
|
498
|
-
line-height: 28px;
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
586
|
}
|
|
502
587
|
}
|
|
503
|
-
|
|
504
588
|
.consumption-rules-popup {
|
|
505
589
|
border-radius: 16px;
|
|
506
590
|
width: 70%;
|