| | |
| | | import React, { useState } from 'react'; |
| | | import { Spin } from 'antd'; |
| | | import './App.css'; |
| | | |
| | | // Context |
| | | import { CaseDataProvider, useCaseData } from './contexts/CaseDataContext'; |
| | | |
| | | // 调解看板组件 |
| | | import TopSection from './components/dashboard/TopSection'; |
| | |
| | | |
| | | // 弹窗组件 |
| | | import ToolModal from './components/common/ToolModal'; |
| | | import OutboundCallWidget from './components/common/OutboundCallWidget'; |
| | | |
| | | // 工具内容组件 |
| | | import WageCalculatorContent from './components/tools/WageCalculatorContent'; |
| | |
| | | import SimilarCaseContent from './components/tools/SimilarCaseContent'; |
| | | |
| | | function App() { |
| | | return ( |
| | | <CaseDataProvider> |
| | | <AppContent /> |
| | | </CaseDataProvider> |
| | | ); |
| | | } |
| | | |
| | | function AppContent() { |
| | | const [activeModal, setActiveModal] = useState(null); |
| | | const [currentStep, setCurrentStep] = useState(1); |
| | | const { loading } = useCaseData(); |
| | | |
| | | // 工具配置 |
| | | const toolConfig = { |
| | |
| | | }; |
| | | |
| | | return ( |
| | | <div className="app"> |
| | | {/* Font Awesome CDN */} |
| | | <link |
| | | rel="stylesheet" |
| | | href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" |
| | | /> |
| | | <Spin spinning={loading} tip="加载案件数据中..."> |
| | | <div className="app"> |
| | | {/* Font Awesome CDN */} |
| | | <link |
| | | rel="stylesheet" |
| | | href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" |
| | | /> |
| | | |
| | | {/* 顶部区域 */} |
| | | <TopSection /> |
| | | {/* 顶部区域 */} |
| | | <TopSection /> |
| | | |
| | | {/* 中间区域 */} |
| | | <section className="middle-section"> |
| | | {/* A区域:左侧主要内容 */} |
| | | <div className="area-a"> |
| | | {/* AI调解进度 */} |
| | | <MediationProgress currentStep={currentStep} /> |
| | | {/* 中间区域 */} |
| | | <section className="middle-section"> |
| | | {/* A区域:左侧主要内容 */} |
| | | <div className="area-a"> |
| | | {/* AI调解进度 */} |
| | | <MediationProgress /> |
| | | |
| | | {/* 选项卡容器 */} |
| | | <TabContainer /> |
| | | </div> |
| | | {/* 选项卡容器 */} |
| | | <TabContainer /> |
| | | </div> |
| | | |
| | | {/* B区域:右侧工具栏 */} |
| | | <ToolsPanel onToolClick={handleToolClick} /> |
| | | </section> |
| | | {/* B区域:右侧工具栏 */} |
| | | <ToolsPanel onToolClick={handleToolClick} /> |
| | | </section> |
| | | |
| | | {/* 底部悬浮控制看板 */} |
| | | <FloatingControlPanel currentStep={currentStep} elapsedTime="25分钟" /> |
| | | {/* 底部悬浮控制看板 */} |
| | | <FloatingControlPanel /> |
| | | |
| | | {/* 工具弹窗 */} |
| | | {activeModal && toolConfig[activeModal] && ( |
| | | <ToolModal |
| | | visible={true} |
| | | title={toolConfig[activeModal].title} |
| | | icon={toolConfig[activeModal].icon} |
| | | onClose={handleCloseModal} |
| | | > |
| | | {renderModalContent()} |
| | | </ToolModal> |
| | | )} |
| | | </div> |
| | | {/* 工具弹窗 */} |
| | | {activeModal && toolConfig[activeModal] && ( |
| | | <ToolModal |
| | | visible={true} |
| | | title={toolConfig[activeModal].title} |
| | | icon={toolConfig[activeModal].icon} |
| | | onClose={handleCloseModal} |
| | | > |
| | | {renderModalContent()} |
| | | </ToolModal> |
| | | )} |
| | | |
| | | {/* 智能外呼通话显示组件 - 默认隐藏,可主动触发显示 */} |
| | | <OutboundCallWidget /> |
| | | </div> |
| | | </Spin> |
| | | ); |
| | | } |
| | | |