fix: 清理未使用代码

InvestmentPlanningCenter.tsx | 移除 activeTab / setActiveTab state 和 Context
PlansPanel.tsx               | 移除 FiPlus、FiTarget,统一使用 FiFileText
 ReviewsPanel.tsx             | 移除未使用的 FiPlus 导入
investment.ts                | 移除 activeTab / setActiveTab 类型定义
This commit is contained in:
zdl
2025-12-05 11:09:49 +08:00
parent 20994cfb13
commit 90a59e031c
5 changed files with 108 additions and 107 deletions

View File

@@ -115,11 +115,11 @@ export interface PlanningContextValue {
/** 设置加载状态 */ /** 设置加载状态 */
setLoading: React.Dispatch<React.SetStateAction<boolean>>; setLoading: React.Dispatch<React.SetStateAction<boolean>>;
/** 当前激活的标签页索引 (0: 日历, 1: 计划, 2: 复盘) */ /** 打开新建计划模态框的触发计数器 */
activeTab: number; openPlanModalTrigger?: number;
/** 设置激活的标签页 */ /** 打开新建复盘模态框的触发计数器 */
setActiveTab: React.Dispatch<React.SetStateAction<number>>; openReviewModalTrigger?: number;
/** Chakra UI Toast 实例 */ /** Chakra UI Toast 实例 */
toast: { toast: {

View File

@@ -258,20 +258,6 @@ export const CalendarPanel: React.FC = () => {
return ( return (
<Box> <Box>
<Flex justify="flex-end" mb={4}>
<Button
size="sm"
colorScheme="purple"
leftIcon={<FiPlus />}
onClick={() => {
if (!selectedDate) setSelectedDate(dayjs());
onAddOpen();
}}
>
</Button>
</Flex>
{loading ? ( {loading ? (
<Center h="560px"> <Center h="560px">
<Spinner size="xl" color="purple.500" /> <Spinner size="xl" color="purple.500" />

View File

@@ -33,11 +33,15 @@ import {
TabPanel, TabPanel,
Spinner, Spinner,
Center, Center,
Button,
ButtonGroup,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { import {
FiCalendar, FiCalendar,
FiTarget, FiTarget,
FiFileText, FiFileText,
FiList,
FiPlus,
} from 'react-icons/fi'; } from 'react-icons/fi';
import { PlanningDataProvider } from './PlanningContext'; import { PlanningDataProvider } from './PlanningContext';
@@ -82,7 +86,10 @@ const InvestmentPlanningCenter: React.FC = () => {
// 全局数据状态 // 全局数据状态
const [allEvents, setAllEvents] = useState<InvestmentEvent[]>([]); const [allEvents, setAllEvents] = useState<InvestmentEvent[]>([]);
const [loading, setLoading] = useState<boolean>(false); const [loading, setLoading] = useState<boolean>(false);
const [activeTab, setActiveTab] = useState<number>(0); const [viewMode, setViewMode] = useState<'calendar' | 'list'>('list');
const [listTab, setListTab] = useState<number>(0); // 0: 我的计划, 1: 我的复盘
const [openPlanModalTrigger, setOpenPlanModalTrigger] = useState<number>(0);
const [openReviewModalTrigger, setOpenReviewModalTrigger] = useState<number>(0);
/** /**
* 加载所有事件数据(日历事件 + 计划 + 复盘) * 加载所有事件数据(日历事件 + 计划 + 复盘)
@@ -124,8 +131,8 @@ const InvestmentPlanningCenter: React.FC = () => {
loadAllData, loadAllData,
loading, loading,
setLoading, setLoading,
activeTab, openPlanModalTrigger,
setActiveTab, openReviewModalTrigger,
toast, toast,
bgColor, bgColor,
borderColor, borderColor,
@@ -147,20 +154,43 @@ const InvestmentPlanningCenter: React.FC = () => {
<Icon as={FiTarget} color="purple.500" boxSize={5} /> <Icon as={FiTarget} color="purple.500" boxSize={5} />
<Heading size="md"></Heading> <Heading size="md"></Heading>
</HStack> </HStack>
{/* 视图切换按钮组 */}
<ButtonGroup size="sm" isAttached variant="outline">
<Button
leftIcon={<Icon as={FiList} />}
colorScheme={viewMode === 'list' ? 'purple' : 'gray'}
variant={viewMode === 'list' ? 'solid' : 'outline'}
onClick={() => setViewMode('list')}
>
</Button>
<Button
leftIcon={<Icon as={FiCalendar} />}
colorScheme={viewMode === 'calendar' ? 'purple' : 'gray'}
variant={viewMode === 'calendar' ? 'solid' : 'outline'}
onClick={() => setViewMode('calendar')}
>
</Button>
</ButtonGroup>
</Flex> </Flex>
</CardHeader> </CardHeader>
<CardBody pt={0}> <CardBody pt={0}>
{viewMode === 'calendar' ? (
/* 日历视图 */
<Suspense fallback={<PanelLoadingFallback />}>
<CalendarPanel />
</Suspense>
) : (
/* 列表视图:我的计划 / 我的复盘 切换 */
<Tabs <Tabs
index={activeTab} index={listTab}
onChange={setActiveTab} onChange={setListTab}
variant="enclosed" variant="enclosed"
colorScheme="purple" colorScheme="purple"
> >
<TabList> <Flex justify="space-between" align="center" mb={4}>
<Tab> <TabList mb={0} borderBottom="none">
<Icon as={FiCalendar} mr={2} />
</Tab>
<Tab> <Tab>
<Icon as={FiTarget} mr={2} /> <Icon as={FiTarget} mr={2} />
({planCount}) ({planCount})
@@ -170,15 +200,23 @@ const InvestmentPlanningCenter: React.FC = () => {
({reviewCount}) ({reviewCount})
</Tab> </Tab>
</TabList> </TabList>
<Button
size="sm"
colorScheme="purple"
leftIcon={<Icon as={FiPlus} />}
onClick={() => {
if (listTab === 0) {
setOpenPlanModalTrigger(prev => prev + 1);
} else {
setOpenReviewModalTrigger(prev => prev + 1);
}
}}
>
{listTab === 0 ? '新建计划' : '新建复盘'}
</Button>
</Flex>
<TabPanels> <TabPanels>
{/* 日历视图面板 */}
<TabPanel px={0}>
<Suspense fallback={<PanelLoadingFallback />}>
<CalendarPanel />
</Suspense>
</TabPanel>
{/* 计划列表面板 */} {/* 计划列表面板 */}
<TabPanel px={0}> <TabPanel px={0}>
<Suspense fallback={<PanelLoadingFallback />}> <Suspense fallback={<PanelLoadingFallback />}>
@@ -194,6 +232,7 @@ const InvestmentPlanningCenter: React.FC = () => {
</TabPanel> </TabPanel>
</TabPanels> </TabPanels>
</Tabs> </Tabs>
)}
</CardBody> </CardBody>
</Card> </Card>
</PlanningDataProvider> </PlanningDataProvider>

View File

@@ -3,7 +3,7 @@
* 显示、编辑和管理投资计划 * 显示、编辑和管理投资计划
*/ */
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { import {
Box, Box,
Button, Button,
@@ -40,11 +40,10 @@ import {
TagCloseButton, TagCloseButton,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { import {
FiPlus,
FiEdit2, FiEdit2,
FiTrash2, FiTrash2,
FiSave, FiSave,
FiTarget, FiFileText,
FiCalendar, FiCalendar,
FiTrendingUp, FiTrendingUp,
FiHash, FiHash,
@@ -85,6 +84,7 @@ export const PlansPanel: React.FC = () => {
secondaryText, secondaryText,
cardBg, cardBg,
borderColor, borderColor,
openPlanModalTrigger,
} = usePlanningData(); } = usePlanningData();
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();
@@ -104,6 +104,13 @@ export const PlansPanel: React.FC = () => {
// 筛选计划列表(排除系统事件) // 筛选计划列表(排除系统事件)
const plans = allEvents.filter(event => event.type === 'plan' && event.source !== 'future'); const plans = allEvents.filter(event => event.type === 'plan' && event.source !== 'future');
// 监听外部触发打开新建模态框
useEffect(() => {
if (openPlanModalTrigger && openPlanModalTrigger > 0) {
handleOpenModal(null);
}
}, [openPlanModalTrigger]);
// 打开编辑/新建模态框 // 打开编辑/新建模态框
const handleOpenModal = (item: InvestmentEvent | null = null): void => { const handleOpenModal = (item: InvestmentEvent | null = null): void => {
if (item) { if (item) {
@@ -263,7 +270,7 @@ export const PlansPanel: React.FC = () => {
<Flex justify="space-between" align="start"> <Flex justify="space-between" align="start">
<VStack align="start" spacing={1} flex={1}> <VStack align="start" spacing={1} flex={1}>
<HStack> <HStack>
<Icon as={FiTarget} color="purple.500" /> <Icon as={FiFileText} color="purple.500" />
<Text fontWeight="bold" fontSize="lg"> <Text fontWeight="bold" fontSize="lg">
{item.title} {item.title}
</Text> </Text>
@@ -337,17 +344,6 @@ export const PlansPanel: React.FC = () => {
return ( return (
<Box> <Box>
<VStack align="stretch" spacing={4}> <VStack align="stretch" spacing={4}>
<Flex justify="flex-end">
<Button
size="sm"
colorScheme="purple"
leftIcon={<FiPlus />}
onClick={() => handleOpenModal(null)}
>
</Button>
</Flex>
{loading ? ( {loading ? (
<Center py={8}> <Center py={8}>
<Spinner size="xl" color="purple.500" /> <Spinner size="xl" color="purple.500" />
@@ -357,14 +353,6 @@ export const PlansPanel: React.FC = () => {
<VStack spacing={3}> <VStack spacing={3}>
<Icon as={FiTarget} boxSize={12} color="gray.300" /> <Icon as={FiTarget} boxSize={12} color="gray.300" />
<Text color={secondaryText}></Text> <Text color={secondaryText}></Text>
<Button
size="sm"
colorScheme="purple"
leftIcon={<FiPlus />}
onClick={() => handleOpenModal(null)}
>
</Button>
</VStack> </VStack>
</Center> </Center>
) : ( ) : (

View File

@@ -3,7 +3,7 @@
* 显示、编辑和管理投资复盘 * 显示、编辑和管理投资复盘
*/ */
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import { import {
Box, Box,
Button, Button,
@@ -40,7 +40,6 @@ import {
TagCloseButton, TagCloseButton,
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { import {
FiPlus,
FiEdit2, FiEdit2,
FiTrash2, FiTrash2,
FiSave, FiSave,
@@ -85,6 +84,7 @@ export const ReviewsPanel: React.FC = () => {
secondaryText, secondaryText,
cardBg, cardBg,
borderColor, borderColor,
openReviewModalTrigger,
} = usePlanningData(); } = usePlanningData();
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();
@@ -104,6 +104,13 @@ export const ReviewsPanel: React.FC = () => {
// 筛选复盘列表(排除系统事件) // 筛选复盘列表(排除系统事件)
const reviews = allEvents.filter(event => event.type === 'review' && event.source !== 'future'); const reviews = allEvents.filter(event => event.type === 'review' && event.source !== 'future');
// 监听外部触发打开新建模态框
useEffect(() => {
if (openReviewModalTrigger && openReviewModalTrigger > 0) {
handleOpenModal(null);
}
}, [openReviewModalTrigger]);
// 打开编辑/新建模态框 // 打开编辑/新建模态框
const handleOpenModal = (item: InvestmentEvent | null = null): void => { const handleOpenModal = (item: InvestmentEvent | null = null): void => {
if (item) { if (item) {
@@ -337,17 +344,6 @@ export const ReviewsPanel: React.FC = () => {
return ( return (
<Box> <Box>
<VStack align="stretch" spacing={4}> <VStack align="stretch" spacing={4}>
<Flex justify="flex-end">
<Button
size="sm"
colorScheme="green"
leftIcon={<FiPlus />}
onClick={() => handleOpenModal(null)}
>
</Button>
</Flex>
{loading ? ( {loading ? (
<Center py={8}> <Center py={8}>
<Spinner size="xl" color="green.500" /> <Spinner size="xl" color="green.500" />
@@ -357,14 +353,6 @@ export const ReviewsPanel: React.FC = () => {
<VStack spacing={3}> <VStack spacing={3}>
<Icon as={FiFileText} boxSize={12} color="gray.300" /> <Icon as={FiFileText} boxSize={12} color="gray.300" />
<Text color={secondaryText}></Text> <Text color={secondaryText}></Text>
<Button
size="sm"
colorScheme="green"
leftIcon={<FiPlus />}
onClick={() => handleOpenModal(null)}
>
</Button>
</VStack> </VStack>
</Center> </Center>
) : ( ) : (