From 7beac7516035c93d769e0e9819a166f305e1fd56 Mon Sep 17 00:00:00 2001
From: hzm <934585316@qq.com>
Date: Sun, 22 Mar 2026 21:31:30 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=B9=E5=8F=98=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=88=B0=E5=88=86=E7=BB=84=E6=8C=89=E9=92=AE=E4=BD=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/components/AddFundToGroupModal.jsx | 69 +++++++++++++++++++++--
app/page.jsx | 78 +++++++++++++-------------
2 files changed, 104 insertions(+), 43 deletions(-)
diff --git a/app/components/AddFundToGroupModal.jsx b/app/components/AddFundToGroupModal.jsx
index 260575d..b611e33 100644
--- a/app/components/AddFundToGroupModal.jsx
+++ b/app/components/AddFundToGroupModal.jsx
@@ -1,6 +1,7 @@
'use client';
-import { useState } from 'react';
+import { useState, useMemo } from 'react';
+import { Search } from 'lucide-react';
import { CloseIcon, PlusIcon } from './Icons';
import {
Dialog,
@@ -10,8 +11,17 @@ import {
export default function AddFundToGroupModal({ allFunds, currentGroupCodes, holdings = {}, onClose, onAdd }) {
const [selected, setSelected] = useState(new Set());
+ const [searchQuery, setSearchQuery] = useState('');
- const availableFunds = (allFunds || []).filter(f => !(currentGroupCodes || []).includes(f.code));
+ const availableFunds = useMemo(() => {
+ const base = (allFunds || []).filter(f => !(currentGroupCodes || []).includes(f.code));
+ if (!searchQuery.trim()) return base;
+ const query = searchQuery.trim().toLowerCase();
+ return base.filter(f =>
+ (f.name && f.name.toLowerCase().includes(query)) ||
+ (f.code && f.code.includes(query))
+ );
+ }, [allFunds, currentGroupCodes, searchQuery]);
const getHoldingAmount = (fund) => {
const holding = holdings[fund?.code];
@@ -44,6 +54,22 @@ export default function AddFundToGroupModal({ allFunds, currentGroupCodes, holdi
overlayClassName="modal-overlay"
style={{ maxWidth: '500px', width: '90vw', zIndex: 99 }}
>
+
所有基金已在该分组中
+{searchQuery.trim() ? '未找到匹配的基金' : '所有基金已在该分组中'}