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