@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.
@@ -1,52 +1,36 @@
1
1
  <template>
2
- <div class="consumption-view" :class="{ popupOpen }">
3
- <div class="header">
4
- <div class="header_card">
5
- <div class="clound-bean">
6
- <div class="bean-box spa-between">
7
- <div class="bean-img">
8
- <img
9
- class="bean-icon"
10
- src="https://cdn.ddjf.com/static/images/bpms-workBench/gold-bean.png" />
11
- <div class="bean-tag tag">云豆</div>
12
- </div>
13
- <div class="rule" @click="rulesPopupOpen = true">规则说明</div>
14
- </div>
15
- <div class="bean-counts spa-between">
16
- <div class="counts number">{{ balance.total || 0 }}</div>
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">{{ dataRangeDisplay }}</div>
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.list.length > 0">
63
- <div class="box-detail" v-for="(item, index) in consumptionGroups.list" :key="index">
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.type }}
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.position }}
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.direction == '支出' ? '-' : '+' }}{{ it.amount }}
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: '70%' }"
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.position,
124
- filtering.direction,
125
- filtering.type,
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, makeHttp } from '../api'
134
- import { ConsumptionFiltering, ConsumptionGroups, Balance } from '../types'
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<ConsumptionFiltering>({
147
- position: '全部',
148
- direction: '全部',
149
- type: '全部',
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 dataRangeDisplay = computed(() => {
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<ConsumptionGroups>({
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(true)
189
+ loadConsumptions()
183
190
  loadBalance()
184
191
  })
185
192
 
186
- async function loadConsumptions (firstTime?: boolean) {
187
- const $http = makeHttp()
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<ConsumptionGroups>(endpoints.getOperations, filtering).then(data => {
193
- consumptionGroups.value = data
194
- if (firstTime) {
195
- filtering.dateFrom = data.from
196
- filtering.dateTo = data.to
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 = makeHttp()
204
- $http.get<Balance>(endpoints.getBalance, {
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.position = value[0]
212
- filtering.direction = value[1]
213
- filtering.type = value[2]
254
+ filtering.账户类型 = value[0]
255
+ filtering.收入还是支出 = value[1]
256
+ filtering.交易类型 = value[2]
257
+ filtering.权益类目 = value[3]
214
258
  filterOpen.value = false
215
- loadConsumptions()
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
- loadConsumptions()
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
- .consumption-view {
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
- .header {
267
- position: relative;
268
- background: linear-gradient(187.18deg, #353535 10.04%, #433f46 90.21%);
269
- background-size: 100% 106px;
270
- padding-top: 20px;
271
- background-repeat: no-repeat;
272
- &_card {
273
- background: linear-gradient(104.85deg, #f4e2ce 1.88%, #debb9b 98.18%);
274
- border-radius: 15px;
275
- padding: 10px;
276
- margin: 0 15px;
277
- .clound-bean {
278
- .bean-box {
279
- font-size: 10px;
280
- .bean-img {
281
- display: flex;
282
- justify-content: flex-start;
283
- align-items: center;
284
- .bean-icon {
285
- display: block;
286
- font-size: 0;
287
- width: 20px;
288
- height: 20px;
289
- margin-right: 4px;
290
- }
291
- .bean-tag {
292
- color: #353535;
293
- height: 15px;
294
- line-height: 15px;
295
- border-radius: 30px 50px 50px 0px;
296
- background: rgba(#ff8320, 0.3);
297
- padding-left: 5px;
298
- padding-right: 10px;
299
- }
300
- .tag {
301
- background: #ff8320;
302
- color: #fff;
303
- }
304
- }
305
- .rule {
306
- color: #353535;
307
- opacity: 0.5;
308
- }
309
- }
310
- .bean-counts {
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
- .line {
334
- height: 3px;
335
- width: 100%;
336
- margin: 10px 0;
337
- background: linear-gradient(90deg, #e7c39f 0.84%, #e6c9ad 27.74%);
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
- .small-clound-bean {
340
- margin-top: 20px;
341
- .bean-list {
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
- top: 0;
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
- box-shadow: 0px 5px 18px 2px #00000029;
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%;