From e8bd65e49910eedc3d178567c5896e963a12bf9c Mon Sep 17 00:00:00 2001 From: hzm <934585316@qq.com> Date: Wed, 18 Mar 2026 20:02:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BE=E7=BD=AE=E6=8C=81=E4=BB=93?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=8A=E6=97=A5=E9=A6=96=E6=AC=A1=E4=B9=B0?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/HoldingActionModal.jsx | 17 +++++++++++++++- app/components/HoldingEditModal.jsx | 19 +++++++++++++++++- app/page.jsx | 28 ++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/app/components/HoldingActionModal.jsx b/app/components/HoldingActionModal.jsx index a5ebe22..9b1d083 100644 --- a/app/components/HoldingActionModal.jsx +++ b/app/components/HoldingActionModal.jsx @@ -7,7 +7,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; -export default function HoldingActionModal({ fund, onClose, onAction, hasHistory }) { +export default function HoldingActionModal({ fund, onClose, onAction, hasHistory, pendingCount }) { const handleOpenChange = (open) => { if (!open) { onClose?.(); @@ -39,11 +39,26 @@ export default function HoldingActionModal({ fund, onClose, onAction, hasHistory display: 'flex', alignItems: 'center', gap: 4, + position: 'relative', }} title="查看交易记录" > 📜 交易记录 + {pendingCount > 0 && ( + + )} diff --git a/app/components/HoldingEditModal.jsx b/app/components/HoldingEditModal.jsx index c3fe8ea..cfb5a3e 100644 --- a/app/components/HoldingEditModal.jsx +++ b/app/components/HoldingEditModal.jsx @@ -8,7 +8,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; -export default function HoldingEditModal({ fund, holding, onClose, onSave }) { +export default function HoldingEditModal({ fund, holding, onClose, onSave, onOpenTrade }) { const [mode, setMode] = useState('amount'); // 'amount' | 'share' const dwjz = fund?.dwjz || fund?.gsz || 0; @@ -124,6 +124,23 @@ export default function HoldingEditModal({ fund, holding, onClose, onSave }) { 设置持仓 + {typeof onOpenTrade === 'function' && ( + + 今日买入?去加仓。 + + )} diff --git a/app/page.jsx b/app/page.jsx index 2dc15e1..afcca2d 100644 --- a/app/page.jsx +++ b/app/page.jsx @@ -883,7 +883,21 @@ export default function HomePage() { const handleClearConfirm = () => { if (clearConfirm?.fund) { - handleSaveHolding(clearConfirm.fund.code, { share: null, cost: null }); + const code = clearConfirm.fund.code; + handleSaveHolding(code, { share: null, cost: null }); + + setTransactions(prev => { + const next = { ...(prev || {}) }; + delete next[code]; + storageHelper.setItem('transactions', JSON.stringify(next)); + return next; + }); + + setPendingTrades(prev => { + const next = prev.filter(trade => trade.fundCode !== code); + storageHelper.setItem('pendingTrades', JSON.stringify(next)); + return next; + }); } setClearConfirm(null); }; @@ -1040,6 +1054,11 @@ export default function HomePage() { setPendingTrades(next); storageHelper.setItem('pendingTrades', JSON.stringify(next)); + // 如果该基金没有持仓数据,初始化持仓金额为 0 + if (!holdings[fund.code]) { + handleSaveHolding(fund.code, { share: 0, cost: 0 }); + } + setTradeModal({ open: false, fund: null, type: 'buy' }); showToast('净值暂未更新,已加入待处理队列', 'info'); return; @@ -4489,6 +4508,7 @@ export default function HomePage() { onClose={() => setActionModal({ open: false, fund: null })} onAction={(type) => handleAction(type, actionModal.fund)} hasHistory={!!transactions[actionModal.fund?.code]?.length} + pendingCount={pendingTrades.filter(t => t.fundCode === actionModal.fund?.code).length} /> )} @@ -4597,6 +4617,12 @@ export default function HomePage() { holding={holdings[holdingModal.fund?.code]} onClose={() => setHoldingModal({ open: false, fund: null })} onSave={(data) => handleSaveHolding(holdingModal.fund?.code, data)} + onOpenTrade={() => { + const f = holdingModal.fund; + if (!f) return; + setHoldingModal({ open: false, fund: null }); + setTradeModal({ open: true, fund: f, type: 'buy' }); + }} /> )}