u
This commit is contained in:
1 parent
caed43a011
commit
18e9d94b77
8 files changed
+148
-33
No files matched your search
@@ -1,12 +1,14 @@
|
||||
import type { QueryMoneyRecordsResult } from '@/types/money/record'
|
||||
import type { MoneyRecordGroup, MoneyRecordItem, QueryMoneyRecordsResult } from '@/types/money/record'
|
||||
import Big from 'big.js'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { ScrollView, Text, TouchableOpacity, View } from 'react-native'
|
||||
import { Text, TouchableOpacity, View } from 'react-native'
|
||||
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
||||
import { ADatePicker, LucideIcon } from '@/components/common/ao'
|
||||
import { Fab, FabIcon } from '@/components/ui/fab'
|
||||
import { AddIcon } from '@/components/ui/icon'
|
||||
import { Progress, ProgressFilledTrack } from '@/components/ui/progress'
|
||||
import { queryMoneyRecordsApi } from '@/request/api/money/record'
|
||||
import { add, sub } from '@/utils/math'
|
||||
import { getCurrentYearMonth } from '@/utils/time'
|
||||
import { toast } from '@/utils/toast'
|
||||
import AddMoneyDrawer from './components/AddDrawer'
|
||||
@@ -47,6 +49,71 @@ export default function Money() {
|
||||
})
|
||||
}, [searchParams])
|
||||
|
||||
function handleAddMoneyRecord(data: MoneyRecordItem) {
|
||||
const recordTime = data.record_time
|
||||
|
||||
setMoneyRecords((prev) => {
|
||||
const next = structuredClone(prev)
|
||||
|
||||
// 查找分组
|
||||
const group = next.records.find(g => g.record_time === recordTime)
|
||||
|
||||
// === 已存在分组 ===
|
||||
if (group) {
|
||||
// 插入到最前面
|
||||
group.records.unshift(data)
|
||||
|
||||
// 更新分组 & 总计
|
||||
if (data.category_type === 0) {
|
||||
// 收入
|
||||
group.income = add(group.income, data.amount)
|
||||
next.total_income = add(next.total_income, data.amount)
|
||||
}
|
||||
else if (data.category_type === 1) {
|
||||
// 支出
|
||||
group.expense = add(group.expense, data.amount)
|
||||
next.total_expense = add(next.total_expense, data.amount)
|
||||
}
|
||||
|
||||
return next
|
||||
}
|
||||
|
||||
// === 无分组,新建 ===
|
||||
const income = data.category_type === 0 ? data.amount : '0'
|
||||
const expense = data.category_type === 1 ? data.amount : '0'
|
||||
|
||||
const newGroup: MoneyRecordGroup = {
|
||||
record_time: recordTime,
|
||||
income,
|
||||
expense,
|
||||
records: [data],
|
||||
}
|
||||
|
||||
// ---- 按日期(YYYY-MM-DD)倒序插入 ----
|
||||
// 最新日期插入前面,比如:2025-01-05 > 2025-01-03
|
||||
const index = next.records.findIndex(g => g.record_time < recordTime)
|
||||
|
||||
if (index === -1) {
|
||||
// 所有日期都比它大 → 插入最后
|
||||
next.records.push(newGroup)
|
||||
}
|
||||
else {
|
||||
// 插入正确位置
|
||||
next.records.splice(index, 0, newGroup)
|
||||
}
|
||||
|
||||
// 更新总计
|
||||
if (data.category_type === 0) {
|
||||
next.total_income = add(next.total_income, data.amount)
|
||||
}
|
||||
else if (data.category_type === 1) {
|
||||
next.total_expense = add(next.total_expense, data.amount)
|
||||
}
|
||||
|
||||
return next
|
||||
})
|
||||
}
|
||||
|
||||
return (
|
||||
<View
|
||||
className="flex-1"
|
||||
@@ -151,6 +218,7 @@ export default function Money() {
|
||||
}}
|
||||
onConfirm={(res) => {
|
||||
setShowAddDrawer(false)
|
||||
handleAddMoneyRecord(res)
|
||||
}}
|
||||
/>
|
||||
|
||||
|
||||
Reference in new issue
Block a user