This commit is contained in:
oneao committed 2025-11-16 22:24:32 +08:00
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)
}}
/>